soc/intel: Add Alder Lake's GT device ID
[coreboot.git] / src / soc / intel / alderlake / acpi / gpio.asl
blob376afaba1ed9cdb6a0e0fc01adc63092c6f2fa86
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #include <intelblocks/gpio.h>
3 #include <soc/gpio_defs.h>
4 #include <soc/intel/common/acpi/gpio.asl>
5 #include <soc/intel/common/block/acpi/acpi/gpio_op.asl>
6 #include <soc/irq.h>
7 #include <soc/pcr_ids.h>
9 Device (GPIO)
11         Name (_HID, CROS_GPIO_NAME)
12         Name (_UID, 0)
13         Name (_DDN, "GPIO Controller")
15         Name (RBUF, ResourceTemplate()
16         {
17                 Memory32Fixed (ReadWrite, 0, 0, COM0)
18                 Memory32Fixed (ReadWrite, 0, 0, COM1)
19                 Memory32Fixed (ReadWrite, 0, 0, COM4)
20                 Memory32Fixed (ReadWrite, 0, 0, COM5)
21                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ)
22                         { GPIO_IRQ14 }
23         })
24         Method (_CRS, 0, NotSerialized)
25         {
26                 /* GPIO Community 0 */
27                 CreateDWordField (^RBUF, ^COM0._BAS, BAS0)
28                 CreateDWordField (^RBUF, ^COM0._LEN, LEN0)
29                 BAS0 = ^^PCRB (PID_GPIOCOM0)
30                 LEN0 = GPIO_BASE_SIZE
32                 /* GPIO Community 1 */
33                 CreateDWordField (^RBUF, ^COM1._BAS, BAS1)
34                 CreateDWordField (^RBUF, ^COM1._LEN, LEN1)
35                 BAS1 = ^^PCRB (PID_GPIOCOM1)
36                 LEN1 = GPIO_BASE_SIZE
38                 /* GPIO Community 4 */
39                 CreateDWordField (^RBUF, ^COM4._BAS, BAS4)
40                 CreateDWordField (^RBUF, ^COM4._LEN, LEN4)
41                 BAS4 = ^^PCRB (PID_GPIOCOM4)
42                 LEN4 = GPIO_BASE_SIZE
44                 /* GPIO Community 5 */
45                 CreateDWordField (^RBUF, ^COM5._BAS, BAS5)
46                 CreateDWordField (^RBUF, ^COM5._LEN, LEN5)
47                 BAS5 = ^^PCRB (PID_GPIOCOM5)
48                 LEN5 = GPIO_BASE_SIZE
50                 Return (RBUF)
51         }
53         Method (_STA, 0, NotSerialized)
54         {
55                 Return (0xF)
56         }
60  * Get GPIO DW0 Address
61  * Arg0 - GPIO Number
62  */
63 Method (GADD, 1, NotSerialized)
65         /* GPIO Community 0 */
66         If (Arg0 >= GPIO_COM0_START && Arg0 <= GPIO_COM0_END)
67         {
68                 Local0 = PID_GPIOCOM0
69                 Local1 = Arg0 - GPIO_COM0_START
70         }
71         /* GPIO Community 1 */
72         If (Arg0 >= GPIO_COM1_START && Arg0 <= GPIO_COM1_END)
73         {
74                 Local0 = PID_GPIOCOM1
75                 Local1 = Arg0 - GPIO_COM1_START
76         }
77         /* GPIO Community 2 */
78         If (Arg0 >= GPIO_COM2_START && Arg0 <= GPIO_COM2_END)
79         {
80                 Local0 = PID_GPIOCOM2
81                 Local1 = Arg0 - GPIO_COM2_START
82         }
83         /* GPIO Community 3 */
84         If (Arg0 >= GPIO_COM3_START && Arg0 <= GPIO_COM3_END)
85         {
86                 Local0 = PID_GPIOCOM3
87                 Local1 = Arg0 - GPIO_COM3_START
88         }
89         /* GPIO Community 4 */
90         If (Arg0 >= GPIO_COM4_START && Arg0 <= GPIO_COM4_END)
91         {
92                 Local0 = PID_GPIOCOM4
93                 Local1 = Arg0 - GPIO_COM4_START
94         }
95         /* GPIO Community 5*/
96         If (Arg0 >= GPIO_COM5_START && Arg0 <= GPIO_COM5_END)
97         {
98                 Local0 = PID_GPIOCOM5
99                 Local1 = Arg0 - GPIO_COM5_START
100         }
102         Local2 = PCRB(Local0) + PAD_CFG_BASE + (Local1 * 16)
103         Return (Local2)
107  * Return PCR Port ID of GPIO Communities
109  * Arg0: GPIO Community (0-5)
110  */
111 Method (GPID, 1, Serialized)
113         Switch (ToInteger (Arg0))
114         {
115                 Case (COMM_0) {
116                         Local0 = PID_GPIOCOM0
117                 }
118                 Case (COMM_1) {
119                         Local0 = PID_GPIOCOM1
120                 }
121                 Case (COMM_2) {
122                         Local0 = PID_GPIOCOM2
123                 }
124                 case (COMM_3) {
125                         Local0 = PID_GPIOCOM3
126                 }
127                 Case (COMM_4) {
128                         Local0 = PID_GPIOCOM4
129                 }
130                 Case (COMM_5) {
131                         Local0 = PID_GPIOCOM5
132                 }
133                 Default {
134                         Return (0)
135                 }
136         }
138         Return (Local0)
141 /* GPIO Power Management bits */
142 Name(GPMB, Package(TOTAL_GPIO_COMM) {0, 0, 0, 0, 0, 0})
145  * Save GPIO Power Management bits
146  */
147 Method (SGPM, 0, Serialized)
149         For (Local0 = 0, Local0 < TOTAL_GPIO_COMM, Local0++)
150         {
151                 Local1 = GPID (Local0)
152                 GPMB[Local0] = PCRR (Local1, GPIO_MISCCFG)
153         }
157  * Restore GPIO Power Management bits
158  */
159 Method (RGPM, 0, Serialized)
161         For (Local0 = 0, Local0 < TOTAL_GPIO_COMM, Local0++)
162         {
163                 CGPM (Local0, DerefOf(GPMB[Local0]))
164         }
168  * Save current setting of GPIO Power Management bits and
169  * enable all Power Management bits for all communities
170  */
171 Method (EGPM, 0, Serialized)
173         /* Save current setting and will restore it when resuming */
174         SGPM ()
175         /* Enable PM bits */
176         For (Local0 = 0, Local0 < TOTAL_GPIO_COMM, Local0++)
177         {
178                 CGPM (Local0, MISCCFG_GPIO_PM_CONFIG_BITS)
179         }