mbox series

[RFC,v2,0/1] Add user space interaction for FPGA programming

Message ID 20241029091734.3288005-1-nava.kishore.manne@amd.com (mailing list archive)
Headers show
Series Add user space interaction for FPGA programming | expand

Message

Manne, Nava kishore Oct. 29, 2024, 9:17 a.m. UTC
The existing FPGA manager subsystem didn't have any user space interface
(other than the status/state in sysfs) in Kernel. Basically, FPGAs are
semiconductor devices that can be reprogrammed for desired hardware
functionality.

FPGAs can be reprogrammed at runtime with different types of logic and IPs
as per user need and hence there is a need to use device tree overlays for
removing/updating/adding the devices at runtime for the IPs/controllers
that are present in FPGA. But we don't have any user interface in kernel
for updating the device tree at runtime.

Sometime back there was a series sent by Pantelis Antoniou
(https://lore.kernel.org/lkml/1414528565-10907-4-git-send-email-pantelis.antoniou@konsulko.com/).

This patch introduced a user interface configfs for Device Tree overlays,
a method of dynamically altering the kernel's live Device Tree. However,
this patch series was not accepted in mainline due to various concerns.
For more details refer to this link:
https://elinux.org/Frank%27s_Evolving_Overlay_Thoughts#issues_and_what_needs_to_be_completed_--_Not_an_exhaustive_list

One of the major valid concerns that were raised with this configfs
interface was security. It provides a generic interface (Not specific
to the use cases) for modifying the live device tree.

In order to configure/program the FPGA devices, All the major vendors of
FPGA are using this configfs series as out-of-tree patch for configuring
the FPGAs and there was never an attempt to introduce a generic interface
to configure/program the FPGA in upstream and hence upstream kernel ended
up in not having proper support for FPGAs configure/program.
This series tries to address this gap of FPGA programmability by providing
a new IOCTL interface to the user.

The newly introduced IOCTL interface offers a generic and standardized
mechanism for configuring or reprogramming FPGAs at runtime. It supports
both Open Firmware (OF) and non-OF devices, utilizing vendor-specific
callbacks—such as configuration+enumeration, removal, and status checks.
To accommodate diverse device-specific configurations.

This solution enhances FPGA runtime management, supporting various device
types and vendors, while ensuring compatibility with the current FPGA
configuration flow.

Nava kishore Manne (1):
  fpga-region: Add generic IOCTL interface for runtime FPGA programming

 drivers/fpga/fpga-region.c       | 110 +++++++++++++++++++++++++++++++
 drivers/fpga/of-fpga-region.c    |  91 ++++++++++++++++++++++++-
 include/linux/fpga/fpga-region.h |  32 +++++++++
 include/uapi/linux/fpga-region.h |  51 ++++++++++++++
 4 files changed, 283 insertions(+), 1 deletion(-)
 create mode 100644 include/uapi/linux/fpga-region.h

Comments

Manne, Nava kishore Nov. 18, 2024, 6:11 a.m. UTC | #1
Ping!

> -----Original Message-----
> From: Manne, Nava kishore <nava.kishore.manne@amd.com>
> Sent: Tuesday, October 29, 2024 2:48 PM
> To: git (AMD-Xilinx) <git@amd.com>; mdf@kernel.org; hao.wu@intel.com;
> yilun.xu@intel.com; trix@redhat.com; robh@kernel.org; saravanak@google.com;
> Manne, Nava kishore <nava.kishore.manne@amd.com>; linux-
> kernel@vger.kernel.org; linux-fpga@vger.kernel.org; devicetree@vger.kernel.org
> Subject: [RFC v2 0/1]Add user space interaction for FPGA programming
> 
> The existing FPGA manager subsystem didn't have any user space interface (other
> than the status/state in sysfs) in Kernel. Basically, FPGAs are semiconductor
> devices that can be reprogrammed for desired hardware functionality.
> 
> FPGAs can be reprogrammed at runtime with different types of logic and IPs as per
> user need and hence there is a need to use device tree overlays for
> removing/updating/adding the devices at runtime for the IPs/controllers that are
> present in FPGA. But we don't have any user interface in kernel for updating the
> device tree at runtime.
> 
> Sometime back there was a series sent by Pantelis Antoniou
> (https://lore.kernel.org/lkml/1414528565-10907-4-git-send-email-
> pantelis.antoniou@konsulko.com/).
> 
> This patch introduced a user interface configfs for Device Tree overlays, a method of
> dynamically altering the kernel's live Device Tree. However, this patch series was
> not accepted in mainline due to various concerns.
> For more details refer to this link:
> https://elinux.org/Frank%27s_Evolving_Overlay_Thoughts#issues_and_what_needs
> _to_be_completed_--_Not_an_exhaustive_list
> 
> One of the major valid concerns that were raised with this configfs interface was
> security. It provides a generic interface (Not specific to the use cases) for modifying
> the live device tree.
> 
> In order to configure/program the FPGA devices, All the major vendors of FPGA are
> using this configfs series as out-of-tree patch for configuring the FPGAs and there
> was never an attempt to introduce a generic interface to configure/program the
> FPGA in upstream and hence upstream kernel ended up in not having proper
> support for FPGAs configure/program.
> This series tries to address this gap of FPGA programmability by providing a new
> IOCTL interface to the user.
> 
> The newly introduced IOCTL interface offers a generic and standardized mechanism
> for configuring or reprogramming FPGAs at runtime. It supports both Open Firmware
> (OF) and non-OF devices, utilizing vendor-specific callbacks—such as
> configuration+enumeration, removal, and status checks.
> To accommodate diverse device-specific configurations.
> 
> This solution enhances FPGA runtime management, supporting various device types
> and vendors, while ensuring compatibility with the current FPGA configuration flow.
> 
> Nava kishore Manne (1):
>   fpga-region: Add generic IOCTL interface for runtime FPGA programming
> 
>  drivers/fpga/fpga-region.c       | 110 +++++++++++++++++++++++++++++++
>  drivers/fpga/of-fpga-region.c    |  91 ++++++++++++++++++++++++-
>  include/linux/fpga/fpga-region.h |  32 +++++++++  include/uapi/linux/fpga-region.h |
> 51 ++++++++++++++
>  4 files changed, 283 insertions(+), 1 deletion(-)  create mode 100644
> include/uapi/linux/fpga-region.h
> 
> --
> 2.34.1