FPGA Region Device Tree Binding

Alan Tull 2016

 CONTENTS
 - Introduction
 - Terminology
 - Sequence
 - FPGA Region
 - Supported Use Models
 - Device Tree Examples
 - Constraints


Introduction
============

FPGA Regions represent FPGA's and partial reconfiguration regions of FPGA's in
the Device Tree.  FPGA Regions provide a way to program FPGAs under device tree
control.

This device tree binding document hits some of the high points of FPGA usage and
attempts to include terminology used by both major FPGA manufacturers.  This
document isn't a replacement for any manufacturers specifications for FPGA
usage.


Terminology
===========

Full Reconfiguration
 * The entire FPGA is programmed.

Partial Reconfiguration (PR)
 * A section of an FPGA is reprogrammed while the rest of the FPGA is not
   affected.
 * Not all FPGA's support PR.

Partial Reconfiguration Region (PRR)
 * Also called a "reconfigurable partition"
 * A PRR is a specific section of a FPGA reserved for reconfiguration.
 * A base (or static) FPGA image may create a set of PRR's that later may
   be independently reprogrammed many times.
 * The size and specific location of each PRR is fixed.
 * The connections at the edge of each PRR are fixed.  The image that is loaded
   into a PRR must fit and must use a subset of the region's connections.
 * The busses within the FPGA are split such that each region gets its own
   branch that may be gated independently.

Persona
 * Also called a "partial bit stream"
 * An FPGA image that is designed to be loaded into a PRR.  There may be
   any number of personas designed to fit into a PRR, but only one at at time
   may be loaded.
 * A persona may create more regions.

FPGA Bridge
 * FPGA Bridges gate bus signals between a host and FPGA.
 * FPGA Bridges should be disabled while the FPGA is being programmed to
   prevent spurious signals on the cpu bus and to the soft logic.
 * FPGA bridges may be actual hardware or soft logic on an FPGA.
 * During Full Reconfiguration, hardware bridges between the host and FPGA
   will be disabled.
 * During Partial Reconfiguration of a specific region, that region's bridge
   will be used to gate the busses.  Traffic to other regions is not affected.
 * In some implementations, the FPGA Manager transparantly handles gating the
   buses, eliminating the need to show the hardware FPGA bridges in the
   device tree.
 * An FPGA image may create a set of reprogrammable regions, each having its
   own bridge and its own split of the busses in the FPGA.

FPGA Manager
 * An FPGA Manager is a hardware block that programs an FPGA under the control
   of a host processor.

Base Image
 * Also called the "static image"
 * An FPGA image that is designed to do full reconfiguration of the FPGA.
 * A base image may set up a set of partial reconfiguration regions that may
   later be reprogrammed.

    ----------------       ----------------------------------
    |  Host CPU    |       |             FPGA               |
    |              |       |                                |
    |          ----|       |       -----------    --------  |
    |          | H |       |   |==>| Bridge0 |<==>| PRR0 |  |
    |          | W |       |   |   -----------    --------  |
    |          |   |       |   |                            |
    |          | B |<=====>|<==|   -----------    --------  |
    |          | R |       |   |==>| Bridge1 |<==>| PRR1 |  |
    |          | I |       |   |   -----------    --------  |
    |          | D |       |   |                            |
    |          | G |       |   |   -----------    --------  |
    |          | E |       |   |==>| Bridge2 |<==>| PRR2 |  |
    |          ----|       |       -----------    --------  |
    |              |       |                                |
    ----------------       ----------------------------------

Figure 1: An FPGA set up with a base image that created three regions.  Each
region (PRR0-2) gets its own split of the busses that is independently gated by
a soft logic bridge (Bridge0-2) in the FPGA.  The contents of each PRR can be
reprogrammed independently while the rest of the system continues to function.


Sequence
========

When a DT overlay that targets a FPGA Region is applied, the FPGA Region will
do the following:

 1. Disable appropriate FPGA bridges.
 2. Program the FPGA using the FPGA manager.
 3. Enable the FPGA bridges.
 4. The Device Tree overlay is accepted into the live tree.
 5. Child devices are populated.

When the overlay is removed, the child nodes will be removed and the FPGA Region
will disable the bridges.


FPGA Region
===========

