]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
x86: acpi: Deduplicate acpi_fill_madt() implementation
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 21 Jul 2017 19:32:04 +0000 (22:32 +0300)
committerBin Meng <bmeng.cn@gmail.com>
Sun, 30 Jul 2017 02:30:25 +0000 (10:30 +0800)
In Baytrail and Quark support code acpi_fill_madt() is identical.

Deduplicate its implementation by moving to lib/acpi_tables.c.

At the same time mark acpi_fill_madt() with __weak attribute to keep a
possibility to override it in platform code

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/baytrail/acpi.c
arch/x86/cpu/quark/acpi.c
arch/x86/lib/acpi_table.c

index 55ed7de781fd4cfcbc1b1d3f03bf13f944165b45..cbefdf871dcbfb1b9842a1bc63f0c412818b2c67 100644 (file)
@@ -11,8 +11,6 @@
 #include <asm/acpi_s3.h>
 #include <asm/acpi_table.h>
 #include <asm/io.h>
-#include <asm/ioapic.h>
-#include <asm/mpspec.h>
 #include <asm/tables.h>
 #include <asm/arch/global_nvs.h>
 #include <asm/arch/iomap.h>
@@ -141,33 +139,6 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
        header->checksum = table_compute_checksum(fadt, header->length);
 }
 
-static int acpi_create_madt_irq_overrides(u32 current)
-{
-       struct acpi_madt_irqoverride *irqovr;
-       u16 sci_flags = MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_HIGH;
-       int length = 0;
-
-       irqovr = (void *)current;
-       length += acpi_create_madt_irqoverride(irqovr, 0, 0, 2, 0);
-
-       irqovr = (void *)(current + length);
-       length += acpi_create_madt_irqoverride(irqovr, 0, 9, 9, sci_flags);
-
-       return length;
-}
-
-u32 acpi_fill_madt(u32 current)
-{
-       current += acpi_create_madt_lapics(current);
-
-       current += acpi_create_madt_ioapic((struct acpi_madt_ioapic *)current,
-                       io_apic_read(IO_APIC_ID) >> 24, IO_APIC_ADDR, 0);
-
-       current += acpi_create_madt_irq_overrides(current);
-
-       return current;
-}
-
 void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
 {
        struct udevice *dev;
index 3968f7a8bfe0111d7902cfbb32e47412d44ad674..5717a620b582c12d0b091ee5aa004cfeb03a3eb2 100644 (file)
@@ -6,8 +6,6 @@
 
 #include <common.h>
 #include <asm/acpi_table.h>
-#include <asm/ioapic.h>
-#include <asm/mpspec.h>
 #include <asm/tables.h>
 #include <asm/arch/global_nvs.h>
 #include <asm/arch/iomap.h>
@@ -136,33 +134,6 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
        header->checksum = table_compute_checksum(fadt, header->length);
 }
 
-static int acpi_create_madt_irq_overrides(u32 current)
-{
-       struct acpi_madt_irqoverride *irqovr;
-       u16 sci_flags = MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_HIGH;
-       int length = 0;
-
-       irqovr = (void *)current;
-       length += acpi_create_madt_irqoverride(irqovr, 0, 0, 2, 0);
-
-       irqovr = (void *)(current + length);
-       length += acpi_create_madt_irqoverride(irqovr, 0, 9, 9, sci_flags);
-
-       return length;
-}
-
-u32 acpi_fill_madt(u32 current)
-{
-       current += acpi_create_madt_lapics(current);
-
-       current += acpi_create_madt_ioapic((struct acpi_madt_ioapic *)current,
-                       io_apic_read(IO_APIC_ID) >> 24, IO_APIC_ADDR, 0);
-
-       current += acpi_create_madt_irq_overrides(current);
-
-       return current;
-}
-
 void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
 {
        /* quark is a uni-processor */
index c6f4d8941c911c1b61811891e4e3dad96839a9c1..14d10c34cdf44fd06ffcdd446408d5664e9cbdbc 100644 (file)
@@ -15,7 +15,9 @@
 #include <asm/acpi/global_nvs.h>
 #include <asm/acpi_table.h>
 #include <asm/io.h>
+#include <asm/ioapic.h>
 #include <asm/lapic.h>
+#include <asm/mpspec.h>
 #include <asm/tables.h>
 #include <asm/arch/global_nvs.h>
 
@@ -241,6 +243,33 @@ int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
        return lapic_nmi->length;
 }
 
+static int acpi_create_madt_irq_overrides(u32 current)
+{
+       struct acpi_madt_irqoverride *irqovr;
+       u16 sci_flags = MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_HIGH;
+       int length = 0;
+
+       irqovr = (void *)current;
+       length += acpi_create_madt_irqoverride(irqovr, 0, 0, 2, 0);
+
+       irqovr = (void *)(current + length);
+       length += acpi_create_madt_irqoverride(irqovr, 0, 9, 9, sci_flags);
+
+       return length;
+}
+
+__weak u32 acpi_fill_madt(u32 current)
+{
+       current += acpi_create_madt_lapics(current);
+
+       current += acpi_create_madt_ioapic((struct acpi_madt_ioapic *)current,
+                       io_apic_read(IO_APIC_ID) >> 24, IO_APIC_ADDR, 0);
+
+       current += acpi_create_madt_irq_overrides(current);
+
+       return current;
+}
+
 static void acpi_create_madt(struct acpi_madt *madt)
 {
        struct acpi_table_header *header = &(madt->header);