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

Commit 156bc232 authored by Zhen Kong's avatar Zhen Kong
Browse files

qseecom: update qseecom for msm-4.14



Some scm driver APIs are depricated on msm-4.14, and
remove them from qseecom driver. Also fix several
compilation errors on msm-4.14.

Change-Id: I3d33fa891296f3792803ad9a466ad74f5d64014c
Signed-off-by: default avatarZhen Kong <zkong@codeaurora.org>
parent b55d6fef
Loading
Loading
Loading
Loading
+14 −17
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include "qseecom_kernel.h"
#include <crypto/ice.h>
#include <linux/delay.h>
#include <linux/signal.h>

#include <linux/compat.h>
#include "compat_qseecom.h"
@@ -1055,10 +1056,6 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
static int qseecom_scm_call(u32 svc_id, u32 tz_cmd_id, const void *cmd_buf,
		size_t cmd_len, void *resp_buf, size_t resp_len)
{
	if (!is_scm_armv8())
		return scm_call(svc_id, tz_cmd_id, cmd_buf, cmd_len,
				resp_buf, resp_len);
	else
	return qseecom_scm_call2(svc_id, tz_cmd_id, cmd_buf, resp_buf);
}

@@ -8507,9 +8504,19 @@ static int qseecom_query_ce_info(struct qseecom_dev_handle *data,
 * Check whitelist feature, and if TZ feature version is < 1.0.0,
 * then whitelist feature is not supported.
 */
#define GET_FEAT_VERSION_CMD	3
static int qseecom_check_whitelist_feature(void)
{
	int version = scm_get_feat_version(FEATURE_ID_WHITELIST);
	struct scm_desc desc = {0};
	int version = 0;
	int ret = 0;

	desc.args[0] = FEATURE_ID_WHITELIST;
	desc.arginfo = SCM_ARGS(1);
	ret = scm_call2(SCM_SIP_FNID(SCM_SVC_INFO,
		GET_FEAT_VERSION_CMD), &desc);
	if (!ret)
		version = desc.ret[0];

	return version >= MAKE_WHITELIST_VERSION(1, 0, 0);
}
@@ -8520,7 +8527,6 @@ static int qseecom_probe(struct platform_device *pdev)
	int i;
	uint32_t feature = 10;
	struct device *class_dev;
	struct msm_bus_scale_pdata *qseecom_platform_support = NULL;
	struct qseecom_command_scm_resp resp;
	struct qseecom_ce_info_use *pce_info_use = NULL;

@@ -8689,8 +8695,6 @@ static int qseecom_probe(struct platform_device *pdev)
			qseecom.ce_drv.ce_bus_clk = qclk->ce_bus_clk;
		}

		qseecom_platform_support = (struct msm_bus_scale_pdata *)
						msm_bus_cl_get_pdata(pdev);
		if (qseecom.qsee_version >= (QSEE_VERSION_02) &&
			(!qseecom.is_apps_region_protected &&
			!qseecom.appsbl_qseecom_support)) {
@@ -8756,10 +8760,8 @@ static int qseecom_probe(struct platform_device *pdev)
		if (qseecom.is_apps_region_protected ||
					qseecom.appsbl_qseecom_support)
			qseecom.commonlib_loaded = true;
	} else {
		qseecom_platform_support = (struct msm_bus_scale_pdata *)
						pdev->dev.platform_data;
	}

	if (qseecom.support_bus_scaling) {
		init_timer(&(qseecom.bw_scale_down_timer));
		INIT_WORK(&qseecom.bw_inactive_req_ws,
@@ -8768,16 +8770,11 @@ static int qseecom_probe(struct platform_device *pdev)
				qseecom_scale_bus_bandwidth_timer_callback;
	}
	qseecom.timer_running = false;
	qseecom.qsee_perf_client = msm_bus_scale_register_client(
					qseecom_platform_support);

	qseecom.whitelist_support = qseecom_check_whitelist_feature();
	pr_warn("qseecom.whitelist_support = %d\n",
				qseecom.whitelist_support);

	if (!qseecom.qsee_perf_client)
		pr_err("Unable to register bus client\n");

	atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_READY);
	return 0;

+62 −63
Original line number Diff line number Diff line
@@ -104,82 +104,82 @@ enum qseecom_qsee_reentrancy_phase {
	QSEE_REENTRANCY_PHASE_MAX = 0xFF
};

__packed  struct qsee_apps_region_info_ireq {
struct qsee_apps_region_info_ireq {
	uint32_t qsee_cmd_id;
	uint32_t addr;
	uint32_t size;
};
} __attribute__((__packed__));

__packed  struct qsee_apps_region_info_64bit_ireq {
struct qsee_apps_region_info_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint64_t addr;
	uint32_t size;
};
} __attribute__((__packed__));

