pxa_lcd: make driver cache-aware
authorVasily Khoruzhick <anarsoul@gmail.com>
Mon, 21 Mar 2016 01:37:08 +0000 (18:37 -0700)
committerTom Rini <trini@konsulko.com>
Sun, 27 Mar 2016 13:13:00 +0000 (09:13 -0400)
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
drivers/video/pxa_lcd.c

index ba4f8979e2b147cc6112a2c54f1c8dcae8ea8118..d64c25bdc1c169127739d6d4d6232cb3b736e091 100644 (file)
@@ -353,6 +353,9 @@ void lcd_ctrl_init (void *lcdbase)
        pxafb_init(&panel_info);
        pxafb_setup_gpio(&panel_info);
        pxafb_enable_controller(&panel_info);
+
+       /* Enable flushing if we enabled dcache */
+       lcd_set_flush_dcache(1);
 }
 
 /*----------------------------------------------------------------------*/
@@ -565,6 +568,10 @@ static int pxafb_init (vidinfo_t *vid)
        fbi->dmadesc_fblow->fidr  = 0;
        fbi->dmadesc_fblow->ldcmd = BYTES_PER_PANEL;
 
+       flush_dcache_range((u32)fbi->dmadesc_fblow,
+                          (u32)fbi->dmadesc_fblow +
+                          sizeof(*fbi->dmadesc_fblow));
+
        fbi->fdadr1 = (u_long)fbi->dmadesc_fblow; /* only used in dual-panel mode */
 
        fbi->dmadesc_fbhigh->fsadr = fbi->screen;
@@ -580,11 +587,20 @@ static int pxafb_init (vidinfo_t *vid)
                /* assume any mode with <12 bpp is palette driven */
                fbi->dmadesc_palette->fdadr = (u_long)fbi->dmadesc_fbhigh;
                fbi->dmadesc_fbhigh->fdadr = (u_long)fbi->dmadesc_palette;
+               flush_dcache_range((u32)fbi->dmadesc_fbhigh,
+                                  (u32)fbi->dmadesc_fbhigh +
+                                  sizeof(*fbi->dmadesc_fbhigh));
+               flush_dcache_range((u32)fbi->dmadesc_palette,
+                                  (u32)fbi->dmadesc_palette +
+                                  sizeof(*fbi->dmadesc_palette));
                /* flips back and forth between pal and fbhigh */
                fbi->fdadr0 = (u_long)fbi->dmadesc_palette;
        }
        else
        {
+               flush_dcache_range((u32)fbi->dmadesc_fbhigh,
+                                  (u32)fbi->dmadesc_fbhigh +
+                                  sizeof(*fbi->dmadesc_fbhigh));
                /* palette shouldn't be loaded in true-color mode */
                fbi->dmadesc_fbhigh->fdadr = (u_long)fbi->dmadesc_fbhigh;
                fbi->fdadr0 = (u_long)fbi->dmadesc_fbhigh; /* no pal just fbhigh */