hw/arm/virt-acpi-build: Present the GICR structure properly for GICv4
With the introduction of the new TCG GICv4, build_madt() is badly broken as we do not present any GIC Redistributor structure in MADT for GICv4 guests, so that they have no idea about where the Redistributor register frames are. This fixes a Linux guest crash at boot time with ACPI enabled and '-machine gic-version=4'. While at it, let's convert the remaining hard coded gic_version into enumeration VIRT_GIC_VERSION_2 for consistency. Signed-off-by: Zenghui Yu <yuzenghui@huawei.com> Message-id: 20220812022018.1069-1-yuzenghui@huawei.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
6a54ac2a97
commit
e1f045780b
@ -732,7 +732,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
uint32_t pmu_interrupt = arm_feature(&armcpu->env, ARM_FEATURE_PMU) ?
|
||||
PPI(VIRTUAL_PMU_IRQ) : 0;
|
||||
|
||||
if (vms->gic_version == 2) {
|
||||
if (vms->gic_version == VIRT_GIC_VERSION_2) {
|
||||
physical_base_address = memmap[VIRT_GIC_CPU].base;
|
||||
gicv = memmap[VIRT_GIC_VCPU].base;
|
||||
gich = memmap[VIRT_GIC_HYP].base;
|
||||
@ -762,7 +762,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
build_append_int_noprefix(table_data, armcpu->mp_affinity, 8);
|
||||
}
|
||||
|
||||
if (vms->gic_version == 3) {
|
||||
if (vms->gic_version != VIRT_GIC_VERSION_2) {
|
||||
build_append_gicr(table_data, memmap[VIRT_GIC_REDIST].base,
|
||||
memmap[VIRT_GIC_REDIST].size);
|
||||
if (virt_gicv3_redist_region_count(vms) == 2) {
|
||||
|
Loading…
Reference in New Issue
Block a user