diff options
author | Wolfgang Denk <wd@pollux.denx.de> | 2005-08-18 11:55:22 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@pollux.denx.de> | 2005-08-18 11:55:22 +0200 |
commit | e8aa824eb29e273b5ffe532e301907997e0da83d (patch) | |
tree | 7d97c1eeb8dc1269a7dd590f6ab657e5c4e683e8 /board | |
parent | 4f562f145a1559fc20fd093c3bce2c3c5e109025 (diff) | |
download | u-boot-imx-e8aa824eb29e273b5ffe532e301907997e0da83d.zip u-boot-imx-e8aa824eb29e273b5ffe532e301907997e0da83d.tar.gz u-boot-imx-e8aa824eb29e273b5ffe532e301907997e0da83d.tar.bz2 |
Fix initialization problem on TQM5200 without SM501
Patch by Martin Krause, 8 Apr. 2005
Diffstat (limited to 'board')
-rw-r--r-- | board/tqm5200/tqm5200.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/board/tqm5200/tqm5200.c b/board/tqm5200/tqm5200.c index 90275ec..dbd78d5 100644 --- a/board/tqm5200/tqm5200.c +++ b/board/tqm5200/tqm5200.c @@ -425,7 +425,7 @@ int last_stage_init (void) * Check for SRAM and SRAM size */ - /* save origianl SRAM content */ + /* save original SRAM content */ save = *(volatile u16 *)CFG_CS2_START; restore = 1; @@ -447,8 +447,7 @@ int last_stage_init (void) *(vu_long *)MPC5XXX_CS2_STOP = 0x0000FFFF; restore = 0; __asm__ volatile ("sync"); - } - else if (*(volatile u16 *)(CFG_CS2_START + (1<<19)) == 0xA5A5) { + } else if (*(volatile u16 *)(CFG_CS2_START + (1<<19)) == 0xA5A5) { /* make sure that we access a mirrored address */ *(volatile u16 *)CFG_CS2_START = 0x1111; __asm__ volatile ("sync"); @@ -461,8 +460,7 @@ int last_stage_init (void) } else puts ("!! possible error in SRAM detection\n"); - } - else { + } else { puts ("SRAM: 1 MB\n"); } /* restore origianl SRAM content */ @@ -497,8 +495,7 @@ int last_stage_init (void) *(vu_long *)MPC5XXX_CS1_STOP = 0x0000FFFF; restore = 0; __asm__ volatile ("sync"); - } - else { + } else { puts ("VGA: SMI501 (Voyager) with 8 MB\n"); } /* restore origianl FB content */ @@ -598,11 +595,46 @@ void video_get_info_str (int line_number, char *info) #endif /* - * Returns SM501 register base address. First thing called in the driver. + * Returns SM501 register base address. First thing called in the + * driver. Checks if SM501 is physically present. */ unsigned int board_video_init (void) { - return SM501_MMIO_BASE; + u16 save, tmp; + int restore, ret; + + /* + * Check for Grafic Controller + */ + + /* save origianl FB content */ + save = *(volatile u16 *)CFG_CS1_START; + restore = 1; + + /* write test pattern to FB memory */ + *(volatile u16 *)CFG_CS1_START = 0xA5A5; + __asm__ volatile ("sync"); + /* + * Put a different pattern on the data lines: otherwise they may float + * long enough to read back what we wrote. + */ + tmp = *(volatile u16 *)CFG_FLASH_BASE; + if (tmp == 0xA5A5) + puts ("!! possible error in grafic controller detection\n"); + + if (*(volatile u16 *)CFG_CS1_START != 0xA5A5) { + /* no grafic controller found */ + restore = 0; + ret = 0; + } else { + ret = SM501_MMIO_BASE; + } + + if (restore) { + *(volatile u16 *)CFG_CS1_START = save; + __asm__ volatile ("sync"); + } + return ret; } /* |