]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
4372c111 BM |
2 | /* |
3 | * Copyright (C) 2017, Bin Meng <[email protected]> | |
4372c111 BM |
4 | */ |
5 | ||
6 | #ifndef __ASM_ACPI_S3_H__ | |
7 | #define __ASM_ACPI_S3_H__ | |
8 | ||
2b2d666f BM |
9 | #define WAKEUP_BASE 0x600 |
10 | ||
4372c111 BM |
11 | /* PM1_STATUS register */ |
12 | #define WAK_STS (1 << 15) | |
13 | #define PCIEXPWAK_STS (1 << 14) | |
14 | #define RTC_STS (1 << 10) | |
15 | #define SLPBTN_STS (1 << 9) | |
16 | #define PWRBTN_STS (1 << 8) | |
17 | #define GBL_STS (1 << 5) | |
18 | #define BM_STS (1 << 4) | |
19 | #define TMR_STS (1 << 0) | |
20 | ||
21 | /* PM1_CNT register */ | |
22 | #define SLP_EN (1 << 13) | |
23 | #define SLP_TYP_SHIFT 10 | |
24 | #define SLP_TYP (7 << SLP_TYP_SHIFT) | |
25 | #define SLP_TYP_S0 0 | |
26 | #define SLP_TYP_S1 1 | |
27 | #define SLP_TYP_S3 5 | |
28 | #define SLP_TYP_S4 6 | |
29 | #define SLP_TYP_S5 7 | |
30 | ||
5ae5aa93 BM |
31 | /* Memory size reserved for S3 resume */ |
32 | #define S3_RESERVE_SIZE 0x1000 | |
33 | ||
2b2d666f BM |
34 | #ifndef __ASSEMBLY__ |
35 | ||
36 | extern char __wakeup[]; | |
37 | extern int __wakeup_size; | |
38 | ||
4372c111 BM |
39 | enum acpi_sleep_state { |
40 | ACPI_S0, | |
41 | ACPI_S1, | |
42 | ACPI_S2, | |
43 | ACPI_S3, | |
44 | ACPI_S4, | |
45 | ACPI_S5, | |
46 | }; | |
47 | ||
b727961b BM |
48 | /** |
49 | * acpi_ss_string() - get ACPI-defined sleep state string | |
50 | * | |
51 | * @pm1_cnt: ACPI-defined sleep state | |
52 | * @return: a pointer to the sleep state string. | |
53 | */ | |
54 | static inline char *acpi_ss_string(enum acpi_sleep_state state) | |
55 | { | |
56 | char *ss_string[] = { "S0", "S1", "S2", "S3", "S4", "S5"}; | |
57 | ||
58 | return ss_string[state]; | |
59 | } | |
60 | ||
4372c111 BM |
61 | /** |
62 | * acpi_sleep_from_pm1() - get ACPI-defined sleep state from PM1_CNT register | |
63 | * | |
64 | * @pm1_cnt: PM1_CNT register value | |
65 | * @return: ACPI-defined sleep state if given valid PM1_CNT register value, | |
66 | * -EINVAL otherwise. | |
67 | */ | |
68 | static inline enum acpi_sleep_state acpi_sleep_from_pm1(u32 pm1_cnt) | |
69 | { | |
70 | switch ((pm1_cnt & SLP_TYP) >> SLP_TYP_SHIFT) { | |
71 | case SLP_TYP_S0: | |
72 | return ACPI_S0; | |
73 | case SLP_TYP_S1: | |
74 | return ACPI_S1; | |
75 | case SLP_TYP_S3: | |
76 | return ACPI_S3; | |
77 | case SLP_TYP_S4: | |
78 | return ACPI_S4; | |
79 | case SLP_TYP_S5: | |
80 | return ACPI_S5; | |
81 | } | |
82 | ||
83 | return -EINVAL; | |
84 | } | |
85 | ||
1206723b BM |
86 | /** |
87 | * chipset_prev_sleep_state() - Get chipset previous sleep state | |
88 | * | |
89 | * This returns chipset previous sleep state from ACPI registers. | |
90 | * Platform codes must supply this routine in order to support ACPI S3. | |
91 | * | |
92 | * @return ACPI_S0/S1/S2/S3/S4/S5. | |
93 | */ | |
94 | enum acpi_sleep_state chipset_prev_sleep_state(void); | |
95 | ||
96 | /** | |
97 | * chipset_clear_sleep_state() - Clear chipset sleep state | |
98 | * | |
99 | * This clears chipset sleep state in ACPI registers. | |
100 | * Platform codes must supply this routine in order to support ACPI S3. | |
101 | */ | |
102 | void chipset_clear_sleep_state(void); | |
103 | ||
0f4e2588 | 104 | struct acpi_fadt; |
3a34cae0 BM |
105 | /** |
106 | * acpi_resume() - Do ACPI S3 resume | |
107 | * | |
108 | * This calls U-Boot wake up assembly stub and jumps to OS's wake up vector. | |
109 | * | |
0f4e2588 | 110 | * @fadt: FADT table pointer in the ACPI table |
3a34cae0 BM |
111 | * @return: Never returns |
112 | */ | |
0f4e2588 | 113 | void acpi_resume(struct acpi_fadt *fadt); |
3a34cae0 | 114 | |
5ae5aa93 BM |
115 | /** |
116 | * acpi_s3_reserve() - Reserve memory for ACPI S3 resume | |
117 | * | |
118 | * This copies memory where real mode interrupt handler stubs reside to the | |
119 | * reserved place on the stack. | |
120 | * | |
121 | * This routine should be called by reserve_arch() before U-Boot is relocated | |
122 | * when ACPI S3 resume is enabled. | |
123 | * | |
124 | * @return: 0 always | |
125 | */ | |
126 | int acpi_s3_reserve(void); | |
127 | ||
2b2d666f BM |
128 | #endif /* __ASSEMBLY__ */ |
129 | ||
4372c111 | 130 | #endif /* __ASM_ACPI_S3_H__ */ |