[coreboot-gerrit] New patch to review for coreboot: 23c12ca AMD/Olive Hill Plus: Port IRQ routing to the mainboard

Bruce Griffith (Bruce.Griffith@se-eng.com) gerrit at coreboot.org
Fri Sep 26 00:52:45 CEST 2014


Bruce Griffith (Bruce.Griffith at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6978

-gerrit

commit 23c12ca0a52036989ac667186933b820d6b8f425
Author: Bruce Griffith <Bruce.Griffith at se-eng.com>
Date:   Thu Sep 4 20:31:10 2014 -0600

    AMD/Olive Hill Plus: Port IRQ routing to the mainboard
    
    Olive Hill needs the IRQ routing code ported to it.
    The file 00730F01/pci_devs.h was also missing a
    few devices so these were also added.  The mptable.c
    file also needed to be updated to reflect the addition
    of the IRQ routing tables so that the MP Table can
    match the hardware IRQ routing.
    
    Change-Id: Id05157730af588665ee478fa567e5cc7ed1523e9
    Signed-off-by: Bruce Griffith <Bruce.Griffith at se-eng.com>
---
 src/mainboard/amd/olivehillplus/agesawrapper.c |  15 +-
 src/mainboard/amd/olivehillplus/mainboard.c    |  88 ++++++++++
 src/mainboard/amd/olivehillplus/mptable.c      | 231 +++++++++++--------------
 src/northbridge/amd/agesa/00730F01/pci_devs.h  |  50 ++++++
 4 files changed, 237 insertions(+), 147 deletions(-)

diff --git a/src/mainboard/amd/olivehillplus/agesawrapper.c b/src/mainboard/amd/olivehillplus/agesawrapper.c
index eecb45d..f88bfd5 100644
--- a/src/mainboard/amd/olivehillplus/agesawrapper.c
+++ b/src/mainboard/amd/olivehillplus/agesawrapper.c
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2012 Advanced Micro Devices, Inc.
+ *               2014 Sage Electronic Engineering, LLC
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -524,15 +525,12 @@ AGESA_STATUS agesawrapper_amds3laterestore(void)
 
 #ifndef __PRE_RAM__
 
-extern UINT8 picr_data[0x54], intr_data[0x54];
-
 AGESA_STATUS agesawrapper_fchs3laterestore(void)
 {
 	AGESA_STATUS status = AGESA_SUCCESS;
 
 	FCH_DATA_BLOCK      FchParams;
 	AMD_CONFIG_PARAMS StdHeader;
-	UINT8 byte;
 
 	StdHeader.HeapStatus = HEAP_SYSTEM_MEM;
 	StdHeader.HeapBasePtr = GetHeapBase(&StdHeader) + 0x10;
@@ -544,17 +542,6 @@ AGESA_STATUS agesawrapper_fchs3laterestore(void)
 	FchParams.StdHeader = &StdHeader;
 	s3_resume_init_data(&FchParams);
 	FchInitS3LateRestore(&FchParams);
-	/* PIC IRQ routine */
-	for (byte = 0x0; byte < sizeof(picr_data); byte ++) {
-		outb(byte, 0xC00);
-		outb(picr_data[byte], 0xC01);
-	}
-
-	/* APIC IRQ routine */
-	for (byte = 0x0; byte < sizeof(intr_data); byte ++) {
-		outb(byte | 0x80, 0xC00);
-		outb(intr_data[byte], 0xC01);
-	}
 
 	return status;
 }
diff --git a/src/mainboard/amd/olivehillplus/mainboard.c b/src/mainboard/amd/olivehillplus/mainboard.c
index f7f4101..127666c 100644
--- a/src/mainboard/amd/olivehillplus/mainboard.c
+++ b/src/mainboard/amd/olivehillplus/mainboard.c
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2012 Advanced Micro Devices, Inc.
+ * Copyright (C) 2014 Sage Electronic Engineering, LLC.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,12 +23,96 @@
 #include <device/pci.h>
 #include <arch/io.h>
 #include <device/pci_def.h>
+#include <southbridge/amd/amd_pci_util.h>
 #include <arch/acpi.h>
 #include "BiosCallOuts.h"
 #include <cpu/amd/agesa/s3_resume.h>
 #include "agesawrapper.h"
 #include <cpu/x86/msr.h>
 #include <cpu/amd/mtrr.h>
+#include <southbridge/amd/agesa/hudson/hudson.h>
+#include <southbridge/amd/agesa/hudson/pci_devs.h>
+#include <northbridge/amd/agesa/00730F01/pci_devs.h>
+
+/***********************************************************
+ * These arrays set up the FCH PCI_INTR registers 0xC00/0xC01.
+ * This table is responsible for physically routing the PIC and
+ * IOAPIC IRQs to the different PCI devices on the system.  It
+ * is read and written via registers 0xC00/0xC01 as an
+ * Index/Data pair.  These values are chipset and mainboard
+ * dependent and should be updated accordingly.
+ *
+ * These values are used by the PCI configuration space,
+ * MP Tables.  TODO: Make ACPI use these values too.
+ */
+const u8 mainboard_picr_data[FCH_INT_TABLE_SIZE] = {
+	/* INTA# - INTH# */
+	[0x00] = 0x03,0x04,0x05,0x07,0x0B,0x0A,0x0D,0x0C,
+	/* Misc-nil,0,1,2, INT from Serial irq */
+	[0x08] = 0xFA,0xF1,0x00,0x00,0x1F,0x1F,0x1F,0x1F,
+	/* SCI, SMBUS0, ASF, HDA, FC, RSVD, PerMon, SD */
+	[0x10] = 0x1F,0x1F,0x1F,0x03,0x1F,0x00,0x1F,0x1F,
+	/* IMC INT0 - 5 */
+	[0x20] = 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+	/* USB Devs 18/19/22 INTA-C */
+	[0x30] = 0x05,0x04,0x05,0x04,0x04,0x05,
+	/* SATA */
+	[0x41] = 0x04
+};
+
+const u8 mainboard_intr_data[FCH_INT_TABLE_SIZE] = {
+	/* INTA# - INTH# */
+	[0x00] = 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+	/* Misc-nil,0,1,2, INT from Serial irq */
+	[0x08] = 0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,
+	/* SCI, SMBUS0, ASF, HDA, FC, GEC, PerMon, SD */
+	[0x10] = 0x09,0x1F,0x1F,0x10,0x1F,0x10,0x1F,0x10,0x1F,
+	/* IMC INT0 - 5 */
+	[0x20] = 0x05,0x1F,0x1F,0x1F,0x1F,0x1F,
+	/* USB Devs 18/19/20/22 INTA-C */
+	[0x30] = 0x12,0x11,0x12,0x11,0x12,0x11,0x12,
+	/* SATA */
+	[0x41] = 0x13
+};
+
+/*
+ * This table defines the index into the picr/intr_data
+ * tables for each device.  Any enabled device and slot
+ * that uses hardware interrupts should have an entry
+ * in this table to define its index into the FCH
+ * PCI_INTR register 0xC00/0xC01.  This index will define
+ * the interrupt that it should use.  Putting PIRQ_A into
+ * the PIN A index for a device will tell that device to
+ * use PIC IRQ 10 if it uses PIN A for its hardware INT.
+ */
+static const struct pirq_struct mainboard_pirq_data[] = {
+	/* {PCI_devfn,	{PIN A, PIN B, PIN C, PIN D}}, */
+	{GFX_DEVFN,	{PIRQ_A, PIRQ_NC, PIRQ_NC, PIRQ_NC}},			/* VGA:		01.0 */
+	{ACTL_DEVFN,{PIRQ_NC, PIRQ_B, PIRQ_NC, PIRQ_NC}},			/* Audio:	01.1 */
+	{NB_PCIE_PORT1_DEVFN,	{PIRQ_A, PIRQ_B, PIRQ_C, PIRQ_D}},	/* x4 PCIe:	02.1 */
+	{NB_PCIE_PORT2_DEVFN,	{PIRQ_B, PIRQ_C, PIRQ_D, PIRQ_A}},	/* mPCIe:	02.2 */
+	{NB_PCIE_PORT3_DEVFN,	{PIRQ_C, PIRQ_D, PIRQ_A, PIRQ_B}},	/* NIC:		02.3 */
+	{NB_PCIE_PORT4_DEVFN,	{PIRQ_D, PIRQ_A, PIRQ_B, PIRQ_C}},	/* Edge:	02.4 */
+	{NB_PCIE_PORT5_DEVFN,	{PIRQ_E, PIRQ_F, PIRQ_G, PIRQ_H}},	/* Edge:	02.5 */
+	{XHCI_DEVFN,	{PIRQ_C, PIRQ_NC, PIRQ_NC, PIRQ_NC}},		/* XHCI:	10.0 */
+	{SATA_DEVFN,	{PIRQ_SATA, PIRQ_NC, PIRQ_NC, PIRQ_NC}},	/* SATA:	11.0 */
+	{OHCI1_DEVFN,	{PIRQ_OHCI1, PIRQ_NC, PIRQ_NC, PIRQ_NC}},	/* OHCI1:	12.0 */
+	{EHCI1_DEVFN,	{PIRQ_NC, PIRQ_EHCI1, PIRQ_NC, PIRQ_NC}},	/* EHCI1:	12.2 */
+	{OHCI2_DEVFN,	{PIRQ_OHCI2, PIRQ_NC, PIRQ_NC, PIRQ_NC}},	/* OHCI2:	13.0 */
+	{EHCI2_DEVFN,	{PIRQ_NC, PIRQ_EHCI2, PIRQ_NC, PIRQ_NC}},	/* EHCI2:	13.2 */
+	{SMBUS_DEVFN,	{PIRQ_SMBUS, PIRQ_NC, PIRQ_NC, PIRQ_NC}},	/* SMBUS:	14.0 */
+	{HDA_DEVFN,		{PIRQ_HDA, PIRQ_NC, PIRQ_NC, PIRQ_NC}},		/* HDA:		14.2 */
+	{SD_DEVFN,		{PIRQ_SD, PIRQ_NC, PIRQ_NC, PIRQ_NC}},		/* SD:		14.7 */
+};
+
+/* PIRQ Setup */
+static void pirq_setup(void)
+{
+	pirq_data_ptr = mainboard_pirq_data;
+	pirq_data_size = sizeof(mainboard_pirq_data) / sizeof(struct pirq_struct);
+	intr_data_ptr = mainboard_intr_data;
+	picr_data_ptr = mainboard_picr_data;
+}
 
 /**********************************************
  * enable the dedicated function in mainboard.
@@ -38,6 +123,9 @@ static void mainboard_enable(device_t dev)
 
 	if (acpi_is_wakeup_s3())
 		agesawrapper_fchs3earlyrestore();
+
+	/* Initialize the PIRQ data structures for consumption */
+	pirq_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/amd/olivehillplus/mptable.c b/src/mainboard/amd/olivehillplus/mptable.c
index 73660e4..b6b3b7d 100644
--- a/src/mainboard/amd/olivehillplus/mptable.c
+++ b/src/mainboard/amd/olivehillplus/mptable.c
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2012 Advanced Micro Devices, Inc.
+ * Copyright (C) 2014 Sage Electronic Engineering, LLC.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,159 +28,123 @@
 #include <cpu/amd/amdfam15.h>
 #include <arch/cpu.h>
 #include <cpu/x86/lapic.h>
-#include <southbridge/amd/agesa/hudson/hudson.h> /* pm_ioread() */
-
-u8 picr_data[0x54] = {
-	0x03,0x04,0x05,0x07,0x0B,0x0A,0x1F,0x1F,0xFA,0xF1,0x00,0x00,0x1F,0x1F,0x1F,0x1F,
-	0x1F,0x1F,0x1F,0x03,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x05,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x03,0x04,0x05,0x07
-};
-u8 intr_data[0x54] = {
-	0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,
-	0x09,0x1F,0x1F,0x10,0x1F,0x10,0x1F,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x05,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x12,0x11,0x12,0x11,0x12,0x11,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x10,0x11,0x12,0x13
-};
-
-static void smp_add_mpc_entry(struct mp_config_table *mc, unsigned length)
-{
-	mc->mpc_length += length;
-	mc->mpc_entry_count++;
-}
-
-static void my_smp_write_bus(struct mp_config_table *mc,
-			     unsigned char id, const char *bustype)
-{
-	struct mpc_config_bus *mpc;
-	mpc = smp_next_mpc_entry(mc);
-	memset(mpc, '\0', sizeof(*mpc));
-	mpc->mpc_type = MP_BUS;
-	mpc->mpc_busid = id;
-	memcpy(mpc->mpc_bustype, bustype, sizeof(mpc->mpc_bustype));
-	smp_add_mpc_entry(mc, sizeof(*mpc));
-}
+#include <southbridge/amd/amd_pci_util.h>
+#include <drivers/generic/ioapic/chip.h>
+#include <arch/ioapic.h>
 
 static void *smp_write_config_table(void *v)
 {
 	struct mp_config_table *mc;
 	int bus_isa;
-	u8 byte;
-
-	/*
-	 * By the time this function gets called, the IOAPIC registers
-	 * have been written so they can be read to get the correct
-	 * APIC ID and Version
-	 */
-	u8 ioapic_id = (io_apic_read(IO_APIC_ADDR, 0x00) >> 24);
-	u8 ioapic_ver = (io_apic_read(IO_APIC_ADDR, 0x01) & 0xFF);
 
+	/* Intialize the MP_Table */
 	mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN);
 
 	mptable_init(mc, LOCAL_APIC_ADDR);
 	memcpy(mc->mpc_oem, "AMD     ", 8);
 
-	smp_write_processors(mc);
+	/*
+	 * Type 0: Processor Entries:
+	 * LAPIC ID, LAPIC Version, CPU Flags:EN/BP,
+	 * CPU Signature (Stepping, Model, Family),
+	 * Feature Flags
+	 */
+ 	smp_write_processors(mc);
 
-	//mptable_write_buses(mc, NULL, &bus_isa);
-	my_smp_write_bus(mc, 0, "PCI   ");
-	my_smp_write_bus(mc, 1, "PCI   ");
-	bus_isa = 0x02;
-	my_smp_write_bus(mc, bus_isa, "ISA   ");
+	/* Get bus Configuration */
+	get_bus_conf();
+	/*
+	 * Type 1: bus Entries:
+	 * bus ID, bus Type
+	 */
+	mptable_write_buses(mc, NULL, &bus_isa);
+
+	/*
+	 * Type 2: I/O APICs:
+	 * APIC ID, Version, APIC Flags:EN, Address
+	 */
+	u8 ioapic_id = (io_apic_read(IO_APIC_ADDR, 0x00) >> 24);
+	u8 ioapic_ver = (io_apic_read(IO_APIC_ADDR, 0x01) & 0xFF);
 
-	/* I/O APICs:   APIC ID Version State   Address */
 	smp_write_ioapic(mc, ioapic_id, ioapic_ver, IO_APIC_ADDR);
 
-	smp_write_ioapic(mc, ioapic_id+1, 0x21, 0xFEC20000);
-	/* PIC IRQ routine */
-	for (byte = 0x0; byte < sizeof(picr_data); byte ++) {
-		outb(byte, 0xC00);
-		outb(picr_data[byte], 0xC01);
-	}
-
-	/* APIC IRQ routine */
-	for (byte = 0x0; byte < sizeof(intr_data); byte ++) {
-		outb(byte | 0x80, 0xC00);
-		outb(intr_data[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));
+	/*
+	 * Type 3: I/O Interrupt Table Entries:
+	 * Int Type, Int Polarity, Int Level, Source bus ID,
+	 * Source bus IRQ, Dest APIC ID, Dest PIN#
+	 */
+
 	mptable_add_isa_interrupts(mc, bus_isa, ioapic_id, 0);
 
 	/* PCI interrupts are level triggered, and are
 	 * associated with a specific bus/device/function tuple.
 	 */
-#define PCI_INT(bus, dev, int_sign, pin)				\
-        smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, (bus), (((dev)<<2)|(int_sign)), ioapic_id, (pin))
-
-	/* Internal VGA */
-	PCI_INT(0x0, 0x01, 0x0, intr_data[0x02]);
-	PCI_INT(0x0, 0x01, 0x1, intr_data[0x03]);
-
-	/* SMBUS */
-	PCI_INT(0x0, 0x14, 0x0, 0x10);
-
-	/* HD Audio */
-	PCI_INT(0x0, 0x14, 0x0, intr_data[0x13]);
-
-	/* USB */
-	PCI_INT(0x0, 0x12, 0x0, intr_data[0x30]);
-	PCI_INT(0x0, 0x12, 0x1, intr_data[0x31]);
-	PCI_INT(0x0, 0x13, 0x0, intr_data[0x32]);
-	PCI_INT(0x0, 0x13, 0x1, intr_data[0x33]);
-	PCI_INT(0x0, 0x16, 0x0, intr_data[0x34]);
-	PCI_INT(0x0, 0x16, 0x1, intr_data[0x35]);
-	PCI_INT(0x0, 0x14, 0x2, intr_data[0x36]);
-
-	/* sata */
-	PCI_INT(0x0, 0x11, 0x0, intr_data[0x40]);
-	PCI_INT(0x0, 0x11, 0x0, intr_data[0x41]);
-
-	/* on board NIC & Slot PCIE.  */
-
-	/* PCI slots */
-	device_t dev = dev_find_slot(0, PCI_DEVFN(0x14, 4));
-	if (dev && dev->enabled) {
-		u8 bus_pci = dev->link_list->secondary;
-		/* PCI_SLOT 0. */
-		PCI_INT(bus_pci, 0x5, 0x0, 0x14);
-		PCI_INT(bus_pci, 0x5, 0x1, 0x15);
-		PCI_INT(bus_pci, 0x5, 0x2, 0x16);
-		PCI_INT(bus_pci, 0x5, 0x3, 0x17);
-
-		/* PCI_SLOT 1. */
-		PCI_INT(bus_pci, 0x6, 0x0, 0x15);
-		PCI_INT(bus_pci, 0x6, 0x1, 0x16);
-		PCI_INT(bus_pci, 0x6, 0x2, 0x17);
-		PCI_INT(bus_pci, 0x6, 0x3, 0x14);
-
-		/* PCI_SLOT 2. */
-		PCI_INT(bus_pci, 0x7, 0x0, 0x16);
-		PCI_INT(bus_pci, 0x7, 0x1, 0x17);
-		PCI_INT(bus_pci, 0x7, 0x2, 0x14);
-		PCI_INT(bus_pci, 0x7, 0x3, 0x15);
-	}
-
-	/* PCIe Lan*/
-	PCI_INT(0x0, 0x06, 0x0, 0x13);
-
-	/* FCH PCIe PortA */
-	PCI_INT(0x0, 0x15, 0x0, 0x10);
-	/* FCH PCIe PortB */
-	PCI_INT(0x0, 0x15, 0x1, 0x11);
-	/* FCH PCIe PortC */
-	PCI_INT(0x0, 0x15, 0x2, 0x12);
-	/* FCH PCIe PortD */
-	PCI_INT(0x0, 0x15, 0x3, 0x13);
-
-	/*Local Ints:   Type    Polarity    Trigger     Bus ID   IRQ    APIC ID PIN# */
-	IO_LOCAL_INT(mp_ExtINT, 0, MP_APIC_ALL, 0x0);
-	IO_LOCAL_INT(mp_NMI, 0, MP_APIC_ALL, 0x1);
+#define PCI_INT(bus, dev, fn, pin) \
+		smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, (bus), (((dev)<<2)|(fn)), ioapic_id, (pin))
+
+	/* APU Internal Graphic Device */
+	PCI_INT(0x0, 0x01, 0x0, intr_data_ptr[PIRQ_C]);
+	PCI_INT(0x0, 0x01, 0x1, intr_data_ptr[PIRQ_D]);
+ 
+	/* SMBUS / ACPI */
+	PCI_INT(0x0, 0x14, 0x0, intr_data_ptr[PIRQ_SMBUS]);
+ 
+	/* Southbridge HD Audio */
+	PCI_INT(0x0, 0x14, 0x2, intr_data_ptr[PIRQ_HDA]);
+ 
+ 	/* USB */
+	PCI_INT(0x0, 0x12, 0x0, intr_data_ptr[PIRQ_OHCI1]);
+	PCI_INT(0x0, 0x12, 0x1, intr_data_ptr[PIRQ_EHCI1]);
+	PCI_INT(0x0, 0x13, 0x0, intr_data_ptr[PIRQ_OHCI2]);
+	PCI_INT(0x0, 0x13, 0x1, intr_data_ptr[PIRQ_EHCI2]);
+	PCI_INT(0x0, 0x16, 0x0, intr_data_ptr[PIRQ_OHCI3]);
+	PCI_INT(0x0, 0x16, 0x1, intr_data_ptr[PIRQ_EHCI3]);
+	PCI_INT(0x0, 0x14, 0x2, intr_data_ptr[PIRQ_OHCI4]);
+
+	/* SATA */
+	PCI_INT(0x0, 0x11, 0x0, intr_data_ptr[PIRQ_SATA]);
+ 
+	/* on board NIC & Slot PCIE */
+	PCI_INT(0x1, 0x0, 0x0, intr_data_ptr[PIRQ_E]);
+	PCI_INT(0x2, 0x0, 0x0, intr_data_ptr[PIRQ_F]);
+
+//	/* PCI slots */
+//	device_t dev = dev_find_slot(0, PCI_DEVFN(0x14, 4));
+//	if (dev && dev->enabled) {
+//		u8 bus_pci = dev->link_list->secondary;
+//		/* PCI_SLOT 0 */
+//		PCI_INT(bus_pci, 0x5, 0x0, intr_data_ptr[PIRQ_E]);
+//		PCI_INT(bus_pci, 0x5, 0x1, intr_data_ptr[PIRQ_F]);
+//		PCI_INT(bus_pci, 0x5, 0x2, intr_data_ptr[PIRQ_G]);
+//		PCI_INT(bus_pci, 0x5, 0x3, intr_data_ptr[PIRQ_H]);
+//
+//		/* PCI_SLOT 1 */
+//		PCI_INT(bus_pci, 0x6, 0x0, intr_data_ptr[PIRQ_F]);
+//		PCI_INT(bus_pci, 0x6, 0x1, intr_data_ptr[PIRQ_G]);
+//		PCI_INT(bus_pci, 0x6, 0x2, intr_data_ptr[PIRQ_H]);
+//		PCI_INT(bus_pci, 0x6, 0x3, intr_data_ptr[PIRQ_E]);
+//
+//		/* PCI_SLOT 2 */
+//		PCI_INT(bus_pci, 0x7, 0x0, intr_data_ptr[PIRQ_G]);
+//		PCI_INT(bus_pci, 0x7, 0x1, intr_data_ptr[PIRQ_H]);
+//		PCI_INT(bus_pci, 0x7, 0x2, intr_data_ptr[PIRQ_E]);
+//		PCI_INT(bus_pci, 0x7, 0x3, intr_data_ptr[PIRQ_F]);
+//
+//		PCI_INT(bus_pci, 0x0, 0x0, intr_data_ptr[PIRQ_C]);
+//		PCI_INT(bus_pci, 0x0, 0x1, intr_data_ptr[PIRQ_D]);
+//		PCI_INT(bus_pci, 0x0, 0x2, intr_data_ptr[PIRQ_E]);
+//	}
+//
+// 	/* PCIe Lan*/
+//	PCI_INT(0x0, 0x06, 0x0, intr_data_ptr[PIRQ_D]);
+
+	/*Local Ints:	 Type	Polarity	Trigger	 bus ID	 IRQ	APIC ID PIN# */
+#define IO_LOCAL_INT(type, intr, apic, pin) \
+		smp_write_lintsrc(mc, (type), MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH, bus_isa, (intr), (apic), (pin));
+
+	IO_LOCAL_INT(mp_ExtINT, 0x0, MP_APIC_ALL, 0x0);
+	IO_LOCAL_INT(mp_NMI, 0x0, MP_APIC_ALL, 0x1);
+ 
 	/* There is no extension information... */
 
 	/* Compute the checksums */
