[coreboot-gerrit] Patch set updated for coreboot: d487a26 ck804: obtain I/O APIC base address for ACPI MADT from allocator

Jonathan A. Kollasch (jakllsch@kollasch.net) gerrit at coreboot.org
Sun Oct 13 18:55:49 CEST 2013


Jonathan A. Kollasch (jakllsch at kollasch.net) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3960

-gerrit

commit d487a267423c0df8af26839a65e213e77735bba3
Author: Jonathan A. Kollasch <jakllsch at kollasch.net>
Date:   Fri Oct 11 14:58:39 2013 -0500

    ck804: obtain I/O APIC base address for ACPI MADT from allocator
    
    Change-Id: I67192c8ae99e396ea4b17e03c658f31dbb5c1800
    Signed-off-by: Jonathan A. Kollasch <jakllsch at kollasch.net>
---
 src/mainboard/msi/ms7135/acpi_tables.c | 25 +++++++++++----------
 src/mainboard/tyan/s2891/acpi_tables.c | 21 +++++++++--------
 src/mainboard/tyan/s2892/acpi_tables.c | 21 +++++++++--------
 src/mainboard/tyan/s2895/acpi_tables.c | 41 +++++++++++++++++++---------------
 4 files changed, 60 insertions(+), 48 deletions(-)

diff --git a/src/mainboard/msi/ms7135/acpi_tables.c b/src/mainboard/msi/ms7135/acpi_tables.c
index da4ef8d..ee8e81f 100644
--- a/src/mainboard/msi/ms7135/acpi_tables.c
+++ b/src/mainboard/msi/ms7135/acpi_tables.c
@@ -48,28 +48,29 @@ unsigned long acpi_fill_mcfg(unsigned long current)
 /* APIC */
 unsigned long acpi_fill_madt(unsigned long current)
 {
-	unsigned long apic_addr;
 	device_t dev;
+	struct resource *res;
 
 	/* create all subtables for processors */
 	current = acpi_create_madt_lapics(current);
 
 	/* Write NVIDIA CK804 IOAPIC. */
 	dev = dev_find_slot(0x0, PCI_DEVFN(0x1,0));
-	if (dev) {
-		apic_addr = pci_read_config32(dev, PCI_BASE_ADDRESS_1) & ~0xf;
-		current += acpi_create_madt_ioapic(
-			(acpi_madt_ioapic_t *)current,
-			CONFIG_MAX_CPUS * CONFIG_MAX_PHYSICAL_CPUS,
-			apic_addr, 0);
-		/* Initialize interrupt mapping if mptable.c didn't. */
+	ASSERT(dev != NULL);
+
+	res = find_resource(dev, PCI_BASE_ADDRESS_1);
+	ASSERT(res != NULL);
+
+	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *)current,
+		CONFIG_MAX_CPUS * CONFIG_MAX_PHYSICAL_CPUS, res->base, 0);
+
+	/* Initialize interrupt mapping if mptable.c didn't. */
 #if (!CONFIG_GENERATE_MP_TABLE)
 #error untested config
-		pci_write_config32(dev, 0x7c, 0x0120d218);
-		pci_write_config32(dev, 0x80, 0x12008a00);
-		pci_write_config32(dev, 0x84, 0x0000007d);
+	pci_write_config32(dev, 0x7c, 0x0120d218);
+	pci_write_config32(dev, 0x80, 0x12008a00);
+	pci_write_config32(dev, 0x84, 0x0000007d);
 #endif
-	}
 
 	/* IRQ of timer */
 	current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *)
diff --git a/src/mainboard/tyan/s2891/acpi_tables.c b/src/mainboard/tyan/s2891/acpi_tables.c
index 890e239..42d9152 100644
--- a/src/mainboard/tyan/s2891/acpi_tables.c
+++ b/src/mainboard/tyan/s2891/acpi_tables.c
@@ -32,23 +32,26 @@ unsigned long acpi_fill_madt(unsigned long current)
 {
 	unsigned long apic_addr;
 	device_t dev;
+	struct resource *res;
 
 	/* create all subtables for processors */
 	current = acpi_create_madt_lapics(current);
 
 	/* Write NVIDIA CK804 IOAPIC. */
 	dev = dev_find_slot(0x0, PCI_DEVFN(0x1,0));
-	if (dev) {
-		apic_addr = pci_read_config32(dev, PCI_BASE_ADDRESS_1) & ~0xf;
-		current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4,
-						   apic_addr, 0);
-		/* Initialize interrupt mapping if mptable.c didn't. */
+	ASSERT(dev != NULL);
+
+	res = find_resource(dev, PCI_BASE_ADDRESS_1);
+	ASSERT(res != NULL);
+
+	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4,
+					   res->base, 0);
+	/* Initialize interrupt mapping if mptable.c didn't. */
 #if (!CONFIG_GENERATE_MP_TABLE)
-		pci_write_config32(dev, 0x7c, 0x0120d218);
-		pci_write_config32(dev, 0x80, 0x12008a00);
-		pci_write_config32(dev, 0x84, 0x0000007d);
+	pci_write_config32(dev, 0x7c, 0x0120d218);
+	pci_write_config32(dev, 0x80, 0x12008a00);
+	pci_write_config32(dev, 0x84, 0x0000007d);
 #endif
-	}
 
 	/* Write AMD 8131 two IOAPICs. */
 	dev = dev_find_slot(0x40, PCI_DEVFN(0x0,1));
