soc/mediatek/mt8196: Initialize SSPM
[coreboot2.git] / src / soc / intel / meteorlake / acpi / gpio.asl
blobeffc4d246fd6df4fd78403e1a836333adaa99127
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #include <gpio.h>
3 #include <soc/intel/common/acpi/gpio.asl>
4 #include <soc/intel/common/block/acpi/acpi/gpio_op.asl>
5 #include <soc/irq.h>
6 #include <soc/pcr_ids.h>
8 Device (GPIO)
10         Name (_HID, CROS_GPIO_NAME)
11         Name (_UID, 0)
12         Name (_DDN, "GPIO Controller")
14         Name (RBUF, ResourceTemplate()
15         {
16                 Memory32Fixed (ReadWrite, 0, 0, COM0)
17                 Memory32Fixed (ReadWrite, 0, 0, COM1)
18                 Memory32Fixed (ReadWrite, 0, 0, COM3)
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 3 */
39                 CreateDWordField (^RBUF, ^COM3._BAS, BAS3)
40                 CreateDWordField (^RBUF, ^COM3._LEN, LEN3)
41                 BAS3 = ^^PCRB (PID_GPIOCOM3)
42                 LEN3 = GPIO_BASE_SIZE
44                 /* GPIO Community 4 */
45                 CreateDWordField (^RBUF, ^COM4._BAS, BAS4)
46                 CreateDWordField (^RBUF, ^COM4._LEN, LEN4)
47                 BAS4 = ^^PCRB (PID_GPIOCOM4)
48                 LEN4 = GPIO_BASE_SIZE
50                 /* GPIO Community 5 */
51                 CreateDWordField (^RBUF, ^COM5._BAS, BAS5)
52                 CreateDWordField (^RBUF, ^COM5._LEN, LEN5)
53                 BAS5 = ^^PCRB (PID_GPIOCOM5)
54                 LEN5 = GPIO_BASE_SIZE
56                 Return (RBUF)
57         }
59         Method (_STA, 0, NotSerialized)
60         {
61                 Return (0xF)
62         }
66  * Get GPIO DW0 Address
67  * Arg0 - GPIO Number
68  */
69 Method (GADD, 1, NotSerialized)
71         /* GPIO Community 0 */
72         If (Arg0 >= GPIO_COM0_START && Arg0 <= GPIO_COM0_END)
73         {
74                 Local0 = PID_GPIOCOM0
75                 Local1 = Arg0 - GPIO_COM0_START
76         }
77         /* GPIO Community 1 */
78         If (Arg0 >= GPIO_COM1_START && Arg0 <= GPIO_COM1_END)
79         {
80                 Local0 = PID_GPIOCOM1
81                 Local1 = Arg0 - GPIO_COM1_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_3) {
122                         Local0 = PID_GPIOCOM3
123                 }
124                 Case (COMM_4) {
125                         Local0 = PID_GPIOCOM4
126                 }
127                 Case (COMM_5) {
128                         Local0 = PID_GPIOCOM5
129                 }
130                 Default {
131                         Return (0)
132                 }
133         }
135         Return (Local0)
138 /* GPIO Power Management bits */
139 Name(GPMB, Package(TOTAL_GPIO_COMM) {0, 0, 0, 0, 0})
142  * Save GPIO Power Management bits
143  */
144 Method (SGPM, 0, Serialized)
146         For (Local0 = 0, Local0 < TOTAL_GPIO_COMM, Local0++)
147         {
148                 Local1 = GPID (Local0)
149                 GPMB[Local0] = PCRR (Local1, GPIO_MISCCFG)
150         }
154  * Restore GPIO Power Management bits
155  */
156 Method (RGPM, 0, Serialized)
158         For (Local0 = 0, Local0 < TOTAL_GPIO_COMM, Local0++)
159         {
160                 CGPM (Local0, DerefOf(GPMB[Local0]))
161         }
165  * Save current setting of GPIO Power Management bits and
166  * enable all Power Management bits for all communities
167  */
168 Method (EGPM, 0, Serialized)
170         /* Save current setting and will restore it when resuming */
171         SGPM ()
172         /* Enable PM bits */
173         For (Local0 = 0, Local0 < TOTAL_GPIO_COMM, Local0++)
174         {
175                 CGPM (Local0, MISCCFG_GPIO_PM_CONFIG_BITS)
176         }