summaryrefslogtreecommitdiff
path: root/arch/powerpc/lib
diff options
context:
space:
mode:
authorBernhard Kaindl <bernhard.kaindl@thalesgroup.com>2011-10-16 00:07:08 +0000
committerWolfgang Denk <wd@denx.de>2011-10-23 23:34:19 +0200
commit9d256b67f6978c934e737e42245c150e8837fafb (patch)
treeea73b8dcde993de908a69d312d10a9d475935fef /arch/powerpc/lib
parent6dc809f40721e5424367b09c8dbfe07da50b8ca9 (diff)
powerpc/lib/board.c: Call run_post(POST_ROM) before relocating
The call to run_post(POST_ROM) which can run the POST memory test is currently called too late when gd has already been copied to DRAM. This results in failure to boot Linux after a POST_ROM memory test tested all RAM while gd was already relocated to DRAM due to gd being overwritten by the POST_ROM memory test. Support this by moving the call to run_post(POST_ROM) to run earlier, before U-Boot has started to move data to DRAM (from late board_init_f to early board_init_f) where DRAM is initialized, but not used yet. This allows that an POST memory test can test the whole DRAM, including the area where the board info struct is located. Signed-off-by: Bernhard Kaindl <bernhard.kaindl@thalesgroup.com> Cc: Pieter Voorthuijsen <pieter.voorthuijsen@prodrive.nl>
Diffstat (limited to 'arch/powerpc/lib')
-rw-r--r--arch/powerpc/lib/board.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c
index f7325c8bfd..6cb0ed6344 100644
--- a/arch/powerpc/lib/board.c
+++ b/arch/powerpc/lib/board.c
@@ -390,6 +390,13 @@ void board_init_f (ulong bootflag)
}
}
+#ifdef CONFIG_POST
+ post_bootmode_init();
+ post_run(NULL, POST_ROM | post_bootmode_get(0));
+#endif
+
+ WATCHDOG_RESET();
+
/*
* Now that we have DRAM mapped and working, we can
* relocate the code and continue running from DRAM.
@@ -596,13 +603,6 @@ void board_init_f (ulong bootflag)
WATCHDOG_RESET ();
-#ifdef CONFIG_POST
- post_bootmode_init();
- post_run (NULL, POST_ROM | post_bootmode_get(0));
-#endif
-
- WATCHDOG_RESET();
-
gd->relocaddr = addr; /* Record relocation address, useful for debug */
memcpy (id, (void *)gd, sizeof (gd_t));