treeboot-iss4xx.c (1812B)
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 31BSS_STACK(4096); 32 33static u32 ibm4xx_memstart; 34 35static 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 53static void *iss_4xx_vmlinux_alloc(unsigned long size) 54{ 55 return (void *)ibm4xx_memstart; 56} 57 58#define SPRN_PIR 0x11E /* Processor Identification Register */ 59void 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}