firmware: stratix10-svc: extend svc to support new RSU features
Extend Intel Stratix10 service layer driver to support new RSU DCMF versions and max retry parameter. DCMF = Decision Configuration Management Firmware. The max retry parameter is the maximum times the images is allowed to reload itself before giving up and starting RSU failover flow. Signed-off-by: Richard Gong <richard.gong@intel.com> Link: https://lore.kernel.org/r/1592231348-31334-3-git-send-email-richard.gong@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
36847f9e3e
commit
bf0e5bf68a
@ -305,9 +305,15 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
|
|||||||
cb_data->status = BIT(SVC_STATUS_COMPLETED);
|
cb_data->status = BIT(SVC_STATUS_COMPLETED);
|
||||||
break;
|
break;
|
||||||
case COMMAND_RSU_RETRY:
|
case COMMAND_RSU_RETRY:
|
||||||
|
case COMMAND_RSU_MAX_RETRY:
|
||||||
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;
|
||||||
|
case COMMAND_RSU_DCMF_VERSION:
|
||||||
|
cb_data->status = BIT(SVC_STATUS_OK);
|
||||||
|
cb_data->kaddr1 = &res.a1;
|
||||||
|
cb_data->kaddr2 = &res.a2;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
pr_warn("it shouldn't happen\n");
|
pr_warn("it shouldn't happen\n");
|
||||||
break;
|
break;
|
||||||
@ -406,6 +412,16 @@ static int svc_normal_to_secure_thread(void *data)
|
|||||||
a1 = 0;
|
a1 = 0;
|
||||||
a2 = 0;
|
a2 = 0;
|
||||||
break;
|
break;
|
||||||
|
case COMMAND_RSU_MAX_RETRY:
|
||||||
|
a0 = INTEL_SIP_SMC_RSU_MAX_RETRY;
|
||||||
|
a1 = 0;
|
||||||
|
a2 = 0;
|
||||||
|
break;
|
||||||
|
case COMMAND_RSU_DCMF_VERSION:
|
||||||
|
a0 = INTEL_SIP_SMC_RSU_DCMF_VERSION;
|
||||||
|
a1 = 0;
|
||||||
|
a2 = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
pr_warn("it shouldn't happen\n");
|
pr_warn("it shouldn't happen\n");
|
||||||
break;
|
break;
|
||||||
@ -474,6 +490,7 @@ static int svc_normal_to_secure_thread(void *data)
|
|||||||
* doesn't support RSU notify or retry
|
* doesn't support RSU notify or retry
|
||||||
*/
|
*/
|
||||||
if ((pdata->command == COMMAND_RSU_RETRY) ||
|
if ((pdata->command == COMMAND_RSU_RETRY) ||
|
||||||
|
(pdata->command == COMMAND_RSU_MAX_RETRY) ||
|
||||||
(pdata->command == COMMAND_RSU_NOTIFY)) {
|
(pdata->command == COMMAND_RSU_NOTIFY)) {
|
||||||
cbdata->status =
|
cbdata->status =
|
||||||
BIT(SVC_STATUS_NO_SUPPORT);
|
BIT(SVC_STATUS_NO_SUPPORT);
|
||||||
|
@ -361,3 +361,46 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
|
|||||||
#define INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER 15
|
#define INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER 15
|
||||||
#define INTEL_SIP_SMC_RSU_RETRY_COUNTER \
|
#define INTEL_SIP_SMC_RSU_RETRY_COUNTER \
|
||||||
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER)
|
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request INTEL_SIP_SMC_RSU_DCMF_VERSION
|
||||||
|
*
|
||||||
|
* Sync call used by service driver at EL1 to query DCMF (Decision
|
||||||
|
* Configuration Management Firmware) version from FW
|
||||||
|
*
|
||||||
|
* Call register usage:
|
||||||
|
* a0 INTEL_SIP_SMC_RSU_DCMF_VERSION
|
||||||
|
* a1-7 not used
|
||||||
|
*
|
||||||
|
* Return status
|
||||||
|
* a0 INTEL_SIP_SMC_STATUS_OK
|
||||||
|
* a1 dcmf1 | dcmf0
|
||||||
|
* a2 dcmf3 | dcmf2
|
||||||
|
*
|
||||||
|
* Or
|
||||||
|
*
|
||||||
|
* a0 INTEL_SIP_SMC_RSU_ERROR
|
||||||
|
*/
|
||||||
|
#define INTEL_SIP_SMC_FUNCID_RSU_DCMF_VERSION 16
|
||||||
|
#define INTEL_SIP_SMC_RSU_DCMF_VERSION \
|
||||||
|
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_DCMF_VERSION)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request INTEL_SIP_SMC_RSU_MAX_RETRY
|
||||||
|
*
|
||||||
|
* Sync call used by service driver at EL1 to query max retry value from FW
|
||||||
|
*
|
||||||
|
* Call register usage:
|
||||||
|
* a0 INTEL_SIP_SMC_RSU_MAX_RETRY
|
||||||
|
* a1-7 not used
|
||||||
|
*
|
||||||
|
* Return status
|
||||||
|
* a0 INTEL_SIP_SMC_STATUS_OK
|
||||||
|
* a1 max retry value
|
||||||
|
*
|
||||||
|
* Or
|
||||||
|
* a0 INTEL_SIP_SMC_RSU_ERROR
|
||||||
|
*/
|
||||||
|
#define INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY 18
|
||||||
|
#define INTEL_SIP_SMC_RSU_MAX_RETRY \
|
||||||
|
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY)
|
||||||
|
@ -98,6 +98,12 @@ struct stratix10_svc_chan;
|
|||||||
*
|
*
|
||||||
* @COMMAND_RSU_RETRY: query firmware for the current image's retry counter,
|
* @COMMAND_RSU_RETRY: query firmware for the current image's retry counter,
|
||||||
* return status is SVC_STATUS_OK or SVC_STATUS_ERROR
|
* return status is SVC_STATUS_OK or SVC_STATUS_ERROR
|
||||||
|
*
|
||||||
|
* @COMMAND_RSU_MAX_RETRY: query firmware for the max retry value,
|
||||||
|
* return status is SVC_STATUS_OK or SVC_STATUS_ERROR
|
||||||
|
*
|
||||||
|
* @COMMAND_RSU_DCMF_VERSION: query firmware for the DCMF 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,
|
||||||
@ -109,6 +115,8 @@ enum stratix10_svc_command_code {
|
|||||||
COMMAND_RSU_UPDATE,
|
COMMAND_RSU_UPDATE,
|
||||||
COMMAND_RSU_NOTIFY,
|
COMMAND_RSU_NOTIFY,
|
||||||
COMMAND_RSU_RETRY,
|
COMMAND_RSU_RETRY,
|
||||||
|
COMMAND_RSU_MAX_RETRY,
|
||||||
|
COMMAND_RSU_DCMF_VERSION,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user