2019-05-23 12:53:13

by Richard Gong

[permalink] [raw]
Subject: [PATCHv3 0/4] add Intel Stratix10 remote system update driver

From: Richard Gong <[email protected]>

Since version 2 submission is too late for kernel 5.2, I submit version 3
of Intel Stratix10 Remote System Update (RSU) drive for kernel 5.3.

There is only one additional change in version 3 patch sets, which updates
kernel version to 5.3 in sysfs interface document.

Intel Stratix10 remote system update driver patches have been reviewed by
Alan Tull and other colleagues at Intel.

The Intel Stratix10 Remote System Update driver exposes interfaces
access through the Intel Stratix10 Service Layer to user space via sysfs
interface. The RSU interfaces report and control some of the optional RSU
features on Intel Stratix 10 SoC.

The RSU feature provides a way for customers to update the boot
configuration of a Intel Stratix 10 SoC device with significantly reduced
risk of corrupting the bitstream storage and bricking the system.

v3: changed kernel version from 5.2 to 5.3 in RSU sysfs interface document
v2: removed compatible = "intel,stratix10-rsu"
added intel stratix10 RSU device
changed to support RSU in handling watchdog timeout
s/attr_group/ATTRIBUTE_GROUPS, use devm_device_add_groups() and
devm_device_remove_groups()
added check the return value from rsu_send_msg()
removed RSU binding text file
other corrections/changes

Richard Gong (4):
firmware: stratix10-svc: extend svc to support RSU notify and WD
features
firmware: add Intel Stratix10 remote system update driver
firmware: rsu: document sysfs interface
MAINTAINERS: add maintainer for Intel Stratix10 FW drivers

.../testing/sysfs-devices-platform-stratix10-rsu | 100 +++++
MAINTAINERS | 11 +
drivers/firmware/Kconfig | 18 +
drivers/firmware/Makefile | 1 +
drivers/firmware/stratix10-rsu.c | 409 +++++++++++++++++++++
drivers/firmware/stratix10-svc.c | 74 +++-
include/linux/firmware/intel/stratix10-smc.h | 48 ++-
.../linux/firmware/intel/stratix10-svc-client.h | 12 +-
8 files changed, 663 insertions(+), 10 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
create mode 100644 drivers/firmware/stratix10-rsu.c

--
2.7.4


2019-05-23 12:53:38

by Richard Gong

[permalink] [raw]
Subject: [PATCHv3 3/4] firmware: rsu: document sysfs interface

From: Richard Gong <[email protected]>

Describe Intel Stratix10 Remote System Update (RSU) device attributes

Signed-off-by: Richard Gong <[email protected]>
Reviewed-by: Alan Tull <[email protected]>
---
v2: changed to use tab everywhere and wrap lines at 72 colums
s/soc:firmware:svc:rsu/stratix10-rsu.0
added for watchdog
v3: s/KernelVersion:5.2/KernelVersion:5.3
---
.../testing/sysfs-devices-platform-stratix10-rsu | 100 +++++++++++++++++++++
1 file changed, 100 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu

diff --git a/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu b/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
new file mode 100644
index 0000000..73ebaf2
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
@@ -0,0 +1,100 @@
+ Intel Stratix10 Remote System Update (RSU) device attributes
+
+What: /sys/devices/platform/stratix10-rsu.0/current_image
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (RO) the address of image currently running in flash.
+
+What: /sys/devices/platform/stratix10-rsu.0/fail_image
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (RO) the address of failed image in flash.
+
+What: /sys/devices/platform/stratix10-rsu.0/state
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (RO) the state of RSU system.
+ The state field has two parts: major error code in upper 16 bits and
+ minor error code in lower 16 bits.
+
+ Major error code:
+ 0xF001 bitstream error
+ 0xF002 hardware access failure
+ 0xF003 bitstream corruption
+ 0xF004 internal error
+ 0xF005 device error
+ 0xF006 CPU watchdog timeout
+ 0xF007 internal unknown error
+ Minor error code:
+ Currently used only when major error is 0xF006
+ (CPU watchdog timeout), in which case the minor
+ error code is the value reported by CPU to
+ firmware through the RSU notify command before
+ the watchdog timeout occurs.
+
+What: /sys/devices/platform/stratix10-rsu.0/fail_image
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (RO) the version number of RSU firmware.
+
+What: /sys/devices/platform/stratix10-rsu.0/error_location
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (RO) the error offset inside the image that failed.
+
+What: /sys/devices/platform/stratix10-rsu.0/error_details
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (RO) error code.
+
+What: /sys/devices/platform/stratix10-rsu.0/reboot_image
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (WO) the address of image to be loaded on next reboot command.
+
+What: /sys/devices/platform/stratix10-rsu.0/notify
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (WO) inform firmware that the current software state as
+ a 16-bit numerical value below:
+ 0 is for the first stage bootloader didn't run
+ or didn't reach the point of launching second
+ stage bootloader.
+ 1 is for failed in second bootloader or didn't
+ get to the point of launching the operating
+ system.
+ 2 is for both first and second stage bootloader
+ ran and the operating system launch was
+ attempted.
+
+What: /sys/devices/platform/stratix10-rsu.0/watchdog
+Date: May 2019
+KernelVersion: 5.3
+Contact: Richard Gong <[email protected]>
+Description:
+ (WO) instruct firmware what to do when rebooting due to
+ a watchdog timer expiration. The attribute takes a
+ 32 bits word as the parameter indicating the action for
+ firmware to take:
+
+ b[0] is set to 0, the firmware should reboot
+ with the normal RSU flow.
+ b[0] is set to 1, the firmware shall always
+ reboot with the current running image.
+ b[31:1] reserved.
--
2.7.4