FPGA Regions represent FPGA's and FPGA PR regions in the device tree.  An FPGA
Region brings together the elements needed to program on a running system and
add the child devices:

 * FPGA Manager
 * FPGA Bridges
 * image-specific information needed to to the programming.
 * child nodes

The intended use is that a Device Tree overlay (DTO) can be used to reprogram an
FPGA while an operating system is running.

An FPGA Region that exists in the live Device Tree reflects the current state.
If the live tree shows a "firmware-name" property or child nodes under a FPGA
Region, the FPGA already has been programmed.  A DTO that targets a FPGA Region
and adds the "firmware-name" property is taken as a request to reprogram the
FPGA.  After reprogramming is successful, the overlay is accepted into the live
tree.

The base FPGA Region in the device tree represents the FPGA and supports full
reconfiguration.  It must include a phandle to an FPGA Manager.  The base
FPGA region will be the child of one of the hardware bridges (the bridge that
allows register access) between the cpu and the FPGA.  If there are more than
one bridge to control during FPGA programming, the region will also contain a
list of phandles to the additional hardware FPGA Bridges.

For partial reconfiguration (PR), each PR region will have an FPGA Region.
These FPGA regions are children of FPGA bridges which are then children of the
base FPGA region.  The "Full Reconfiguration to add PRR's" example below shows
this.

If an FPGA Region does not specify a FPGA Manager, it will inherit the FPGA
Manager specified by its ancestor FPGA Region.  This supports both the case
where the same FPGA Manager is used for all of a FPGA as well the case where
a different FPGA Manager is used for each region.

FPGA Regions do not inherit their ancestor FPGA regions' bridges.  This prevents
shutting down bridges that are upstream from the other active regions while one
region is getting reconfigured (see Figure 1 above).  During PR, the FPGA's
hardware bridges remain enabled.  The PR regions' bridges will be FPGA bridges
within the static image of the FPGA.

Required properties:
- compatible : should contain "fpga-region"
- fpga-mgr : should contain a phandle to an FPGA Manager.  Child FPGA Regions
	inherit this property from their ancestor regions.  A fpga-mgr property
	in a region will override any inherited FPGA manager.
- #address-cells, #size-cells, ranges : must be present to handle address space
	mapping for child nodes.

Optional properties:
- firmware-name : should contain the name of an FPGA image file located on the
	firmware search path.  If this property shows up in a live device tree
	it indicates that the FPGA has already been programmed with this image.
	If this property is in an overlay targeting a FPGA region, it is a
	request to program the FPGA with that image.
- fpga-bridges : should contain a list of phandles to FPGA Bridges that must be
	controlled during FPGA programming along with the parent FPGA bridge.
	This property is optional if the FPGA Manager handles the bridges.
        If the fpga-region is  the child of a fpga-bridge, the list should not
        contain the parent bridge.
- partial-fpga-config : boolean, set if partial reconfiguration is to be done,
	otherwise full reconfiguration is done.
- external-fpga-config : boolean, set if the FPGA has already been configured
	prior to OS boot up.
- encrypted-fpga-config : boolean, set if the bitstream is encrypted
- region-unfreeze-timeout-us : The maximum time in microseconds to wait for
	bridges to successfully become enabled after the region has been
	programmed.
- region-freeze-timeout-us : The maximum time in microseconds to wait for
	bridges to successfully become disabled before the region has been
	programmed.
- config-complete-timeout-us : The maximum time in microseconds time for the
	FPGA to go to operating mode after the region has been programmed.
- child nodes : devices in the FPGA after programming.

In the example below, when an overlay is applied targeting fpga-region0,
fpga_mgr is used to program the FPGA.  Two bridges are controlled during
programming: the parent fpga_bridge0 and fpga_bridge1.  Because the region is
the child of fpga_bridge0, only fpga_bridge1 needs to be specified in the
fpga-bridges property.  During programming, these bridges are disabled, the
firmware specified in the overlay is loaded to the FPGA using the FPGA manager
specified in the region.  If FPGA programming succeeds, the bridges are
reenabled and the overlay makes it into the live device tree.  The child devices
are then populated.  If FPGA programming fails, the bridges are left disabled
and the overlay is rejected.  The overlay's ranges property maps the lwhps
bridge's region (0xff200000) and the hps bridge's region (0xc0000000) for use by
the two child devices.

