FPGA Region enhancements and fixes

From: Alan Tull
Date: Wed Feb 15 2017 - 11:14:42 EST


This patchset intends to enable expanding the use of FPGA regions
beyond device tree overlays. Also one fix for the existing DTO
implementation. It's an RFC, looking for feedback, also I need
to do more testing and fix it working for modules.

Patch 1 adds a function so the caller could program the fpga from
either a scatter gather table, a buffer, or a firmware file. The
parameters are passed in the fpga_image_info struct. This way works,
but there may be a better or more widely accepted way. Maybe they
should be a union? If someone knows of a well written example in the
kernel for me to emulate, that would be really appreciated.

Patch 2 is a fix for if you write > 1 overlay to a region.
It keeps track of overlays in a list.

Patch 3 adds functions for working with FPGA bridges using the
device rather than the device node (for non DT use).

Patches 4-5 separate finding and locking a FPGA manager. So someone
could get a reference for a FPGA manager without locking it for
exclusive use.

Patch 6 breaks up fpga-region.c into two files, moving the DT overlay
support to of-fpga-region.c. The functions exported by fpga-region.c
will enable code that creates an FPGA region and tell it what manager
and bridge to use. fpga-region.c doesn't do enumeration so whatever
code creates the region will also still have the responsibility to do
some enumeration after programming.

Patches 7-8 a sysfs interface to FPGA regions. I'm sure this will be
controversial as discussions about FPGA userspace interfaces have
incited lively discussion in the past. The nice thing about this
interface is that it handles the dance of disabling the bridge before
programming and reenabling it afterwards. But no enumeration.
I post it as separate patch and document so the rest of the patches
could go forward while we hash out what a good non-DT interface
may look like if there is some other layer that is requesting
reprogramming and handling enumeration.

I've tested it lightly and believe that each patch separately
builds and works.

Known issues: doesn't work as a module anymore. I'll be fixing that.

Alan

Alan Tull (8):
fpga-mgr: add a single function for fpga loading methods
fpga-region: support more than one overlay per FPGA region
fpga-bridge: add non-dt support
doc: fpga-mgr: separate getting/locking FPGA manager
fpga-mgr: separate getting/locking FPGA manager
fpga-region: separate out common code to allow non-dt support
fpga-region: add sysfs interface
doc: fpga: add sysfs document for fpga region

Documentation/ABI/testing/sysfs-class-fpga-region | 26 +
Documentation/fpga/fpga-mgr.txt | 19 +-
drivers/fpga/Kconfig | 20 +-
drivers/fpga/Makefile | 1 +
drivers/fpga/fpga-bridge.c | 107 +++-
drivers/fpga/fpga-mgr.c | 56 +-
drivers/fpga/fpga-region.c | 725 ++++++++++------------
drivers/fpga/fpga-region.h | 68 ++
drivers/fpga/of-fpga-region.c | 510 +++++++++++++++
include/linux/fpga/fpga-bridge.h | 7 +-
include/linux/fpga/fpga-mgr.h | 17 +
11 files changed, 1128 insertions(+), 428 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-fpga-region
create mode 100644 drivers/fpga/fpga-region.h
create mode 100644 drivers/fpga/of-fpga-region.c

--
2.7.4