From: ljf Date: Fri, 8 Aug 2014 05:55:51 +0000 (+0800) Subject: rk3288: modified for new iommu interface X-Git-Tag: firefly_0821_release~4926 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=907683be664b55b2e9971e66d11500d9911fe93d;p=firefly-linux-kernel-4.4.55.git rk3288: modified for new iommu interface --- diff --git a/arch/arm/mach-rockchip/vcodec_service.c b/arch/arm/mach-rockchip/vcodec_service.c index 5b4bd9dcb295..03f427ec4e11 100755 --- a/arch/arm/mach-rockchip/vcodec_service.c +++ b/arch/arm/mach-rockchip/vcodec_service.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -48,8 +49,7 @@ #endif #ifdef CONFIG_VCODEC_MMU -#include -#include +#include #include #endif @@ -554,7 +554,7 @@ static void vpu_service_power_off(struct vpu_service_info *pservice) #if defined(CONFIG_VCODEC_MMU) if (pservice->mmu_dev) { - iovmm_deactivate(pservice->dev); + rockchip_iovmm_deactivate(pservice->dev); } #endif @@ -630,7 +630,7 @@ static void vpu_service_power_on(struct vpu_service_info *pservice) #if defined(CONFIG_VCODEC_MMU) if (pservice->mmu_dev) { - iovmm_activate(pservice->dev); + rockchip_iovmm_activate(pservice->dev); } #endif } @@ -1442,6 +1442,43 @@ static void simulate_start(struct vpu_service_info *pservice) } #endif +#ifdef CONFIG_VCODEC_MMU +static struct device *rockchip_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); + return NULL; + } + + pd = of_find_device_by_node(dn); + 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 +static inline void platform_set_sysmmu(struct device *iommu, struct device *dev) +{ + dev->archdata.iommu = iommu; +} +#else +static inline void platform_set_sysmmu(struct device *iommu, struct device *dev) +{ +} +#endif +#endif + #if HEVC_TEST_ENABLE static int hevc_test_case0(vpu_service_info *pservice); #endif @@ -1630,7 +1667,7 @@ static int vcodec_probe(struct platform_device *pdev) if (pservice->mmu_dev) { platform_set_sysmmu(pservice->mmu_dev, pservice->dev); - iovmm_activate(pservice->dev); + rockchip_iovmm_activate(pservice->dev); } } #endif diff --git a/drivers/video/rockchip/iep/iep_drv.c b/drivers/video/rockchip/iep/iep_drv.c index f1d0114a201d..4ad9217f60e0 100755 --- a/drivers/video/rockchip/iep/iep_drv.c +++ b/drivers/video/rockchip/iep/iep_drv.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -223,7 +224,7 @@ static void iep_power_on(void) #if defined(CONFIG_IEP_IOMMU) if (iep_service.iommu_dev) { - iovmm_activate(iep_service.iommu_dev); + rockchip_iovmm_activate(iep_service.iommu_dev); } #endif @@ -250,7 +251,7 @@ static void iep_power_off(void) #if defined(CONFIG_IEP_IOMMU) if (iep_service.iommu_dev) { - iovmm_deactivate(iep_service.iommu_dev); + rockchip_iovmm_deactivate(iep_service.iommu_dev); } #endif @@ -790,6 +791,43 @@ static struct miscdevice iep_dev = { .fops = &iep_fops, }; +#ifdef CONFIG_IEP_IOMMU +static struct device *rockchip_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); + return NULL; + } + + pd = of_find_device_by_node(dn); + 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 +static inline void platform_set_sysmmu(struct device *iommu, struct device *dev) +{ + dev->archdata.iommu = iommu; +} +#else +static inline void platform_set_sysmmu(struct device *iommu, struct device *dev) +{ +} +#endif +#endif + #if defined(CONFIG_IEP_IOMMU) extern struct ion_client *rockchip_ion_client_create(const char * name); #endif @@ -903,7 +941,7 @@ static int iep_drv_probe(struct platform_device *pdev) if (mmu_dev) { platform_set_sysmmu(mmu_dev, &pdev->dev); - iovmm_activate(&pdev->dev); + rockchip_iovmm_activate(&pdev->dev); } iep_service.iommu_dev = &pdev->dev; diff --git a/drivers/video/rockchip/iep/iep_drv.h b/drivers/video/rockchip/iep/iep_drv.h index e0e40baccf91..84c02f215d3e 100755 --- a/drivers/video/rockchip/iep/iep_drv.h +++ b/drivers/video/rockchip/iep/iep_drv.h @@ -11,8 +11,7 @@ #ifdef CONFIG_IEP_IOMMU #include -#include -#include +#include #include #endif #include "iep.h"