rockchip,isp,cifphy = <1>;
rockchip,isp,mipiphy1,reg = <0xff968000 0x4000>;
rockchip,gpios = <&gpio7 GPIO_B5 GPIO_ACTIVE_HIGH>;
- rockchip,isp,iommu_enable = <0>;
+ rockchip,isp,iommu_enable = <1>;
status = "okay";
};
{
int iommu_enabled = 0;
#ifdef CONFIG_ROCKCHIP_IOMMU
- //of_property_read_u32(camsys_dev->pdev->dev.of_node, "rockchip,isp,iommu_enable", &iommu_enabled);
- iommu_enabled = 1;
+ struct device_node * vpu_node =NULL;
+ int vpu_iommu_enabled = 0;
+ vpu_node = of_find_compatible_node(NULL,NULL, "vpu_service");
+ if(vpu_node){
+ of_property_read_u32(vpu_node, "iommu_enabled", &vpu_iommu_enabled);
+ of_property_read_u32(camsys_dev->pdev->dev.of_node, "rockchip,isp,iommu_enable", &iommu_enabled);
+ if(iommu_enabled != vpu_iommu_enabled){
+ camsys_err("iommu status not consistent,check the dts file ! isp:%d,vpu:%d",iommu_enabled,vpu_iommu_enabled);
+ return -EFAULT;
+ }
+ }
#endif
if (copy_to_user((void __user *)arg,(void*)&iommu_enabled, sizeof(iommu_enabled)))
return -EFAULT;
goto fail_end;
}
-
//map irqs
irq_id = irq_of_parse_and_map(dev->of_node, 0);
if (irq_id < 0) {
1) check extdev name when dev_id has been registered;
*v0.0x16.0:
1) enable or disable IOMMU just depending on CONFIG_ROCKCHIP_IOMMU.
+*v0.0x17.0:
+ 1) isp iommu status depend on vpu iommu status.
*/
-#define CAMSYS_DRIVER_VERSION KERNEL_VERSION(0,0x16,0)
+#define CAMSYS_DRIVER_VERSION KERNEL_VERSION(0,0x17,0)
#define CAMSYS_PLATFORM_DRV_NAME "RockChip-CamSys"
struct ion_client *client = NULL;
struct ion_handle *handle = NULL;
camsys_iommu_t *iommu = NULL;
- int ret = 0;
+ int ret = 0,iommu_enabled = 0;
camsys_dev_t * camsys_dev = (camsys_dev_t *)ptr;
-#if 0
of_property_read_u32(camsys_dev->pdev->dev.of_node, "rockchip,isp,iommu_enable", &iommu_enabled);
if(iommu_enabled != 1){
camsys_err("isp iommu have not been enabled!\n");
ret = -1;
goto iommu_end;
}
-#endif
iommu_dev = rockchip_get_sysmmu_device_by_compatible(ISP_IOMMU_COMPATIBLE_NAME);
if(!iommu_dev){
camsys_err("get iommu device erro!\n");