Commit 085a8844 authored by Richard Gong's avatar Richard Gong Committed by Greg Kroah-Hartman

firmware: stratix10-svc: extend SVC driver to get the firmware version

Extend Intel service layer driver to get the firmware version running at
FPGA device. Therefore FPGA manager driver, one of Intel service layer
driver's client, can decide whether to handle the newly added bitstream
authentication function based on the retrieved firmware version.

Link: https://lore.kernel.org/lkml/1617114785-22211-2-git-send-email-richard.gong@linux.intel.comAcked-by: default avatarMoritz Fischr <mdf@kernel.org>
Signed-off-by: default avatarRichard Gong <richard.gong@intel.com>
Signed-off-by: default avatarDinh Nguyen <dinguyen@kernel.org>
Link: https://lore.kernel.org/r/20220223144908.399522-2-dinguyen@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7d658f5c
...@@ -306,6 +306,7 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data, ...@@ -306,6 +306,7 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
break; break;
case COMMAND_RSU_RETRY: case COMMAND_RSU_RETRY:
case COMMAND_RSU_MAX_RETRY: case COMMAND_RSU_MAX_RETRY:
case COMMAND_FIRMWARE_VERSION:
cb_data->status = BIT(SVC_STATUS_OK); cb_data->status = BIT(SVC_STATUS_OK);
cb_data->kaddr1 = &res.a1; cb_data->kaddr1 = &res.a1;
break; break;
...@@ -422,6 +423,11 @@ static int svc_normal_to_secure_thread(void *data) ...@@ -422,6 +423,11 @@ static int svc_normal_to_secure_thread(void *data)
a1 = 0; a1 = 0;
a2 = 0; a2 = 0;
break; break;
case COMMAND_FIRMWARE_VERSION:
a0 = INTEL_SIP_SMC_FIRMWARE_VERSION;
a1 = 0;
a2 = 0;
break;
default: default:
pr_warn("it shouldn't happen\n"); pr_warn("it shouldn't happen\n");
break; break;
...@@ -491,7 +497,8 @@ static int svc_normal_to_secure_thread(void *data) ...@@ -491,7 +497,8 @@ static int svc_normal_to_secure_thread(void *data)
*/ */
if ((pdata->command == COMMAND_RSU_RETRY) || if ((pdata->command == COMMAND_RSU_RETRY) ||
(pdata->command == COMMAND_RSU_MAX_RETRY) || (pdata->command == COMMAND_RSU_MAX_RETRY) ||
(pdata->command == COMMAND_RSU_NOTIFY)) { (pdata->command == COMMAND_RSU_NOTIFY) ||
(pdata->command == COMMAND_FIRMWARE_VERSION)) {
cbdata->status = cbdata->status =
BIT(SVC_STATUS_NO_SUPPORT); BIT(SVC_STATUS_NO_SUPPORT);
cbdata->kaddr1 = NULL; cbdata->kaddr1 = NULL;
......
...@@ -321,8 +321,6 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE) ...@@ -321,8 +321,6 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_ECC_DBE \ #define INTEL_SIP_SMC_ECC_DBE \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECC_DBE) INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECC_DBE)
#endif
/** /**
* Request INTEL_SIP_SMC_RSU_NOTIFY * Request INTEL_SIP_SMC_RSU_NOTIFY
* *
...@@ -404,3 +402,22 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE) ...@@ -404,3 +402,22 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
#define INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY 18 #define INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY 18
#define INTEL_SIP_SMC_RSU_MAX_RETRY \ #define INTEL_SIP_SMC_RSU_MAX_RETRY \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY) INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY)
/**
* Request INTEL_SIP_SMC_FIRMWARE_VERSION
*
* Sync call used to query the version of running firmware
*
* Call register usage:
* a0 INTEL_SIP_SMC_FIRMWARE_VERSION
* a1-a7 not used
*
* Return status:
* a0 INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_STATUS_ERROR
* a1 running firmware version
*/
#define INTEL_SIP_SMC_FUNCID_FIRMWARE_VERSION 31
#define INTEL_SIP_SMC_FIRMWARE_VERSION \
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FIRMWARE_VERSION)
#endif
...@@ -104,6 +104,9 @@ struct stratix10_svc_chan; ...@@ -104,6 +104,9 @@ struct stratix10_svc_chan;
* *
* @COMMAND_RSU_DCMF_VERSION: query firmware for the DCMF version, return status * @COMMAND_RSU_DCMF_VERSION: query firmware for the DCMF version, return status
* is SVC_STATUS_OK or SVC_STATUS_ERROR * is SVC_STATUS_OK or SVC_STATUS_ERROR
*
* @COMMAND_FIRMWARE_VERSION: query running firmware version, return status
* is SVC_STATUS_OK or SVC_STATUS_ERROR
*/ */
enum stratix10_svc_command_code { enum stratix10_svc_command_code {
COMMAND_NOOP = 0, COMMAND_NOOP = 0,
...@@ -117,6 +120,7 @@ enum stratix10_svc_command_code { ...@@ -117,6 +120,7 @@ enum stratix10_svc_command_code {
COMMAND_RSU_RETRY, COMMAND_RSU_RETRY,
COMMAND_RSU_MAX_RETRY, COMMAND_RSU_MAX_RETRY,
COMMAND_RSU_DCMF_VERSION, COMMAND_RSU_DCMF_VERSION,
COMMAND_FIRMWARE_VERSION,
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment