msm: mdss: un map dsi transmit buffer properly

DSi tx buffer is mapped to iommu memory if iommu
attached. Therefore it needs to be iommu un mapped
at end of transmission.

CRs-Fixed: 752164
Change-Id: I2d3edad78c0cd859b5c31b5e2c6d66e5148ccf5f
Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org>
This commit is contained in:
Kuogee Hsieh 2014-11-06 15:09:50 -08:00 committed by David Keitel
parent 475788307f
commit 02ce0808d3
2 changed files with 8 additions and 4 deletions

View file

@ -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;

View file

@ -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;