diff --git a/drivers/video/fbdev/msm/mdss_dsi.h b/drivers/video/fbdev/msm/mdss_dsi.h index 2fd9c5b4b13e..22eac8623751 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.h +++ b/drivers/video/fbdev/msm/mdss_dsi.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -334,6 +334,7 @@ struct mdss_dsi_ctrl_pdata { int bklt_max; int new_fps; int pwm_enabled; + bool dmap_iommu_map; bool panel_bias_vreg; bool dsi_irq_line; atomic_t te_irq_ready; diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c index 75f0c430962d..c70b21695c44 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_host.c +++ b/drivers/video/fbdev/msm/mdss_dsi_host.c @@ -1528,6 +1528,7 @@ static int mdss_dsi_cmd_dma_tx(struct mdss_dsi_ctrl_pdata *ctrl, pr_err("unable to map dma memory to iommu(%d)\n", ret); return -ENOMEM; } + ctrl->dmap_iommu_map = true; } else { ctrl->dma_addr = tp->dmap; } @@ -1568,19 +1569,21 @@ static int mdss_dsi_cmd_dma_tx(struct mdss_dsi_ctrl_pdata *ctrl, ret = tp->len; if (mctrl && mctrl->dma_addr) { - if (ctrl->mdss_util->iommu_attached()) { + if (mctrl->dmap_iommu_map) { msm_iommu_unmap_contig_buffer(mctrl->dma_addr, - ctrl->mdss_util->get_iommu_domain(domain), + mctrl->mdss_util->get_iommu_domain(domain), 0, mctrl->dma_size); + mctrl->dmap_iommu_map = false; } mctrl->dma_addr = 0; mctrl->dma_size = 0; } - if (ctrl->mdss_util->iommu_attached()) { + if (ctrl->dmap_iommu_map) { msm_iommu_unmap_contig_buffer(ctrl->dma_addr, ctrl->mdss_util->get_iommu_domain(domain), 0, ctrl->dma_size); + ctrl->dmap_iommu_map = false; } ctrl->dma_addr = 0;