diff mbox series

[v15,5/6] fpga: image-load: create status sysfs node

Message ID 20210909021846.681121-6-russell.h.weight@intel.com (mailing list archive)
State New
Headers show
Series FPGA Image Load (previously Security Manager) | expand

Commit Message

Russ Weight Sept. 9, 2021, 2:18 a.m. UTC
Extend the FPGA Image Load class driver to include a status sysfs node that
can be viewed to determine from the command line if an image load is in
progress. Status will be one of: idle, starting, preparing, writing, or
programming.

Signed-off-by: Russ Weight <russell.h.weight@intel.com>
---
v15:
 - Compare to previous patch:
     [PATCH v14 3/6] fpga: sec-mgr: expose sec-mgr update status
 - Changed file, symbol, and config names to reflect the new driver name
 - Removed signed-off/reviewed-by tags
v14:
 - Updated ABI documentation date and kernel version
v13:
  - No change
v12:
  - Updated Date and KernelVersion fields in ABI documentation
  - Changed syntax of sec_mgr_prog_str[] array definition from:
	"idle",			/* FPGA_SEC_PROG_IDLE */
    to:
	[FPGA_SEC_PROG_IDLE]	    = "idle",
v11:
  - No change
v10:
  - Rebased to 5.12-rc2 next
  - Updated Date and KernelVersion in ABI documentation
v9:
  - Updated Date and KernelVersion in ABI documentation
v8:
  - No change
v7:
  - Changed Date in documentation file to December 2020
v6:
  - No change
v5:
  - Use new function sysfs_emit() in the status_show() function
v4:
  - Changed from "Intel FPGA Security Manager" to FPGA Security Manager"
    and removed unnecessary references to "Intel".
  - Changed: iops -> sops, imgr -> smgr, IFPGA_ -> FPGA_, ifpga_ to fpga_
v3:
  - Use a local variable to read progress once in status_show()
  - Use dev_err to report invalid progress status
v2:
  - Bumped documentation date and version
  - Changed progress state "read_file" to "reading"
---
 .../ABI/testing/sysfs-class-fpga-image-load   |  7 ++++
 MAINTAINERS                                   |  1 +
 drivers/fpga/fpga-image-load.c                | 33 +++++++++++++++++++
 3 files changed, 41 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-class-fpga-image-load

Comments

Xu Yilun Sept. 10, 2021, 8:52 a.m. UTC | #1
On Wed, Sep 08, 2021 at 07:18:45PM -0700, Russ Weight wrote:
> Extend the FPGA Image Load class driver to include a status sysfs node that
> can be viewed to determine from the command line if an image load is in
> progress. Status will be one of: idle, starting, preparing, writing, or
> programming.

The FPGA_IMAGE_LOAD_STATUS ioctl already provides the progress info.
Why we need 2 user interfaces for the same information?

Thanks,
Yilun

