blob: a0e30c26e7b74e6a90678e3e1febf55b31b428b6 [file] [log] [blame]
Tobias Diedrichcee930a2017-02-12 14:09:06 +01001/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright (C) 2017 Tobias Diedrich <ranma+coreboot@tdiedrich.de>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#include <southbridge/intel/common/gpio.h>
17
18const struct pch_gpio_set1 pch_gpio_set1_mode = {
19 .gpio0 = GPIO_MODE_GPIO,
20 .gpio1 = GPIO_MODE_GPIO,
21 .gpio2 = GPIO_MODE_GPIO, /* POUT1# (from palm sensor 1) */
22 .gpio3 = GPIO_MODE_GPIO,
23 .gpio4 = GPIO_MODE_GPIO, /* POUT2# (from palm sensor 2) */
24 .gpio5 = GPIO_MODE_GPIO,
25 .gpio6 = GPIO_MODE_GPIO, /* PA0_WAKEUP (To sensor hub PA0) */
26 .gpio7 = GPIO_MODE_GPIO, /* EC_SCI# (from EC) */
27 .gpio8 = GPIO_MODE_GPIO, /* EC_SMI# (from EC) */
28 .gpio9 = GPIO_MODE_GPIO,
29 .gpio10 = GPIO_MODE_GPIO,
30 .gpio11 = GPIO_MODE_GPIO,
31 .gpio12 = GPIO_MODE_GPIO,
32 .gpio13 = GPIO_MODE_GPIO,
33 .gpio14 = GPIO_MODE_GPIO,
34 .gpio15 = GPIO_MODE_GPIO, /* EC_LID_OUT# */
35 .gpio16 = GPIO_MODE_GPIO, /* RAM_ID2 */
36 .gpio17 = GPIO_MODE_GPIO,
37 .gpio20 = GPIO_MODE_GPIO,
38 .gpio21 = GPIO_MODE_GPIO,
39 .gpio22 = GPIO_MODE_GPIO,
40 .gpio23 = GPIO_MODE_GPIO,
41 .gpio24 = GPIO_MODE_GPIO,
42 .gpio26 = GPIO_MODE_GPIO,
43 .gpio27 = GPIO_MODE_GPIO, /* mSATA_DET# (from WWAN/mSATA mPCIe pin 51) */
44 .gpio28 = GPIO_MODE_GPIO,
45 .gpio29 = GPIO_MODE_GPIO,
46 .gpio30 = GPIO_MODE_GPIO,
47 .gpio31 = GPIO_MODE_GPIO,
48};
49
50const struct pch_gpio_set1 pch_gpio_set1_direction = {
51 .gpio0 = GPIO_DIR_OUTPUT,
52 .gpio1 = GPIO_DIR_OUTPUT,
53 .gpio2 = GPIO_DIR_INPUT,
54 .gpio3 = GPIO_DIR_OUTPUT,
55 .gpio4 = GPIO_DIR_INPUT,
56 .gpio5 = GPIO_DIR_OUTPUT,
57 .gpio6 = GPIO_DIR_INPUT,
58 .gpio7 = GPIO_DIR_INPUT,
59 .gpio8 = GPIO_DIR_INPUT,
60 .gpio9 = GPIO_DIR_OUTPUT,
61 .gpio10 = GPIO_DIR_OUTPUT,
62 .gpio11 = GPIO_DIR_OUTPUT,
63 .gpio12 = GPIO_DIR_OUTPUT,
64 .gpio13 = GPIO_DIR_OUTPUT,
65 .gpio14 = GPIO_DIR_OUTPUT,
66 .gpio15 = GPIO_DIR_INPUT,
67 .gpio16 = GPIO_DIR_INPUT,
68 .gpio17 = GPIO_DIR_INPUT,
69 .gpio20 = GPIO_DIR_OUTPUT,
70 .gpio21 = GPIO_DIR_OUTPUT,
71 .gpio22 = GPIO_DIR_OUTPUT,
72 .gpio23 = GPIO_DIR_OUTPUT,
73 .gpio24 = GPIO_DIR_OUTPUT,
74 .gpio26 = GPIO_DIR_OUTPUT,
75 .gpio27 = GPIO_DIR_INPUT,
76 .gpio28 = GPIO_DIR_OUTPUT,
77 .gpio29 = GPIO_DIR_OUTPUT,
78 .gpio30 = GPIO_DIR_OUTPUT,
79 .gpio31 = GPIO_DIR_INPUT,
80};
81
82const struct pch_gpio_set1 pch_gpio_set1_level = {
83 .gpio0 = GPIO_LEVEL_HIGH,
84 .gpio1 = GPIO_LEVEL_HIGH,
85 .gpio3 = GPIO_LEVEL_HIGH,
86 .gpio5 = GPIO_LEVEL_HIGH,
87 .gpio9 = GPIO_LEVEL_HIGH,
88 .gpio10 = GPIO_LEVEL_HIGH,
89 .gpio11 = GPIO_LEVEL_HIGH,
90 .gpio12 = GPIO_LEVEL_HIGH,
91 .gpio13 = GPIO_LEVEL_HIGH,
92 .gpio14 = GPIO_LEVEL_HIGH,
93 .gpio20 = GPIO_LEVEL_HIGH,
94 .gpio21 = GPIO_LEVEL_HIGH,
95 .gpio22 = GPIO_LEVEL_HIGH,
96 .gpio23 = GPIO_LEVEL_HIGH,
97 .gpio24 = GPIO_LEVEL_HIGH,
98 .gpio26 = GPIO_LEVEL_HIGH,
99 .gpio28 = GPIO_LEVEL_HIGH,
100 .gpio29 = GPIO_LEVEL_LOW,
101 .gpio30 = GPIO_LEVEL_HIGH,
102};
103
104const struct pch_gpio_set1 pch_gpio_set1_reset = {
105 .gpio24 = GPIO_RESET_RSMRST,
106};
107
108const struct pch_gpio_set1 pch_gpio_set1_invert = {
109 .gpio2 = GPIO_INVERT,
110 .gpio4 = GPIO_INVERT,
111 .gpio6 = GPIO_NO_INVERT,
112 .gpio7 = GPIO_INVERT,
113 .gpio8 = GPIO_INVERT,
114 .gpio15 = GPIO_INVERT,
115 .gpio16 = GPIO_NO_INVERT,
116 .gpio17 = GPIO_NO_INVERT,
117 .gpio27 = GPIO_NO_INVERT,
118 .gpio31 = GPIO_NO_INVERT,
119};
120
121const struct pch_gpio_set1 pch_gpio_set1_blink = {
122};
123
124const struct pch_gpio_set2 pch_gpio_set2_mode = {
125 .gpio33 = GPIO_MODE_GPIO, /* PCH_WLBT_OFF_5# (to WLAN mPCIe pin 5) */
126 /* GPIO34 marked as PCH_BT_ON#, but is native (STP_PCI#) */
127 .gpio35 = GPIO_MODE_GPIO, /* 3G_DET# (from WWAN/mSATA mPCIe pin 43) */
128 .gpio36 = GPIO_MODE_GPIO, /* PCH_WLBT_OFF_51# (to WLAN mPCIe pin 51) */
129 .gpio37 = GPIO_MODE_GPIO,
130 .gpio38 = GPIO_MODE_GPIO,
131 .gpio39 = GPIO_MODE_GPIO, /* 3G_OFF# (to WWAN/mSATA mPCIe pin 20) */
132 .gpio41 = GPIO_MODE_GPIO,
133 .gpio42 = GPIO_MODE_GPIO,
134 .gpio43 = GPIO_MODE_GPIO,
135 .gpio44 = GPIO_MODE_GPIO,
136 .gpio45 = GPIO_MODE_GPIO,
137 .gpio46 = GPIO_MODE_GPIO,
138 .gpio48 = GPIO_MODE_GPIO, /* RAM_ID3 */
139 .gpio49 = GPIO_MODE_GPIO,
140 .gpio50 = GPIO_MODE_GPIO,
141 .gpio51 = GPIO_MODE_GPIO,
142 .gpio52 = GPIO_MODE_GPIO,
143 .gpio53 = GPIO_MODE_GPIO,
144 .gpio54 = GPIO_MODE_GPIO,
145 /* GPIO55 marekd as WL_OFF#, but is native (GNT3#) */
146 .gpio56 = GPIO_MODE_GPIO,
147 .gpio57 = GPIO_MODE_GPIO,
148 .gpio60 = GPIO_MODE_GPIO, /* DRAMRST_CNTRL_PCH */
149};
150
151const struct pch_gpio_set2 pch_gpio_set2_direction = {
152 .gpio33 = GPIO_DIR_OUTPUT,
153 .gpio35 = GPIO_DIR_INPUT,
154 .gpio36 = GPIO_DIR_OUTPUT,
155 .gpio37 = GPIO_DIR_OUTPUT,
156 .gpio38 = GPIO_DIR_INPUT,
157 .gpio39 = GPIO_DIR_OUTPUT,
158 .gpio41 = GPIO_DIR_OUTPUT,
159 .gpio42 = GPIO_DIR_OUTPUT,
160 .gpio43 = GPIO_DIR_OUTPUT,
161 .gpio44 = GPIO_DIR_OUTPUT,
162 .gpio45 = GPIO_DIR_OUTPUT,
163 .gpio46 = GPIO_DIR_OUTPUT,
164 .gpio48 = GPIO_DIR_INPUT,
165 .gpio49 = GPIO_DIR_OUTPUT,
166 .gpio50 = GPIO_DIR_OUTPUT,
167 .gpio51 = GPIO_DIR_OUTPUT,
168 .gpio52 = GPIO_DIR_OUTPUT,
169 .gpio53 = GPIO_DIR_OUTPUT,
170 .gpio54 = GPIO_DIR_OUTPUT,
171 .gpio56 = GPIO_DIR_OUTPUT,
172 .gpio57 = GPIO_DIR_INPUT,
173 .gpio60 = GPIO_DIR_OUTPUT,
174};
175
176const struct pch_gpio_set2 pch_gpio_set2_level = {
177 .gpio33 = GPIO_LEVEL_HIGH,
178 .gpio36 = GPIO_LEVEL_HIGH,
179 .gpio37 = GPIO_LEVEL_HIGH,
180 .gpio39 = GPIO_LEVEL_LOW,
181 .gpio41 = GPIO_LEVEL_HIGH,
182 .gpio42 = GPIO_LEVEL_HIGH,
183 .gpio43 = GPIO_LEVEL_HIGH,
184 .gpio44 = GPIO_LEVEL_HIGH,
185 .gpio45 = GPIO_LEVEL_HIGH,
186 .gpio46 = GPIO_LEVEL_LOW,
187 .gpio49 = GPIO_LEVEL_HIGH,
188 .gpio50 = GPIO_LEVEL_LOW,
189 .gpio51 = GPIO_LEVEL_HIGH,
190 .gpio52 = GPIO_LEVEL_HIGH,
191 .gpio53 = GPIO_LEVEL_HIGH,
192 .gpio54 = GPIO_LEVEL_LOW,
193 .gpio56 = GPIO_LEVEL_HIGH,
194 .gpio60 = GPIO_LEVEL_HIGH,
195};
196
197const struct pch_gpio_set2 pch_gpio_set2_reset = {
198};
199
200const struct pch_gpio_set3 pch_gpio_set3_mode = {
201 .gpio64 = GPIO_MODE_GPIO,
202 .gpio65 = GPIO_MODE_GPIO,
203 .gpio68 = GPIO_MODE_GPIO,
204 .gpio69 = GPIO_MODE_GPIO,
205 .gpio70 = GPIO_MODE_GPIO, /* RAM_ID1 */
206 .gpio71 = GPIO_MODE_GPIO, /* RAM_ID0 */
207 .gpio72 = GPIO_MODE_GPIO,
208 .gpio74 = GPIO_MODE_GPIO,
209};
210
211const struct pch_gpio_set3 pch_gpio_set3_direction = {
212 .gpio64 = GPIO_DIR_OUTPUT,
213 .gpio65 = GPIO_DIR_OUTPUT,
214 .gpio68 = GPIO_DIR_OUTPUT,
215 .gpio69 = GPIO_DIR_INPUT,
216 .gpio70 = GPIO_DIR_INPUT,
217 .gpio71 = GPIO_DIR_INPUT,
218 .gpio72 = GPIO_DIR_OUTPUT,
219 .gpio74 = GPIO_DIR_OUTPUT,
220};
221
222const struct pch_gpio_set3 pch_gpio_set3_level = {
223 .gpio64 = GPIO_LEVEL_HIGH,
224 .gpio65 = GPIO_LEVEL_HIGH,
225 .gpio68 = GPIO_LEVEL_LOW,
226 .gpio72 = GPIO_LEVEL_HIGH,
227 .gpio74 = GPIO_LEVEL_HIGH,
228};
229
230const struct pch_gpio_set3 pch_gpio_set3_reset = {
231};
232
233const struct pch_gpio_map mainboard_gpio_map = {
234 .set1 = {
235 .mode = &pch_gpio_set1_mode,
236 .direction = &pch_gpio_set1_direction,
237 .level = &pch_gpio_set1_level,
238 .blink = &pch_gpio_set1_blink,
239 .invert = &pch_gpio_set1_invert,
240 .reset = &pch_gpio_set1_reset,
241 },
242 .set2 = {
243 .mode = &pch_gpio_set2_mode,
244 .direction = &pch_gpio_set2_direction,
245 .level = &pch_gpio_set2_level,
246 .reset = &pch_gpio_set2_reset,
247 },
248 .set3 = {
249 .mode = &pch_gpio_set3_mode,
250 .direction = &pch_gpio_set3_direction,
251 .level = &pch_gpio_set3_level,
252 .reset = &pch_gpio_set3_reset,
253 },
254};