util/intelp2m: Print the current project version
[coreboot2.git] / src / soc / amd / stoneyridge / acpi / usb.asl
blob1626bb6f0c62bc7c0c169138a056d8aef92e259e
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 /* 0:12.0 - EHCI */
4 Device(EHC0) {
5         Name(_ADR, 0x00120000)
6         Name(_PRW, Package() { 0xb, 3 })
7         Device (RHUB) {
8                 Name (_ADR, 0)
9                 Device (HS01) { Name (_ADR, 1) }
10                 Device (HS02) { Name (_ADR, 2) }
11                 Device (HS03) { Name (_ADR, 3) }
12                 Device (HS04) { Name (_ADR, 4) }
13                 Device (HS05) { Name (_ADR, 5) }
14                 Device (HS06) { Name (_ADR, 6) }
15                 Device (HS07) { Name (_ADR, 7) }
16                 Device (HS08) { Name (_ADR, 8) }
17         }
19         Name(_PR0, Package() { P0U2 }) /* Indicate support for D0 */
20         Name(_PR3, Package() { P3U2 }) /* Indicate support for D3cold */
22         Method(_S0W,0) {
23                 Return(0)
24         }
26         Method(_S3W,0) {
27                 Return(4)
28         }
30         Method(_S4W,0) {
31                 Return(4)
32         }
33 } /* end EHC0 */
36 /* 0:10.0 - XHCI 0*/
37 Device(XHC0) {
38         Name(_ADR, 0x00100000)
39         Name(_PRW, Package() { 0xb, 3 })
40         Device (SS01) { Name (_ADR, 1) }
41         Device (SS02) { Name (_ADR, 2) }
42         Device (SS03) { Name (_ADR, 3) }
44         Name(_PR0, Package() { P0U3 }) /* Indicate support for D0 */
45         Name(_PR3, Package() { P3U3 }) /* Indicate support for D3cold */
47         Method(_S0W,0) {
48                 Return(0)
49         }
51         Method(_S3W,0) {
52                 Return(4)
53         }
55         Method(_S4W,0) {
56                 Return(4)
57         }
59 } /* end XHC0 */
61 Scope(\_SB)
63         Name(XHD0, 0)
64         Name(XHD3, 0)
65         PowerResource(P0U3, 0, 0) {
66                 Method(_STA) {
67                         Return(XHD0)
68                 }
69                 Method(_ON) {
70                         XHD0 = 0x01
71                 }
72                 Method(_OFF) {
73                         XHD0 = 0x00
74                 }
75         }
76         PowerResource(P3U3, 0, 0) {
77                 Method(_STA) {
78                         Return(XHD3)
79                 }
80                 Method(_ON) {
81                         XHD3 = 0x01
82                 }
83                 Method(_OFF) {
84                         XHD3 = 0x00
85                 }
86         }
88         Name(EHD0, 0)
89         Name(EHD3, 0)
90         PowerResource(P0U2, 0, 0) {
91                 Method(_STA) {
92                         Return(EHD0)
93                 }
94                 Method(_ON) {
95                         EHD0 = 0x01
96                 }
97                 Method(_OFF) {
98                         EHD0 = 0x00
99                 }
100         }
101         PowerResource(P3U2, 0, 0) {
102                 Method(_STA) {
103                         Return(EHD3)
104                 }
105                 Method(_ON) {
106                         EHD3 = 0x01
107                 }
108                 Method(_OFF) {
109                         EHD3 = 0x00
110                 }
111         }
114 OperationRegion(EHMC, SystemMemory, EH10, 0x100)
115 Field(EHMC, DwordAcc, NoLock, Preserve)
117         Offset(0xb0),
118         , 5,
119         ESIM, 1,
122 Method(U2D3,0, Serialized)
124         if (EH10 != 0) {
125                 EHBA = EH10
126                 EHME = 1
127                 SSIM = ESIM
128         }
130         if (E_PS == 3) {
131                 RQTY = 0
132                 RQ18 = 1
134                 Local0 = U2SR
135                 while (Local0) {
136                         Local0 = U2SR
137                 }
139                 U2PD = 0
141                 Local0 = U2DS
142                 while (Local0 != 0) {
143                         Local0 = U2DS
144                 }
146                 U2TD = 0x03
148                 if (U3TD == 0x03) { /* Shutdown USB2 PLL */
149                     PWGC (0x40, 0)
150                     U2RP = 1
151                 }
152         }
155 Method(U2D0,0, Serialized)
157         PWGC (0x40, 1)
158         U2RP = 0
159         U2TD =  0x00
161         U2TD = 0
162         U2PD = 1
164         Local0 = U2DS
165         while (Local0 != 0x7) {
166                 Local0 = U2DS
167         }
169         RQTY = 1
170         RQ18 = 1
171         Local0 = U2SR
172         while (!Local0) {
173                 Local0 = U2SR
174         }
175         EH2C = EHID
178         if (EH10 != 0) {
179                 EHBA = EH10
180                 EHME = 1
181                 ESIM = SSIM
182         }
184         EH54 = ES54
185         EH64 = ES64
188 Method(LXFW,3, Serialized)  //Load Xhci FirmWare
190         FWLM = 1  /* Firmware Load Mode */
191         ROAM = Arg0 /* ROM/RAM */
192         UA04 = Arg1
193         UA08 = Arg2
194         FPLS = 1    /* Firmware Preload Start */
195         Local0 = FPLC /* Firmware Preload Complete */
196         while (!Local0) {
197                 Local0 = FPLC
198         }
199         FPLS = 0
202 Method(U3D3,0, Serialized)
204         if (U_PS == 3) {
205                 X0_S ()
207                 PGA3 |= 0x20 /* SwUsb3SlpShutdown */
208                 Local0 = PGA3 & 0x20
209                 while (!Local0) { /* wait for it to complete */
210                         Local0 = PGA3 & 0x20
211                 }
212                 UD3P = 1 /* U3P_D3Cold_PWRDN */
214                 U3PD = 0 /* PwrOnDev */
215                 Local0 = U3DS
216                 while (Local0) { /* RstBState, RefClkOkState, PwrRstBState */
217                         Local0 = U3DS
218                 }
220                 U3TD = 0x3 /* TargetedDeviceState */
222                 U3RP = 1 /* USB3_RefClk_Pwdn */
224                 if (U2TD == 0x3) { /* If EHCI targeted in D3cold */
225                         PGA3 &= 0x9f /* SwUsb2S5RstB */
226                         U2RP = 1   /* USB2_RefClk_Pwdn */
227                 }
228                 U3PG = 0 /* XhcPwrGood  */
229                 U3PS = 1  /* Usb3PowerSel */
230         }
233 Method(U3D0,0, Serialized)
235         U3PS = 0 /* Usb3PowerSel */
236         U3PG = 1  /* XhcPwrGood  */
238         U2RP = 0
239         U3RP = 0
241         Local0 = PGA3 & 0xdf
242         Local0 |= 0x40
243         PGA3 = Local0 /* SwUsb2S5RstB */
245         U3TD = 0 /* TargetedDeviceState */
246         U3PD = 1  /* PwrOnDev */
248         Local0 = U3DS /* wait for RstBState, RefClkOkState, PwrRstBState */
249         while (Local0 != 0x7) {
250                 Local0 = U3DS
251         }
253         Local0 = U3PY /* USB3 PHY Lock */
254         while (!Local0) {
255                 Local0 = U3PY
256         }
258         U3PR = 0 /* U3P_RESTORE_RESET */
260         Local0 = AUSS /* AutoSizeStart */
261         if (Local0 != 1) {
262                 AUSS = 1
263         }
264         Local0 = AUSS
265         while (Local0 != 1) {
266                 Local0 = AUSS
267         }
269         LXFW (1, FW00, FW01)
270         LXFW (0, FW02, FW03)
272         X0_R ()
274         U3PR = 1  /* U3P_RESTORE_RESET */
275         UD3P = 0 /* U3P_D3Cold_PWRDN */
276         U3TD = 1  /* TargetedDeviceState */
279 Name (SVBF, Buffer (0x1000) {0})    /* length from FchCarrizo.asl, new fields */
280 CreateDWordField(SVBF, 0x000, S000) /* will be easier to add from there */
281 CreateDWordField(SVBF, 0x004, S004)
282 CreateDWordField(SVBF, 0x008, S008)
283 CreateDWordField(SVBF, 0x00C, S00C)
284 CreateDWordField(SVBF, 0x018, S018)
285 CreateDWordField(SVBF, 0x01C, S01C)
286 CreateDWordField(SVBF, 0x020, S020)
287 CreateDWordField(SVBF, 0x030, S030)
288 CreateDWordField(SVBF, 0x118, S118)
289 CreateDWordField(SVBF, 0x158, S158)
290 CreateDWordField(SVBF, 0x198, S198)
291 CreateDWordField(SVBF, 0x1D8, S1D8)
292 CreateDWordField(SVBF, 0x300, S300)
293 CreateDWordField(SVBF, 0x304, S304)
294 CreateDWordField(SVBF, 0x308, S308)
295 CreateDWordField(SVBF, 0x30C, S30C)
296 CreateDWordField(SVBF, 0x310, S310)
297 CreateDWordField(SVBF, 0x428, S428)
298 CreateDWordField(SVBF, 0x438, S438)
299 CreateDWordField(SVBF, 0x43C, S43C)
300 CreateDWordField(SVBF, 0x458, S458)
301 CreateDWordField(SVBF, 0x468, S468)
302 CreateDWordField(SVBF, 0x46C, S46C)
303 CreateDWordField(SVBF, 0x470, S470)
304 CreateDWordField(SVBF, 0x480, S480)
305 CreateDWordField(SVBF, 0x484, S484)
306 CreateDWordField(SVBF, 0x488, S488)
307 CreateDWordField(SVBF, 0x48C, S48C)
308 CreateDWordField(SVBF, 0x730, EHID) /* EHCI SSID    */
309 CreateDWordField(SVBF, 0x734, XHID) /* XHCI SSID    */
310 CreateByteField(SVBF, 0x740, ES54)  /* EHCI PCIx54  */
311 CreateByteField(SVBF, 0x741, ES64)  /* EHCI PCIx64  */
312 CreateDWordField(SVBF, 0x7B0, SSIM) /* EHCI SIM BIT */
314 Method(X0_S,0)
316         XHID = XH2C
317         IDEX = 0
318         S000 = DATA
319         IDEX = 0x00000004
320         S004 = DATA
321         IDEX = 0x00000008
322         S008 = DATA
323         IDEX = 0x0000000C
324         S00C = DATA
325         IDEX = 0x00000018
326         S018 = DATA
327         IDEX = 0x0000001C
328         S01C = DATA
329         IDEX = 0x00000020
330         S020 = DATA
331         IDEX = 0x00000030
332         S030 = DATA
333         IDEX = 0x00000118
334         S118 = DATA
335         IDEX = 0x00000158
336         S158 = DATA
337         IDEX = 0x00000198
338         S198 = DATA
339         IDEX = 0x000001D8
340         S1D8 = DATA
341         IDEX = 0x00000300
342         S300 = DATA
343         IDEX = 0x00000304
344         S304 = DATA
345         IDEX = 0x00000308
346         S308 = DATA
347         IDEX = 0x0000030C
348         S30C = DATA
349         IDEX = 0x00000310
350         S310 = DATA
351         IDEX = 0x40000028
352         S428 = DATA
353         IDEX = 0x40000038
354         S438 = DATA
355         IDEX = 0x4000003C
356         S43C = DATA
357         IDEX = 0x40000058
358         S458 = DATA
359         IDEX = 0x40000068
360         S468 = DATA
361         IDEX = 0x4000006C
362         S46C = DATA
363         IDEX = 0x40000070
364         S470 = DATA
365         IDEX = 0x40000080
366         S480 = DATA
367         IDEX = 0x40000084
368         S484 = DATA
369         IDEX = 0x40000088
370         S488 = DATA
371         IDEX = 0x4000008C
372         S48C = DATA
375 Method(X0_R,0)
377         XH2C = XHID
378         IDEX = 0
379         DATA = S000
380         IDEX = 0x000000004
381         DATA = S004
382         IDEX = 0x000000008
383         DATA = S008
384         IDEX = 0x00000000C
385         DATA = S00C
386         IDEX = 0x000000018
387         DATA = S018
388         IDEX = 0x00000001C
389         DATA = S01C
390         IDEX = 0x000000020
391         DATA = S020
392         IDEX = 0x00000030
393         DATA = S030
394         IDEX = 0x00000118
395         DATA = S118
396         IDEX = 0x00000158
397         DATA = S158
398         IDEX = 0x00000198
399         DATA = S198
400         IDEX = 0x000001D8
401         DATA = S1D8
402         IDEX = 0x00000300
403         DATA = S300
404         IDEX = 0x00000304
405         DATA = S304
406         IDEX = 0x00000308
407         DATA = S308
408         IDEX = 0x0000030C
409         DATA = S30C
410         IDEX = 0x00000310
411         DATA = S310
412         IDEX = 0x40000028
413         DATA = S428
414         IDEX = 0x40000038
415         DATA = S438
416         IDEX = 0x4000003C
417         DATA = S43C
418         IDEX = 0x40000058
419         DATA = S458
420         IDEX = 0x40000068
421         DATA = S468
422         IDEX = 0x4000006C
423         DATA = S46C
424         IDEX = 0x40000070
425         DATA = S470
426         IDEX = 0x40000080
427         DATA = S480
428         IDEX = 0x40000084
429         DATA = S484
430         IDEX = 0x40000088
431         DATA = S488
432         IDEX = 0x4000008C
433         DATA = S48C