Statistics
| Branch: | Revision:

root / hw / ppc / e500plat.c @ 5a4348d1

History | View | Annotate | Download (1.7 kB)

1
/*
2
 * Generic device-tree-driven paravirt PPC e500 platform
3
 *
4
 * Copyright 2012 Freescale Semiconductor, Inc.
5
 *
6
 * This is free software; you can redistribute it and/or modify
7
 * it under the terms of  the GNU General  Public License as published by
8
 * the Free Software Foundation;  either version 2 of the  License, or
9
 * (at your option) any later version.
10
 */
11

    
12
#include "config.h"
13
#include "qemu-common.h"
14
#include "e500.h"
15
#include "hw/boards.h"
16
#include "sysemu/device_tree.h"
17
#include "hw/pci/pci.h"
18
#include "hw/ppc/openpic.h"
19
#include "kvm_ppc.h"
20

    
21
static void e500plat_fixup_devtree(PPCE500Params *params, void *fdt)
22
{
23
    const char model[] = "QEMU ppce500";
24
    const char compatible[] = "fsl,qemu-e500";
25

    
26
    qemu_fdt_setprop(fdt, "/", "model", model, sizeof(model));
27
    qemu_fdt_setprop(fdt, "/", "compatible", compatible,
28
                     sizeof(compatible));
29
}
30

    
31
static void e500plat_init(QEMUMachineInitArgs *args)
32
{
33
    PPCE500Params params = {
34
        .pci_first_slot = 0x1,
35
        .pci_nr_slots = PCI_SLOT_MAX - 1,
36
        .fixup_devtree = e500plat_fixup_devtree,
37
        .mpic_version = OPENPIC_MODEL_FSL_MPIC_42,
38
    };
39

    
40
    /* Older KVM versions don't support EPR which breaks guests when we announce
41
       MPIC variants that support EPR. Revert to an older one for those */
42
    if (kvm_enabled() && !kvmppc_has_cap_epr()) {
43
        params.mpic_version = OPENPIC_MODEL_FSL_MPIC_20;
44
    }
45

    
46
    ppce500_init(args, &params);
47
}
48

    
49
static QEMUMachine e500plat_machine = {
50
    .name = "ppce500",
51
    .desc = "generic paravirt e500 platform",
52
    .init = e500plat_init,
53
    .max_cpus = 32,
54
};
55

    
56
static void e500plat_machine_init(void)
57
{
58
    qemu_register_machine(&e500plat_machine);
59
}
60

    
61
machine_init(e500plat_machine_init);