blob: d9556004c01f5d9ba02dd5795b9f7934c9a9372c [file] [log] [blame]
Angel Ponsae593872020-04-04 18:50:57 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Marc Jones24484842017-05-04 21:17:45 -06002
Felix Held95f1bb82021-05-07 18:46:36 +02003#include <amdblocks/alib.h>
4
Marc Jones509e5fd2018-08-01 12:45:03 -06005External(\_SB.ALIB, MethodObj)
6
Martin Rothec23f042017-11-22 19:21:55 -07007/* System Bus */
Marc Jones24484842017-05-04 21:17:45 -06008/* _SB.PCI0 */
9
10/* Operating System Capabilities Method */
11Method(_OSC,4)
12{
Marc Jones24484842017-05-04 21:17:45 -060013 /* Check for proper PCI/PCIe UUID */
Elyes HAOUAS86846432020-09-24 15:47:34 +020014 If (Arg0 == ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))
Marc Jones24484842017-05-04 21:17:45 -060015 {
16 /* Let OS control everything */
17 Return (Arg3)
18 } Else {
Marc Jones1faa11e2018-08-15 22:17:45 -060019 CreateDWordField(Arg3,0,CDW1)
Elyes HAOUAS86846432020-09-24 15:47:34 +020020 CDW1 |= 4 // Unrecognized UUID
21 Return (Arg3)
Marc Jones24484842017-05-04 21:17:45 -060022 }
23}
24
25/* Describe the Southbridge devices */
26
Marc Jones24484842017-05-04 21:17:45 -060027/* 0:14.0 - SMBUS */
28Device(SBUS) {
29 Name(_ADR, 0x00140000)
30} /* end SBUS */
31
32#include "usb.asl"
33
34/* 0:14.2 - I2S Audio */
35
36/* 0:14.3 - LPC */
Marshall Dawson6ab5ed32019-05-29 09:24:18 -060037#include <soc/amd/common/acpi/lpc.asl>
Marc Jones24484842017-05-04 21:17:45 -060038
39/* 0:14.7 - SD Controller */
40Device(SDCN) {
41 Name(_ADR, 0x00140007)
Raul E Rangel29150c82019-04-23 16:02:15 -060042
43 Method(_PS0) {
44 FDDC(24, 0)
45 }
46 Method(_PS3) {
47 FDDC(24, 3)
48 }
49 Method(_PSC) {
50 Return(SDTD)
51 }
Marc Jones24484842017-05-04 21:17:45 -060052} /* end SDCN */
53
54Name(CRES, ResourceTemplate() {
55 /* Set the Bus number and Secondary Bus number for the PCI0 device
56 * The Secondary bus range for PCI0 lets the system
57 * know what bus values are allowed on the downstream
58 * side of this PCI bus if there is a PCI-PCI bridge.
Martin Roth26f97f92021-10-01 14:53:22 -060059 * PCI buses can have 256 secondary buses which
Marc Jones24484842017-05-04 21:17:45 -060060 * range from [0-0xFF] but they do not need to be
61 * sequential.
62 */
63 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
64 0x0000, /* address granularity */
65 0x0000, /* range minimum */
Marshall Dawson6744dfe2017-06-14 16:09:07 -060066 0x00ff, /* range maximum */
Marc Jones24484842017-05-04 21:17:45 -060067 0x0000, /* translation */
68 0x0100, /* length */
69 ,, PSB0) /* ResourceSourceIndex, ResourceSource, DescriptorName */
70
Marshall Dawson6744dfe2017-06-14 16:09:07 -060071 IO(Decode16, 0x0cf8, 0x0cf8, 1, 8)
Marc Jones24484842017-05-04 21:17:45 -060072
73 WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
74 0x0000, /* address granularity */
75 0x0000, /* range minimum */
Marshall Dawson6744dfe2017-06-14 16:09:07 -060076 0x0cf7, /* range maximum */
Marc Jones24484842017-05-04 21:17:45 -060077 0x0000, /* translation */
Marshall Dawson6744dfe2017-06-14 16:09:07 -060078 0x0cf8 /* length */
Marc Jones24484842017-05-04 21:17:45 -060079 )
Marc Jones24484842017-05-04 21:17:45 -060080
81 WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
82 0x0000, /* address granularity */
Marshall Dawson6744dfe2017-06-14 16:09:07 -060083 0x0d00, /* range minimum */
84 0xffff, /* range maximum */
Marc Jones24484842017-05-04 21:17:45 -060085 0x0000, /* translation */
Marshall Dawson6744dfe2017-06-14 16:09:07 -060086 0xf300 /* length */
Marc Jones24484842017-05-04 21:17:45 -060087 )
88
Marshall Dawson6744dfe2017-06-14 16:09:07 -060089 Memory32Fixed(READONLY, 0x000a0000, 0x00020000, VGAM) /* VGA memory space */
90 Memory32Fixed(READONLY, 0x000c0000, 0x00020000, EMM1) /* Assume C0000-E0000 empty */
Marc Jones24484842017-05-04 21:17:45 -060091
92 /* memory space for PCI BARs below 4GB */
93 Memory32Fixed(ReadOnly, 0x00000000, 0x00000000, MMIO)
94}) /* End Name(_SB.PCI0.CRES) */
95
96Method(_CRS, 0) {
97 /* DBGO("\\_SB\\PCI0\\_CRS\n") */
98 CreateDWordField(CRES, ^MMIO._BAS, MM1B)
99 CreateDWordField(CRES, ^MMIO._LEN, MM1L)
100
101 /*
102 * Declare memory between TOM1 and 4GB as available
103 * for PCI MMIO.
104 * Use ShiftLeft to avoid 64bit constant (for XP).
105 * This will work even if the OS does 32bit arithmetic, as
106 * 32bit (0x00000000 - TOM1) will wrap and give the same
107 * result as 64bit (0x100000000 - TOM1).
108 */
Elyes HAOUAS86846432020-09-24 15:47:34 +0200109 MM1B = TOM1
110 Local0 = 0x10000000 << 4
111 Local0 -= TOM1
112 MM1L = Local0
Marc Jones24484842017-05-04 21:17:45 -0600113
Elyes HAOUAS86846432020-09-24 15:47:34 +0200114 Return (CRES) /* note to change the Name buffer */
Marc Jones24484842017-05-04 21:17:45 -0600115} /* end of Method(_SB.PCI0._CRS) */
116
117/*
118 *
119 * FIRST METHOD CALLED UPON BOOT
120 *
121 * 1. If debugging, print current OS and ACPI interpreter.
122 * 2. Get PCI Interrupt routing from ACPI VSM, this
123 * value is based on user choice in BIOS setup.
124 */
Marc Jones509e5fd2018-08-01 12:45:03 -0600125Method(_INI, 0, Serialized) {
Marc Jones24484842017-05-04 21:17:45 -0600126 /* DBGO("\\_SB\\_INI\n") */
127 /* DBGO(" DSDT.ASL code from ") */
128 /* DBGO(__DATE__) */
129 /* DBGO(" ") */
130 /* DBGO(__TIME__) */
131 /* DBGO("\n Sleep states supported: ") */
132 /* DBGO("\n") */
133 /* DBGO(" \\_OS=") */
134 /* DBGO(\_OS) */
135 /* DBGO("\n \\_REV=") */
136 /* DBGO(\_REV) */
137 /* DBGO("\n") */
138
Marc Jones509e5fd2018-08-01 12:45:03 -0600139 /* Send ALIB Function 1 the AC/DC state */
140 Name(F1BF, Buffer(0x03){})
141 CreateWordField(F1BF, 0, F1SZ)
142 CreateByteField(F1BF, 2, F1DA)
143
Elyes HAOUAS86846432020-09-24 15:47:34 +0200144 F1SZ = 3
145 F1DA= \PWRS
Marc Jones509e5fd2018-08-01 12:45:03 -0600146
Felix Held95f1bb82021-05-07 18:46:36 +0200147 \_SB.ALIB(ALIB_FUNCTION_REPORT_AC_DC_STATE, F1BF)
Marc Jones509e5fd2018-08-01 12:45:03 -0600148
Marc Jones24484842017-05-04 21:17:45 -0600149} /* End Method(_SB._INI) */
150
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600151OperationRegion(SMIC, SystemMemory, 0xfed80000, 0x80000)
152Field( SMIC, ByteAcc, NoLock, Preserve) {
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600153 /* MISC registers */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600154 offset (0x03ee),
155 U3PS, 2, /* Usb3PowerSel */
156
157 offset (0x0e28),
158 ,29 ,
159 SARP, 1, /* Sata Ref Clock Powerdown */
160 U2RP, 1, /* Usb2 Ref Clock Powerdown */
161 U3RP, 1, /* Usb3 Ref Clock Powerdown */
162
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600163 /* XHCI_PM registers */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600164 offset (0x1c00),
165 , 1,
166 ,6,
167 U3PY, 1,
168 , 7,
169 UD3P, 1, /* bit 15 */
170 U3PR, 1, /* bit 16 */
171 , 11,
172 FWLM, 1, /* FirmWare Load Mode */
173 FPLS, 1, /* Fw PreLoad Start */
174 FPLC, 1, /* Fw PreLoad Complete */
175
176 offset (0x1c04),
177 UA04, 16,
178 , 15,
179 ROAM, 1, /* 1= ROM 0=RAM */
180
181 offset (0x1c08),
182 UA08, 32,
183
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600184 /* AOAC Registers */
185 offset (0x1e4a), /* I2C0 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600186 I0TD, 2,
187 , 1,
188 I0PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600189 offset (0x1e4b), /* I2C0 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600190 I0DS, 3,
191
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600192 offset (0x1e4c), /* I2C1 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600193 I1TD, 2,
194 , 1,
195 I1PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600196 offset (0x1e4d), /* I2C1 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600197 I1DS, 3,
198
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600199 offset (0x1e4e), /* I2C2 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600200 I2TD, 2,
201 , 1,
202 I2PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600203 offset (0x1e4f), /* I2C2 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600204 I2DS, 3,
205
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600206 offset (0x1e50), /* I2C3 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600207 I3TD, 2,
208 , 1,
209 I3PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600210 offset (0x1e51), /* I2C3 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600211 I3DS, 3,
212
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600213 offset (0x1e56), /* UART0 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600214 U0TD, 2,
215 , 1,
216 U0PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600217 offset (0x1e57), /* UART0 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600218 U0DS, 3,
219
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600220 offset (0x1e58), /* UART1 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600221 U1TD, 2,
222 , 1,
223 U1PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600224 offset (0x1e59), /* UART1 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600225 U1DS, 3,
226
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600227 offset (0x1e5e), /* SATA D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600228 SATD, 2,
229 , 1,
230 SAPD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600231 offset (0x1e5f), /* SATA D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600232 SADS, 3,
233
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600234 offset (0x1e64), /* USB2 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600235 U2TD, 2,
236 , 1,
237 U2PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600238 offset (0x1e65), /* USB2 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600239 U2DS, 3,
240
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600241 offset (0x1e6e), /* USB3 D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600242 U3TD, 2,
243 , 1,
244 U3PD, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600245 offset (0x1e6f), /* USB3 D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600246 U3DS, 3,
247
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600248 offset (0x1e70), /* SD D3 Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600249 SDTD, 2,
250 , 1,
Raul E Rangel29150c82019-04-23 16:02:15 -0600251 SDPD, 1,
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600252 , 1,
Raul E Rangel29150c82019-04-23 16:02:15 -0600253 , 1,
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600254 SDRT, 1,
255 SDSC, 1,
256
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600257 offset (0x1e71), /* SD D3 State */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600258 SDDS, 3,
259
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600260 offset (0x1e80), /* Shadow Register Request */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600261 , 15,
262 RQ15, 1,
263 , 2,
264 RQ18, 1,
265 , 4,
266 RQ23, 1,
267 RQ24, 1,
268 , 5,
269 RQTY, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600270 offset (0x1e84), /* Shadow Register Status */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600271 , 15,
272 SASR, 1, /* SATA 15 Shadow Reg Request Status Register */
273 , 2,
274 U2SR, 1, /* USB2 18 Shadow Reg Request Status Register */
275 , 4,
276 U3SR, 1, /* USB3 23 Shadow Reg Request Status Register */
277 SDSR, 1, /* SD 24 Shadow Reg Request Status Register */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600278
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600279 offset (0x1ea0), /* PwrGood Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600280 PG1A, 1,
281 PG2_, 1,
282 ,1,
283 U3PG, 1, /* Usb3 Power Good BIT3 */
284
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600285 offset (0x1ea3), /* PwrGood Control b[31:24] */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600286 PGA3, 8 ,
287}
288
Kyösti Mälkkic0733e12021-02-14 06:58:39 +0200289Field(PCFG, DwordAcc, NoLock, Preserve)
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600290{
291 /* XHCI */
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600292 Offset(0x00080010), /* Base address */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600293 XHBA, 32,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600294 Offset(0x0008002c), /* Subsystem ID / Vendor ID */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600295 XH2C, 32,
296
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600297 Offset(0x00080048), /* Indirect PCI Index Register */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600298 IDEX, 32,
299 DATA, 32,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600300 Offset(0x00080054), /* PME Control / Status */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600301 U_PS, 2,
302
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600303 /* EHCI */
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600304 Offset(0x00090004), /* Control */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600305 , 1,
306 EHME, 1,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600307 Offset(0x00090010), /* Base address */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600308 EHBA, 32,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600309 Offset(0x0009002c), /* Subsystem ID / Vendor ID */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600310 EH2C, 32,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600311 Offset(0x00090054), /* EHCI Spare 1 */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600312 EH54, 8,
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600313 Offset(0x00090064), /* Misc Control 2 */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600314 EH64, 8,
315
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600316 Offset(0x000900c4), /* PME Control / Status */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600317 E_PS, 2,
318
319 /* LPC Bridge */
Marshall Dawson5fdd2012018-10-01 14:57:02 -0600320 Offset(0x000a30cb), /* ClientRomProtect[31:24] */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600321 , 7,
322 AUSS, 1, /* AutoSizeStart */
Marshall Dawsonb77c76c2018-09-26 16:19:36 -0600323}
Marshall Dawson14331fd2018-09-26 16:12:56 -0600324
325/*
326 * Arg0:device:
327 * 5=I2C0, 6=I2C1, 7=I2C2, 8=I2C3, 11=UART0, 12=UART1,
328 * 15=SATA, 18=EHCI, 23=xHCI, 24=SD
329 * Arg1:D-state
330 */
331Mutex (FDAS, 0) /* FCH Device AOAC Semophore */
332Method(FDDC, 2, Serialized)
333{
334 Acquire(FDAS, 0xffff)
335
Elyes HAOUAS86846432020-09-24 15:47:34 +0200336 if (Arg1 == 0) {
Marshall Dawson14331fd2018-09-26 16:12:56 -0600337 Switch(ToInteger(Arg0)) {
338 Case(Package() {5, 15, 24}) {
Felix Singer7b8ac002022-12-26 08:45:56 +0100339 PG1A = 1
Marshall Dawson14331fd2018-09-26 16:12:56 -0600340 }
341 Case(Package() {6, 7, 8, 11, 12, 18}) {
Felix Singer7b8ac002022-12-26 08:45:56 +0100342 PG2_ = 1
Marshall Dawson14331fd2018-09-26 16:12:56 -0600343 }
344 }
345 /* put device into D0 */
346 Switch(ToInteger(Arg0))
347 {
348 Case(5) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200349 I0TD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100350 I0PD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200351 Local0 = I0DS
352 while(Local0 != 0x7) {
353 Local0 = I0DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600354 }
355 }
356 Case(6) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200357 I1TD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100358 I1PD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200359 Local0 = I1DS
360 while(Local0 != 0x7) {
361 Local0 = I1DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600362 }
363 }
364 Case(7) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200365 I2TD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100366 I2PD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200367 Local0 = I2DS
368 while(Local0 != 0x7) {
369 Local0 = I2DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600370 }
371 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200372 Case(8) {
373 I3TD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100374 I3PD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200375 Local0 = I3DS
376 while(Local0 != 0x7) {
377 Local0 = I3DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600378 }
379 }
380 Case(11) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200381 U0TD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100382 U0PD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200383 Local0 = U0DS
384 while(Local0 != 0x7) {
385 Local0 = U0DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600386 }
387 }
388 Case(12) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200389 U1TD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100390 U1PD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200391 Local0 = U1DS
392 while(Local0 != 0x7) {
393 Local0 = U1DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600394 }
395 }
396/* todo Case(15) { STD0()} */ /* SATA */
Marshall Dawsonfdb846d2018-09-26 15:43:21 -0600397 Case(18) { U2D0()} /* EHCI */
398 Case(23) { U3D0()} /* XHCI */
Raul E Rangel29150c82019-04-23 16:02:15 -0600399 Case(24) { /* SD */
Elyes HAOUAS86846432020-09-24 15:47:34 +0200400 SDTD = 0x00
Felix Singer7b8ac002022-12-26 08:45:56 +0100401 SDPD = 1
Elyes HAOUAS86846432020-09-24 15:47:34 +0200402 Local0 = SDDS
403 while(Local0 != 0x7) {
404 Local0 = SDDS
Raul E Rangel29150c82019-04-23 16:02:15 -0600405 }
406 }
Marshall Dawson14331fd2018-09-26 16:12:56 -0600407 }
408 } else {
409 /* put device into D3cold */
410 Switch(ToInteger(Arg0))
411 {
412 Case(5) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200413 I0PD = Zero
414 Local0 = I0DS
415 while(Local0 != 0x0) {
416 Local0 = I0DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600417 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200418 I0TD = 0x03
Marshall Dawson14331fd2018-09-26 16:12:56 -0600419 }
420 Case(6) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200421 I1PD = Zero
422 Local0 = I1DS
423 while(Local0 != 0x0) {
424 Local0 = I1DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600425 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200426 I1TD = 0x03
Marshall Dawson14331fd2018-09-26 16:12:56 -0600427 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200428 Case(7) {
429 I2PD = Zero
430 Local0 = I2DS
431 while(Local0 != 0x0) {
432 Local0 = I2DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600433 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200434 I2TD = 0x03
435 }
Marshall Dawson14331fd2018-09-26 16:12:56 -0600436 Case(8) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200437 I3PD = Zero
438 Local0 = I3DS
439 while(Local0 != 0x0) {
440 Local0 = I3DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600441 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200442 I3TD = 0x03
Marshall Dawson14331fd2018-09-26 16:12:56 -0600443 }
444 Case(11) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200445 U0PD = Zero
446 Local0 = U0DS
447 while(Local0 != 0x0) {
448 Local0 = U0DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600449 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200450 U0TD = 0x03
Marshall Dawson14331fd2018-09-26 16:12:56 -0600451 }
452 Case(12) {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200453 U1PD = Zero
454 Local0 = U1DS
455 while(Local0 != 0x0) {
456 Local0 = U1DS
Marshall Dawson14331fd2018-09-26 16:12:56 -0600457 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200458 U1TD = 0x03
Marshall Dawson14331fd2018-09-26 16:12:56 -0600459 }
460/* todo Case(15) { STD3()} */ /* SATA */
Marshall Dawsonfdb846d2018-09-26 15:43:21 -0600461 Case(18) { U2D3()} /* EHCI */
462 Case(23) { U3D3()} /* XHCI */
Raul E Rangel29150c82019-04-23 16:02:15 -0600463 Case(24) { /* SD */
Elyes HAOUAS86846432020-09-24 15:47:34 +0200464 SDPD = Zero
465 Local0 = SDDS
466 while(Local0 != 0x0) {
467 Local0 = SDDS
Raul E Rangel29150c82019-04-23 16:02:15 -0600468 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200469 SDTD = 0x03
Raul E Rangel29150c82019-04-23 16:02:15 -0600470 }
Marshall Dawson14331fd2018-09-26 16:12:56 -0600471 }
472 /* Turn off Power */
Elyes HAOUAS86846432020-09-24 15:47:34 +0200473 if (I0TD == 3) {
474 if (SATD == 3) {
475 if (SDTD == 3) { PG1A = Zero }
Marshall Dawson14331fd2018-09-26 16:12:56 -0600476 }
477 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200478 if (I1TD == 3) {
479 if (I2TD == 3) {
480 if (I3TD == 3) {
481 if (U0TD == 3) {
482 if (U1TD == 3) {
483 if (U2TD == 3) {
484 PG2_ = Zero
Marshall Dawson14331fd2018-09-26 16:12:56 -0600485 }
486 }
487 }
488 }
489 }
490 }
491 }
492 Release(FDAS)
493}
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600494
495Method(FPTS,0, Serialized) /* FCH _PTS */
496{
Elyes HAOUAS86846432020-09-24 15:47:34 +0200497 if (\XHCE == one) {
498 if (U3TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600499 FDDC(23, 3)
500 }
501 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200502 if (U2TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600503 FDDC(18, 3)
504 }
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600505}
506
507Method(FWAK,0, Serialized) /* FCH _WAK */
508{
Elyes HAOUAS86846432020-09-24 15:47:34 +0200509 if (\XHCE == one) {
510 if (U3TD == 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600511 FDDC(23, 0)
512 }
513 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200514 if (U2TD == 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600515 FDDC(18, 0)
516 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200517 if (\UT0E == zero) {
518 if (U0TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600519 FDDC(11, 3)
520 }
521 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200522 if (\UT1E == zero) {
523 if (U1TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600524 FDDC(12, 3)
525 }
526 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200527 if (\IC0E == zero) {
528 if (I0TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600529 FDDC(5, 3)
530 }
531 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200532 if (\IC1E == zero) {
533 if (I1TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600534 FDDC(6, 3)
535 }
536 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200537 if (\IC2E == zero) {
538 if (I2TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600539 FDDC(7, 3)
540 }
541 }
Elyes HAOUAS86846432020-09-24 15:47:34 +0200542 if (\IC3E == zero) {
543 if (I3TD != 0x03) {
Marshall Dawson9c5dc1f2018-09-26 16:07:59 -0600544 FDDC(8, 3)
545 }
546 }
547}
Marshall Dawsoncb2b70b2018-09-26 15:52:00 -0600548
549/*
550 * Helper for setting a bit in AOACxA0 PwrGood Control
551 * Arg0: bit to set or clear
552 * Arg1: 0 = clear bit[Arg0], non-zero = set bit[Arg0]
553 */
554Method(PWGC,2, Serialized)
555{
Elyes HAOUAS86846432020-09-24 15:47:34 +0200556 Local0 = PGA3 & 0xdf /* do SwUsb3SlpShutdown below */
557 if (Arg1) {
558 Local0 |= Arg0
Marshall Dawsoncb2b70b2018-09-26 15:52:00 -0600559 } else {
Elyes HAOUAS86846432020-09-24 15:47:34 +0200560 Local1 = ~Arg0
561 Local0 &= Local1
Marshall Dawsoncb2b70b2018-09-26 15:52:00 -0600562 }
Elyes HAOUAS72ff4b72021-02-05 20:06:25 +0100563 PGA3 = Local0
Elyes HAOUAS86846432020-09-24 15:47:34 +0200564 if (Arg0 == 0x20) { /* if SwUsb3SlpShutdown */
565 Local0 = PGA3
566 Local0 &= Arg0
567 while(!Local0) { /* wait SwUsb3SlpShutdown to complete */
568 Local0 = PGA3
569 Local0 &= Arg0
Marshall Dawsoncb2b70b2018-09-26 15:52:00 -0600570 }
571 }
572}