diff options
Diffstat (limited to 'arch/powerpc/boot/treeboot-iss4xx.c')
| -rw-r--r-- | arch/powerpc/boot/treeboot-iss4xx.c | 23 | 
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/powerpc/boot/treeboot-iss4xx.c b/arch/powerpc/boot/treeboot-iss4xx.c index fcc44952874e..329e710feda2 100644 --- a/arch/powerpc/boot/treeboot-iss4xx.c +++ b/arch/powerpc/boot/treeboot-iss4xx.c @@ -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);  |