Re: FPGA Region enhancements and fixes

From: Alan Tull
Date: Tue Feb 28 2017 - 12:35:58 EST


On Wed, Feb 15, 2017 at 10:14 AM, Alan Tull <atull@xxxxxxxxxx> wrote:
> 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.

There's a lot of stuff to look at here. To make it easier, I've pushed a
branch to the linux-fpga repo. Branch name is
next-20170228-rfc-atull-20170210

Alan

>
> 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
>