\r
#if defined(CONFIG_IEP_IOMMU)\r
INIT_LIST_HEAD(®->mem_region_list); \r
-#endif \r
+#endif\r
\r
//write config\r
iep_config_src_size(iep_msg);\r
#endif\r
\r
#if defined(CONFIG_IEP_IOMMU)\r
- if (0 > iep_reg_address_translate(&iep_service, reg)) {\r
- IEP_ERR("error: translate reg address failed\n");\r
- kfree(reg);\r
- return;\r
+ if (iep_service.iommu_dev) {\r
+ if (0 > iep_reg_address_translate(&iep_service, reg)) {\r
+ IEP_ERR("error: translate reg address failed\n");\r
+ kfree(reg);\r
+ return;\r
+ }\r
}\r
#endif\r
\r
#if defined(CONFIG_IEP_IOMMU)\r
struct iep_mem_region *mem_region = NULL, *n;\r
// release memory region attach to this registers table.\r
- list_for_each_entry_safe(mem_region, n, ®->mem_region_list, reg_lnk) {\r
- ion_unmap_iommu(iep_service.iommu_dev, iep_service.ion_client, mem_region->hdl);\r
- ion_free(iep_service.ion_client, mem_region->hdl);\r
- list_del_init(&mem_region->reg_lnk);\r
- kfree(mem_region);\r
+ if (iep_service.iommu_dev) {\r
+ list_for_each_entry_safe(mem_region, n, ®->mem_region_list, reg_lnk) {\r
+ ion_unmap_iommu(iep_service.iommu_dev, iep_service.ion_client, mem_region->hdl);\r
+ ion_free(iep_service.ion_client, mem_region->hdl);\r
+ list_del_init(&mem_region->reg_lnk);\r
+ kfree(mem_region);\r
+ }\r
}\r
#endif \r
list_del_init(®->session_link);\r
int ret = 0;\r
struct resource *res = NULL;\r
#if defined(CONFIG_IEP_IOMMU)\r
+ u32 iommu_en = 0;\r
struct device *mmu_dev = NULL;\r
+ struct device_node *np = pdev->dev.of_node;\r
+ of_property_read_u32(np, "iommu_enabled", &iommu_en);\r
#endif\r
\r
data = (struct iep_drvdata*)devm_kzalloc(&pdev->dev, sizeof(struct iep_drvdata), GFP_KERNEL);\r
\r
#if defined(CONFIG_IEP_IOMMU)\r
iep_service.iommu_dev = NULL;\r
- iep_power_on();\r
- iep_service.ion_client = rockchip_ion_client_create("iep");\r
- if (IS_ERR(iep_service.ion_client)) {\r
- IEP_ERR("failed to create ion client for vcodec");\r
- return PTR_ERR(iep_service.ion_client);\r
- } else {\r
- IEP_INFO("iep ion client create success!\n");\r
- }\r
- \r
- mmu_dev = rockchip_get_sysmmu_device_by_compatible("iommu,iep_mmu");\r
- \r
- if (mmu_dev) {\r
- platform_set_sysmmu(mmu_dev, &pdev->dev);\r
- iovmm_activate(&pdev->dev);\r
+ if (iommu_en) {\r
+ iep_power_on();\r
+ iep_service.ion_client = rockchip_ion_client_create("iep");\r
+ if (IS_ERR(iep_service.ion_client)) {\r
+ IEP_ERR("failed to create ion client for vcodec");\r
+ return PTR_ERR(iep_service.ion_client);\r
+ } else {\r
+ IEP_INFO("iep ion client create success!\n");\r
+ }\r
+\r
+ mmu_dev = rockchip_get_sysmmu_device_by_compatible("iommu,iep_mmu");\r
+ \r
+ if (mmu_dev) {\r
+ platform_set_sysmmu(mmu_dev, &pdev->dev);\r
+ iovmm_activate(&pdev->dev);\r
+ }\r
+\r
+ iep_service.iommu_dev = &pdev->dev;\r
+ iep_power_off();\r
}\r
- \r
- iep_service.iommu_dev = &pdev->dev;\r
- iep_power_off();\r
#endif\r
\r
IEP_INFO("IEP Driver loaded succesfully\n");\r