15f156561SNicolas Chautru.. SPDX-License-Identifier: BSD-3-Clause 25f156561SNicolas Chautru Copyright(c) 2022 Intel Corporation 35f156561SNicolas Chautru 45f156561SNicolas Chautru.. include:: <isonum.txt> 55f156561SNicolas Chautru 65f156561SNicolas ChautruIntel\ |reg| vRAN Boost Poll Mode Driver (PMD) 75f156561SNicolas Chautru============================================== 85f156561SNicolas Chautru 95f156561SNicolas ChautruThe Intel\ |reg| vRAN Boost integrated accelerator enables 105f156561SNicolas Chautrucost-effective 4G and 5G next-generation virtualized Radio Access Network (vRAN) 115f156561SNicolas Chautrusolutions. 125f156561SNicolas ChautruThe Intel vRAN Boost v1.0 (VRB1 in the code) is specifically integrated on the 135f156561SNicolas Chautru4th Gen Intel\ |reg| Xeon\ |reg| Scalable processor with Intel\ |reg| vRAN Boost, 145f156561SNicolas Chautrualso known as Sapphire Rapids Edge Enhanced (SPR-EE). 155f156561SNicolas Chautru 165f156561SNicolas ChautruFeatures 175f156561SNicolas Chautru-------- 185f156561SNicolas Chautru 195f156561SNicolas ChautruIntel vRAN Boost v1.0 includes a 5G Low Density Parity Check (LDPC) encoder/decoder, 205f156561SNicolas Chautrurate match/dematch, Hybrid Automatic Repeat Request (HARQ) with access to DDR 215f156561SNicolas Chautrumemory for buffer management, a 4G Turbo encoder/decoder, 225f156561SNicolas Chautrua Fast Fourier Transform (FFT) block providing DFT/iDFT processing offload 235f156561SNicolas Chautrufor the 5G Sounding Reference Signal (SRS), a Queue Manager (QMGR), 245f156561SNicolas Chautruand a DMA subsystem. 255f156561SNicolas ChautruThere is no dedicated on-card memory for HARQ, the coherent memory on the CPU side is being used. 265f156561SNicolas Chautru 275f156561SNicolas ChautruThese hardware blocks provide the following features exposed by the PMD: 285f156561SNicolas Chautru 295f156561SNicolas Chautru- LDPC Encode in the Downlink (5GNR) 305f156561SNicolas Chautru- LDPC Decode in the Uplink (5GNR) 315f156561SNicolas Chautru- Turbo Encode in the Downlink (4G) 325f156561SNicolas Chautru- Turbo Decode in the Uplink (4G) 335f156561SNicolas Chautru- FFT processing 345f156561SNicolas Chautru- Single Root I/O Virtualization (SR-IOV) with 16 Virtual Functions (VFs) per Physical Function (PF) 355f156561SNicolas Chautru- Maximum of 256 queues per VF 365f156561SNicolas Chautru 375f156561SNicolas ChautruThe Intel vRAN Boost v1.0 PMD supports the following bbdev capabilities: 385f156561SNicolas Chautru 395f156561SNicolas Chautru* For the LDPC encode operation: 405f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_CRC_24B_ATTACH``: set to attach CRC24B to CB(s). 415f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_RATE_MATCH``: if set then do not do Rate Match bypass. 425f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_INTERLEAVER_BYPASS``: if set then bypass interleaver. 435f156561SNicolas Chautru 445f156561SNicolas Chautru* For the LDPC decode operation: 455f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK``: check CRC24B from CB(s). 465f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP``: drops CRC24B bits appended while decoding. 475f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_CRC_TYPE_24A_CHECK``: check CRC24A from CB(s). 485f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_CRC_TYPE_16_CHECK``: check CRC16 from CB(s). 495f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE``: provides an input for HARQ combining. 505f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE``: provides an input for HARQ combining. 515f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE``: disable early termination. 525f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_DEC_SCATTER_GATHER``: supports scatter-gather for input/output data. 535f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION``: supports compression of the HARQ input/output. 545f156561SNicolas Chautru - ``RTE_BBDEV_LDPC_LLR_COMPRESSION``: supports LLR input compression. 555f156561SNicolas Chautru 565f156561SNicolas Chautru* For the turbo encode operation: 575f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_CRC_24B_ATTACH``: set to attach CRC24B to CB(s). 585f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_RATE_MATCH``: if set then do not do Rate Match bypass. 595f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_RV_INDEX_BYPASS``: set to bypass RV index. 605f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_ENC_SCATTER_GATHER``: supports scatter-gather for input/output data. 615f156561SNicolas Chautru 625f156561SNicolas Chautru* For the turbo decode operation: 635f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_CRC_TYPE_24B``: check CRC24B from CB(s). 645f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE``: perform subblock de-interleave. 655f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN``: set if negative LLR input is supported. 665f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP``: keep CRC24B bits appended while decoding. 675f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_DEC_CRC_24B_DROP``: option to drop the code block CRC after decoding. 685f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_EARLY_TERMINATION``: set early termination feature. 695f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_DEC_SCATTER_GATHER``: supports scatter-gather for input/output data. 705f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_HALF_ITERATION_EVEN``: set half iteration granularity. 715f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_CONTINUE_CRC_MATCH``: set to run an extra odd iteration after CRC match. 725f156561SNicolas Chautru - ``RTE_BBDEV_TURBO_MAP_DEC``: supports flexible parallel MAP engine decoding. 735f156561SNicolas Chautru 745f156561SNicolas Chautru* For the FFT operation: 755f156561SNicolas Chautru - ``RTE_BBDEV_FFT_WINDOWING``: flexible windowing capability. 765f156561SNicolas Chautru - ``RTE_BBDEV_FFT_CS_ADJUSTMENT``: flexible adjustment of Cyclic Shift time offset. 775f156561SNicolas Chautru - ``RTE_BBDEV_FFT_DFT_BYPASS``: set for bypass the DFT and get directly into iDFT input. 785f156561SNicolas Chautru - ``RTE_BBDEV_FFT_IDFT_BYPASS``: set for bypass the IDFT and get directly the DFT output. 795f156561SNicolas Chautru - ``RTE_BBDEV_FFT_WINDOWING_BYPASS``: set for bypass time domain windowing. 805f156561SNicolas Chautru 815f156561SNicolas Chautru 825f156561SNicolas ChautruInstallation 835f156561SNicolas Chautru------------ 845f156561SNicolas Chautru 855f156561SNicolas ChautruSection 3 of the DPDK manual provides instructions on installing and compiling DPDK. 865f156561SNicolas Chautru 875f156561SNicolas ChautruDPDK requires hugepages to be configured as detailed in section 2 of the DPDK manual. 885f156561SNicolas ChautruThe bbdev test application has been tested with a configuration 40 x 1GB hugepages. 895f156561SNicolas ChautruThe hugepage configuration of a server may be examined using: 905f156561SNicolas Chautru 915f156561SNicolas Chautru.. code-block:: console 925f156561SNicolas Chautru 935f156561SNicolas Chautru grep Huge* /proc/meminfo 945f156561SNicolas Chautru 955f156561SNicolas Chautru 965f156561SNicolas ChautruInitialization 975f156561SNicolas Chautru-------------- 985f156561SNicolas Chautru 995f156561SNicolas ChautruWhen the device first powers up, its PCI Physical Functions (PF) 1002d4983b6SNicolas Chautrucan be listed through these commands for Intel vRAN Boost v1: 1015f156561SNicolas Chautru 1025f156561SNicolas Chautru.. code-block:: console 1035f156561SNicolas Chautru 1045f156561SNicolas Chautru sudo lspci -vd8086:57c0 1055f156561SNicolas Chautru 1065f156561SNicolas ChautruThe physical and virtual functions are compatible with Linux UIO drivers: 107*33f32941SDavid Marchand``vfio_pci`` and ``igb_uio``. 1085f156561SNicolas ChautruHowever, in order to work the 5G/4G FEC device first needs to be bound 1095f156561SNicolas Chautruto one of these Linux drivers through DPDK. 1105f156561SNicolas Chautru 111*33f32941SDavid MarchandFor more details on how to bind the PF device and create VF devices, see 112*33f32941SDavid Marchand:ref:`linux_gsg_binding_kernel`. 1135f156561SNicolas Chautru 1145f156561SNicolas Chautru 1155f156561SNicolas ChautruConfigure the VFs through PF 1165f156561SNicolas Chautru~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175f156561SNicolas Chautru 1185f156561SNicolas ChautruThe PCI virtual functions must be configured before working or getting assigned 1195f156561SNicolas Chautruto VMs/Containers. 1205f156561SNicolas ChautruThe configuration involves allocating the number of hardware queues, priorities, 1215f156561SNicolas Chautruload balance, bandwidth and other settings necessary for the device 1225f156561SNicolas Chautruto perform FEC functions. 1235f156561SNicolas Chautru 1245f156561SNicolas ChautruThis configuration needs to be executed at least once after reboot or PCI FLR 1255f156561SNicolas Chautruand can be achieved by using the functions ``rte_acc200_configure()``, 1265f156561SNicolas Chautruwhich sets up the parameters defined in the compatible ``acc200_conf`` structure. 1275f156561SNicolas Chautru 1285f156561SNicolas Chautru 1295f156561SNicolas ChautruTest Application 1305f156561SNicolas Chautru---------------- 1315f156561SNicolas Chautru 13222900d7fSNicolas ChautruBBDEV provides a test application, ``test-bbdev.py`` and range of test data for testing 13322900d7fSNicolas Chautruthe functionality of the device, depending on the device's capabilities. 1345f156561SNicolas Chautru 13522900d7fSNicolas ChautruFor more details on how to use the test application, 13622900d7fSNicolas Chautrusee :ref:`test_bbdev_application`. 1375f156561SNicolas Chautru 1385f156561SNicolas Chautru 1395f156561SNicolas ChautruTest Vectors 1405f156561SNicolas Chautru~~~~~~~~~~~~ 1415f156561SNicolas Chautru 1425f156561SNicolas ChautruIn addition to the simple LDPC decoder and LDPC encoder tests, 1435f156561SNicolas Chautrubbdev also provides a range of additional tests under the test_vectors folder, 1445f156561SNicolas Chautruwhich may be useful. 1455f156561SNicolas ChautruThe results of these tests will depend on the device capabilities which may 1465f156561SNicolas Chautrucause some test cases to be skipped, but no failure should be reported. 1475f156561SNicolas Chautru 1485f156561SNicolas Chautru 1495f156561SNicolas ChautruAlternate Baseband Device configuration tool 1505f156561SNicolas Chautru~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515f156561SNicolas Chautru 1525f156561SNicolas ChautruOn top of the embedded configuration feature supported in test-bbdev using 1535f156561SNicolas Chautru"- -init-device" option mentioned above, there is also a tool available 1545f156561SNicolas Chautruto perform that device configuration using a companion application. 1555f156561SNicolas ChautruThe ``pf_bb_config`` application notably enables then to run bbdev-test 1565f156561SNicolas Chautrufrom the VF and not only limited to the PF as captured above. 1575f156561SNicolas Chautru 1585f156561SNicolas ChautruSee for more details: https://github.com/intel/pf-bb-config 1595f156561SNicolas Chautru 1602d4983b6SNicolas ChautruSpecifically for the bbdev Intel vRAN Boost v1 PMD, the command below can be used 1615f156561SNicolas Chautru(note that ACC200 was used previously to refer to VRB1): 1625f156561SNicolas Chautru 1635f156561SNicolas Chautru.. code-block:: console 1645f156561SNicolas Chautru 1655f156561SNicolas Chautru pf_bb_config ACC200 -c ./acc200/acc200_config_vf_5g.cfg 1665f156561SNicolas Chautru test-bbdev.py -e="-c 0xff0 -a${VF_PCI_ADDR}" -c validation -n 64 -b 64 -l 1 -v ./ldpc_dec_default.data 167