qseecom: Add a new smc cmd to check RPMB key provision status

A new smc cmd is added to check RPMB key provision status

Change-Id: I50411bf9ae7f31589be34d7b5aaf48f2c12f0018
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
This commit is contained in:
Zhen Kong 2015-12-09 14:28:30 -08:00 committed by syphyr
parent 41ec0b6adb
commit 1aaa82aefa
2 changed files with 26 additions and 4 deletions

View File

@ -336,6 +336,7 @@ static void __qseecom_disable_clk(enum qseecom_ce_hw_instance ce);
static int __qseecom_init_clk(enum qseecom_ce_hw_instance ce);
static int qseecom_load_commonlib_image(struct qseecom_dev_handle *data,
char *cmnlib_name);
static void __qseecom_reentrancy_check_if_no_app_blocked(void);
static int qseecom_enable_ice_setup(int usage);
static int qseecom_disable_ice_setup(int usage);
@ -686,6 +687,13 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
ret = scm_call2(smc_id, &desc);
break;
}
case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: {
smc_id = TZ_OS_RPMB_CHECK_PROV_STATUS_ID;
desc.arginfo = TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID;
__qseecom_reentrancy_check_if_no_app_blocked();
ret = scm_call2(smc_id, &desc);
break;
}
case QSEOS_GENERATE_KEY: {
u32 tzbuflen = PAGE_ALIGN(sizeof
(struct qseecom_key_generate_ireq) -
@ -2564,6 +2572,7 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data,
switch (req.cmd_id) {
case QSEOS_RPMB_PROVISION_KEY_COMMAND:
case QSEOS_RPMB_ERASE_COMMAND:
case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND:
send_req_ptr = &send_svc_ireq;
req_buf_size = sizeof(send_svc_ireq);
if (__qseecom_process_rpmb_svc_cmd(data, &req,
@ -2641,15 +2650,21 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data,
case QSEOS_RESULT_SUCCESS:
break;
case QSEOS_RESULT_INCOMPLETE:
pr_err("qseos_result_incomplete\n");
pr_debug("qseos_result_incomplete\n");
ret = __qseecom_process_incomplete_cmd(data, &resp);
if (ret) {
pr_err("process_incomplete_cmd fail: err: %d\n",
ret);
pr_err("process_incomplete_cmd fail with result: %d\n",
resp.result);
}
if (req.cmd_id == QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND) {
pr_warn("RPMB key status is 0x%x\n", resp.result);
*(uint32_t *)req.resp_buf = resp.result;
ret = 0;
}
break;
case QSEOS_RESULT_FAILURE:
pr_err("process_incomplete_cmd failed err: %d\n", ret);
pr_err("scm call failed with resp.result: %d\n", resp.result);
ret = -EINVAL;
break;
default:
pr_err("Response result %d not supported\n",

View File

@ -63,6 +63,7 @@ enum qseecom_qceos_cmd_id {
QSEOS_TEE_INVOKE_MODFD_COMMAND = QSEOS_TEE_INVOKE_COMMAND,
QSEOS_TEE_CLOSE_SESSION,
QSEOS_TEE_REQUEST_CANCELLATION,
QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND = 0x1B,
QSEOS_FSM_LTE_INIT_DB = 0x100,
QSEOS_FSM_LTE_STORE_KENB = 0x101,
QSEOS_FSM_LTE_GEN_KEYS = 0x102,
@ -560,6 +561,12 @@ __packed struct qseecom_client_send_fsm_key_req {
#define TZ_OS_RPMB_ERASE_ID_PARAM_ID \
TZ_SYSCALL_CREATE_PARAM_ID_0
#define TZ_OS_RPMB_CHECK_PROV_STATUS_ID \
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_RPMB, 0x03)
#define TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID \
TZ_SYSCALL_CREATE_PARAM_ID_0
#define TZ_OS_KS_GEN_KEY_ID \
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_KEYSTORE, 0x01)