video: rockchip: rk322x: keep vop standby before enable iommu
authorMark Yao <mark.yao@rock-chips.com>
Mon, 7 Nov 2016 06:22:36 +0000 (14:22 +0800)
committerMark Yao <mark.yao@rock-chips.com>
Wed, 9 Nov 2016 00:50:22 +0000 (08:50 +0800)
Vop may access illegal address and cause bus error with:
    1, vop iommu is disable
    2, vop is enable and its window use a iommu mapping address

The illegal memory access may cause bus abnormal.

Change-Id: I17d52ae12140b9bf85d37123765f7163422ec8f5
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/video/rockchip/lcdc/rk322x_lcdc.c

index bcdfc0fcdd9799af7accf0ae77b04cf754310210..26c49a36bf82800d75cc201f4a6f407157ab32f3 100644 (file)
@@ -3561,7 +3561,6 @@ static int vop_early_resume(struct rk_lcdc_driver *dev_drv)
        spin_lock(&vop_dev->reg_lock);
 
        vop_msk_reg(vop_dev, DSP_CTRL0, V_DSP_OUT_ZERO(0));
-       vop_msk_reg(vop_dev, SYS_CTRL, V_VOP_STANDBY_EN(0));
        vop_msk_reg(vop_dev, DSP_CTRL0, V_DSP_BLANK_EN(0));
        vop_cfg_done(vop_dev);
        spin_unlock(&vop_dev->reg_lock);
@@ -3574,6 +3573,11 @@ static int vop_early_resume(struct rk_lcdc_driver *dev_drv)
                rockchip_iovmm_activate(dev_drv->dev);
        }
 
+       spin_lock(&vop_dev->reg_lock);
+       vop_msk_reg(vop_dev, SYS_CTRL, V_VOP_STANDBY_EN(0));
+       vop_cfg_done(vop_dev);
+       spin_unlock(&vop_dev->reg_lock);
+
        dev_drv->suspend_flag = 0;
 
        if (dev_drv->trsm_ops && dev_drv->trsm_ops->enable)