2019-05-23 12:53:48

by Richard Gong

[permalink] [raw]
Subject: [PATCHv3 1/4] firmware: stratix10-svc: extend svc to support RSU notify and WD features

From: Richard Gong <[email protected]>

Entend Intel Stratix10 service layer driver to support RSU notify and
watchdog timeout features.

RSU is used to provide our customers with protection against loading bad
bitstream onto their devices when those devices are booting from flash

RSU notifies provides users with an API to notify the firmware of the
state of hard processor system.

RSU instructs firmware what to do when rebooting due to a watchdog timer
expiration, the firmware can reboot with the current running image or
reboot with the normal RSU flow.

Signed-off-by: Richard Gong <[email protected]>
Reviewed-by: Alan Tull <[email protected]>
---
v2: changed to add intel stratix10 RSU device
changed to support RSU in handling a watchdog timeout
v3: no change
---
drivers/firmware/stratix10-svc.c | 74 +++++++++++++++++++++-
include/linux/firmware/intel/stratix10-smc.h | 48 ++++++++++++--
.../linux/firmware/intel/stratix10-svc-client.h | 12 +++-
3 files changed, 124 insertions(+), 10 deletions(-)

diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
index 6e65148..89e2849 100644
--- a/drivers/firmware/stratix10-svc.c
+++ b/drivers/firmware/stratix10-svc.c
@@ -38,6 +38,9 @@
#define FPGA_CONFIG_DATA_CLAIM_TIMEOUT_MS 200
#define FPGA_CONFIG_STATUS_TIMEOUT_SEC 30

