numam-dpdk/doc/guides/rawdevs/ifpga_rawdev.rst
Rosen Xu ef1e8ede3d raw/ifpga: add Intel FPGA bus rawdev driver
Add Intel FPGA BUS Rawdev Driver which is based on
librte_rawdev library.

Signed-off-by: Rosen Xu <rosen.xu@intel.com>
Signed-off-by: Yanglong Wu <yanglong.wu@intel.com>
Signed-off-by: Tianfei Zhang <tianfei.zhang@intel.com>
Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
2018-05-11 17:09:26 +02:00

113 lines
4.7 KiB
ReStructuredText

.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2018 Intel Corporation.
IFPGA Rawdev Driver
======================
FPGA is used more and more widely in Cloud and NFV, one primary reason is
that FPGA not only provides ASIC performance but also it's more flexible
than ASIC.
FPGA uses Partial Reconfigure (PR) Parts of Bit Stream to achieve its
flexibility. That means one FPGA Device Bit Stream is divided into many Parts
of Bit Stream(each Part of Bit Stream is defined as AFU-Accelerated Function
Unit), and each AFU is a hardware acceleration unit which can be dynamically
reloaded respectively.
By PR (Partial Reconfiguration) AFUs, one FPGA resources can be time-shared by
different users. FPGA hot upgrade and fault tolerance can be provided easily.
The SW IFPGA Rawdev Driver (**ifpga_rawdev**) provides a Rawdev driver
that utilizes Intel FPGA Software Stack OPAE(Open Programmable Acceleration
Engine) for FPGA management.
Implementation details
----------------------
Each instance of IFPGA Rawdev Driver is probed by Intel FpgaDev. In coordination
with OPAE share code IFPGA Rawdev Driver provides common FPGA management ops
for FPGA operation, OPAE provides all following operations:
- FPGA PR (Partial Reconfiguration) management
- FPGA AFUs Identifying
- FPGA Thermal Management
- FPGA Power Management
- FPGA Performance reporting
- FPGA Remote Debug
All configuration parameters are taken by vdev_ifpga_cfg driver. Besides
configuration, vdev_ifpga_cfg driver also hot plugs in IFPGA Bus.
All of the AFUs of one FPGA may share same PCI BDF and AFUs scan depend on
IFPGA Rawdev Driver so IFPGA Bus takes AFU device scan and AFU drivers probe.
All AFU device driver bind to AFU device by its UUID (Universally Unique
Identifier).
To avoid unnecessary code duplication and ensure maximum performance,
handling of AFU devices is left to different PMDs; all the design as
summarized by the following block diagram::
+---------------------------------------------------------------+
| Application(s) |
+----------------------------.----------------------------------+
|
|
+----------------------------'----------------------------------+
| DPDK Framework (APIs) |
+----------|------------|--------.---------------------|--------+
/ \ |
/ \ |
+-------'-------+ +-------'-------+ +--------'--------+
| Eth PMD | | Crypto PMD | | |
+-------.-------+ +-------.-------+ | |
| | | |
| | | |
+-------'-------+ +-------'-------+ | IFPGA |
| Eth AFU Dev | |Crypto AFU Dev | | Rawdev Driver |
+-------.-------+ +-------.-------+ |(OPAE Share Code)|
| | | |
| | Rawdev | |
+-------'------------------'-------+ Ops | |
| IFPGA Bus | -------->| |
+-----------------.----------------+ +--------.--------+
| |
Hot-plugin -->| |
| |
+-----------------'------------------+ +--------'--------+
| vdev_ifpga_cfg driver | | Intel FpgaDev |
+------------------------------------+ +-----------------+
Build options
-------------
- ``CONFIG_RTE_LIBRTE_IFPGA_BUS`` (default ``y``)
Toggle compilation of IFPGA Bus library.
- ``CONFIG_RTE_LIBRTE_IFPGA_RAWDEV`` (default ``y``)
Toggle compilation of the ``ifpga_rawdev`` driver.
Run-time parameters
-------------------
This driver is invoked automatically in systems added with Intel FPGA,
but PR and IFPGA Bus scan is trigged by command line using
``--vdev 'ifpga_rawdev_cfg`` EAL option.
The following device parameters are supported:
- ``ifpga`` [string]
Provide a specific Intel FPGA device PCI BDF. Can be provided multiple
times for additional instances.
- ``port`` [int]
Each FPGA can provide many channels to PR AFU by software, each channels
is identified by this parameter.
- ``afu_bts`` [string]
If null, the AFU Bit Stream has been PR in FPGA, if not forces PR and
identifies AFU Bit Stream file.