[coreboot-gerrit] New patch to review for coreboot: b868e6e [NOTFORMERGE] gizmosphere/gizmo/mptable.c: Program PIC mode correctly

Paul Menzel (paulepanter@users.sourceforge.net) gerrit at coreboot.org
Thu May 8 08:56:15 CEST 2014


Paul Menzel (paulepanter at users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5695

-gerrit

commit b868e6e363e771f3ec631b82f81e2ead85691be2
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date:   Thu May 8 08:46:16 2014 +0200

    [NOTFORMERGE] gizmosphere/gizmo/mptable.c: Program PIC mode correctly
    
    Ported Scott’s first patch for ASRock E350M1 to Gizmo.
    
    Needs testing and setup should be moved to southbridge code so all boards profit.
    
    Change-Id: Id4cf3f84744e844f869a7898b62f36f5e4c6d90a
    Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
---
 src/mainboard/gizmosphere/gizmo/mptable.c | 37 +++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/src/mainboard/gizmosphere/gizmo/mptable.c b/src/mainboard/gizmosphere/gizmo/mptable.c
index cc9e627..f6f37e4 100755
--- a/src/mainboard/gizmosphere/gizmo/mptable.c
+++ b/src/mainboard/gizmosphere/gizmo/mptable.c
@@ -34,6 +34,7 @@ extern u32 apicid_sb800;
 extern u32 bus_type[256];
 extern u32 sbdn_sb800;
 
+/* SB800 interrupt routing register values: APIC mode */
 u8 intr_data[] = {
 	[0x00] = 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,	/* INTA# - INTH# */
 	[0x08] = 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F,	/* Misc-nil,0,1,2, INT from Serial irq */
@@ -49,6 +50,17 @@ u8 intr_data[] = {
 	0x10, 0x11, 0x12, 0x13
 };
 
+/* SB800 interrupt routing register values: PIC mode */
+u8 intr_data_pic[] = {
+	0x0B, 0x0A, 0x0B, 0x0A, 0x1F, 0x1F, 0x1F, 0x1F,	// 0x00
+	0x00, 0xF1, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F,	// 0x08
+	0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,	// 0x10
+	0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,	// 0x18
+	0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,	// 0x20
+	0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,	// 0x28
+	0x0B, 0x0A, 0x0B, 0x0A, 0x1F, 0x1F, 0x1F, 0x1F	// 0x30
+};
+
 static void *smp_write_config_table(void *v)
 {
 	struct mp_config_table *mc;
@@ -79,6 +91,12 @@ static void *smp_write_config_table(void *v)
 		outb(intr_data[byte], 0xC01);
 	}
 
+	/* program the SB800 PIC mode interrupt routing register values */
+	for (byte = 0x0; byte < sizeof(intr_data_pic); byte++) {
+		outb(byte, 0xC00);
+		outb(intr_data_pic[byte], 0xC01);
+	}
+
 	/* I/O Ints:    Type    Polarity        Trigger  Bus ID  IRQ    APIC ID PIN# */
 #define IO_LOCAL_INT(type, intr, apicid, pin) \
 	smp_write_lintsrc(mc, (type), MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH, bus_isa, (intr), (apicid), (pin));
@@ -153,6 +171,25 @@ static void *smp_write_config_table(void *v)
 	IO_LOCAL_INT(mp_NMI, 0x0, MP_APIC_ALL, 0x1);
 	/* There is no extension information... */
 
+	/* program interrupt line registers for legacy OS use */
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x01, 0)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x01, 1)), 0x3C, 0x0A);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x04, 0)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x11, 0)), 0x3C, 0x0A);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x12, 0)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x12, 2)), 0x3C, 0x0A);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x13, 0)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x13, 2)), 0x3C, 0x0A);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x14, 1)), 0x3C, 0x0A);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x14, 2)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x14, 5)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x16, 0)), 0x3C, 0x0B);
+	pci_write_config32(dev_find_slot(0, PCI_DEVFN(0x16, 2)), 0x3C, 0x0A);
+	pci_write_config32(dev_find_slot(3, PCI_DEVFN(0x00, 0)), 0x3C, 0x0B);
+
+	/* program slave PIC edge-level control register */
+	outb(0x0C, 0x4D1);
+
 	/* Compute the checksums */
 	return mptable_finalize(mc);
 }



More information about the coreboot-gerrit mailing list