db27370b57
Replace -w / --pci-whitelist with -a / --allow options and --pci-blacklist with --block. The -b short option remains unchanged. Allow the old options for now, but print a nag warning since old options are deprecated. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Luca Boccassi <bluca@debian.org> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
245 lines
9.3 KiB
ReStructuredText
245 lines
9.3 KiB
ReStructuredText
.. SPDX-License-Identifier: BSD-3-Clause
|
|
Copyright(c) 2020 Intel Corporation
|
|
|
|
Intel(R) ACC100 5G/4G FEC Poll Mode Driver
|
|
==========================================
|
|
|
|
The BBDEV ACC100 5G/4G FEC poll mode driver (PMD) supports an
|
|
implementation of a VRAN FEC wireless acceleration function.
|
|
This device is also known as Mount Bryce.
|
|
|
|
Features
|
|
--------
|
|
|
|
ACC100 5G/4G FEC PMD supports the following features:
|
|
|
|
- LDPC Encode in the DL (5GNR)
|
|
- LDPC Decode in the UL (5GNR)
|
|
- Turbo Encode in the DL (4G)
|
|
- Turbo Decode in the UL (4G)
|
|
- 16 VFs per PF (physical device)
|
|
- Maximum of 128 queues per VF
|
|
- PCIe Gen-3 x16 Interface
|
|
- MSI
|
|
- SR-IOV
|
|
|
|
ACC100 5G/4G FEC PMD supports the following BBDEV capabilities:
|
|
|
|
* For the LDPC encode operation:
|
|
- ``RTE_BBDEV_LDPC_CRC_24B_ATTACH`` : set to attach CRC24B to CB(s)
|
|
- ``RTE_BBDEV_LDPC_RATE_MATCH`` : if set then do not do Rate Match bypass
|
|
- ``RTE_BBDEV_LDPC_INTERLEAVER_BYPASS`` : if set then bypass interleaver
|
|
|
|
* For the LDPC decode operation:
|
|
- ``RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK`` : check CRC24B from CB(s)
|
|
- ``RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE`` : disable early termination
|
|
- ``RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP`` : drops CRC24B bits appended while decoding
|
|
- ``RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE`` : provides an input for HARQ combining
|
|
- ``RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE`` : provides an input for HARQ combining
|
|
- ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_IN_ENABLE`` : HARQ memory input is internal
|
|
- ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_OUT_ENABLE`` : HARQ memory output is internal
|
|
- ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_LOOPBACK`` : loopback data to/from HARQ memory
|
|
- ``RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_FILLERS`` : HARQ memory includes the fillers bits
|
|
- ``RTE_BBDEV_LDPC_DEC_SCATTER_GATHER`` : supports scatter-gather for input/output data
|
|
- ``RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION`` : supports compression of the HARQ input/output
|
|
- ``RTE_BBDEV_LDPC_LLR_COMPRESSION`` : supports LLR input compression
|
|
|
|
* For the turbo encode operation:
|
|
- ``RTE_BBDEV_TURBO_CRC_24B_ATTACH`` : set to attach CRC24B to CB(s)
|
|
- ``RTE_BBDEV_TURBO_RATE_MATCH`` : if set then do not do Rate Match bypass
|
|
- ``RTE_BBDEV_TURBO_ENC_INTERRUPTS`` : set for encoder dequeue interrupts
|
|
- ``RTE_BBDEV_TURBO_RV_INDEX_BYPASS`` : set to bypass RV index
|
|
- ``RTE_BBDEV_TURBO_ENC_SCATTER_GATHER`` : supports scatter-gather for input/output data
|
|
|
|
* For the turbo decode operation:
|
|
- ``RTE_BBDEV_TURBO_CRC_TYPE_24B`` : check CRC24B from CB(s)
|
|
- ``RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE`` : perform subblock de-interleave
|
|
- ``RTE_BBDEV_TURBO_DEC_INTERRUPTS`` : set for decoder dequeue interrupts
|
|
- ``RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN`` : set if negative LLR encoder i/p is supported
|
|
- ``RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN`` : set if positive LLR encoder i/p is supported
|
|
- ``RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP`` : keep CRC24B bits appended while decoding
|
|
- ``RTE_BBDEV_TURBO_EARLY_TERMINATION`` : set early termination feature
|
|
- ``RTE_BBDEV_TURBO_DEC_SCATTER_GATHER`` : supports scatter-gather for input/output data
|
|
- ``RTE_BBDEV_TURBO_HALF_ITERATION_EVEN`` : set half iteration granularity
|
|
|
|
Installation
|
|
------------
|
|
|
|
Section 3 of the DPDK manual provides instructions on installing and compiling DPDK.
|
|
|
|
DPDK requires hugepages to be configured as detailed in section 2 of the DPDK manual.
|
|
The bbdev test application has been tested with a configuration 40 x 1GB hugepages. The
|
|
hugepage configuration of a server may be examined using:
|
|
|
|
.. code-block:: console
|
|
|
|
grep Huge* /proc/meminfo
|
|
|
|
|
|
Initialization
|
|
--------------
|
|
|
|
When the device first powers up, its PCI Physical Functions (PF) can be listed through this command:
|
|
|
|
.. code-block:: console
|
|
|
|
sudo lspci -vd8086:0d5c
|
|
|
|
The physical and virtual functions are compatible with Linux UIO drivers:
|
|
``vfio`` and ``igb_uio``. However, in order to work the ACC100 5G/4G
|
|
FEC device first needs to be bound to one of these linux drivers through DPDK.
|
|
|
|
|
|
Bind PF UIO driver(s)
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
|
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
|
|
|
The igb_uio driver may be bound to the PF PCI device using one of three methods:
|
|
|
|
|
|
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
|
the UIO driver by repeating this command for every function.
|
|
|
|
.. code-block:: console
|
|
|
|
cd <dpdk-top-level-directory>
|
|
insmod ./build/kmod/igb_uio.ko
|
|
echo "8086 0d5c" > /sys/bus/pci/drivers/igb_uio/new_id
|
|
lspci -vd8086:0d5c
|
|
|
|
|
|
2. Another way to bind PF with DPDK UIO driver is by using the ``dpdk-devbind.py`` tool
|
|
|
|
.. code-block:: console
|
|
|
|
cd <dpdk-top-level-directory>
|
|
./usertools/dpdk-devbind.py -b igb_uio 0000:06:00.0
|
|
|
|
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd8086:0d5c
|
|
|
|
|
|
3. A third way to bind is to use ``dpdk-setup.sh`` tool
|
|
|
|
.. code-block:: console
|
|
|
|
cd <dpdk-top-level-directory>
|
|
./usertools/dpdk-setup.sh
|
|
|
|
select 'Bind Ethernet/Crypto/Baseband device to IGB UIO module'
|
|
enter PCI device ID
|
|
select 'Display current Ethernet/Crypto/Baseband device settings' to confirm binding
|
|
|
|
In a similar way the ACC100 5G/4G FEC PF may be bound with vfio-pci as any PCIe device.
|
|
|
|
Enable Virtual Functions
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Now, it should be visible in the printouts that PCI PF is under igb_uio control
|
|
"``Kernel driver in use: igb_uio``"
|
|
|
|
To show the number of available VFs on the device, read ``sriov_totalvfs`` file..
|
|
|
|
.. code-block:: console
|
|
|
|
cat /sys/bus/pci/devices/0000\:<b>\:<d>.<f>/sriov_totalvfs
|
|
|
|
where 0000\:<b>\:<d>.<f> is the PCI device ID
|
|
|
|
|
|
To enable VFs via igb_uio, echo the number of virtual functions intended to
|
|
enable to ``max_vfs`` file..
|
|
|
|
.. code-block:: console
|
|
|
|
echo <num-of-vfs> > /sys/bus/pci/devices/0000\:<b>\:<d>.<f>/max_vfs
|
|
|
|
|
|
Afterwards, all VFs must be bound to appropriate UIO drivers as required, same
|
|
way it was done with the physical function previously.
|
|
|
|
Enabling SR-IOV via vfio driver is pretty much the same, except that the file
|
|
name is different:
|
|
|
|
.. code-block:: console
|
|
|
|
echo <num-of-vfs> > /sys/bus/pci/devices/0000\:<b>\:<d>.<f>/sriov_numvfs
|
|
|
|
|
|
Configure the VFs through PF
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The PCI virtual functions must be configured before working or getting assigned
|
|
to VMs/Containers. The configuration involves allocating the number of hardware
|
|
queues, priorities, load balance, bandwidth and other settings necessary for the
|
|
device to perform FEC functions.
|
|
|
|
This configuration needs to be executed at least once after reboot or PCI FLR and can
|
|
be achieved by using the function ``acc100_configure()``, which sets up the
|
|
parameters defined in ``acc100_conf`` structure.
|
|
|
|
Test Application
|
|
----------------
|
|
|
|
BBDEV provides a test application, ``test-bbdev.py`` and range of test data for testing
|
|
the functionality of ACC100 5G/4G FEC encode and decode, depending on the device's
|
|
capabilities. The test application is located under app->test-bbdev folder and has the
|
|
following options:
|
|
|
|
.. code-block:: console
|
|
|
|
"-p", "--testapp-path": specifies path to the bbdev test app.
|
|
"-e", "--eal-params" : EAL arguments which are passed to the test app.
|
|
"-t", "--timeout" : Timeout in seconds (default=300).
|
|
"-c", "--test-cases" : Defines test cases to run. Run all if not specified.
|
|
"-v", "--test-vector" : Test vector path (default=dpdk_path+/app/test-bbdev/test_vectors/bbdev_null.data).
|
|
"-n", "--num-ops" : Number of operations to process on device (default=32).
|
|
"-b", "--burst-size" : Operations enqueue/dequeue burst size (default=32).
|
|
"-s", "--snr" : SNR in dB used when generating LLRs for bler tests.
|
|
"-s", "--iter_max" : Number of iterations for LDPC decoder.
|
|
"-l", "--num-lcores" : Number of lcores to run (default=16).
|
|
"-i", "--init-device" : Initialise PF device with default values.
|
|
|
|
|
|
To execute the test application tool using simple decode or encode data,
|
|
type one of the following:
|
|
|
|
.. code-block:: console
|
|
|
|
./test-bbdev.py -c validation -n 64 -b 1 -v ./ldpc_dec_default.data
|
|
./test-bbdev.py -c validation -n 64 -b 1 -v ./ldpc_enc_default.data
|
|
|
|
|
|
The test application ``test-bbdev.py``, supports the ability to configure the PF device with
|
|
a default set of values, if the "-i" or "- -init-device" option is included. The default values
|
|
are defined in test_bbdev_perf.c.
|
|
|
|
|
|
Test Vectors
|
|
~~~~~~~~~~~~
|
|
|
|
In addition to the simple LDPC decoder and LDPC encoder tests, bbdev also provides
|
|
a range of additional tests under the test_vectors folder, which may be useful. The results
|
|
of these tests will depend on the ACC100 5G/4G FEC capabilities which may cause some
|
|
testcases to be skipped, but no failure should be reported.
|
|
|
|
|
|
Alternate Baseband Device configuration tool
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
On top of the embedded configuration feature supported in test-bbdev using "- -init-device"
|
|
option mentioned above, there is also a tool available to perform that device configuration
|
|
using a companion application.
|
|
The ``pf_bb_config`` application notably enables then to run bbdev-test from the VF
|
|
and not only limited to the PF as captured above.
|
|
|
|
See for more details: https://github.com/intel/pf-bb-config
|
|
|
|
Specifically for the BBDEV ACC100 PMD, the command below can be used:
|
|
|
|
.. code-block:: console
|
|
|
|
./pf_bb_config ACC100 -c acc100/acc100_config_vf_5g.cfg
|
|
./test-bbdev.py -e="-c 0xff0 -a${VF_PCI_ADDR}" -c validation -n 64 -b 32 -l 1 -v ./ldpc_dec_default.data
|