Example:
Base tree contains:

	fpga_mgr: fpga-mgr@ff706000 {
		compatible = "altr,socfpga-fpga-mgr";
		reg = <0xff706000 0x1000
		       0xffb90000 0x20>;
		interrupts = <0 175 4>;
	};

	fpga_bridge0: fpga-bridge@ff400000 {
		compatible = "altr,socfpga-lwhps2fpga-bridge";
		reg = <0xff400000 0x100000>;
		resets = <&rst LWHPS2FPGA_RESET>;
		clocks = <&l4_main_clk>;

		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		fpga_region0: fpga-region0 {
			compatible = "fpga-region";
			fpga-mgr = <&fpga_mgr>;
		};
	};

	fpga_bridge1: fpga-bridge@ff500000 {
		compatible = "altr,socfpga-hps2fpga-bridge";
		reg = <0xff500000 0x10000>;
		resets = <&rst HPS2FPGA_RESET>;
		clocks = <&l4_main_clk>;
	};

Overlay contains:

/dts-v1/ /plugin/;
/ {
	fragment@0 {
		target = <&fpga_region0>;
		#address-cells = <1>;
		#size-cells = <1>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <1>;

			firmware-name = "soc_system.rbf";
			fpga-bridges = <&fpga_bridge1>;
			ranges = <0x20000 0xff200000 0x100000>,
				 <0x0 0xc0000000 0x20000000>;

			gpio@10040 {
				compatible = "altr,pio-1.0";
				reg = <0x10040 0x20>;
				altr,ngpio = <4>;
				#gpio-cells = <2>;
				clocks = <2>;
				gpio-controller;
			};

			onchip-memory {
				device_type = "memory";
				compatible = "altr,onchipmem-15.1";
				reg = <0x0 0x10000>;
			};
		};
	};
};


Supported Use Models
====================

In all cases the live DT must have the FPGA Manager, FPGA Bridges (if any), and
a FPGA Region.  The target of the Device Tree Overlay is the FPGA Region.  Some
uses are specific to a FPGA device.

 * No FPGA Bridges
   In this case, the FPGA Manager which programs the FPGA also handles the
   bridges behind the scenes.  No FPGA Bridge devices are needed for full
   reconfiguration.

 * Full reconfiguration with hardware bridges
   In this case, there are hardware bridges between the processor and FPGA that
   need to be controlled during full reconfiguration.  Before the overlay is
   applied, the live DT must include the FPGA Manager, FPGA Bridges, and a
   FPGA Region.  The FPGA Region is the child of the bridge that allows
   register access to the FPGA.  Additional bridges may be listed in a
   fpga-bridges property in the FPGA region or in the device tree overlay.

 * Partial reconfiguration with bridges in the FPGA
   In this case, the FPGA will have one or more PRR's that may be programmed
   separately while the rest of the FPGA can remain active.  To manage this,
   bridges need to exist in the FPGA that can gate the buses going to each FPGA
   region while the buses are enabled for other sections.  Before any partial
   reconfiguration can be done, a base FPGA image must be loaded which includes
   PRR's with FPGA bridges.  The device tree should have a FPGA region for each
   PRR.

Device Tree Examples
====================

The intention of this section is to give some simple examples, focusing on
the placement of the elements detailed above, especially:
 * FPGA Manager
 * FPGA Bridges
 * FPGA Region
 * ranges
 * target-path or target

For the purposes of this section, I'm dividing the Device Tree into two parts,
each with its own requirements.  The two parts are:
 * The live DT prior to the overlay being added
 * The DT overlay

The live Device Tree must contain an FPGA Region, an FPGA Manager, and any FPGA
Bridges.  The FPGA Region's "fpga-mgr" property specifies the manager by phandle
to handle programming the FPGA.  If the FPGA Region is the child of another FPGA
Region, the parent's FPGA Manager is used.  If FPGA Bridges need to be involved,
they are specified in the FPGA Region by the "fpga-bridges" property.  During
FPGA programming, the FPGA Region will disable the bridges that are in its
"fpga-bridges" list and will re-enable them after FPGA programming has
succeeded.

