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;