lkml.org 
[lkml]   [2021]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH V4 XRT Alveo 00/20] XRT Alveo driver overview
    Date
    Hello,

    This is V4 of patch series which adds management physical function driver
    for Xilinx Alveo PCIe accelerator cards.
    https://www.xilinx.com/products/boards-and-kits/alveo.html

    This driver is part of Xilinx Runtime (XRT) open source stack.
    The V4 patch series do not include bus_type change as suggested before.
    The bus_type change will come with v5 patch series.

    XILINX ALVEO PLATFORM ARCHITECTURE

    Alveo PCIe FPGA based platforms have a static *shell* partition and a
    partial re-configurable *user* partition. The shell partition is
    automatically loaded from flash when host is booted and PCIe is enumerated
    by BIOS. Shell cannot be changed till the next cold reboot. The shell
    exposes two PCIe physical functions:

    1. management physical function
    2. user physical function

    The patch series includes Documentation/xrt.rst which describes Alveo
    platform, XRT driver architecture and deployment model in more detail.

    Users compile their high level design in C/C++/OpenCL or RTL into FPGA
    image using Vitis tools.
    https://www.xilinx.com/products/design-tools/vitis/vitis-platform.html

    The compiled image is packaged as xclbin which contains partial bitstream
    for the user partition and necessary metadata. Users can dynamically swap
    the image running on the user partition in order to switch between
    different workloads by loading different xclbins.

    XRT DRIVERS FOR XILINX ALVEO

    XRT Linux kernel driver *xmgmt* binds to management physical function of
    Alveo platform. The modular driver framework is organized into several
    platform drivers which primarily handle the following functionality:

    1. Loading firmware container also called xsabin at driver attach time
    2. Loading of user compiled xclbin with FPGA Manager integration
    3. Clock scaling of image running on user partition
    4. In-band sensors: temp, voltage, power, etc.
    5. Device reset and rescan

    The platform drivers are packaged into *xrt-lib* helper module with well
    defined interfaces. The module provides a pseudo-bus implementation for the
    platform drivers. More details on the driver model can be found in
    Documentation/xrt.rst.

    User physical function driver is not included in this patch series.

    LIBFDT REQUIREMENT

    XRT driver infrastructure uses Device Tree as a metadata format to discover
    HW subsystems in the Alveo PCIe device. The Device Tree schema used by XRT
    is documented in Documentation/xrt.rst.

    TESTING AND VALIDATION

    xmgmt driver can be tested with full XRT open source stack which includes
    user space libraries, board utilities and (out of tree) first generation
    user physical function driver xocl. XRT open source runtime stack is
    available at https://github.com/Xilinx/XRT

    Complete documentation for XRT open source stack including sections on
    Alveo/XRT security and platform architecture can be found here:

    https://xilinx.github.io/XRT/master/html/index.html
    https://xilinx.github.io/XRT/master/html/security.html
    https://xilinx.github.io/XRT/master/html/platforms_partitions.html

    Changes since v3:
    - Leaf drivers use regmap-mmio to access hardware registers.
    - Renamed driver module: xmgmt.ko -> xrt-mgmt.ko
    - Renamed files: calib.[c|h] -> ddr_calibration.[c|h],
    lib/main.[c|h] -> lib/lib-drv.[c|h],
    mgmt/main-impl.h - > mgmt/xmgnt.h
    - Updated code base to include v3 code review comments.

    Changes since v2:
    - Streamlined the driver framework into *xleaf*, *group* and *xroot*
    - Updated documentation to show the driver model with examples
    - Addressed kernel test robot errors
    - Added a selftest for basic driver framework
    - Documented device tree schema
    - Removed need to export libfdt symbols

    Changes since v1:
    - Updated the driver to use fpga_region and fpga_bridge for FPGA
    programming
    - Dropped platform drivers not related to PR programming to focus on XRT
    core framework
    - Updated Documentation/fpga/xrt.rst with information on XRT core framework
    - Addressed checkpatch issues
    - Dropped xrt- prefix from some header files

    For reference V3 version of patch series can be found here:

    https://lore.kernel.org/lkml/20210218064019.29189-1-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-2-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-3-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-4-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-5-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-6-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-7-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-8-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-9-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-10-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-11-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-12-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-13-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-14-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-15-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-16-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-17-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-18-lizhih@xilinx.com
    https://lore.kernel.org/lkml/20210218064019.29189-19-lizhih@xilinx.com

    Lizhi Hou (20):
    Documentation: fpga: Add a document describing XRT Alveo drivers
    fpga: xrt: driver metadata helper functions
    fpga: xrt: xclbin file helper functions
    fpga: xrt: xrt-lib platform driver manager
    fpga: xrt: group platform driver
    fpga: xrt: char dev node helper functions
    fpga: xrt: root driver infrastructure
    fpga: xrt: platform driver infrastructure
    fpga: xrt: management physical function driver (root)
    fpga: xrt: main platform driver for management function device
    fpga: xrt: fpga-mgr and region implementation for xclbin download
    fpga: xrt: VSEC platform driver
    fpga: xrt: User Clock Subsystem platform driver
    fpga: xrt: ICAP platform driver
    fpga: xrt: devctl platform driver
    fpga: xrt: clock platform driver
    fpga: xrt: clock frequency counter platform driver
    fpga: xrt: DDR calibration platform driver
    fpga: xrt: partition isolation platform driver
    fpga: xrt: Kconfig and Makefile updates for XRT drivers

    Documentation/fpga/index.rst | 1 +
    Documentation/fpga/xrt.rst | 844 +++++++++++++++++
    MAINTAINERS | 11 +
    drivers/Makefile | 1 +
    drivers/fpga/Kconfig | 2 +
    drivers/fpga/Makefile | 5 +
    drivers/fpga/xrt/Kconfig | 8 +
    drivers/fpga/xrt/include/events.h | 45 +
    drivers/fpga/xrt/include/group.h | 25 +
    drivers/fpga/xrt/include/metadata.h | 233 +++++
    drivers/fpga/xrt/include/subdev_id.h | 38 +
    drivers/fpga/xrt/include/xclbin-helper.h | 48 +
    drivers/fpga/xrt/include/xleaf.h | 264 ++++++
    drivers/fpga/xrt/include/xleaf/axigate.h | 23 +
    drivers/fpga/xrt/include/xleaf/clkfreq.h | 21 +
    drivers/fpga/xrt/include/xleaf/clock.h | 29 +
    .../fpga/xrt/include/xleaf/ddr_calibration.h | 28 +
    drivers/fpga/xrt/include/xleaf/devctl.h | 40 +
    drivers/fpga/xrt/include/xleaf/icap.h | 27 +
    drivers/fpga/xrt/include/xmgmt-main.h | 34 +
    drivers/fpga/xrt/include/xroot.h | 117 +++
    drivers/fpga/xrt/lib/Kconfig | 17 +
    drivers/fpga/xrt/lib/Makefile | 30 +
    drivers/fpga/xrt/lib/cdev.c | 232 +++++
    drivers/fpga/xrt/lib/group.c | 286 ++++++
    drivers/fpga/xrt/lib/lib-drv.c | 277 ++++++
    drivers/fpga/xrt/lib/lib-drv.h | 17 +
    drivers/fpga/xrt/lib/subdev.c | 865 ++++++++++++++++++
    drivers/fpga/xrt/lib/subdev_pool.h | 53 ++
    drivers/fpga/xrt/lib/xclbin.c | 369 ++++++++
    drivers/fpga/xrt/lib/xleaf/axigate.c | 342 +++++++
    drivers/fpga/xrt/lib/xleaf/clkfreq.c | 240 +++++
    drivers/fpga/xrt/lib/xleaf/clock.c | 669 ++++++++++++++
    drivers/fpga/xrt/lib/xleaf/ddr_calibration.c | 226 +++++
    drivers/fpga/xrt/lib/xleaf/devctl.c | 183 ++++
    drivers/fpga/xrt/lib/xleaf/icap.c | 344 +++++++
    drivers/fpga/xrt/lib/xleaf/ucs.c | 167 ++++
    drivers/fpga/xrt/lib/xleaf/vsec.c | 388 ++++++++
    drivers/fpga/xrt/lib/xroot.c | 589 ++++++++++++
    drivers/fpga/xrt/metadata/Kconfig | 12 +
    drivers/fpga/xrt/metadata/Makefile | 16 +
    drivers/fpga/xrt/metadata/metadata.c | 545 +++++++++++
    drivers/fpga/xrt/mgmt/Kconfig | 15 +
    drivers/fpga/xrt/mgmt/Makefile | 19 +
    drivers/fpga/xrt/mgmt/fmgr-drv.c | 191 ++++
    drivers/fpga/xrt/mgmt/fmgr.h | 19 +
    drivers/fpga/xrt/mgmt/main-region.c | 483 ++++++++++
    drivers/fpga/xrt/mgmt/main.c | 670 ++++++++++++++
    drivers/fpga/xrt/mgmt/root.c | 333 +++++++
    drivers/fpga/xrt/mgmt/xmgnt.h | 34 +
    include/uapi/linux/xrt/xclbin.h | 409 +++++++++
    include/uapi/linux/xrt/xmgmt-ioctl.h | 46 +
    52 files changed, 9930 insertions(+)
    create mode 100644 Documentation/fpga/xrt.rst
    create mode 100644 drivers/fpga/xrt/Kconfig
    create mode 100644 drivers/fpga/xrt/include/events.h
    create mode 100644 drivers/fpga/xrt/include/group.h
    create mode 100644 drivers/fpga/xrt/include/metadata.h
    create mode 100644 drivers/fpga/xrt/include/subdev_id.h
    create mode 100644 drivers/fpga/xrt/include/xclbin-helper.h
    create mode 100644 drivers/fpga/xrt/include/xleaf.h
    create mode 100644 drivers/fpga/xrt/include/xleaf/axigate.h
    create mode 100644 drivers/fpga/xrt/include/xleaf/clkfreq.h
    create mode 100644 drivers/fpga/xrt/include/xleaf/clock.h
    create mode 100644 drivers/fpga/xrt/include/xleaf/ddr_calibration.h
    create mode 100644 drivers/fpga/xrt/include/xleaf/devctl.h
    create mode 100644 drivers/fpga/xrt/include/xleaf/icap.h
    create mode 100644 drivers/fpga/xrt/include/xmgmt-main.h
    create mode 100644 drivers/fpga/xrt/include/xroot.h
    create mode 100644 drivers/fpga/xrt/lib/Kconfig
    create mode 100644 drivers/fpga/xrt/lib/Makefile
    create mode 100644 drivers/fpga/xrt/lib/cdev.c
    create mode 100644 drivers/fpga/xrt/lib/group.c
    create mode 100644 drivers/fpga/xrt/lib/lib-drv.c
    create mode 100644 drivers/fpga/xrt/lib/lib-drv.h
    create mode 100644 drivers/fpga/xrt/lib/subdev.c
    create mode 100644 drivers/fpga/xrt/lib/subdev_pool.h
    create mode 100644 drivers/fpga/xrt/lib/xclbin.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/axigate.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/clkfreq.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/clock.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/ddr_calibration.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/devctl.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/icap.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/ucs.c
    create mode 100644 drivers/fpga/xrt/lib/xleaf/vsec.c
    create mode 100644 drivers/fpga/xrt/lib/xroot.c
    create mode 100644 drivers/fpga/xrt/metadata/Kconfig
    create mode 100644 drivers/fpga/xrt/metadata/Makefile
    create mode 100644 drivers/fpga/xrt/metadata/metadata.c
    create mode 100644 drivers/fpga/xrt/mgmt/Kconfig
    create mode 100644 drivers/fpga/xrt/mgmt/Makefile
    create mode 100644 drivers/fpga/xrt/mgmt/fmgr-drv.c
    create mode 100644 drivers/fpga/xrt/mgmt/fmgr.h
    create mode 100644 drivers/fpga/xrt/mgmt/main-region.c
    create mode 100644 drivers/fpga/xrt/mgmt/main.c
    create mode 100644 drivers/fpga/xrt/mgmt/root.c
    create mode 100644 drivers/fpga/xrt/mgmt/xmgnt.h
    create mode 100644 include/uapi/linux/xrt/xclbin.h
    create mode 100644 include/uapi/linux/xrt/xmgmt-ioctl.h

    --
    2.27.0

    \
     
     \ /
      Last update: 2021-03-24 06:34    [W:4.388 / U:1.488 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site