mbox series

[RFC,net-next,00/19] pds core and vdpa drivers

Message ID 20221118225656.48309-1-snelson@pensando.io (mailing list archive)
Headers show
Series pds core and vdpa drivers | expand

Message

Shannon Nelson Nov. 18, 2022, 10:56 p.m. UTC
Summary:
--------
This is a first draft patchset of a pair of new drivers for use with
the AMD/Pensando Distributed Services Card (DSC), intended to work along
side the existing ionic Ethernet driver to provide support of devices
for better virtualization support.  These drivers work together using
the auxiliary_bus for client drivers (pds_vdpa) to use the core
configuration services (pds_core).

This large patchset is both drivers combined in order to give a full
RFC view and can be split into separate pds_core and pds_vdpa patchsets
in the future.


Detail:
-------
AMD/Pensando is making available a new set of devices for supporting vDPA,
VFio, and potentially other features in the Distributed Services Card
(DSC).  These features are implemented through a PF that serves as a Core
device for controlling and configuring its VF devices.  These VF devices
have separate drivers that use the auxiliary_bus to work through the Core
device as the control path.

Currently, the DSC supports standard ethernet operations using the
ionic driver.  This is not replaced by the Core-based devices - these
new devices are in addition to the existing Ethernet device.  Typical DSC
configurations will include both PDS devices and Ionic Eth devices.

The Core device is a new PCI PF device managed by a new driver 'pds_core'.
It sets up a small representer netdev for managing the associated VFs,
and sets up auxiliary_bus devices for each VF for communicating with
the drivers for the VF devices.  The VFs may be for VFio/NVMe or vDPA,
and other services in the future; these VF types are selected as part
of the DSC internal FW configurations, which is out of the scope of
this patchset.  The Core device sets up devlink parameters for enabling
available feature sets.

Once a feature set is enabled, auxiliary_bus devices are created for each
VF that supports the feature.  These auxiliary_bus devices are named by
their feature plus VF PCI bdf so the auxiliary device driver can find
its related VF PCI driver instance.  The VF's driver then connects to
and uses this auxiliary_device to do control path configuration of the
feature through the PF device.

A cheap ASCII diagram of vDPA instance looks something like this and can
then be used with the vdpa kernel module to provide devices for virtio_vdpa
kernel module for host interfaces, vhost_vdpa kernel module for interfaces
exported into your favorite VM.


                                  ,----------.
                                  |   vdpa   |
                                  '----------'
                                       |
                                     vdpa_dev
                                    ctl   data
                                     |     ||
           pds_core.vDPA.2305 <---+  |     ||
                   |              |  |     ||
       netdev      |              |  |     ||
          |        |              |  |     ||
         .------------.         .------------.
         |  pds_core  |         |  pds_vdpa  |
         '------------'         '------------'
               ||                     ||
	     09:00.0                09:00.1
== PCI =========================================================
               ||                     ||
          .----------.           .----------.
    ,-----|    PF    |-----------|    VF    |-------,
    |     '----------'           -----------'       |
    |                     DSC                       |
    |                                               |
    -------------------------------------------------


The pds_core driver is targeted to reside in
drivers/net/ethernet/pensando/pds_core and the pds_vdpa driver lands
in drivers/vdpa/pds.  There are some shared include files placed in
include/linux/pds, which seemed reasonable at the time, but I've recently
seen suggestions of putting files like this under include/net instead,
so that may be up for some discussion.

I appreciate any and all time folks can spend reviewing and commenting.

Thanks,
sln

