summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Hennerich <michael.hennerich@analog.com>2009-08-07 02:47:54 +0000
committerMike Frysinger <vapier@gentoo.org>2010-08-11 11:29:08 -0400
commit5fc564eda7cc99a37fa485b452fdcc1260ee2d4f (patch)
treef512cd78c677807673fa5ebdd789a2e80d3e151d
parent69a2a4d9a5884a6f2d04a551308980d452b9b349 (diff)
downloadu-boot-5fc564eda7cc99a37fa485b452fdcc1260ee2d4f.tar.gz
u-boot-5fc564eda7cc99a37fa485b452fdcc1260ee2d4f.tar.xz
u-boot-5fc564eda7cc99a37fa485b452fdcc1260ee2d4f.zip
Blackfin: shutdown video DMA when booting Linux
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>
-rw-r--r--arch/blackfin/lib/boot.c9
-rw-r--r--board/bf527-ezkit/video.c11
-rw-r--r--board/bf533-stamp/video.c6
-rw-r--r--board/bf548-ezkit/video.c6
-rw-r--r--board/cm-bf548/video.c6
5 files changed, 38 insertions, 0 deletions
diff --git a/arch/blackfin/lib/boot.c b/arch/blackfin/lib/boot.c
index 37aa82a055..768a8826b5 100644
--- a/arch/blackfin/lib/boot.c
+++ b/arch/blackfin/lib/boot.c
@@ -18,6 +18,10 @@
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);
diff --git a/board/bf527-ezkit/video.c b/board/bf527-ezkit/video.c
index 891070b575..51bdf02041 100644
--- a/board/bf527-ezkit/video.c
+++ b/board/bf527-ezkit/video.c
@@ -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)
{
}
diff --git a/board/bf533-stamp/video.c b/board/bf533-stamp/video.c
index 939bd35a03..75b8adca15 100644
--- a/board/bf533-stamp/video.c
+++ b/board/bf533-stamp/video.c
@@ -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;
diff --git a/board/bf548-ezkit/video.c b/board/bf548-ezkit/video.c
index af3d58bdd3..cde877aa0c 100644
--- a/board/bf548-ezkit/video.c
+++ b/board/bf548-ezkit/video.c
@@ -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())
diff --git a/board/cm-bf548/video.c b/board/cm-bf548/video.c
index d43f5a1dfc..c501697404 100644
--- a/board/cm-bf548/video.c
+++ b/board/cm-bf548/video.c
@@ -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())