[coreboot] [commit] r5647 - in trunk/src: arch/i386/boot arch/i386/include/arch/smp mainboard/kontron/986lcd-m
repository service
svn at coreboot.org
Fri Jun 25 15:43:23 CEST 2010
Author: oxygene
Date: Fri Jun 25 15:43:22 2010
New Revision: 5647
URL: https://tracker.coreboot.org/trac/coreboot/changeset/5647
Log:
Add new function to create all mptable entries for buses by
reading that information from the device tree.
Use this function on kontron/986lcd-m
Signed-off-by: Patrick Georgi <patrick.georgi at coresystems.de>
Acked-by: Peter Stuge <peter at stuge.se>
Modified:
trunk/src/arch/i386/boot/mpspec.c
trunk/src/arch/i386/include/arch/smp/mpspec.h
trunk/src/mainboard/kontron/986lcd-m/mptable.c
Modified: trunk/src/arch/i386/boot/mpspec.c
==============================================================================
--- trunk/src/arch/i386/boot/mpspec.c Thu Jun 24 16:43:17 2010 (r5646)
+++ trunk/src/arch/i386/boot/mpspec.c Fri Jun 25 15:43:22 2010 (r5647)
@@ -323,3 +323,37 @@
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_isa, 0xe, apicid, 0xe);
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_isa, 0xf, apicid, 0xf);
}
+
+void mptable_write_buses(struct mp_config_table *mc, int *max_pci_bus, int *isa_bus) {
+ int dummy, i, highest;
+ char buses[256];
+ struct device *dev;
+
+ if (!max_pci_bus) max_pci_bus = &dummy;
+ if (!isa_bus) isa_bus = &dummy;
+
+ *max_pci_bus = 0;
+ highest = 0;
+ memset(buses, 0, sizeof(buses));
+
+ for (dev = all_devices; dev; dev = dev->next) {
+ struct bus *bus;
+ for (bus = dev->link_list; bus; bus = bus->next) {
+ if (bus->secondary > 255) {
+ printk(BIOS_ERR, "A bus claims to have a bus ID > 255?!? Aborting");
+ return;
+ }
+ buses[bus->secondary] = 1;
+ if (highest < bus->secondary) highest = bus->secondary;
+ }
+ }
+ for (i=0; i <= highest; i++) {
+ if (buses[i]) {
+ smp_write_bus(mc, i, "PCI ");
+ *max_pci_bus = i;
+ }
+ }
+ *isa_bus = *max_pci_bus + 1;
+ smp_write_bus(mc, *isa_bus, "ISA ");
+}
+
Modified: trunk/src/arch/i386/include/arch/smp/mpspec.h
==============================================================================
--- trunk/src/arch/i386/include/arch/smp/mpspec.h Thu Jun 24 16:43:17 2010 (r5646)
+++ trunk/src/arch/i386/include/arch/smp/mpspec.h Fri Jun 25 15:43:22 2010 (r5647)
@@ -274,6 +274,7 @@
unsigned long write_smp_table(unsigned long addr);
void mptable_add_isa_interrupts(struct mp_config_table *mc, unsigned long bus_isa, unsigned long apicid, int external);
+void mptable_write_buses(struct mp_config_table *mc, int *max_pci_bus, int *isa_bus);
#endif
Modified: trunk/src/mainboard/kontron/986lcd-m/mptable.c
==============================================================================
--- trunk/src/mainboard/kontron/986lcd-m/mptable.c Thu Jun 24 16:43:17 2010 (r5646)
+++ trunk/src/mainboard/kontron/986lcd-m/mptable.c Fri Jun 25 15:43:22 2010 (r5647)
@@ -33,7 +33,7 @@
struct mp_config_table *mc;
struct device *riser = NULL, *firewire = NULL;
int i;
- int max_pci_bus, firewire_bus = 0, riser_bus = 0, isa_bus;
+ int firewire_bus = 0, riser_bus = 0, isa_bus;
int ioapic_id;
mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN);
@@ -54,14 +54,10 @@
mc->reserved = 0;
smp_write_processors(mc);
- max_pci_bus=0;
firewire = dev_find_device(0x104c, 0x8023, 0);
if (firewire) {
firewire_bus = firewire->bus->secondary;
- printk(BIOS_SPEW, "Firewire device is on bus %x\n",
- firewire_bus);
- max_pci_bus = firewire_bus;
}
// If a riser card is used, this riser is detected on bus 4, so its secondary bus is the
@@ -71,18 +67,9 @@
riser = dev_find_device(0x3388, 0x0022, 0);
if (riser) {
riser_bus = riser->link_list->secondary;
- printk(BIOS_SPEW, "Riser bus is %x\n", riser_bus);
- max_pci_bus = riser_bus;
}
- /* ISA bus follows */
- isa_bus = max_pci_bus + 1;
-
- /* Bus: Bus ID Type */
- for (i=0; i <= max_pci_bus; i++)
- smp_write_bus(mc, i, "PCI ");
-
- smp_write_bus(mc, isa_bus, "ISA ");
+ mptable_write_buses(mc, NULL, &isa_bus);
/* I/O APICs: APIC ID Version State Address */
ioapic_id = 2;
More information about the coreboot
mailing list