Shannon Nelson (19):
  pds_core: initial framework for pds_core driver
  pds_core: add devcmd device interfaces
  pds_core: health timer and workqueue
  pds_core: set up device and adminq
  pds_core: Add adminq processing and commands
  pds_core: add FW update feature to devlink
  pds_core: set up the VIF definitions and defaults
  pds_core: initial VF configuration
  pds_core: add auxiliary_bus devices
  pds_core: devlink params for enabling VIF support
  pds_core: add the aux client API
  pds_core: publish events to the clients
  pds_core: Kconfig and pds_core.rst
  pds_vdpa: Add new PCI VF device for PDS vDPA services
  pds_vdpa: virtio bar setup for vdpa
  pds_vdpa: add auxiliary driver
  pds_vdpa: add vdpa config client commands
  pds_vdpa: add support for vdpa and vdpamgmt interfaces
  pds_vdpa: add Kconfig entry and pds_vdpa.rst

 .../ethernet/pensando/pds_core.rst            | 162 ++++
 .../ethernet/pensando/pds_vdpa.rst            |  85 ++
 MAINTAINERS                                   |   4 +-
 drivers/net/ethernet/pensando/Kconfig         |  12 +
 .../net/ethernet/pensando/pds_core/Makefile   |  15 +
 .../net/ethernet/pensando/pds_core/adminq.c   | 299 +++++++
 .../net/ethernet/pensando/pds_core/auxbus.c   | 306 +++++++
 drivers/net/ethernet/pensando/pds_core/core.c | 616 ++++++++++++++
 drivers/net/ethernet/pensando/pds_core/core.h | 342 ++++++++
 .../net/ethernet/pensando/pds_core/debugfs.c  | 262 ++++++
 drivers/net/ethernet/pensando/pds_core/dev.c  | 403 +++++++++
 .../net/ethernet/pensando/pds_core/devlink.c  | 310 +++++++
 drivers/net/ethernet/pensando/pds_core/fw.c   | 192 +++++
 drivers/net/ethernet/pensando/pds_core/main.c | 440 ++++++++++
 .../net/ethernet/pensando/pds_core/netdev.c   | 504 +++++++++++
 drivers/vdpa/Kconfig                          |   7 +
 drivers/vdpa/pds/Makefile                     |  11 +
 drivers/vdpa/pds/aux_drv.c                    | 156 ++++
 drivers/vdpa/pds/aux_drv.h                    |  28 +
 drivers/vdpa/pds/cmds.c                       | 266 ++++++
 drivers/vdpa/pds/cmds.h                       |  17 +
 drivers/vdpa/pds/debugfs.c                    | 234 +++++
 drivers/vdpa/pds/debugfs.h                    |  28 +
 drivers/vdpa/pds/pci_drv.c                    | 172 ++++
 drivers/vdpa/pds/pci_drv.h                    |  49 ++
 drivers/vdpa/pds/vdpa_dev.c                   | 796 ++++++++++++++++++
 drivers/vdpa/pds/vdpa_dev.h                   |  60 ++
 drivers/vdpa/pds/virtio_pci.c                 | 283 +++++++
 include/linux/pds/pds_adminq.h                | 643 ++++++++++++++
 include/linux/pds/pds_auxbus.h                |  88 ++
 include/linux/pds/pds_common.h                |  99 +++
 include/linux/pds/pds_core_if.h               | 582 +++++++++++++
 include/linux/pds/pds_intr.h                  | 160 ++++
 include/linux/pds/pds_vdpa.h                  | 219 +++++
 34 files changed, 7849 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/networking/device_drivers/ethernet/pensando/pds_core.rst
 create mode 100644 Documentation/networking/device_drivers/ethernet/pensando/pds_vdpa.rst
 create mode 100644 drivers/net/ethernet/pensando/pds_core/Makefile
 create mode 100644 drivers/net/ethernet/pensando/pds_core/adminq.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/auxbus.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/core.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/core.h
 create mode 100644 drivers/net/ethernet/pensando/pds_core/debugfs.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/dev.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/devlink.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/fw.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/main.c
 create mode 100644 drivers/net/ethernet/pensando/pds_core/netdev.c
 create mode 100644 drivers/vdpa/pds/Makefile
 create mode 100644 drivers/vdpa/pds/aux_drv.c
 create mode 100644 drivers/vdpa/pds/aux_drv.h
 create mode 100644 drivers/vdpa/pds/cmds.c
 create mode 100644 drivers/vdpa/pds/cmds.h
 create mode 100644 drivers/vdpa/pds/debugfs.c
 create mode 100644 drivers/vdpa/pds/debugfs.h
 create mode 100644 drivers/vdpa/pds/pci_drv.c
 create mode 100644 drivers/vdpa/pds/pci_drv.h
 create mode 100644 drivers/vdpa/pds/vdpa_dev.c
 create mode 100644 drivers/vdpa/pds/vdpa_dev.h
 create mode 100644 drivers/vdpa/pds/virtio_pci.c
 create mode 100644 include/linux/pds/pds_adminq.h
 create mode 100644 include/linux/pds/pds_auxbus.h
 create mode 100644 include/linux/pds/pds_common.h
 create mode 100644 include/linux/pds/pds_core_if.h
 create mode 100644 include/linux/pds/pds_intr.h
 create mode 100644 include/linux/pds/pds_vdpa.h