1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 #include <baseboard/gpio.h>
4 #include <baseboard/variants.h>
5 #include <commonlib/helpers.h>
8 /* GPIO configuration in ramstage*/
9 static const struct soc_amd_gpio base_gpio_table
[] = {
11 PAD_NF(GPIO_0
, PWR_BTN_L
, PULL_NONE
),
13 PAD_NF(GPIO_1
, SYS_RESET_L
, PULL_NONE
),
15 PAD_NF_SCI(GPIO_2
, WAKE_L
, PULL_NONE
, EDGE_LOW
),
20 /* EN_PP3300_TCHPAD */
21 PAD_GPO(GPIO_5
, HIGH
),
22 /* EN_PP3300_WWAN_X */
24 /* SOC_PEN_DETECT_ODL */
25 PAD_WAKE(GPIO_7
, PULL_NONE
, EDGE_LOW
, S0i3
),
26 /* SOC_TCHPAD_INT_ODL */
27 PAD_SCI(GPIO_8
, PULL_NONE
, LEVEL_LOW
),
29 PAD_GPO(GPIO_9
, HIGH
),
31 PAD_GPO(GPIO_11
, HIGH
),
34 /* GPIO_13 - GPIO_15: Not available */
36 PAD_NF(GPIO_16
, USB_OC0_L
, PULL_NONE
),
37 /* EC_SOC_WAKE_R_ODL */
38 PAD_SCI(GPIO_17
, PULL_UP
, EDGE_LOW
),
40 PAD_SCI(GPIO_18
, PULL_NONE
, LEVEL_LOW
),
42 PAD_NF(GPIO_19
, I2C3_SCL
, PULL_NONE
),
44 PAD_NF(GPIO_20
, I2C3_SDA
, PULL_NONE
),
48 PAD_NF(GPIO_22
, ESPI_ALERT_D1
, PULL_NONE
),
50 PAD_NF(GPIO_23
, AC_PRES
, PULL_NONE
),
53 /* GPIO_25-26: Not available */
54 /* SOC_PCIE_RST1_R_L */
56 /* GPIO_28: Not available */
58 PAD_GPO(GPIO_29
, LOW
),
60 PAD_NF(GPIO_30
, ESPI_CS_L
, PULL_NONE
),
62 PAD_GPO(GPIO_31
, LOW
),
64 PAD_NF(GPIO_32
, LPC_RST_L
, PULL_NONE
),
65 /* GPIO_33 - GPIO_37: Not available */
67 PAD_GPO(GPIO_38
, HIGH
),
69 PAD_GPO(GPIO_39
, HIGH
),
71 PAD_GPO(GPIO_40
, LOW
),
72 /* GPIO_41 - GPIO_66: Not available */
73 /* GPIO_67 (Unused) */
76 PAD_NF(GPIO_68
, SPI1_DAT2
, PULL_NONE
),
78 PAD_NF(GPIO_69
, SPI1_DAT3
, PULL_NONE
),
79 /* SOC_CLK_FPMCU_R if SPI FP populated */
81 /* EN_TCHSCR_REPORT */
82 PAD_GPO(GPIO_74
, LOW
),
83 /* SOC_CLK_FPMCU_R_L if SPI FP populated */
87 /* ESPI_SOC_CLK_EC_R */
88 PAD_NF(GPIO_77
, SPI1_CLK
, PULL_NONE
),
90 PAD_GPI(GPIO_78
, PULL_NONE
),
92 PAD_GPI(GPIO_79
, PULL_NONE
),
93 /* ESPI_SOC_D1_EC_R */
94 PAD_NF(GPIO_80
, SPI1_DAT1
, PULL_NONE
),
95 /* ESPI_SOC_D0_EC_R */
96 PAD_NF(GPIO_81
, SPI1_DAT0
, PULL_NONE
),
98 PAD_INT(GPIO_84
, PULL_NONE
, EDGE_LOW
, STATUS_DELIVERY
),
102 PAD_GPI(GPIO_89
, PULL_NONE
),
104 PAD_GPI(GPIO_90
, PULL_NONE
),
106 PAD_GPI(GPIO_91
, PULL_NONE
),
107 /* CLK_REQ0_L / WLAN */
108 PAD_NF(GPIO_92
, CLK_REQ0_L
, PULL_NONE
),
109 /* SPI_SOC_DO_FPMCU_DI_R if SPI FP populated */
111 /* SPI_SOC_DI_FPMCU_DO_R if SPI FP populated */
114 PAD_GPI(GPIO_106
, PULL_NONE
),
116 PAD_GPI(GPIO_107
, PULL_NONE
),
118 PAD_NF(GPIO_113
, I2C2_SCL
, PULL_NONE
),
120 PAD_NF(GPIO_114
, I2C2_SDA
, PULL_NONE
),
121 /* CLK_REQ1_L / SD */
122 PAD_NF(GPIO_115
, CLK_REQ1_L
, PULL_NONE
),
123 /* CLK_REQ2_L / WWAN */
124 PAD_NF(GPIO_116
, CLK_REQ2_L
, PULL_NONE
),
127 /* CLK_REQ3_L / SSD */
128 PAD_NF(GPIO_131
, CLK_REQ3_L
, PULL_NONE
),
130 PAD_GPO(GPIO_132
, LOW
),
132 PAD_GPO(GPIO_135
, HIGH
),
140 PAD_GPI(GPIO_139
, PULL_NONE
),
141 /* UART1_TXD if UART FP populated */
143 /* UART0_RXD / DBG */
144 PAD_NF(GPIO_141
, UART0_RXD
, PULL_NONE
),
145 /* UART1_RXD if UART FP populated */
147 /* UART0_TXD / DBG */
148 PAD_NF(GPIO_143
, UART0_TXD
, PULL_NONE
),
149 /* EN_PP3300_TCHSCR */
150 PAD_GPO(GPIO_144
, HIGH
),
152 PAD_NF(GPIO_145
, I2C0_SCL
, PULL_NONE
),
154 PAD_NF(GPIO_146
, I2C0_SDA
, PULL_NONE
),
156 PAD_NF(GPIO_147
, I2C1_SCL
, PULL_NONE
),
158 PAD_NF(GPIO_148
, I2C1_SDA
, PULL_NONE
),
160 PAD_GPO(GPIO_153
, LOW
),
162 PAD_GPO(GPIO_154
, LOW
),
164 PAD_GPO(GPIO_155
, HIGH
),
166 PAD_GPO(GPIO_156
, LOW
),
168 PAD_GPO(GPIO_157
, HIGH
),
171 static const struct soc_amd_gpio tpm_gpio_table
[] = {
173 PAD_NF(GPIO_113
, I2C2_SCL
, PULL_NONE
),
175 PAD_NF(GPIO_114
, I2C2_SDA
, PULL_NONE
),
177 PAD_INT(GPIO_84
, PULL_NONE
, EDGE_LOW
, STATUS_DELIVERY
),
180 /* GPIO configuration in bootblock */
181 static const struct soc_amd_gpio bootblock_gpio_table
[] = {
184 PAD_GPO(GPIO_156
, LOW
),
187 /* Early GPIO configuration */
188 static const struct soc_amd_gpio early_gpio_table
[] = {
189 /* WLAN_AUX_RST_L (ACTIVE LOW) */
190 PAD_GPO(GPIO_38
, LOW
),
193 PAD_GPO(GPIO_9
, HIGH
),
196 /* PCIE_RST needs to be brought high before FSP-M runs */
197 static const struct soc_amd_gpio romstage_gpio_table
[] = {
198 /* Deassert all AUX_RESET lines & PCIE_RST */
200 PAD_GPO(GPIO_29
, LOW
),
202 PAD_GPO(GPIO_31
, LOW
),
203 /* WLAN_AUX_RST_L (ACTIVE LOW) */
204 PAD_GPO(GPIO_38
, HIGH
),
205 /* WWAN_AUX_RST_L (ACTIVE LOW) */
206 PAD_GPO(GPIO_39
, HIGH
),
207 /* CLK_REQ0_L / WLAN */
208 PAD_NF(GPIO_92
, CLK_REQ0_L
, PULL_NONE
),
209 /* CLK_REQ1_L / SD */
210 PAD_NF(GPIO_115
, CLK_REQ1_L
, PULL_NONE
),
211 /* CLK_REQ2_L / WWAN */
212 PAD_NF(GPIO_116
, CLK_REQ2_L
, PULL_NONE
),
213 /* CLK_REQ3_L / SSD */
214 PAD_NF(GPIO_131
, CLK_REQ3_L
, PULL_NONE
),
216 PAD_NFO(GPIO_26
, PCIE_RST0_L
, HIGH
),
219 static const struct soc_amd_gpio espi_gpio_table
[] = {
221 PAD_NF(GPIO_30
, ESPI_CS_L
, PULL_NONE
),
223 PAD_NF(GPIO_77
, SPI1_CLK
, PULL_NONE
),
225 PAD_NF(GPIO_81
, SPI1_DAT0
, PULL_NONE
),
227 PAD_NF(GPIO_80
, SPI1_DAT1
, PULL_NONE
),
229 PAD_NF(GPIO_68
, SPI1_DAT2
, PULL_NONE
),
231 PAD_NF(GPIO_69
, SPI1_DAT3
, PULL_NONE
),
233 PAD_NF(GPIO_22
, ESPI_ALERT_D1
, PULL_NONE
),
236 void baseboard_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)
238 *size
= ARRAY_SIZE(base_gpio_table
);
239 *gpio
= base_gpio_table
;
242 __weak
void baseboard_romstage_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)
244 *size
= ARRAY_SIZE(romstage_gpio_table
);
245 *gpio
= romstage_gpio_table
;
248 __weak
void variant_bootblock_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)
250 *size
= ARRAY_SIZE(bootblock_gpio_table
);
251 *gpio
= bootblock_gpio_table
;
254 __weak
void variant_early_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)
256 *size
= ARRAY_SIZE(early_gpio_table
);
257 *gpio
= early_gpio_table
;
260 void variant_espi_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)
262 *size
= ARRAY_SIZE(espi_gpio_table
);
263 *gpio
= espi_gpio_table
;
266 __weak
void variant_tpm_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)
268 *size
= ARRAY_SIZE(tpm_gpio_table
);
269 *gpio
= tpm_gpio_table
;
272 __weak
void variant_override_gpio_table(const struct soc_amd_gpio
**gpio
, size_t *size
)