[for-next 00/16] Add RDMA support for Intel IPU E2000 in irdma

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Tatyana Nikolova-Gross <tatyana.e.nikolova@xxxxxxxxx>

This irdma patch series is the last part of the staged submission introducing
RDMA RoCEv2 support for the IPU E2000 line of products, referred to as GEN3.

To support RDMA GEN3 devices, the irdma driver uses common functions and
definitions implemented by the Intel Inter-Driver Communication (IIDC) interface
and driver specific IIDC functionality exported by the idpf driver. This
interface is already in use between ice and irdma.

The IPU model can host one or more logical network endpoints called vPorts per
PCI function that are flexibly associated with a physical port or an internal
communication port. irdma exposes a verbs device per vPort.

The irdma driver communicates with the device Control Plane (CP) to discover
device capabilities and perform privileged operations through an RDMA-specific
messaging interface built atop the Infrastructure Data-Plane Function (IDPF)
mailbox and virtchannel protocol [1].

Other features as it pertains to GEN3 devices include:
* Host Memory Cache (HMC) resource initialization based on FW capability
* Shared Receive Queue (SRQ) Support
* Atomic Operations Support 
* Completion Queue Element (CQE) Error and Flush Handling
* 64-byte CQEs Support
* Type2 Memory Windows and Timestamping Support

These patches are split from the submission
"Add RDMA support for Intel IPU E2000 (GEN3)" [2].
The patches have been tested on a range of hosts and platforms with a variety
of general RDMA applications which include standalone verbs (rping, perftest, etc.),
storage and HPC applications.

Changelog:

Changes since split:
* Use exported symbols instead of device ops struct
* Move ice/idpf specific functionality to icrdma_/ig3rdma_* files
* Adapt to the renamed IIDC structs/functions iidc_*
* Use iidc_priv struct to access core driver specific info
* Remove push mode support for GEN3

At [4]:
* Move the call to get RDMA features just after CQP is created,
otherwise the feature flags are not defined before used.
* Move the check for supported atomic operations after reading
the RDMA feature info to correctly enable atomics.
* Round up to power of two the resource size for Read Responses and
Transmit Queue elements.
* Do not use the Work Queue element index passed in the Asynchronous Event
info to get SRQ context, because it is incorrect.
* Fix detection of Completion Queue (CQ) empty when 64-byte CQ elements
are enabled.
* Minor improvements and cleanup.

Patch series at [3] includes only idpf changes.

[1] https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
[2] https://lore.kernel.org/all/20240724233917.704-1-tatyana.e.nikolova@xxxxxxxxx/
[3] https://lore.kernel.org/all/20240824031924.421-1-tatyana.e.nikolova@xxxxxxxxx/
[4] https://lore.kernel.org/all/20250207194931.1569-1-tatyana.e.nikolova@xxxxxxxxx/

Christopher Bednarz (1):
  RDMA/irdma: Discover and set up GEN3 hardware register layout

Faisal Latif (2):
  RDMA/irdma: Add SRQ support
  RDMA/irdma: Add Atomic Operations support

Krzysztof Czurylo (2):
  RDMA/irdma: Add GEN3 CQP support with deferred completions
  RDMA/irdma: Add GEN3 HW statistics support

Mustafa Ismail (3):
  RDMA/irdma: Refactor GEN2 auxiliary driver
  RDMA/irdma: Add GEN3 core driver support
  RDMA/irdma: Introduce GEN3 vPort driver support

Shiraz Saleem (6):
  RDMA/irdma: Add GEN3 support for AEQ and CEQ
  RDMA/irdma: Add GEN3 virtual QP1 support
  RDMA/irdma: Extend QP context programming for GEN3
  RDMA/irdma: Support 64-byte CQEs and GEN3 CQE opcode decoding
  RDMA/irdma: Restrict Memory Window and CQE Timestamping to GEN3
  RDMA/irdma: Extend CQE Error and Flush Handling for GEN3 Devices

Tatyana Nikolova (1):
  RDMA/irdma: Update Kconfig

Vinoth Kumar Chandra Mohan (1):
  RDMA/irdma: Add support for V2 HMC resource management scheme

 drivers/infiniband/hw/irdma/Kconfig      |    7 +-
 drivers/infiniband/hw/irdma/Makefile     |    4 +
 drivers/infiniband/hw/irdma/ctrl.c       | 1468 ++++++++++++++++++++--
 drivers/infiniband/hw/irdma/defs.h       |  264 ++--
 drivers/infiniband/hw/irdma/hmc.c        |   18 +-
 drivers/infiniband/hw/irdma/hmc.h        |   19 +-
 drivers/infiniband/hw/irdma/hw.c         |  363 +++---
 drivers/infiniband/hw/irdma/i40iw_hw.c   |    2 +
 drivers/infiniband/hw/irdma/i40iw_hw.h   |    2 +
 drivers/infiniband/hw/irdma/i40iw_if.c   |    3 +
 drivers/infiniband/hw/irdma/icrdma_hw.c  |    3 +
 drivers/infiniband/hw/irdma/icrdma_hw.h  |    5 +-
 drivers/infiniband/hw/irdma/icrdma_if.c  |  343 +++++
 drivers/infiniband/hw/irdma/ig3rdma_hw.c |  170 +++
 drivers/infiniband/hw/irdma/ig3rdma_hw.h |   32 +
 drivers/infiniband/hw/irdma/ig3rdma_if.c |  232 ++++
 drivers/infiniband/hw/irdma/irdma.h      |   22 +-
 drivers/infiniband/hw/irdma/main.c       |  371 ++----
 drivers/infiniband/hw/irdma/main.h       |   35 +-
 drivers/infiniband/hw/irdma/pble.c       |   20 +-
 drivers/infiniband/hw/irdma/protos.h     |    1 +
 drivers/infiniband/hw/irdma/puda.h       |    4 +-
 drivers/infiniband/hw/irdma/type.h       |  221 +++-
 drivers/infiniband/hw/irdma/uda_d.h      |    5 +-
 drivers/infiniband/hw/irdma/uk.c         |  303 ++++-
 drivers/infiniband/hw/irdma/user.h       |  267 +++-
 drivers/infiniband/hw/irdma/utils.c      |  112 +-
 drivers/infiniband/hw/irdma/verbs.c      |  825 ++++++++++--
 drivers/infiniband/hw/irdma/verbs.h      |   44 +
 drivers/infiniband/hw/irdma/virtchnl.c   |  618 +++++++++
 drivers/infiniband/hw/irdma/virtchnl.h   |  176 +++
 include/uapi/rdma/irdma-abi.h            |   16 +-
 32 files changed, 5120 insertions(+), 855 deletions(-)
 create mode 100644 drivers/infiniband/hw/irdma/icrdma_if.c
 create mode 100644 drivers/infiniband/hw/irdma/ig3rdma_hw.c
 create mode 100644 drivers/infiniband/hw/irdma/ig3rdma_hw.h
 create mode 100644 drivers/infiniband/hw/irdma/ig3rdma_if.c
 create mode 100644 drivers/infiniband/hw/irdma/virtchnl.c
 create mode 100644 drivers/infiniband/hw/irdma/virtchnl.h

-- 
2.42.0





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux