summaryrefslogtreecommitdiff
path: root/src/mainboard/amd/persimmon/acpi/sleep.asl
blob: 3b6fd02055eb044dd8f01b7c58ea7ddb87400ad1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* SPDX-License-Identifier: GPL-2.0-only */

/* Wake status package */
Name(WKST,Package(){Zero, Zero})

/*
* \_PTS - Prepare to Sleep method
*
*	Entry:
*		Arg0=The value of the sleeping state S1=1, S2=2, etc
*
* Exit:
*		-none-
*
* The _PTS control method is executed at the beginning of the sleep process
* for S1-S5. The sleeping value is passed to the _PTS control method.  This
* control method may be executed a relatively long time before entering the
* sleep state and the OS may abort the operation without notification to
* the ACPI driver.  This method cannot modify the configuration or power
* state of any device in the system.
*/
Method(\_PTS, 1) {
	/* DBGO("\\_PTS\n") */
	/* DBGO("From S0 to S") */
	/* DBGO(Arg0) */
	/* DBGO("\n") */

	/* Don't allow PCIRST# to reset USB */
	if (Arg0 == 3){
		URRE = 0
	}

	/* Clear sleep SMI status flag and enable sleep SMI trap. */
	/*CSSM = 1
	SSEN = 1*/

	/* On older chips, clear PciExpWakeDisEn */
	/*if (\_SB.SBRI <= 0x13) {
	*	\_SB.PWDE = 0
	*}
	*/

	/* Clear wake status structure. */
	WKST [0] = 0
	WKST [1] = 0
} /* End Method(\_PTS) */

/*
*  \_WAK System Wake method
*
*	Entry:
*		Arg0=The value of the sleeping state S1=1, S2=2
*
*	Exit:
*		Return package of 2 DWords
*		Dword 1 - Status
*			0x00000000	wake succeeded
*			0x00000001	Wake was signaled but failed due to lack of power
*			0x00000002	Wake was signaled but failed due to thermal condition
*		Dword 2 - Power Supply state
*			if non-zero the effective S-state the power supply entered
*/
Method(\_WAK, 1) {
	/* DBGO("\\_WAK\n") */
	/* DBGO("From S") */
	/* DBGO(Arg0) */
	/* DBGO(" to S0\n") */

	/* Re-enable HPET */
	HPDE = 1

	/* Restore PCIRST# so it resets USB */
	if (Arg0 == 3){
		URRE = 1
	}

	/* Arbitrarily clear PciExpWakeStatus */
	Local1 = PWST
	PWST = Local1

	/* if (DeRefOf(WKST [0])) {
	*	WKST [1] = 0
	* } else {
	*	WKST [1] = Arg0
	* }
	*/
	Return(WKST)
} /* End Method(\_WAK) */