cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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}