diff --git a/cpu/mpc85xx/mp.c b/cpu/mpc85xx/mp.c index d3727b0b2c03f2c5ab8819a944b5a0d1d4f8747f..7b10fba0a64413e906aa02f69227db20585f1986 100644 --- a/cpu/mpc85xx/mp.c +++ b/cpu/mpc85xx/mp.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "mp.h" @@ -177,6 +178,19 @@ static void pq3_mp_up(unsigned long bootpg) out_be32(&gur->devdisr, devdisr); } +void cpu_mp_lmb_reserve(struct lmb *lmb) +{ + u32 bootpg; + + /* if we have 4G or more of memory, put the boot page at 4Gb-4k */ + if ((u64)gd->ram_size > 0xfffff000) + bootpg = 0xfffff000; + else + bootpg = gd->ram_size - 4096; + + lmb_reserve(lmb, bootpg, 4096); +} + void setup_mp(void) { extern ulong __secondary_start_page; diff --git a/cpu/mpc85xx/mp.h b/cpu/mpc85xx/mp.h index b762ee2d76cc27c0672403935a61c41188212025..4329286f1fd8a4986db71b29fb61f2b449064d5b 100644 --- a/cpu/mpc85xx/mp.h +++ b/cpu/mpc85xx/mp.h @@ -4,6 +4,7 @@ ulong get_spin_addr(void); void setup_mp(void); u32 get_my_id(void); +void cpu_mp_lmb_reserve(struct lmb *lmb); #define BOOT_ENTRY_ADDR_UPPER 0 #define BOOT_ENTRY_ADDR_LOWER 1