blob: 613e0848db8ac67aa1468350b127af6961981d97 [file] [log] [blame]
/*
* This file is part of the coreboot project.
*
*
* 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.
*/
/*
* Refer to IntelĀ® C620 Series Chipset Platform Controller Hub EDS section 20.11
* CONFIG_PCR_BASE_ADDRESS 0xfd000000 0x3100
* (0xfd000000 | ((uint8_t)(0xC4) << 16) | (uint16_t)(0x3100) = 0xFDC43100
*
* PIRQ routing control is in PCR ITSS region.
*/
OperationRegion (ITSS, SystemMemory,
Add (PCR_ITSS_PIRQA_ROUT,
Add (CONFIG_PCR_BASE_ADDRESS,
ShiftLeft (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 */
Name (PRSA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{3,4,5,6,7,10,11,12,14,15}
})
Alias (PRSA, PRSB)
Name (PRSC, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{3,4,5,6,10,11,12,14,15}
})
Alias (PRSC, PRSD)
Alias (PRSA, PRSE)
Alias (PRSA, PRSF)
Alias (PRSA, PRSG)
Alias (PRSA, PRSH)
#define MAKE_LINK_DEV(id,uid) \
Device (LNK##id) \
{ \
Name (_HID, EISAID ("PNP0C0F")) \
Name (_UID, ##uid) \
Method (_PRS, 0, NotSerialized) \
{ \
Return (PRS##id) \
} \
Method (_CRS, 0, Serialized) \
{ \
Name (RTLA, ResourceTemplate () \
{ \
IRQ (Level, ActiveLow, Shared) {} \
}) \
CreateWordField (RTLA, 1, IRQ0) \
Store (Zero, IRQ0) \
\
/* Set the bit from PIRQ Routing Register */ \
ShiftLeft (1, And (^^PIR##id, ^^IREM), IRQ0) \
Return (RTLA) \
} \
Method (_SRS, 1, Serialized) \
{ \
CreateWordField (Arg0, 1, IRQ0) \
FindSetRightBit (IRQ0, Local0) \
Decrement (Local0) \
Store (Local0, ^^PIR##id) \
} \
Method (_STA, 0, Serialized) \
{ \
If (And (^^PIR##id, ^^IREN)) { \
Return (0x9) \
} Else { \
Return (0xb) \
} \
} \
Method (_DIS, 0, Serialized) \
{ \
Or (^^PIR##id, ^^IREN, ^^PIR##id) \
} \
}
MAKE_LINK_DEV(A,1)
MAKE_LINK_DEV(B,2)
MAKE_LINK_DEV(C,3)
MAKE_LINK_DEV(D,4)
MAKE_LINK_DEV(E,5)
MAKE_LINK_DEV(F,6)
MAKE_LINK_DEV(G,7)
MAKE_LINK_DEV(H,8)