util/sconfig: Remove unused ioapic and irq keywords
[coreboot.git] / src / southbridge / intel / lynxpoint / acpi / serialio.asl
blob845949ce988e85d871ba4e48ebbec542a5b72b0e
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 // Intel Serial IO Devices in ACPI Mode
5 // Serial IO Device BAR0 and BAR1 is 4KB
6 #define SIO_BAR_LEN 0x1000
8 // This is defined in SSDT2 which is generated at boot based
9 // on whether or not the device is enabled in ACPI mode.
10 External (\S0EN)
11 External (\S1EN)
12 External (\S2EN)
13 External (\S3EN)
14 External (\S4EN)
15 External (\S5EN)
16 External (\S6EN)
17 External (\S7EN)
19 // Serial IO Resource Consumption for BAR1
20 Device (SIOR)
22         Name (_HID, EISAID ("PNP0C02"))
23         Name (_UID, 4)
25         Name (RBUF, ResourceTemplate ()
26         {
27                 // Serial IO BAR1 (PCI config space) resources
28                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D0) // SDMA
29                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D1) // I2C0
30                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D2) // I2C1
31                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D3) // SPI0
32                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D4) // SPI1
33                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D5) // UART0
34                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D6) // UART1
35                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, B1D7) // SDIO
36         })
38         // Update BAR1 address and length if set in NVS
39         Method (_CRS, 0, NotSerialized)
40         {
41                 // SDMA
42                 If (\S0B1 != 0) {
43                         CreateDwordField (^RBUF, ^B1D0._BAS, B0AD)
44                         CreateDwordField (^RBUF, ^B1D0._LEN, B0LN)
45                         B0AD = \S0B1
46                         B0LN = SIO_BAR_LEN
47                 }
49                 // I2C0
50                 If (\S1B1 != 0) {
51                         CreateDwordField (^RBUF, ^B1D1._BAS, B1AD)
52                         CreateDwordField (^RBUF, ^B1D1._LEN, B1LN)
53                         B1AD = \S1B1
54                         B1LN = SIO_BAR_LEN
55                 }
57                 // I2C1
58                 If (\S2B1 != 0) {
59                         CreateDwordField (^RBUF, ^B1D2._BAS, B2AD)
60                         CreateDwordField (^RBUF, ^B1D2._LEN, B2LN)
61                         B2AD = \S2B1
62                         B2LN = SIO_BAR_LEN
63                 }
65                 // SPI0
66                 If (\S3B1 != 0) {
67                         CreateDwordField (^RBUF, ^B1D3._BAS, B3AD)
68                         CreateDwordField (^RBUF, ^B1D3._LEN, B3LN)
69                         B3AD = \S3B1
70                         B3LN = SIO_BAR_LEN
71                 }
73                 // SPI1
74                 If (\S4B1 != 0) {
75                         CreateDwordField (^RBUF, ^B1D4._BAS, B4AD)
76                         CreateDwordField (^RBUF, ^B1D4._LEN, B4LN)
77                         B4AD = \S4B1
78                         B4LN = SIO_BAR_LEN
79                 }
81                 // UART0
82                 If (\S5B1 != 0) {
83                         CreateDwordField (^RBUF, ^B1D5._BAS, B5AD)
84                         CreateDwordField (^RBUF, ^B1D5._LEN, B5LN)
85                         B5AD = \S5B1
86                         B5LN = SIO_BAR_LEN
87                 }
89                 // UART1
90                 If (\S6B1 != 0) {
91                         CreateDwordField (^RBUF, ^B1D6._BAS, B6AD)
92                         CreateDwordField (^RBUF, ^B1D6._LEN, B6LN)
93                         B6AD = \S6B1
94                         B6LN = SIO_BAR_LEN
95                 }
97                 // SDIO
98                 If (\S7B1 != 0) {
99                         CreateDwordField (^RBUF, ^B1D7._BAS, B7AD)
100                         CreateDwordField (^RBUF, ^B1D7._LEN, B7LN)
101                         B7AD = \S7B1
102                         B7LN = SIO_BAR_LEN
103                 }
105                 Return (RBUF)
106         }
109 Device (SDMA)
111         // Serial IO DMA Controller
112         Name (_HID, "INTL9C60")
113         Name (_UID, 1)
115         // BAR0 is assigned during PCI enumeration and saved into NVS
116         Name (RBUF, ResourceTemplate ()
117         {
118                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
119                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {7}
120         })
122         Method (_CRS, 0, NotSerialized)
123         {
124                 // Update BAR0 address and length if set in NVS
125                 If (\S0B0 != 0) {
126                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
127                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
128                         B0AD = \S0B0
129                         B0LN = SIO_BAR_LEN
130                 }
132                 Return (RBUF)
133         }
135         Method (_STA, 0, NotSerialized)
136         {
137                 If (\S0EN == 0) {
138                         Return (0x0)
139                 } Else {
140                         Return (0xF)
141                 }
142         }
145 Device (I2C0)
147         // Serial IO I2C0 Controller
148         Name (_HID, "INT33C2")
149         Name (_CID, "INT33C2")
150         Name (_UID, 1)
152         Name (SSCN, Package () { 432, 507, 30 })
153         Name (FMCN, Package () { 72, 160, 30 })
155         // BAR0 is assigned during PCI enumeration and saved into NVS
156         Name (RBUF, ResourceTemplate ()
157         {
158                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
159                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {7}
160         })
162         // DMA channels are only used if Serial IO DMA controller is enabled
163         Name (DBUF, ResourceTemplate ()
164         {
165                 FixedDMA (0x18, 4, Width32Bit, DMA1) // Tx
166                 FixedDMA (0x19, 5, Width32Bit, DMA2) // Rx
167         })
169         Method (_CRS, 0, NotSerialized)
170         {
171                 // Update BAR0 address and length if set in NVS
172                 If (\S1B0 != 0) {
173                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
174                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
175                         B0AD = \S1B0
176                         B0LN = SIO_BAR_LEN
177                 }
179                 // Check if Serial IO DMA Controller is enabled
180                 If (\_SB.PCI0.SDMA._STA != 0) {
181                         Return (ConcatenateResTemplate (RBUF, DBUF))
182                 } Else {
183                         Return (RBUF)
184                 }
185         }
187         Method (_STA, 0, NotSerialized)
188         {
189                 If (\S1EN == 0) {
190                         Return (0x0)
191                 } Else {
192                         Return (0xF)
193                 }
194         }
196         // Access to PCI Config in ACPI mode
197         OperationRegion (KEYS, SystemMemory, \S1B1, 0x100)
198         Field (KEYS, DWordAcc, NoLock, Preserve)
199         {
200                 Offset (0x84),
201                 PSAT, 32,
202         }
204         // Put controller in D0 state
205         Method (_PS0, 0, Serialized)
206         {
207                 ^PSAT &= 0xfffffffc
208                 Local0 = ^PSAT // Read back after writing
210                 // Use Local0 to avoid iasl warning: Method Local is set but never used
211                 Local0 &= Ones
212         }
214         // Put controller in D3Hot state
215         Method (_PS3, 0, Serialized)
216         {
217                 ^PSAT |= 0x00000003
218                 Local0 = ^PSAT // Read back after writing
220                 // Use Local0 to avoid iasl warning: Method Local is set but never used
221                 Local0 &= Ones
222         }
225 Device (I2C1)
227         // Serial IO I2C1 Controller
228         Name (_HID, "INT33C3")
229         Name (_CID, "INT33C3")
230         Name (_UID, 1)
232         Name (SSCN, Package () { 432, 507, 30 })
233         Name (FMCN, Package () { 72, 160, 30 })
235         // BAR0 is assigned during PCI enumeration and saved into NVS
236         Name (RBUF, ResourceTemplate ()
237         {
238                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
239                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {7}
240         })
242         // DMA channels are only used if Serial IO DMA controller is enabled
243         Name (DBUF, ResourceTemplate ()
244         {
245                 FixedDMA (0x1A, 6, Width32Bit, DMA1) // Tx
246                 FixedDMA (0x1B, 7, Width32Bit, DMA2) // Rx
247         })
249         Method (_CRS, 0, NotSerialized)
250         {
251                 // Update BAR0 address and length if set in NVS
252                 If (\S2B0 != 0) {
253                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
254                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
255                         B0AD = \S2B0
256                         B0LN = SIO_BAR_LEN
257                 }
259                 // Check if Serial IO DMA Controller is enabled
260                 If (\_SB.PCI0.SDMA._STA != 0) {
261                         Return (ConcatenateResTemplate (RBUF, DBUF))
262                 } Else {
263                         Return (RBUF)
264                 }
265         }
267         Method (_STA, 0, NotSerialized)
268         {
269                 If (\S2EN == 0) {
270                         Return (0x0)
271                 } Else {
272                         Return (0xF)
273                 }
274         }
276         // Access to PCI Config in ACPI mode
277         OperationRegion (KEYS, SystemMemory, \S2B1, 0x100)
278         Field (KEYS, DWordAcc, NoLock, Preserve)
279         {
280                 Offset (0x84),
281                 PSAT, 32,
282         }
284         // Put controller in D0 state
285         Method (_PS0, 0, Serialized)
286         {
287                 ^PSAT &= 0xfffffffc
288                 Local0 = ^PSAT // Read back after writing
290                 // Use Local0 to avoid iasl warning: Method Local is set but never used
291                 Local0 &= Ones
292         }
294         // Put controller in D3Hot state
295         Method (_PS3, 0, Serialized)
296         {
297                 ^PSAT |= 0x00000003
298                 Local0 = ^PSAT // Read back after writing
300                 // Use Local0 to avoid iasl warning: Method Local is set but never used
301                 Local0 &= Ones
302         }
305 Device (SPI0)
307         // Serial IO SPI0 Controller
308         Name (_HID, "INT33C0")
309         Name (_CID, "INT33C0")
310         Name (_UID, 1)
312         // BAR0 is assigned during PCI enumeration and saved into NVS
313         Name (RBUF, ResourceTemplate ()
314         {
315                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
316                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {7}
317         })
319         Method (_CRS, 0, NotSerialized)
320         {
321                 // Update BAR0 address and length if set in NVS
322                 If (\S3B0 != 0) {
323                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
324                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
325                         B0AD = \S3B0
326                         B0LN = SIO_BAR_LEN
327                 }
329                 Return (RBUF)
330         }
332         Method (_STA, 0, NotSerialized)
333         {
334                 If (\S3EN == 0) {
335                         Return (0x0)
336                 } Else {
337                         Return (0xF)
338                 }
339         }
342 Device (SPI1)
344         // Serial IO SPI1 Controller
345         Name (_HID, "INT33C1")
346         Name (_CID, "INT33C1")
347         Name (_UID, 1)
349         // BAR0 is assigned during PCI enumeration and saved into NVS
350         Name (RBUF, ResourceTemplate ()
351         {
352                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
353                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {7}
354         })
356         // DMA channels are only used if Serial IO DMA controller is enabled
357         Name (DBUF, ResourceTemplate ()
358         {
359                 FixedDMA (0x10, 0, Width32Bit, DMA1) // Tx
360                 FixedDMA (0x11, 1, Width32Bit, DMA2) // Rx
361         })
363         Method (_CRS, 0, NotSerialized)
364         {
365                 // Update BAR0 address and length if set in NVS
366                 If (\S4B0 != 0) {
367                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
368                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
369                         B0AD = \S4B0
370                         B0LN = SIO_BAR_LEN
371                 }
373                 // Check if Serial IO DMA Controller is enabled
374                 If (\_SB.PCI0.SDMA._STA != 0) {
375                         Return (ConcatenateResTemplate (RBUF, DBUF))
376                 } Else {
377                         Return (RBUF)
378                 }
379         }
381         Method (_STA, 0, NotSerialized)
382         {
383                 If (\S4EN == 0) {
384                         Return (0x0)
385                 } Else {
386                         Return (0xF)
387                 }
388         }
391 Device (UAR0)
393         // Serial IO UART0 Controller
394         Name (_HID, "INT33C4")
395         Name (_CID, "INT33C4")
396         Name (_UID, 1)
398         // BAR0 is assigned during PCI enumeration and saved into NVS
399         Name (RBUF, ResourceTemplate ()
400         {
401                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
402                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {13}
403         })
405         // DMA channels are only used if Serial IO DMA controller is enabled
406         Name (DBUF, ResourceTemplate ()
407         {
408                 FixedDMA (0x16, 2, Width32Bit, DMA1) // Tx
409                 FixedDMA (0x17, 3, Width32Bit, DMA2) // Rx
410         })
412         Method (_CRS, 0, NotSerialized)
413         {
414                 // Update BAR0 address and length if set in NVS
415                 If (\S5B0 != 0) {
416                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
417                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
418                         B0AD = \S5B0
419                         B0LN = SIO_BAR_LEN
420                 }
422                 // Check if Serial IO DMA Controller is enabled
423                 If (\_SB.PCI0.SDMA._STA != 0) {
424                         Return (ConcatenateResTemplate (RBUF, DBUF))
425                 } Else {
426                         Return (RBUF)
427                 }
428         }
430         Method (_STA, 0, NotSerialized)
431         {
432                 If (\S5EN == 0) {
433                         Return (0x0)
434                 } Else {
435                         Return (0xF)
436                 }
437         }
440 Device (UAR1)
442         // Serial IO UART1 Controller
443         Name (_HID, "INT33C5")
444         Name (_CID, "INT33C5")
445         Name (_UID, 1)
447         // BAR0 is assigned during PCI enumeration and saved into NVS
448         Name (RBUF, ResourceTemplate ()
449         {
450                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
451                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {13}
452         })
454         Method (_CRS, 0, NotSerialized)
455         {
456                 // Update BAR0 address and length if set in NVS
457                 If (\S6B0 != 0) {
458                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
459                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
460                         B0AD = \S6B0
461                         B0LN = SIO_BAR_LEN
462                 }
464                 Return (RBUF)
465         }
467         Method (_STA, 0, NotSerialized)
468         {
469                 If (\S6EN == 0) {
470                         Return (0x0)
471                 } Else {
472                         Return (0xF)
473                 }
474         }
477 Device (SDIO)
479         // Serial IO SDIO Controller
480         Name (_HID, "INT33C6")
481         Name (_CID, "PNP0D40")
482         Name (_UID, 1)
484         // BAR0 is assigned during PCI enumeration and saved into NVS
485         Name (RBUF, ResourceTemplate ()
486         {
487                 Memory32Fixed (ReadWrite, 0x00000000, 0x00000000, BAR0)
488                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , ) {5}
489         })
491         Method (_CRS, 0, NotSerialized)
492         {
493                 // Update BAR0 address and length if set in NVS
494                 If (\S7B0 != 0) {
495                         CreateDwordField (^RBUF, ^BAR0._BAS, B0AD)
496                         CreateDwordField (^RBUF, ^BAR0._LEN, B0LN)
497                         B0AD = \S7B0
498                         B0LN = SIO_BAR_LEN
499                 }
501                 Return (RBUF)
502         }
504         Method (_STA, 0, NotSerialized)
505         {
506                 If (\S7EN == 0) {
507                         Return (0x0)
508                 } Else {
509                         Return (0xF)
510                 }
511         }