diff --git a/drivers/iommu/msm_iommu-v1.c b/drivers/iommu/msm_iommu-v1.c
index cfa91aaac15c6b1b23f23d5de4329baa2ee389ae..7f1f7bcd0e73c94bace40959c803480190587025 100644
--- a/drivers/iommu/msm_iommu-v1.c
+++ b/drivers/iommu/msm_iommu-v1.c
@@ -825,7 +825,7 @@ static int msm_iommu_attach_dev(struct iommu_domain *domain, struct device *dev)
 			iommu_resume(iommu_drvdata);
 		} else {
 			ret = msm_iommu_sec_program_iommu(
-				iommu_drvdata->sec_id, ctx_drvdata->num);
+				iommu_drvdata, ctx_drvdata);
 			if (ret) {
 				__disable_regulators(iommu_drvdata);
 				__disable_clocks(iommu_drvdata);
diff --git a/drivers/iommu/msm_iommu_sec.c b/drivers/iommu/msm_iommu_sec.c
index c6de1713bca727de47ad62e8ef7541b25752318e..80ed1704d3b5556b0ea2707ffe9bde957e3ba49f 100644
--- a/drivers/iommu/msm_iommu_sec.c
+++ b/drivers/iommu/msm_iommu_sec.c
@@ -414,7 +414,8 @@ fail:
 	return ret;
 }
 
-int msm_iommu_sec_program_iommu(int sec_id, u32 cb_num)
+int msm_iommu_sec_program_iommu(struct msm_iommu_drvdata *drvdata,
+			struct msm_iommu_ctx_drvdata *ctx_drvdata)
 {
 	struct msm_scm_sec_cfg {
 		unsigned int id;
@@ -422,8 +423,14 @@ int msm_iommu_sec_program_iommu(int sec_id, u32 cb_num)
 	} cfg;
 	int ret, scm_ret = 0;
 
-	cfg.id = sec_id;
-	cfg.spare = cb_num;
+	cfg.id = drvdata->sec_id;
+	cfg.spare = ctx_drvdata->num;
+
+	if (drvdata->smmu_local_base) {
+		writel_relaxed(0xFFFFFFFF, drvdata->smmu_local_base +
+						SMMU_INTR_SEL_NS);
+		mb();
+	}
 
 	ret = scm_call(SCM_SVC_MP, IOMMU_SECURE_CFG, &cfg, sizeof(cfg),
 			&scm_ret, sizeof(scm_ret));
@@ -643,8 +650,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,
-						ctx_drvdata->num);
+		ret = msm_iommu_sec_program_iommu(iommu_drvdata,
+						ctx_drvdata);
 
 		/* bfb settings are always programmed by HLOS */
 		program_iommu_bfb_settings(iommu_drvdata->base,
diff --git a/include/linux/qcom_iommu.h b/include/linux/qcom_iommu.h
index 6b07b6326625bb4efef214a61e93c706cbd527ae..490d5d137303b8c760106f71f2c42305cd2a6a2c 100644
--- a/include/linux/qcom_iommu.h
+++ b/include/linux/qcom_iommu.h
@@ -332,7 +332,8 @@ static inline struct device *msm_iommu_get_ctx(const char *ctx_name)
  * of global registers is not possible
  */
 void msm_iommu_sec_set_access_ops(struct iommu_access_ops *access_ops);
-int msm_iommu_sec_program_iommu(int sec_id, u32 cb_num);
+int msm_iommu_sec_program_iommu(struct msm_iommu_drvdata *drvdata,
+				struct msm_iommu_ctx_drvdata *ctx_drvdata);
 int is_vfe_secure(void);
 
 #ifdef CONFIG_MSM_IOMMU_V0