From e7998ffc6ff2d521036a247865abaeaa4b70bb8e Mon Sep 17 00:00:00 2001 From: zsq Date: Tue, 18 Jun 2013 09:37:07 +0800 Subject: [PATCH] fix async flag error --- drivers/video/rockchip/rga/rga_drv.c | 167 +++++++++++++-------------- 1 file changed, 81 insertions(+), 86 deletions(-) diff --git a/drivers/video/rockchip/rga/rga_drv.c b/drivers/video/rockchip/rga/rga_drv.c index 9c744e32eb9b..0fb9fc4d852c 100755 --- a/drivers/video/rockchip/rga/rga_drv.c +++ b/drivers/video/rockchip/rga/rga_drv.c @@ -72,7 +72,7 @@ #define DRIVER_DESC "RGA Device Driver" #define DRIVER_NAME "rga" -#define RGA_VERSION "1.002" +#define RGA_VERSION "1.003" ktime_t rga_start; ktime_t rga_end; @@ -187,6 +187,8 @@ static void rga_dump(void) /* Dump waiting list info */ if (!list_empty(&rga_service.waiting)) { + list_head *next; + next = &rga_service.waiting; printk("rga_service dump waiting list\n"); @@ -207,6 +209,8 @@ static void rga_dump(void) { printk("rga_service dump running list\n"); + list_head *next; + next = &rga_service.running; do { @@ -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); if (unlikely(ret_timeout < 0)) { - pr_err("flush pid %d wait task ret %d\n", session->pid, ret); + //pr_err("flush pid %d wait task ret %d\n", session->pid, ret); mutex_lock(&rga_service.lock); rga_del_running_list(); mutex_unlock(&rga_service.lock); ret = ret_timeout; } else if (0 == ret_timeout) { - pr_err("flush pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running)); - printk("bus = %.8x\n", rga_read(RGA_INT)); + //pr_err("flush pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running)); + //printk("bus = %.8x\n", rga_read(RGA_INT)); mutex_lock(&rga_service.lock); rga_del_running_list_timeout(); rga_try_set_reg(); @@ -707,7 +711,7 @@ static void rga_del_running_list_timeout(void) atomic_sub(1, ®->session->task_running); atomic_sub(1, &rga_service.total_running); - printk("RGA soft reset for timeout process\n"); + //printk("RGA soft reset for timeout process\n"); rga_soft_reset(); @@ -865,7 +869,7 @@ static int rga_blit_async(rga_session *session, struct rga_req *req) printk("*** rga_blit_async proc ***\n"); print_info(req); #endif - + atomic_set(&session->done, 0); ret = rga_blit(session, req); return ret; @@ -893,7 +897,7 @@ static int rga_blit_sync(rga_session *session, struct rga_req *req) if (unlikely(ret_timeout< 0)) { - pr_err("sync pid %d wait task ret %d\n", session->pid, ret_timeout); + //pr_err("sync pid %d wait task ret %d\n", session->pid, ret_timeout); mutex_lock(&rga_service.lock); rga_del_running_list(); mutex_unlock(&rga_service.lock); @@ -901,7 +905,7 @@ static int rga_blit_sync(rga_session *session, struct rga_req *req) } else if (0 == ret_timeout) { - pr_err("sync pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running)); + //pr_err("sync pid %d wait %d task done timeout\n", session->pid, atomic_read(&session->task_running)); mutex_lock(&rga_service.lock); rga_del_running_list_timeout(); rga_try_set_reg(); @@ -1324,8 +1328,9 @@ EXPORT_SYMBOL(rk_get_fb); extern void rk_direct_fb_show(struct fb_info * fbi); EXPORT_SYMBOL(rk_direct_fb_show); -unsigned int src_buf[1920*1080 * 2]; -unsigned int dst_buf[1920*1080 * 2]; +unsigned int src_buf[1920*1080]; +unsigned int dst_buf[1920*1080]; +//unsigned int tmp_buf[1920*1080 * 2]; void rga_test_0(void) { @@ -1356,10 +1361,10 @@ void rga_test_0(void) src = src_buf; dst = dst_buf; - memset(src_buf, 0x55, 800*4*300); + memset(src_buf, 0x80, 1024*600*4); - dmac_flush_range(&src_buf[0], &src_buf[800*600]); - outer_flush_range(virt_to_phys(&src_buf[0]),virt_to_phys(&src_buf[800*600])); + dmac_flush_range(&src_buf[0], &src_buf[1024*600]); + outer_flush_range(virt_to_phys(&src_buf[0]),virt_to_phys(&src_buf[1024*600])); #if 0 @@ -1371,8 +1376,8 @@ void rga_test_0(void) #endif dst0 = &dst_buf[0]; - dst1 = &dst_buf[800*600*4]; - dst2 = &dst_buf[800*600*4*2]; + //dst1 = &dst_buf[1280*800*4]; + //dst2 = &dst_buf[1280*800*4*2]; i = j = 0; @@ -1380,98 +1385,88 @@ void rga_test_0(void) printk("************ RGA_TEST ************\n"); printk("********************************\n\n"); - while( j < 1000) - { - req.src.act_w = 800; - req.src.act_h = 600; - - req.src.vir_w = 800; - req.src.vir_h = 600; - req.src.yrgb_addr = (uint32_t)virt_to_phys(src); - req.src.uv_addr = (uint32_t)(req.src.yrgb_addr + 1080*1920); - req.src.v_addr = (uint32_t)virt_to_phys(src); - req.src.format = RK_FORMAT_RGBA_8888; - - req.dst.act_w = 800; - req.dst.act_h = 600; - - req.dst.vir_w = 800; - req.dst.vir_h = 600; - req.dst.x_offset = 0; - req.dst.y_offset = 0; - - if((i&3) == 0) - dst = dst0; - else if ((i&3) == 1) - dst = dst1; - else - dst = dst2; + req.src.act_w = 1024; + req.src.act_h = 600; - req.dst.yrgb_addr = ((uint32_t)virt_to_phys(dst)); + req.src.vir_w = 1024; + req.src.vir_h = 600; + req.src.yrgb_addr = (uint32_t)virt_to_phys(src); + req.src.uv_addr = (uint32_t)(req.src.yrgb_addr + 1080*1920); + req.src.v_addr = (uint32_t)virt_to_phys(src); + req.src.format = RK_FORMAT_RGBA_8888; - //req.dst.format = RK_FORMAT_RGB_565; + req.dst.act_w = 600; + req.dst.act_h = 352; - req.clip.xmin = 0; - req.clip.xmax = 799; - req.clip.ymin = 0; - req.clip.ymax = 599; + req.dst.vir_w = 1280; + req.dst.vir_h = 800; + req.dst.x_offset = 600; + req.dst.y_offset = 0; - //req.render_mode = color_fill_mode; - //req.fg_color = 0x80ffffff; + dst = dst0; - //req.rotate_mode = 1; - //req.scale_mode = 2; + req.dst.yrgb_addr = ((uint32_t)virt_to_phys(dst)); - //req.alpha_rop_flag = 0; - //req.alpha_rop_mode = 0x19; - //req.PD_mode = 3; + //req.dst.format = RK_FORMAT_RGB_565; - //req.sina = 0; - //req.cosa = 65536; + req.clip.xmin = 0; + req.clip.xmax = 1279; + req.clip.ymin = 0; + req.clip.ymax = 799; - //req.mmu_info.mmu_flag = 0x21; - //req.mmu_info.mmu_en = 1; + //req.render_mode = color_fill_mode; + //req.fg_color = 0x80ffffff; - printk("src = %.8x\n", req.src.yrgb_addr); - printk("src = %.8x\n", req.src.uv_addr); - printk("dst = %.8x\n", req.dst.yrgb_addr); + req.rotate_mode = 1; + //req.scale_mode = 2; - rga_blit_sync(&session, &req); + //req.alpha_rop_flag = 0; + //req.alpha_rop_mode = 0x19; + //req.PD_mode = 3; - #if 1 - fb->var.bits_per_pixel = 32; + req.sina = 65536; + req.cosa = 0; - fb->var.xres = 800; - fb->var.yres = 600; + //req.mmu_info.mmu_flag = 0x21; + //req.mmu_info.mmu_en = 1; - fb->var.red.length = 8; - fb->var.red.offset = 0; - fb->var.red.msb_right = 0; + //printk("src = %.8x\n", req.src.yrgb_addr); + //printk("src = %.8x\n", req.src.uv_addr); + //printk("dst = %.8x\n", req.dst.yrgb_addr); - fb->var.green.length = 8; - fb->var.green.offset = 8; - fb->var.green.msb_right = 0; - fb->var.blue.length = 8; + rga_blit_sync(&session, &req); - fb->var.blue.offset = 16; - fb->var.blue.msb_right = 0; + #if 1 + fb->var.bits_per_pixel = 32; - fb->var.transp.length = 8; - fb->var.transp.offset = 24; - fb->var.transp.msb_right = 0; + fb->var.xres = 1280; + fb->var.yres = 800; - fb->var.nonstd &= (~0xff); - fb->var.nonstd |= 1; + fb->var.red.length = 8; + fb->var.red.offset = 0; + fb->var.red.msb_right = 0; - fb->fix.smem_start = virt_to_phys(dst); + fb->var.green.length = 8; + fb->var.green.offset = 8; + fb->var.green.msb_right = 0; - rk_direct_fb_show(fb); + fb->var.blue.length = 8; - i++; - j++; - #endif - } + fb->var.blue.offset = 16; + fb->var.blue.msb_right = 0; + + fb->var.transp.length = 8; + fb->var.transp.offset = 24; + fb->var.transp.msb_right = 0; + + fb->var.nonstd &= (~0xff); + fb->var.nonstd |= 1; + + fb->fix.smem_start = virt_to_phys(dst); + + rk_direct_fb_show(fb); + #endif } -- 2.34.1