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_GPIO, // -USB30_SMIB - input
7  .gpio1 = GPIO_MODE_GPIO, // -EC_SCI - input
8  .gpio2 = GPIO_MODE_GPIO, // -LCD_PRESENCE - input
9  .gpio3 = GPIO_MODE_GPIO, // DOCKID0 - input
10  .gpio4 = GPIO_MODE_GPIO, // DOCKID1 - input
11  .gpio5 = GPIO_MODE_GPIO, // DOCKID2 - input
12  .gpio6 = GPIO_MODE_GPIO, // SYSTEM_DP_HPD - input
13  .gpio7 = GPIO_MODE_GPIO, // pullup
14  .gpio8 = GPIO_MODE_GPIO, // pulldown - INTEGRATED ENABLED(FCIM) 0 / DISABLED (BTM) 1
15  .gpio9 = GPIO_MODE_NATIVE, // OC5 - -USB_PORT9_OC5 - input
16  .gpio10 = GPIO_MODE_GPIO, // DRAMRST_GATE_ON - output
17  .gpio11 = GPIO_MODE_NATIVE, // SMBALERT# pullup
18  .gpio12 = GPIO_MODE_NATIVE, // LANPHYPC - output
19  .gpio13 = GPIO_MODE_GPIO, // -EC_WAKE - input
20  .gpio14 = GPIO_MODE_NATIVE, // OC7 - pullup
21  .gpio15 = GPIO_MODE_GPIO, // pullup - ME CRYPTO STRAP WITH TLS CONFIDENTIALITY
22  .gpio16 = GPIO_MODE_NATIVE, // SATA4GP - SATA_DOCK_DTCT - input from gpio33
23  .gpio17 = GPIO_MODE_GPIO, // DGFX_PW RGD - input
24  .gpio18 = GPIO_MODE_NATIVE, // PCIECLKRQ1 - -CLKREQ_WLAN - input
25  .gpio19 = GPIO_MODE_NATIVE, // SATA1GP - SATA_BAY_DTCT - input to gpio22
26  .gpio20 = GPIO_MODE_NATIVE, // PCIECLKRQ2 - pullup
27  .gpio21 = GPIO_MODE_GPIO, // -DISCRETE_GFX_PRESENCE - input
28  .gpio22 = GPIO_MODE_GPIO, // SATA_BAY_DTCT - output to SATA1GP
29  .gpio23 = GPIO_MODE_NATIVE, // LDRQ1 - TP84
30  .gpio24 = GPIO_MODE_GPIO, // pullup
31  .gpio25 = GPIO_MODE_NATIVE, // PCIECLKRQ3 - -CLKREQ_EXC - input
32  .gpio26 = GPIO_MODE_NATIVE, // PCIECLKRQ4 - pullup
33  .gpio27 = GPIO_MODE_GPIO, // -MSATA_DTCT - input
34  .gpio28 = GPIO_MODE_GPIO, // pulldown possible
35  .gpio29 = GPIO_MODE_GPIO, // SLP_LAN - -PCH_SLP_LAN
36  .gpio30 = GPIO_MODE_NATIVE, // SUSPWRDNACK - output
37  .gpio31 = GPIO_MODE_NATIVE, // ACPRESENT - input
38 };
39 
40 static const struct pch_gpio_set1 pch_gpio_set1_direction = {
42  .gpio1 = GPIO_DIR_INPUT,
43  .gpio2 = GPIO_DIR_INPUT,
44  .gpio3 = GPIO_DIR_INPUT,
45  .gpio4 = GPIO_DIR_INPUT,
46  .gpio5 = GPIO_DIR_INPUT,
47  .gpio6 = GPIO_DIR_INPUT,
48  .gpio7 = GPIO_DIR_INPUT,
49  .gpio8 = GPIO_DIR_OUTPUT,
50  .gpio9 = GPIO_DIR_INPUT,
51  .gpio10 = GPIO_DIR_OUTPUT,
52  .gpio11 = GPIO_DIR_INPUT,
53  .gpio12 = GPIO_DIR_OUTPUT,
54  .gpio13 = GPIO_DIR_INPUT,
55  .gpio14 = GPIO_DIR_INPUT,
56  .gpio15 = GPIO_DIR_OUTPUT,
57  .gpio16 = GPIO_DIR_INPUT,
58  .gpio17 = GPIO_DIR_INPUT,
59  .gpio18 = GPIO_DIR_INPUT,
60  .gpio19 = GPIO_DIR_INPUT,
61  .gpio20 = GPIO_DIR_INPUT,
62  .gpio21 = GPIO_DIR_INPUT,
63  .gpio22 = GPIO_DIR_OUTPUT,
64  .gpio23 = GPIO_DIR_INPUT,
65  .gpio24 = GPIO_DIR_OUTPUT,
66  .gpio25 = GPIO_DIR_INPUT,
67  .gpio26 = GPIO_DIR_INPUT,
68  .gpio27 = GPIO_DIR_OUTPUT,
69  .gpio28 = GPIO_DIR_OUTPUT,
70  .gpio29 = GPIO_DIR_OUTPUT,
71  .gpio30 = GPIO_DIR_OUTPUT,
72  .gpio31 = GPIO_DIR_INPUT,
73 };
74 
75 static const struct pch_gpio_set1 pch_gpio_set1_level = {
77  .gpio1 = GPIO_LEVEL_HIGH,
78  .gpio2 = GPIO_LEVEL_LOW,
79  .gpio3 = GPIO_LEVEL_HIGH,
80  .gpio4 = GPIO_LEVEL_HIGH,
81  .gpio5 = GPIO_LEVEL_HIGH,
82  .gpio6 = GPIO_LEVEL_LOW,
83  .gpio7 = GPIO_LEVEL_HIGH,
84  .gpio8 = GPIO_LEVEL_HIGH,
85  .gpio9 = GPIO_LEVEL_HIGH,
86  .gpio10 = GPIO_LEVEL_HIGH,
87  .gpio11 = GPIO_LEVEL_HIGH,
88  .gpio12 = GPIO_LEVEL_HIGH,
89  .gpio13 = GPIO_LEVEL_HIGH,
90  .gpio14 = GPIO_LEVEL_HIGH,
91  .gpio15 = GPIO_LEVEL_LOW,
92  .gpio16 = GPIO_LEVEL_HIGH,
93  .gpio17 = GPIO_LEVEL_LOW,
94  .gpio18 = GPIO_LEVEL_HIGH,
95  .gpio19 = GPIO_LEVEL_LOW,
96  .gpio20 = GPIO_LEVEL_HIGH,
97  .gpio21 = GPIO_LEVEL_LOW,
98  .gpio22 = GPIO_LEVEL_LOW,
99  .gpio23 = GPIO_LEVEL_HIGH,
100  .gpio24 = GPIO_LEVEL_LOW,
101  .gpio25 = GPIO_LEVEL_HIGH,
102  .gpio26 = GPIO_LEVEL_HIGH,
103  .gpio27 = GPIO_LEVEL_HIGH,
104  .gpio28 = GPIO_LEVEL_LOW,
105  .gpio29 = GPIO_LEVEL_HIGH,
106  .gpio30 = GPIO_LEVEL_HIGH,
107  .gpio31 = GPIO_LEVEL_HIGH,
108 };
109 
110 static const struct pch_gpio_set1 pch_gpio_set1_invert = {
111  .gpio1 = GPIO_INVERT,
112  .gpio7 = GPIO_INVERT,
113  .gpio13 = GPIO_INVERT,
114 };
115 
116 static const struct pch_gpio_set1 pch_gpio_set1_blink = {
118 };
119 
120 static const struct pch_gpio_set1 pch_gpio_set1_reset = {
122 };
123 
124 static const struct pch_gpio_set2 pch_gpio_set2_mode = {
125  .gpio32 = GPIO_MODE_NATIVE, // CLKRUN - output
126  .gpio33 = GPIO_MODE_GPIO, // SATA_DOCK_DTCT - output to SATA4GP
127  .gpio34 = GPIO_MODE_GPIO, // DGFX_VRM_ID - input - HIGH: 1GB / LOW: 2GB
128  .gpio35 = GPIO_MODE_GPIO, // pullup
129  .gpio36 = GPIO_MODE_GPIO, // pulldown
130  .gpio37 = GPIO_MODE_NATIVE, // SATA2GP - eSATA_DTCT - input to gpio
131  .gpio38 = GPIO_MODE_GPIO, // planarid2 - input - pulldown
132  .gpio39 = GPIO_MODE_GPIO, // planarid3 - input - pulldown
133  .gpio40 = GPIO_MODE_NATIVE, // OC1 - -USB_PORT1_OC1 - input
134  .gpio41 = GPIO_MODE_GPIO, // OC2 - -USB_PORTX_OC2 - input
135  .gpio42 = GPIO_MODE_GPIO, // SMB_3B_EN - output
136  .gpio43 = GPIO_MODE_NATIVE, // OC4 - pullup
137  .gpio44 = GPIO_MODE_NATIVE, // PCIECLKRQ5 - -CLKREQ_GBE - input
138  .gpio45 = GPIO_MODE_NATIVE, // PCIECLKRQ6 - -CLKREQ_USB30_TR - input
139  .gpio46 = GPIO_MODE_NATIVE, // PCIECLKRQ7 - pullup
140  .gpio47 = GPIO_MODE_NATIVE, // PEG_A_CLKRQ# - input
141  .gpio48 = GPIO_MODE_GPIO, // planarid0 - input - PDV low / FVT high
142  .gpio49 = GPIO_MODE_GPIO, // planarid1 - input - pulldown
143  .gpio50 = GPIO_MODE_GPIO, // -SC_DTCT - input
144  .gpio51 = GPIO_MODE_GPIO, // pullup
145  .gpio52 = GPIO_MODE_GPIO, // OPTIMUS_ENABLE - output - high: igpu / low: dgpu
146  .gpio53 = GPIO_MODE_GPIO, // pullup
147  .gpio54 = GPIO_MODE_GPIO, // -BDC_PRESENCE - input
148  .gpio55 = GPIO_MODE_GPIO, // pullup
149  .gpio56 = GPIO_MODE_NATIVE, // PEG_B_CLKRQ - pullup
150  .gpio57 = GPIO_MODE_GPIO, // -DTPM_PRESENCE - input
151  .gpio58 = GPIO_MODE_NATIVE, // SML1CLK - EC_SCL2 - output
152  .gpio59 = GPIO_MODE_NATIVE, // OC0 - pullup
153  .gpio60 = GPIO_MODE_NATIVE, // SML0ALERT# - pullup
154  .gpio61 = GPIO_MODE_NATIVE, // SUS_STAT - output
155  .gpio62 = GPIO_MODE_NATIVE, // SUSCLK - output
156  .gpio63 = GPIO_MODE_NATIVE, // SLP_S5 - output
157 };
158 
159 static const struct pch_gpio_set2 pch_gpio_set2_direction = {
161  .gpio33 = GPIO_DIR_OUTPUT,
162  .gpio34 = GPIO_DIR_INPUT,
163  .gpio35 = GPIO_DIR_OUTPUT,
164  .gpio36 = GPIO_DIR_INPUT,
165  .gpio37 = GPIO_DIR_INPUT,
166  .gpio38 = GPIO_DIR_INPUT,
167  .gpio39 = GPIO_DIR_INPUT,
168  .gpio40 = GPIO_DIR_INPUT,
169  .gpio41 = GPIO_DIR_OUTPUT,
170  .gpio42 = GPIO_DIR_OUTPUT,
171  .gpio43 = GPIO_DIR_INPUT,
172  .gpio44 = GPIO_DIR_INPUT,
173  .gpio45 = GPIO_DIR_INPUT,
174  .gpio46 = GPIO_DIR_INPUT,
175  .gpio47 = GPIO_DIR_INPUT,
176  .gpio48 = GPIO_DIR_INPUT,
177  .gpio49 = GPIO_DIR_INPUT,
178  .gpio50 = GPIO_DIR_INPUT,
179  .gpio51 = GPIO_DIR_OUTPUT,
180  .gpio52 = GPIO_DIR_OUTPUT,
181  .gpio53 = GPIO_DIR_OUTPUT,
182  .gpio54 = GPIO_DIR_INPUT,
183  .gpio55 = GPIO_DIR_OUTPUT,
184  .gpio56 = GPIO_DIR_INPUT,
185  .gpio57 = GPIO_DIR_INPUT,
186  .gpio58 = GPIO_DIR_INPUT,
187  .gpio59 = GPIO_DIR_INPUT,
188  .gpio60 = GPIO_DIR_INPUT,
189  .gpio61 = GPIO_DIR_OUTPUT,
190  .gpio62 = GPIO_DIR_OUTPUT,
191  .gpio63 = GPIO_DIR_OUTPUT,
192 };
193 
194 static const struct pch_gpio_set2 pch_gpio_set2_level = {
196  .gpio33 = GPIO_LEVEL_HIGH,
197  .gpio34 = GPIO_LEVEL_HIGH,
198  .gpio35 = GPIO_LEVEL_LOW,
199  .gpio36 = GPIO_LEVEL_LOW,
200  .gpio37 = GPIO_LEVEL_LOW,
201  .gpio38 = GPIO_LEVEL_HIGH,
202  .gpio39 = GPIO_LEVEL_LOW,
203  .gpio40 = GPIO_LEVEL_HIGH,
204  .gpio41 = GPIO_LEVEL_HIGH,
205  .gpio42 = GPIO_LEVEL_HIGH,
206  .gpio43 = GPIO_LEVEL_HIGH,
207  .gpio44 = GPIO_LEVEL_HIGH,
208  .gpio45 = GPIO_LEVEL_HIGH,
209  .gpio46 = GPIO_LEVEL_HIGH,
210  .gpio47 = GPIO_LEVEL_HIGH,
211  .gpio48 = GPIO_LEVEL_HIGH,
212  .gpio49 = GPIO_LEVEL_HIGH,
213  .gpio50 = GPIO_LEVEL_HIGH,
214  .gpio51 = GPIO_LEVEL_HIGH,
215  .gpio52 = GPIO_LEVEL_HIGH,
216  .gpio53 = GPIO_LEVEL_HIGH,
217  .gpio54 = GPIO_LEVEL_LOW,
218  .gpio55 = GPIO_LEVEL_HIGH,
219  .gpio56 = GPIO_LEVEL_HIGH,
220  .gpio57 = GPIO_LEVEL_LOW,
221  .gpio58 = GPIO_LEVEL_HIGH,
222  .gpio59 = GPIO_LEVEL_HIGH,
223  .gpio60 = GPIO_LEVEL_HIGH,
224  .gpio61 = GPIO_LEVEL_HIGH,
225  .gpio62 = GPIO_LEVEL_HIGH,
226  .gpio63 = GPIO_LEVEL_HIGH,
227 };
228 
229 static const struct pch_gpio_set3 pch_gpio_set3_mode = {
230  .gpio64 = GPIO_MODE_NATIVE, // NC
231  .gpio65 = GPIO_MODE_NATIVE, // VIDEO_CLK_27M_NSS - output
232  .gpio66 = GPIO_MODE_NATIVE, // NC
233  .gpio67 = GPIO_MODE_NATIVE, // VIDEO_CLK_27M_SS - output
234  .gpio68 = GPIO_MODE_GPIO, // -INT_MIC_DTCT - input
235  .gpio69 = GPIO_MODE_GPIO, // mic enable bit - low enable - pulldown
236  .gpio70 = GPIO_MODE_GPIO, // pullup
237  .gpio71 = GPIO_MODE_GPIO, // pullup
238  .gpio72 = GPIO_MODE_NATIVE, // BATLOW - input
239  .gpio73 = GPIO_MODE_NATIVE, // pullup
240  .gpio74 = GPIO_MODE_NATIVE, // pullup
241  .gpio75 = GPIO_MODE_NATIVE, // SML1DATA - EC_SDA2 - i/o
242 };
243 
244 static const struct pch_gpio_set3 pch_gpio_set3_direction = {
246  .gpio65 = GPIO_DIR_OUTPUT,
247  .gpio66 = GPIO_DIR_OUTPUT,
248  .gpio67 = GPIO_DIR_OUTPUT,
249  .gpio68 = GPIO_DIR_INPUT,
250  .gpio69 = GPIO_DIR_INPUT,
251  .gpio70 = GPIO_DIR_INPUT,
252  .gpio71 = GPIO_DIR_INPUT,
253  .gpio72 = GPIO_DIR_INPUT,
254  .gpio73 = GPIO_DIR_INPUT,
255  .gpio74 = GPIO_DIR_INPUT,
256  .gpio75 = GPIO_DIR_INPUT,
257 };
258 
259 static const struct pch_gpio_set3 pch_gpio_set3_level = {
261  .gpio65 = GPIO_LEVEL_HIGH,
262  .gpio66 = GPIO_LEVEL_HIGH,
263  .gpio67 = GPIO_LEVEL_HIGH,
264  .gpio68 = GPIO_LEVEL_LOW,
265  .gpio69 = GPIO_LEVEL_LOW,
266  .gpio70 = GPIO_LEVEL_LOW,
267  .gpio71 = GPIO_LEVEL_HIGH,
268  .gpio72 = GPIO_LEVEL_HIGH,
269  .gpio73 = GPIO_LEVEL_HIGH,
270  .gpio74 = GPIO_LEVEL_HIGH,
271  .gpio75 = GPIO_LEVEL_HIGH,
272 };
273 
274 const struct pch_gpio_map mainboard_gpio_map = {
275  .set1 = {
277  .direction = &pch_gpio_set1_direction,
278  .level = &pch_gpio_set1_level,
279  .invert = &pch_gpio_set1_invert,
280  .blink = &pch_gpio_set1_blink,
281  .reset = &pch_gpio_set1_reset,
282  },
283  .set2 = {
284  .mode = &pch_gpio_set2_mode,
285  .direction = &pch_gpio_set2_direction,
286  .level = &pch_gpio_set2_level,
287  },
288  .set3 = {
289  .mode = &pch_gpio_set3_mode,
290  .direction = &pch_gpio_set3_direction,
291  .level = &pch_gpio_set3_level,
292  },
293 };
const struct pch_gpio_map mainboard_gpio_map
Definition: gpio.c:87
const struct pch_gpio_set1 pch_gpio_set1_direction
Definition: gpio.c:40
const struct pch_gpio_set2 pch_gpio_set2_level
Definition: gpio.c:157
const struct pch_gpio_set1 pch_gpio_set1_level
Definition: gpio.c:75
const struct pch_gpio_set3 pch_gpio_set3_direction
Definition: gpio.c:187
const struct pch_gpio_set2 pch_gpio_set2_mode
Definition: gpio.c:87
const struct pch_gpio_set1 pch_gpio_set1_invert
Definition: gpio.c:84
const struct pch_gpio_set1 pch_gpio_set1_mode
Definition: gpio.c:5
const struct pch_gpio_set3 pch_gpio_set3_mode
Definition: gpio.c:172
const struct pch_gpio_set3 pch_gpio_set3_level
Definition: gpio.c:202
const struct pch_gpio_set2 pch_gpio_set2_direction
Definition: gpio.c:122
static const struct pch_gpio_set1 pch_gpio_set1_reset
Definition: gpio.c:120
static const struct pch_gpio_set1 pch_gpio_set1_blink
Definition: gpio.c:116
#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_NO_BLINK
Definition: gpio.h:37
#define GPIO_MODE_NATIVE
Definition: gpio.h:24
#define GPIO_RESET_RSMRST
Definition: gpio.h:41
const struct pch_gpio_set1 * mode
Definition: gpio.h:130
struct pch_gpio_map::@1669 set1
u32 gpio0
Definition: gpio.h:44
u32 gpio24
Definition: gpio.h:68
u32 gpio18
Definition: gpio.h:62
u32 gpio1
Definition: gpio.h:45
u32 gpio32
Definition: gpio.h:79
u32 gpio64
Definition: gpio.h:114