summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/acpi/Kconfig15
-rw-r--r--src/acpi/acpi.c17
-rw-r--r--src/mainboard/asus/p2b/Kconfig2
-rw-r--r--src/soc/intel/quark/Kconfig2
4 files changed, 30 insertions, 6 deletions
diff --git a/src/acpi/Kconfig b/src/acpi/Kconfig
index 5af8b221bd..3b02070554 100644
--- a/src/acpi/Kconfig
+++ b/src/acpi/Kconfig
@@ -31,13 +31,22 @@ config ACPI_SOC_NVS
Set to indicate <soc/nvs.h> exists for the platform with a definition
for global_nvs.
+config ACPI_CUSTOM_MADT
+ bool
+ default n if ACPI_NO_CUSTOM_MADT
+ default y
+ help
+ Selected by platforms that need to expose custom MADT entries.
+
+config ACPI_NO_CUSTOM_MADT
+ bool
+ default y if ACPI_COMMON_MADT_LAPIC && ACPI_COMMON_MADT_IOAPIC
+
config ACPI_COMMON_MADT_LAPIC
bool
-config ACPI_NO_MADT
+config ACPI_COMMON_MADT_IOAPIC
bool
- help
- Selected by platforms that don't expose a useful MADT.
config ACPI_NO_PCAT_8259
bool
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c
index c357e2bd23..e06ac470e0 100644
--- a/src/acpi/acpi.c
+++ b/src/acpi/acpi.c
@@ -276,6 +276,18 @@ int acpi_create_madt_sci_override(acpi_madt_irqoverride_t *irqoverride)
return irqoverride->length;
}
+static unsigned long acpi_create_madt_ioapic_gsi0_default(unsigned long current)
+{
+ current += acpi_create_madt_ioapic_from_hw((acpi_madt_ioapic_t *)current, IO_APIC_ADDR);
+
+ current += acpi_create_madt_irqoverride((void *)current, MP_BUS_ISA, 0, 2,
+ MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH);
+
+ current += acpi_create_madt_sci_override((void *)current);
+
+ return current;
+}
+
static int acpi_create_madt_lapic_nmi(acpi_madt_lapic_nmi_t *lapic_nmi, u8 cpu,
u16 flags, u8 lint)
{
@@ -353,7 +365,10 @@ static void acpi_create_madt(acpi_madt_t *madt)
if (CONFIG(ACPI_COMMON_MADT_LAPIC))
current = acpi_create_madt_lapics_with_nmis(current);
- if (!CONFIG(ACPI_NO_MADT))
+ if (CONFIG(ACPI_COMMON_MADT_IOAPIC))
+ current = acpi_create_madt_ioapic_gsi0_default(current);
+
+ if (CONFIG(ACPI_CUSTOM_MADT))
current = acpi_fill_madt(current);
/* (Re)calculate length and checksum. */
diff --git a/src/mainboard/asus/p2b/Kconfig b/src/mainboard/asus/p2b/Kconfig
index 986cfdeb98..a645bcc1f6 100644
--- a/src/mainboard/asus/p2b/Kconfig
+++ b/src/mainboard/asus/p2b/Kconfig
@@ -9,7 +9,7 @@ config BASE_ASUS_P2B_D
config BOARD_SPECIFIC_OPTIONS
def_bool y
- select ACPI_NO_MADT
+ select ACPI_NO_CUSTOM_MADT
select CPU_INTEL_SLOT_1
select NORTHBRIDGE_INTEL_I440BX
select SOUTHBRIDGE_INTEL_I82371EB
diff --git a/src/soc/intel/quark/Kconfig b/src/soc/intel/quark/Kconfig
index 58f01daaeb..631755cca1 100644
--- a/src/soc/intel/quark/Kconfig
+++ b/src/soc/intel/quark/Kconfig
@@ -9,7 +9,7 @@ if SOC_INTEL_QUARK
config CPU_SPECIFIC_OPTIONS
def_bool y
- select ACPI_NO_MADT
+ select ACPI_NO_CUSTOM_MADT
select ARCH_X86
select NO_ECAM_MMCONF_SUPPORT
select NO_SMM