summaryrefslogtreecommitdiff
path: root/drivers/iommu/msm_iommu_sec.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu/msm_iommu_sec.c')
-rw-r--r--drivers/iommu/msm_iommu_sec.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/drivers/iommu/msm_iommu_sec.c b/drivers/iommu/msm_iommu_sec.c
index 43144b1b8dba..431d14ce3be7 100644
--- a/drivers/iommu/msm_iommu_sec.c
+++ b/drivers/iommu/msm_iommu_sec.c
@@ -56,7 +56,7 @@
#define MAXIMUM_VIRT_SIZE (300*SZ_1M)
-#define MAKE_CP_VERSION(major, minor, patch) \
+#define MAKE_VERSION(major, minor, patch) \
(((major & 0x3FF) << 22) | ((minor & 0x3FF) << 12) | (patch & 0xFFF))
@@ -349,7 +349,7 @@ static int msm_iommu_sec_ptbl_init(void)
version = scm_get_feat_version(SCM_SVC_MP);
- if (version >= MAKE_CP_VERSION(1, 1, 1)) {
+ if (version >= MAKE_VERSION(1, 1, 1)) {
struct msm_cp_pool_size psize;
int retval;
@@ -410,7 +410,7 @@ fail:
return ret;
}
-int msm_iommu_sec_program_iommu(int sec_id)
+int msm_iommu_sec_program_iommu(int sec_id, u32 cb_num)
{
struct msm_scm_sec_cfg {
unsigned int id;
@@ -419,6 +419,7 @@ int msm_iommu_sec_program_iommu(int sec_id)
int ret, scm_ret = 0;
cfg.id = sec_id;
+ cfg.spare = cb_num;
ret = scm_call(SCM_SVC_MP, IOMMU_SECURE_CFG, &cfg, sizeof(cfg),
&scm_ret, sizeof(scm_ret));
@@ -638,7 +639,8 @@ static int msm_iommu_attach_dev(struct iommu_domain *domain, struct device *dev)
goto fail;
}
- ret = msm_iommu_sec_program_iommu(iommu_drvdata->sec_id);
+ ret = msm_iommu_sec_program_iommu(iommu_drvdata->sec_id,
+ ctx_drvdata->num);
/* bfb settings are always programmed by HLOS */
program_iommu_bfb_settings(iommu_drvdata->base,
@@ -830,6 +832,22 @@ int msm_iommu_get_scm_call_avail(void)
return is_secure;
}
+/*
+ * VFE SMMU is changing from being non-secure to being secure.
+ * For backwards compatibility we need to check whether the secure environment
+ * has support for this.
+ */
+static s32 secure_camera_enabled = -1;
+int is_vfe_secure(void)
+{
+ if (secure_camera_enabled == -1) {
+ u32 ver = scm_get_feat_version(SCM_SVC_SEC_CAMERA);
+ secure_camera_enabled = ver >= MAKE_VERSION(1, 0, 0);
+ }
+ return secure_camera_enabled;
+}
+
+
static struct iommu_ops msm_iommu_ops = {
.domain_init = msm_iommu_domain_init,
.domain_destroy = msm_iommu_domain_destroy,