diff options
| author | Prasad Sodagudi <psodagud@codeaurora.org> | 2016-02-07 11:31:51 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-25 16:03:18 -0700 |
| commit | a739b2a1f8a7ffccb1af6cc3927b3a7dece781b3 (patch) | |
| tree | f116bbec9a19342e6c601835965816352f1d221b /drivers/soc | |
| parent | 30781083ea60e69950381596660b8c3b4a169be4 (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.c | 36 |
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); |
