fix async flag error
authorzsq <zsq@rock-chips.com>
Tue, 18 Jun 2013 01:37:07 +0000 (09:37 +0800)
committerzsq <zsq@rock-chips.com>
Tue, 18 Jun 2013 01:37:07 +0000 (09:37 +0800)
drivers/video/rockchip/rga/rga_drv.c

index 9c744e32eb9bf140aade8f02931805cf7037d168..0fb9fc4d852ced3fd07d099cc999241d22c40281 100755 (executable)
@@ -72,7 +72,7 @@
 #define DRIVER_DESC            "RGA Device Driver"\r
 #define DRIVER_NAME            "rga"\r
 \r
-#define RGA_VERSION   "1.002"\r
+#define RGA_VERSION   "1.003"\r
 \r
 ktime_t rga_start;\r
 ktime_t rga_end;\r
@@ -187,6 +187,8 @@ static void rga_dump(void)
     /* Dump waiting list info */\r
     if (!list_empty(&rga_service.waiting))\r
     {\r
+        list_head      *next;\r
+\r
         next = &rga_service.waiting;\r
 \r
         printk("rga_service dump waiting list\n");\r
@@ -207,6 +209,8 @@ static void rga_dump(void)
     {\r
         printk("rga_service dump running list\n");\r
 \r
+        list_head      *next;\r
+\r
         next = &rga_service.running;\r
         do\r
         {\r
@@ -311,14 +315,14 @@ static int rga_flush(rga_session *session, unsigned long arg)
     ret_timeout = wait_event_timeout(session->wait, atomic_read(&session->done), RGA_TIMEOUT_DELAY);\r
 \r
        if (unlikely(ret_timeout < 0)) {\r
-               pr_err("flush pid %d wait task ret %d\n", session->pid, ret);\r
+               //pr_err("flush pid %d wait task ret %d\n", session->pid, ret);\r
         mutex_lock(&rga_service.lock);\r
         rga_del_running_list();\r
         mutex_unlock(&rga_service.lock);\r
         ret = ret_timeout;\r
        } else if (0 == ret_timeout) {\r
-               pr_err("flush pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running));\r
-        printk("bus  = %.8x\n", rga_read(RGA_INT));\r
+               //pr_err("flush pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running));\r
+        //printk("bus  = %.8x\n", rga_read(RGA_INT));\r
         mutex_lock(&rga_service.lock);\r
         rga_del_running_list_timeout();\r
         rga_try_set_reg();\r
@@ -707,7 +711,7 @@ static void rga_del_running_list_timeout(void)
         atomic_sub(1, &reg->session->task_running);\r
         atomic_sub(1, &rga_service.total_running);\r
 \r
-        printk("RGA soft reset for timeout process\n");\r
+        //printk("RGA soft reset for timeout process\n");\r
         rga_soft_reset();\r
 \r
 \r
@@ -865,7 +869,7 @@ static int rga_blit_async(rga_session *session, struct rga_req *req)
     printk("*** rga_blit_async proc ***\n");\r
     print_info(req);\r
     #endif\r
-\r
+    atomic_set(&session->done, 0);\r
     ret = rga_blit(session, req);\r
 \r
     return ret;\r
@@ -893,7 +897,7 @@ static int rga_blit_sync(rga_session *session, struct rga_req *req)
 \r
     if (unlikely(ret_timeout< 0))\r
     {\r
-               pr_err("sync pid %d wait task ret %d\n", session->pid, ret_timeout);\r
+               //pr_err("sync pid %d wait task ret %d\n", session->pid, ret_timeout);\r
         mutex_lock(&rga_service.lock);\r
         rga_del_running_list();\r
         mutex_unlock(&rga_service.lock);\r
@@ -901,7 +905,7 @@ static int rga_blit_sync(rga_session *session, struct rga_req *req)
        }\r
     else if (0 == ret_timeout)\r
     {\r
-               pr_err("sync pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running));\r
+               //pr_err("sync pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running));\r
         mutex_lock(&rga_service.lock);\r
         rga_del_running_list_timeout();\r
         rga_try_set_reg();\r
@@ -1324,8 +1328,9 @@ EXPORT_SYMBOL(rk_get_fb);
 extern void rk_direct_fb_show(struct fb_info * fbi);\r
 EXPORT_SYMBOL(rk_direct_fb_show);\r
 \r
-unsigned int src_buf[1920*1080 * 2];\r
-unsigned int dst_buf[1920*1080 * 2];\r
+unsigned int src_buf[1920*1080];\r
+unsigned int dst_buf[1920*1080];\r
+//unsigned int tmp_buf[1920*1080 * 2];\r
 \r
 void rga_test_0(void)\r
 {\r
@@ -1356,10 +1361,10 @@ void rga_test_0(void)
     src = src_buf;\r
     dst = dst_buf;\r
 \r
-    memset(src_buf, 0x55, 800*4*300);\r
+    memset(src_buf, 0x80, 1024*600*4);\r
 \r
-    dmac_flush_range(&src_buf[0], &src_buf[800*600]);\r
-    outer_flush_range(virt_to_phys(&src_buf[0]),virt_to_phys(&src_buf[800*600]));\r
+    dmac_flush_range(&src_buf[0], &src_buf[1024*600]);\r
+    outer_flush_range(virt_to_phys(&src_buf[0]),virt_to_phys(&src_buf[1024*600]));\r
 \r
 \r
     #if 0\r
@@ -1371,8 +1376,8 @@ void rga_test_0(void)
     #endif\r
 \r
     dst0 = &dst_buf[0];\r
-    dst1 = &dst_buf[800*600*4];\r
-    dst2 = &dst_buf[800*600*4*2];\r
+    //dst1 = &dst_buf[1280*800*4];\r
+    //dst2 = &dst_buf[1280*800*4*2];\r
 \r
     i = j = 0;\r
 \r
@@ -1380,98 +1385,88 @@ void rga_test_0(void)
     printk("************ RGA_TEST ************\n");\r
     printk("********************************\n\n");\r
 \r
-    while( j < 1000)\r
-    {\r
-        req.src.act_w = 800;\r
-        req.src.act_h = 600;\r
-\r
-        req.src.vir_w = 800;\r
-        req.src.vir_h = 600;\r
-        req.src.yrgb_addr = (uint32_t)virt_to_phys(src);\r
-        req.src.uv_addr = (uint32_t)(req.src.yrgb_addr + 1080*1920);\r
-        req.src.v_addr = (uint32_t)virt_to_phys(src);\r
-        req.src.format = RK_FORMAT_RGBA_8888;\r
-\r
-        req.dst.act_w = 800;\r
-        req.dst.act_h = 600;\r
-\r
-        req.dst.vir_w = 800;\r
-        req.dst.vir_h = 600;\r
-        req.dst.x_offset = 0;\r
-        req.dst.y_offset = 0;\r
-\r
-        if((i&3) == 0)\r
-            dst = dst0;\r
-        else if ((i&3) == 1)\r
-            dst = dst1;\r
-        else\r
-            dst = dst2;\r
+    req.src.act_w = 1024;\r
+    req.src.act_h = 600;\r
 \r
-        req.dst.yrgb_addr = ((uint32_t)virt_to_phys(dst));\r
+    req.src.vir_w = 1024;\r
+    req.src.vir_h = 600;\r
+    req.src.yrgb_addr = (uint32_t)virt_to_phys(src);\r
+    req.src.uv_addr = (uint32_t)(req.src.yrgb_addr + 1080*1920);\r
+    req.src.v_addr = (uint32_t)virt_to_phys(src);\r
+    req.src.format = RK_FORMAT_RGBA_8888;\r
 \r
-        //req.dst.format = RK_FORMAT_RGB_565;\r
+    req.dst.act_w = 600;\r
+    req.dst.act_h = 352;\r
 \r
-        req.clip.xmin = 0;\r
-        req.clip.xmax = 799;\r
-        req.clip.ymin = 0;\r
-        req.clip.ymax = 599;\r
+    req.dst.vir_w = 1280;\r
+    req.dst.vir_h = 800;\r
+    req.dst.x_offset = 600;\r
+    req.dst.y_offset = 0;\r
 \r
-        //req.render_mode = color_fill_mode;\r
-        //req.fg_color = 0x80ffffff;\r
+    dst = dst0;\r
 \r
-        //req.rotate_mode = 1;\r
-        //req.scale_mode = 2;\r
+    req.dst.yrgb_addr = ((uint32_t)virt_to_phys(dst));\r
 \r
-        //req.alpha_rop_flag = 0;\r
-        //req.alpha_rop_mode = 0x19;\r
-        //req.PD_mode = 3;\r
+    //req.dst.format = RK_FORMAT_RGB_565;\r
 \r
-        //req.sina = 0;\r
-        //req.cosa = 65536;\r
+    req.clip.xmin = 0;\r
+    req.clip.xmax = 1279;\r
+    req.clip.ymin = 0;\r
+    req.clip.ymax = 799;\r
 \r
-        //req.mmu_info.mmu_flag = 0x21;\r
-        //req.mmu_info.mmu_en = 1;\r
+    //req.render_mode = color_fill_mode;\r
+    //req.fg_color = 0x80ffffff;\r
 \r
-        printk("src = %.8x\n", req.src.yrgb_addr);\r
-        printk("src = %.8x\n", req.src.uv_addr);\r
-        printk("dst = %.8x\n", req.dst.yrgb_addr);\r
+    req.rotate_mode = 1;\r
+    //req.scale_mode = 2;\r
 \r
-        rga_blit_sync(&session, &req);\r
+    //req.alpha_rop_flag = 0;\r
+    //req.alpha_rop_mode = 0x19;\r
+    //req.PD_mode = 3;\r
 \r
-        #if 1\r
-        fb->var.bits_per_pixel = 32;\r
+    req.sina = 65536;\r
+    req.cosa = 0;\r
 \r
-        fb->var.xres = 800;\r
-        fb->var.yres = 600;\r
+    //req.mmu_info.mmu_flag = 0x21;\r
+    //req.mmu_info.mmu_en = 1;\r
 \r
-        fb->var.red.length = 8;\r
-        fb->var.red.offset = 0;\r
-        fb->var.red.msb_right = 0;\r
+    //printk("src = %.8x\n", req.src.yrgb_addr);\r
+    //printk("src = %.8x\n", req.src.uv_addr);\r
+    //printk("dst = %.8x\n", req.dst.yrgb_addr);\r
 \r
-        fb->var.green.length = 8;\r
-        fb->var.green.offset = 8;\r
-        fb->var.green.msb_right = 0;\r
 \r
-        fb->var.blue.length = 8;\r
+    rga_blit_sync(&session, &req);\r
 \r
-        fb->var.blue.offset = 16;\r
-        fb->var.blue.msb_right = 0;\r
+    #if 1\r
+    fb->var.bits_per_pixel = 32;\r
 \r
-        fb->var.transp.length = 8;\r
-        fb->var.transp.offset = 24;\r
-        fb->var.transp.msb_right = 0;\r
+    fb->var.xres = 1280;\r
+    fb->var.yres = 800;\r
 \r
-        fb->var.nonstd &= (~0xff);\r
-        fb->var.nonstd |= 1;\r
+    fb->var.red.length = 8;\r
+    fb->var.red.offset = 0;\r
+    fb->var.red.msb_right = 0;\r
 \r
-        fb->fix.smem_start = virt_to_phys(dst);\r
+    fb->var.green.length = 8;\r
+    fb->var.green.offset = 8;\r
+    fb->var.green.msb_right = 0;\r
 \r
-        rk_direct_fb_show(fb);\r
+    fb->var.blue.length = 8;\r
 \r
-        i++;\r
-        j++;\r
-        #endif\r
-    }\r
+    fb->var.blue.offset = 16;\r
+    fb->var.blue.msb_right = 0;\r
+\r
+    fb->var.transp.length = 8;\r
+    fb->var.transp.offset = 24;\r
+    fb->var.transp.msb_right = 0;\r
+\r
+    fb->var.nonstd &= (~0xff);\r
+    fb->var.nonstd |= 1;\r
+\r
+    fb->fix.smem_start = virt_to_phys(dst);\r
+\r
+    rk_direct_fb_show(fb);\r
+    #endif\r
 \r
 }\r
 \r