add three buf support of fb; enhance gpu's mmu table size to 256k
author杜坤明 <dkm@rock-chips.com>
Fri, 17 Dec 2010 08:56:30 +0000 (16:56 +0800)
committer杜坤明 <dkm@rock-chips.com>
Fri, 17 Dec 2010 08:56:30 +0000 (16:56 +0800)
drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h
drivers/video/rk29_fb.c

index b6f830f62b728529df70b3a3b07ab1cc54756d6f..ede2d686e389a7450b7c815893f7b107d5836859 100644 (file)
     Size of the MMU page table in bytes.  Each 4 bytes can hold 4kB worth of
     virtual data.
 */
-#define gcdMMU_SIZE                 (128 << 10)
+#define gcdMMU_SIZE                 (256 << 10)
 
 /*
     gcdSECURE_USER
index 262239a072e4f8ed3c0f06d1e371990c1c0e2ae5..aa7f488213bdc0bab31e7453bdbb423ccab97833 100755 (executable)
@@ -53,6 +53,7 @@
 
 #include "./display/screen/screen.h"
 
+#define ANDROID_USE_THREE_BUFS  1       //android use three buffers to accelerate UI display in rgb plane
 
 #if 0
        #define fbprintk(msg...)        printk(msg);
@@ -190,6 +191,10 @@ static int win1fb_set_par(struct fb_info *info);
 static DECLARE_WAIT_QUEUE_HEAD(wq);
 static int wq_condition = 0;
 
+#if ANDROID_USE_THREE_BUFS
+static int new_frame_seted = 1;
+#endif
+
 void set_lcd_pin(struct platform_device *pdev, int enable)
 {
        struct rk29fb_info *mach_info = pdev->dev.platform_data;
@@ -1389,6 +1394,14 @@ static int win1fb_set_par(struct fb_info *info)
 
     addr = fix->smem_start + offset;
 
+#if ANDROID_USE_THREE_BUFS
+    if(0==new_frame_seted) {
+        wq_condition = 0;
+        wait_event_interruptible_timeout(wq, wq_condition, HZ/20);
+    }
+    new_frame_seted = 0;
+#endif
+
     LcdMskReg(inf, SYS_CONFIG, m_W1_ENABLE|m_W1_FORMAT, v_W1_ENABLE(1)|v_W1_FORMAT(format));
 
     xpos += (screen->left_margin + screen->hsync_len);
@@ -1459,6 +1472,7 @@ static int win1fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *inf
 
        mcu_refresh(inf);
 
+#if !ANDROID_USE_THREE_BUFS
     // flush end when wq_condition=1 in mcu panel, but not in rgb panel
     if(SCREEN_MCU == inf->cur_screen->type) {
         wait_event_interruptible_timeout(wq, wq_condition, HZ/20);
@@ -1467,6 +1481,7 @@ static int win1fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *inf
         wq_condition = 0;
         wait_event_interruptible_timeout(wq, wq_condition, HZ/20);
     }
+#endif
 
     return 0;
 }
@@ -1601,6 +1616,10 @@ static irqreturn_t rk29fb_irq(int irq, void *dev_id)
         }
        }
 
+#if ANDROID_USE_THREE_BUFS
+    new_frame_seted = 1;
+#endif
+
        wq_condition = 1;
        wake_up_interruptible(&wq);