summaryrefslogtreecommitdiff
path: root/src/southbridge/nvidia/ck804
diff options
context:
space:
mode:
authorJonathan A. Kollasch <jakllsch@kollasch.net>2011-06-08 10:18:43 -0500
committerPatrick Georgi <patrick@georgi-clan.de>2011-06-10 19:44:04 +0200
commitfed129b0d533ad9aa6dd2cb0b507582d92536869 (patch)
treef651ba8d67243a006d3e90338acd33d08016e91e /src/southbridge/nvidia/ck804
parentc55bcdecf70586ba575af403f26f92dbbbc05190 (diff)
downloadcoreboot-fed129b0d533ad9aa6dd2cb0b507582d92536869.tar.xz
Add ACPI automatic PIC/APIC interrupt routing logic for ck804
Change-Id: I2d462ca1220ea31af243c7a58a1dc33c39e9c840 Signed-off-by: Jonathan A. Kollasch <jakllsch@kollasch.net> Reviewed-on: http://review.coreboot.org/13 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/southbridge/nvidia/ck804')
-rw-r--r--src/southbridge/nvidia/ck804/acpi/ck804.asl618
1 files changed, 618 insertions, 0 deletions
diff --git a/src/southbridge/nvidia/ck804/acpi/ck804.asl b/src/southbridge/nvidia/ck804/acpi/ck804.asl
new file mode 100644
index 0000000000..f12931c814
--- /dev/null
+++ b/src/southbridge/nvidia/ck804/acpi/ck804.asl
@@ -0,0 +1,618 @@
+Device (LPCB) {
+ Name (_ADR, 0x00010000)
+ OperationRegion (LPC0, PCI_Config, 0x00, 0x100)
+ Field (LPC0, AnyAcc, NoLock, Preserve) {
+ Offset (0x7c),
+ INTA, 4, INTB, 4,
+ INTC, 4, INTD, 4,
+ INTE, 4, INTF, 4,
+ INTG, 4, INTH, 4,
+
+ INTI, 4, INTJ, 4,
+ INTK, 4, INTL, 4,
+ INTM, 4, INTN, 4,
+ INTO, 4, INTP, 4,
+
+ INTQ, 4, INTR, 4,
+ INTS, 4, INTT, 4,
+ INTU, 4, INTV, 4,
+ INTW, 4, INTX, 4,
+ }
+}
+
+/* set "A", 8259 interrupts */
+Name (PRSA, ResourceTemplate () {
+ IRQ(Level, ActiveLow, Shared) {5, 7, 10, 11}
+})
+Method (CRSA, 1, Serialized) {
+ Name (LRTL, ResourceTemplate() {
+ IRQ(Level, ActiveLow, Shared) {}
+ })
+ CreateWordField(LRTL, 1, LIRQ)
+ ShiftLeft(1, Arg0, LIRQ)
+ Return (LRTL)
+}
+Method (SRSA, 1, Serialized) {
+ CreateWordField(Arg0, 1, LIRQ)
+ FindSetRightBit(LIRQ, Local0)
+ Decrement(Local0)
+ Return (Local0)
+}
+
+/* set "B", external (PCI) APIC interrupts */
+Name (PRSB, ResourceTemplate () {
+ Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) {
+ 16, 17, 18, 19,
+ }
+})
+Method (CRSB, 1, Serialized) {
+ Name (LRTL, ResourceTemplate() {
+ Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,,) { 0 }
+ })
+ CreateDWordField (LRTL, 5, LIRQ)
+ If (LEqual (Arg0, 8)) {
+ Store (16, LIRQ)
+ } ElseIf (LEqual (Arg0, 1)) {
+ Store (17, LIRQ)
+ } ElseIf (LEqual (Arg0, 2)) {
+ Store (18, LIRQ)
+ } ElseIf (LEqual (Arg0, 13)) {
+ Store (19, LIRQ)
+ } Else {
+ Store (0, LIRQ)
+ }
+ Return (LRTL)
+}
+Method (SRSB, 1, Serialized) {
+ CreateDWordField(Arg0, 5, LIRQ)
+ If (LEqual (LIRQ, 16)) {
+ Return (8)
+ } ElseIf (LEqual (LIRQ, 17)) {
+ Return (1)
+ } ElseIf (LEqual (LIRQ, 18)) {
+ Return (2)
+ } ElseIf (LEqual (LIRQ, 19)) {
+ Return (13)
+ } Else {
+ Return (0)
+ }
+}
+
+/* set "C", southbridge APIC interrupts */
+Name (PRSC, ResourceTemplate () {
+ Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) {
+ 20, 21, 22, 23,
+ }
+})
+Method (CRSC, 1, Serialized) {
+ Name (LRTL, ResourceTemplate() {
+ Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,,) { 0 }
+ })
+ CreateDWordField (LRTL, 5, LIRQ)
+ If (LEqual (Arg0, 8)) {
+ Store (20, LIRQ)
+ } ElseIf (LEqual (Arg0, 13)) {
+ Store (21, LIRQ)
+ } ElseIf (LEqual (Arg0, 2)) {
+ Store (22, LIRQ)
+ } ElseIf (LEqual (Arg0, 1)) {
+ Store (23, LIRQ)
+ } Else {
+ Store (0, LIRQ)
+ }
+ Return (LRTL)
+}
+Method (SRSC, 1, Serialized) {
+ CreateDWordField(Arg0, 5, LIRQ)
+ If (LEqual (LIRQ, 20)) {
+ Return (8)
+ } ElseIf (LEqual (LIRQ, 21)) {
+ Return (13)
+ } ElseIf (LEqual (LIRQ, 22)) {
+ Return (2)
+ } ElseIf (LEqual (LIRQ, 23)) {
+ Return (1)
+ } Else {
+ Return (0)
+ }
+}
+
+Device (LNKA) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 1)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTA) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTA)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSB)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSB(\_SB.PCI0.LPCB.INTA))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTA))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSB(Arg0), \_SB.PCI0.LPCB.INTA)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTA)
+ }
+ }
+}
+Device (LNKB) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 2)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTB) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTB)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSB)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSB(\_SB.PCI0.LPCB.INTB))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTB))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSB(Arg0), \_SB.PCI0.LPCB.INTB)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTB)
+ }
+ }
+}
+Device (LNKC) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 3)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTC) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTC)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSB)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSB(\_SB.PCI0.LPCB.INTC))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTC))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSB(Arg0), \_SB.PCI0.LPCB.INTC)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTC)
+ }
+ }
+}
+Device (LNKD) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 4)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTD) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTD)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSB)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSB(\_SB.PCI0.LPCB.INTD))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTD))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSB(Arg0), \_SB.PCI0.LPCB.INTD)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTD)
+ }
+ }
+}
+Device (LNKE) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 5)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTE) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTE)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSB)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSB(\_SB.PCI0.LPCB.INTE))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTE))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSB(Arg0), \_SB.PCI0.LPCB.INTE)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTE)
+ }
+ }
+}
+Device (LLAS) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 6)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTK) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTK)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTK))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTK))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), \_SB.PCI0.LPCB.INTK)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTK)
+ }
+ }
+}
+Device (LUOH) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 7)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTQ) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTQ)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTQ))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTQ))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), \_SB.PCI0.LPCB.INTQ)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTQ)
+ }
+ }
+}
+Device (LUEH) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 8)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTL) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTL)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTL))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTL))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), \_SB.PCI0.LPCB.INTL)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTL)
+ }
+ }
+}
+Device (LAUD) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 9)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTU) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTU)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTU))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTU))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), \_SB.PCI0.LPCB.INTU)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTU)
+ }
+ }
+}
+Device (LMOD) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 10)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTV) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTV)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTV))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTV))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), \_SB.PCI0.LPCB.INTV)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTV)
+ }
+ }
+}
+Device (LPA0) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 11)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTW) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTW)
+ Store (0, \_SB.PCI0.LPCB.INTX)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTW))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTW))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), Local0)
+ } Else {
+ Store (SRSA(Arg0), Local0)
+ }
+ Store(Local0, \_SB.PCI0.LPCB.INTW)
+ Store(Local0, \_SB.PCI0.LPCB.INTX)
+ }
+}
+Device (LSA0) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 12)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTP) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTP)
+ Store (0, \_SB.PCI0.LPCB.INTG)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTP))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTP))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), Local0)
+ } Else {
+ Store (SRSA(Arg0), Local0)
+ }
+ Store(Local0, \_SB.PCI0.LPCB.INTP)
+ Store(Local0, \_SB.PCI0.LPCB.INTG)
+ }
+}
+Device (LSA1) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 13)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTO) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTO)
+ Store (0, \_SB.PCI0.LPCB.INTF)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTO))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTO))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), Local0)
+ } Else {
+ Store (SRSA(Arg0), Local0)
+ }
+ Store(Local0, \_SB.PCI0.LPCB.INTO)
+ Store(Local0, \_SB.PCI0.LPCB.INTF)
+ }
+}
+Device (LEMA) {
+ Name (_HID, EISAID ("PNP0C0F"))
+ Name (_UID, 14)
+ Method (_STA, 0, Serialized) {
+ If (\_SB.PCI0.LPCB.INTS) {
+ Return (0xb)
+ } Else {
+ Return (0x9)
+ }
+ }
+ Method (_DIS, 0, Serialized) {
+ Store (0, \_SB.PCI0.LPCB.INTS)
+ }
+ Method (_PRS, 0, Serialized) {
+ If (PICM) {
+ Return (PRSC)
+ } Else {
+ Return (PRSA)
+ }
+ }
+ Method (_CRS, 0, Serialized) {
+ If (PICM) {
+ Return (CRSC(\_SB.PCI0.LPCB.INTS))
+ } Else {
+ Return (CRSA(\_SB.PCI0.LPCB.INTS))
+ }
+ }
+ Method (_SRS, 1, Serialized) {
+ If (PICM) {
+ Store (SRSC(Arg0), \_SB.PCI0.LPCB.INTS)
+ } Else {
+ Store (SRSA(Arg0), \_SB.PCI0.LPCB.INTS)
+ }
+ }
+}