Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b108a7d8 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qseecom: change key management apis"

parents 99b0b2a4 7b3cf4a0
Loading
Loading
Loading
Loading
+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
@@ -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,
+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
@@ -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>
@@ -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) {
@@ -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) {
@@ -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:
@@ -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) {
@@ -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:
@@ -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) {
@@ -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;
@@ -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;
@@ -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;