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 
3 #ifndef STOUT_GPIO_H
4 #define STOUT_GPIO_H
5 
7 
8 static const struct pch_gpio_set1 pch_gpio_set1_mode = {
9  .gpio0 = GPIO_MODE_GPIO, /* GPIO0 */
10  .gpio1 = GPIO_MODE_GPIO, /* SIO_EXT_SMI# */
11  .gpio2 = GPIO_MODE_NONE, /* NOT USED */
12  .gpio3 = GPIO_MODE_NONE, /* NOT USED */
13  .gpio4 = GPIO_MODE_NONE, /* NOT USED */
14  .gpio5 = GPIO_MODE_GPIO, /* INTH# */
15  .gpio6 = GPIO_MODE_GPIO, /* SIO_EXT_SCI# */
16  .gpio7 = GPIO_MODE_GPIO, /* GE_SCR_WP# */
17  .gpio8 = GPIO_MODE_NONE, /* NOT USED */
18  .gpio9 = GPIO_MODE_NATIVE, /* USB_OC5# */
19  .gpio10 = GPIO_MODE_NATIVE, /* USB_OC6# */
20  .gpio11 = GPIO_MODE_NATIVE, /* SMBALERT# */
21  .gpio12 = GPIO_MODE_GPIO, /* GPIO12 */
22  .gpio13 = GPIO_MODE_GPIO, /* GPIO13 */
23  .gpio14 = GPIO_MODE_NATIVE, /* USB_OC7# */
24  .gpio15 = GPIO_MODE_GPIO, /* GPIO15 */
25  .gpio16 = GPIO_MODE_GPIO, /* WWAN_LED_ON */
26  .gpio17 = GPIO_MODE_GPIO, /* WLAN_LED_ON */
27  .gpio18 = GPIO_MODE_NATIVE, /* PCIE_CLKREQ_WLAN# */
28  .gpio19 = GPIO_MODE_GPIO, /* BBS_BIT0 */
29  .gpio20 = GPIO_MODE_NATIVE, /* PCIE_CLKREQ_CARD# */
30  .gpio21 = GPIO_MODE_GPIO, /* BT_DET# / TP29 */
31  .gpio22 = GPIO_MODE_GPIO, /* MODEL_ID0 */
32  .gpio23 = GPIO_MODE_GPIO, /* LCD_BK_OFF */
33  .gpio24 = GPIO_MODE_NATIVE, /* GPIO24 */
34  .gpio25 = GPIO_MODE_NATIVE, /* PCIE_REQ_WWAN# / TP89 */
35  .gpio26 = GPIO_MODE_NATIVE, /* CLK_PCIE_REQ4# / TP59 */
36  .gpio27 = GPIO_MODE_GPIO, /* MSATA_DTCT# */
37  .gpio28 = GPIO_MODE_GPIO, /* PLL_ODVR_EN */
38  .gpio29 = GPIO_MODE_GPIO, /* WLAN_AOAC_ON */
39  .gpio30 = GPIO_MODE_NATIVE, /* SUS_PWR_ACK */
40  .gpio31 = GPIO_MODE_NATIVE, /* AC_PRESENT */
41 };
42 
43 static const struct pch_gpio_set1 pch_gpio_set1_direction = {
44  /*
45  * Note: Only gpio configured as "gpio" or "none" need to have the
46  * direction configured.
47  */
49  .gpio1 = GPIO_DIR_INPUT,
50  .gpio2 = GPIO_DIR_INPUT,
51  .gpio3 = GPIO_DIR_INPUT,
52  .gpio4 = GPIO_DIR_INPUT,
53  .gpio5 = GPIO_DIR_OUTPUT,
54  .gpio6 = GPIO_DIR_INPUT,
55  .gpio7 = GPIO_DIR_INPUT,
56  .gpio8 = GPIO_DIR_INPUT,
57 
58  .gpio12 = GPIO_DIR_OUTPUT,
59  .gpio13 = GPIO_DIR_OUTPUT,
60 
61  .gpio15 = GPIO_DIR_INPUT,
62  .gpio16 = GPIO_DIR_OUTPUT,
63  .gpio17 = GPIO_DIR_OUTPUT,
64 
65  .gpio19 = GPIO_DIR_OUTPUT,
66 
67  .gpio21 = GPIO_DIR_OUTPUT,
68  .gpio22 = GPIO_DIR_INPUT,
69  .gpio23 = GPIO_DIR_OUTPUT,
70 
71  .gpio27 = GPIO_DIR_INPUT,
72  .gpio28 = GPIO_DIR_OUTPUT,
73  .gpio29 = GPIO_DIR_OUTPUT,
74 };
75 
76 static const struct pch_gpio_set1 pch_gpio_set1_level = {
77  /*
78  * Note: Only gpio configured as "gpio" or "none" need to have the
79  * level set.
80  */
82  .gpio1 = GPIO_LEVEL_LOW,
83  .gpio2 = GPIO_LEVEL_LOW,
84  .gpio3 = GPIO_LEVEL_LOW,
85  .gpio4 = GPIO_LEVEL_LOW,
86  .gpio5 = GPIO_LEVEL_HIGH,
87  .gpio6 = GPIO_LEVEL_LOW,
88  .gpio7 = GPIO_LEVEL_HIGH,
89  .gpio8 = GPIO_LEVEL_LOW,
90 
91  .gpio12 = GPIO_LEVEL_LOW,
92  .gpio13 = GPIO_LEVEL_LOW,
93 
94  .gpio15 = GPIO_LEVEL_LOW,
95  .gpio16 = GPIO_LEVEL_HIGH,
96  .gpio17 = GPIO_LEVEL_LOW,
97 
98  .gpio19 = GPIO_LEVEL_LOW,
99 
100  .gpio21 = GPIO_LEVEL_LOW,
101  .gpio22 = GPIO_LEVEL_LOW,
102  .gpio23 = GPIO_LEVEL_LOW,
103 
104  .gpio27 = GPIO_LEVEL_LOW,
105  .gpio28 = GPIO_LEVEL_HIGH,
106  .gpio29 = GPIO_LEVEL_HIGH,
107 };
108 
109 static const struct pch_gpio_set1 pch_gpio_set1_invert = {
110  .gpio1 = GPIO_INVERT,
111  .gpio6 = GPIO_INVERT,
112  .gpio8 = GPIO_INVERT,
113 };
114 
115 static const struct pch_gpio_set2 pch_gpio_set2_mode = {
116  .gpio32 = GPIO_MODE_NATIVE, /* PCI_CLKRUN# */
117  .gpio33 = GPIO_MODE_GPIO, /* GPIO33 */
118  .gpio34 = GPIO_MODE_GPIO, /* CCD_ON */
119  .gpio35 = GPIO_MODE_GPIO, /* BT_ON */
120  .gpio36 = GPIO_MODE_NONE, /* NOT USED */
121  .gpio37 = GPIO_MODE_NONE, /* NOT USED */
122  .gpio38 = GPIO_MODE_NONE, /* NOT USED */
123  .gpio39 = GPIO_MODE_NONE, /* NOT USED */
124  .gpio40 = GPIO_MODE_GPIO, /* USB_OC1# */
125  .gpio41 = GPIO_MODE_GPIO, /* USB_OC2# */
126  .gpio42 = GPIO_MODE_NATIVE, /* USB_OC3# */
127  .gpio43 = GPIO_MODE_NATIVE, /* USB_OC4_AUO4# */
128  .gpio44 = GPIO_MODE_NATIVE, /* PCIE_CLKREQ_LAN# */
129  .gpio45 = GPIO_MODE_NATIVE, /* PCIECLKRQ6# / TP48 */
130  .gpio46 = GPIO_MODE_NATIVE, /* PCIECLKRQ7# / TP57 */
131  .gpio47 = GPIO_MODE_NATIVE, /* CLK_PEGA_REQ# */
132  .gpio48 = GPIO_MODE_GPIO, /* DIS_BT_ON# */
133  .gpio49 = GPIO_MODE_GPIO, /* GPIO49 */
134  .gpio50 = GPIO_MODE_NATIVE, /* PCI_REQ1# */
135  .gpio51 = GPIO_MODE_GPIO, /* BBS_BIT1 */
136  .gpio52 = GPIO_MODE_NATIVE, /* PCI_REQ2# */
137  .gpio53 = GPIO_MODE_GPIO, /* PWM_SELECT# / TP44 */
138  .gpio54 = GPIO_MODE_GPIO, /* PCI_REQ3# */
139  .gpio55 = GPIO_MODE_NATIVE, /* PCI_GNT3# */
140  .gpio56 = GPIO_MODE_NATIVE, /* CLK_PEGB_REQ# / TP60 */
141  .gpio57 = GPIO_MODE_GPIO, /* PCH_GPIO57 */
142  .gpio58 = GPIO_MODE_NATIVE, /* SMB_ME1_CLK */
143  .gpio59 = GPIO_MODE_GPIO, /* USB_OC0_1# */
144  .gpio60 = GPIO_MODE_GPIO, /* DRAMRST_CNTRL_PCH */
145  .gpio61 = GPIO_MODE_GPIO, /* LPCPD# */
146  .gpio62 = GPIO_MODE_NATIVE, /* PCH_SUSCLK_L / TP54 */
147  .gpio63 = GPIO_MODE_NATIVE, /* TP51 */
148 };
149 
150 static const struct pch_gpio_set2 pch_gpio_set2_direction = {
151  /*
152  * Note: Only gpio configured as "gpio" or "none" need to have the
153  * direction configured.
154  */
156  .gpio34 = GPIO_DIR_OUTPUT,
157  .gpio35 = GPIO_DIR_OUTPUT,
158  .gpio36 = GPIO_DIR_INPUT,
159  .gpio37 = GPIO_DIR_INPUT,
160  .gpio38 = GPIO_DIR_INPUT,
161  .gpio39 = GPIO_DIR_INPUT,
162  .gpio40 = GPIO_DIR_INPUT,
163  .gpio41 = GPIO_DIR_INPUT,
164 
165  .gpio48 = GPIO_DIR_OUTPUT,
166  .gpio49 = GPIO_DIR_INPUT,
167 
168  .gpio51 = GPIO_DIR_OUTPUT,
169 
170  .gpio53 = GPIO_DIR_OUTPUT,
171  .gpio54 = GPIO_DIR_INPUT,
172 
173  .gpio57 = GPIO_DIR_INPUT,
174 
175  .gpio59 = GPIO_DIR_INPUT,
176  .gpio60 = GPIO_DIR_OUTPUT,
177  .gpio61 = GPIO_DIR_OUTPUT,
178 };
179 
180 static const struct pch_gpio_set2 pch_gpio_set2_level = {
181  /*
182  * Note: Only gpio configured as "gpio" or "none" need to have the
183  * level set.
184  */
186  .gpio34 = GPIO_LEVEL_HIGH,
187  .gpio35 = GPIO_LEVEL_HIGH,
188  .gpio36 = GPIO_LEVEL_LOW,
189  .gpio37 = GPIO_LEVEL_LOW,
190  .gpio38 = GPIO_LEVEL_LOW,
191  .gpio39 = GPIO_LEVEL_LOW,
192  .gpio40 = GPIO_LEVEL_HIGH,
193  .gpio41 = GPIO_LEVEL_LOW,
194 
195  .gpio48 = GPIO_LEVEL_LOW,
196  .gpio49 = GPIO_LEVEL_HIGH,
197 
198  .gpio51 = GPIO_LEVEL_HIGH,
199 
200  .gpio53 = GPIO_LEVEL_HIGH,
201  .gpio54 = GPIO_LEVEL_LOW,
202 
203  .gpio57 = GPIO_LEVEL_LOW,
204 
205  .gpio59 = GPIO_LEVEL_HIGH,
206  .gpio60 = GPIO_LEVEL_HIGH,
207  .gpio61 = GPIO_LEVEL_LOW,
208 };
209 
210 static const struct pch_gpio_set3 pch_gpio_set3_mode = {
211  .gpio64 = GPIO_MODE_GPIO, /* CLK_FLEX0 / TP38 */
212  .gpio65 = GPIO_MODE_GPIO, /* CLK_FLEX1 / TP45 */
213  .gpio66 = GPIO_MODE_GPIO, /* CLK_FLEX2 / TP83 */
214  .gpio67 = GPIO_MODE_GPIO, /* CLK_FLEX3 / TP82 */
215  .gpio68 = GPIO_MODE_GPIO, /* WWAN_DTCT# */
216  .gpio69 = GPIO_MODE_GPIO, /* GPIO69 */
217  .gpio70 = GPIO_MODE_GPIO, /* WLAN_OFF# */
218  .gpio71 = GPIO_MODE_GPIO, /* WWAN_OFF# */
219  .gpio72 = GPIO_MODE_GPIO, /* PM_BATLOW# */
220  .gpio73 = GPIO_MODE_NATIVE, /* PCIECLKRQ0# / TP39 */
221  .gpio74 = GPIO_MODE_NATIVE, /* SML1ALERT#_R / TP56 */
222  .gpio75 = GPIO_MODE_NATIVE, /* SMB_ME1_DAT */
223 };
224 
225 static const struct pch_gpio_set3 pch_gpio_set3_direction = {
226  /*
227  * Note: Only gpio configured as "gpio" or "none" need to have the
228  * direction configured.
229  */
231  .gpio65 = GPIO_DIR_OUTPUT,
232  .gpio66 = GPIO_DIR_OUTPUT,
233  .gpio67 = GPIO_DIR_INPUT,
234  .gpio68 = GPIO_DIR_INPUT,
235  .gpio69 = GPIO_DIR_OUTPUT,
236  .gpio70 = GPIO_DIR_OUTPUT,
237  .gpio71 = GPIO_DIR_OUTPUT,
238  .gpio72 = GPIO_DIR_OUTPUT,
239 };
240 
241 static const struct pch_gpio_set3 pch_gpio_set3_level = {
242  /*
243  * Note: Only gpio configured as "gpio" or "none" need to have the
244  * level set.
245  */
247  .gpio65 = GPIO_LEVEL_LOW,
248  .gpio66 = GPIO_LEVEL_HIGH,
249  .gpio67 = GPIO_LEVEL_LOW,
250  .gpio68 = GPIO_LEVEL_HIGH,
251  .gpio69 = GPIO_LEVEL_LOW,
252  .gpio70 = GPIO_LEVEL_HIGH,
253  .gpio71 = GPIO_LEVEL_HIGH,
254  .gpio72 = GPIO_LEVEL_HIGH,
255 };
256 
257 const struct pch_gpio_map mainboard_gpio_map = {
258  .set1 = {
260  .direction = &pch_gpio_set1_direction,
261  .level = &pch_gpio_set1_level,
262  .invert = &pch_gpio_set1_invert,
263  },
264  .set2 = {
265  .mode = &pch_gpio_set2_mode,
266  .direction = &pch_gpio_set2_direction,
267  .level = &pch_gpio_set2_level,
268  },
269  .set3 = {
270  .mode = &pch_gpio_set3_mode,
271  .direction = &pch_gpio_set3_direction,
272  .level = &pch_gpio_set3_level,
273  },
274 };
275 #endif
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:43
static const struct pch_gpio_set2 pch_gpio_set2_level
Definition: gpio.c:180
static const struct pch_gpio_set1 pch_gpio_set1_level
Definition: gpio.c:76
static const struct pch_gpio_set3 pch_gpio_set3_direction
Definition: gpio.c:225
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:109
static const struct pch_gpio_set1 pch_gpio_set1_mode
Definition: gpio.c:8
static const struct pch_gpio_set3 pch_gpio_set3_mode
Definition: gpio.c:210
static const struct pch_gpio_set3 pch_gpio_set3_level
Definition: gpio.c:241
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 gpio1
Definition: gpio.h:45
u32 gpio33
Definition: gpio.h:80
u32 gpio32
Definition: gpio.h:79
u32 gpio64
Definition: gpio.h:114