Merge branch 'for-linus' of git://git.kernel.dk/linux-block
[pandora-kernel.git] / arch / powerpc / boot / treeboot-iss4xx.c
index fcc4495..329e710 100644 (file)
 
 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);