On Wed, Jun 27, 2012 at 6:51 PM, Scott Wood <scottw...@freescale.com> wrote: > This gives the kernel a paravirtualized machine to target, without > requiring both sides to pretend to be targeting a specific board > that likely has little to do with the host in KVM scenarios. This > avoids the need to add new boards to QEMU, just to be able to > run KVM on new CPUs. > > Signed-off-by: Scott Wood <scottw...@freescale.com> > --- > hw/ppc/Makefile.objs | 3 +- > hw/ppc/e500plat.c | 60 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 62 insertions(+), 1 deletions(-) > create mode 100644 hw/ppc/e500plat.c > > diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs > index 23eb8ca..58d82c9 100644 > --- a/hw/ppc/Makefile.objs > +++ b/hw/ppc/Makefile.objs > @@ -15,7 +15,8 @@ obj-$(CONFIG_PSERIES) += spapr_pci.o pci-hotplug.o > spapr_iommu.o > obj-y += ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o > obj-y += ppc440_bamboo.o > # PowerPC E500 boards > -obj-$(CONFIG_FDT) += ppc/e500.o mpc8544_guts.o ppce500_spin.o ppc/mpc8544ds.o > +obj-$(CONFIG_FDT) += ppc/e500.o mpc8544_guts.o ppce500_spin.o > ppc/mpc8544ds.o \ > + ppc/e500plat.o > # PowerPC 440 Xilinx ML507 reference board. > obj-y += virtex_ml507.o > # PowerPC OpenPIC > diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c > new file mode 100644 > index 0000000..a9ef5f8 > --- /dev/null > +++ b/hw/ppc/e500plat.c > @@ -0,0 +1,60 @@ > +/* > + * Generic device-tree-driven paravirt PPC e500 platform > + * > + * Copyright 2012 Freescale Semiconductor, Inc. > + * > + * This is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + */ > + > +#include "config.h" > +#include "qemu-common.h" > +#include "e500.h" > +#include "../boards.h" > +#include "device_tree.h" > + > +static void e500plat_fixup_devtree(PPCE500Params *params, void *fdt) > +{ > + const char model[] = "QEMU e500plat"; > + const char compatible[] = "fsl,qemu-e500"; > + > + qemu_devtree_setprop(fdt, "/", "model", model, sizeof(model)); > + qemu_devtree_setprop(fdt, "/", "compatible", compatible, > + sizeof(compatible)); > +} > + > +static void e500plat_init(ram_addr_t ram_size, > + const char *boot_device, > + const char *kernel_filename, > + const char *kernel_cmdline, > + const char *initrd_filename, > + const char *cpu_model) > +{ > + PPCE500Params params = { > + .ram_size = ram_size, > + .boot_device = boot_device, > + .kernel_filename = kernel_filename, > + .kernel_cmdline = kernel_cmdline, > + .initrd_filename = initrd_filename, > + .cpu_model = cpu_model, > + .fixup_devtree = e500plat_fixup_devtree, > + }; > + > + ppce500_init(¶ms); > +} > + > +static QEMUMachine e500plat_machine = { > + .name = "e500plat", > + .desc = "e500plat", > + .init = e500plat_init, > + .max_cpus = 15, > +};
Can we call the generic e500 machine "ppce500"? I like that better as it denotes both the "Power/PPC" architecture and "e500". I aesthetically like -M ppce500 over -M e500plat when running QEMU. Stuart