]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Blackfin: shutdown video DMA when booting Linux
authorMichael Hennerich <michael.hennerich@analog.com>
Fri, 7 Aug 2009 02:47:54 +0000 (02:47 +0000)
committerMike Frysinger <vapier@gentoo.org>
Wed, 11 Aug 2010 15:29:08 +0000 (11:29 -0400)
In case there is no frame buffer driver present in Linux to hand over the
PPI LCD DMA upon boot, the DMA initiated by u-boot to display the splash
screen runs unattended.  Therefore always stop the video driver in u-boot
before starting Linux.  If people don't want this behavior, then they can
simply stub out the video_stop() function in their board video driver.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/lib/boot.c
board/bf527-ezkit/video.c
board/bf533-stamp/video.c
board/bf548-ezkit/video.c
board/cm-bf548/video.c

index 37aa82a055b0b6af40872134077398fbcadab6f1..768a8826b55c1ac94814f9a56b7033efddf9bd9d 100644 (file)
 extern void swap_to(int device_id);
 #endif
 
+#ifdef CONFIG_VIDEO
+extern void video_stop(void);
+#endif
+
 static char *make_command_line(void)
 {
        char *dest = (char *)CONFIG_LINUX_CMDLINE_ADDR;
@@ -45,6 +49,11 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
        swap_to(FLASH);
 #endif
 
+#ifdef CONFIG_VIDEO
+       /* maybe this should be standardized and moved to bootm ... */
+       video_stop();
+#endif
+
        appl = (int (*)(char *))images->ep;
 
        printf("Starting Kernel at = %p\n", appl);
index 891070b575bc51ca5f29304a349f23811127439f..51bdf020413dd804a69353e9e3b09708ed95e717 100644 (file)
@@ -378,6 +378,17 @@ static void dma_bitblit(void *dst, fastimage_t *logo, int x, int y)
 
 }
 
+void video_stop(void)
+{
+       DisablePPI();
+       DisableDMA();
+       DisableTIMER0();
+       DisableTIMER1();
+#ifdef CONFIG_MK_BF527_EZKIT_REV_2_1
+       lq035q1_control(LQ035_SHUT_CTL, LQ035_SHUT);
+#endif
+}
+
 void video_putc(const char c)
 {
 }
index 939bd35a038fdc09bf6d6d74e82b05884319151c..75b8adca15ac1de7213135db17a76bc6b42f3776 100644 (file)
@@ -150,6 +150,12 @@ static void video_init(char *NTSCFrame)
        bfin_write_PPI_CONTROL(0x0083);
 }
 
+void video_stop(void)
+{
+       bfin_write_PPI_CONTROL(0);
+       bfin_write_DMA0_CONFIG(0);
+}
+
 int drv_video_init(void)
 {
        struct stdio_dev videodev;
index af3d58bdd3cbcec545d7d09020e454177c0e4753..cde877aa0cbb84027b535572b67a092e27876033 100644 (file)
@@ -224,6 +224,12 @@ int video_init(void *dst)
        return 0;
 }
 
+void video_stop(void)
+{
+       DisablePPI();
+       DisableDMA();
+}
+
 static void dma_bitblit(void *dst, fastimage_t *logo, int x, int y)
 {
        if (dcache_status())
index d43f5a1dfc0c03e7f353bb7def1c0e94938fd1d2..c5016974046f483c49615f77190a8531f6257974 100644 (file)
@@ -225,6 +225,12 @@ int video_init(void *dst)
        return 0;
 }
 
+void video_stop(void)
+{
+       DisablePPI();
+       DisableDMA();
+}
+
 static void dma_bitblit(void *dst, fastimage_t *logo, int x, int y)
 {
        if (dcache_status())