__packed struct qseecom_check_app_ireq {
struct qseecom_check_app_ireq {
	uint32_t qsee_cmd_id;
	char     app_name[MAX_APP_NAME_SIZE];
};
} __attribute__((__packed__));

__packed struct qseecom_load_app_ireq {
struct qseecom_load_app_ireq {
	uint32_t qsee_cmd_id;
	uint32_t mdt_len;		/* Length of the mdt file */
	uint32_t img_len;		/* Length of .bxx and .mdt files */
	uint32_t phy_addr;		/* phy addr of the start of image */
	char     app_name[MAX_APP_NAME_SIZE];	/* application name*/
};
} __attribute__((__packed__));

__packed struct qseecom_load_app_64bit_ireq {
struct qseecom_load_app_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint32_t mdt_len;
	uint32_t img_len;
	uint64_t phy_addr;
	char     app_name[MAX_APP_NAME_SIZE];
};
} __attribute__((__packed__));

__packed struct qseecom_unload_app_ireq {
struct qseecom_unload_app_ireq {
	uint32_t qsee_cmd_id;
	uint32_t  app_id;
};
} __attribute__((__packed__));

__packed struct qseecom_load_lib_image_ireq {
struct qseecom_load_lib_image_ireq {
	uint32_t qsee_cmd_id;
	uint32_t mdt_len;
	uint32_t img_len;
	uint32_t phy_addr;
};
} __attribute__((__packed__));

__packed struct qseecom_load_lib_image_64bit_ireq {
struct qseecom_load_lib_image_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint32_t mdt_len;
	uint32_t img_len;
	uint64_t phy_addr;
};
} __attribute__((__packed__));

__packed struct qseecom_unload_lib_image_ireq {
struct qseecom_unload_lib_image_ireq {
	uint32_t qsee_cmd_id;
};
} __attribute__((__packed__));

__packed struct qseecom_register_listener_ireq {
struct qseecom_register_listener_ireq {
	uint32_t qsee_cmd_id;
	uint32_t listener_id;
	uint32_t sb_ptr;
	uint32_t sb_len;
};
} __attribute__((__packed__));

__packed struct qseecom_register_listener_64bit_ireq {
struct qseecom_register_listener_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint32_t listener_id;
	uint64_t sb_ptr;
	uint32_t sb_len;
};
} __attribute__((__packed__));

__packed struct qseecom_unregister_listener_ireq {
struct qseecom_unregister_listener_ireq {
	uint32_t qsee_cmd_id;
	uint32_t  listener_id;
};
} __attribute__((__packed__));

__packed struct qseecom_client_send_data_ireq {
struct qseecom_client_send_data_ireq {
	uint32_t qsee_cmd_id;
	uint32_t app_id;
	uint32_t req_ptr;
@@ -188,9 +188,9 @@ __packed struct qseecom_client_send_data_ireq {
	uint32_t rsp_len;
	uint32_t sglistinfo_ptr;
	uint32_t sglistinfo_len;
};
} __attribute__((__packed__));

__packed struct qseecom_client_send_data_64bit_ireq {
struct qseecom_client_send_data_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint32_t app_id;
	uint64_t req_ptr;
@@ -199,36 +199,36 @@ __packed struct qseecom_client_send_data_64bit_ireq {
	uint32_t rsp_len;
	uint64_t sglistinfo_ptr;
	uint32_t sglistinfo_len;
};
} __attribute__((__packed__));

__packed struct qseecom_reg_log_buf_ireq {
struct qseecom_reg_log_buf_ireq {
	uint32_t qsee_cmd_id;
	uint32_t phy_addr;
	uint32_t len;
};
} __attribute__((__packed__));

__packed struct qseecom_reg_log_buf_64bit_ireq {
struct qseecom_reg_log_buf_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint64_t phy_addr;
	uint32_t len;
};
} __attribute__((__packed__));

/* send_data resp */
__packed struct qseecom_client_listener_data_irsp {
struct qseecom_client_listener_data_irsp {
	uint32_t qsee_cmd_id;
	uint32_t listener_id;
	uint32_t status;
	uint32_t sglistinfo_ptr;
	uint32_t sglistinfo_len;
};
} __attribute__((__packed__));

__packed struct qseecom_client_listener_data_64bit_irsp {
struct qseecom_client_listener_data_64bit_irsp {
	uint32_t qsee_cmd_id;
	uint32_t listener_id;
	uint32_t status;
	uint64_t sglistinfo_ptr;
	uint32_t sglistinfo_len;
};
} __attribute__((__packed__));

