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