+/* stratix10 service layer clients */
+#define STRATIX10_RSU "stratix10-rsu"
+
typedef void (svc_invoke_fn)(unsigned long, unsigned long, unsigned long,
unsigned long, unsigned long, unsigned long,
unsigned long, unsigned long,
@@ -45,6 +48,14 @@ typedef void (svc_invoke_fn)(unsigned long, unsigned long, unsigned long,
struct stratix10_svc_chan;

/**
+ * struct stratix10_svc - svc private data
+ * @stratix10_svc_rsu: pointer to stratix10 RSU device
+ */
+struct stratix10_svc {
+ struct platform_device *stratix10_svc_rsu;
+};
+
+/**
* struct stratix10_svc_sh_memory - service shared memory structure
* @sync_complete: state for a completion
* @addr: physical address of shared memory block
@@ -295,7 +306,10 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
case COMMAND_RECONFIG_STATUS:
cb_data->status = BIT(SVC_STATUS_RECONFIG_COMPLETED);
break;
+ case COMMAND_RSU_STATUS:
case COMMAND_RSU_UPDATE:
+ case COMMAND_RSU_NOTIFY:
+ case COMMAND_RSU_WD:
cb_data->status = BIT(SVC_STATUS_RSU_OK);
break;
default:
@@ -386,6 +400,16 @@ static int svc_normal_to_secure_thread(void *data)
a1 = pdata->arg[0];
a2 = 0;
break;
+ case COMMAND_RSU_NOTIFY:
+ a0 = INTEL_SIP_SMC_RSU_NOTIFY;
+ a1 = pdata->arg[0];
+ a2 = 0;
+ break;
+ case COMMAND_RSU_WD:
+ a0 = INTEL_SIP_SMC_RSU_WD;
+ a1 = pdata->arg[0];
+ a2 = 0;
+ break;
default:
pr_warn("it shouldn't happen\n");
break;
@@ -438,7 +462,28 @@ static int svc_normal_to_secure_thread(void *data)
pr_debug("%s: STATUS_REJECTED\n", __func__);
break;
case INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR:
+ case INTEL_SIP_SMC_RSU_ERROR:
pr_err("%s: STATUS_ERROR\n", __func__);
+ switch (pdata->command) {
+ /* for FPGA mgr */
+ case COMMAND_RECONFIG_DATA_CLAIM:
+ case COMMAND_RECONFIG:
+ case COMMAND_RECONFIG_DATA_SUBMIT:
+ case COMMAND_RECONFIG_STATUS:
+ cbdata->status =
+ BIT(SVC_STATUS_RECONFIG_ERROR);
+ break;
+
+ /* for RSU */
+ case COMMAND_RSU_STATUS:
+ case COMMAND_RSU_UPDATE:
+ case COMMAND_RSU_NOTIFY:
+ case COMMAND_RSU_WD:
+ cbdata->status =
+ BIT(SVC_STATUS_RSU_ERROR);
+ break;
+ }
+
cbdata->status = BIT(SVC_STATUS_RECONFIG_ERROR);
cbdata->kaddr1 = NULL;
cbdata->kaddr2 = NULL;
@@ -530,7 +575,7 @@ static int svc_get_sh_memory(struct platform_device *pdev,

if (!sh_memory->addr || !sh_memory->size) {
dev_err(dev,
- "fails to get shared memory info from secure world\n");
+ "failed to get shared memory info from secure world\n");
return -ENOMEM;
}

@@ -768,7 +813,7 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)
"svc_smc_hvc_thread");
if (IS_ERR(chan->ctrl->task)) {
dev_err(chan->ctrl->dev,
- "fails to create svc_smc_hvc_thread\n");
+ "failed to create svc_smc_hvc_thread\n");
kfree(p_data);
return -EINVAL;
}
@@ -913,6 +958,8 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)
struct stratix10_svc_chan *chans;
struct gen_pool *genpool;
struct stratix10_svc_sh_memory *sh_memory;
+ struct stratix10_svc *svc;
+
svc_invoke_fn *invoke_fn;
size_t fifo_size;
int ret;
@@ -957,7 +1004,7 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)
fifo_size = sizeof(struct stratix10_svc_data) * SVC_NUM_DATA_IN_FIFO;
ret = kfifo_alloc(&controller->svc_fifo, fifo_size, GFP_KERNEL);
if (ret) {
- dev_err(dev, "fails to allocate FIFO\n");
+ dev_err(dev, "failed to allocate FIFO\n");
return ret;
}
spin_lock_init(&controller->svc_fifo_lock);
@@ -975,6 +1022,24 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)
list_add_tail(&controller->node, &svc_ctrl);
platform_set_drvdata(pdev, controller);

+ /* add svc client device(s) */
+ svc = devm_kzalloc(dev, sizeof(*svc), GFP_KERNEL);
+ if (!svc)
+ return -ENOMEM;
+
+ svc->stratix10_svc_rsu = platform_device_alloc(STRATIX10_RSU, 0);
+ if (!svc->stratix10_svc_rsu) {
+ dev_err(dev, "failed to allocate %s device\n", STRATIX10_RSU);
+ return -ENOMEM;
+ }
+
+ ret = platform_device_add(svc->stratix10_svc_rsu);
+ if (ret) {
+ platform_device_put(svc->stratix10_svc_rsu);
+ return ret;
+ }
+ dev_set_drvdata(dev, svc);
+
pr_info("Intel Service Layer Driver Initialized\n");

return ret;
@@ -982,8 +1047,11 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)

