splash screen handling in u-boot when booting an OS
some Blackfin boards support CONFIG_VIDEO so there is a splash screen while u- boot is running. however, we dont always boot a Linux image with a video driver enabled. so sometimes a few weird things can occur due to the DMA always running in the background (such as attempting to suspend to RAM).
there doesnt seem to be any support with CONFIG_VIDEO though for turning things off. i can also see cases though where people wouldnt want to turn the video off until the OS is up and running and ready to take over the display ("flicker free" and what not). but on our Blackfin development boards, we arent concerned with that by default.
so should i extend the CONFIG_VIDEO interface to include an option to shut down the video before booting an OS ? similar to the call to usb_stop() in cmd_bootm.c.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100725/e8964368/attachment.pgp
PATCH 1/1 Blackfin: shutdown video DMA when booting Linux
From: Michael Hennerich <[email protected]>
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.
--- arch/blackfin/lib/boot.c | 9 +++++++++ board/bf527-ezkit/video.c | 11 +++++++++++ board/bf533-stamp/video.c | 6 ++++++ board/bf548-ezkit/video.c | 6 ++++++ board/cm-bf548/video.c | 6 ++++++ 5 files changed, 38 insertions(+), 0 deletions(-)
arch/blackfin/lib/boot.c +9 -0
@@ -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 *imaswap_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);
board/bf527-ezkit/video.c +11 -0
@@ -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) { }
board/bf533-stamp/video.c +6 -0
@@ -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;
board/bf548-ezkit/video.c +6 -0
@@ -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 ())
board/cm-bf548/video.c +6 -0
@@ -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 ())
Signature · 1 line
1.7.2