MPTAPLE: generate from devicetree.cb

This patch adds support for autogenerating the MPTABLE from
devicetree.cb. This is done by a write_smp_table() declared
weak in mpspec.c. If the mainboard doesn't provide it's own
function, this generic implementation is called.

Syntax in devicetree.cb:

ioapic_irq <APICID> <INTA|INTB|INTC|INTD> <INTPIN>

The ioapic_irq directive can be used in pci and pci_domain
devices. If there's no directive, the autogen code traverses
the tree back to the pci_domain and stops at the first device
which such a directive, and use that information to generate the
entry according to PCI IRQ routing rules.

Change-Id: I4df5b198e8430f939d477c14c798414e398a2027
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Reviewed-on: http://review.coreboot.org/1138
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Sven Schnelle
2012-06-21 22:19:48 +02:00
committed by Patrick Georgi
parent 6591470ae0
commit 0fa50a1990
11 changed files with 631 additions and 379 deletions

View File

@@ -61,6 +61,13 @@ struct bus {
* combination:
*/
struct pci_irq_info {
unsigned int ioapic_irq_pin;
unsigned int ioapic_src_pin;
unsigned int ioapic_dst_id;
unsigned int ioapic_flags;
};
struct device {
struct bus * bus; /* bus this device is on, for bridge
* devices, it is the up stream bus */
@@ -77,7 +84,7 @@ struct device {
unsigned int enabled : 1; /* set if we should enable the device */
unsigned int initialized : 1; /* set if we have initialized the device */
unsigned int on_mainboard : 1;
struct pci_irq_info pci_irq_info[4];
u8 command;
/* Base registers for this device. I/O, MEM and Expansion ROM */

View File

@@ -12,6 +12,7 @@ enum device_path_type {
DEVICE_PATH_APIC_CLUSTER,
DEVICE_PATH_CPU,
DEVICE_PATH_CPU_BUS,
DEVICE_PATH_IOAPIC,
};
struct pci_domain_path
@@ -43,6 +44,11 @@ struct apic_path
unsigned index;
};
struct ioapic_path
{
unsigned ioapic_id;
};
struct apic_cluster_path
{
unsigned cluster;
@@ -66,6 +72,7 @@ struct device_path {
struct pnp_path pnp;
struct i2c_path i2c;
struct apic_path apic;
struct ioapic_path ioapic;
struct pci_domain_path pci_domain;
struct apic_cluster_path apic_cluster;
struct cpu_path cpu;