Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/platforms/85xx/qemu_e500.c
26481 views
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
28
static void __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
40
static 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
machine_arch_initcall(qemu_e500, mpc85xx_common_publish_devices);
50
51
define_machine(qemu_e500) {
52
.name = "QEMU e500",
53
.compatible = "fsl,qemu-e500",
54
.setup_arch = qemu_e500_setup_arch,
55
.init_IRQ = qemu_e500_pic_init,
56
#ifdef CONFIG_PCI
57
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
58
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
59
#endif
60
.get_irq = mpic_get_coreint_irq,
61
.progress = udbg_progress,
62
.power_save = e500_idle,
63
};
64
65