[PATCH 2/3] powerpc/e500: add paravirt QEMU platform

Alexander Graf agraf at suse.de
Fri Jul 6 22:29:15 EST 2012


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 <scottwood at 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



More information about the Linuxppc-dev mailing list