intel: Introduce SMC support for mailbox command
This update allows normal world to send mailbox commands through SMC Signed-off-by: Hadi Asyrafi <muhammad.hadi.asyrafi.abdul.halim@intel.com> Change-Id: I587bea06422da90e5907d586495cd9e3bde900f6
This commit is contained in:
parent
e1f97d9c52
commit
0c5d62ad7f
|
@ -28,6 +28,7 @@
|
|||
#define INTEL_SIP_LEGACY_SMC_ECC_DBE 0xC200000D
|
||||
#define INTEL_SIP_SMC_RSU_NOTIFY 0xC200000E
|
||||
#define INTEL_SIP_SMC_RSU_RETRY_COUNTER 0xC200000F
|
||||
#define INTEL_SIP_SMC_MBOX_SEND_CMD 0xC200001E
|
||||
|
||||
/* FPGA config helpers */
|
||||
#define INTEL_SIP_SMC_FPGA_CONFIG_ADDR 0x400000
|
||||
|
|
|
@ -400,6 +400,26 @@ static uint32_t intel_rsu_retry_counter(uint32_t *respbuf, uint32_t respbuf_sz,
|
|||
return INTEL_SIP_SMC_STATUS_OK;
|
||||
}
|
||||
|
||||
/* Mailbox services */
|
||||
static uint32_t intel_mbox_send_cmd(uint32_t cmd, uint32_t *args, int len,
|
||||
int urgent, uint32_t *response,
|
||||
int resp_len, int *mbox_status,
|
||||
int *len_in_resp)
|
||||
{
|
||||
int status = mailbox_send_cmd(MBOX_JOB_ID, cmd, args, len, urgent,
|
||||
response, resp_len);
|
||||
|
||||
if (status < 0) {
|
||||
*len_in_resp = 0;
|
||||
*mbox_status = -status;
|
||||
return INTEL_SIP_SMC_STATUS_ERROR;
|
||||
}
|
||||
|
||||
*mbox_status = 0;
|
||||
*len_in_resp = status;
|
||||
return INTEL_SIP_SMC_STATUS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is responsible for handling all SiP calls from the NS world
|
||||
*/
|
||||
|
@ -418,6 +438,8 @@ uintptr_t sip_smc_handler(uint32_t smc_fid,
|
|||
uint32_t completed_addr[3];
|
||||
uint64_t rsu_respbuf[9];
|
||||
uint32_t count = 0;
|
||||
u_register_t x5, x6;
|
||||
int mbox_status, len_in_resp;
|
||||
|
||||
switch (smc_fid) {
|
||||
case SIP_SVC_UID:
|
||||
|
@ -509,6 +531,14 @@ uintptr_t sip_smc_handler(uint32_t smc_fid,
|
|||
SMC_RET2(handle, status, val);
|
||||
}
|
||||
|
||||
case INTEL_SIP_SMC_MBOX_SEND_CMD:
|
||||
x5 = SMC_GET_GP(handle, CTX_GPREG_X5);
|
||||
x6 = SMC_GET_GP(handle, CTX_GPREG_X6);
|
||||
status = intel_mbox_send_cmd(x1, (uint32_t *)x2, x3, x4,
|
||||
(uint32_t *)x5, x6, &mbox_status,
|
||||
&len_in_resp);
|
||||
SMC_RET4(handle, status, mbox_status, x5, len_in_resp);
|
||||
|
||||
default:
|
||||
return socfpga_sip_handler(smc_fid, x1, x2, x3, x4,
|
||||
cookie, handle, flags);
|
||||
|
|
Loading…
Reference in New Issue