Loading drivers/misc/qseecom.c +39 −5 Original line number Diff line number Diff line Loading @@ -4712,6 +4712,10 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; } else if (ret == -EINVAL && resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } else { pr_err("scm call to set QSEOS_PIPE_ENC key failed : %d\n", ret); Loading @@ -4728,6 +4732,11 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, if (ret) { pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); if (resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } if (resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; Loading @@ -4738,6 +4747,10 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; break; case QSEOS_RESULT_FAIL_PENDING_OPERATION: pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; break; case QSEOS_RESULT_FAILURE: default: pr_err("Set key scm call failed resp.result %d\n", resp.result); Loading Loading @@ -4771,20 +4784,36 @@ static int __qseecom_update_current_key_user_info( ireq, sizeof(struct qseecom_key_userinfo_update_ireq), &resp, sizeof(struct qseecom_command_scm_resp)); if (ret) { pr_err("scm call to update key userinfo failed : %d\n", ret); if (ret == -EINVAL && resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } else { pr_err("scm call to update key userinfo failed: %d\n", ret); __qseecom_disable_clk(CLK_QSEE); return -EFAULT; } } switch (resp.result) { case QSEOS_RESULT_SUCCESS: break; case QSEOS_RESULT_INCOMPLETE: ret = __qseecom_process_incomplete_cmd(data, &resp); if (resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } if (ret) pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); break; case QSEOS_RESULT_FAIL_PENDING_OPERATION: pr_debug("Update Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; break; case QSEOS_RESULT_FAILURE: default: pr_err("Set key scm call failed resp.result %d\n", resp.result); Loading Loading @@ -4917,9 +4946,11 @@ static int qseecom_create_key(struct qseecom_dev_handle *data, if (qseecom_enable_ice_setup(create_key_req.usage)) goto free_buf; do { ret = __qseecom_set_clear_ce_key(data, create_key_req.usage, &set_key_ireq); } while (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION); qseecom_disable_ice_setup(create_key_req.usage); Loading Loading @@ -5079,8 +5110,11 @@ static int qseecom_update_key_user_info(struct qseecom_dev_handle *data, memcpy((void *)ireq.new_hash32, (void *)update_key_req.new_hash32, QSEECOM_HASH_SIZE); ret = __qseecom_update_current_key_user_info(data, update_key_req.usage, do { ret = __qseecom_update_current_key_user_info(data, update_key_req.usage, &ireq); } while (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION); if (ret) { pr_err("Failed to update key info: %d\n", ret); return ret; Loading include/soc/qcom/qseecomi.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #define QSEOS_RESULT_FAIL_KEY_ID_DNE -70 #define QSEOS_RESULT_FAIL_INCORRECT_PSWD -71 #define QSEOS_RESULT_FAIL_MAX_ATTEMPT -72 #define QSEOS_RESULT_FAIL_PENDING_OPERATION -73 enum qseecom_command_scm_resp_type { QSEOS_APP_ID = 0xEE01, Loading Loading
drivers/misc/qseecom.c +39 −5 Original line number Diff line number Diff line Loading @@ -4712,6 +4712,10 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; } else if (ret == -EINVAL && resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } else { pr_err("scm call to set QSEOS_PIPE_ENC key failed : %d\n", ret); Loading @@ -4728,6 +4732,11 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, if (ret) { pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); if (resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } if (resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; Loading @@ -4738,6 +4747,10 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; break; case QSEOS_RESULT_FAIL_PENDING_OPERATION: pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; break; case QSEOS_RESULT_FAILURE: default: pr_err("Set key scm call failed resp.result %d\n", resp.result); Loading Loading @@ -4771,20 +4784,36 @@ static int __qseecom_update_current_key_user_info( ireq, sizeof(struct qseecom_key_userinfo_update_ireq), &resp, sizeof(struct qseecom_command_scm_resp)); if (ret) { pr_err("scm call to update key userinfo failed : %d\n", ret); if (ret == -EINVAL && resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } else { pr_err("scm call to update key userinfo failed: %d\n", ret); __qseecom_disable_clk(CLK_QSEE); return -EFAULT; } } switch (resp.result) { case QSEOS_RESULT_SUCCESS: break; case QSEOS_RESULT_INCOMPLETE: ret = __qseecom_process_incomplete_cmd(data, &resp); if (resp.result == QSEOS_RESULT_FAIL_PENDING_OPERATION) { pr_debug("Set Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; } if (ret) pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); break; case QSEOS_RESULT_FAIL_PENDING_OPERATION: pr_debug("Update Key operation under processing...\n"); ret = QSEOS_RESULT_FAIL_PENDING_OPERATION; break; case QSEOS_RESULT_FAILURE: default: pr_err("Set key scm call failed resp.result %d\n", resp.result); Loading Loading @@ -4917,9 +4946,11 @@ static int qseecom_create_key(struct qseecom_dev_handle *data, if (qseecom_enable_ice_setup(create_key_req.usage)) goto free_buf; do { ret = __qseecom_set_clear_ce_key(data, create_key_req.usage, &set_key_ireq); } while (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION); qseecom_disable_ice_setup(create_key_req.usage); Loading Loading @@ -5079,8 +5110,11 @@ static int qseecom_update_key_user_info(struct qseecom_dev_handle *data, memcpy((void *)ireq.new_hash32, (void *)update_key_req.new_hash32, QSEECOM_HASH_SIZE); ret = __qseecom_update_current_key_user_info(data, update_key_req.usage, do { ret = __qseecom_update_current_key_user_info(data, update_key_req.usage, &ireq); } while (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION); if (ret) { pr_err("Failed to update key info: %d\n", ret); return ret; Loading
include/soc/qcom/qseecomi.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #define QSEOS_RESULT_FAIL_KEY_ID_DNE -70 #define QSEOS_RESULT_FAIL_INCORRECT_PSWD -71 #define QSEOS_RESULT_FAIL_MAX_ATTEMPT -72 #define QSEOS_RESULT_FAIL_PENDING_OPERATION -73 enum qseecom_command_scm_resp_type { QSEOS_APP_ID = 0xEE01, Loading