1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (c) 2017 Intel Corporation
4 *
5 * Partially based on southcluster.asl for other x86 platforms
6 */
7
8Device (PCI0)
9{
10    Name (_HID, EISAID("PNP0A08"))    /* PCIe */
11    Name (_CID, EISAID("PNP0A03"))    /* PCI */
12
13    Name (_ADR, 0)
14    Name (_BBN, 0)
15
16    Name (MCRS, ResourceTemplate()
17    {
18        /* Bus Numbers */
19        WordBusNumber(ResourceProducer, MinFixed, MaxFixed, PosDecode,
20                0x0000, 0x0000, 0x00ff, 0x0000, 0x0100, , , PB00)
21
22        /* IO Region 0 */
23        WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
24                0x0000, 0x0000, 0x0cf7, 0x0000, 0x0cf8, , , PI00)
25
26        /* PCI Config Space */
27        IO(Decode16, 0x0cf8, 0x0cf8, 0x0001, 0x0008)
28
29        /* IO Region 1 */
30        WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
31                0x0000, 0x0d00, 0xffff, 0x0000, 0xf300, , , PI01)
32
33        /* GPIO Low Memory Region */
34        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
35                Cacheable, ReadWrite,
36                0x00000000, 0x000ddcc0, 0x000ddccf, 0x00000000,
37                0x00000010, , , GP00)
38
39        /* PSH Memory Region 0 */
40        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
41                Cacheable, ReadWrite,
42                0x00000000, 0x04819000, 0x04898fff, 0x00000000,
43                0x00080000, , , PSH0)
44
45        /* PSH Memory Region 1 */
46        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
47                Cacheable, ReadWrite,
48                0x00000000, 0x04919000, 0x04920fff, 0x00000000,
49                0x00008000, , , PSH1)
50
51        /* SST Memory Region */
52        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
53                Cacheable, ReadWrite,
54                0x00000000, 0x05e00000, 0x05ffffff, 0x00000000,
55                0x00200000, , , SST0)
56
57        /* PCI Memory Region */
58        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
59                Cacheable, ReadWrite,
60                0x00000000, 0x80000000, 0xffffffff, 0x00000000,
61                0x80000000, , , PMEM)
62    })
63
64    Method (_CRS, 0, Serialized)
65    {
66        Return (MCRS)
67    }
68
69    Method (_OSC, 4)
70    {
71        /* Check for proper GUID */
72        If (LEqual(Arg0, ToUUID("33db4d5b-1ff7-401c-9657-7441c03dd766"))) {
73            /* Let OS control everything */
74            Return (Arg3)
75        } Else {
76            /* Unrecognized UUID */
77            CreateDWordField(Arg3, 0, CDW1)
78            Or(CDW1, 4, CDW1)
79            Return (Arg3)
80        }
81    }
82
83    Device (SDHC)
84    {
85        Name (_ADR, 0x00010003)
86        Name (_DEP, Package (0x01)
87        {
88            GPIO
89        })
90        Name (PSTS, Zero)
91
92        Method (_STA)
93        {
94            Return (STA_VISIBLE)
95        }
96
97        Method (_PS3, 0, NotSerialized)
98        {
99        }
100
101        Method (_PS0, 0, NotSerialized)
102        {
103            If (PSTS == Zero)
104            {
105                If (^^GPIO.AVBL == One)
106                {
107                    ^^GPIO.WFD3 = One
108                    PSTS = One
109                }
110            }
111        }
112
113        /* BCM43340 */
114        Device (BRC1)
115        {
116            Name (_ADR, 0x01)
117            Name (_DEP, Package (0x01)
118            {
119                GPIO
120            })
121
122            Method (_STA)
123            {
124                Return (STA_VISIBLE)
125            }
126
127            Method (_RMV, 0, NotSerialized)
128            {
129                Return (Zero)
130            }
131
132            Method (_PS3, 0, NotSerialized)
133            {
134                If (^^^GPIO.AVBL == One)
135                {
136                    ^^^GPIO.WFD3 = Zero
137                    PSTS = Zero
138                }
139            }
140
141            Method (_PS0, 0, NotSerialized)
142            {
143                If (PSTS == Zero)
144                {
145                    If (^^^GPIO.AVBL == One)
146                    {
147                        ^^^GPIO.WFD3 = One
148                        PSTS = One
149                    }
150                }
151            }
152        }
153
154        Device (BRC2)
155        {
156            Name (_ADR, 0x02)
157            Method (_STA, 0, NotSerialized)
158            {
159                Return (STA_VISIBLE)
160            }
161
162            Method (_RMV, 0, NotSerialized)
163            {
164                Return (Zero)
165            }
166        }
167    }
168
169    Device (SPI5)
170    {
171        Name (_ADR, 0x00070001)
172        Name (RBUF, ResourceTemplate()
173        {
174            GpioIo(Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
175                "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 110 }
176            GpioIo(Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
177                "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 111 }
178            GpioIo(Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
179                "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 112 }
180            GpioIo(Exclusive, PullUp, 0, 0, IoRestrictionOutputOnly,
181                "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 113 }
182        })
183
184        Method (_CRS, 0, NotSerialized)
185        {
186            Return (RBUF)
187        }
188
189        /*
190         * See
191         * http://www.kernel.org/doc/Documentation/acpi/gpio-properties.txt
192         * for more information about GPIO bindings.
193         */
194        Name (_DSD, Package () {
195            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
196            Package () {
197                Package () {
198                    "cs-gpios", Package () {
199                        ^SPI5, 0, 0, 0,
200                        ^SPI5, 1, 0, 0,
201                        ^SPI5, 2, 0, 0,
202                        ^SPI5, 3, 0, 0,
203                    },
204                },
205            }
206        })
207
208        Method (_STA, 0, NotSerialized)
209        {
210            Return (STA_VISIBLE)
211        }
212    }
213
214    Device (I2C1)
215    {
216        Name (_ADR, 0x00080000)
217
218        Method (_STA, 0, NotSerialized)
219        {
220            Return (STA_VISIBLE)
221        }
222    }
223
224    Device (I2C6)
225    {
226        Name (_ADR, 0x00090001)
227
228        Method (_STA, 0, NotSerialized)
229        {
230            Return (STA_VISIBLE)
231        }
232    }
233
234    Device (GPIO)
235    {
236        Name (_ADR, 0x000c0000)
237
238        Method (_STA)
239        {
240            Return (STA_VISIBLE)
241        }
242
243        Name (AVBL, Zero)
244        Method (_REG, 2, NotSerialized)
245        {
246            If (Arg0 == 0x08)
247            {
248                AVBL = Arg1
249            }
250        }
251
252        OperationRegion (GPOP, GeneralPurposeIo, 0, 1)
253        Field (GPOP, ByteAcc, NoLock, Preserve)
254        {
255            Connection (
256                GpioIo(Exclusive, PullDefault, 0, 0, IoRestrictionOutputOnly,
257                    "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 96 }
258            ),
259            WFD3, 1,
260        }
261    }
262
263    Device (PWM0)
264    {
265        Name (_ADR, 0x00170000)
266
267        Method (_STA, 0, NotSerialized)
268        {
269            Return (STA_VISIBLE)
270        }
271    }
272
273    Device (HSU0)
274    {
275        Name (_ADR, 0x00040001)
276
277        Method (_STA, 0, NotSerialized)
278        {
279            Return (STA_VISIBLE)
280        }
281
282        Device (BTH0)
283        {
284            Name (_HID, "BCM2E95")
285            Name (_DEP, Package ()
286            {
287                GPIO,
288                HSU0
289            })
290
291            Method (_STA, 0, NotSerialized)
292            {
293                Return (STA_VISIBLE)
294            }
295
296            Method (_CRS, 0, Serialized)
297            {
298                Name (RBUF, ResourceTemplate ()
299                {
300                    UartSerialBus (0x0001C200, DataBitsEight, StopBitsOne,
301                        0xFC, LittleEndian, ParityTypeNone, FlowControlHardware,
302                        0x20, 0x20, "\\_SB.PCI0.HSU0", 0, ResourceConsumer, , )
303                    GpioInt (Level, ActiveHigh, Exclusive, PullNone, 0,
304                        "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 185 }
305                    GpioIo (Exclusive, PullDefault, 0, 0, IoRestrictionOutputOnly,
306                        "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 184 }
307                    GpioIo (Exclusive, PullDefault, 0, 0, IoRestrictionOutputOnly,
308                        "\\_SB.PCI0.GPIO", 0, ResourceConsumer, , ) { 71 }
309                })
310                Return (RBUF)
311            }
312
313            Name (_DSD, Package () {
314                ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
315                Package () {
316                    Package () { "host-wakeup-gpios", Package () { ^BTH0, 0, 0, 0 } },
317                    Package () { "device-wakeup-gpios", Package () { ^BTH0, 1, 0, 0 } },
318                    Package () { "shutdown-gpios", Package () { ^BTH0, 2, 0, 0 } },
319                }
320            })
321        }
322    }
323}
324
325Device (FLIS)
326{
327    Name (_HID, "INTC1002")
328    Name (_DDN, "Intel Merrifield Family-Level Interface Shim")
329    Name (RBUF, ResourceTemplate()
330    {
331        Memory32Fixed(ReadWrite, 0xFF0C0000, 0x00008000, )
332        PinGroup("spi5", ResourceProducer, ) { 90, 91, 92, 93, 94, 95, 96 }
333        PinGroup("uart0", ResourceProducer, ) { 115, 116, 117, 118 }
334        PinGroup("uart1", ResourceProducer, ) { 119, 120, 121, 122 }
335        PinGroup("uart2", ResourceProducer, ) { 123, 124, 125, 126 }
336        PinGroup("pwm0", ResourceProducer, ) { 144 }
337        PinGroup("pwm1", ResourceProducer, ) { 145 }
338        PinGroup("pwm2", ResourceProducer, ) { 132 }
339        PinGroup("pwm3", ResourceProducer, ) { 133 }
340    })
341
342    Method (_CRS, 0, NotSerialized)
343    {
344        Return (RBUF)
345    }
346
347    Method (_STA, 0, NotSerialized)
348    {
349        Return (STA_VISIBLE)
350    }
351}
352