Hi Philippe, On 16:14 Sun 31 Jan , Philippe Mathieu-Daudé wrote: > KVM requires the target cpu to be at least ARMv8 architecture > (support on ARMv7 has been dropped in commit 82bf7ae84ce: > "target/arm: Remove KVM support for 32-bit Arm hosts"). Wow, is there absolutely no way to do that then? What about using an ARMv8 and starting in AArch32 mode? Is that possible with KVM? I guess it might not be strictly identical as spawning the "real" CPU...
> > From the various SoC used by the Raspberry Pi machines, only > the BCM2837 is an ARMv8 (Cortex-A53). > > Restrict the BCM2835 (ARM1176) and BCM2836 (Cortex-A7) to TCG. > > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > hw/arm/bcm2836.c | 6 ++++++ > hw/arm/raspi.c | 4 ++++ > 2 files changed, 10 insertions(+) > > diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c > index fd16ed87c40..3051764f2dc 100644 > --- a/hw/arm/bcm2836.c > +++ b/hw/arm/bcm2836.c > @@ -89,6 +89,7 @@ static bool bcm283x_common_realize(DeviceState *dev, Error > **errp) > return true; > } > > +#ifdef CONFIG_TCG I'm not sure it's enough. TCG and KVM can be enabled in the same binary. You'll have to perform a runtime check here I think. > static void bcm2835_realize(DeviceState *dev, Error **errp) > { > BCM283XState *s = BCM283X(dev); > @@ -107,6 +108,7 @@ static void bcm2835_realize(DeviceState *dev, Error > **errp) > sysbus_connect_irq(SYS_BUS_DEVICE(&s->peripherals), 1, > qdev_get_gpio_in(DEVICE(&s->cpu[0].core), ARM_CPU_FIQ)); > } > +#endif /* CONFIG_TCG */ > > static void bcm2836_realize(DeviceState *dev, Error **errp) > { > @@ -178,6 +180,7 @@ static void bcm283x_class_init(ObjectClass *oc, void > *data) > dc->user_creatable = false; > } > > +#ifdef CONFIG_TCG > static void bcm2835_class_init(ObjectClass *oc, void *data) > { > DeviceClass *dc = DEVICE_CLASS(oc); > @@ -201,6 +204,7 @@ static void bcm2836_class_init(ObjectClass *oc, void > *data) > bc->clusterid = 0xf; > dc->realize = bcm2836_realize; > }; > +#endif /* CONFIG_TCG */ > > #ifdef TARGET_AARCH64 > static void bcm2837_class_init(ObjectClass *oc, void *data) > @@ -227,6 +231,7 @@ static const TypeInfo bcm283x_types[] = { > .class_init = bcm283x_class_init, > .abstract = true, > }, > +#ifdef CONFIG_TCG > { > .name = TYPE_BCM2835, > .parent = TYPE_BCM283X, > @@ -236,6 +241,7 @@ static const TypeInfo bcm283x_types[] = { > .parent = TYPE_BCM283X, > .class_init = bcm2836_class_init, > }, > +#endif /* CONFIG_TCG */ > #ifdef TARGET_AARCH64 > { > .name = TYPE_BCM2837, > diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c > index dce966a4dd8..cfa15504d9c 100644 > --- a/hw/arm/raspi.c > +++ b/hw/arm/raspi.c > @@ -319,6 +319,7 @@ static void raspi_machine_class_common_init(MachineClass > *mc, > mc->default_ram_id = "ram"; > }; > > +#ifdef CONFIG_TCG > static void raspi0_machine_class_init(ObjectClass *oc, void *data) > { > MachineClass *mc = MACHINE_CLASS(oc); > @@ -346,6 +347,7 @@ static void raspi2b_machine_class_init(ObjectClass *oc, > void *data) > rmc->board_rev = 0xa21041; > raspi_machine_class_common_init(mc, rmc->board_rev); > }; > +#endif /* CONFIG_TCG */ > > #ifdef TARGET_AARCH64 > static void raspi3ap_machine_class_init(ObjectClass *oc, void *data) > @@ -376,6 +378,7 @@ static const TypeInfo raspi_machine_types[] = { > .class_size = sizeof(RaspiMachineClass), > .abstract = true, > }, > +#ifdef CONFIG_TCG > { > .name = MACHINE_TYPE_NAME("raspi0"), > .parent = TYPE_RASPI_MACHINE, > @@ -389,6 +392,7 @@ static const TypeInfo raspi_machine_types[] = { > .parent = TYPE_RASPI_MACHINE, > .class_init = raspi2b_machine_class_init, > }, > +#endif /* CONFIG_TCG */ > #ifdef TARGET_AARCH64 > { > .name = MACHINE_TYPE_NAME("raspi3ap"), > -- > 2.26.2 > --