From fed129b0d533ad9aa6dd2cb0b507582d92536869 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Wed, 8 Jun 2011 10:18:43 -0500 Subject: Add ACPI automatic PIC/APIC interrupt routing logic for ck804 Change-Id: I2d462ca1220ea31af243c7a58a1dc33c39e9c840 Signed-off-by: Jonathan A. Kollasch Reviewed-on: http://review.coreboot.org/13 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- src/southbridge/nvidia/ck804/acpi/ck804.asl | 618 ++++++++++++++++++++++++++++ 1 file changed, 618 insertions(+) create mode 100644 src/southbridge/nvidia/ck804/acpi/ck804.asl (limited to 'src') 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) + } + } +} -- cgit v1.2.3