On 28.06.2012, at 01:50, Scott Wood 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. > > As this is the first platform that can run with either e500v2 or > e500mc, CONFIG_PPC_E500MC is now a legitimately user configurable > option, so add a help text. > > Signed-off-by: Scott Wood <scottw...@freescale.com> > --- > arch/powerpc/platforms/85xx/Kconfig | 16 +++++++ > arch/powerpc/platforms/85xx/Makefile | 1 + > arch/powerpc/platforms/85xx/qemu_e500.c | 66 +++++++++++++++++++++++++++++++ > arch/powerpc/platforms/Kconfig.cputype | 4 ++
I really think we should document what exactly this machine expects. > 4 files changed, 87 insertions(+), 0 deletions(-) > create mode 100644 arch/powerpc/platforms/85xx/qemu_e500.c > > diff --git a/arch/powerpc/platforms/85xx/Kconfig > b/arch/powerpc/platforms/85xx/Kconfig > index f000d81..7bbebe5 100644 > --- a/arch/powerpc/platforms/85xx/Kconfig > +++ b/arch/powerpc/platforms/85xx/Kconfig > @@ -263,6 +263,22 @@ config P5020_DS > help > This option enables support for the P5020 DS board > > +config PPC_QEMU_E500 > + bool "QEMU generic e500 platform" > + depends on EXPERIMENTAL > + select DEFAULT_UIMAGE > + help > + This option enables support for running as a QEMU guest using > + QEMU's generic e500 machine. This is not required if you're > + using a QEMU machine that targets a specific board, such as > + mpc8544ds. > + > + Unlike most e500 boards that target a specific CPU, this > + platform works with any e500-family CPU that QEMU supports. > + Thus, you'll need to make sure CONFIG_PPC_E500MC is set or > + unset based on the emulated CPU (or actual host CPU in the case > + of KVM). > + > endif # FSL_SOC_BOOKE > > config TQM85xx > diff --git a/arch/powerpc/platforms/85xx/Makefile > b/arch/powerpc/platforms/85xx/Makefile > index 2125d4c..f841ac8 100644 > --- a/arch/powerpc/platforms/85xx/Makefile > +++ b/arch/powerpc/platforms/85xx/Makefile > @@ -28,3 +28,4 @@ obj-$(CONFIG_SOCRATES) += socrates.o socrates_fpga_pic.o > obj-$(CONFIG_KSI8560) += ksi8560.o > obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o > obj-$(CONFIG_GE_IMP3A) += ge_imp3a.o > +obj-$(CONFIG_PPC_QEMU_E500) += qemu_e500.o > diff --git a/arch/powerpc/platforms/85xx/qemu_e500.c > b/arch/powerpc/platforms/85xx/qemu_e500.c > new file mode 100644 > index 0000000..77c8d5d > --- /dev/null > +++ b/arch/powerpc/platforms/85xx/qemu_e500.c > @@ -0,0 +1,66 @@ > +/* > + * Paravirt target for a generic QEMU e500 machine > + * > + * Copyright 2012 Freescale Semiconductor Inc. > + * > + * This program 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 <linux/kernel.h> > +#include <linux/of_fdt.h> > +#include <asm/machdep.h> > +#include <asm/time.h> > +#include <asm/udbg.h> > +#include <asm/mpic.h> > +#include <sysdev/fsl_soc.h> > +#include <sysdev/fsl_pci.h> > +#include "smp.h" > +#include "mpc85xx.h" > + > +void __init qemu_e500_pic_init(void) > +{ > + struct mpic *mpic; > + > + mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU, > + 0, 256, " OpenPIC "); Does that mean we're configuring the MPIC regardless of what the guest tells us? So the MPIC is a hard requirement. We can't use UIC or XPIC with this machine, right? This needs to be documented. > + > + BUG_ON(mpic == NULL); > + mpic_init(mpic); > +} > + > +static void __init qemu_e500_setup_arch(void) > +{ > + ppc_md.progress("qemu_e500_setup_arch()", 0); > + > + fsl_pci_init(); > + mpc85xx_smp_init(); > +} > + > +/* > + * Called very early, device-tree isn't unflattened > + */ > +static int __init qemu_e500_probe(void) > +{ > + unsigned long root = of_get_flat_dt_root(); > + > + return !!of_flat_dt_is_compatible(root, "fsl,qemu-e500"); So the machine needs to be compatible "fsl,qemu-e500". Needs documentation in the machine spec. I'm sure you'll find more constraints that appear logical, but really should be written down so we have something formal that potentially someone not-QEMU or not-Scott could write a machine implementation against ;). Alex _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev