FPGA Regions

Alan Tull 2017

CONTENTS
 - Introduction
 - The FPGA region API
 - Usage example

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

This document is meant to be an brief overview of the FPGA region API usage.  A
more conceptual look at regions can be found in [1].

For the purposes of this API document, let's just say that a region associates
an FPGA Manager and a bridge (or bridges) with a reprogrammable region of an
FPGA or the whole FPGA.  The API provides a way to register a region and to
program a region.

Currently the only layer above fpga-region.c in the kernel is the Device Tree
support (of-fpga-region.c) described in [1].  The DT support layer uses regions
to program the FPGA and then DT to handle enumeration.  The common region code
is intended to be used by other schemes that have other ways of accomplishing
enumeration after programming.

An fpga-region can be set up to know the following things:
* which FPGA manager to use to do the programming
* which bridges to disable before programming and enable afterwards.

Additional info needed to program the FPGA image is passed in the struct
fpga_image_info [2] including:
* pointers to the image as either a scatter-gather buffer, a contiguous
  buffer, or the name of firmware file
* flags indicating specifics such as whether the image if for partial
  reconfiguration.

===================
The FPGA region API
===================

To register or unregister a region:
-----------------------------------

	int fpga_region_register(struct device *dev,
				 struct fpga_region *region);
	int fpga_region_unregister(struct fpga_region *region);

An example of usage can be seen in the probe function of [3]

To program an FPGA:
-------------------
	int fpga_region_program_fpga(struct fpga_region *region);

This function operates on info passed in the fpga_image_info
(region->info).

This function will attempt to:
 * lock the region's mutex
 * lock the region's FPGA manager
 * build a list of FPGA bridges if a method has been specified to do so
 * disable the bridges
 * program the FPGA
 * re-enable the bridges
 * release the locks

=============
Usage example
=============

First, allocate the info struct:

	info = fpga_image_info_alloc(dev);
	if (!info)
		return -ENOMEM;

Set flags as needed, i.e.

	info->flags |= FPGA_MGR_PARTIAL_RECONFIG;

Point to your FPGA image, such as:

	info->sgt = &sgt;

Add info to region and do the programming:

	region->info = info;
	ret = fpga_region_program_fpga(region);

Then enumerate whatever hardware has appeared in the FPGA.

--
[1] ../devicetree/bindings/fpga/fpga-region.txt
[2] ./fpga-mgr.txt
[3] ../../drivers/fpga/of-fpga-region.c
