0001 Introduction
0002 ============
0003
0004 The FPGA subsystem supports reprogramming FPGAs dynamically under
0005 Linux. Some of the core intentions of the FPGA subsystems are:
0006
0007 * The FPGA subsystem is vendor agnostic.
0008
0009 * The FPGA subsystem separates upper layers (userspace interfaces and
0010 enumeration) from lower layers that know how to program a specific
0011 FPGA.
0012
0013 * Code should not be shared between upper and lower layers. This
0014 should go without saying. If that seems necessary, there's probably
0015 framework functionality that can be added that will benefit
0016 other users. Write the linux-fpga mailing list and maintainers and
0017 seek out a solution that expands the framework for broad reuse.
0018
0019 * Generally, when adding code, think of the future. Plan for reuse.
0020
0021 The framework in the kernel is divided into:
0022
0023 FPGA Manager
0024 ------------
0025
0026 If you are adding a new FPGA or a new method of programming an FPGA,
0027 this is the subsystem for you. Low level FPGA manager drivers contain
0028 the knowledge of how to program a specific device. This subsystem
0029 includes the framework in fpga-mgr.c and the low level drivers that
0030 are registered with it.
0031
0032 FPGA Bridge
0033 -----------
0034
0035 FPGA Bridges prevent spurious signals from going out of an FPGA or a
0036 region of an FPGA during programming. They are disabled before
0037 programming begins and re-enabled afterwards. An FPGA bridge may be
0038 actual hard hardware that gates a bus to a CPU or a soft ("freeze")
0039 bridge in FPGA fabric that surrounds a partial reconfiguration region
0040 of an FPGA. This subsystem includes fpga-bridge.c and the low level
0041 drivers that are registered with it.
0042
0043 FPGA Region
0044 -----------
0045
0046 If you are adding a new interface to the FPGA framework, add it on top
0047 of an FPGA region.
0048
0049 The FPGA Region framework (fpga-region.c) associates managers and
0050 bridges as reconfigurable regions. A region may refer to the whole
0051 FPGA in full reconfiguration or to a partial reconfiguration region.
0052
0053 The Device Tree FPGA Region support (of-fpga-region.c) handles
0054 reprogramming FPGAs when device tree overlays are applied.