1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright 2010 Ben. Herrenschmidt, IBM Corporation. 4 * 5 * Based on earlier code: 6 * Copyright (C) Paul Mackerras 1997. 7 * 8 * Matt Porter <mporter@kernel.crashing.org> 9 * Copyright 2002-2005 MontaVista Software Inc. 10 * 11 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> 12 * Copyright (c) 2003, 2004 Zultys Technologies 13 * 14 * Copyright 2007 David Gibson, IBM Corporation. 15 */ 16 #include <stdarg.h> 17 #include <stddef.h> 18 #include "types.h" 19 #include "elf.h" 20 #include "string.h" 21 #include "stdio.h" 22 #include "page.h" 23 #include "ops.h" 24 #include "reg.h" 25 #include "io.h" 26 #include "dcr.h" 27 #include "4xx.h" 28 #include "44x.h" 29 #include "libfdt.h" 30 31 BSS_STACK(4096); 32 33 static u32 ibm4xx_memstart; 34 35 static void iss_4xx_fixups(void) 36 { 37 void *memory; 38 u32 reg[3]; 39 40 memory = finddevice("/memory"); 41 if (!memory) 42 fatal("Can't find memory node\n"); 43 /* This assumes #address-cells = 2, #size-cells =1 and that */ 44 getprop(memory, "reg", reg, sizeof(reg)); 45 if (reg[2]) 46 /* If the device tree specifies the memory range, use it */ 47 ibm4xx_memstart = reg[1]; 48 else 49 /* othersize, read it from the SDRAM controller */ 50 ibm4xx_sdram_fixup_memsize(); 51 } 52 53 static void *iss_4xx_vmlinux_alloc(unsigned long size) 54 { 55 return (void *)ibm4xx_memstart; 56 } 57 58 #define SPRN_PIR 0x11E /* Processor Identification Register */ 59 void platform_init(void) 60 { 61 unsigned long end_of_ram = 0x08000000; 62 unsigned long avail_ram = end_of_ram - (unsigned long)_end; 63 u32 pir_reg; 64 65 simple_alloc_init(_end, avail_ram, 128, 64); 66 platform_ops.fixups = iss_4xx_fixups; 67 platform_ops.vmlinux_alloc = iss_4xx_vmlinux_alloc; 68 platform_ops.exit = ibm44x_dbcr_reset; 69 pir_reg = mfspr(SPRN_PIR); 70 fdt_set_boot_cpuid_phys(_dtb_start, pir_reg); 71 fdt_init(_dtb_start); 72 serial_console_init(); 73 } 74