blob: 12b0e42c4c92829dfc774c5f4ecd752619cf63f1 [file] [log] [blame]
Martin Rothac35e622017-11-07 13:43:02 -07001/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright (C) 2017 Advanced Micro Devices, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * 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
Aaron Durbin64031672018-04-21 14:45:32 -060016#include <compiler.h>
Martin Rothb77bc6f2017-11-11 14:33:47 -070017#include <baseboard/variants.h>
Martin Roth38115912017-11-20 16:19:00 -070018#include <soc/gpio.h>
Martin Rothac35e622017-11-07 13:43:02 -070019#include <soc/smi.h>
20#include <soc/southbridge.h>
21#include <stdlib.h>
Martin Rothd0bc79b2018-03-19 16:39:19 -060022#include <boardid.h>
Daniel Kurtzd6487302018-04-18 17:57:09 -060023#include <variant/gpio.h>
Martin Rothac35e622017-11-07 13:43:02 -070024
Martin Roth38115912017-11-20 16:19:00 -070025/*
Richard Spiegele539c852017-12-25 18:25:58 -070026 * As a rule of thumb, GPIO pins used by coreboot should be initialized at
27 * bootblock while GPIO pins used only by the OS should be initialized at
28 * ramstage.
29 */
Richard Spiegel6fcb9b02018-04-18 08:06:33 -070030static const struct soc_amd_gpio gpio_set_stage_reset_old[] = {
Martin Roth8b40b672018-02-01 15:15:31 -070031 /* GPIO_4 - EN_PP3300_WLAN */
Justin TerAvestf6106712018-02-20 13:49:55 -070032 PAD_GPO(GPIO_4, HIGH),
Martin Roth8b40b672018-02-01 15:15:31 -070033
Martin Roth38115912017-11-20 16:19:00 -070034 /* GPIO_6 - APU_RST_L / EC_SMI_ODL, SMI */
Justin TerAvestf6106712018-02-20 13:49:55 -070035 PAD_GPI(GPIO_6, PULL_UP),
Martin Roth38115912017-11-20 16:19:00 -070036
Martin Rotha55b0e52017-12-06 00:00:13 -070037 /* GPIO_9 - H1_PCH_INT_ODL, SCI */
Justin TerAvestf6106712018-02-20 13:49:55 -070038 PAD_GPI(GPIO_9, PULL_UP),
Martin Roth38115912017-11-20 16:19:00 -070039
Martin Roth38115912017-11-20 16:19:00 -070040 /* GPIO_15 - EC_IN_RW_OD */
Justin TerAvestf6106712018-02-20 13:49:55 -070041 PAD_GPI(GPIO_15, PULL_UP),
Martin Roth38115912017-11-20 16:19:00 -070042
Martin Rotha55b0e52017-12-06 00:00:13 -070043 /* GPIO_22 - EC_SCI_ODL, SCI */
Justin TerAvestf6106712018-02-20 13:49:55 -070044 PAD_GPI(GPIO_22, PULL_UP),
Martin Roth38115912017-11-20 16:19:00 -070045
Martin Roth38115912017-11-20 16:19:00 -070046 /* GPIO_26 - APU_PCIE_RST_L */
Justin TerAvestf6106712018-02-20 13:49:55 -070047 PAD_NF(GPIO_26, PCIE_RST_L, PULL_NONE),
Martin Roth38115912017-11-20 16:19:00 -070048
Martin Roth7b376682018-03-06 14:42:41 -070049 /* GPIO_40 - EMMC_BRIDGE_RST_L - Currently unused */
50 PAD_GPI(GPIO_40, PULL_UP),
Martin Roth38115912017-11-20 16:19:00 -070051
Martin Roth8b40b672018-02-01 15:15:31 -070052 /* GPIO_70 - WLAN_PE_RST_L */
Justin TerAvestf6106712018-02-20 13:49:55 -070053 PAD_GPO(GPIO_70, HIGH),
Martin Roth8b40b672018-02-01 15:15:31 -070054
Martin Roth38115912017-11-20 16:19:00 -070055 /* GPIO_74 - LPC_CLK0_EC_R */
Justin TerAvestf6106712018-02-20 13:49:55 -070056 PAD_NF(GPIO_74, LPCCLK0, PULL_DOWN),
Martin Roth38115912017-11-20 16:19:00 -070057
Martin Roth38115912017-11-20 16:19:00 -070058 /* GPIO_92 - WLAN_PCIE_CLKREQ_3V3_ODL */
Justin TerAvestf6106712018-02-20 13:49:55 -070059 PAD_NF(GPIO_92, CLK_REQ0_L, PULL_UP),
Martin Roth38115912017-11-20 16:19:00 -070060
Martin Roth38115912017-11-20 16:19:00 -070061 /* GPIO_131 - CONFIG_STRAP3 */
Justin TerAvestf6106712018-02-20 13:49:55 -070062 PAD_GPI(GPIO_131, PULL_NONE),
Martin Roth38115912017-11-20 16:19:00 -070063
64 /* GPIO_132 - CONFIG_STRAP4 */
Justin TerAvestf6106712018-02-20 13:49:55 -070065 PAD_GPI(GPIO_132, PULL_NONE),
Martin Roth38115912017-11-20 16:19:00 -070066
Martin Roth38115912017-11-20 16:19:00 -070067 /* GPIO_136 - UART_PCH_RX_DEBUG_TX */
Justin TerAvestf6106712018-02-20 13:49:55 -070068 PAD_NF(GPIO_136, UART0_RXD, PULL_NONE),
Martin Roth38115912017-11-20 16:19:00 -070069
Martin Roth38115912017-11-20 16:19:00 -070070 /* GPIO_138 - UART_PCH_TX_DEBUG_RX */
Justin TerAvestf6106712018-02-20 13:49:55 -070071 PAD_NF(GPIO_138, UART0_TXD, PULL_NONE),
Martin Roth38115912017-11-20 16:19:00 -070072
73 /* GPIO_139 - CONFIG_STRAP1 */
Justin TerAvestf6106712018-02-20 13:49:55 -070074 PAD_GPI(GPIO_139, PULL_NONE),
Martin Roth38115912017-11-20 16:19:00 -070075
Martin Roth38115912017-11-20 16:19:00 -070076 /* GPIO_142 - CONFIG_STRAP2 */
Justin TerAvestf6106712018-02-20 13:49:55 -070077 PAD_GPI(GPIO_142, PULL_NONE),
Martin Rothac35e622017-11-07 13:43:02 -070078};
79
Richard Spiegel6fcb9b02018-04-18 08:06:33 -070080static const struct soc_amd_gpio gpio_set_stage_reset[] = {
Richard Spiegele07e4f32018-03-27 17:41:11 -070081 /* GPIO_4 - EN_PP3300_WLAN */
82 PAD_GPO(GPIO_4, HIGH),
83
84 /* GPIO_6 - APU_RST_L / EC_SMI_ODL, SMI */
85 PAD_GPI(GPIO_6, PULL_UP),
86
87 /* GPIO_9 - H1_PCH_INT_ODL, SCI */
88 PAD_GPI(GPIO_9, PULL_UP),
89
90 /* GPIO_15 - EC_IN_RW_OD */
91 PAD_GPI(GPIO_15, PULL_UP),
92
93 /* GPIO_22 - EC_SCI_ODL, SCI */
94 PAD_GPI(GPIO_22, PULL_UP),
95
96 /* GPIO_24 - EC_PCH_WAKE_L */
97 PAD_GPI(GPIO_24, PULL_UP),
98
99 /* GPIO_26 - APU_PCIE_RST_L */
100 PAD_NF(GPIO_26, PCIE_RST_L, PULL_NONE),
101
102 /* GPIO_40 - EMMC_BRIDGE_RST */
103 PAD_GPI(GPIO_40, PULL_DOWN),
104
105 /* GPIO_70 - WLAN_PE_RST_L */
106 PAD_GPO(GPIO_70, HIGH),
107
108 /* GPIO_74 - LPC_CLK0_EC_R */
109 PAD_NF(GPIO_74, LPCCLK0, PULL_DOWN),
110
111 /* GPIO_92 - WLAN_PCIE_CLKREQ_3V3_ODL */
112 PAD_NF(GPIO_92, CLK_REQ0_L, PULL_UP),
113
114 /* GPIO_131 - CONFIG_STRAP3 */
115 PAD_GPI(GPIO_131, PULL_NONE),
116
117 /* GPIO_132 - CONFIG_STRAP4 */
118 PAD_GPI(GPIO_132, PULL_NONE),
119
120 /* GPIO_136 - UART_PCH_RX_DEBUG_TX */
121 PAD_NF(GPIO_136, UART0_RXD, PULL_NONE),
122
123 /* GPIO_138 - UART_PCH_TX_DEBUG_RX */
124 PAD_NF(GPIO_138, UART0_TXD, PULL_NONE),
125
126 /* GPIO_139 - CONFIG_STRAP1 */
127 PAD_GPI(GPIO_139, PULL_NONE),
128
129 /* GPIO_142 - CONFIG_STRAP2 */
130 PAD_GPI(GPIO_142, PULL_NONE),
131};
132
133static const struct soc_amd_gpio gpio_set_stage_ram_old[] = {
Martin Rothd0bc79b2018-03-19 16:39:19 -0600134 /* GPIO_0 - EC_PCH_PWR_BTN_ODL */
135 PAD_NF(GPIO_0, PWR_BTN_L, PULL_UP),
136
137 /* GPIO_1 - SYS_RST_ODL */
138 PAD_NF(GPIO_1, SYS_RESET_L, PULL_UP),
139
Richard Spiegele07e4f32018-03-27 17:41:11 -0700140 /* GPIO_2 - WLAN_PCIE_WAKE_3V3_ODL */
141 PAD_NF(GPIO_2, WAKE_L, PULL_UP),
142
Martin Rothd0bc79b2018-03-19 16:39:19 -0600143 /* GPIO_3 - MEM_VOLT_SEL */
144 PAD_GPI(GPIO_3, PULL_UP),
145
Martin Rothd0bc79b2018-03-19 16:39:19 -0600146 /* GPIO_5 - PCH_TRACKPAD_INT_3V3_ODL, SCI */
147 PAD_GPI(GPIO_5, PULL_UP),
148
Martin Rothd0bc79b2018-03-19 16:39:19 -0600149 /* GPIO_7 - APU_PWROK_OD (currently not used) */
150 PAD_GPI(GPIO_7, PULL_UP),
151
152 /* GPIO_8 - DDR_ALERT_3V3_L (currently not used) */
153 PAD_GPI(GPIO_8, PULL_UP),
154
Richard Spiegele07e4f32018-03-27 17:41:11 -0700155 /* GPIO_10 - SLP_S0_L (currently not used) */
156 PAD_NF(GPIO_10, S0A3_GPIO, PULL_UP),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600157
158 /* GPIO_11 - TOUCHSCREEN_INT_3V3_ODL, SCI */
159 PAD_GPI(GPIO_11, PULL_UP),
160
Richard Spiegele07e4f32018-03-27 17:41:11 -0700161 /* GPIO_12 - Unused (TP126) */
162 PAD_GPI(GPIO_12, PULL_UP),
163
164 /* GPIO_13 - APU_PEN_PDCT_ODL (currently not used) */
165 PAD_GPI(GPIO_13, PULL_UP),
166
Martin Rothd0bc79b2018-03-19 16:39:19 -0600167 /* GPIO_14 - APU_HP_INT_ODL, SCI */
168 PAD_GPI(GPIO_14, PULL_UP),
169
Richard Spiegele07e4f32018-03-27 17:41:11 -0700170 /* GPIO_16 - USB_C0_OC_L */
171 PAD_NF(GPIO_16, USB_OC0_L, PULL_UP),
172
173 /* GPIO_17 - USB_C1_OC_L */
174 PAD_NF(GPIO_17, USB_OC1_L, PULL_UP),
175
176 /* GPIO_18 - USB_A0_OC_ODL */
177 PAD_NF(GPIO_18, USB_OC2_L, PULL_UP),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600178
179 /* GPIO_19 - APU_I2C_SCL3 (Touchscreen) */
180 PAD_NF(GPIO_19, I2C3_SCL, PULL_UP),
181
182 /* GPIO_20 - APU_I2C_SDA3 (Touchscreen) */
183 PAD_NF(GPIO_20, I2C3_SDA, PULL_UP),
184
185 /* GPIO_21 - APU_PEN_INT_ODL, SCI */
186 PAD_GPI(GPIO_21, PULL_UP),
187
Richard Spiegele07e4f32018-03-27 17:41:11 -0700188 /* GPIO_24 - USB_A1_OC_ODL */
189 PAD_NF(GPIO_24, USB_OC3_L, PULL_UP),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600190
191 /* GPIO_25 - SD_CD */
192 PAD_NF(GPIO_25, SD0_CD, PULL_UP),
193
Martin Rothd0bc79b2018-03-19 16:39:19 -0600194 /* GPIO_42 - S5_MUX_CTRL */
195 PAD_NF(GPIO_42, S5_MUX_CTRL, PULL_NONE),
196
Richard Spiegele07e4f32018-03-27 17:41:11 -0700197 /* GPIO_67 - PEN_RESET */
198 PAD_GPO(GPIO_67, LOW),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600199
Richard Spiegele07e4f32018-03-27 17:41:11 -0700200 /* GPIO_75 - Unused (strap) (R139/R130) */
201 PAD_GPI(GPIO_75, PULL_UP),
202
203 /* GPIO_76 - EN_PP3300_TOUCHSCREEN */
204 PAD_GPO(GPIO_76, HIGH),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600205
206 /* GPIO_84 - HUB_RST (Active High) */
207 PAD_GPO(GPIO_84, LOW),
208
209 /* GPIO_85 - TOUCHSCREEN_RST (Active High) */
210 PAD_GPO(GPIO_85, LOW),
211
Richard Spiegele07e4f32018-03-27 17:41:11 -0700212 /* GPIO_86 - Unused (TP109) */
213 PAD_GPI(GPIO_86, PULL_UP),
214
Martin Rothd0bc79b2018-03-19 16:39:19 -0600215 /* GPIO_87 - LPC_SERIRQ */
216 PAD_NF(GPIO_87, SERIRQ, PULL_NONE),
217
218 /* GPIO_88 - LPC_CLKRUN_L */
219 PAD_NF(GPIO_88, LPC_CLKRUN_L, PULL_NONE),
220
Richard Spiegele07e4f32018-03-27 17:41:11 -0700221 /* GPIO_90 - EN_PP3300_CAMERA */
222 PAD_GPO(GPIO_90, HIGH),
223
224 /* GPIO_91 - EN_PP3300_TRACKPAD */
Martin Rothd0bc79b2018-03-19 16:39:19 -0600225 PAD_GPO(GPIO_91, HIGH),
226
Richard Spiegele07e4f32018-03-27 17:41:11 -0700227 /* GPIO_93 - EMMC_RST_L */
228 PAD_GPO(GPIO_93, HIGH),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600229
230 /* GPIO_101 - SD_WP_L */
231 PAD_NF(GPIO_101, SD0_WP, PULL_DOWN),
232
Richard Spiegele07e4f32018-03-27 17:41:11 -0700233 /* GPIO_102 - EN_SD_SOCKET_PWR */
234 PAD_NF(GPIO_102, SD0_PWR_CTRL, PULL_DOWN),
235
236 /* GPIO_113 - APU_I2C_SCL2 (Pen & Trackpad) */
237 PAD_NF(GPIO_113, I2C2_SCL, PULL_UP),
238
239 /* GPIO_114 - APU_I2C_SDA2 (Pen & Trackpad) */
240 PAD_NF(GPIO_114, I2C2_SDA, PULL_UP),
241
242 /* GPIO_115 - Unused (TP127) */
243 PAD_GPI(GPIO_115, PULL_UP),
244
Martin Rothd0bc79b2018-03-19 16:39:19 -0600245 /* GPIO_116 - PCIE_EMMC_CLKREQ_L */
246 PAD_NF(GPIO_116, CLK_REQ2_L, PULL_NONE),
247
Martin Rothd0bc79b2018-03-19 16:39:19 -0600248 /* GPIO_118 - PCH_SPI_CS0_L */
249 PAD_NF(GPIO_118, SPI_CS1_L, PULL_NONE),
250
251 /* GPIO_119 - SPK_PA_EN */
252 PAD_GPO(GPIO_119, HIGH),
253
Martin Rothd0bc79b2018-03-19 16:39:19 -0600254 /* GPIO_122 - APU_BIOS_FLASH_WP_L */
255 PAD_GPI(GPIO_122, PULL_NONE),
256
257 /* GPIO_126 - DMIC_CLK2_EN */
258 PAD_GPO(GPIO_126, HIGH),
259
260 /* GPIO_129 - APU_KBRST_L */
261 PAD_NF(GPIO_129, KBRST_L, PULL_UP),
262
Richard Spiegele07e4f32018-03-27 17:41:11 -0700263 /* GPIO_130 - Unused (TP55) */
264 PAD_GPI(GPIO_130, PULL_UP),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600265
266 /* GPIO_133 - APU_EDP_BKLTEN_L (backlight - Active LOW) */
267 PAD_GPO(GPIO_133, LOW),
268
Richard Spiegele07e4f32018-03-27 17:41:11 -0700269 /* GPIO_135 - Unused (TP128) */
270 PAD_GPI(GPIO_135, PULL_UP),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600271
Richard Spiegele07e4f32018-03-27 17:41:11 -0700272 /* GPIO_137 - AUDIO_CLK_EN (Remove in EVT?) */
273 PAD_GPO(GPIO_137, HIGH),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600274
275 /* GPIO_140 - I2S_BCLK_R (init to func0, used for I2S) */
276 PAD_NF(GPIO_140, UART1_CTS_L, PULL_NONE),
277
278 /* GPIO_141 - I2S2_DATA_MIC2 (init to func0, used for I2S) */
279 PAD_NF(GPIO_141, UART1_RXD, PULL_NONE),
280
Martin Rothd0bc79b2018-03-19 16:39:19 -0600281 /* GPIO_143 - I2S2_DATA (init to func0, used for I2S) */
282 PAD_NF(GPIO_143, UART1_TXD, PULL_NONE),
283
284 /* GPIO_144 - I2S_LR_R (init to func0, used for I2S) */
285 PAD_NF(GPIO_144, UART1_INTR, PULL_NONE),
286
287 /* GPIO_145 - PCH_I2C_AUDIO_SCL */
288 PAD_NF(GPIO_145, I2C0_SCL, PULL_NONE),
289
290 /* GPIO_146 - PCH_I2C_AUDIO_SDA */
291 PAD_NF(GPIO_146, I2C0_SDA, PULL_NONE),
292
293 /* GPIO_147 - PCH_I2C_H1_TPM_SCL */
294 PAD_NF(GPIO_147, I2C1_SCL, PULL_NONE),
295
296 /* GPIO_148 - PCH_I2C_H1_TPM_SDA */
297 PAD_NF(GPIO_148, I2C1_SDA, PULL_NONE),
298};
299
Richard Spiegel6fcb9b02018-04-18 08:06:33 -0700300static const struct soc_amd_gpio gpio_set_stage_ram[] = {
Richard Spiegele07e4f32018-03-27 17:41:11 -0700301 /* GPIO_0 - EC_PCH_PWR_BTN_ODL */
302 PAD_NF(GPIO_0, PWR_BTN_L, PULL_UP),
303
304 /* GPIO_1 - SYS_RST_ODL */
305 PAD_NF(GPIO_1, SYS_RESET_L, PULL_UP),
306
Martin Rothd0bc79b2018-03-19 16:39:19 -0600307 /* GPIO_2 - WLAN_PCIE_WAKE_3V3_ODL */
308 PAD_NF(GPIO_2, WAKE_L, PULL_UP),
309
Richard Spiegele07e4f32018-03-27 17:41:11 -0700310 /* GPIO_3 - MEM_VOLT_SEL */
311 PAD_GPI(GPIO_3, PULL_UP),
312
313 /* GPIO_5 - PCH_TRACKPAD_INT_3V3_ODL, SCI */
314 PAD_GPI(GPIO_5, PULL_UP),
315
316 /* GPIO_7 - APU_PWROK_OD (currently not used) */
317 PAD_GPI(GPIO_7, PULL_UP),
318
319 /* GPIO_8 - DDR_ALERT_3V3_L (currently not used) */
320 PAD_GPI(GPIO_8, PULL_UP),
321
Martin Rothd0bc79b2018-03-19 16:39:19 -0600322 /* GPIO_10 - SLP_S0_L (currently not used) */
323 PAD_NF(GPIO_10, S0A3_GPIO, PULL_UP),
324
Richard Spiegele07e4f32018-03-27 17:41:11 -0700325 /* GPIO_11 - TOUCHSCREEN_INT_3V3_ODL, SCI */
326 PAD_GPI(GPIO_11, PULL_UP),
327
Martin Rothd0bc79b2018-03-19 16:39:19 -0600328 /* GPIO_12 - EN_PP3300_TRACKPAD */
329 PAD_GPO(GPIO_12, HIGH),
330
331 /* GPIO_13 - APU_PEN_PDCT_ODL (currently not used) */
332 PAD_GPI(GPIO_13, PULL_UP),
333
Richard Spiegele07e4f32018-03-27 17:41:11 -0700334 /* GPIO_14 - APU_HP_INT_ODL, SCI */
335 PAD_GPI(GPIO_14, PULL_UP),
336
Martin Rothd0bc79b2018-03-19 16:39:19 -0600337 /* GPIO_16 - USB_C0_OC_L */
338 PAD_NF(GPIO_16, USB_OC0_L, PULL_UP),
339
340 /* GPIO_17 - USB_C1_OC_L */
341 PAD_NF(GPIO_17, USB_OC1_L, PULL_UP),
342
343 /* GPIO_18 - USB_A0_OC_ODL */
344 PAD_NF(GPIO_18, USB_OC2_L, PULL_UP),
345
Richard Spiegele07e4f32018-03-27 17:41:11 -0700346 /* GPIO_19 - APU_I2C_SCL3 (Touchscreen) */
347 PAD_NF(GPIO_19, I2C3_SCL, PULL_UP),
348
349 /* GPIO_20 - APU_I2C_SDA3 (Touchscreen) */
350 PAD_NF(GPIO_20, I2C3_SDA, PULL_UP),
351
352 /* GPIO_21 - APU_PEN_INT_ODL, SCI */
353 PAD_GPI(GPIO_21, PULL_UP),
354
355 /* GPIO_25 - SD_CD */
356 PAD_NF(GPIO_25, SD0_CD, PULL_UP),
357
358 /* GPIO_42 - S5_MUX_CTRL */
359 PAD_NF(GPIO_42, S5_MUX_CTRL, PULL_NONE),
360
Martin Rothd0bc79b2018-03-19 16:39:19 -0600361 /* GPIO_67 - PEN_RESET */
362 PAD_GPO(GPIO_67, LOW),
363
364 /* GPIO_75 - Unused (strap) (R139/R130) */
365 PAD_GPI(GPIO_75, PULL_UP),
366
367 /* GPIO_76 - EN_PP3300_TOUCHSCREEN */
368 PAD_GPO(GPIO_76, HIGH),
369
Richard Spiegele07e4f32018-03-27 17:41:11 -0700370 /* GPIO_84 - HUB_RST (Active High) */
371 PAD_GPO(GPIO_84, LOW),
372
373 /* GPIO_85 - TOUCHSCREEN_RST (Active High) */
374 PAD_GPO(GPIO_85, LOW),
375
Martin Rothd0bc79b2018-03-19 16:39:19 -0600376 /* GPIO_86 - Unused (TP109) */
377 PAD_GPI(GPIO_86, PULL_UP),
378
Richard Spiegele07e4f32018-03-27 17:41:11 -0700379 /* GPIO_87 - LPC_SERIRQ */
380 PAD_NF(GPIO_87, SERIRQ, PULL_NONE),
381
382 /* GPIO_88 - LPC_CLKRUN_L */
383 PAD_NF(GPIO_88, LPC_CLKRUN_L, PULL_NONE),
384
Martin Rothd0bc79b2018-03-19 16:39:19 -0600385 /* GPIO_90 - EN_PP3300_CAMERA */
386 PAD_GPO(GPIO_90, HIGH),
387
Richard Spiegele07e4f32018-03-27 17:41:11 -0700388 /* GPIO_91 - DMIC_CLK1_EN */
389 PAD_GPO(GPIO_91, HIGH),
390
391 /* GPIO_93 - EMMC_RST */
392 PAD_GPO(GPIO_93, LOW),
393
394 /* GPIO_101 - SD_WP_L */
395 PAD_NF(GPIO_101, SD0_WP, PULL_DOWN),
396
Martin Rothd0bc79b2018-03-19 16:39:19 -0600397 /* GPIO_102 - EN_SD_SOCKET_PWR */
398 PAD_NF(GPIO_102, SD0_PWR_CTRL, PULL_DOWN),
399
400 /* GPIO_113 - APU_I2C_SCL2 (Pen & Trackpad) */
401 PAD_NF(GPIO_113, I2C2_SCL, PULL_UP),
402
403 /* GPIO_114 - APU_I2C_SDA2 (Pen & Trackpad) */
404 PAD_NF(GPIO_114, I2C2_SDA, PULL_UP),
405
406 /* GPIO_115 - Unused (TP127) */
407 PAD_GPI(GPIO_115, PULL_UP),
408
Richard Spiegele07e4f32018-03-27 17:41:11 -0700409 /* GPIO_116 - PCIE_EMMC_CLKREQ_L */
410 PAD_NF(GPIO_116, CLK_REQ2_L, PULL_NONE),
411
412 /* GPIO_118 - PCH_SPI_CS0_L */
413 PAD_NF(GPIO_118, SPI_CS1_L, PULL_NONE),
414
415 /* GPIO_119 - SPK_PA_EN */
416 PAD_GPO(GPIO_119, HIGH),
417
418 /* GPIO_122 - APU_BIOS_FLASH_WP_L */
419 PAD_GPI(GPIO_122, PULL_NONE),
420
421 /* GPIO_126 - DMIC_CLK2_EN */
422 PAD_GPO(GPIO_126, HIGH),
423
424 /* GPIO_129 - APU_KBRST_L */
425 PAD_NF(GPIO_129, KBRST_L, PULL_UP),
426
Martin Rothd0bc79b2018-03-19 16:39:19 -0600427 /* GPIO_130 - Unused (TP55) */
428 PAD_GPI(GPIO_130, PULL_UP),
429
Richard Spiegele07e4f32018-03-27 17:41:11 -0700430 /* GPIO_133 - APU_EDP_BKLTEN_L (backlight - Active LOW) */
431 PAD_GPO(GPIO_133, LOW),
432
Martin Rothd0bc79b2018-03-19 16:39:19 -0600433 /* GPIO_135 - Unused (TP128) */
434 PAD_GPI(GPIO_135, PULL_UP),
Richard Spiegele07e4f32018-03-27 17:41:11 -0700435
436 /* GPIO_137 - Unused (TP27) */
437 PAD_GPI(GPIO_137, PULL_UP),
438
439 /* GPIO_140 - I2S_BCLK_R (init to func0, used for I2S) */
440 PAD_NF(GPIO_140, UART1_CTS_L, PULL_NONE),
441
442 /* GPIO_141 - I2S2_DATA_MIC2 (init to func0, used for I2S) */
443 PAD_NF(GPIO_141, UART1_RXD, PULL_NONE),
444
445 /* GPIO_143 - I2S2_DATA (init to func0, used for I2S) */
446 PAD_NF(GPIO_143, UART1_TXD, PULL_NONE),
447
448 /* GPIO_144 - I2S_LR_R (init to func0, used for I2S) */
449 PAD_NF(GPIO_144, UART1_INTR, PULL_NONE),
450
451 /* GPIO_145 - PCH_I2C_AUDIO_SCL */
452 PAD_NF(GPIO_145, I2C0_SCL, PULL_NONE),
453
454 /* GPIO_146 - PCH_I2C_AUDIO_SDA */
455 PAD_NF(GPIO_146, I2C0_SDA, PULL_NONE),
456
457 /* GPIO_147 - PCH_I2C_H1_TPM_SCL */
458 PAD_NF(GPIO_147, I2C1_SCL, PULL_NONE),
459
460 /* GPIO_148 - PCH_I2C_H1_TPM_SDA */
461 PAD_NF(GPIO_148, I2C1_SDA, PULL_NONE),
Martin Rothd0bc79b2018-03-19 16:39:19 -0600462};
463
Aaron Durbin64031672018-04-21 14:45:32 -0600464const __weak
Richard Spiegel6fcb9b02018-04-18 08:06:33 -0700465struct soc_amd_gpio *variant_early_gpio_table(size_t *size)
Richard Spiegele539c852017-12-25 18:25:58 -0700466{
Martin Rothd0bc79b2018-03-19 16:39:19 -0600467 if (board_id() < 2) {
468 *size = ARRAY_SIZE(gpio_set_stage_reset_old);
469 return gpio_set_stage_reset_old;
470 } else {
471 *size = ARRAY_SIZE(gpio_set_stage_reset);
472 return gpio_set_stage_reset;
473 }
Justin TerAvest3fe3f042018-02-14 19:10:15 -0700474}
475
Aaron Durbin64031672018-04-21 14:45:32 -0600476const __weak
Richard Spiegel6fcb9b02018-04-18 08:06:33 -0700477struct soc_amd_gpio *variant_gpio_table(size_t *size)
Justin TerAvest3fe3f042018-02-14 19:10:15 -0700478{
Martin Rothd0bc79b2018-03-19 16:39:19 -0600479 if (board_id() < 2) {
480 *size = ARRAY_SIZE(gpio_set_stage_ram_old);
481 return gpio_set_stage_ram_old;
482 } else {
483 *size = ARRAY_SIZE(gpio_set_stage_ram);
484 return gpio_set_stage_ram;
485 }
Richard Spiegele539c852017-12-25 18:25:58 -0700486}
487
Martin Rothac35e622017-11-07 13:43:02 -0700488/*
489 * GPE setup table must match ACPI GPE ASL
490 * { gevent, gpe, direction, level }
491 */
492static const struct sci_source gpe_table[] = {
493
Martin Roth38115912017-11-20 16:19:00 -0700494 /* PCH_TRACKPAD_INT_3V3_ODL */
495 {
496 .scimap = 7,
497 .gpe = 7,
498 .direction = SMI_SCI_LVL_LOW,
499 .level = SMI_SCI_EDG,
500 },
501
Daniel Kurtzd6487302018-04-18 17:57:09 -0600502 /* EC_PCH_WAKE_L */
503 {
504 .scimap = EC_WAKE_GPI,
505 .gpe = EC_WAKE_GPI,
506 .direction = SMI_SCI_LVL_LOW,
507 .level = SMI_SCI_EDG,
508 },
509
Martin Rotha55b0e52017-12-06 00:00:13 -0700510 /* H1_PCH_INT_ODL */
Martin Roth38115912017-11-20 16:19:00 -0700511 {
512 .scimap = 22,
513 .gpe = 22,
514 .direction = SMI_SCI_LVL_LOW,
Martin Rotha55b0e52017-12-06 00:00:13 -0700515 .level = SMI_SCI_EDG,
Martin Roth38115912017-11-20 16:19:00 -0700516 },
517
Martin Rotha55b0e52017-12-06 00:00:13 -0700518 /* TOUCHSCREEN_INT_3V3_ODL */
Martin Roth38115912017-11-20 16:19:00 -0700519 {
Martin Rotha55b0e52017-12-06 00:00:13 -0700520 .scimap = 18,
521 .gpe = 18,
Martin Roth38115912017-11-20 16:19:00 -0700522 .direction = SMI_SCI_LVL_LOW,
Martin Rotha55b0e52017-12-06 00:00:13 -0700523 .level = SMI_SCI_EDG,
Martin Roth38115912017-11-20 16:19:00 -0700524 },
525
Martin Rotha55b0e52017-12-06 00:00:13 -0700526
Martin Roth38115912017-11-20 16:19:00 -0700527 /* APU_HP_INT_ODL */
528 {
529 .scimap = 6,
530 .gpe = 6,
531 .direction = SMI_SCI_LVL_LOW,
Martin Rotha55b0e52017-12-06 00:00:13 -0700532 .level = SMI_SCI_EDG,
Martin Roth38115912017-11-20 16:19:00 -0700533 },
534
535 /* APU_PEN_INT_ODL */
536 {
537 .scimap = 5,
538 .gpe = 5,
Martin Rotha55b0e52017-12-06 00:00:13 -0700539 .direction = SMI_SCI_LVL_LOW,
540 .level = SMI_SCI_EDG,
541 },
542
543 /* EC_SCI_ODL */
544 {
545 .scimap = 3,
546 .gpe = 3,
547 .direction = SMI_SCI_LVL_LOW,
Martin Roth38115912017-11-20 16:19:00 -0700548 .level = SMI_SCI_EDG,
549 },
Martin Rothac35e622017-11-07 13:43:02 -0700550};
551
Aaron Durbin64031672018-04-21 14:45:32 -0600552const __weak struct sci_source *get_gpe_table(size_t *num)
Martin Rothac35e622017-11-07 13:43:02 -0700553{
554 *num = ARRAY_SIZE(gpe_table);
555 return gpe_table;
556}
Marc Jonesdf6b51b2017-11-29 20:07:46 -0700557
Aaron Durbin64031672018-04-21 14:45:32 -0600558int __weak variant_get_xhci_oc_map(uint16_t *map)
Marc Jonesdf6b51b2017-11-29 20:07:46 -0700559{
Martin Roth96b2de92017-12-13 20:07:26 -0700560 *map = USB_OC0 << OC_PORT0_SHIFT; /* USB-C Port0/4 = OC0 */
561 *map |= USB_OC1 << OC_PORT1_SHIFT; /* USB-C Port1/5 = OC1 */
562 *map |= USB_OC2 << OC_PORT2_SHIFT; /* USB-A HUB Port2/6 = OC2 */
Marc Jonesdf6b51b2017-11-29 20:07:46 -0700563 *map |= USB_OC_DISABLE << OC_PORT3_SHIFT;
564 return 0;
565}
566
Aaron Durbin64031672018-04-21 14:45:32 -0600567int __weak variant_get_ehci_oc_map(uint16_t *map)
Marc Jonesdf6b51b2017-11-29 20:07:46 -0700568{
Martin Roth96b2de92017-12-13 20:07:26 -0700569 *map = USB_OC_DISABLE_ALL;
Marc Jonesdf6b51b2017-11-29 20:07:46 -0700570 return 0;
571}