/*
 * struct qseecom_command_scm_resp - qseecom response buffer
@@ -237,40 +237,40 @@ __packed struct qseecom_client_listener_data_64bit_irsp {
 *                buffer
 * @sb_in_rsp_len: length of command response
 */
__packed struct qseecom_command_scm_resp {
struct qseecom_command_scm_resp {
	uint32_t result;
	enum qseecom_command_scm_resp_type resp_type;
	unsigned int data;
};
} __attribute__((__packed__));

struct qseecom_rpmb_provision_key {
	uint32_t key_type;
};

__packed struct qseecom_client_send_service_ireq {
struct qseecom_client_send_service_ireq {
	uint32_t qsee_cmd_id;
	uint32_t key_type; /* in */
	unsigned int req_len; /* in */
	uint32_t rsp_ptr; /* in/out */
	unsigned int rsp_len; /* in/out */
};
} __attribute__((__packed__));

__packed struct qseecom_client_send_service_64bit_ireq {
struct qseecom_client_send_service_64bit_ireq {
	uint32_t qsee_cmd_id;
	uint32_t key_type;
	unsigned int req_len;
	uint64_t rsp_ptr;
	unsigned int rsp_len;
};
} __attribute__((__packed__));

__packed struct qseecom_key_generate_ireq {
struct qseecom_key_generate_ireq {
	uint32_t qsee_command_id;
	uint32_t flags;
	uint8_t key_id[QSEECOM_KEY_ID_SIZE];
	uint8_t hash32[QSEECOM_HASH_SIZE];
};
} __attribute__((__packed__));

__packed struct qseecom_key_select_ireq {
struct qseecom_key_select_ireq {
	uint32_t qsee_command_id;
	uint32_t ce;
	uint32_t pipe;
@@ -278,33 +278,33 @@ __packed struct qseecom_key_select_ireq {
	uint32_t flags;
	uint8_t key_id[QSEECOM_KEY_ID_SIZE];
	uint8_t hash32[QSEECOM_HASH_SIZE];
};
} __attribute__((__packed__));

__packed struct qseecom_key_delete_ireq {
struct qseecom_key_delete_ireq {
	uint32_t qsee_command_id;
	uint32_t flags;
	uint8_t key_id[QSEECOM_KEY_ID_SIZE];
	uint8_t hash32[QSEECOM_HASH_SIZE];

};
} __attribute__((__packed__));

__packed struct qseecom_key_userinfo_update_ireq {
struct qseecom_key_userinfo_update_ireq {
	uint32_t qsee_command_id;
	uint32_t flags;
	uint8_t key_id[QSEECOM_KEY_ID_SIZE];
	uint8_t current_hash32[QSEECOM_HASH_SIZE];
	uint8_t new_hash32[QSEECOM_HASH_SIZE];
};
} __attribute__((__packed__));

__packed struct qseecom_key_max_count_query_ireq {
struct qseecom_key_max_count_query_ireq {
	uint32_t flags;
};
} __attribute__((__packed__));

__packed struct qseecom_key_max_count_query_irsp {
struct qseecom_key_max_count_query_irsp {
	uint32_t max_key_count;
};
} __attribute__((__packed__));

__packed struct qseecom_qteec_ireq {
struct qseecom_qteec_ireq {
	uint32_t    qsee_cmd_id;
	uint32_t    app_id;
	uint32_t    req_ptr;
@@ -313,9 +313,9 @@ __packed struct qseecom_qteec_ireq {
	uint32_t    resp_len;
	uint32_t    sglistinfo_ptr;
	uint32_t    sglistinfo_len;
};
} __attribute__((__packed__));

__packed struct qseecom_qteec_64bit_ireq {
struct qseecom_qteec_64bit_ireq {
	uint32_t    qsee_cmd_id;
	uint32_t    app_id;
	uint64_t    req_ptr;
@@ -324,21 +324,20 @@ __packed struct qseecom_qteec_64bit_ireq {
	uint32_t    resp_len;
	uint64_t    sglistinfo_ptr;
	uint32_t    sglistinfo_len;
};
} __attribute__((__packed__));

__packed struct qseecom_client_send_fsm_key_req {
struct qseecom_client_send_fsm_key_req {
	uint32_t qsee_cmd_id;
	uint32_t req_ptr;
	uint32_t req_len;
	uint32_t rsp_ptr;
	uint32_t rsp_len;
};
} __attribute__((__packed__));

__packed struct qseecom_continue_blocked_request_ireq {
struct qseecom_continue_blocked_request_ireq {
	uint32_t qsee_cmd_id;
	uint32_t app_or_session_id; /*legacy: app_id; smcinvoke: session_id*/
};

} __attribute__((__packed__));

/**********      ARMV8 SMC INTERFACE TZ MACRO     *******************/