acpi/acpi_apic.c: Generate MADT LAPIC entries based on current mode
Depending on the Kconfig, LAPIC may be in either xAPIC or x2APIC mode. However, coreboot generates MADT LAPIC entries based on APIC ID rather than currently enabled LAPIC mode. This resulted in LAPICs enabled in x2APIC mode being described as xAPICs in MADT. Create appropriate MADT LAPIC entries based on currently enabled mode by calling is_x2apic_mode. TEST=MADT describes LAPICs in x2APIC mode on Gigabyte MZ33-AR1, matching the actually enabled LAPIC mode. Change-Id: Iebbbca415f0b775339cbfab5c24848940d92878d Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/89475 Reviewed-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-by: Alicja Michalska <ahplka19@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
077191641b
commit
5bb7a83a7a
1 changed files with 10 additions and 8 deletions
|
|
@ -6,6 +6,7 @@
|
|||
#include <arch/smp/mpspec.h>
|
||||
#include <commonlib/sort.h>
|
||||
#include <cpu/cpu.h>
|
||||
#include <cpu/x86/lapic.h>
|
||||
#include <device/device.h>
|
||||
|
||||
static int acpi_create_madt_lapic(acpi_madt_lapic_t *lapic, u8 cpu, u8 apic)
|
||||
|
|
@ -33,12 +34,12 @@ static int acpi_create_madt_lx2apic(acpi_madt_lx2apic_t *lapic, u32 cpu, u32 api
|
|||
|
||||
unsigned long acpi_create_madt_one_lapic(unsigned long current, u32 index, u32 lapic_id)
|
||||
{
|
||||
if (lapic_id <= ACPI_MADT_MAX_LAPIC_ID)
|
||||
current += acpi_create_madt_lapic((acpi_madt_lapic_t *)current, index,
|
||||
lapic_id);
|
||||
else
|
||||
if (is_x2apic_mode())
|
||||
current += acpi_create_madt_lx2apic((acpi_madt_lx2apic_t *)current, index,
|
||||
lapic_id);
|
||||
else
|
||||
current += acpi_create_madt_lapic((acpi_madt_lapic_t *)current, index,
|
||||
lapic_id);
|
||||
|
||||
return current;
|
||||
}
|
||||
|
|
@ -181,12 +182,13 @@ unsigned long acpi_create_madt_lapic_nmis(unsigned long current)
|
|||
|
||||
/* 1: LINT1 connect to NMI */
|
||||
/* create all subtables for processors */
|
||||
current += acpi_create_madt_lapic_nmi((acpi_madt_lapic_nmi_t *)current,
|
||||
ACPI_MADT_LAPIC_NMI_ALL_PROCESSORS, flags, 1);
|
||||
|
||||
if (!CONFIG(XAPIC_ONLY))
|
||||
if (is_x2apic_mode())
|
||||
current += acpi_create_madt_lx2apic_nmi((acpi_madt_lx2apic_nmi_t *)current,
|
||||
ACPI_MADT_LX2APIC_NMI_ALL_PROCESSORS, flags, 1);
|
||||
else
|
||||
current += acpi_create_madt_lapic_nmi((acpi_madt_lapic_nmi_t *)current,
|
||||
ACPI_MADT_LAPIC_NMI_ALL_PROCESSORS, flags, 1);
|
||||
|
||||
|
||||
return current;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue