Loading arch/arm/mach-msm/include/mach/qseecomi.h +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -27,6 +27,7 @@ #define QSEOS_RESULT_FAIL_KS_ALREADY_DONE -69 #define QSEOS_RESULT_FAIL_KEY_ID_DNE -70 #define QSEOS_RESULT_FAIL_INCORRECT_PSWD -71 #define QSEOS_RESULT_FAIL_MAX_ATTEMPT -72 enum qseecom_command_scm_resp_type { QSEOS_APP_ID = 0xEE01, Loading drivers/misc/qseecom.c +28 −13 Original line number Diff line number Diff line /*Qualcomm Secure Execution Environment Communicator (QSEECOM) driver * * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -34,7 +34,6 @@ #include <linux/firmware.h> #include <linux/freezer.h> #include <linux/scatterlist.h> #include <linux/delay.h> #include <mach/board.h> #include <mach/msm_bus.h> #include <mach/msm_bus_board.h> Loading Loading @@ -2679,7 +2678,7 @@ static int __qseecom_generate_and_save_key(struct qseecom_dev_handle *data, if (ret) { pr_err("scm call to generate key failed : %d\n", ret); __qseecom_disable_clk(CLK_QSEE); return ret; return -EFAULT; } switch (resp.result) { Loading Loading @@ -2730,7 +2729,7 @@ static int __qseecom_delete_saved_key(struct qseecom_dev_handle *data, if (ret) { pr_err("scm call to delete key failed : %d\n", ret); __qseecom_disable_clk(CLK_QSEE); return ret; return -EFAULT; } switch (resp.result) { Loading @@ -2738,9 +2737,18 @@ static int __qseecom_delete_saved_key(struct qseecom_dev_handle *data, break; case QSEOS_RESULT_INCOMPLETE: ret = __qseecom_process_incomplete_cmd(data, &resp); if (ret) if (ret) { pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); if (resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; } } break; case QSEOS_RESULT_FAIL_MAX_ATTEMPT: pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; break; case QSEOS_RESULT_FAILURE: default: Loading Loading @@ -2778,7 +2786,7 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, __qseecom_disable_clk(CLK_QSEE); if (qseecom.qsee.instance != qseecom.ce_drv.instance) __qseecom_disable_clk(CLK_CE_DRV); return ret; return -EFAULT; } switch (resp.result) { Loading @@ -2786,9 +2794,18 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, break; case QSEOS_RESULT_INCOMPLETE: ret = __qseecom_process_incomplete_cmd(data, &resp); if (ret) if (ret) { pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); if (resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; } } break; case QSEOS_RESULT_FAIL_MAX_ATTEMPT: pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; break; case QSEOS_RESULT_FAILURE: default: Loading Loading @@ -2828,7 +2845,7 @@ static int __qseecom_update_current_key_user_info( __qseecom_disable_clk(CLK_QSEE); if (qseecom.qsee.instance != qseecom.ce_drv.instance) __qseecom_disable_clk(CLK_CE_DRV); return ret; return -EFAULT; } switch (resp.result) { Loading Loading @@ -2894,7 +2911,7 @@ static int qseecom_create_key(struct qseecom_dev_handle *data, &generate_key_ireq); if (ret) { pr_err("Failed to generate key on storage: %d\n", ret); return -EFAULT; return ret; } set_key_ireq.qsee_command_id = QSEOS_SET_KEY; Loading @@ -2914,11 +2931,10 @@ static int qseecom_create_key(struct qseecom_dev_handle *data, ret = __qseecom_set_clear_ce_key(data, create_key_req.usage, &set_key_ireq); msleep(2000); if (ret) { pr_err("Failed to create key: pipe %d, ce %d: %d\n", pipe, ce_hw, ret); return -EFAULT; return ret; } return ret; Loading Loading @@ -3023,10 +3039,9 @@ static int qseecom_update_key_user_info(struct qseecom_dev_handle *data, ret = __qseecom_update_current_key_user_info(data, update_key_req.usage, &ireq); msleep(2000); if (ret) { pr_err("Failed to update key info: %d\n", ret); return -EFAULT; return ret; } return ret; Loading Loading
arch/arm/mach-msm/include/mach/qseecomi.h +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -27,6 +27,7 @@ #define QSEOS_RESULT_FAIL_KS_ALREADY_DONE -69 #define QSEOS_RESULT_FAIL_KEY_ID_DNE -70 #define QSEOS_RESULT_FAIL_INCORRECT_PSWD -71 #define QSEOS_RESULT_FAIL_MAX_ATTEMPT -72 enum qseecom_command_scm_resp_type { QSEOS_APP_ID = 0xEE01, Loading
drivers/misc/qseecom.c +28 −13 Original line number Diff line number Diff line /*Qualcomm Secure Execution Environment Communicator (QSEECOM) driver * * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -34,7 +34,6 @@ #include <linux/firmware.h> #include <linux/freezer.h> #include <linux/scatterlist.h> #include <linux/delay.h> #include <mach/board.h> #include <mach/msm_bus.h> #include <mach/msm_bus_board.h> Loading Loading @@ -2679,7 +2678,7 @@ static int __qseecom_generate_and_save_key(struct qseecom_dev_handle *data, if (ret) { pr_err("scm call to generate key failed : %d\n", ret); __qseecom_disable_clk(CLK_QSEE); return ret; return -EFAULT; } switch (resp.result) { Loading Loading @@ -2730,7 +2729,7 @@ static int __qseecom_delete_saved_key(struct qseecom_dev_handle *data, if (ret) { pr_err("scm call to delete key failed : %d\n", ret); __qseecom_disable_clk(CLK_QSEE); return ret; return -EFAULT; } switch (resp.result) { Loading @@ -2738,9 +2737,18 @@ static int __qseecom_delete_saved_key(struct qseecom_dev_handle *data, break; case QSEOS_RESULT_INCOMPLETE: ret = __qseecom_process_incomplete_cmd(data, &resp); if (ret) if (ret) { pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); if (resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; } } break; case QSEOS_RESULT_FAIL_MAX_ATTEMPT: pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; break; case QSEOS_RESULT_FAILURE: default: Loading Loading @@ -2778,7 +2786,7 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, __qseecom_disable_clk(CLK_QSEE); if (qseecom.qsee.instance != qseecom.ce_drv.instance) __qseecom_disable_clk(CLK_CE_DRV); return ret; return -EFAULT; } switch (resp.result) { Loading @@ -2786,9 +2794,18 @@ static int __qseecom_set_clear_ce_key(struct qseecom_dev_handle *data, break; case QSEOS_RESULT_INCOMPLETE: ret = __qseecom_process_incomplete_cmd(data, &resp); if (ret) if (ret) { pr_err("process_incomplete_cmd FAILED, resp.result %d\n", resp.result); if (resp.result == QSEOS_RESULT_FAIL_MAX_ATTEMPT) { pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; } } break; case QSEOS_RESULT_FAIL_MAX_ATTEMPT: pr_debug("Max attempts to input password reached.\n"); ret = -ERANGE; break; case QSEOS_RESULT_FAILURE: default: Loading Loading @@ -2828,7 +2845,7 @@ static int __qseecom_update_current_key_user_info( __qseecom_disable_clk(CLK_QSEE); if (qseecom.qsee.instance != qseecom.ce_drv.instance) __qseecom_disable_clk(CLK_CE_DRV); return ret; return -EFAULT; } switch (resp.result) { Loading Loading @@ -2894,7 +2911,7 @@ static int qseecom_create_key(struct qseecom_dev_handle *data, &generate_key_ireq); if (ret) { pr_err("Failed to generate key on storage: %d\n", ret); return -EFAULT; return ret; } set_key_ireq.qsee_command_id = QSEOS_SET_KEY; Loading @@ -2914,11 +2931,10 @@ static int qseecom_create_key(struct qseecom_dev_handle *data, ret = __qseecom_set_clear_ce_key(data, create_key_req.usage, &set_key_ireq); msleep(2000); if (ret) { pr_err("Failed to create key: pipe %d, ce %d: %d\n", pipe, ce_hw, ret); return -EFAULT; return ret; } return ret; Loading Loading @@ -3023,10 +3039,9 @@ static int qseecom_update_key_user_info(struct qseecom_dev_handle *data, ret = __qseecom_update_current_key_user_info(data, update_key_req.usage, &ireq); msleep(2000); if (ret) { pr_err("Failed to update key info: %d\n", ret); return -EFAULT; return ret; } return ret; Loading