]> git.sur5r.net Git - u-boot/blobdiff - drivers/video/exynos_fb.c
video:cache:fix: Enable dcache flush at LCD subsystem for Exynos based boards
[u-boot] / drivers / video / exynos_fb.c
index 92be4ead36c582e7d0b1d01651780f3f4da33c12..aac74a3c68efc5349685fba8a10ae8f0819e5f0d 100644 (file)
@@ -28,6 +28,7 @@
 #include <asm/arch/clock.h>
 #include <asm/arch/clk.h>
 #include <asm/arch/mipi_dsim.h>
+#include <asm/arch/dp_info.h>
 #include <asm/arch/system.h>
 
 #include "exynos_fb.h"
@@ -44,9 +45,6 @@ short console_row;
 
 static unsigned int panel_width, panel_height;
 
-/* LCD Panel data */
-vidinfo_t panel_info;
-
 static void exynos_lcd_init_mem(void *lcdbase, vidinfo_t *vid)
 {
        unsigned long palette_size;
@@ -65,6 +63,9 @@ static void exynos_lcd_init_mem(void *lcdbase, vidinfo_t *vid)
 static void exynos_lcd_init(vidinfo_t *vid)
 {
        exynos_fimd_lcd_init(vid);
+
+       /* Enable flushing after LCD writes if requested */
+       lcd_set_flush_dcache(1);
 }
 
 static void draw_logo(void)
@@ -72,8 +73,19 @@ static void draw_logo(void)
        int x, y;
        ulong addr;
 
-       x = ((panel_width - panel_info.logo_width) >> 1);
-       y = ((panel_height - panel_info.logo_height) >> 1) - 4;
+       if (panel_width >= panel_info.logo_width) {
+               x = ((panel_width - panel_info.logo_width) >> 1);
+       } else {
+               x = 0;
+               printf("Warning: image width is bigger than display width\n");
+       }
+
+       if (panel_height >= panel_info.logo_height) {
+               y = ((panel_height - panel_info.logo_height) >> 1) - 4;
+       } else {
+               y = 0;
+               printf("Warning: image height is bigger than display height\n");
+       }
 
        addr = panel_info.logo_addr;
        bmp_display(addr, x, y);
@@ -94,6 +106,9 @@ static void lcd_panel_on(vidinfo_t *vid)
 
        udelay(vid->power_on_delay);
 
+       if (vid->dp_enabled)
+               exynos_init_dp();
+
        if (vid->reset_lcd) {
                vid->reset_lcd();
                udelay(vid->reset_delay);
@@ -133,7 +148,6 @@ void lcd_enable(void)
        if (panel_info.logo_on) {
                memset(lcd_base, 0, panel_width * panel_height *
                                (NBITS(panel_info.vl_bpix) >> 3));
-
                draw_logo();
        }