From: zwl Date: Thu, 11 Sep 2014 00:50:38 +0000 (+0800) Subject: rk3288/rk312x:lcdc: fix iommu status error when reopen lcdc X-Git-Tag: firefly_0821_release~4724^2~11 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=82ae95dc89d6a4204574217961fb4915f4311b2f;p=firefly-linux-kernel-4.4.55.git rk3288/rk312x:lcdc: fix iommu status error when reopen lcdc --- diff --git a/drivers/video/rockchip/lcdc/rk312x_lcdc.c b/drivers/video/rockchip/lcdc/rk312x_lcdc.c index 201a2703171b..9c54a5e45577 100755 --- a/drivers/video/rockchip/lcdc/rk312x_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk312x_lcdc.c @@ -1194,6 +1194,7 @@ static int rk312x_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id, if ((open) && (!lcdc_dev->atv_layer_cnt)) { rockchip_set_system_status(SYS_STATUS_LCDC0); rk312x_lcdc_pre_init(dev_drv); + rk312x_lcdc_clk_enable(lcdc_dev); #if defined(CONFIG_ROCKCHIP_IOMMU) if (dev_drv->iommu_enabled) { if (!dev_drv->mmu_dev) { @@ -1202,13 +1203,14 @@ static int rk312x_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id, if (dev_drv->mmu_dev) { rk_fb_platform_set_sysmmu(dev_drv->mmu_dev, dev_drv->dev); - rockchip_iovmm_activate(dev_drv->dev); } else { dev_err(dev_drv->dev, "failed to get rockchip iommu device\n"); return -1; } } + if (dev_drv->mmu_dev) + rockchip_iovmm_activate(dev_drv->dev); } #endif rk312x_lcdc_reg_restore(lcdc_dev); diff --git a/drivers/video/rockchip/lcdc/rk3288_lcdc.c b/drivers/video/rockchip/lcdc/rk3288_lcdc.c index a794a0d50c27..1be30625903e 100755 --- a/drivers/video/rockchip/lcdc/rk3288_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3288_lcdc.c @@ -1306,6 +1306,7 @@ static int rk3288_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id, if ((open) && (!lcdc_dev->atv_layer_cnt)) { rockchip_set_system_status(sys_status); rk3288_lcdc_pre_init(dev_drv); + rk3288_lcdc_clk_enable(lcdc_dev); #if defined(CONFIG_ROCKCHIP_IOMMU) if (dev_drv->iommu_enabled) { if (!dev_drv->mmu_dev) { @@ -1314,16 +1315,16 @@ static int rk3288_lcdc_open(struct rk_lcdc_driver *dev_drv, int win_id, if (dev_drv->mmu_dev) { rk_fb_platform_set_sysmmu(dev_drv->mmu_dev, dev_drv->dev); - rockchip_iovmm_activate(dev_drv->dev); } else { dev_err(dev_drv->dev, "failed to get rockchip iommu device\n"); return -1; } } + if (dev_drv->mmu_dev) + rockchip_iovmm_activate(dev_drv->dev); } #endif - rk3288_lcdc_clk_enable(lcdc_dev); rk3288_lcdc_reg_restore(lcdc_dev); if (dev_drv->iommu_enabled) rk3288_lcdc_mmu_en(dev_drv);