summaryrefslogtreecommitdiff
path: root/drivers/soc
diff options
context:
space:
mode:
authorPrasad Sodagudi <psodagud@codeaurora.org>2016-02-07 11:31:51 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-25 16:03:18 -0700
commita739b2a1f8a7ffccb1af6cc3927b3a7dece781b3 (patch)
treef116bbec9a19342e6c601835965816352f1d221b /drivers/soc
parent30781083ea60e69950381596660b8c3b4a169be4 (diff)
qcom: scm: provide scm_is_secure_device() api
Add new scm_is_secure_device() API, so that all platform drivers can check and take appropriate action for secure and non-secure devices. Change-Id: I5569f4aaf4bcbec2922a7745ec0fdc1ab423cc23 Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/qcom/scm.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/soc/qcom/scm.c b/drivers/soc/qcom/scm.c
index e90544bb84e4..714c848ec9c0 100644
--- a/drivers/soc/qcom/scm.c
+++ b/drivers/soc/qcom/scm.c
@@ -1197,3 +1197,39 @@ int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret)
return 0;
}
EXPORT_SYMBOL(scm_restore_sec_cfg);
+
+/*
+ * SCM call command ID to check secure mode
+ * Return zero for secure device.
+ * Return one for non secure device or secure
+ * device with debug enabled device.
+ */
+#define TZ_INFO_GET_SECURE_STATE 0x4
+bool scm_is_secure_device(void)
+{
+ struct scm_desc desc = {0};
+ int ret = 0, resp;
+
+ desc.args[0] = 0;
+ desc.arginfo = 0;
+ if (!is_scm_armv8()) {
+ ret = scm_call(SCM_SVC_INFO, TZ_INFO_GET_SECURE_STATE, NULL,
+ 0, &resp, sizeof(resp));
+ } else {
+ ret = scm_call2(SCM_SIP_FNID(SCM_SVC_INFO,
+ TZ_INFO_GET_SECURE_STATE),
+ &desc);
+ resp = desc.ret[0];
+ }
+
+ if (ret) {
+ pr_err("%s: SCM call failed\n", __func__);
+ return false;
+ }
+
+ if ((resp & BIT(0)) || (resp & BIT(2)))
+ return true;
+ else
+ return false;
+}
+EXPORT_SYMBOL(scm_is_secure_device);