Home | History | Annotate | Download | only in acpi
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (C) 2007-2009 coresystems GmbH
      4  * Copyright (C) 2016 Bin Meng <bmeng.cn (at) gmail.com>
      5  *
      6  * Modified from coreboot src/soc/intel/baytrail/acpi/irqlinks.asl
      7  */
      8 
      9 /*
     10  * Intel chipset PIRQ routing control ASL description
     11  *
     12  * The programming interface is common to most Intel chipsets. But the PRTx
     13  * registers may be mapped to different blocks. Some chipsets map them to LPC
     14  * device (00:1f:00) PCI configuration space (like TunnelCreek, Quark), while
     15  * some newer Atom SoCs (like BayTrail, Braswell) map them to Intel Legacy
     16  * Block (ILB) memory space.
     17  *
     18  * This file defines 8 PCI IRQ link devices which corresponds to 8 PIRQ lines
     19  * PIRQ A/B/C/D/E/F/G/H. To incorperate this file, the PRTx registers must be
     20  * defined somewhere else in the platform's ASL files.
     21  */
     22 
     23 Device (LNKA)
     24 {
     25 	Name(_HID, EISAID("PNP0C0F"))
     26 	Name(_UID, 1)
     27 
     28 	/* Disable method */
     29 	Method(_DIS, 0, Serialized)
     30 	{
     31 		Store(0x80, PRTA)
     32 	}
     33 
     34 	/* Possible Resource Settings for this Link */
     35 	Name(_PRS, ResourceTemplate()
     36 	{
     37 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
     38 	})
     39 
     40 	/* Current Resource Settings for this link */
     41 	Method(_CRS, 0, Serialized)
     42 	{
     43 		Name(RTLA, ResourceTemplate()
     44 		{
     45 			IRQ(Level, ActiveLow, Shared) {}
     46 		})
     47 		CreateWordField(RTLA, 1, IRQ0)
     48 
     49 		/* Clear the WordField */
     50 		Store(Zero, IRQ0)
     51 
     52 		/* Set the bit from PRTA */
     53 		ShiftLeft(1, And(PRTA, 0x0f), IRQ0)
     54 
     55 		Return (RTLA)
     56 	}
     57 
     58 	/* Set Resource Setting for this IRQ link */
     59 	Method(_SRS, 1, Serialized)
     60 	{
     61 		CreateWordField(Arg0, 1, IRQ0)
     62 
     63 		/* Which bit is set? */
     64 		FindSetRightBit(IRQ0, Local0)
     65 
     66 		Decrement(Local0)
     67 		Store(Local0, PRTA)
     68 	}
     69 
     70 	/* Status */
     71 	Method(_STA, 0, Serialized)
     72 	{
     73 		If (And(PRTA, 0x80)) {
     74 			Return (STA_DISABLED)
     75 		} Else {
     76 			Return (STA_INVISIBLE)
     77 		}
     78 	}
     79 }
     80 
     81 Device (LNKB)
     82 {
     83 	Name(_HID, EISAID("PNP0C0F"))
     84 	Name(_UID, 2)
     85 
     86 	/* Disable method */
     87 	Method(_DIS, 0, Serialized)
     88 	{
     89 		Store(0x80, PRTB)
     90 	}
     91 
     92 	/* Possible Resource Settings for this Link */
     93 	Name(_PRS, ResourceTemplate()
     94 	{
     95 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
     96 	})
     97 
     98 	/* Current Resource Settings for this link */
     99 	Method(_CRS, 0, Serialized)
    100 	{
    101 		Name(RTLB, ResourceTemplate()
    102 		{
    103 			IRQ(Level, ActiveLow, Shared) {}
    104 		})
    105 		CreateWordField(RTLB, 1, IRQ0)
    106 
    107 		/* Clear the WordField */
    108 		Store(Zero, IRQ0)
    109 
    110 		/* Set the bit from PRTB */
    111 		ShiftLeft(1, And(PRTB, 0x0f), IRQ0)
    112 
    113 		Return (RTLB)
    114 	}
    115 
    116 	/* Set Resource Setting for this IRQ link */
    117 	Method(_SRS, 1, Serialized)
    118 	{
    119 		CreateWordField(Arg0, 1, IRQ0)
    120 
    121 		/* Which bit is set? */
    122 		FindSetRightBit(IRQ0, Local0)
    123 
    124 		Decrement(Local0)
    125 		Store(Local0, PRTB)
    126 	}
    127 
    128 	/* Status */
    129 	Method(_STA, 0, Serialized)
    130 	{
    131 		If (And(PRTB, 0x80)) {
    132 			Return (STA_DISABLED)
    133 		} Else {
    134 			Return (STA_INVISIBLE)
    135 		}
    136 	}
    137 }
    138 
    139 Device (LNKC)
    140 {
    141 	Name(_HID, EISAID("PNP0C0F"))
    142 	Name(_UID, 3)
    143 
    144 	/* Disable method */
    145 	Method(_DIS, 0, Serialized)
    146 	{
    147 		Store(0x80, PRTC)
    148 	}
    149 
    150 	/* Possible Resource Settings for this Link */
    151 	Name(_PRS, ResourceTemplate()
    152 	{
    153 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
    154 	})
    155 
    156 	/* Current Resource Settings for this link */
    157 	Method(_CRS, 0, Serialized)
    158 	{
    159 		Name(RTLC, ResourceTemplate()
    160 		{
    161 			IRQ(Level, ActiveLow, Shared) {}
    162 		})
    163 		CreateWordField(RTLC, 1, IRQ0)
    164 
    165 		/* Clear the WordField */
    166 		Store(Zero, IRQ0)
    167 
    168 		/* Set the bit from PRTC */
    169 		ShiftLeft(1, And(PRTC, 0x0f), IRQ0)
    170 
    171 		Return (RTLC)
    172 	}
    173 
    174 	/* Set Resource Setting for this IRQ link */
    175 	Method(_SRS, 1, Serialized)
    176 	{
    177 		CreateWordField(Arg0, 1, IRQ0)
    178 
    179 		/* Which bit is set? */
    180 		FindSetRightBit(IRQ0, Local0)
    181 
    182 		Decrement(Local0)
    183 		Store(Local0, PRTC)
    184 	}
    185 
    186 	/* Status */
    187 	Method(_STA, 0, Serialized)
    188 	{
    189 		If (And(PRTC, 0x80)) {
    190 			Return (STA_DISABLED)
    191 		} Else {
    192 			Return (STA_INVISIBLE)
    193 		}
    194 	}
    195 }
    196 
    197 Device (LNKD)
    198 {
    199 	Name(_HID, EISAID("PNP0C0F"))
    200 	Name(_UID, 4)
    201 
    202 	/* Disable method */
    203 	Method(_DIS, 0, Serialized)
    204 	{
    205 		Store(0x80, PRTD)
    206 	}
    207 
    208 	/* Possible Resource Settings for this Link */
    209 	Name(_PRS, ResourceTemplate()
    210 	{
    211 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
    212 	})
    213 
    214 	/* Current Resource Settings for this link */
    215 	Method(_CRS, 0, Serialized)
    216 	{
    217 		Name(RTLD, ResourceTemplate()
    218 		{
    219 			IRQ(Level, ActiveLow, Shared) {}
    220 		})
    221 		CreateWordField(RTLD, 1, IRQ0)
    222 
    223 		/* Clear the WordField */
    224 		Store(Zero, IRQ0)
    225 
    226 		/* Set the bit from PRTD */
    227 		ShiftLeft(1, And(PRTD, 0x0f), IRQ0)
    228 
    229 		Return (RTLD)
    230 	}
    231 
    232 	/* Set Resource Setting for this IRQ link */
    233 	Method(_SRS, 1, Serialized)
    234 	{
    235 		CreateWordField(Arg0, 1, IRQ0)
    236 
    237 		/* Which bit is set? */
    238 		FindSetRightBit(IRQ0, Local0)
    239 
    240 		Decrement(Local0)
    241 		Store(Local0, PRTD)
    242 	}
    243 
    244 	/* Status */
    245 	Method(_STA, 0, Serialized)
    246 	{
    247 		If (And(PRTD, 0x80)) {
    248 			Return (STA_DISABLED)
    249 		} Else {
    250 			Return (STA_INVISIBLE)
    251 		}
    252 	}
    253 }
    254 
    255 Device (LNKE)
    256 {
    257 	Name(_HID, EISAID("PNP0C0F"))
    258 	Name(_UID, 5)
    259 
    260 	/* Disable method */
    261 	Method(_DIS, 0, Serialized)
    262 	{
    263 		Store(0x80, PRTE)
    264 	}
    265 
    266 	/* Possible Resource Settings for this Link */
    267 	Name(_PRS, ResourceTemplate()
    268 	{
    269 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
    270 	})
    271 
    272 	/* Current Resource Settings for this link */
    273 	Method(_CRS, 0, Serialized)
    274 	{
    275 		Name(RTLE, ResourceTemplate()
    276 		{
    277 			IRQ(Level, ActiveLow, Shared) {}
    278 		})
    279 		CreateWordField(RTLE, 1, IRQ0)
    280 
    281 		/* Clear the WordField */
    282 		Store(Zero, IRQ0)
    283 
    284 		/* Set the bit from PRTE */
    285 		ShiftLeft(1, And(PRTE, 0x0f), IRQ0)
    286 
    287 		Return (RTLE)
    288 	}
    289 
    290 	/* Set Resource Setting for this IRQ link */
    291 	Method(_SRS, 1, Serialized)
    292 	{
    293 		CreateWordField(Arg0, 1, IRQ0)
    294 
    295 		/* Which bit is set? */
    296 		FindSetRightBit(IRQ0, Local0)
    297 
    298 		Decrement(Local0)
    299 		Store(Local0, PRTE)
    300 	}
    301 
    302 	/* Status */
    303 	Method(_STA, 0, Serialized)
    304 	{
    305 		If (And(PRTE, 0x80)) {
    306 			Return (STA_DISABLED)
    307 		} Else {
    308 			Return (STA_INVISIBLE)
    309 		}
    310 	}
    311 }
    312 
    313 Device (LNKF)
    314 {
    315 	Name(_HID, EISAID("PNP0C0F"))
    316 	Name(_UID, 6)
    317 
    318 	/* Disable method */
    319 	Method(_DIS, 0, Serialized)
    320 	{
    321 		Store(0x80, PRTF)
    322 	}
    323 
    324 	/* Possible Resource Settings for this Link */
    325 	Name(_PRS, ResourceTemplate()
    326 	{
    327 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
    328 	})
    329 
    330 	/* Current Resource Settings for this link */
    331 	Method(_CRS, 0, Serialized)
    332 	{
    333 		Name(RTLF, ResourceTemplate()
    334 		{
    335 			IRQ(Level, ActiveLow, Shared) {}
    336 		})
    337 		CreateWordField(RTLF, 1, IRQ0)
    338 
    339 		/* Clear the WordField */
    340 		Store(Zero, IRQ0)
    341 
    342 		/* Set the bit from PRTF */
    343 		ShiftLeft(1, And(PRTF, 0x0f), IRQ0)
    344 
    345 		Return (RTLF)
    346 	}
    347 
    348 	/* Set Resource Setting for this IRQ link */
    349 	Method(_SRS, 1, Serialized)
    350 	{
    351 		CreateWordField(Arg0, 1, IRQ0)
    352 
    353 		/* Which bit is set? */
    354 		FindSetRightBit(IRQ0, Local0)
    355 
    356 		Decrement(Local0)
    357 		Store(Local0, PRTF)
    358 	}
    359 
    360 	/* Status */
    361 	Method(_STA, 0, Serialized)
    362 	{
    363 		If (And(PRTF, 0x80)) {
    364 			Return (STA_DISABLED)
    365 		} Else {
    366 			Return (STA_INVISIBLE)
    367 		}
    368 	}
    369 }
    370 
    371 Device (LNKG)
    372 {
    373 	Name(_HID, EISAID("PNP0C0F"))
    374 	Name(_UID, 7)
    375 
    376 	/* Disable method */
    377 	Method(_DIS, 0, Serialized)
    378 	{
    379 		Store(0x80, PRTG)
    380 	}
    381 
    382 	/* Possible Resource Settings for this Link */
    383 	Name(_PRS, ResourceTemplate()
    384 	{
    385 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
    386 	})
    387 
    388 	/* Current Resource Settings for this link */
    389 	Method(_CRS, 0, Serialized)
    390 	{
    391 		Name(RTLG, ResourceTemplate()
    392 		{
    393 			IRQ(Level, ActiveLow, Shared) {}
    394 		})
    395 		CreateWordField(RTLG, 1, IRQ0)
    396 
    397 		/* Clear the WordField */
    398 		Store(Zero, IRQ0)
    399 
    400 		/* Set the bit from PRTG */
    401 		ShiftLeft(1, And(PRTG, 0x0f), IRQ0)
    402 
    403 		Return (RTLG)
    404 	}
    405 
    406 	/* Set Resource Setting for this IRQ link */
    407 	Method(_SRS, 1, Serialized)
    408 	{
    409 		CreateWordField(Arg0, 1, IRQ0)
    410 
    411 		/* Which bit is set? */
    412 		FindSetRightBit(IRQ0, Local0)
    413 
    414 		Decrement(Local0)
    415 		Store(Local0, PRTG)
    416 	}
    417 
    418 	/* Status */
    419 	Method(_STA, 0, Serialized)
    420 	{
    421 		If (And(PRTG, 0x80)) {
    422 			Return (STA_DISABLED)
    423 		} Else {
    424 			Return (STA_INVISIBLE)
    425 		}
    426 	}
    427 }
    428 
    429 Device (LNKH)
    430 {
    431 	Name(_HID, EISAID("PNP0C0F"))
    432 	Name(_UID, 8)
    433 
    434 	/* Disable method */
    435 	Method(_DIS, 0, Serialized)
    436 	{
    437 		Store(0x80, PRTH)
    438 	}
    439 
    440 	/* Possible Resource Settings for this Link */
    441 	Name(_PRS, ResourceTemplate()
    442 	{
    443 		IRQ(Level, ActiveLow, Shared) { 5, 6, 7, 10, 11, 12, 14, 15 }
    444 	})
    445 
    446 	/* Current Resource Settings for this link */
    447 	Method(_CRS, 0, Serialized)
    448 	{
    449 		Name(RTLH, ResourceTemplate()
    450 		{
    451 			IRQ(Level, ActiveLow, Shared) {}
    452 		})
    453 		CreateWordField(RTLH, 1, IRQ0)
    454 
    455 		/* Clear the WordField */
    456 		Store(Zero, IRQ0)
    457 
    458 		/* Set the bit from PRTH */
    459 		ShiftLeft(1, And(PRTH, 0x0f), IRQ0)
    460 
    461 		Return (RTLH)
    462 	}
    463 
    464 	/* Set Resource Setting for this IRQ link */
    465 	Method(_SRS, 1, Serialized)
    466 	{
    467 		CreateWordField(Arg0, 1, IRQ0)
    468 
    469 		/* Which bit is set? */
    470 		FindSetRightBit(IRQ0, Local0)
    471 
    472 		Decrement(Local0)
    473 		Store(Local0, PRTH)
    474 	}
    475 
    476 	/* Status */
    477 	Method(_STA, 0, Serialized)
    478 	{
    479 		If (And(PRTH, 0x80)) {
    480 			Return (STA_DISABLED)
    481 		} Else {
    482 			Return (STA_INVISIBLE)
    483 		}
    484 	}
    485 }
    486