Merge "msm: mdss: Cleanup iommu ref count implementation"
diff --git a/drivers/video/msm/mdss/mdss_mdp.c b/drivers/video/msm/mdss/mdss_mdp.c
index 00a8006..097d568 100644
--- a/drivers/video/msm/mdss/mdss_mdp.c
+++ b/drivers/video/msm/mdss/mdss_mdp.c
@@ -2606,11 +2606,7 @@
 		}
 		mdss_hw_init(mdata);
 		mdata->ulps = false;
-		rc = mdss_iommu_ctrl(0);
-		if (IS_ERR_VALUE(rc)) {
-			pr_err("iommu dettach failed ret=%d\n", rc);
-			return rc;
-		}
+		mdss_iommu_ctrl(0);
 	} else {
 		mdata->ulps = true;
 		pm_runtime_put_sync(dev);
diff --git a/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c b/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
index b91c524..350ea1b 100644
--- a/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
+++ b/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
@@ -203,11 +203,9 @@
 			pr_debug("deleted pending ulps work\n");
 
 		rc = mdss_iommu_ctrl(1);
-		if (IS_ERR_VALUE(rc)) {
+		if (IS_ERR_VALUE(rc))
 			pr_err("IOMMU attach failed\n");
-			mutex_unlock(&ctx->clk_mtx);
-			return;
-		}
+
 		mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON, false);
 
 		if (ctx->ulps) {
diff --git a/drivers/video/msm/mdss/mdss_mdp_overlay.c b/drivers/video/msm/mdss/mdss_mdp_overlay.c
index a475212..2141659 100644
--- a/drivers/video/msm/mdss/mdss_mdp_overlay.c
+++ b/drivers/video/msm/mdss/mdss_mdp_overlay.c
@@ -702,15 +702,15 @@
 					   int num_planes,
 					   u32 flags)
 {
-	int i, rc, ret;
+	int i, rc;
 
 	if ((num_planes <= 0) || (num_planes > MAX_PLANES))
 		return -EINVAL;
 
-	ret = mdss_iommu_ctrl(1);
-	if (IS_ERR_VALUE(ret)) {
+	rc = mdss_iommu_ctrl(1);
+	if (IS_ERR_VALUE(rc)) {
 		pr_err("Iommu attach failed");
-		return ret;
+		goto end;
 	}
 
 	memset(data, 0, sizeof(*data));
@@ -727,13 +727,9 @@
 		}
 	}
 
-	ret = mdss_iommu_ctrl(0);
-	if (IS_ERR_VALUE(ret)) {
-		pr_err("Iommu dettach failed");
-		return ret;
-	}
-
+	mdss_iommu_ctrl(0);
 	data->num_planes = i;
+end:
 	return rc;
 }
 
@@ -750,12 +746,7 @@
 	for (i = 0; i < data->num_planes && data->p[i].len; i++)
 		mdss_mdp_put_img(&data->p[i]);
 
-	rc = mdss_iommu_ctrl(0);
-	if (IS_ERR_VALUE(rc)) {
-		pr_err("Iommu dettach failed");
-		return rc;
-	}
-
+	mdss_iommu_ctrl(0);
 	data->num_planes = 0;
 	return 0;
 }
@@ -956,11 +947,7 @@
 				goto pm_error;
 			}
 			mdss_hw_init(mdss_res);
-			rc = mdss_iommu_ctrl(0);
-			if (IS_ERR_VALUE(rc)) {
-				pr_err("iommu dettach failed rc=%d\n", rc);
-				goto pm_error;
-			}
+			mdss_iommu_ctrl(0);
 		}
 	}
 
@@ -1610,6 +1597,13 @@
 	}
 
 	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON, false);
+
+	ret = mdss_iommu_ctrl(1);
+	if (IS_ERR_VALUE(ret)) {
+		pr_err("IOMMU attach failed\n");
+		goto pan_display_error;
+	}
+
 	bpp = fbi->var.bits_per_pixel / 8;
 	offset = fbi->var.xoffset * bpp +
 		 fbi->var.yoffset * fbi->fix.line_length;
@@ -1676,10 +1670,12 @@
 	    (fbi->var.activate & FB_ACTIVATE_FORCE))
 		mfd->mdp.kickoff_fnc(mfd, NULL);
 
+	mdss_iommu_ctrl(0);
 	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false);
 	return;
 
 pan_display_error:
+	mdss_iommu_ctrl(0);
 	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false);
 	mutex_unlock(&mdp5_data->ov_lock);
 }
