summaryrefslogtreecommitdiff
path: root/cpu/mpc86xx/fdt.c
diff options
context:
space:
mode:
authorBecky Bruce <becky.bruce@freescale.com>2008-11-03 15:44:01 -0600
committerJon Loeliger <jdl@freescale.com>2008-11-04 10:58:50 -0600
commit1266df887781c779deaf6d05eea2ef90a470cb34 (patch)
treee38395f12d4705cc9afc4c25030e4f837e86279a /cpu/mpc86xx/fdt.c
parentb5431560682d8f318fbc49db87cfe13ab41d2ee4 (diff)
downloadu-boot-imx-1266df887781c779deaf6d05eea2ef90a470cb34.zip
u-boot-imx-1266df887781c779deaf6d05eea2ef90a470cb34.tar.gz
u-boot-imx-1266df887781c779deaf6d05eea2ef90a470cb34.tar.bz2
powerpc: change 86xx SMP boot method
We put the bootpg for the secondary cpus into memory and use BPTR to get to it. This is a step towards converting to the ePAPR boot methodology. Also, the code is written to deal properly with more than 4GB of RAM. Signed-off-by: Becky Bruce <becky.bruce@freescale.com>
Diffstat (limited to 'cpu/mpc86xx/fdt.c')
-rw-r--r--cpu/mpc86xx/fdt.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/cpu/mpc86xx/fdt.c b/cpu/mpc86xx/fdt.c
index 1fef94f5..3adfad9 100644
--- a/cpu/mpc86xx/fdt.c
+++ b/cpu/mpc86xx/fdt.c
@@ -9,9 +9,17 @@
#include <common.h>
#include <libfdt.h>
#include <fdt_support.h>
+#include "mp.h"
+
+DECLARE_GLOBAL_DATA_PTR;
void ft_cpu_setup(void *blob, bd_t *bd)
{
+#if (CONFIG_NUM_CPUS > 1)
+ int off;
+ u32 bootpg;
+#endif
+
do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
"timebase-frequency", bd->bi_busfreq / 4, 1);
do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
@@ -32,4 +40,17 @@ void ft_cpu_setup(void *blob, bd_t *bd)
do_fixup_by_compat_u32(blob, "ns16550",
"clock-frequency", CONFIG_SYS_NS16550_CLK, 1);
#endif
+
+#if (CONFIG_NUM_CPUS > 1)
+ /* if we have 4G or more of memory, put the boot page at 4Gb-1M */
+ if (gd->ram_size > 0xfffff000)
+ bootpg = 0xfff00000;
+ else
+ bootpg = gd->ram_size - (1024 * 1024);
+
+ /* Reserve the boot page so OSes dont use it */
+ off = fdt_add_mem_rsv(blob, bootpg, (u64)4096);
+ if (off < 0)
+ printf("%s: %s\n", __FUNCTION__, fdt_strerror(off));
+#endif
}