acpi: arm/virt: madt: bump to revision 4 accordingly to ACPI 6.0 Errata A

MADT has been updated with the GIC Structures from ACPI 6.0 Errata A
and so MADT revision and GICC Structure must be updated also.

Fixes: 37f33084ed ("acpi: arm/virt: madt: use build_append_int_noprefix() API to compose MADT table")

Signed-off-by: Miguel Luis <miguel.luis@oracle.com>
Reviewed-by: Ani Sinha <ani@anisinha.ca>
Message-Id: <20221011181730.10885-4-miguel.luis@oracle.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Miguel Luis 2022-10-11 18:17:29 +00:00 committed by Michael S. Tsirkin
parent 4496d1d3eb
commit 7fe4c35cea
1 changed files with 7 additions and 9 deletions

View File

@ -685,7 +685,7 @@ build_dbg2(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
}; };
/* /*
* ACPI spec, Revision 5.1 Errata A * ACPI spec, Revision 6.0 Errata A
* 5.2.12 Multiple APIC Description Table (MADT) * 5.2.12 Multiple APIC Description Table (MADT)
*/ */
static void build_append_gicr(GArray *table_data, uint64_t base, uint32_t size) static void build_append_gicr(GArray *table_data, uint64_t base, uint32_t size)
@ -704,7 +704,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
int i; int i;
VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms); VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
const MemMapEntry *memmap = vms->memmap; const MemMapEntry *memmap = vms->memmap;
AcpiTable table = { .sig = "APIC", .rev = 3, .oem_id = vms->oem_id, AcpiTable table = { .sig = "APIC", .rev = 4, .oem_id = vms->oem_id,
.oem_table_id = vms->oem_table_id }; .oem_table_id = vms->oem_table_id };
acpi_table_begin(&table, table_data); acpi_table_begin(&table, table_data);
@ -739,7 +739,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
/* 5.2.12.14 GIC Structure */ /* 5.2.12.14 GIC Structure */
build_append_int_noprefix(table_data, 0xB, 1); /* Type */ build_append_int_noprefix(table_data, 0xB, 1); /* Type */
build_append_int_noprefix(table_data, 76, 1); /* Length */ build_append_int_noprefix(table_data, 80, 1); /* Length */
build_append_int_noprefix(table_data, 0, 2); /* Reserved */ build_append_int_noprefix(table_data, 0, 2); /* Reserved */
build_append_int_noprefix(table_data, i, 4); /* GIC ID */ build_append_int_noprefix(table_data, i, 4); /* GIC ID */
build_append_int_noprefix(table_data, i, 4); /* ACPI Processor UID */ build_append_int_noprefix(table_data, i, 4); /* ACPI Processor UID */
@ -759,6 +759,10 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
build_append_int_noprefix(table_data, 0, 8); /* GICR Base Address*/ build_append_int_noprefix(table_data, 0, 8); /* GICR Base Address*/
/* MPIDR */ /* MPIDR */
build_append_int_noprefix(table_data, armcpu->mp_affinity, 8); build_append_int_noprefix(table_data, armcpu->mp_affinity, 8);
/* Processor Power Efficiency Class */
build_append_int_noprefix(table_data, 0, 1);
/* Reserved */
build_append_int_noprefix(table_data, 0, 3);
} }
if (vms->gic_version != VIRT_GIC_VERSION_2) { if (vms->gic_version != VIRT_GIC_VERSION_2) {
@ -770,12 +774,6 @@ build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
} }
if (its_class_name() && !vmc->no_its) { if (its_class_name() && !vmc->no_its) {
/*
* FIXME: Structure is from Revision 6.0 where 'GIC Structure'
* has additional fields on top of implemented 5.1 Errata A,
* to make it consistent with v6.0 we need to bump everything
* to v6.0
*/
/* /*
* ACPI spec, Revision 6.0 Errata A * ACPI spec, Revision 6.0 Errata A
* (original 6.0 definition has invalid Length) * (original 6.0 definition has invalid Length)