|
@@ -34,9 +34,29 @@
|
|
|
|
|
|
BSS_STACK(4096);
|
|
|
|
|
|
+static u32 ibm4xx_memstart;
|
|
|
+
|
|
|
static void iss_4xx_fixups(void)
|
|
|
{
|
|
|
- ibm4xx_sdram_fixup_memsize();
|
|
|
+ void *memory;
|
|
|
+ u32 reg[3];
|
|
|
+
|
|
|
+ memory = finddevice("/memory");
|
|
|
+ if (!memory)
|
|
|
+ fatal("Can't find memory node\n");
|
|
|
+ /* This assumes #address-cells = 2, #size-cells =1 and that */
|
|
|
+ getprop(memory, "reg", reg, sizeof(reg));
|
|
|
+ if (reg[2])
|
|
|
+ /* If the device tree specifies the memory range, use it */
|
|
|
+ ibm4xx_memstart = reg[1];
|
|
|
+ else
|
|
|
+ /* othersize, read it from the SDRAM controller */
|
|
|
+ ibm4xx_sdram_fixup_memsize();
|
|
|
+}
|
|
|
+
|
|
|
+static void *iss_4xx_vmlinux_alloc(unsigned long size)
|
|
|
+{
|
|
|
+ return (void *)ibm4xx_memstart;
|
|
|
}
|
|
|
|
|
|
#define SPRN_PIR 0x11E /* Processor Indentification Register */
|
|
@@ -48,6 +68,7 @@ void platform_init(void)
|
|
|
|
|
|
simple_alloc_init(_end, avail_ram, 128, 64);
|
|
|
platform_ops.fixups = iss_4xx_fixups;
|
|
|
+ platform_ops.vmlinux_alloc = iss_4xx_vmlinux_alloc;
|
|
|
platform_ops.exit = ibm44x_dbcr_reset;
|
|
|
pir_reg = mfspr(SPRN_PIR);
|
|
|
fdt_set_boot_cpuid_phys(_dtb_start, pir_reg);
|