aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/firmware
diff options
context:
space:
mode:
authorRichard Gong <richard.gong@intel.com>2018-11-13 13:14:06 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-11-26 14:15:07 -0500
commit6b50d882d38d5a1e4c0c476712384067c19c744b (patch)
tree6d32fcdf941e9030cf4de684bb7a34833c5be989 /include/linux/firmware
parent0d5c06aa0ee8ba36e9c4a3ae7a3a3377c105b412 (diff)
firmware: add remote status update client support
Extend Intel Stratix10 service layer to support the second service layer client, Remote Status Update (RSU). RSU is used to provide our customers with protection against loading bad bitstreams onto their devices when those devices are booting from flash. Signed-off-by: Richard Gong <richard.gong@intel.com> Signed-off-by: Alan Tull <atull@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/firmware')
-rw-r--r--include/linux/firmware/intel/stratix10-smc.h47
-rw-r--r--include/linux/firmware/intel/stratix10-svc-client.h20
2 files changed, 65 insertions, 2 deletions
diff --git a/include/linux/firmware/intel/stratix10-smc.h b/include/linux/firmware/intel/stratix10-smc.h
index a109e4ccbc7e..5be5dab50b13 100644
--- a/include/linux/firmware/intel/stratix10-smc.h
+++ b/include/linux/firmware/intel/stratix10-smc.h
@@ -67,6 +67,12 @@
67 * 67 *
68 * INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR: 68 * INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR:
69 * There is error during the FPGA configuration process. 69 * There is error during the FPGA configuration process.
70 *
71 * INTEL_SIP_SMC_REG_ERROR:
72 * There is error during a read or write operation of the protected registers.
73 *
74 * INTEL_SIP_SMC_RSU_ERROR:
75 * There is error during a remote status update.
70 */ 76 */
71#define INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION 0xFFFFFFFF 77#define INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION 0xFFFFFFFF
72#define INTEL_SIP_SMC_STATUS_OK 0x0 78#define INTEL_SIP_SMC_STATUS_OK 0x0
@@ -74,6 +80,7 @@
74#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_REJECTED 0x2 80#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_REJECTED 0x2
75#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR 0x4 81#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR 0x4
76#define INTEL_SIP_SMC_REG_ERROR 0x5 82#define INTEL_SIP_SMC_REG_ERROR 0x5
83#define INTEL_SIP_SMC_RSU_ERROR 0x7
77 84
78/** 85/**
79 * Request INTEL_SIP_SMC_FPGA_CONFIG_START 86 * Request INTEL_SIP_SMC_FPGA_CONFIG_START
@@ -262,4 +269,44 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
262#define INTEL_SIP_SMC_REG_UPDATE \ 269#define INTEL_SIP_SMC_REG_UPDATE \
263 INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_UPDATE) 270 INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_UPDATE)
264 271
272/*
273 * Request INTEL_SIP_SMC_RSU_STATUS
274 *
275 * Request remote status update boot log, call is synchronous.
276 *
277 * Call register usage:
278 * a0 INTEL_SIP_SMC_RSU_STATUS
279 * a1-7 not used
280 *
281 * Return status
282 * a0: Current Image
283 * a1: Last Failing Image
284 * a2: Version | State
285 * a3: Error details | Error location
286 *
287 * Or
288 *
289 * a0: INTEL_SIP_SMC_RSU_ERROR
290 */
291#define INTEL_SIP_SMC_FUNCID_RSU_STATUS 11
292#define INTEL_SIP_SMC_RSU_STATUS \
293 INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_STATUS)
294
295/*
296 * Request INTEL_SIP_SMC_RSU_UPDATE
297 *
298 * Request to set the offset of the bitstream to boot after reboot, call
299 * is synchronous.
300 *
301 * Call register usage:
302 * a0 INTEL_SIP_SMC_RSU_UPDATE
303 * a1 64bit physical address of the configuration data memory in flash
304 * a2-7 not used
305 *
306 * Return status
307 * a0 INTEL_SIP_SMC_STATUS_OK
308 */
309#define INTEL_SIP_SMC_FUNCID_RSU_UPDATE 12
310#define INTEL_SIP_SMC_RSU_UPDATE \
311 INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_UPDATE)
265#endif 312#endif
diff --git a/include/linux/firmware/intel/stratix10-svc-client.h b/include/linux/firmware/intel/stratix10-svc-client.h
index f2fda7e1ca52..e521f172a47a 100644
--- a/include/linux/firmware/intel/stratix10-svc-client.h
+++ b/include/linux/firmware/intel/stratix10-svc-client.h
@@ -10,8 +10,10 @@
10 * Service layer driver supports client names 10 * Service layer driver supports client names
11 * 11 *
12 * fpga: for FPGA configuration 12 * fpga: for FPGA configuration
13 * rsu: for remote status update
13 */ 14 */
14#define SVC_CLIENT_FPGA "fpga" 15#define SVC_CLIENT_FPGA "fpga"
16#define SVC_CLIENT_RSU "rsu"
15 17
16/** 18/**
17 * Status of the sent command, in bit number 19 * Status of the sent command, in bit number
@@ -36,6 +38,9 @@
36 * 38 *
37 * SVC_COMMAND_STATUS_RECONFIG_ERROR: 39 * SVC_COMMAND_STATUS_RECONFIG_ERROR:
38 * Error encountered during FPGA configuration. 40 * Error encountered during FPGA configuration.
41 *
42 * SVC_STATUS_RSU_OK:
43 * Secure firmware accepts the request of remote status update (RSU).
39 */ 44 */
40#define SVC_STATUS_RECONFIG_REQUEST_OK 0 45#define SVC_STATUS_RECONFIG_REQUEST_OK 0
41#define SVC_STATUS_RECONFIG_BUFFER_SUBMITTED 1 46#define SVC_STATUS_RECONFIG_BUFFER_SUBMITTED 1
@@ -43,7 +48,8 @@
43#define SVC_STATUS_RECONFIG_COMPLETED 3 48#define SVC_STATUS_RECONFIG_COMPLETED 3
44#define SVC_STATUS_RECONFIG_BUSY 4 49#define SVC_STATUS_RECONFIG_BUSY 4
45#define SVC_STATUS_RECONFIG_ERROR 5 50#define SVC_STATUS_RECONFIG_ERROR 5
46 51#define SVC_STATUS_RSU_OK 6
52#define SVC_STATUS_RSU_ERROR 7
47/** 53/**
48 * Flag bit for COMMAND_RECONFIG 54 * Flag bit for COMMAND_RECONFIG
49 * 55 *
@@ -56,9 +62,11 @@
56/** 62/**
57 * Timeout settings for service clients: 63 * Timeout settings for service clients:
58 * timeout value used in Stratix10 FPGA manager driver. 64 * timeout value used in Stratix10 FPGA manager driver.
65 * timeout value used in RSU driver
59 */ 66 */
60#define SVC_RECONFIG_REQUEST_TIMEOUT_MS 100 67#define SVC_RECONFIG_REQUEST_TIMEOUT_MS 100
61#define SVC_RECONFIG_BUFFER_TIMEOUT_MS 240 68#define SVC_RECONFIG_BUFFER_TIMEOUT_MS 240
69#define SVC_RSU_REQUEST_TIMEOUT_MS 300
62 70
63struct stratix10_svc_chan; 71struct stratix10_svc_chan;
64 72
@@ -81,13 +89,21 @@ struct stratix10_svc_chan;
81 * @COMMAND_RECONFIG_STATUS: check the status of the configuration, return 89 * @COMMAND_RECONFIG_STATUS: check the status of the configuration, return
82 * status is SVC_STATUS_RECONFIG_COMPLETED, or SVC_STATUS_RECONFIG_BUSY, or 90 * status is SVC_STATUS_RECONFIG_COMPLETED, or SVC_STATUS_RECONFIG_BUSY, or
83 * SVC_STATUS_RECONFIG_ERROR 91 * SVC_STATUS_RECONFIG_ERROR
92 *
93 * @COMMAND_RSU_STATUS: request remote system update boot log, return status
94 * is log data or SVC_STATUS_RSU_ERROR
95 *
96 * @COMMAND_RSU_UPDATE: set the offset of the bitstream to boot after reboot,
97 * return status is SVC_STATUS_RSU_OK or SVC_STATUS_RSU_ERROR
84 */ 98 */
85enum stratix10_svc_command_code { 99enum stratix10_svc_command_code {
86 COMMAND_NOOP = 0, 100 COMMAND_NOOP = 0,
87 COMMAND_RECONFIG, 101 COMMAND_RECONFIG,
88 COMMAND_RECONFIG_DATA_SUBMIT, 102 COMMAND_RECONFIG_DATA_SUBMIT,
89 COMMAND_RECONFIG_DATA_CLAIM, 103 COMMAND_RECONFIG_DATA_CLAIM,
90 COMMAND_RECONFIG_STATUS 104 COMMAND_RECONFIG_STATUS,
105 COMMAND_RSU_STATUS,
106 COMMAND_RSU_UPDATE
91}; 107};
92 108
93/** 109/**