From e4d6ab0c2cb8456f80d0ee4e123a34029d5a5c41 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Fri, 11 Mar 2016 22:06:51 -0700 Subject: x86: Allow use of serial soon after relocation At present on x86 machines with use cache-as-RAM, the memory goes away just before board_init_r() is called. This means that serial drivers are no-longer unavailable, until initr_dm() it called, etc. Any attempt to use printf() within this period will cause a hang. To fix this, mark the serial devices as 'unavailable' when it is no-longer available. Bring it back when serial_initialize() is called. This means that the debug UART will be used instead for this period. Signed-off-by: Simon Glass Reviewed-by: Bin Meng --- common/board_f.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'common') diff --git a/common/board_f.c b/common/board_f.c index 622093a391..109025a68d 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -1095,6 +1095,13 @@ void board_init_f_r(void) if (initcall_run_list(init_sequence_f_r)) hang(); + /* + * The pre-relocation drivers may be using memory that has now gone + * away. Mark serial as unavailable - this will fall back to the debug + * UART if available. + */ + gd->flags &= ~GD_FLG_SERIAL_READY; + /* * U-Boot has been copied into SDRAM, the BSS has been cleared etc. * Transfer execution from Flash to RAM by calculating the address -- cgit v1.2.3