3166a89bafbb79fc4284254385fa9139075f5165
[coreboot.git] / src / southbridge / intel / i82801gx / acpi / lpc.asl
1 /*
2  * This file is part of the coreboot project.
3  *
4  * Copyright (C) 2007-2009 coresystems GmbH
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation; version 2 of
9  * the License.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
19  * MA 02110-1301 USA
20  */
21
22 // Intel LPC Bus Device  - 0:1f.0
23
24 Device (LPCB)
25 {
26         Name(_ADR, 0x001f0000)
27
28         OperationRegion(LPC0, PCI_Config, 0x00, 0x100)
29         Field (LPC0, AnyAcc, NoLock, Preserve)
30         {
31                 Offset (0x40),
32                 PMBS,   16,     // PMBASE
33                 Offset (0x60),  // Interrupt Routing Registers
34                 PRTA,   8,
35                 PRTB,   8,
36                 PRTC,   8,
37                 PRTD,   8,
38                 Offset (0x68),
39                 PRTE,   8,
40                 PRTF,   8,
41                 PRTG,   8,
42                 PRTH,   8,
43
44                 Offset (0x80),  // IO Decode Ranges
45                 IOD0,   8,
46                 IOD1,   8,
47
48                 Offset (0xf0),  // RCBA
49                 RCEN,   1,
50                 ,       13,
51                 RCBA,   18,
52         }
53
54         #include "../../../southbridge/intel/i82801gx/acpi/irqlinks.asl"
55
56         #include "acpi/ec.asl"
57
58         Device (DMAC)           // DMA Controller
59         {
60                 Name(_HID, EISAID("PNP0200"))
61                 Name(_CRS, ResourceTemplate()
62                 {
63                         IO (Decode16, 0x00, 0x00, 0x01, 0x20)
64                         IO (Decode16, 0x81, 0x81, 0x01, 0x11)
65                         IO (Decode16, 0x93, 0x93, 0x01, 0x0d)
66                         IO (Decode16, 0xc0, 0xc0, 0x01, 0x20)
67                         DMA (Compatibility, NotBusMaster, Transfer8_16) { 4 }
68                 })
69         }
70
71         Device (FWH)            // Firmware Hub
72         {
73                 Name (_HID, EISAID("INT0800"))
74                 Name (_CRS, ResourceTemplate()
75                 {
76                         Memory32Fixed(ReadOnly, 0xff000000, 0x01000000)
77                 })
78         }
79
80         Device (HPET)
81         {
82                 Name (_HID, EISAID("PNP0103"))
83                 Name (_CID, 0x010CD041)
84
85                 Name(BUF0, ResourceTemplate()
86                 {
87                         Memory32Fixed(ReadOnly, 0xfed00000, 0x400, FED0)
88                 })
89
90                 Method (_STA, 0)        // Device Status
91                 {
92                         If (HPTE) {
93                                 // Note: Ancient versions of Windows don't want
94                                 // to see the HPET in order to work right
95                                 If (LGreaterEqual(OSYS, 2001)) {
96                                         Return (0xf)    // Enable and show device
97                                 } Else {
98                                         Return (0xb)    // Enable and don't show device
99                                 }
100                         }
101
102                         Return (0x0)    // Not enabled, don't show.
103                 }
104
105                 Method (_CRS, 0, Serialized) // Current resources
106                 {
107                         If (HPTE) {
108                                 CreateDWordField(BUF0, \_SB.PCI0.LPCB.HPET.FED0._BAS, HPT0)
109                                 If (Lequal(HPAS, 1)) {
110                                         Store(0xfed01000, HPT0)
111                                 }
112
113                                 If (Lequal(HPAS, 2)) {
114                                         Store(0xfed02000, HPT0)
115                                 }
116
117                                 If (Lequal(HPAS, 3)) {
118                                         Store(0xfed03000, HPT0)
119                                 }
120                         }
121
122                         Return (BUF0)
123                 }
124         }
125
126         Device(PIC)     // 8259 Interrupt Controller
127         {
128                 Name(_HID,EISAID("PNP0000"))
129                 Name(_CRS, ResourceTemplate()
130                 {
131                         IO (Decode16, 0x20, 0x20, 0x01, 0x02)
132                         IO (Decode16, 0x24, 0x24, 0x01, 0x02)
133                         IO (Decode16, 0x28, 0x28, 0x01, 0x02)
134                         IO (Decode16, 0x2c, 0x2c, 0x01, 0x02)
135                         IO (Decode16, 0x30, 0x30, 0x01, 0x02)
136                         IO (Decode16, 0x34, 0x34, 0x01, 0x02)
137                         IO (Decode16, 0x38, 0x38, 0x01, 0x02)
138                         IO (Decode16, 0x3c, 0x3c, 0x01, 0x02)
139                         IO (Decode16, 0xa0, 0xa0, 0x01, 0x02)
140                         IO (Decode16, 0xa4, 0xa4, 0x01, 0x02)
141                         IO (Decode16, 0xa8, 0xa8, 0x01, 0x02)
142                         IO (Decode16, 0xac, 0xac, 0x01, 0x02)
143                         IO (Decode16, 0xb0, 0xb0, 0x01, 0x02)
144                         IO (Decode16, 0xb4, 0xb4, 0x01, 0x02)
145                         IO (Decode16, 0xb8, 0xb8, 0x01, 0x02)
146                         IO (Decode16, 0xbc, 0xbc, 0x01, 0x02)
147                         IO (Decode16, 0x4d0, 0x4d0, 0x01, 0x02)
148                         IRQNoFlags () { 2 }
149                 })
150         }
151
152         Device(MATH)    // FPU
153         {
154                 Name (_HID, EISAID("PNP0C04"))
155                 Name (_CRS, ResourceTemplate()
156                 {
157                         IO (Decode16, 0xf0, 0xf0, 0x01, 0x01)
158                         IRQNoFlags() { 13 }
159                 })
160         }
161
162         Device(LDRC)    // LPC device: Resource consumption
163         {
164                 Name (_HID, EISAID("PNP0C02"))
165                 Name (_UID, 2)
166                 Name (_CRS, ResourceTemplate()
167                 {
168                         IO (Decode16, 0x2e, 0x2e, 0x1, 0x02)            // First SuperIO
169                         IO (Decode16, 0x4e, 0x4e, 0x1, 0x02)            // Second SuperIO
170                         IO (Decode16, 0x61, 0x61, 0x1, 0x01)            // NMI Status
171                         IO (Decode16, 0x63, 0x63, 0x1, 0x01)            // CPU Reserved
172                         IO (Decode16, 0x65, 0x65, 0x1, 0x01)            // CPU Reserved
173                         IO (Decode16, 0x67, 0x67, 0x1, 0x01)            // CPU Reserved
174                         IO (Decode16, 0x80, 0x80, 0x1, 0x01)            // Port 80 Post
175                         IO (Decode16, 0x92, 0x92, 0x1, 0x01)            // CPU Reserved
176                         IO (Decode16, 0xb2, 0xb2, 0x1, 0x02)            // SWSMI
177                         IO (Decode16, 0x800, 0x800, 0x1, 0x10)          // ACPI I/O trap
178                         IO (Decode16, DEFAULT_PMBASE, DEFAULT_PMBASE, 0x1, 0x80)        // ICH7-M ACPI
179                         IO (Decode16, DEFAULT_GPIOBASE, DEFAULT_GPIOBASE, 0x1, 0x40)    // ICH7-M GPIO
180                 })
181         }
182
183         Device (RTC)    // Real Time Clock
184         {
185                 Name (_HID, EISAID("PNP0B00"))
186                 Name (_CRS, ResourceTemplate()
187                 {
188                         IO (Decode16, 0x70, 0x70, 1, 8)
189 // Disable as Windows doesn't like it, and systems don't seem to use it.
190 //                      IRQNoFlags() { 8 }
191                 })
192         }
193
194         Device (TIMR)   // Intel 8254 timer
195         {
196                 Name(_HID, EISAID("PNP0100"))
197                 Name(_CRS, ResourceTemplate()
198                 {
199                         IO (Decode16, 0x40, 0x40, 0x01, 0x04)
200                         IO (Decode16, 0x50, 0x50, 0x10, 0x04)
201                         IRQNoFlags() {0}
202                 })
203         }
204
205         #include "acpi/superio.asl"
206
207 #ifdef ENABLE_TPM
208         Device (TPM)            // Trusted Platform Module
209         {
210                 Name(_HID, EISAID("IFX0102"))
211                 Name(_CID, 0x310cd041)
212                 Name(_UID, 1)
213
214                 Method(_STA, 0)
215                 {
216                         If (TPMP) {
217                                 Return (0xf)
218                         }
219                         Return (0x0)
220                 }
221
222                 Name(_CRS, ResourceTemplate() {
223                         IO (Decode16, 0x2e, 0x2e, 0x01, 0x02)
224                         IO (Decode16, 0x6f0, 0x6f0, 0x01, 0x10)
225                         Memory32Fixed (ReadWrite, 0xfed40000, 0x5000)
226                         IRQ (Edge, Activehigh, Exclusive) { 6 }
227                 })
228         }
229 #endif
230
231         Device (PS2K)           // Keyboard
232         {
233                 Name(_HID, EISAID("PNP0303"))
234                 Name(_CID, EISAID("PNP030B"))
235
236                 Name(_CRS, ResourceTemplate()
237                 {
238                         IO (Decode16, 0x60, 0x60, 0x01, 0x01)
239                         IO (Decode16, 0x64, 0x64, 0x01, 0x01)
240                         IRQ (Edge, ActiveHigh, Exclusive) { 0x01 } // IRQ 1
241                 })
242
243                 Method (_STA, 0)
244                 {
245                         Return (0xf)
246                 }
247         }
248
249         Device (PS2M)           // Mouse
250         {
251                 Name(_HID, EISAID("PNP0F13"))
252                 Name(_CRS, ResourceTemplate()
253                 {
254                         IRQ (Edge, ActiveHigh, Exclusive) { 0x0c } // IRQ 12
255                 })
256
257                 Method(_STA, 0)
258                 {
259                         Return (0xf)
260                 }
261         }
262
263 #ifdef ENABLE_FDC
264         Device (FDC0)           // Floppy controller
265         {
266                 Name (_HID, EisaId ("PNP0700"))
267                 Method (_STA, 0, NotSerialized)
268                 {
269                         Return (0x0f) // FIXME
270                 }
271
272                 Name(_CRS, ResourceTemplate()
273                 {
274                         IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
275                         IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
276                         IRQNoFlags () {6}
277                         DMA (Compatibility, NotBusMaster, Transfer8) {2}
278                 })
279
280                 Name(_PRS, ResourceTemplate()
281                 {
282                         IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
283                         IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
284                         IRQNoFlags () {6}
285                         DMA (Compatibility, NotBusMaster, Transfer8) {2}
286                 })
287
288         }
289 #endif
290 }