diff options
author | Michael Hennerich <michael.hennerich@analog.com> | 2009-08-07 02:47:54 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2010-08-11 11:29:08 -0400 |
commit | 5fc564eda7cc99a37fa485b452fdcc1260ee2d4f (patch) | |
tree | f512cd78c677807673fa5ebdd789a2e80d3e151d | |
parent | 69a2a4d9a5884a6f2d04a551308980d452b9b349 (diff) | |
download | u-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.c | 9 | ||||
-rw-r--r-- | board/bf527-ezkit/video.c | 11 | ||||
-rw-r--r-- | board/bf533-stamp/video.c | 6 | ||||
-rw-r--r-- | board/bf548-ezkit/video.c | 6 | ||||
-rw-r--r-- | board/cm-bf548/video.c | 6 |
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()) |