video/rockchip: fix rga driver compile when LPAE
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / rga / rga_drv.c
index d897c8795619c72816e1115f7a934c8393977b66..171b09ad7f1b7095cac1543972688b071e91dbf2 100755 (executable)
@@ -262,7 +262,7 @@ static void rga_dump(void)
 \r
 static inline void rga_queue_power_off_work(void)\r
 {\r
-       queue_delayed_work(system_nrt_wq, &drvdata->power_off_work, RGA_POWER_OFF_DELAY);\r
+       queue_delayed_work(system_wq, &drvdata->power_off_work, RGA_POWER_OFF_DELAY);\r
 }\r
 \r
 /* Caller must hold rga_service.lock */\r
@@ -635,15 +635,13 @@ static void rga_try_set_reg(void)
             rga_reg_from_wait_to_run(reg);
 \r
             #ifdef CONFIG_ARM\r
-            dmac_flush_range(&rga_service.cmd_buff[0], &rga_service.cmd_buff[28]);
-            outer_flush_range(virt_to_phys(&rga_service.cmd_buff[0]),virt_to_phys(&rga_service.cmd_buff[28]));\r
+            dmac_flush_range(&rga_service.cmd_buff[0], &rga_service.cmd_buff[32]);
+            outer_flush_range(virt_to_phys(&rga_service.cmd_buff[0]),virt_to_phys(&rga_service.cmd_buff[32]));\r
             #elif defined(CONFIG_ARM64)\r
-            __dma_flush_range(&rga_service.cmd_buff[0], &rga_service.cmd_buff[28]);\r
+            __dma_flush_range(&rga_service.cmd_buff[0], &rga_service.cmd_buff[32]);\r
             #endif\r
 
-            #if 1 
             rga_soft_reset();
-            #endif
 
             rga_write(0x0, RGA_SYS_CTRL);
             rga_write(0, RGA_MMU_CTRL);
@@ -733,10 +731,13 @@ static void rga_del_running_list_timeout(void)
     while(!list_empty(&rga_service.running))
     {
         reg = list_entry(rga_service.running.next, struct rga_reg, status_link);
-
-        if(reg->MMU_base != NULL)
+        
+        if(reg->MMU_len != 0)
         {
-            kfree(reg->MMU_base);
+            if (rga_mmu_buf.back + reg->MMU_len > 2*rga_mmu_buf.size)
+                rga_mmu_buf.back = reg->MMU_len + rga_mmu_buf.size;
+            else
+                rga_mmu_buf.back += reg->MMU_len;
         }
 
         atomic_sub(1, &reg->session->task_running);
@@ -1348,7 +1349,8 @@ static int __init rga_init(void)
     unsigned long *mmu_buf_virtual;\r
     uint32_t i;\r
     uint32_t *buf_p;\r
-\r
+    uint32_t *buf;
+
     /* malloc pre scale mid buf mmu table */\r
     mmu_buf = kzalloc(1024*8, GFP_KERNEL);\r
     mmu_buf_virtual = kzalloc(1024*2*sizeof(unsigned long), GFP_KERNEL);\r
@@ -1373,7 +1375,12 @@ static int __init rga_init(void)
 \r
     buf_p = kmalloc(1024*256, GFP_KERNEL);\r
     rga_mmu_buf.buf_virtual = buf_p;\r
-    rga_mmu_buf.buf = (uint32_t *)virt_to_phys((void *)((unsigned long)buf_p));\r
+#if (defined(CONFIG_ARM) && defined(CONFIG_ARM_LPAE))
+    buf = (uint32_t *)(uint32_t)virt_to_phys((void *)((unsigned long)buf_p));
+#else
+    buf = (uint32_t *)virt_to_phys((void *)((unsigned long)buf_p));
+#endif
+    rga_mmu_buf.buf = buf;
     rga_mmu_buf.front = 0;\r
     rga_mmu_buf.back = 64*1024;\r
     rga_mmu_buf.size = 64*1024;\r
@@ -1595,7 +1602,7 @@ void rga_test_0(void)
 }\r
 \r
 #endif\r
-module_init(rga_init);\r
+fs_initcall(rga_init);\r
 module_exit(rga_exit);\r
 \r
 /* Module information */\r