diff --git a/src/northbridge/amd/agesa/00730F01/pci_devs.h b/src/northbridge/amd/agesa/00730F01/pci_devs.h
new file mode 100755
index 0000000..5bd5bb9
--- /dev/null
+++ b/src/northbridge/amd/agesa/00730F01/pci_devs.h
@@ -0,0 +1,50 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Sage Electronic Engineering, LLC.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _AMD_00730F01_PCI_DEVS_H_
+#define _AMD_00730F01_PCI_DEVS_H_
+
+#define BUS0 0
+
+/* Graphics and Display */
+#define GFX_DEV 0x1
+#define GFX_FUNC 0
+#define GFX_DEVFN PCI_DEVFN(GFX_DEV,GFX_FUNC)
+
+/* Internal Audio Controller */
+#define ACTL_FUNC	1
+#define ACTL_DEVFN	PCI_DEVFN(GFX_DEV,ACTL_FUNC)
+
+/* PCIe Ports */
+#define NB_PCIE_PORT2_DEV 0x2
+#define NB_PCIE_FUNC0	0
+#define NB_PCIE_FUNC1	1
+#define NB_PCIE_FUNC2	2
+#define NB_PCIE_FUNC3	3
+#define NB_PCIE_FUNC4	4
+#define NB_PCIE_FUNC5	5
+#define NB_PCIE_PORT_DEVID 0x1439
+#define NB_PCIE_PORT0_DEVFN PCI_DEVFN(NB_PCIE_PORT2_DEV,NB_PCIE_FUNC0)
+#define NB_PCIE_PORT1_DEVFN PCI_DEVFN(NB_PCIE_PORT2_DEV,NB_PCIE_FUNC1)
+#define NB_PCIE_PORT2_DEVFN PCI_DEVFN(NB_PCIE_PORT2_DEV,NB_PCIE_FUNC2)
+#define NB_PCIE_PORT3_DEVFN PCI_DEVFN(NB_PCIE_PORT2_DEV,NB_PCIE_FUNC3)
+#define NB_PCIE_PORT4_DEVFN PCI_DEVFN(NB_PCIE_PORT2_DEV,NB_PCIE_FUNC4)
+#define NB_PCIE_PORT5_DEVFN PCI_DEVFN(NB_PCIE_PORT2_DEV,NB_PCIE_FUNC5)
+
+#endif /* _AMD_00730F01_PCI_DEVS_H_ */



More information about the coreboot-gerrit mailing list