> 
> Signed-off-by: Russ Weight <russell.h.weight@intel.com>
> ---
> v15:
>  - Compare to previous patch:
>      [PATCH v14 3/6] fpga: sec-mgr: expose sec-mgr update status
>  - Changed file, symbol, and config names to reflect the new driver name
>  - Removed signed-off/reviewed-by tags
> v14:
>  - Updated ABI documentation date and kernel version
> v13:
>   - No change
> v12:
>   - Updated Date and KernelVersion fields in ABI documentation
>   - Changed syntax of sec_mgr_prog_str[] array definition from:
> 	"idle",			/* FPGA_SEC_PROG_IDLE */
>     to:
> 	[FPGA_SEC_PROG_IDLE]	    = "idle",
> v11:
>   - No change
> v10:
>   - Rebased to 5.12-rc2 next
>   - Updated Date and KernelVersion in ABI documentation
> v9:
>   - Updated Date and KernelVersion in ABI documentation
> v8:
>   - No change
> v7:
>   - Changed Date in documentation file to December 2020
> v6:
>   - No change
> v5:
>   - Use new function sysfs_emit() in the status_show() function
> v4:
>   - Changed from "Intel FPGA Security Manager" to FPGA Security Manager"
>     and removed unnecessary references to "Intel".
>   - Changed: iops -> sops, imgr -> smgr, IFPGA_ -> FPGA_, ifpga_ to fpga_
> v3:
>   - Use a local variable to read progress once in status_show()
>   - Use dev_err to report invalid progress status
> v2:
>   - Bumped documentation date and version
>   - Changed progress state "read_file" to "reading"
> ---
>  .../ABI/testing/sysfs-class-fpga-image-load   |  7 ++++
>  MAINTAINERS                                   |  1 +
>  drivers/fpga/fpga-image-load.c                | 33 +++++++++++++++++++
>  3 files changed, 41 insertions(+)
>  create mode 100644 Documentation/ABI/testing/sysfs-class-fpga-image-load
> 
> diff --git a/Documentation/ABI/testing/sysfs-class-fpga-image-load b/Documentation/ABI/testing/sysfs-class-fpga-image-load
> new file mode 100644
> index 000000000000..6c04a49f01cc
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-class-fpga-image-load
> @@ -0,0 +1,7 @@
> +What: 		/sys/class/fpga_image_load/fpga_imageX/status
> +Date:		Aug 2021
> +KernelVersion:	5.15
> +Contact:	Russ Weight <russell.h.weight@intel.com>
> +Description:	Read-only. Returns a string describing the current status
> +		of an FPGA image upload. The string will be one of the
> +		following: idle, starting, preparing, writing, programming.
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 637bc003ca81..e3fbc1bde9bc 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -7362,6 +7362,7 @@ FPGA SECURITY MANAGER DRIVERS
>  M:	Russ Weight <russell.h.weight@intel.com>
>  L:	linux-fpga@vger.kernel.org
>  S:	Maintained
> +F:	Documentation/ABI/testing/sysfs-class-fpga-image-load
>  F:	Documentation/fpga/fpga-image-load.rst
>  F:	drivers/fpga/fpga-image-load.c
>  F:	include/linux/fpga/fpga-image-load.h
> diff --git a/drivers/fpga/fpga-image-load.c b/drivers/fpga/fpga-image-load.c
> index 99a47b21c995..6ec0a39f07b3 100644
> --- a/drivers/fpga/fpga-image-load.c
> +++ b/drivers/fpga/fpga-image-load.c
> @@ -236,6 +236,38 @@ static const struct file_operations fpga_image_load_fops = {
>  	.unlocked_ioctl = fpga_image_load_ioctl,
>  };
>  
> +static const char * const image_load_prog_str[] = {
> +	[FPGA_IMAGE_PROG_IDLE]	      = "idle",
> +	[FPGA_IMAGE_PROG_STARTING]    = "starting",
> +	[FPGA_IMAGE_PROG_PREPARING]   = "preparing",
> +	[FPGA_IMAGE_PROG_WRITING]     = "writing",
> +	[FPGA_IMAGE_PROG_PROGRAMMING] = "programming"
> +};
> +
> +static ssize_t
> +status_show(struct device *dev, struct device_attribute *attr, char *buf)
> +{
> +	struct fpga_image_load *imgld = to_image_load(dev);
> +	const char *status = "unknown-status";
> +	enum fpga_image_prog progress;
> +
> +	progress = imgld->progress;
> +	if (progress < FPGA_IMAGE_PROG_MAX)
> +		status = image_load_prog_str[progress];
> +	else
> +		dev_err(dev, "Invalid status during secure update: %d\n",
> +			progress);
> +
> +	return sysfs_emit(buf, "%s\n", status);
> +}
> +static DEVICE_ATTR_RO(status);
> +
> +static struct attribute *fpga_image_load_attrs[] = {
> +	&dev_attr_status.attr,
> +	NULL,
> +};
> +ATTRIBUTE_GROUPS(fpga_image_load);
> +
>  /**
>   * fpga_image_load_register - create and register an FPGA Image Load Device
>   *
> @@ -373,6 +405,7 @@ static int __init fpga_image_load_class_init(void)
>  	if (ret)
>  		goto exit_destroy_class;
>  
> +	fpga_image_load_class->dev_groups = fpga_image_load_groups;
>  	fpga_image_load_class->dev_release = fpga_image_load_dev_release;
>  
>  	return 0;
> -- 
> 2.25.1
Russ Weight Sept. 10, 2021, 11:30 p.m. UTC | #2
On 9/10/21 1:52 AM, Xu Yilun wrote:
> On Wed, Sep 08, 2021 at 07:18:45PM -0700, Russ Weight wrote:
>> Extend the FPGA Image Load class driver to include a status sysfs node that
>> can be viewed to determine from the command line if an image load is in
>> progress. Status will be one of: idle, starting, preparing, writing, or
>> programming.
> The FPGA_IMAGE_LOAD_STATUS ioctl already provides the progress info.
> Why we need 2 user interfaces for the same information?

Updates on Vista Creek can take up to 40 minutes. I thought it might
be helpful to have a simple way, from the command line, to verify
whether or not there is an image upload in progress. Do you agree? Or
do you think this is unnecessary? Should I remove it? Or save it for
a later patch (after the main patches have been accepted)?

- Russ

>
> Thanks,
> Yilun
>
>> Signed-off-by: Russ Weight <russell.h.weight@intel.com>
>> ---
>> v15:
>>  - Compare to previous patch:
>>      [PATCH v14 3/6] fpga: sec-mgr: expose sec-mgr update status
>>  - Changed file, symbol, and config names to reflect the new driver name
>>  - Removed signed-off/reviewed-by tags
>> v14:
>>  - Updated ABI documentation date and kernel version
>> v13:
>>   - No change
>> v12:
>>   - Updated Date and KernelVersion fields in ABI documentation
>>   - Changed syntax of sec_mgr_prog_str[] array definition from:
>> 	"idle",			/* FPGA_SEC_PROG_IDLE */
>>     to:
>> 	[FPGA_SEC_PROG_IDLE]	    = "idle",
>> v11:
>>   - No change
>> v10:
>>   - Rebased to 5.12-rc2 next
>>   - Updated Date and KernelVersion in ABI documentation
>> v9:
>>   - Updated Date and KernelVersion in ABI documentation
>> v8:
>>   - No change
>> v7:
>>   - Changed Date in documentation file to December 2020
>> v6:
>>   - No change
>> v5:
>>   - Use new function sysfs_emit() in the status_show() function
>> v4:
>>   - Changed from "Intel FPGA Security Manager" to FPGA Security Manager"
>>     and removed unnecessary references to "Intel".
>>   - Changed: iops -> sops, imgr -> smgr, IFPGA_ -> FPGA_, ifpga_ to fpga_
>> v3:
>>   - Use a local variable to read progress once in status_show()
>>   - Use dev_err to report invalid progress status
>> v2:
>>   - Bumped documentation date and version
>>   - Changed progress state "read_file" to "reading"
>> ---
>>  .../ABI/testing/sysfs-class-fpga-image-load   |  7 ++++
>>  MAINTAINERS                                   |  1 +
>>  drivers/fpga/fpga-image-load.c                | 33 +++++++++++++++++++
>>  3 files changed, 41 insertions(+)
>>  create mode 100644 Documentation/ABI/testing/sysfs-class-fpga-image-load
>>
>> diff --git a/Documentation/ABI/testing/sysfs-class-fpga-image-load b/Documentation/ABI/testing/sysfs-class-fpga-image-load
>> new file mode 100644
>> index 000000000000..6c04a49f01cc
>> --- /dev/null
>> +++ b/Documentation/ABI/testing/sysfs-class-fpga-image-load
>> @@ -0,0 +1,7 @@
>> +What: 		/sys/class/fpga_image_load/fpga_imageX/status
>> +Date:		Aug 2021
>> +KernelVersion:	5.15
>> +Contact:	Russ Weight <russell.h.weight@intel.com>
>> +Description:	Read-only. Returns a string describing the current status
>> +		of an FPGA image upload. The string will be one of the
>> +		following: idle, starting, preparing, writing, programming.
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 637bc003ca81..e3fbc1bde9bc 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -7362,6 +7362,7 @@ FPGA SECURITY MANAGER DRIVERS
>>  M:	Russ Weight <russell.h.weight@intel.com>
>>  L:	linux-fpga@vger.kernel.org
>>  S:	Maintained
>> +F:	Documentation/ABI/testing/sysfs-class-fpga-image-load
>>  F:	Documentation/fpga/fpga-image-load.rst
>>  F:	drivers/fpga/fpga-image-load.c
>>  F:	include/linux/fpga/fpga-image-load.h
>> diff --git a/drivers/fpga/fpga-image-load.c b/drivers/fpga/fpga-image-load.c
>> index 99a47b21c995..6ec0a39f07b3 100644
>> --- a/drivers/fpga/fpga-image-load.c
>> +++ b/drivers/fpga/fpga-image-load.c
>> @@ -236,6 +236,38 @@ static const struct file_operations fpga_image_load_fops = {
>>  	.unlocked_ioctl = fpga_image_load_ioctl,
>>  };
>>  
>> +static const char * const image_load_prog_str[] = {
>> +	[FPGA_IMAGE_PROG_IDLE]	      = "idle",
>> +	[FPGA_IMAGE_PROG_STARTING]    = "starting",
>> +	[FPGA_IMAGE_PROG_PREPARING]   = "preparing",
>> +	[FPGA_IMAGE_PROG_WRITING]     = "writing",
>> +	[FPGA_IMAGE_PROG_PROGRAMMING] = "programming"
>> +};
>> +
>> +static ssize_t
>> +status_show(struct device *dev, struct device_attribute *attr, char *buf)
>> +{
>> +	struct fpga_image_load *imgld = to_image_load(dev);
>> +	const char *status = "unknown-status";
>> +	enum fpga_image_prog progress;
>> +
>> +	progress = imgld->progress;
>> +	if (progress < FPGA_IMAGE_PROG_MAX)
>> +		status = image_load_prog_str[progress];
>> +	else
>> +		dev_err(dev, "Invalid status during secure update: %d\n",
>> +			progress);
>> +
>> +	return sysfs_emit(buf, "%s\n", status);
>> +}
>> +static DEVICE_ATTR_RO(status);
>> +
>> +static struct attribute *fpga_image_load_attrs[] = {
>> +	&dev_attr_status.attr,
>> +	NULL,
>> +};
>> +ATTRIBUTE_GROUPS(fpga_image_load);
>> +
>>  /**
>>   * fpga_image_load_register - create and register an FPGA Image Load Device
>>   *
>> @@ -373,6 +405,7 @@ static int __init fpga_image_load_class_init(void)
>>  	if (ret)
>>  		goto exit_destroy_class;
>>  
>> +	fpga_image_load_class->dev_groups = fpga_image_load_groups;
>>  	fpga_image_load_class->dev_release = fpga_image_load_dev_release;
>>  
>>  	return 0;
>> -- 
>> 2.25.1
Tom Rix Sept. 11, 2021, 5:58 p.m. UTC | #3
On 9/10/21 4:30 PM, Russ Weight wrote:
>
> On 9/10/21 1:52 AM, Xu Yilun wrote:
>> On Wed, Sep 08, 2021 at 07:18:45PM -0700, Russ Weight wrote:
>>> Extend the FPGA Image Load class driver to include a status sysfs node that
>>> can be viewed to determine from the command line if an image load is in
>>> progress. Status will be one of: idle, starting, preparing, writing, or
>>> programming.
>> The FPGA_IMAGE_LOAD_STATUS ioctl already provides the progress info.
>> Why we need 2 user interfaces for the same information?
> Updates on Vista Creek can take up to 40 minutes. I thought it might
> be helpful to have a simple way, from the command line, to verify
> whether or not there is an image upload in progress. Do you agree? Or
> do you think this is unnecessary? Should I remove it? Or save it for
> a later patch (after the main patches have been accepted)?

I agree, there should not be two methods to doing the same thing.

I prefer the ioctl since it handles other cmd's as well.

The user has to use the ioctl to start the write so it would for more 
natural to use the ioctl over sysfs to the check the status

Remove it.

Make a strong case for it's need when/if you want to add it back later.

Tom

>
> - Russ
>
>> Thanks,
>> Yilun
>>
>>> Signed-off-by: Russ Weight <russell.h.weight@intel.com>
>>> ---
>>> v15:
>>>   - Compare to previous patch:
>>>       [PATCH v14 3/6] fpga: sec-mgr: expose sec-mgr update status
>>>   - Changed file, symbol, and config names to reflect the new driver name
>>>   - Removed signed-off/reviewed-by tags
>>> v14:
>>>   - Updated ABI documentation date and kernel version
>>> v13:
>>>    - No change
>>> v12:
>>>    - Updated Date and KernelVersion fields in ABI documentation
>>>    - Changed syntax of sec_mgr_prog_str[] array definition from:
>>> 	"idle",			/* FPGA_SEC_PROG_IDLE */
>>>      to:
>>> 	[FPGA_SEC_PROG_IDLE]	    = "idle",
>>> v11:
>>>    - No change
>>> v10:
>>>    - Rebased to 5.12-rc2 next
>>>    - Updated Date and KernelVersion in ABI documentation
>>> v9:
>>>    - Updated Date and KernelVersion in ABI documentation
>>> v8:
>>>    - No change
>>> v7:
>>>    - Changed Date in documentation file to December 2020
>>> v6:
>>>    - No change
>>> v5:
>>>    - Use new function sysfs_emit() in the status_show() function
>>> v4:
>>>    - Changed from "Intel FPGA Security Manager" to FPGA Security Manager"
>>>      and removed unnecessary references to "Intel".
>>>    - Changed: iops -> sops, imgr -> smgr, IFPGA_ -> FPGA_, ifpga_ to fpga_
>>> v3:
>>>    - Use a local variable to read progress once in status_show()
>>>    - Use dev_err to report invalid progress status
>>> v2:
>>>    - Bumped documentation date and version
>>>    - Changed progress state "read_file" to "reading"
>>> ---
>>>   .../ABI/testing/sysfs-class-fpga-image-load   |  7 ++++
>>>   MAINTAINERS                                   |  1 +
>>>   drivers/fpga/fpga-image-load.c                | 33 +++++++++++++++++++
>>>   3 files changed, 41 insertions(+)
>>>   create mode 100644 Documentation/ABI/testing/sysfs-class-fpga-image-load
>>>
>>> diff --git a/Documentation/ABI/testing/sysfs-class-fpga-image-load b/Documentation/ABI/testing/sysfs-class-fpga-image-load
>>> new file mode 100644
>>> index 000000000000..6c04a49f01cc
>>> --- /dev/null
>>> +++ b/Documentation/ABI/testing/sysfs-class-fpga-image-load
>>> @@ -0,0 +1,7 @@
>>> +What: 		/sys/class/fpga_image_load/fpga_imageX/status
>>> +Date:		Aug 2021
>>> +KernelVersion:	5.15
>>> +Contact:	Russ Weight <russell.h.weight@intel.com>
>>> +Description:	Read-only. Returns a string describing the current status
>>> +		of an FPGA image upload. The string will be one of the
>>> +		following: idle, starting, preparing, writing, programming.
>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>> index 637bc003ca81..e3fbc1bde9bc 100644
>>> --- a/MAINTAINERS
>>> +++ b/MAINTAINERS
>>> @@ -7362,6 +7362,7 @@ FPGA SECURITY MANAGER DRIVERS
>>>   M:	Russ Weight <russell.h.weight@intel.com>
>>>   L:	linux-fpga@vger.kernel.org
>>>   S:	Maintained
>>> +F:	Documentation/ABI/testing/sysfs-class-fpga-image-load
>>>   F:	Documentation/fpga/fpga-image-load.rst
>>>   F:	drivers/fpga/fpga-image-load.c
>>>   F:	include/linux/fpga/fpga-image-load.h
>>> diff --git a/drivers/fpga/fpga-image-load.c b/drivers/fpga/fpga-image-load.c
>>> index 99a47b21c995..6ec0a39f07b3 100644
>>> --- a/drivers/fpga/fpga-image-load.c
>>> +++ b/drivers/fpga/fpga-image-load.c
>>> @@ -236,6 +236,38 @@ static const struct file_operations fpga_image_load_fops = {
>>>   	.unlocked_ioctl = fpga_image_load_ioctl,
>>>   };
>>>   
>>> +static const char * const image_load_prog_str[] = {
>>> +	[FPGA_IMAGE_PROG_IDLE]	      = "idle",
>>> +	[FPGA_IMAGE_PROG_STARTING]    = "starting",
>>> +	[FPGA_IMAGE_PROG_PREPARING]   = "preparing",
>>> +	[FPGA_IMAGE_PROG_WRITING]     = "writing",
>>> +	[FPGA_IMAGE_PROG_PROGRAMMING] = "programming"
>>> +};
>>> +
>>> +static ssize_t
>>> +status_show(struct device *dev, struct device_attribute *attr, char *buf)
>>> +{
>>> +	struct fpga_image_load *imgld = to_image_load(dev);
>>> +	const char *status = "unknown-status";
>>> +	enum fpga_image_prog progress;
>>> +
>>> +	progress = imgld->progress;
>>> +	if (progress < FPGA_IMAGE_PROG_MAX)
>>> +		status = image_load_prog_str[progress];
>>> +	else
>>> +		dev_err(dev, "Invalid status during secure update: %d\n",
>>> +			progress);
>>> +
>>> +	return sysfs_emit(buf, "%s\n", status);
>>> +}
>>> +static DEVICE_ATTR_RO(status);
>>> +
>>> +static struct attribute *fpga_image_load_attrs[] = {
>>> +	&dev_attr_status.attr,
>>> +	NULL,
>>> +};
>>> +ATTRIBUTE_GROUPS(fpga_image_load);
>>> +
>>>   /**
>>>    * fpga_image_load_register - create and register an FPGA Image Load Device
>>>    *
>>> @@ -373,6 +405,7 @@ static int __init fpga_image_load_class_init(void)
>>>   	if (ret)
>>>   		goto exit_destroy_class;
>>>   
>>> +	fpga_image_load_class->dev_groups = fpga_image_load_groups;
>>>   	fpga_image_load_class->dev_release = fpga_image_load_dev_release;
>>>   
>>>   	return 0;
>>> -- 
>>> 2.25.1
Xu Yilun Sept. 13, 2021, 8:27 a.m. UTC | #4
On Sat, Sep 11, 2021 at 10:58:16AM -0700, Tom Rix wrote:
> 
> On 9/10/21 4:30 PM, Russ Weight wrote:
> > 
> > On 9/10/21 1:52 AM, Xu Yilun wrote:
> > > On Wed, Sep 08, 2021 at 07:18:45PM -0700, Russ Weight wrote:
> > > > Extend the FPGA Image Load class driver to include a status sysfs node that
> > > > can be viewed to determine from the command line if an image load is in
> > > > progress. Status will be one of: idle, starting, preparing, writing, or
> > > > programming.
> > > The FPGA_IMAGE_LOAD_STATUS ioctl already provides the progress info.
> > > Why we need 2 user interfaces for the same information?
> > Updates on Vista Creek can take up to 40 minutes. I thought it might
> > be helpful to have a simple way, from the command line, to verify
> > whether or not there is an image upload in progress. Do you agree? Or
> > do you think this is unnecessary? Should I remove it? Or save it for
> > a later patch (after the main patches have been accepted)?
> 
> I agree, there should not be two methods to doing the same thing.
> 
> I prefer the ioctl since it handles other cmd's as well.
> 
> The user has to use the ioctl to start the write so it would for more
> natural to use the ioctl over sysfs to the check the status
> 
> Remove it.
> 
> Make a strong case for it's need when/if you want to add it back later.

Yes, remove it. Not a strong use case for this interface now.

Thanks,
Yilun
diff mbox series

Patch

diff --git a/Documentation/ABI/testing/sysfs-class-fpga-image-load b/Documentation/ABI/testing/sysfs-class-fpga-image-load
new file mode 100644
index 000000000000..6c04a49f01cc
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-fpga-image-load
@@ -0,0 +1,7 @@ 
+What: 		/sys/class/fpga_image_load/fpga_imageX/status
+Date:		Aug 2021
+KernelVersion:	5.15
+Contact:	Russ Weight <russell.h.weight@intel.com>
+Description:	Read-only. Returns a string describing the current status
+		of an FPGA image upload. The string will be one of the
+		following: idle, starting, preparing, writing, programming.
diff --git a/MAINTAINERS b/MAINTAINERS
index 637bc003ca81..e3fbc1bde9bc 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7362,6 +7362,7 @@  FPGA SECURITY MANAGER DRIVERS
 M:	Russ Weight <russell.h.weight@intel.com>
 L:	linux-fpga@vger.kernel.org
 S:	Maintained
+F:	Documentation/ABI/testing/sysfs-class-fpga-image-load
 F:	Documentation/fpga/fpga-image-load.rst
 F:	drivers/fpga/fpga-image-load.c
 F:	include/linux/fpga/fpga-image-load.h
diff --git a/drivers/fpga/fpga-image-load.c b/drivers/fpga/fpga-image-load.c
index 99a47b21c995..6ec0a39f07b3 100644
--- a/drivers/fpga/fpga-image-load.c
+++ b/drivers/fpga/fpga-image-load.c
@@ -236,6 +236,38 @@  static const struct file_operations fpga_image_load_fops = {
 	.unlocked_ioctl = fpga_image_load_ioctl,
 };
 
+static const char * const image_load_prog_str[] = {
+	[FPGA_IMAGE_PROG_IDLE]	      = "idle",
+	[FPGA_IMAGE_PROG_STARTING]    = "starting",
+	[FPGA_IMAGE_PROG_PREPARING]   = "preparing",
+	[FPGA_IMAGE_PROG_WRITING]     = "writing",
+	[FPGA_IMAGE_PROG_PROGRAMMING] = "programming"
+};
+
+static ssize_t
+status_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+	struct fpga_image_load *imgld = to_image_load(dev);
+	const char *status = "unknown-status";
+	enum fpga_image_prog progress;
+
+	progress = imgld->progress;
+	if (progress < FPGA_IMAGE_PROG_MAX)
+		status = image_load_prog_str[progress];
+	else
+		dev_err(dev, "Invalid status during secure update: %d\n",
+			progress);
+
+	return sysfs_emit(buf, "%s\n", status);
+}
+static DEVICE_ATTR_RO(status);
+
+static struct attribute *fpga_image_load_attrs[] = {
+	&dev_attr_status.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(fpga_image_load);
+
 /**
  * fpga_image_load_register - create and register an FPGA Image Load Device
  *
@@ -373,6 +405,7 @@  static int __init fpga_image_load_class_init(void)
 	if (ret)
 		goto exit_destroy_class;
 
+	fpga_image_load_class->dev_groups = fpga_image_load_groups;
 	fpga_image_load_class->dev_release = fpga_image_load_dev_release;
 
 	return 0;