summaryrefslogtreecommitdiff
path: root/lib_ppc/board.c
diff options
context:
space:
mode:
authorPeter Tyser <ptyser@xes-inc.com>2009-12-15 12:10:47 -0600
committerWolfgang Denk <wd@denx.de>2009-12-15 22:45:51 +0100
commitf9476902b789b0481b9df49af88d6ca94fb16fa0 (patch)
tree12f308423203edbdab0c05e6ccb26fa18580c840 /lib_ppc/board.c
parent3363a34b9eeda9783afcbbed5cdd738926d1f4bf (diff)
downloadu-boot-imx-f9476902b789b0481b9df49af88d6ca94fb16fa0.zip
u-boot-imx-f9476902b789b0481b9df49af88d6ca94fb16fa0.tar.gz
u-boot-imx-f9476902b789b0481b9df49af88d6ca94fb16fa0.tar.bz2
mpc85xx, mpc86xx: Fix gd->cpu pointer after relocation
The gd->cpu pointer is set to an address located in flash when the probecpu() function is called while U-Boot is executing from flash. This pointer needs to be updated to point to an address in RAM after relocation has occurred otherwise Linux may not be able to boot due to "fdt board" crashing if flash has been erased or changed. This bug was introduced in commit a0e2066f392782730f0398095e583c87812d97f2. Signed-off-by: Peter Tyser <ptyser@xes-inc.com> Reported-by: Ed Swarthout <Ed.Swarthout@freescale.com> Tested-by: Kumar Gala <galak@kernel.crashing.org> Tested on MPC8527DS. Tested by: Ed Swarthout <Ed.Swarthout@freescale.com>
Diffstat (limited to 'lib_ppc/board.c')
-rw-r--r--lib_ppc/board.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index 765f97a..dd22f99 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -645,6 +645,14 @@ void board_init_r (gd_t *id, ulong dest_addr)
/* The Malloc area is immediately below the monitor copy in DRAM */
malloc_start = dest_addr - TOTAL_MALLOC_LEN;
+#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
+ /*
+ * The gd->cpu pointer is set to an address in flash before relocation.
+ * We need to update it to point to the same CPU entry in RAM.
+ */
+ gd->cpu += dest_addr - CONFIG_SYS_MONITOR_BASE;
+#endif
+
#ifdef CONFIG_SERIAL_MULTI
serial_initialize();
#endif