#include <linux/rockchip/common.h>
#include <dt-bindings/clock/rk_system_status.h>
#if defined(CONFIG_ION_ROCKCHIP)
-#include <linux/rockchip/iovmm.h>
-#include <linux/rockchip/sysmmu.h>
+#include <linux/rockchip-iovmm.h>
#endif
#include "rk3036_lcdc.h"
if ((open) && (!lcdc_dev->atv_layer_cnt)) {
rk3036_lcdc_pre_init(dev_drv);
rk3036_lcdc_clk_enable(lcdc_dev);
- #if defined(CONFIG_ROCKCHIP_IOMMU)
+ #if defined(CONFIG_ROCKCHIP_IOMMU)
if (dev_drv->iommu_enabled) {
if (!dev_drv->mmu_dev) {
dev_drv->mmu_dev =
- rockchip_get_sysmmu_device_by_compatible(
+ rk_fb_get_sysmmu_device_by_compatible(
dev_drv->mmu_dts_name);
if (dev_drv->mmu_dev) {
- platform_set_sysmmu(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 iommu device\n"
return -1;
}
}
- iovmm_activate(dev_drv->dev);
}
- #endif
+ #endif
rk3036_lcdc_reg_restore(lcdc_dev);
if (dev_drv->iommu_enabled)
rk3036_lcdc_mmu_en(dev_drv);
lcdc_cfg_done(lcdc_dev);
if (dev_drv->iommu_enabled) {
if (dev_drv->mmu_dev)
- iovmm_deactivate(dev_drv->dev);
+ rockchip_iovmm_deactivate(dev_drv->dev);
}
spin_unlock(&lcdc_dev->reg_lock);
} else {
lcdc_cfg_done(lcdc_dev);
if (dev_drv->iommu_enabled) {
if (dev_drv->mmu_dev)
- iovmm_activate(dev_drv->dev);
+ rockchip_iovmm_activate(dev_drv->dev);
}
spin_unlock(&lcdc_dev->reg_lock);
}
if (dev_drv->iommu_enabled) {
if (!dev_drv->mmu_dev) {
dev_drv->mmu_dev =
- rockchip_get_sysmmu_device_by_compatible
- (dev_drv->mmu_dts_name);
- if (dev_drv->mmu_dev)
- platform_set_sysmmu(dev_drv->mmu_dev,
- dev_drv->dev);
- else {
+ rk_fb_get_sysmmu_device_by_compatible(dev_drv->mmu_dts_name);
+ 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;
}
}
- iovmm_activate(dev_drv->dev);
}
#endif
rk312x_lcdc_reg_restore(lcdc_dev);
#if defined(CONFIG_ROCKCHIP_IOMMU)
if (dev_drv->iommu_enabled) {
if (dev_drv->mmu_dev)
- iovmm_deactivate(dev_drv->dev);
+ rockchip_iovmm_deactivate(dev_drv->dev);
}
#endif
rk312x_lcdc_clk_disable(lcdc_dev);
lcdc_msk_reg(lcdc_dev, SYS_CTRL, m_LCDC_STANDBY,
v_LCDC_STANDBY(1));
lcdc_cfg_done(lcdc_dev);
-#if defined(CONFIG_ROCKCHIP_IOMMU)
+
if (dev_drv->iommu_enabled) {
if (dev_drv->mmu_dev)
- iovmm_deactivate(dev_drv->dev);
+ rockchip_iovmm_deactivate(dev_drv->dev);
}
-#endif
+
spin_unlock(&lcdc_dev->reg_lock);
} else {
spin_unlock(&lcdc_dev->reg_lock);
lcdc_msk_reg(lcdc_dev, DSP_CTRL1, m_BLANK_EN, v_BLANK_EN(0));
lcdc_cfg_done(lcdc_dev);
+ if (dev_drv->iommu_enabled) {
+ if (dev_drv->mmu_dev)
+ rockchip_iovmm_activate(dev_drv->dev);
+ }
+
spin_unlock(&lcdc_dev->reg_lock);
}
if ((open) && (!lcdc_dev->atv_layer_cnt)) {
rockchip_set_system_status(sys_status);
rk3288_lcdc_pre_init(dev_drv);
+#if defined(CONFIG_ROCKCHIP_IOMMU)
+ if (dev_drv->iommu_enabled) {
+ if (!dev_drv->mmu_dev) {
+ dev_drv->mmu_dev =
+ rk_fb_get_sysmmu_device_by_compatible(dev_drv->mmu_dts_name);
+ 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;
+ }
+ }
+ }
+#endif
rk3288_lcdc_clk_enable(lcdc_dev);
rk3288_lcdc_reg_restore(lcdc_dev);
if (dev_drv->iommu_enabled)
else
dev_err(lcdc_dev->dev, "invalid win id:%d\n", win_id);
- /*when all layer closed,disable clk */
+ /* when all layer closed,disable clk */
if ((!open) && (!lcdc_dev->atv_layer_cnt)) {
rk3288_lcdc_disable_irq(lcdc_dev);
rk3288_lcdc_reg_update(dev_drv);
+#if defined(CONFIG_ROCKCHIP_IOMMU)
+ if (dev_drv->iommu_enabled) {
+ if (dev_drv->mmu_dev)
+ rockchip_iovmm_deactivate(dev_drv->dev);
+ }
+#endif
rk3288_lcdc_clk_disable(lcdc_dev);
rockchip_clear_system_status(sys_status);
}
lcdc_msk_reg(lcdc_dev, SYS_CTRL, m_STANDBY_EN,
v_STANDBY_EN(1));
lcdc_cfg_done(lcdc_dev);
+
+ if (dev_drv->iommu_enabled) {
+ if (dev_drv->mmu_dev)
+ rockchip_iovmm_deactivate(dev_drv->dev);
+ }
+
spin_unlock(&lcdc_dev->reg_lock);
} else {
spin_unlock(&lcdc_dev->reg_lock);
v_DSP_BLANK_EN(0));
lcdc_cfg_done(lcdc_dev);
+ if (dev_drv->iommu_enabled) {
+ if (dev_drv->mmu_dev)
+ rockchip_iovmm_activate(dev_drv->dev);
+ }
+
spin_unlock(&lcdc_dev->reg_lock);
}
}
-/****
-1,success : pointer to the device inside of platform device
-2,fail : NULL
-****/
+/* rk_fb_get_sysmmu_device_by_compatible()
+ * @compt: dts device compatible name
+ * return value: success: pointer to the device inside of platform device
+ * fail: NULL
+ */
struct device *rk_fb_get_sysmmu_device_by_compatible(const char *compt)
{
struct device_node *dn = NULL;
struct platform_device *pd = NULL;
struct device *ret = NULL ;
- dn = of_find_compatible_node(NULL,NULL,compt);
- if(!dn)
- {
- printk("can't find device node %s \r\n",compt);
+ dn = of_find_compatible_node(NULL, NULL, compt);
+ if (!dn) {
+ printk("can't find device node %s \r\n", compt);
return NULL;
}
pd = of_find_device_by_node(dn);
- if(!pd)
- {
- printk("can't find platform device in device node %s \r\n",compt);
+ if (!pd) {
+ printk("can't find platform device in device node %s \r\n", compt);
return NULL;
}
ret = &pd->dev;
return ret;
-
}
#ifdef CONFIG_IOMMU_API
#else
void rk_fb_platform_set_sysmmu(struct device *sysmmu, struct device *dev)
{
-
+
}
#endif
extern int support_uboot_display(void);
extern int rk_fb_calc_fps(struct rk_screen *screen, u32 pixclock);
extern int rk_get_real_fps(int time);
+extern struct device *rk_fb_get_sysmmu_device_by_compatible(const char *compt);
+extern void rk_fb_platform_set_sysmmu(struct device *sysmmu,
+ struct device *dev);
#endif