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

qemu_e500.c (1936B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Paravirt target for a generic QEMU e500 machine
      4 *
      5 * This is intended to be a flexible device-tree-driven platform, not fixed
      6 * to a particular piece of hardware or a particular spec of virtual hardware,
      7 * beyond the assumption of an e500-family CPU.  Some things are still hardcoded
      8 * here, such as MPIC, but this is a limitation of the current code rather than
      9 * an interface contract with QEMU.
     10 *
     11 * Copyright 2012 Freescale Semiconductor Inc.
     12 */
     13
     14#include <linux/kernel.h>
     15#include <linux/of.h>
     16#include <linux/of_fdt.h>
     17#include <linux/pgtable.h>
     18#include <asm/machdep.h>
     19#include <asm/time.h>
     20#include <asm/udbg.h>
     21#include <asm/mpic.h>
     22#include <asm/swiotlb.h>
     23#include <sysdev/fsl_soc.h>
     24#include <sysdev/fsl_pci.h>
     25#include "smp.h"
     26#include "mpc85xx.h"
     27
     28void __init qemu_e500_pic_init(void)
     29{
     30	struct mpic *mpic;
     31	unsigned int flags = MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU |
     32		MPIC_ENABLE_COREINT;
     33
     34	mpic = mpic_alloc(NULL, 0, flags, 0, 256, " OpenPIC  ");
     35
     36	BUG_ON(mpic == NULL);
     37	mpic_init(mpic);
     38}
     39
     40static void __init qemu_e500_setup_arch(void)
     41{
     42	ppc_md.progress("qemu_e500_setup_arch()", 0);
     43
     44	fsl_pci_assign_primary();
     45	swiotlb_detect_4g();
     46	mpc85xx_smp_init();
     47}
     48
     49/*
     50 * Called very early, device-tree isn't unflattened
     51 */
     52static int __init qemu_e500_probe(void)
     53{
     54	return !!of_machine_is_compatible("fsl,qemu-e500");
     55}
     56
     57machine_arch_initcall(qemu_e500, mpc85xx_common_publish_devices);
     58
     59define_machine(qemu_e500) {
     60	.name			= "QEMU e500",
     61	.probe			= qemu_e500_probe,
     62	.setup_arch		= qemu_e500_setup_arch,
     63	.init_IRQ		= qemu_e500_pic_init,
     64#ifdef CONFIG_PCI
     65	.pcibios_fixup_bus	= fsl_pcibios_fixup_bus,
     66	.pcibios_fixup_phb      = fsl_pcibios_fixup_phb,
     67#endif
     68	.get_irq		= mpic_get_coreint_irq,
     69	.calibrate_decr		= generic_calibrate_decr,
     70	.progress		= udbg_progress,
     71#ifdef CONFIG_PPC64
     72	.power_save		= book3e_idle,
     73#else
     74	.power_save		= e500_idle,
     75#endif
     76};