Change-Id: Iea915b60d8ec9a1a7a2aa5926b0277cae58113a6 Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr> Reviewed-on: https://review.coreboot.org/c/coreboot/+/46242 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Sumeet R Pawnikar <sumeet.r.pawnikar@intel.com> Reviewed-by: Michael Niewöhner <foss@mniewoehner.de>
421 lines
6.7 KiB
Plaintext
421 lines
6.7 KiB
Plaintext
/* 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
|
|
}
|
|
}
|