summaryrefslogtreecommitdiff
path: root/drivers/misc/qseecom.c
diff options
context:
space:
mode:
authorZhen Kong <zkong@codeaurora.org>2015-12-09 14:28:30 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:14:58 -0700
commit80a9c6a26bab9fedc2dd379b8ee27e474aeae153 (patch)
tree82fd41c52d53e1fa8ab89ff7be76c72378f42774 /drivers/misc/qseecom.c
parent5c2bb64a1c9a4672c183c2d9caaf778e41b2ca59 (diff)
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>
Diffstat (limited to 'drivers/misc/qseecom.c')
-rw-r--r--drivers/misc/qseecom.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index f9bb5bb720cc..62f761f38159 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -624,6 +624,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(smc_id);
+ ret = scm_call2(smc_id, &desc);
+ break;
+ }
case QSEOS_GENERATE_KEY: {
u32 tzbuflen = PAGE_ALIGN(sizeof
(struct qseecom_key_generate_ireq) -
@@ -2338,6 +2345,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,
@@ -2402,15 +2410,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",