diff --git a/drivers/video/msm/mdss/mdss_mdp_splash_logo.c b/drivers/video/msm/mdss/mdss_mdp_splash_logo.c
index c478d38..829806d 100644
--- a/drivers/video/msm/mdss/mdss_mdp_splash_logo.c
+++ b/drivers/video/msm/mdss/mdss_mdp_splash_logo.c
@@ -156,7 +156,6 @@
 {
 	struct iommu_domain *domain;
 	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
-	int ret;
 
 	if (mfd->splash_info.iommu_dynamic_attached) {
 		domain = msm_get_iommu_domain(mdss_get_iommu_domain(
@@ -168,9 +167,7 @@
 
 		iommu_unmap(domain, mdp5_data->splash_mem_addr,
 						mdp5_data->splash_mem_size);
-		ret = mdss_iommu_ctrl(0);
-		if (IS_ERR_VALUE(ret))
-			pr_err("mdss iommu dettach failed\n");
+		mdss_iommu_ctrl(0);
 
 		mfd->splash_info.iommu_dynamic_attached = false;
 	}
diff --git a/drivers/video/msm/mdss/mdss_mdp_wb.c b/drivers/video/msm/mdss/mdss_mdp_wb.c
index 6f5da1d..6086e28 100644
--- a/drivers/video/msm/mdss/mdss_mdp_wb.c
+++ b/drivers/video/msm/mdss/mdss_mdp_wb.c
@@ -403,7 +403,7 @@
 	struct mdss_mdp_wb *wb = mfd_to_wb(mfd);
 	struct mdss_mdp_wb_data *node;
 	struct mdss_mdp_img_data *buf;
-	int ret, rc;
+	int ret;
 
 	if (!list_empty(&wb->register_queue)) {
 		list_for_each_entry(node, &wb->register_queue, registered_entry)
@@ -427,21 +427,20 @@
 	buf = &node->buf_data.p[0];
 	if (wb->is_secure)
 		buf->flags |= MDP_SECURE_OVERLAY_SESSION;
-	rc = mdss_iommu_ctrl(1);
-	if (IS_ERR_VALUE(rc)) {
+
+	ret = mdss_iommu_ctrl(1);
+	if (IS_ERR_VALUE(ret)) {
 		pr_err("IOMMU attach failed\n");
 		goto register_fail;
 	}
 	ret = mdss_mdp_get_img(data, buf);
-	rc = mdss_iommu_ctrl(0);
-	if (IS_ERR_VALUE(rc)) {
-		pr_err("IOMMU dettach failed\n");
-		goto register_fail;
-	}
 	if (IS_ERR_VALUE(ret)) {
 		pr_err("error getting buffer info\n");
+		mdss_iommu_ctrl(0);
 		goto register_fail;
 	}
+	mdss_iommu_ctrl(0);
+
 	memcpy(&node->buf_info, data, sizeof(*data));
 
 	ret = mdss_mdp_wb_register_node(wb, node);
@@ -712,7 +711,6 @@
 {
 	struct msmfb_data data;
 	int ret = -ENOSYS, hint = 0;
-	int rc;
 
 	switch (cmd) {
 	case MSMFB_WRITEBACK_INIT:
@@ -743,17 +741,13 @@
 		}
 		break;
 	case MSMFB_WRITEBACK_TERMINATE:
-		rc = mdss_iommu_ctrl(1);
-		if (IS_ERR_VALUE(rc)) {
+		ret = mdss_iommu_ctrl(1);
+		if (IS_ERR_VALUE(ret)) {
 			pr_err("IOMMU attach failed\n");
-			return rc;
+			return ret;
 		}
 		ret = mdss_mdp_wb_terminate(mfd);
-		rc = mdss_iommu_ctrl(0);
-		if (IS_ERR_VALUE(rc)) {
-			pr_err("IOMMU dettach failed\n");
-			return rc;
-		}
+		mdss_iommu_ctrl(0);
 		break;
 	case MSMFB_WRITEBACK_SET_MIRRORING_HINT:
 		if (!copy_from_user(&hint, arg, sizeof(hint))) {
@@ -883,11 +877,7 @@
 			return ret;
 		}
 	} else {
-		ret = mdss_iommu_ctrl(0);
-		if (IS_ERR_VALUE(ret)) {
-			pr_err("IOMMU dettach failed\n");
-			return ret;
-		}
+		mdss_iommu_ctrl(0);
 	}
 
 	return 0;