The Device Tree Overlay will contain:
 * "target-path" or "target"
   The insertion point where the the contents of the overlay will go into the
   live tree.  target-path is a full path, while target is a phandle.
 * "ranges"
    The address space mapping from processor to FPGA bus(ses).
 * "firmware-name"
   Specifies the name of the FPGA image file on the firmware search
   path.  The search path is described in the firmware class documentation.
 * "partial-fpga-config"
   This binding is a boolean and should be present if partial reconfiguration
   is to be done.
 * child nodes corresponding to hardware that will be loaded in this region of
   the FPGA.

Device Tree Example: Full Reconfiguration without Bridges
=========================================================

Live Device Tree contains:
	fpga_mgr0: fpga-mgr@f8007000 {
		compatible = "xlnx,zynq-devcfg-1.0";
		reg = <0xf8007000 0x100>;
		interrupt-parent = <&intc>;
		interrupts = <0 8 4>;
		clocks = <&clkc 12>;
		clock-names = "ref_clk";
		syscon = <&slcr>;
	};

	fpga_region0: fpga-region0 {
		compatible = "fpga-region";
		fpga-mgr = <&fpga_mgr0>;
		#address-cells = <0x1>;
		#size-cells = <0x1>;
		ranges;
	};

DT Overlay contains:
/dts-v1/ /plugin/;
/ {
fragment@0 {
	target = <&fpga_region0>;
	#address-cells = <1>;
	#size-cells = <1>;
	__overlay__ {
		#address-cells = <1>;
		#size-cells = <1>;

		firmware-name = "zynq-gpio.bin";

		gpio1: gpio@40000000 {
			compatible = "xlnx,xps-gpio-1.00.a";
			reg = <0x40000000 0x10000>;
			gpio-controller;
			#gpio-cells = <0x2>;
			xlnx,gpio-width= <0x6>;
		};
	};
};

Device Tree Example: Full Reconfiguration to add PRR's
======================================================

The base FPGA Region is specified similar to the first example above.

This example programs the FPGA to have two regions that can later be partially
configured.  Each region has its own bridge in the FPGA fabric.

DT Overlay contains:
/dts-v1/ /plugin/;
/ {
	fragment@0 {
		target = <&fpga_region0>;
		#address-cells = <1>;
		#size-cells = <1>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <1>;

			firmware-name = "base.rbf";

			fpga-bridge@4400 {
				compatible = "altr,freeze-bridge-controller";
				reg = <0x4400 0x10>;

				fpga_region1: fpga-region1 {
					compatible = "fpga-region";
					#address-cells = <0x1>;
					#size-cells = <0x1>;
					ranges;
				};
			};

			fpga-bridge@4420 {
				compatible = "altr,freeze-bridge-controller";
				reg = <0x4420 0x10>;

				fpga_region2: fpga-region2 {
					compatible = "fpga-region";
					#address-cells = <0x1>;
					#size-cells = <0x1>;
					ranges;
				};
			};
		};
	};
};

Device Tree Example: Partial Reconfiguration
============================================

This example reprograms one of the PRR's set up in the previous example.

The sequence that occurs when this overlay is similar to the above, the only
differences are that the FPGA is partially reconfigured due to the
"partial-fpga-config" boolean and the only bridge that is controlled during
programming is the FPGA based bridge of fpga_region1.

/dts-v1/ /plugin/;
/ {
	fragment@0 {
		target = <&fpga_region1>;
		#address-cells = <1>;
		#size-cells = <1>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <1>;

			firmware-name = "soc_image2.rbf";
			partial-fpga-config;

			gpio@10040 {
				compatible = "altr,pio-1.0";
				reg = <0x10040 0x20>;
				clocks = <0x2>;
				altr,ngpio = <0x4>;
				#gpio-cells = <0x2>;
				gpio-controller;
			};
		};
	};
};

Constraints
===========

It is beyond the scope of this document to fully describe all the FPGA design
constraints required to make partial reconfiguration work[1] [2] [3], but a few
deserve quick mention.

A persona must have boundary connections that line up with those of the partion
or region it is designed to go into.

During programming, transactions through those connections must be stopped and
the connections must be held at a fixed logic level.  This can be achieved by
FPGA Bridges that exist on the FPGA fabric prior to the partial reconfiguration.

--
[1] www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ug/ug_partrecon.pdf
[2] tspace.library.utoronto.ca/bitstream/1807/67932/1/Byma_Stuart_A_201411_MAS_thesis.pdf
[3] https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/ug702.pdf