diff --git a/src/mainboard/tyan/s2892/acpi_tables.c b/src/mainboard/tyan/s2892/acpi_tables.c
index 890e239..42d9152 100644
--- a/src/mainboard/tyan/s2892/acpi_tables.c
+++ b/src/mainboard/tyan/s2892/acpi_tables.c
@@ -32,23 +32,26 @@ unsigned long acpi_fill_madt(unsigned long current)
 {
 	unsigned long apic_addr;
 	device_t dev;
+	struct resource *res;
 
 	/* create all subtables for processors */
 	current = acpi_create_madt_lapics(current);
 
 	/* Write NVIDIA CK804 IOAPIC. */
 	dev = dev_find_slot(0x0, PCI_DEVFN(0x1,0));
-	if (dev) {
-		apic_addr = pci_read_config32(dev, PCI_BASE_ADDRESS_1) & ~0xf;
-		current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4,
-						   apic_addr, 0);
-		/* Initialize interrupt mapping if mptable.c didn't. */
+	ASSERT(dev != NULL);
+
+	res = find_resource(dev, PCI_BASE_ADDRESS_1);
+	ASSERT(res != NULL);
+
+	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4,
+					   res->base, 0);
+	/* Initialize interrupt mapping if mptable.c didn't. */
 #if (!CONFIG_GENERATE_MP_TABLE)
-		pci_write_config32(dev, 0x7c, 0x0120d218);
-		pci_write_config32(dev, 0x80, 0x12008a00);
-		pci_write_config32(dev, 0x84, 0x0000007d);
+	pci_write_config32(dev, 0x7c, 0x0120d218);
+	pci_write_config32(dev, 0x80, 0x12008a00);
+	pci_write_config32(dev, 0x84, 0x0000007d);
 #endif
-	}
 
 	/* Write AMD 8131 two IOAPICs. */
 	dev = dev_find_slot(0x40, PCI_DEVFN(0x0,1));
diff --git a/src/mainboard/tyan/s2895/acpi_tables.c b/src/mainboard/tyan/s2895/acpi_tables.c
index b7cb475..1974171 100644
--- a/src/mainboard/tyan/s2895/acpi_tables.c
+++ b/src/mainboard/tyan/s2895/acpi_tables.c
@@ -32,23 +32,26 @@ unsigned long acpi_fill_madt(unsigned long current)
 {
 	unsigned long apic_addr;
 	device_t dev;
+	struct resource *res;
 
 	/* create all subtables for processors */
 	current = acpi_create_madt_lapics(current);
 
 	/* Write NVIDIA CK804 IOAPIC. */
 	dev = dev_find_slot(0x0, PCI_DEVFN(0x1,0));
-	if (dev) {
-		apic_addr = pci_read_config32(dev, PCI_BASE_ADDRESS_1) & ~0xf;
-		current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4,
-						   apic_addr, 0);
-		/* Initialize interrupt mapping if mptable.c didn't. */
+	ASSERT(dev != NULL);
+
+	res = find_resource(dev, PCI_BASE_ADDRESS_1);
+	ASSERT(res != NULL);
+
+	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4,
+					   res->base, 0);
+	/* Initialize interrupt mapping if mptable.c didn't. */
 #if (!CONFIG_GENERATE_MP_TABLE)
-		pci_write_config32(dev, 0x7c, 0x0120d218);
-		pci_write_config32(dev, 0x80, 0x12008a00);
-		pci_write_config32(dev, 0x84, 0x00080d7d);
+	pci_write_config32(dev, 0x7c, 0x0120d218);
+	pci_write_config32(dev, 0x80, 0x12008a00);
+	pci_write_config32(dev, 0x84, 0x00080d7d);
 #endif
-	}
 
 	/* Write AMD 8131 two IOAPICs. */
 	dev = dev_find_slot(0x40, PCI_DEVFN(0x0,1));
@@ -67,17 +70,19 @@ unsigned long acpi_fill_madt(unsigned long current)
 
 	/* Write second NVIDIA CK804 IOAPIC. */
 	dev = dev_find_slot(0x80, PCI_DEVFN(0x1, 0));
-	if (dev) {
-		apic_addr = pci_read_config32(dev, PCI_BASE_ADDRESS_1) & ~0xf;
-		current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 7,
-						   apic_addr, 0x20);
-		/* Initialize interrupt mapping if mptable.c didn't. */
+	ASSERT(dev != NULL);
+
+	res = find_resource(dev, PCI_BASE_ADDRESS_1);
+	ASSERT(res != NULL);
+
+	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 7,
+					   res->base, 0x20);
+	/* Initialize interrupt mapping if mptable.c didn't. */
 #if (!CONFIG_GENERATE_MP_TABLE)
-		pci_write_config32(dev, 0x7c, 0x0000d218); // Why does the factory BIOS have 0?
-		pci_write_config32(dev, 0x80, 0x00000000);
-		pci_write_config32(dev, 0x84, 0x00000d00); // Same here.
+	pci_write_config32(dev, 0x7c, 0x0000d218); // Why does the factory BIOS have 0?
+	pci_write_config32(dev, 0x80, 0x00000000);
+	pci_write_config32(dev, 0x84, 0x00000d00); // Same here.
 #endif
-	}
 
 	/* IRQ9 */
 	current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *)



More information about the coreboot-gerrit mailing list