coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
4 
5 static const struct pch_gpio_set1 pch_gpio_set1_mode = {
6  .gpio0 = GPIO_MODE_NONE, /* Unused */
7  .gpio1 = GPIO_MODE_NONE, /* Unused */
8  .gpio2 = GPIO_MODE_NONE, /* Unused */
9  .gpio3 = GPIO_MODE_NONE, /* Unused */
10  .gpio4 = GPIO_MODE_NATIVE, /* Native - TPSINT# for TP SMBus IRQ */
11  .gpio5 = GPIO_MODE_NONE, /* Unused */
12  .gpio6 = GPIO_MODE_GPIO, /* Input - BOARD_ID4 */
13  .gpio7 = GPIO_MODE_GPIO, /* Input - BOARD_ID5 */
14  .gpio8 = GPIO_MODE_GPIO, /* Output - BT on/off */
15  .gpio9 = GPIO_MODE_NONE, /* Unused */
16  .gpio10 = GPIO_MODE_NONE, /* Unused */
17  .gpio11 = GPIO_MODE_GPIO, /* Input - TP WAKEUP Event */
18  .gpio12 = GPIO_MODE_NONE, /* Unused */
19  .gpio13 = GPIO_MODE_GPIO, /* Input - SCI from EC */
20  .gpio14 = GPIO_MODE_GPIO, /* Output - AOAC WLAN power control */
21  .gpio15 = GPIO_MODE_GPIO, /* Unused - Do not control WLAN*/
22  .gpio16 = GPIO_MODE_NONE, /* Unused */
23  .gpio17 = GPIO_MODE_GPIO, /* Input - DGPU_PWROK */
24  .gpio18 = GPIO_MODE_NATIVE, /* Native - PCIECLKRQ1# LAN clock pin*/
25  .gpio19 = GPIO_MODE_GPIO, /* Input - Boot BIOS Selection 0 */
26  .gpio20 = GPIO_MODE_NATIVE, /* Native - PCIECLKRQ2# SDCard clock pin */
27  .gpio21 = GPIO_MODE_GPIO, /* Input - EC_ENTERING_RW for Google OS */
28  .gpio22 = GPIO_MODE_GPIO, /* Input - BIOS RECOVERY */
29  .gpio23 = GPIO_MODE_NONE, /* Unused */
30  .gpio24 = GPIO_MODE_GPIO, /* Output - DGPU_HOLD_RST# */
31  .gpio25 = GPIO_MODE_NONE, /* Unused */
32  .gpio26 = GPIO_MODE_NONE, /* Unused */
33  .gpio27 = GPIO_MODE_NONE, /* Unused */
34  .gpio28 = GPIO_MODE_NONE, /* Unused */
35  .gpio29 = GPIO_MODE_NONE, /* Unused */
36  .gpio30 = GPIO_MODE_NATIVE, /* Native - SUSWARN_EC# */
37  .gpio31 = GPIO_MODE_NONE, /* Unused */
38 };
39 
40 static const struct pch_gpio_set1 pch_gpio_set1_direction = {
41  .gpio0 = GPIO_DIR_INPUT, /* Unused */
42  .gpio1 = GPIO_DIR_INPUT, /* Unused */
43  .gpio2 = GPIO_DIR_INPUT, /* Unused */
44  .gpio3 = GPIO_DIR_INPUT, /* Unused */
45  .gpio4 = GPIO_DIR_INPUT, /* Native */
46  .gpio5 = GPIO_DIR_INPUT, /* Unused */
47  .gpio6 = GPIO_DIR_INPUT, /* Input */
48  .gpio7 = GPIO_DIR_INPUT, /* Input */
49  .gpio8 = GPIO_DIR_INPUT, /* Output HIGH - set in mainboard.c */
50  .gpio9 = GPIO_DIR_INPUT, /* Unused */
51  .gpio10 = GPIO_DIR_INPUT, /* Unused */
52  .gpio11 = GPIO_DIR_INPUT, /* Input */
53  .gpio12 = GPIO_DIR_INPUT, /* Unused */
54  .gpio13 = GPIO_DIR_INPUT, /* Input */
55  .gpio14 = GPIO_DIR_OUTPUT, /* Output HIGH */
56  .gpio15 = GPIO_DIR_INPUT, /* Unused */
57  .gpio16 = GPIO_DIR_INPUT, /* Unused */
58  .gpio17 = GPIO_DIR_INPUT, /* Input */
59  .gpio18 = GPIO_DIR_INPUT, /* Native */
60  .gpio19 = GPIO_DIR_INPUT, /* Input */
61  .gpio20 = GPIO_DIR_INPUT, /* Native */
62  .gpio21 = GPIO_DIR_INPUT, /* Input */
63  .gpio22 = GPIO_DIR_INPUT, /* Input */
64  .gpio23 = GPIO_DIR_INPUT, /* Unused */
65  .gpio24 = GPIO_DIR_OUTPUT, /* Output HIGH */
66  .gpio25 = GPIO_DIR_INPUT, /* Unused */
67  .gpio26 = GPIO_DIR_INPUT, /* Unused */
68  .gpio27 = GPIO_DIR_INPUT, /* Unused */
69  .gpio28 = GPIO_DIR_INPUT, /* Unused */
70  .gpio29 = GPIO_DIR_INPUT, /* Unused */
71  .gpio30 = GPIO_DIR_INPUT, /* Native */
72  .gpio31 = GPIO_DIR_INPUT, /* Unused */
73 };
74 
75 static const struct pch_gpio_set1 pch_gpio_set1_level = {
76  .gpio0 = GPIO_LEVEL_LOW, /* Unused */
77  .gpio1 = GPIO_LEVEL_LOW, /* Unused */
78  .gpio2 = GPIO_LEVEL_LOW, /* Unused */
79  .gpio3 = GPIO_LEVEL_LOW, /* Unused */
80  .gpio4 = GPIO_LEVEL_LOW, /* Native */
81  .gpio5 = GPIO_LEVEL_LOW, /* Unused */
82  .gpio6 = GPIO_LEVEL_LOW, /* Input */
83  .gpio7 = GPIO_LEVEL_LOW, /* Input */
84  .gpio8 = GPIO_LEVEL_HIGH, /* Output HIGH - set in mainboard.c */
85  .gpio9 = GPIO_LEVEL_LOW, /* Unused */
86  .gpio10 = GPIO_LEVEL_LOW, /* Unused */
87  .gpio11 = GPIO_LEVEL_LOW, /* Input */
88  .gpio12 = GPIO_LEVEL_LOW, /* Unused */
89  .gpio13 = GPIO_LEVEL_LOW, /* Input */
90  .gpio14 = GPIO_LEVEL_HIGH, /* Output HIGH */
91  .gpio15 = GPIO_LEVEL_HIGH, /* Unused */
92  .gpio16 = GPIO_LEVEL_LOW, /* Unused */
93  .gpio17 = GPIO_LEVEL_LOW, /* Input */
94  .gpio18 = GPIO_LEVEL_LOW, /* Native */
95  .gpio19 = GPIO_LEVEL_LOW, /* Input */
96  .gpio20 = GPIO_LEVEL_LOW, /* Native */
97  .gpio21 = GPIO_LEVEL_LOW, /* Input */
98  .gpio22 = GPIO_LEVEL_LOW, /* Input */
99  .gpio23 = GPIO_LEVEL_LOW, /* Unused */
100  .gpio24 = GPIO_LEVEL_HIGH, /* Output HIGH */
101  .gpio25 = GPIO_LEVEL_LOW, /* Unused */
102  .gpio26 = GPIO_LEVEL_LOW, /* Unused */
103  .gpio27 = GPIO_LEVEL_LOW, /* Unused */
104  .gpio28 = GPIO_LEVEL_LOW, /* Unused */
105  .gpio29 = GPIO_LEVEL_LOW, /* Unused */
106  .gpio30 = GPIO_LEVEL_LOW, /* Native */
107  .gpio31 = GPIO_LEVEL_LOW, /* Unused */
108 };
109 
110 static const struct pch_gpio_set1 pch_gpio_set1_invert = {
111  .gpio11 = GPIO_INVERT, /* invert touchpad wakeup pin */
112  .gpio13 = GPIO_INVERT, /* invert EC SCI pin */
113 };
114 
115 static const struct pch_gpio_set2 pch_gpio_set2_mode = {
116  .gpio32 = GPIO_MODE_NATIVE, /* Native - Connect to EC Clock Run */
117  .gpio33 = GPIO_MODE_GPIO, /* Input - (Google protect BIOS ROM) */
118  .gpio34 = GPIO_MODE_NONE, /* Unused */
119  .gpio35 = GPIO_MODE_NONE, /* Unused */
120  .gpio36 = GPIO_MODE_GPIO, /* Output - DGPU_PWR_EN */
121  .gpio37 = GPIO_MODE_GPIO, /* Input - FDI TERM / VOLTAGE OVERRIDE */
122  .gpio38 = GPIO_MODE_GPIO, /* Input - MFG_MODE test */
123  .gpio39 = GPIO_MODE_GPIO, /* Input - DGPU_PRSNT */
124  .gpio40 = GPIO_MODE_NONE, /* Unused */
125  .gpio41 = GPIO_MODE_NONE, /* Unused */
126  .gpio42 = GPIO_MODE_NONE, /* Unused */
127  .gpio43 = GPIO_MODE_NONE, /* Unused */
128  .gpio44 = GPIO_MODE_GPIO, /* Input - BOARD_ID0 */
129  .gpio45 = GPIO_MODE_GPIO, /* Input - BOARD_ID1 */
130  .gpio46 = GPIO_MODE_GPIO, /* Input - BOARD_ID2 */
131  .gpio47 = GPIO_MODE_NATIVE, /* Native - PEGA_GPU clock request */
132  .gpio48 = GPIO_MODE_NONE, /* Unused */
133  .gpio49 = GPIO_MODE_NONE, /* Unused */
134  .gpio50 = GPIO_MODE_NONE, /* Unused */
135  .gpio51 = GPIO_MODE_GPIO, /* Input - Boot BIOS Selection 1 */
136  .gpio52 = GPIO_MODE_GPIO, /* Input - Google recovery, Pull up +3V */
137  .gpio53 = GPIO_MODE_GPIO, /* Output - G Sensor LED */
138  .gpio54 = GPIO_MODE_GPIO, /* Input - Google Development */
139  .gpio55 = GPIO_MODE_GPIO, /* Input - Top-Block Swap Override */
140  .gpio56 = GPIO_MODE_NONE, /* Unused */
141  .gpio57 = GPIO_MODE_GPIO, /* Input - SV_DET */
142  .gpio58 = GPIO_MODE_NONE, /* Unused */
143  .gpio59 = GPIO_MODE_NONE, /* Unused */
144  .gpio60 = GPIO_MODE_NONE, /* GPO - DRAMRST_CNTRL_PCH */
145  .gpio61 = GPIO_MODE_NONE, /* Unused */
146  .gpio62 = GPIO_MODE_NATIVE, /* Native - Connect to EC 32.768KHz */
147  .gpio63 = GPIO_MODE_NATIVE, /* Native - SLP_S5 */
148 };
149 
150 static const struct pch_gpio_set2 pch_gpio_set2_direction = {
151  .gpio32 = GPIO_DIR_INPUT, /* Native */
152  .gpio33 = GPIO_DIR_INPUT, /* Input */
153  .gpio34 = GPIO_DIR_INPUT, /* Unused */
154  .gpio35 = GPIO_DIR_INPUT, /* Unused */
155  .gpio36 = GPIO_DIR_OUTPUT, /* Output HIGH */
156  .gpio37 = GPIO_DIR_INPUT, /* Input */
157  .gpio38 = GPIO_DIR_INPUT, /* Input */
158  .gpio39 = GPIO_DIR_INPUT, /* Input */
159  .gpio40 = GPIO_DIR_INPUT, /* Unused */
160  .gpio41 = GPIO_DIR_INPUT, /* Unused */
161  .gpio42 = GPIO_DIR_INPUT, /* Unused */
162  .gpio43 = GPIO_DIR_INPUT, /* Unused */
163  .gpio44 = GPIO_DIR_INPUT, /* Input */
164  .gpio45 = GPIO_DIR_INPUT, /* Input */
165  .gpio46 = GPIO_DIR_INPUT, /* Input */
166  .gpio47 = GPIO_DIR_INPUT, /* Native */
167  .gpio48 = GPIO_DIR_INPUT, /* Unused */
168  .gpio49 = GPIO_DIR_INPUT, /* Unused */
169  .gpio50 = GPIO_DIR_INPUT, /* Unused */
170  .gpio51 = GPIO_DIR_INPUT, /* Input */
171  .gpio52 = GPIO_DIR_INPUT, /* Input */
172  .gpio53 = GPIO_DIR_OUTPUT, /* Input */
173  .gpio54 = GPIO_DIR_INPUT, /* Input */
174  .gpio55 = GPIO_DIR_INPUT, /* Input */
175  .gpio56 = GPIO_DIR_INPUT, /* Unused */
176  .gpio57 = GPIO_DIR_INPUT, /* Input */
177  .gpio58 = GPIO_DIR_INPUT, /* Unused */
178  .gpio59 = GPIO_DIR_INPUT, /* Unused */
179  .gpio60 = GPIO_DIR_OUTPUT, /* Output HIGH */
180  .gpio61 = GPIO_DIR_INPUT, /* Unused */
181  .gpio62 = GPIO_DIR_INPUT, /* Native */
182  .gpio63 = GPIO_DIR_INPUT, /* Native */
183 };
184 
185 static const struct pch_gpio_set2 pch_gpio_set2_level = {
186  .gpio32 = GPIO_LEVEL_LOW, /* Native */
187  .gpio33 = GPIO_LEVEL_LOW, /* Input */
188  .gpio34 = GPIO_LEVEL_LOW, /* Unused */
189  .gpio35 = GPIO_LEVEL_LOW, /* Unused */
190  .gpio36 = GPIO_LEVEL_HIGH, /* Output HIGH */
191  .gpio37 = GPIO_LEVEL_LOW, /* Input */
192  .gpio38 = GPIO_LEVEL_LOW, /* Input */
193  .gpio39 = GPIO_LEVEL_LOW, /* Input */
194  .gpio40 = GPIO_LEVEL_LOW, /* Unused */
195  .gpio41 = GPIO_LEVEL_LOW, /* Unused */
196  .gpio42 = GPIO_LEVEL_LOW, /* Unused */
197  .gpio43 = GPIO_LEVEL_LOW, /* Unused */
198  .gpio44 = GPIO_LEVEL_LOW, /* Input */
199  .gpio45 = GPIO_LEVEL_LOW, /* Input */
200  .gpio46 = GPIO_LEVEL_LOW, /* Input */
201  .gpio47 = GPIO_LEVEL_LOW, /* Native */
202  .gpio48 = GPIO_LEVEL_LOW, /* Unused */
203  .gpio49 = GPIO_LEVEL_LOW, /* Unused */
204  .gpio50 = GPIO_LEVEL_LOW, /* Unused */
205  .gpio51 = GPIO_LEVEL_LOW, /* Input */
206  .gpio52 = GPIO_LEVEL_LOW, /* Input */
207  .gpio53 = GPIO_LEVEL_HIGH, /* Input */
208  .gpio54 = GPIO_LEVEL_LOW, /* Input */
209  .gpio55 = GPIO_LEVEL_LOW, /* Input */
210  .gpio56 = GPIO_LEVEL_LOW, /* Unused */
211  .gpio57 = GPIO_LEVEL_LOW, /* Input */
212  .gpio58 = GPIO_LEVEL_LOW, /* Unused */
213  .gpio59 = GPIO_LEVEL_LOW, /* Unused */
214  .gpio60 = GPIO_LEVEL_HIGH, /* Output HIGH */
215  .gpio61 = GPIO_LEVEL_LOW, /* Unused */
216  .gpio62 = GPIO_LEVEL_LOW, /* Native */
217  .gpio63 = GPIO_LEVEL_LOW, /* Native */
218 };
219 
220 static const struct pch_gpio_set3 pch_gpio_set3_mode = {
221  .gpio64 = GPIO_MODE_NONE, /* Unused */
222  .gpio65 = GPIO_MODE_NONE, /* Unused */
223  .gpio66 = GPIO_MODE_NONE, /* Unused */
224  .gpio67 = GPIO_MODE_NONE, /* Unused */
225  .gpio68 = GPIO_MODE_GPIO, /* Input - DGPU_PWR_EN */
226  .gpio69 = GPIO_MODE_NONE, /* Unused */
227  .gpio70 = GPIO_MODE_NONE, /* Unused */
228  .gpio71 = GPIO_MODE_NONE, /* Unused */
229  .gpio72 = GPIO_MODE_NONE, /* Unused */
230  .gpio73 = GPIO_MODE_NATIVE, /* Native - PCIECLKRQ0# WLAN clock request */
231  .gpio74 = GPIO_MODE_NONE, /* Unused */
232  .gpio75 = GPIO_MODE_GPIO, /* Input - SMB_ME1_DAT */
233 };
234 
235 static const struct pch_gpio_set3 pch_gpio_set3_direction = {
236  .gpio64 = GPIO_DIR_INPUT, /* Unused */
237  .gpio65 = GPIO_DIR_INPUT, /* Unused */
238  .gpio66 = GPIO_DIR_INPUT, /* Unused */
239  .gpio67 = GPIO_DIR_INPUT, /* Unused */
240  .gpio68 = GPIO_DIR_INPUT, /* Input */
241  .gpio69 = GPIO_DIR_INPUT, /* Unused */
242  .gpio70 = GPIO_DIR_INPUT, /* Unused */
243  .gpio71 = GPIO_DIR_INPUT, /* Unused */
244  .gpio72 = GPIO_DIR_INPUT, /* Unused */
245  .gpio73 = GPIO_DIR_INPUT, /* Native */
246  .gpio74 = GPIO_DIR_INPUT, /* Unused */
247  .gpio75 = GPIO_DIR_INPUT, /* Input */
248 };
249 
250 static const struct pch_gpio_set3 pch_gpio_set3_level = {
251  .gpio64 = GPIO_LEVEL_LOW, /* Unused */
252  .gpio65 = GPIO_LEVEL_LOW, /* Unused */
253  .gpio66 = GPIO_LEVEL_LOW, /* Unused */
254  .gpio67 = GPIO_LEVEL_LOW, /* Unused */
255  .gpio68 = GPIO_LEVEL_LOW, /* Input */
256  .gpio69 = GPIO_LEVEL_LOW, /* Unused */
257  .gpio70 = GPIO_LEVEL_LOW, /* Unused */
258  .gpio71 = GPIO_LEVEL_LOW, /* Unused */
259  .gpio72 = GPIO_LEVEL_LOW, /* Unused */
260  .gpio73 = GPIO_LEVEL_LOW, /* Native */
261  .gpio74 = GPIO_LEVEL_LOW, /* Unused */
262  .gpio75 = GPIO_LEVEL_LOW, /* Input */
263 };
264 
265 const struct pch_gpio_map mainboard_gpio_map = {
266  .set1 = {
268  .direction = &pch_gpio_set1_direction,
269  .level = &pch_gpio_set1_level,
270  .invert = &pch_gpio_set1_invert,
271 
272  },
273  .set2 = {
274  .mode = &pch_gpio_set2_mode,
275  .direction = &pch_gpio_set2_direction,
276  .level = &pch_gpio_set2_level,
277  },
278  .set3 = {
279  .mode = &pch_gpio_set3_mode,
280  .direction = &pch_gpio_set3_direction,
281  .level = &pch_gpio_set3_level,
282  },
283 };
const struct pch_gpio_map mainboard_gpio_map
Definition: gpio.c:87
static const struct pch_gpio_set1 pch_gpio_set1_direction
Definition: gpio.c:40
static const struct pch_gpio_set2 pch_gpio_set2_level
Definition: gpio.c:185
static const struct pch_gpio_set1 pch_gpio_set1_level
Definition: gpio.c:75
static const struct pch_gpio_set3 pch_gpio_set3_direction
Definition: gpio.c:235
static const struct pch_gpio_set2 pch_gpio_set2_mode
Definition: gpio.c:115
static const struct pch_gpio_set1 pch_gpio_set1_invert
Definition: gpio.c:110
static const struct pch_gpio_set1 pch_gpio_set1_mode
Definition: gpio.c:5
static const struct pch_gpio_set3 pch_gpio_set3_mode
Definition: gpio.c:220
static const struct pch_gpio_set3 pch_gpio_set3_level
Definition: gpio.c:250
static const struct pch_gpio_set2 pch_gpio_set2_direction
Definition: gpio.c:150
#define GPIO_LEVEL_HIGH
Definition: gpio.h:54
#define GPIO_LEVEL_LOW
Definition: gpio.h:53
#define GPIO_DIR_INPUT
Definition: gpio.h:51
#define GPIO_DIR_OUTPUT
Definition: gpio.h:50
@ GPIO_MODE_GPIO
Definition: gpio.h:20
#define GPIO_INVERT
Definition: gpio.h:32
#define GPIO_MODE_NATIVE
Definition: gpio.h:24
#define GPIO_MODE_NONE
Definition: gpio.h:26
const struct pch_gpio_set1 * mode
Definition: gpio.h:130
struct pch_gpio_map::@1669 set1
u32 gpio0
Definition: gpio.h:44
u32 gpio11
Definition: gpio.h:55
u32 gpio32
Definition: gpio.h:79
u32 gpio64
Definition: gpio.h:114