Hi Marc, On 1/14/22 3:07 PM, Marc Zyngier wrote: > Just like we can control the enablement of the highmem PCIe region > using highmem_ecam, let's add a control for the highmem GICv3 > redistributor region. > > Similarily to highmem_ecam, these redistributors are disabled when > highmem is off. > > Reviewed-by: Andrew Jones <drjones@xxxxxxxxxx> > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> Eric > --- > hw/arm/virt-acpi-build.c | 2 ++ > hw/arm/virt.c | 2 ++ > include/hw/arm/virt.h | 4 +++- > 3 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index 449fab0080..0757c28f69 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -947,6 +947,8 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables) > acpi_add_table(table_offsets, tables_blob); > build_fadt_rev5(tables_blob, tables->linker, vms, dsdt); > > + vms->highmem_redists &= vms->highmem; > + > acpi_add_table(table_offsets, tables_blob); > build_madt(tables_blob, tables->linker, vms); > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index ed8ea96acc..e734a75850 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -2106,6 +2106,7 @@ static void machvirt_init(MachineState *machine) > virt_flash_fdt(vms, sysmem, secure_sysmem ?: sysmem); > > vms->highmem_mmio &= vms->highmem; > + vms->highmem_redists &= vms->highmem; > > create_gic(vms, sysmem); > > @@ -2805,6 +2806,7 @@ static void virt_instance_init(Object *obj) > > vms->highmem_ecam = !vmc->no_highmem_ecam; > vms->highmem_mmio = true; > + vms->highmem_redists = true; > > if (vmc->no_its) { > vms->its = false; > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h > index 9c54acd10d..dc9fa26faa 100644 > --- a/include/hw/arm/virt.h > +++ b/include/hw/arm/virt.h > @@ -144,6 +144,7 @@ struct VirtMachineState { > bool highmem; > bool highmem_ecam; > bool highmem_mmio; > + bool highmem_redists; > bool its; > bool tcg_its; > bool virt; > @@ -190,7 +191,8 @@ static inline int virt_gicv3_redist_region_count(VirtMachineState *vms) > > assert(vms->gic_version == VIRT_GIC_VERSION_3); > > - return MACHINE(vms)->smp.cpus > redist0_capacity ? 2 : 1; > + return (MACHINE(vms)->smp.cpus > redist0_capacity && > + vms->highmem_redists) ? 2 : 1; > } > > #endif /* QEMU_ARM_VIRT_H */