1. 07 4月, 2017 5 次提交
    • R
      qed: Don't use main-ptt in unrelated flows · 15582962
      Rahul Verma 提交于
      In order to access HW registers driver needs to acquire a PTT entry
      [mapping between bar memory and internal chip address].
      Since acquiring PTT entries could fail [at least in theory] as their
      number is finite and other flows can hold them, we reserve special PTT
      entries for 'important' enough flows - ones we want to guarantee that
      would not be susceptible to such issues.
      
      One such special entry is the 'main' PTT which is meant to be used in
      flows such as chip initialization and de-initialization.
      However, there are other flows that are also using that same entry
      for their own purpose, and might run concurrently with the original
      flows [notice that for most cases using the main-ptt by mistake, such
      a race is still impossible, at least today].
      
      This patch re-organizes the various functions that currently use the
      main_ptt in one of two ways:
      
        - If a function shouldn't use the main_ptt it starts acquiring and
          releasing it's own PTT entry and use it instead. Notice if those
          functions previously couldn't fail, they now can [as acquisition
          might fail].
      
        - Change the prototypes so that the main_ptt would be received as
          a parameter [instead of explicitly accessing it].
          This prevents the future risk of adding codes that introduces new
          use-cases for flows using the main_ptt, ones that might be in race
          with the actual 'main' flows.
      Signed-off-by: NRahul Verma <Rahul.Verma@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      15582962
    • M
      qed: Warn PTT usage by wrong hw-function · 3a50d351
      Mintz, Yuval 提交于
      PTT entries are per-hwfn; If some errneous flow is trying
      to use a PTT belonging to a differnet hwfn warn user, as this
      can break every register accessing flow later and is very hard
      to root-cause.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3a50d351
    • K
      qlge: avoid format string exposure in workqueue · df656bf6
      Kees Cook 提交于
      While unlikely, this makes sure the workqueue name won't be processed
      as a format string.
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      df656bf6
    • M
      qed: Correct MSI-x for storage · 2f782278
      Mintz, Yuval 提交于
      When qedr is enabled, qed would try dividing the msi-x vectors between
      L2 and RoCE, starting with L2 and providing it with sufficient vectors
      for its queues.
      
      Problem is qed would also do that for storage partitions, and as those
      don't need queues it would lead qed to award those partitions with 0
      msi-x vectors, causing them to believe theye're using INTa and
      preventing them from operating.
      
      Fixes: 51ff1725 ("qed: Add support for RoCE hw init")
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2f782278
    • C
      qed: fix missing break in OOO_LB_TC case · 827d240a
      Colin Ian King 提交于
      There seems to be a missing break on the OOO_LB_TC case, pq_id
      is being assigned and then re-assigned on the fall through default
      case and that seems suspect.
      
      Detected by CoverityScan, CID#1424402 ("Missing break in switch")
      
      Fixes: b5a9ee7c ("qed: Revise QM cofiguration")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Acked-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      827d240a
  2. 05 4月, 2017 1 次提交
  3. 04 4月, 2017 5 次提交
  4. 29 3月, 2017 7 次提交
    • M
      qed: Use BDQ resource for storage protocols · d0d40a73
      Mintz, Yuval 提交于
      Until now, qed used some port-defined value as BDQ index for both iSCSI
      and FCoE.
      
      As management firmware now treats BDQ as a resource and tells each PF
      its BDQ-range, start using a valure from that range instead.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d0d40a73
    • T
      qed: Utilize resource-lock based scheme · 9c8517c4
      Tomer Tayar 提交于
      Management firmware is used as an arbiter between the various PFs
      in matters of resources, but some of the resources that need to
      be divided are dependent on the non-management firmware used,
      so management firmware first needs to be told how many resources
      there are before trying to divide them.
      
      As part of the initialization sequence, driver would first inform
      the management firmware of the available resources under
      a dedicated resource lock, and afterwards request for various
      resources which might be based on the previous set values.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9c8517c4
    • T
      qed: Support management-based resource locking · 95691c9c
      Tomer Tayar 提交于
      Global locking can't properly be used to synchronize between different
      PFs in all scenarios, as those instances might reside in different
      logical partitions [e.g., when a PF is assigned via PDA to some VM].
      
      The management firmware provides a generic infrastructure for
      device locks. For each 'resource', it's guaranteed it could be acquired
      by at most a single PF at any given time [or by management firmware].
      
      This patch adds the necessary logic in qed for utilizing said
      infrastructure, implementing lock/unlock internal APIs.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      95691c9c
    • M
      qed: Send pf-flr as part of initialization · 18a69e36
      Mintz, Yuval 提交于
      During HW initialization, driver would set various registers to their
      needed values - but it assumes all registers start at their reset-value,
      so there's no need to re-configure a register's default value.
      
      This assumption might be incorrect, e.g., in case of preboot driver
      running and initializing the driver prior to our driver.
      
      To overcome this, we now ask management firmware to initiate a PF-flr
      early during the initialization sequence. That would return everything
      in the PF's scope back to default and prevent previous configurations
      from still being applied.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      18a69e36
    • T
      qed: Move to new load request scheme · 5d24bcf1
      Tomer Tayar 提交于
      Management firmware is used as an arbiter between the various PFs
      in regard to loading - it causes the various PFs to load/unload
      sequentially and informs each of its appropriate rule in the init.
      
      But the existing flow is too weak to handle some scenarios where
      PFs aren't properly cleaned prior to loading.
      The significant scenarios falling under this criteria:
        a. Preboot drivers in some environment can't properly unload.
        b. Unexpected driver replacement [kdump, PDA].
      
      Modern management firmware supports a more intricate loading flow,
      where the driver has the ability to overcome previous limitations.
      This moves qed into using this newer scheme.
      
      Notice new scheme is backward compatible, so new drivers would
      still be able to load properly on top of older management firmwares
      and vice versa.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5d24bcf1
    • M
      qed: hw_init() to receive parameter-struct · c0c2d0b4
      Mintz, Yuval 提交于
      We'll soon need additional information, so start by changing
      the infrastructure to receive the initializing variables
      via a parameter struct.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c0c2d0b4
    • T
      qed: Correct HW stop flow · 1226337a
      Tomer Tayar 提交于
      Management firmware is used as arbiter between different PFs
      which are loading/unloading, but in order to use the synchronization
      it offers the contending configurations need to be applied either
      between their LOAD_REQ <-> LOAD_DONE or UNLOAD_REQ <-> UNLOAD_DONE
      management firmware commands.
      
      Existing HW stop flow utilizes 2 different functions: qed_hw_stop() and
      qed_hw_reset() which don't abide this requirement; Most of the closure
      is doing outside the scope of the unload request.
      
      This patch removes qed_hw_reset() and places the relevant stop
      functionality underneath the management firmware protection.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1226337a
  5. 24 3月, 2017 6 次提交
  6. 22 3月, 2017 9 次提交
  7. 16 3月, 2017 1 次提交
  8. 15 3月, 2017 6 次提交