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

Commit a5e1ea49 authored by Charan Teja Reddy's avatar Charan Teja Reddy
Browse files

soc: qcom: add scm calls for ion and iommu



Add support for required SCM calls that gets called from ion and iommu
drivers to get services from TZ. Also make is_scm_armv8() global so
that it will be called by required modules.

Change-Id: I476f7873118fa56590385f6cde198210ab31ed6c
Signed-off-by: default avatarCharan Teja Reddy <charante@codeaurora.org>
parent 1dce6f5b
Loading
Loading
Loading
Loading
+51 −1
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ static enum scm_interface_version {
/* This will be set to specify SMC32 or SMC64 */
static u32 scm_version_mask;

static bool is_scm_armv8(void)
bool is_scm_armv8(void)
{
	int ret;
	u64 ret1, x0;
@@ -589,6 +589,56 @@ int scm_is_call_available(u32 svc_id, u32 cmd_id)
}
EXPORT_SYMBOL(scm_is_call_available);

#define GET_FEAT_VERSION_CMD	3
int scm_get_feat_version(u32 feat)
{
	struct scm_desc desc = {0};
	int ret;

	ret = scm_is_call_available(SCM_SVC_INFO, GET_FEAT_VERSION_CMD);
	if (ret <= 0)
		return 0;

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

	return 0;
}
EXPORT_SYMBOL(scm_get_feat_version);

#define RESTORE_SEC_CFG    2
int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret)
{
	struct scm_desc desc = {0};
	int ret;
	struct restore_sec_cfg {
		u32 device_id;
		u32 spare;
	} cfg;

	cfg.device_id = device_id;
	cfg.spare = spare;

	if (IS_ERR_OR_NULL(scm_ret))
		return -EINVAL;

	desc.args[0] = device_id;
	desc.args[1] = spare;
	desc.arginfo = SCM_ARGS(2);

	ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP, RESTORE_SEC_CFG), &desc);
	if (ret)
		return ret;

	*scm_ret = desc.ret[0];
	return 0;
}
EXPORT_SYMBOL(scm_restore_sec_cfg);

/*
 * SCM call command ID to check secure mode
 * Return zero for secure device.
+13 −0
Original line number Diff line number Diff line
@@ -103,10 +103,13 @@ extern int scm_call2_noretry(u32 cmd_id, struct scm_desc *desc);
extern int scm_call2_atomic(u32 cmd_id, struct scm_desc *desc);
extern u32 scm_get_version(void);
extern int scm_is_call_available(u32 svc_id, u32 cmd_id);
extern int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret);
extern u32 scm_io_read(phys_addr_t address);
extern int scm_io_write(phys_addr_t address, u32 val);
extern bool scm_is_secure_device(void);
extern int scm_enable_mem_protection(void);
extern int scm_get_feat_version(u32 feat);
extern bool is_scm_armv8(void);

extern struct mutex scm_lmh_lock;

@@ -132,6 +135,11 @@ static inline u32 scm_get_version(void)
	return 0;
}

static inline int scm_get_feat_version(u32 feat)
{
	return 0;
}

static inline int scm_is_call_available(u32 svc_id, u32 cmd_id)
{
	return 0;
@@ -142,6 +150,11 @@ static inline bool is_scm_armv8(void)
	return true;
}

static inline int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret)
{
	return 0;
}

static inline u32 scm_io_read(phys_addr_t address)
{
	return 0;