1 /*
2  * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef _SOC_IO_MUX_REG_H_
7 #define _SOC_IO_MUX_REG_H_
8 
9 #include "soc.h"
10 
11 /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */
12 /* Output enable in sleep mode */
13 #define SLP_OE (BIT(0))
14 #define SLP_OE_M (BIT(0))
15 #define SLP_OE_V 1
16 #define SLP_OE_S 0
17 /* Pin used for wakeup from sleep */
18 #define SLP_SEL (BIT(1))
19 #define SLP_SEL_M (BIT(1))
20 #define SLP_SEL_V 1
21 #define SLP_SEL_S 1
22 /* Pulldown enable in sleep mode */
23 #define SLP_PD (BIT(2))
24 #define SLP_PD_M (BIT(2))
25 #define SLP_PD_V 1
26 #define SLP_PD_S 2
27 /* Pullup enable in sleep mode */
28 #define SLP_PU (BIT(3))
29 #define SLP_PU_M (BIT(3))
30 #define SLP_PU_V 1
31 #define SLP_PU_S 3
32 /* Input enable in sleep mode */
33 #define SLP_IE (BIT(4))
34 #define SLP_IE_M (BIT(4))
35 #define SLP_IE_V 1
36 #define SLP_IE_S 4
37 /* Drive strength in sleep mode */
38 #define SLP_DRV 0x3
39 #define SLP_DRV_M (SLP_DRV_V << SLP_DRV_S)
40 #define SLP_DRV_V 0x3
41 #define SLP_DRV_S 5
42 /* Pulldown enable */
43 #define FUN_PD (BIT(7))
44 #define FUN_PD_M (BIT(7))
45 #define FUN_PD_V 1
46 #define FUN_PD_S 7
47 /* Pullup enable */
48 #define FUN_PU (BIT(8))
49 #define FUN_PU_M (BIT(8))
50 #define FUN_PU_V 1
51 #define FUN_PU_S 8
52 /* Input enable */
53 #define FUN_IE (BIT(9))
54 #define FUN_IE_M (FUN_IE_V << FUN_IE_S)
55 #define FUN_IE_V 1
56 #define FUN_IE_S 9
57 /* Drive strength */
58 #define FUN_DRV 0x3
59 #define FUN_DRV_M (FUN_DRV_V << FUN_DRV_S)
60 #define FUN_DRV_V 0x3
61 #define FUN_DRV_S 10
62 /* Function select (possible values are defined for each pin as FUNC_pinname_function below) */
63 #define MCU_SEL 0x7
64 #define MCU_SEL_M (MCU_SEL_V << MCU_SEL_S)
65 #define MCU_SEL_V 0x7
66 #define MCU_SEL_S 12
67 
68 #define PIN_SLP_INPUT_ENABLE(PIN_NAME)           SET_PERI_REG_MASK(PIN_NAME,SLP_IE)
69 #define PIN_SLP_INPUT_DISABLE(PIN_NAME)          CLEAR_PERI_REG_MASK(PIN_NAME,SLP_IE)
70 #define PIN_SLP_OUTPUT_ENABLE(PIN_NAME)          SET_PERI_REG_MASK(PIN_NAME,SLP_OE)
71 #define PIN_SLP_OUTPUT_DISABLE(PIN_NAME)         CLEAR_PERI_REG_MASK(PIN_NAME,SLP_OE)
72 #define PIN_SLP_PULLUP_ENABLE(PIN_NAME)           SET_PERI_REG_MASK(PIN_NAME,SLP_PU)
73 #define PIN_SLP_PULLUP_DISABLE(PIN_NAME)          CLEAR_PERI_REG_MASK(PIN_NAME,SLP_PU)
74 #define PIN_SLP_PULLDOWN_ENABLE(PIN_NAME)          SET_PERI_REG_MASK(PIN_NAME,SLP_PD)
75 #define PIN_SLP_PULLDOWN_DISABLE(PIN_NAME)         CLEAR_PERI_REG_MASK(PIN_NAME,SLP_PD)
76 #define PIN_SLP_SEL_ENABLE(PIN_NAME)          SET_PERI_REG_MASK(PIN_NAME,SLP_SEL)
77 #define PIN_SLP_SEL_DISABLE(PIN_NAME)         CLEAR_PERI_REG_MASK(PIN_NAME,SLP_SEL)
78 
79 #define PIN_INPUT_ENABLE(PIN_NAME)               SET_PERI_REG_MASK(PIN_NAME,FUN_IE)
80 #define PIN_INPUT_DISABLE(PIN_NAME)              CLEAR_PERI_REG_MASK(PIN_NAME,FUN_IE)
81 #define PIN_SET_DRV(PIN_NAME, drv)            REG_SET_FIELD(PIN_NAME, FUN_DRV, (drv));
82 
83 #define PIN_FUNC_SELECT(PIN_NAME, FUNC)      REG_SET_FIELD(PIN_NAME, MCU_SEL, FUNC)
84 
85 #define PIN_FUNC_GPIO                               2
86 
87 #define SPI_CLK_GPIO_NUM                            6
88 #define SPI_CS0_GPIO_NUM                            11
89 #define SPI_Q_GPIO_NUM                              7
90 #define SPI_D_GPIO_NUM                              8
91 #define SPI_WP_GPIO_NUM                             10
92 #define SPI_HD_GPIO_NUM                             9
93 #define XTAL32K_P_GPIO_NUM                          32
94 #define XTAL32K_N_GPIO_NUM                          33
95 
96 #define PIN_CTRL                          (DR_REG_IO_MUX_BASE +0x00)
97 #define CLK_OUT3                                    0xf
98 #define CLK_OUT3_V                                  CLK_OUT3
99 #define CLK_OUT3_S                                  8
100 #define CLK_OUT3_M                                  (CLK_OUT3_V << CLK_OUT3_S)
101 #define CLK_OUT2                                    0xf
102 #define CLK_OUT2_V                                  CLK_OUT2
103 #define CLK_OUT2_S                                  4
104 #define CLK_OUT2_M                                  (CLK_OUT2_V << CLK_OUT2_S)
105 #define CLK_OUT1                                    0xf
106 #define CLK_OUT1_V                                  CLK_OUT1
107 #define CLK_OUT1_S                                  0
108 #define CLK_OUT1_M                                  (CLK_OUT1_V << CLK_OUT1_S)
109 
110 #define PERIPHS_IO_MUX_GPIO0_U            (DR_REG_IO_MUX_BASE +0x44)
111 #define IO_MUX_GPIO0_REG                  PERIPHS_IO_MUX_GPIO0_U
112 #define FUNC_GPIO0_EMAC_TX_CLK                      5
113 #define FUNC_GPIO0_GPIO0                            2
114 #define FUNC_GPIO0_CLK_OUT1                         1
115 #define FUNC_GPIO0_GPIO0_0                          0
116 
117 #define PERIPHS_IO_MUX_U0TXD_U            (DR_REG_IO_MUX_BASE +0x88)
118 #define IO_MUX_GPIO1_REG                  PERIPHS_IO_MUX_U0TXD_U
119 #define FUNC_U0TXD_EMAC_RXD2                        5
120 #define FUNC_U0TXD_GPIO1                            2
121 #define FUNC_U0TXD_CLK_OUT3                         1
122 #define FUNC_U0TXD_U0TXD                            0
123 
124 #define PERIPHS_IO_MUX_GPIO2_U            (DR_REG_IO_MUX_BASE +0x40)
125 #define IO_MUX_GPIO2_REG                  PERIPHS_IO_MUX_GPIO2_U
126 #define FUNC_GPIO2_SD_DATA0                         4
127 #define FUNC_GPIO2_HS2_DATA0                        3
128 #define FUNC_GPIO2_GPIO2                            2
129 #define FUNC_GPIO2_HSPIWP                           1
130 #define FUNC_GPIO2_GPIO2_0                          0
131 
132 #define PERIPHS_IO_MUX_U0RXD_U            (DR_REG_IO_MUX_BASE +0x84)
133 #define IO_MUX_GPIO3_REG                    PERIPHS_IO_MUX_U0RXD_U
134 #define FUNC_U0RXD_GPIO3                            2
135 #define FUNC_U0RXD_CLK_OUT2                         1
136 #define FUNC_U0RXD_U0RXD                            0
137 
138 #define PERIPHS_IO_MUX_GPIO4_U            (DR_REG_IO_MUX_BASE +0x48)
139 #define IO_MUX_GPIO4_REG                    PERIPHS_IO_MUX_GPIO4_U
140 #define FUNC_GPIO4_EMAC_TX_ER                       5
141 #define FUNC_GPIO4_SD_DATA1                         4
142 #define FUNC_GPIO4_HS2_DATA1                        3
143 #define FUNC_GPIO4_GPIO4                            2
144 #define FUNC_GPIO4_HSPIHD                           1
145 #define FUNC_GPIO4_GPIO4_0                          0
146 
147 #define PERIPHS_IO_MUX_GPIO5_U            (DR_REG_IO_MUX_BASE +0x6c)
148 #define IO_MUX_GPIO5_REG                   PERIPHS_IO_MUX_GPIO5_U
149 #define FUNC_GPIO5_EMAC_RX_CLK                      5
150 #define FUNC_GPIO5_HS1_DATA6                        3
151 #define FUNC_GPIO5_GPIO5                            2
152 #define FUNC_GPIO5_VSPICS0                          1
153 #define FUNC_GPIO5_GPIO5_0                          0
154 
155 #define PERIPHS_IO_MUX_SD_CLK_U           (DR_REG_IO_MUX_BASE +0x60)
156 #define IO_MUX_GPIO6_REG                    PERIPHS_IO_MUX_SD_CLK_U
157 #define FUNC_SD_CLK_U1CTS                           4
158 #define FUNC_SD_CLK_HS1_CLK                         3
159 #define FUNC_SD_CLK_GPIO6                           2
160 #define FUNC_SD_CLK_SPICLK                          1
161 #define FUNC_SD_CLK_SD_CLK                          0
162 
163 #define PERIPHS_IO_MUX_SD_DATA0_U         (DR_REG_IO_MUX_BASE +0x64)
164 #define IO_MUX_GPIO7_REG                    PERIPHS_IO_MUX_SD_DATA0_U
165 #define FUNC_SD_DATA0_U2RTS                         4
166 #define FUNC_SD_DATA0_HS1_DATA0                     3
167 #define FUNC_SD_DATA0_GPIO7                         2
168 #define FUNC_SD_DATA0_SPIQ                          1
169 #define FUNC_SD_DATA0_SD_DATA0                      0
170 
171 #define PERIPHS_IO_MUX_SD_DATA1_U         (DR_REG_IO_MUX_BASE +0x68)
172 #define IO_MUX_GPIO8_REG                    PERIPHS_IO_MUX_SD_DATA1_U
173 #define FUNC_SD_DATA1_U2CTS                         4
174 #define FUNC_SD_DATA1_HS1_DATA1                     3
175 #define FUNC_SD_DATA1_GPIO8                         2
176 #define FUNC_SD_DATA1_SPID                          1
177 #define FUNC_SD_DATA1_SD_DATA1                      0
178 
179 #define PERIPHS_IO_MUX_SD_DATA2_U         (DR_REG_IO_MUX_BASE +0x54)
180 #define IO_MUX_GPIO9_REG                    PERIPHS_IO_MUX_SD_DATA2_U
181 #define FUNC_SD_DATA2_U1RXD                         4
182 #define FUNC_SD_DATA2_HS1_DATA2                     3
183 #define FUNC_SD_DATA2_GPIO9                         2
184 #define FUNC_SD_DATA2_SPIHD                         1
185 #define FUNC_SD_DATA2_SD_DATA2                      0
186 
187 #define PERIPHS_IO_MUX_SD_DATA3_U         (DR_REG_IO_MUX_BASE +0x58)
188 #define IO_MUX_GPIO10_REG                   PERIPHS_IO_MUX_SD_DATA3_U
189 #define FUNC_SD_DATA3_U1TXD                         4
190 #define FUNC_SD_DATA3_HS1_DATA3                     3
191 #define FUNC_SD_DATA3_GPIO10                        2
192 #define FUNC_SD_DATA3_SPIWP                         1
193 #define FUNC_SD_DATA3_SD_DATA3                      0
194 
195 #define PERIPHS_IO_MUX_SD_CMD_U           (DR_REG_IO_MUX_BASE +0x5c)
196 #define IO_MUX_GPIO11_REG                   PERIPHS_IO_MUX_SD_CMD_U
197 #define FUNC_SD_CMD_U1RTS                           4
198 #define FUNC_SD_CMD_HS1_CMD                         3
199 #define FUNC_SD_CMD_GPIO11                          2
200 #define FUNC_SD_CMD_SPICS0                          1
201 #define FUNC_SD_CMD_SD_CMD                          0
202 
203 #define PERIPHS_IO_MUX_MTDI_U             (DR_REG_IO_MUX_BASE +0x34)
204 #define IO_MUX_GPIO12_REG                    PERIPHS_IO_MUX_MTDI_U
205 #define FUNC_MTDI_EMAC_TXD3                         5
206 #define FUNC_MTDI_SD_DATA2                          4
207 #define FUNC_MTDI_HS2_DATA2                         3
208 #define FUNC_MTDI_GPIO12                            2
209 #define FUNC_MTDI_HSPIQ                             1
210 #define FUNC_MTDI_MTDI                              0
211 
212 #define PERIPHS_IO_MUX_MTCK_U             (DR_REG_IO_MUX_BASE +0x38)
213 #define IO_MUX_GPIO13_REG                    PERIPHS_IO_MUX_MTCK_U
214 #define FUNC_MTCK_EMAC_RX_ER                        5
215 #define FUNC_MTCK_SD_DATA3                          4
216 #define FUNC_MTCK_HS2_DATA3                         3
217 #define FUNC_MTCK_GPIO13                            2
218 #define FUNC_MTCK_HSPID                             1
219 #define FUNC_MTCK_MTCK                              0
220 
221 #define PERIPHS_IO_MUX_MTMS_U             (DR_REG_IO_MUX_BASE +0x30)
222 #define IO_MUX_GPIO14_REG                    PERIPHS_IO_MUX_MTMS_U
223 #define FUNC_MTMS_EMAC_TXD2                         5
224 #define FUNC_MTMS_SD_CLK                            4
225 #define FUNC_MTMS_HS2_CLK                           3
226 #define FUNC_MTMS_GPIO14                            2
227 #define FUNC_MTMS_HSPICLK                           1
228 #define FUNC_MTMS_MTMS                              0
229 
230 #define PERIPHS_IO_MUX_MTDO_U             (DR_REG_IO_MUX_BASE +0x3c)
231 #define IO_MUX_GPIO15_REG                    PERIPHS_IO_MUX_MTDO_U
232 #define FUNC_MTDO_EMAC_RXD3                         5
233 #define FUNC_MTDO_SD_CMD                            4
234 #define FUNC_MTDO_HS2_CMD                           3
235 #define FUNC_MTDO_GPIO15                            2
236 #define FUNC_MTDO_HSPICS0                           1
237 #define FUNC_MTDO_MTDO                              0
238 
239 #define PERIPHS_IO_MUX_GPIO16_U           (DR_REG_IO_MUX_BASE +0x4c)
240 #define IO_MUX_GPIO16_REG                    PERIPHS_IO_MUX_GPIO16_U
241 #define FUNC_GPIO16_EMAC_CLK_OUT                    5
242 #define FUNC_GPIO16_U2RXD                           4
243 #define FUNC_GPIO16_HS1_DATA4                       3
244 #define FUNC_GPIO16_GPIO16                          2
245 #define FUNC_GPIO16_GPIO16_0                        0
246 
247 #define PERIPHS_IO_MUX_GPIO17_U           (DR_REG_IO_MUX_BASE +0x50)
248 #define IO_MUX_GPIO17_REG                    PERIPHS_IO_MUX_GPIO17_U
249 #define FUNC_GPIO17_EMAC_CLK_OUT_180                5
250 #define FUNC_GPIO17_U2TXD                           4
251 #define FUNC_GPIO17_HS1_DATA5                       3
252 #define FUNC_GPIO17_GPIO17                          2
253 #define FUNC_GPIO17_GPIO17_0                        0
254 
255 #define PERIPHS_IO_MUX_GPIO18_U           (DR_REG_IO_MUX_BASE +0x70)
256 #define IO_MUX_GPIO18_REG                    PERIPHS_IO_MUX_GPIO18_U
257 #define FUNC_GPIO18_HS1_DATA7                       3
258 #define FUNC_GPIO18_GPIO18                          2
259 #define FUNC_GPIO18_VSPICLK                         1
260 #define FUNC_GPIO18_GPIO18_0                        0
261 
262 #define PERIPHS_IO_MUX_GPIO19_U           (DR_REG_IO_MUX_BASE +0x74)
263 #define IO_MUX_GPIO19_REG                    PERIPHS_IO_MUX_GPIO19_U
264 #define FUNC_GPIO19_EMAC_TXD0                       5
265 #define FUNC_GPIO19_U0CTS                           3
266 #define FUNC_GPIO19_GPIO19                          2
267 #define FUNC_GPIO19_VSPIQ                           1
268 #define FUNC_GPIO19_GPIO19_0                        0
269 
270 #define PERIPHS_IO_MUX_GPIO20_U           (DR_REG_IO_MUX_BASE +0x78)
271 #define IO_MUX_GPIO20_REG                    PERIPHS_IO_MUX_GPIO20_U
272 #define FUNC_GPIO20_GPIO20                          2
273 #define FUNC_GPIO20_GPIO20_0                        0
274 
275 #define PERIPHS_IO_MUX_GPIO21_U           (DR_REG_IO_MUX_BASE +0x7c)
276 #define IO_MUX_GPIO21_REG                    PERIPHS_IO_MUX_GPIO21_U
277 #define FUNC_GPIO21_EMAC_TX_EN                      5
278 #define FUNC_GPIO21_GPIO21                          2
279 #define FUNC_GPIO21_VSPIHD                          1
280 #define FUNC_GPIO21_GPIO21_0                        0
281 
282 #define PERIPHS_IO_MUX_GPIO22_U           (DR_REG_IO_MUX_BASE +0x80)
283 #define IO_MUX_GPIO22_REG                    PERIPHS_IO_MUX_GPIO22_U
284 #define FUNC_GPIO22_EMAC_TXD1                       5
285 #define FUNC_GPIO22_U0RTS                           3
286 #define FUNC_GPIO22_GPIO22                          2
287 #define FUNC_GPIO22_VSPIWP                          1
288 #define FUNC_GPIO22_GPIO22_0                        0
289 
290 #define PERIPHS_IO_MUX_GPIO23_U           (DR_REG_IO_MUX_BASE +0x8c)
291 #define IO_MUX_GPIO23_REG                    PERIPHS_IO_MUX_GPIO23_U
292 #define FUNC_GPIO23_HS1_STROBE                      3
293 #define FUNC_GPIO23_GPIO23                          2
294 #define FUNC_GPIO23_VSPID                           1
295 #define FUNC_GPIO23_GPIO23_0                        0
296 
297 #define PERIPHS_IO_MUX_GPIO24_U           (DR_REG_IO_MUX_BASE +0x90)
298 #define IO_MUX_GPIO24_REG                    PERIPHS_IO_MUX_GPIO24_U
299 #define FUNC_GPIO24_GPIO24                          2
300 #define FUNC_GPIO24_GPIO24_0                        0
301 
302 #define PERIPHS_IO_MUX_GPIO25_U           (DR_REG_IO_MUX_BASE +0x24)
303 #define IO_MUX_GPIO25_REG                    PERIPHS_IO_MUX_GPIO25_U
304 #define FUNC_GPIO25_EMAC_RXD0                       5
305 #define FUNC_GPIO25_GPIO25                          2
306 #define FUNC_GPIO25_GPIO25_0                        0
307 
308 #define PERIPHS_IO_MUX_GPIO26_U           (DR_REG_IO_MUX_BASE +0x28)
309 #define IO_MUX_GPIO26_REG                    PERIPHS_IO_MUX_GPIO26_U
310 #define FUNC_GPIO26_EMAC_RXD1                       5
311 #define FUNC_GPIO26_GPIO26                          2
312 #define FUNC_GPIO26_GPIO26_0                        0
313 
314 #define PERIPHS_IO_MUX_GPIO27_U           (DR_REG_IO_MUX_BASE +0x2c)
315 #define IO_MUX_GPIO27_REG                    PERIPHS_IO_MUX_GPIO27_U
316 #define FUNC_GPIO27_EMAC_RX_DV                      5
317 #define FUNC_GPIO27_GPIO27                          2
318 #define FUNC_GPIO27_GPIO27_0                        0
319 
320 #define PERIPHS_IO_MUX_GPIO32_U           (DR_REG_IO_MUX_BASE +0x1c)
321 #define IO_MUX_GPIO32_REG                    PERIPHS_IO_MUX_GPIO32_U
322 #define FUNC_GPIO32_GPIO32                          2
323 #define FUNC_GPIO32_GPIO32_0                        0
324 
325 #define PERIPHS_IO_MUX_GPIO33_U           (DR_REG_IO_MUX_BASE +0x20)
326 #define IO_MUX_GPIO33_REG                    PERIPHS_IO_MUX_GPIO33_U
327 #define FUNC_GPIO33_GPIO33                          2
328 #define FUNC_GPIO33_GPIO33_0                        0
329 
330 #define PERIPHS_IO_MUX_GPIO34_U           (DR_REG_IO_MUX_BASE +0x14)
331 #define IO_MUX_GPIO34_REG                    PERIPHS_IO_MUX_GPIO34_U
332 #define FUNC_GPIO34_GPIO34                          2
333 #define FUNC_GPIO34_GPIO34_0                        0
334 
335 #define PERIPHS_IO_MUX_GPIO35_U           (DR_REG_IO_MUX_BASE +0x18)
336 #define IO_MUX_GPIO35_REG                    PERIPHS_IO_MUX_GPIO35_U
337 #define FUNC_GPIO35_GPIO35                          2
338 #define FUNC_GPIO35_GPIO35_0                        0
339 
340 #define PERIPHS_IO_MUX_GPIO36_U           (DR_REG_IO_MUX_BASE +0x04)
341 #define IO_MUX_GPIO36_REG                    PERIPHS_IO_MUX_GPIO36_U
342 #define FUNC_GPIO36_GPIO36                          2
343 #define FUNC_GPIO36_GPIO36_0                        0
344 
345 #define PERIPHS_IO_MUX_GPIO37_U           (DR_REG_IO_MUX_BASE +0x08)
346 #define IO_MUX_GPIO37_REG                    PERIPHS_IO_MUX_GPIO37_U
347 #define FUNC_GPIO37_GPIO37                          2
348 #define FUNC_GPIO37_GPIO37_0                        0
349 
350 #define PERIPHS_IO_MUX_GPIO38_U           (DR_REG_IO_MUX_BASE +0x0c)
351 #define IO_MUX_GPIO38_REG                    PERIPHS_IO_MUX_GPIO38_U
352 #define FUNC_GPIO38_GPIO38                          2
353 #define FUNC_GPIO38_GPIO38_0                        0
354 
355 #define PERIPHS_IO_MUX_GPIO39_U           (DR_REG_IO_MUX_BASE +0x10)
356 #define IO_MUX_GPIO39_REG                    PERIPHS_IO_MUX_GPIO39_U
357 #define FUNC_GPIO39_GPIO39                          2
358 #define FUNC_GPIO39_GPIO39_0                        0
359 
360 #endif /* _SOC_IO_MUX_REG_H_ */
361