camsys_drv: v0.0x17.0
authorzyc <zyc@rock-chips.com>
Fri, 19 Sep 2014 08:08:35 +0000 (16:08 +0800)
committerzyc <zyc@rock-chips.com>
Fri, 19 Sep 2014 08:08:35 +0000 (16:08 +0800)
arch/arm/boot/dts/rk3288.dtsi
drivers/media/video/rk_camsys/camsys_drv.c
drivers/media/video/rk_camsys/camsys_internal.h
drivers/media/video/rk_camsys/camsys_marvin.c

index c26b49c13b495a329ddd483ef2c98a3961550725..f4e71ae5325741d98ba51a208bdc339a092120aa 100755 (executable)
                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";
        };
 
index 4edcf457b81bace1de54bd7d56db50e61c4f2757..f0a088a69e1f71f7d82ace7196b6e7ed53cb2108 100755 (executable)
@@ -790,8 +790,17 @@ static long camsys_ioctl(struct file *filp,unsigned int cmd, unsigned long arg)
            {
             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;
@@ -1036,7 +1045,6 @@ static int camsys_platform_probe(struct platform_device *pdev){
         goto fail_end;
     }
 
     //map irqs
     irq_id = irq_of_parse_and_map(dev->of_node, 0);
     if (irq_id < 0) {
index 02995906f1f7ce5650433556ee41bddd356e7e20..c0c413b804842d8dc966c25ec162730e670cc11c 100755 (executable)
          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"
index 94d856f774f54c35e42720de401a9b1f2feae535..c6a61d8b7317e048aa638fc52e55f08a34a4f932 100755 (executable)
@@ -237,17 +237,15 @@ static int camsys_mrv_iommu_cb(void *ptr,camsys_sysctrl_t *devctl)
     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");