|  | Introduction | 
|  | ============ | 
|  |  | 
|  | The FPGA subsystem supports reprogramming FPGAs dynamically under | 
|  | Linux.  Some of the core intentions of the FPGA subsystems are: | 
|  |  | 
|  | * The FPGA subsystem is vendor agnostic. | 
|  |  | 
|  | * The FPGA subsystem separates upper layers (userspace interfaces and | 
|  | enumeration) from lower layers that know how to program a specific | 
|  | FPGA. | 
|  |  | 
|  | * Code should not be shared between upper and lower layers.  This | 
|  | should go without saying.  If that seems necessary, there's probably | 
|  | framework functionality that can be added that will benefit | 
|  | other users.  Write the linux-fpga mailing list and maintainers and | 
|  | seek out a solution that expands the framework for broad reuse. | 
|  |  | 
|  | * Generally, when adding code, think of the future.  Plan for reuse. | 
|  |  | 
|  | The framework in the kernel is divided into: | 
|  |  | 
|  | FPGA Manager | 
|  | ------------ | 
|  |  | 
|  | If you are adding a new FPGA or a new method of programming an FPGA, | 
|  | this is the subsystem for you.  Low level FPGA manager drivers contain | 
|  | the knowledge of how to program a specific device.  This subsystem | 
|  | includes the framework in fpga-mgr.c and the low level drivers that | 
|  | are registered with it. | 
|  |  | 
|  | FPGA Bridge | 
|  | ----------- | 
|  |  | 
|  | FPGA Bridges prevent spurious signals from going out of an FPGA or a | 
|  | region of an FPGA during programming.  They are disabled before | 
|  | programming begins and re-enabled afterwards.  An FPGA bridge may be | 
|  | actual hard hardware that gates a bus to a CPU or a soft ("freeze") | 
|  | bridge in FPGA fabric that surrounds a partial reconfiguration region | 
|  | of an FPGA.  This subsystem includes fpga-bridge.c and the low level | 
|  | drivers that are registered with it. | 
|  |  | 
|  | FPGA Region | 
|  | ----------- | 
|  |  | 
|  | If you are adding a new interface to the FPGA framework, add it on top | 
|  | of an FPGA region. | 
|  |  | 
|  | The FPGA Region framework (fpga-region.c) associates managers and | 
|  | bridges as reconfigurable regions.  A region may refer to the whole | 
|  | FPGA in full reconfiguration or to a partial reconfiguration region. | 
|  |  | 
|  | The Device Tree FPGA Region support (of-fpga-region.c) handles | 
|  | reprogramming FPGAs when device tree overlays are applied. |