blob: 63d450c5f98aac3bd08a10927006b2d467ad92b3 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* PIRQ routing control is in PCR ITSS region.
*
* Due to what appears to be an ACPI interpreter bug we do not use
* the PCRB() method here as it may not be defined yet because the method
* definition depends on the order of the include files in pch.asl.
*
* https://bugs.acpica.org/show_bug.cgi?id=1201
*/
OperationRegion (ITSS, SystemMemory,
PCR_ITSS_PIRQA_ROUT + CONFIG_PCR_BASE_ADDRESS + (PID_ITSS << PCR_PORTID_SHIFT),
8)
Field (ITSS, ByteAcc, NoLock, Preserve)
{
PIRA, 8, /* PIRQA Routing Control */
PIRB, 8, /* PIRQB Routing Control */
PIRC, 8, /* PIRQC Routing Control */
PIRD, 8, /* PIRQD Routing Control */
PIRE, 8, /* PIRQE Routing Control */
PIRF, 8, /* PIRQF Routing Control */
PIRG, 8, /* PIRQG Routing Control */
PIRH, 8, /* PIRQH Routing Control */
}
Name (IREN, 0x80) /* Interrupt Routing Enable */
Name (IREM, 0x0f) /* Interrupt Routing Mask */
Device (LNKA)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 1)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRA & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRA = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRA & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRA |= ^^IREN
}
}
Device (LNKB)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 2)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRB & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRB = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRB & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRB |= ^^IREN
}
}
Device (LNKC)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 3)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRC & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRC = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRC & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRC |= ^^IREN
}
}
Device (LNKD)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 4)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRD & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRD = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRD & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRD |= ^^IREN
}
}
Device (LNKE)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 5)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRE & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRE = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRE & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRE |= ^^IREN
}
}
Device (LNKF)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 6)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRF & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRF = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRF & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRF |= ^^IREN
}
}
Device (LNKG)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 7)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRG & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRG = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRG & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRG |= ^^IREN
}
}
Device (LNKH)
{
Name (_HID, EISAID ("PNP0C0F"))
Name (_UID, 8)
Name (_PRS, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared)
{ 3, 4, 5, 6, 10, 11, 12, 14, 15 }
})
Method (_CRS, 0, Serialized)
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared) {}
})
CreateWordField (RTLA, 1, IRQ0)
IRQ0 = 0
/* Set the bit from PIRQ Routing Register */
IRQ0 = 1 << (^^PIRH & ^^IREM)
Return (RTLA)
}
Method (_SRS, 1, Serialized)
{
CreateWordField (Arg0, 1, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
^^PIRH = Local0
}
Method (_STA, 0, Serialized)
{
If (^^PIRH & ^^IREN) {
Return (0x9)
} Else {
Return (0xb)
}
}
Method (_DIS, 0, Serialized)
{
^^PIRH |= ^^IREN
}
}