static int stratix10_svc_drv_remove(struct platform_device *pdev)
{
+ struct stratix10_svc *svc = dev_get_drvdata(&pdev->dev);
struct stratix10_svc_controller *ctrl = platform_get_drvdata(pdev);

+ platform_device_unregister(svc->stratix10_svc_rsu);
+
kfifo_free(&ctrl->svc_fifo);
if (ctrl->task) {
kthread_stop(ctrl->task);
diff --git a/include/linux/firmware/intel/stratix10-smc.h b/include/linux/firmware/intel/stratix10-smc.h
index 01684d9..6096738 100644
--- a/include/linux/firmware/intel/stratix10-smc.h
+++ b/include/linux/firmware/intel/stratix10-smc.h
@@ -210,7 +210,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_FPGA_CONFIG_LOOPBACK \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_LOOPBACK)

-/*
+/**
* Request INTEL_SIP_SMC_REG_READ
*
* Read a protected register at EL3
@@ -229,7 +229,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_REG_READ \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_READ)

-/*
+/**
* Request INTEL_SIP_SMC_REG_WRITE
*
* Write a protected register at EL3
@@ -248,7 +248,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_REG_WRITE \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_WRITE)

-/*
+/**
* Request INTEL_SIP_SMC_FUNCID_REG_UPDATE
*
* Update one or more bits in a protected register at EL3 using a
@@ -269,7 +269,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_REG_UPDATE \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_UPDATE)

-/*
+/**
* Request INTEL_SIP_SMC_RSU_STATUS
*
* Request remote status update boot log, call is synchronous.
@@ -292,7 +292,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_RSU_STATUS \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_STATUS)

-/*
+/**
* Request INTEL_SIP_SMC_RSU_UPDATE
*
* Request to set the offset of the bitstream to boot after reboot, call
@@ -310,7 +310,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_RSU_UPDATE \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_UPDATE)

-/*
+/**
* Request INTEL_SIP_SMC_ECC_DBE
*
* Sync call used by service driver at EL1 to alert EL3 that a Double
@@ -329,3 +329,39 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECC_DBE)

#endif
+
+/**
+ * Request INTEL_SIP_SMC_RSU_NOTIFY
+ *
+ * Sync call used by service driver at EL1 to report hard processor
+ * system state to firmware
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_RSU_NOTIFY
+ * a1 32bit value representing hard processor system state
+ * a2-7 not used
+ *
+ * Return status
+ * a0 INTEL_SIP_SMC_STATUS_OK
+ */
+#define INTEL_SIP_SMC_FUNCID_RSU_NOTIFY 14
+#define INTEL_SIP_SMC_RSU_NOTIFY \
+ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_NOTIFY)
+
+/**
+ * Request INTEL_SIP_SMC_RSU_WD
+ *
+ * Sync call used by service driver at EL1 to instruct firmware what to
+ * do when rebooting due to a watchdog timer expiration
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_RSU_WD
+ * a1 32bit value indicating action for firmware to take
+ * a2-7 not used
+ *
+ * Return status
+ * a0 INTEL_SIP_SMC_STATUS_OK
+ */
+#define INTEL_SIP_SMC_FUNCID_RSU_WD 15
+#define INTEL_SIP_SMC_RSU_WD \
+ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_WD)
diff --git a/include/linux/firmware/intel/stratix10-svc-client.h b/include/linux/firmware/intel/stratix10-svc-client.h
index e521f17..ea7604b 100644
--- a/include/linux/firmware/intel/stratix10-svc-client.h
+++ b/include/linux/firmware/intel/stratix10-svc-client.h
@@ -95,6 +95,14 @@ struct stratix10_svc_chan;
*
* @COMMAND_RSU_UPDATE: set the offset of the bitstream to boot after reboot,
* return status is SVC_STATUS_RSU_OK or SVC_STATUS_RSU_ERROR
+ *
+ * @COMMAND_RSU_NOTIFY: report the status of hard processor system
+ * software to firmware, return status is SVC_STATUS_RSU_OK or
+ * SVC_STATUS_RSU_ERROR
+ *
+ * @COMMAND_RSU_WD: instruct firmware what to do when rebooting due to a
+ * watchdog timer expiration, return status is SVC_STATUS_RSU_OK or
+ * SVC_STATUS_RSU_ERROR
*/
enum stratix10_svc_command_code {
COMMAND_NOOP = 0,
@@ -103,7 +111,9 @@ enum stratix10_svc_command_code {
COMMAND_RECONFIG_DATA_CLAIM,
COMMAND_RECONFIG_STATUS,
COMMAND_RSU_STATUS,
- COMMAND_RSU_UPDATE
+ COMMAND_RSU_UPDATE,
+ COMMAND_RSU_NOTIFY,
+ COMMAND_RSU_WD,
};

/**
--
2.7.4

2019-05-23 12:53:51

by Richard Gong

[permalink] [raw]
Subject: [PATCHv3 4/4] MAINTAINERS: add maintainer for Intel Stratix10 FW drivers

From: Richard Gong <[email protected]>

Add myself as maintainer for the newly created Intel Stratix10
firmware drivers.

Signed-off-by: Richard Gong <[email protected]>
Reviewed-by: Alan Tull <[email protected]>
---
v2: removed RSU binding text file
v3: no change
---
MAINTAINERS | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 5cfbea4..76f099b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8101,6 +8101,17 @@ S: Supported
F: drivers/infiniband/hw/i40iw/
F: include/uapi/rdma/i40iw-abi.h

+INTEL STRATIX10 FIRMWARE DRIVERS
+M: Richard Gong <[email protected]>
+L: [email protected]
+S: Maintained
+F: drivers/firmware/stratix10-rsu.c
+F: drivers/firmware/stratix10-svc.c
+F: include/linux/firmware/intel/stratix10-smc.h
+F: include/linux/firmware/intel/stratix10-svc-client.h
+F: Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
+F: Documentation/devicetree/bindings/firmware/intel,stratix10-svc.txt
+
INTEL TELEMETRY DRIVER
M: Rajneesh Bhardwaj <[email protected]>
M: "David E. Box" <[email protected]>
--
2.7.4

2019-05-24 18:58:40

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCHv3 3/4] firmware: rsu: document sysfs interface

On Thu, May 23, 2019 at 08:03:29AM -0500, [email protected] wrote:
> From: Richard Gong <[email protected]>
>
> Describe Intel Stratix10 Remote System Update (RSU) device attributes
>
> Signed-off-by: Richard Gong <[email protected]>
> Reviewed-by: Alan Tull <[email protected]>
> ---
> v2: changed to use tab everywhere and wrap lines at 72 colums
> s/soc:firmware:svc:rsu/stratix10-rsu.0
> added for watchdog
> v3: s/KernelVersion:5.2/KernelVersion:5.3
> ---
> .../testing/sysfs-devices-platform-stratix10-rsu | 100 +++++++++++++++++++++
> 1 file changed, 100 insertions(+)
> create mode 100644 Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
>
> diff --git a/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu b/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
> new file mode 100644
> index 0000000..73ebaf2
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu
> @@ -0,0 +1,100 @@
> + Intel Stratix10 Remote System Update (RSU) device attributes
> +
> +What: /sys/devices/platform/stratix10-rsu.0/current_image
> +Date: May 2019
> +KernelVersion: 5.3
> +Contact: Richard Gong <[email protected]>
> +Description:
> + (RO) the address of image currently running in flash.
> +
> +What: /sys/devices/platform/stratix10-rsu.0/fail_image
> +Date: May 2019
> +KernelVersion: 5.3
> +Contact: Richard Gong <[email protected]>
> +Description:
> + (RO) the address of failed image in flash.
> +
> +What: /sys/devices/platform/stratix10-rsu.0/state
> +Date: May 2019
> +KernelVersion: 5.3
> +Contact: Richard Gong <[email protected]>
> +Description:
> + (RO) the state of RSU system.
> + The state field has two parts: major error code in upper 16 bits and
> + minor error code in lower 16 bits.
> +
> + Major error code:
> + 0xF001 bitstream error
> + 0xF002 hardware access failure
> + 0xF003 bitstream corruption
> + 0xF004 internal error
> + 0xF005 device error
> + 0xF006 CPU watchdog timeout
> + 0xF007 internal unknown error
> + Minor error code:
> + Currently used only when major error is 0xF006
> + (CPU watchdog timeout), in which case the minor
> + error code is the value reported by CPU to
> + firmware through the RSU notify command before
> + the watchdog timeout occurs.
> +
> +What: /sys/devices/platform/stratix10-rsu.0/fail_image
> +Date: May 2019
> +KernelVersion: 5.3
> +Contact: Richard Gong <[email protected]>
> +Description:
> + (RO) the version number of RSU firmware.
> +
> +What: /sys/devices/platform/stratix10-rsu.0/error_location
> +Date: May 2019
> +KernelVersion: 5.3
> +Contact: Richard Gong <[email protected]>
> +Description:
> + (RO) the error offset inside the image that failed.
> +

You are mixing tabs and spaces in this file. Please always just use
tabs.

thanks,

greg k-h