forked from Minki/linux
devlink: Extend devlink port documentation for subfunctions
Add devlink port documentation for subfunction management. Signed-off-by: Parav Pandit <parav@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
c736111cf8
commit
6474ce7ecd
@ -1,5 +1,7 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
.. _auxiliary_bus:
|
||||
|
||||
=============
|
||||
Auxiliary Bus
|
||||
=============
|
||||
|
@ -34,6 +34,9 @@ Devlink port flavours are described below.
|
||||
* - ``DEVLINK_PORT_FLAVOUR_PCI_VF``
|
||||
- This indicates an eswitch port representing a port of PCI
|
||||
virtual function (VF).
|
||||
* - ``DEVLINK_PORT_FLAVOUR_PCI_SF``
|
||||
- This indicates an eswitch port representing a port of PCI
|
||||
subfunction (SF).
|
||||
* - ``DEVLINK_PORT_FLAVOUR_VIRTUAL``
|
||||
- This indicates a virtual port for the PCI virtual function.
|
||||
|
||||
@ -57,8 +60,9 @@ Devlink port can have a different type based on the link layer described below.
|
||||
PCI controllers
|
||||
---------------
|
||||
In most cases a PCI device has only one controller. A controller consists of
|
||||
potentially multiple physical and virtual functions. A function consists
|
||||
of one or more ports. This port is represented by the devlink eswitch port.
|
||||
potentially multiple physical, virtual functions and subfunctions. A function
|
||||
consists of one or more ports. This port is represented by the devlink eswitch
|
||||
port.
|
||||
|
||||
A PCI device connected to multiple CPUs or multiple PCI root complexes or a
|
||||
SmartNIC, however, may have multiple controllers. For a device with multiple
|
||||
@ -111,8 +115,85 @@ function. Usually it means, user should configure function attribute
|
||||
before a bus specific device for the function is created. However, when
|
||||
SRIOV is enabled, virtual function devices are created on the PCI bus.
|
||||
Hence, function attribute should be configured before binding virtual
|
||||
function device to the driver.
|
||||
function device to the driver. For subfunctions, this means user should
|
||||
configure port function attribute before activating the port function.
|
||||
|
||||
A user may set the hardware address of the function using
|
||||
'devlink port function set hw_addr' command. For Ethernet port function
|
||||
this means a MAC address.
|
||||
|
||||
Subfunction
|
||||
============
|
||||
|
||||
Subfunction is a lightweight function that has a parent PCI function on which
|
||||
it is deployed. Subfunction is created and deployed in unit of 1. Unlike
|
||||
SRIOV VFs, a subfunction doesn't require its own PCI virtual function.
|
||||
A subfunction communicates with the hardware through the parent PCI function.
|
||||
|
||||
To use a subfunction, 3 steps setup sequence is followed.
|
||||
(1) create - create a subfunction;
|
||||
(2) configure - configure subfunction attributes;
|
||||
(3) deploy - deploy the subfunction;
|
||||
|
||||
Subfunction management is done using devlink port user interface.
|
||||
User performs setup on the subfunction management device.
|
||||
|
||||
(1) Create
|
||||
----------
|
||||
A subfunction is created using a devlink port interface. A user adds the
|
||||
subfunction by adding a devlink port of subfunction flavour. The devlink
|
||||
kernel code calls down to subfunction management driver (devlink ops) and asks
|
||||
it to create a subfunction devlink port. Driver then instantiates the
|
||||
subfunction port and any associated objects such as health reporters and
|
||||
representor netdevice.
|
||||
|
||||
(2) Configure
|
||||
-------------
|
||||
A subfunction devlink port is created but it is not active yet. That means the
|
||||
entities are created on devlink side, the e-switch port representor is created,
|
||||
but the subfunction device itself it not created. A user might use e-switch port
|
||||
representor to do settings, putting it into bridge, adding TC rules, etc. A user
|
||||
might as well configure the hardware address (such as MAC address) of the
|
||||
subfunction while subfunction is inactive.
|
||||
|
||||
(3) Deploy
|
||||
----------
|
||||
Once a subfunction is configured, user must activate it to use it. Upon
|
||||
activation, subfunction management driver asks the subfunction management
|
||||
device to instantiate the subfunction device on particular PCI function.
|
||||
A subfunction device is created on the :ref:`Documentation/driver-api/auxiliary_bus.rst <auxiliary_bus>`.
|
||||
At this point a matching subfunction driver binds to the subfunction's auxiliary device.
|
||||
|
||||
Terms and Definitions
|
||||
=====================
|
||||
|
||||
.. list-table:: Terms and Definitions
|
||||
:widths: 22 90
|
||||
|
||||
* - Term
|
||||
- Definitions
|
||||
* - ``PCI device``
|
||||
- A physical PCI device having one or more PCI bus consists of one or
|
||||
more PCI controllers.
|
||||
* - ``PCI controller``
|
||||
- A controller consists of potentially multiple physical functions,
|
||||
virtual functions and subfunctions.
|
||||
* - ``Port function``
|
||||
- An object to manage the function of a port.
|
||||
* - ``Subfunction``
|
||||
- A lightweight function that has parent PCI function on which it is
|
||||
deployed.
|
||||
* - ``Subfunction device``
|
||||
- A bus device of the subfunction, usually on a auxiliary bus.
|
||||
* - ``Subfunction driver``
|
||||
- A device driver for the subfunction auxiliary device.
|
||||
* - ``Subfunction management device``
|
||||
- A PCI physical function that supports subfunction management.
|
||||
* - ``Subfunction management driver``
|
||||
- A device driver for PCI physical function that supports
|
||||
subfunction management using devlink port interface.
|
||||
* - ``Subfunction host driver``
|
||||
- A device driver for PCI physical function that hosts subfunction
|
||||
devices. In most cases it is same as subfunction management driver. When
|
||||
subfunction is used on external controller, subfunction management and
|
||||
host drivers are different.
|
||||
|
Loading…
Reference in New Issue
Block a user