1 /* 2 * Copyright (c) Henrik Brix Andersen <henrik@brixandersen.dk> 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_SOC_ARM_XILINX_ZYNQ7000_COMMON_PINCTRL_SOC_H_ 8 #define ZEPHYR_SOC_ARM_XILINX_ZYNQ7000_COMMON_PINCTRL_SOC_H_ 9 10 #include <zephyr/devicetree.h> 11 #include <zephyr/sys/util.h> 12 #include <zephyr/types.h> 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 /* MIO_PIN_xx SLCR register fields (from Xilinx UG585 v1.13, B.28 SLCR) */ 19 #define MIO_PIN_DISABLE_RCVR_MASK BIT(13) 20 #define MIO_PIN_DISABLE_RCVR(val) FIELD_PREP(MIO_PIN_DISABLE_RCVR_MASK, val) 21 22 #define MIO_PIN_PULLUP_MASK BIT(12) 23 #define MIO_PIN_PULLUP(val) FIELD_PREP(MIO_PIN_PULLUP_MASK, val) 24 25 #define MIO_PIN_IO_TYPE_MASK GENMASK(11, 9) 26 #define MIO_PIN_IO_TYPE(val) FIELD_PREP(MIO_PIN_IO_TYPE_MASK, val) 27 28 #define MIO_PIN_SPEED_MASK BIT(8) 29 #define MIO_PIN_SPEED(val) FIELD_PREP(MIO_PIN_SPEED_MASK, val) 30 31 #define MIO_PIN_L3_SEL_MASK GENMASK(7, 5) 32 #define MIO_PIN_L3_SEL(val) FIELD_PREP(MIO_PIN_L3_SEL_MASK, val) 33 34 #define MIO_PIN_L2_SEL_MASK GENMASK(4, 3) 35 #define MIO_PIN_L2_SEL(val) FIELD_PREP(MIO_PIN_L2_SEL_MASK, val) 36 37 #define MIO_PIN_L1_SEL_MASK BIT(2) 38 #define MIO_PIN_L1_SEL(val) FIELD_PREP(MIO_PIN_L1_SEL_MASK, val) 39 40 #define MIO_PIN_L0_SEL_MASK BIT(1) 41 #define MIO_PIN_L0_SEL(val) FIELD_PREP(MIO_PIN_L0_SEL_MASK, val) 42 43 #define MIO_PIN_TRI_ENABLE_MASK BIT(0) 44 #define MIO_PIN_TRI_ENABLE(val) FIELD_PREP(MIO_PIN_TRI_ENABLE_MASK, val) 45 46 /* MIO_PIN_xx SLCR register L3..L0 multiplexing fields combined */ 47 #define MIO_PIN_LX_SEL_MASK \ 48 (MIO_PIN_L3_SEL_MASK | MIO_PIN_L2_SEL_MASK | MIO_PIN_L1_SEL_MASK | MIO_PIN_L0_SEL_MASK) 49 #define MIO_PIN_LX_SEL(l3, l2, l1, l0) \ 50 (MIO_PIN_L3_SEL(l3) | MIO_PIN_L2_SEL(l2) | MIO_PIN_L1_SEL(l1) | MIO_PIN_L0_SEL(l0)) 51 52 /* MIO pin function multiplexing (from Xilinx UG585 v1.13, B.28 SLCR) */ 53 #define MIO_PIN_FUNCTION_ETHERNET0 MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x1) 54 #define MIO_PIN_FUNCTION_ETHERNET1 MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x1) 55 #define MIO_PIN_FUNCTION_MDIO0 MIO_PIN_LX_SEL(0x4, 0x0, 0x0, 0x0) 56 #define MIO_PIN_FUNCTION_MDIO1 MIO_PIN_LX_SEL(0x5, 0x0, 0x0, 0x0) 57 #define MIO_PIN_FUNCTION_QSPI0 MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x1) 58 #define MIO_PIN_FUNCTION_QSPI1 MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x1) 59 #define MIO_PIN_FUNCTION_QSPI_FBCLK MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x1) 60 #define MIO_PIN_FUNCTION_QSPI_CS1 MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x1) 61 #define MIO_PIN_FUNCTION_SPI0 MIO_PIN_LX_SEL(0x5, 0x0, 0x0, 0x0) 62 #define MIO_PIN_FUNCTION_SPI0_SS MIO_PIN_LX_SEL(0x5, 0x0, 0x0, 0x0) 63 #define MIO_PIN_FUNCTION_SPI1 MIO_PIN_LX_SEL(0x5, 0x0, 0x0, 0x0) 64 #define MIO_PIN_FUNCTION_SPI1_SS MIO_PIN_LX_SEL(0x5, 0x0, 0x0, 0x0) 65 #define MIO_PIN_FUNCTION_SDIO0 MIO_PIN_LX_SEL(0x4, 0x0, 0x0, 0x0) 66 #define MIO_PIN_FUNCTION_SDIO0_PC MIO_PIN_LX_SEL(0x0, 0x3, 0x0, 0x0) 67 #define MIO_PIN_FUNCTION_SDIO1 MIO_PIN_LX_SEL(0x4, 0x0, 0x0, 0x0) 68 #define MIO_PIN_FUNCTION_SDIO1_PC MIO_PIN_LX_SEL(0x0, 0x3, 0x0, 0x0) 69 #define MIO_PIN_FUNCTION_SMC0_NOR MIO_PIN_LX_SEL(0x0, 0x1, 0x0, 0x0) 70 #define MIO_PIN_FUNCTION_SMC0_NOR_CS1 MIO_PIN_LX_SEL(0x0, 0x2, 0x0, 0x0) 71 #define MIO_PIN_FUNCTION_SMC0_NOR_ADDR25 MIO_PIN_LX_SEL(0x0, 0x1, 0x0, 0x0) 72 #define MIO_PIN_FUNCTION_SMC0_NAND MIO_PIN_LX_SEL(0x0, 0x2, 0x0, 0x0) 73 #define MIO_PIN_FUNCTION_CAN0 MIO_PIN_LX_SEL(0x1, 0x0, 0x0, 0x0) 74 #define MIO_PIN_FUNCTION_CAN1 MIO_PIN_LX_SEL(0x1, 0x0, 0x0, 0x0) 75 #define MIO_PIN_FUNCTION_UART0 MIO_PIN_LX_SEL(0x7, 0x0, 0x0, 0x0) 76 #define MIO_PIN_FUNCTION_UART1 MIO_PIN_LX_SEL(0x7, 0x0, 0x0, 0x0) 77 #define MIO_PIN_FUNCTION_I2C0 MIO_PIN_LX_SEL(0x2, 0x0, 0x0, 0x0) 78 #define MIO_PIN_FUNCTION_I2C1 MIO_PIN_LX_SEL(0x2, 0x0, 0x0, 0x0) 79 #define MIO_PIN_FUNCTION_TTC0 MIO_PIN_LX_SEL(0x6, 0x0, 0x0, 0x0) 80 #define MIO_PIN_FUNCTION_TTC1 MIO_PIN_LX_SEL(0x6, 0x0, 0x0, 0x0) 81 #define MIO_PIN_FUNCTION_SWDT0 MIO_PIN_LX_SEL(0x3, 0x0, 0x0, 0x0) 82 #define MIO_PIN_FUNCTION_GPIO0 MIO_PIN_LX_SEL(0x0, 0x0, 0x0, 0x0) 83 #define MIO_PIN_FUNCTION_USB0 MIO_PIN_LX_SEL(0x0, 0x0, 0x1, 0x0) 84 #define MIO_PIN_FUNCTION_USB1 MIO_PIN_LX_SEL(0x0, 0x0, 0x1, 0x0) 85 86 /* MIO SDIO CD/WP pin selection (from Xilinx UG585 v1.13, B.28 SLCR) */ 87 #define MIO_PIN_SPECIAL_FUNCTION_SDIO0_CD 1 88 #define MIO_PIN_SPECIAL_OFFSET_SDIO0_CD 0x0130 89 #define MIO_PIN_SPECIAL_MASK_SDIO0_CD GENMASK(21, 16) 90 #define MIO_PIN_SPECIAL_SHIFT_SDIO0_CD 16 91 92 #define MIO_PIN_SPECIAL_FUNCTION_SDIO0_WP 1 93 #define MIO_PIN_SPECIAL_OFFSET_SDIO0_WP 0x0130 94 #define MIO_PIN_SPECIAL_MASK_SDIO0_WP GENMASK(5, 0) 95 #define MIO_PIN_SPECIAL_SHIFT_SDIO0_WP 0 96 97 #define MIO_PIN_SPECIAL_FUNCTION_SDIO1_CD 1 98 #define MIO_PIN_SPECIAL_OFFSET_SDIO1_CD 0x0134 99 #define MIO_PIN_SPECIAL_MASK_SDIO1_CD GENMASK(21, 16) 100 #define MIO_PIN_SPECIAL_SHIFT_SDIO1_CD 16 101 102 #define MIO_PIN_SPECIAL_FUNCTION_SDIO1_WP 1 103 #define MIO_PIN_SPECIAL_OFFSET_SDIO1_WP 0x0134 104 #define MIO_PIN_SPECIAL_MASK_SDIO1_WP GENMASK(5, 0) 105 #define MIO_PIN_SPECIAL_SHIFT_SDIO1_WP 0 106 107 /* MIO pin numbers */ 108 #define MIO0 0 109 #define MIO1 1 110 #define MIO2 2 111 #define MIO3 3 112 #define MIO4 4 113 #define MIO5 5 114 #define MIO6 6 115 #define MIO7 7 116 #define MIO8 8 117 #define MIO9 9 118 #define MIO10 10 119 #define MIO11 11 120 #define MIO12 12 121 #define MIO13 13 122 #define MIO14 14 123 #define MIO15 15 124 #define MIO16 16 125 #define MIO17 17 126 #define MIO18 18 127 #define MIO19 19 128 #define MIO20 20 129 #define MIO21 21 130 #define MIO22 22 131 #define MIO23 23 132 #define MIO24 24 133 #define MIO25 25 134 #define MIO26 26 135 #define MIO27 27 136 #define MIO28 28 137 #define MIO29 29 138 #define MIO30 30 139 #define MIO31 31 140 #define MIO32 32 141 #define MIO33 33 142 #define MIO34 34 143 #define MIO35 35 144 #define MIO36 36 145 #define MIO37 37 146 #define MIO38 38 147 #define MIO39 39 148 #define MIO40 40 149 #define MIO41 41 150 #define MIO42 42 151 #define MIO43 43 152 #define MIO44 44 153 #define MIO45 45 154 #define MIO46 46 155 #define MIO47 47 156 #define MIO48 48 157 #define MIO49 49 158 #define MIO50 50 159 #define MIO51 51 160 #define MIO52 52 161 #define MIO53 53 162 163 /* MIO pin groups (from Xilinx UG585 v1.13, table 2-4 "MIO-at-a-Glance") */ 164 #define MIO_GROUP_ETHERNET0_0_GRP_PINS 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 165 #define MIO_GROUP_ETHERNET1_0_GRP_PINS 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 166 #define MIO_GROUP_MDIO0_0_GRP_PINS 52, 53 167 #define MIO_GROUP_MDIO1_0_GRP_PINS 52, 53 168 #define MIO_GROUP_QSPI0_0_GRP_PINS 1, 2, 3, 4, 5, 6 169 #define MIO_GROUP_QSPI1_0_GRP_PINS 9, 10, 11, 12, 13 170 #define MIO_GROUP_QSPI_FBCLK_PINS 8 171 #define MIO_GROUP_QSPI_CS1_GRP_PINS 0 172 #define MIO_GROUP_SPI0_0_GRP_PINS 16, 17, 21 173 #define MIO_GROUP_SPI0_0_SS0_PINS 18 174 #define MIO_GROUP_SPI0_0_SS1_PINS 19 175 #define MIO_GROUP_SPI0_0_SS2_PINS 20 176 #define MIO_GROUP_SPI0_1_GRP_PINS 28, 29, 33 177 #define MIO_GROUP_SPI0_1_SS0_PINS 30 178 #define MIO_GROUP_SPI0_1_SS1_PINS 31 179 #define MIO_GROUP_SPI0_1_SS2_PINS 32 180 #define MIO_GROUP_SPI0_2_GRP_PINS 40, 41, 45 181 #define MIO_GROUP_SPI0_2_SS0_PINS 42 182 #define MIO_GROUP_SPI0_2_SS1_PINS 43 183 #define MIO_GROUP_SPI0_2_SS2_PINS 44 184 #define MIO_GROUP_SPI1_0_GRP_PINS 10, 11, 12 185 #define MIO_GROUP_SPI1_0_SS0_PINS 13 186 #define MIO_GROUP_SPI1_0_SS1_PINS 14 187 #define MIO_GROUP_SPI1_0_SS2_PINS 15 188 #define MIO_GROUP_SPI1_1_GRP_PINS 22, 23, 24 189 #define MIO_GROUP_SPI1_1_SS0_PINS 25 190 #define MIO_GROUP_SPI1_1_SS1_PINS 26 191 #define MIO_GROUP_SPI1_1_SS2_PINS 27 192 #define MIO_GROUP_SPI1_2_GRP_PINS 34, 35, 36 193 #define MIO_GROUP_SPI1_2_SS0_PINS 37 194 #define MIO_GROUP_SPI1_2_SS1_PINS 38 195 #define MIO_GROUP_SPI1_2_SS2_PINS 39 196 #define MIO_GROUP_SPI1_3_GRP_PINS 46, 47, 48 197 #define MIO_GROUP_SPI1_3_SS0_PINS 49 198 #define MIO_GROUP_SPI1_3_SS1_PINS 50 199 #define MIO_GROUP_SPI1_3_SS2_PINS 51 200 #define MIO_GROUP_SDIO0_0_GRP_PINS 16, 17, 18, 19, 20, 21 201 #define MIO_GROUP_SDIO0_1_GRP_PINS 28, 29, 30, 31, 32, 33 202 #define MIO_GROUP_SDIO0_2_GRP_PINS 40, 41, 42, 43, 44, 45 203 #define MIO_GROUP_SDIO1_0_GRP_PINS 10, 11, 12, 13, 14, 15 204 #define MIO_GROUP_SDIO1_1_GRP_PINS 22, 23, 24, 25, 26, 27 205 #define MIO_GROUP_SDIO1_2_GRP_PINS 34, 35, 36, 37, 38, 39 206 #define MIO_GROUP_SDIO1_3_GRP_PINS 46, 47, 48, 49, 50, 51 207 #define MIO_GROUP_SDIO0_EMIO_WP_PINS 54 208 #define MIO_GROUP_SDIO0_EMIO_CD_PINS 55 209 #define MIO_GROUP_SDIO1_EMIO_WP_PINS 56 210 #define MIO_GROUP_SDIO1_EMIO_CD_PINS 57 211 #define MIO_GROUP_SMC0_NOR_PINS 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, \ 212 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, \ 213 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 214 #define MIO_GROUP_SMC0_NOR_CS1_GRP_PINS 1 215 #define MIO_GROUP_SMC0_NOR_ADDR25_GRP_PINS 1 216 #define MIO_GROUP_SMC0_NAND_PINS 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, \ 217 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23 218 #define MIO_GROUP_CAN0_0_GRP_PINS 10, 11 219 #define MIO_GROUP_CAN0_1_GRP_PINS 14, 15 220 #define MIO_GROUP_CAN0_2_GRP_PINS 18, 19 221 #define MIO_GROUP_CAN0_3_GRP_PINS 22, 23 222 #define MIO_GROUP_CAN0_4_GRP_PINS 26, 27 223 #define MIO_GROUP_CAN0_5_GRP_PINS 30, 31 224 #define MIO_GROUP_CAN0_6_GRP_PINS 34, 35 225 #define MIO_GROUP_CAN0_7_GRP_PINS 38, 39 226 #define MIO_GROUP_CAN0_8_GRP_PINS 42, 43 227 #define MIO_GROUP_CAN0_9_GRP_PINS 46, 47 228 #define MIO_GROUP_CAN0_10_GRP_PINS 50, 51 229 #define MIO_GROUP_CAN1_0_GRP_PINS 8, 9 230 #define MIO_GROUP_CAN1_1_GRP_PINS 12, 13 231 #define MIO_GROUP_CAN1_2_GRP_PINS 16, 17 232 #define MIO_GROUP_CAN1_3_GRP_PINS 20, 21 233 #define MIO_GROUP_CAN1_4_GRP_PINS 24, 25 234 #define MIO_GROUP_CAN1_5_GRP_PINS 28, 29 235 #define MIO_GROUP_CAN1_6_GRP_PINS 32, 33 236 #define MIO_GROUP_CAN1_7_GRP_PINS 36, 37 237 #define MIO_GROUP_CAN1_8_GRP_PINS 40, 41 238 #define MIO_GROUP_CAN1_9_GRP_PINS 44, 45 239 #define MIO_GROUP_CAN1_10_GRP_PINS 48, 49 240 #define MIO_GROUP_CAN1_11_GRP_PINS 52, 53 241 #define MIO_GROUP_UART0_0_GRP_PINS 10, 11 242 #define MIO_GROUP_UART0_1_GRP_PINS 14, 15 243 #define MIO_GROUP_UART0_2_GRP_PINS 18, 19 244 #define MIO_GROUP_UART0_3_GRP_PINS 22, 23 245 #define MIO_GROUP_UART0_4_GRP_PINS 26, 27 246 #define MIO_GROUP_UART0_5_GRP_PINS 30, 31 247 #define MIO_GROUP_UART0_6_GRP_PINS 34, 35 248 #define MIO_GROUP_UART0_7_GRP_PINS 38, 39 249 #define MIO_GROUP_UART0_8_GRP_PINS 42, 43 250 #define MIO_GROUP_UART0_9_GRP_PINS 46, 47 251 #define MIO_GROUP_UART0_10_GRP_PINS 50, 51 252 #define MIO_GROUP_UART1_0_GRP_PINS 8, 9 253 #define MIO_GROUP_UART1_1_GRP_PINS 12, 13 254 #define MIO_GROUP_UART1_2_GRP_PINS 16, 17 255 #define MIO_GROUP_UART1_3_GRP_PINS 20, 21 256 #define MIO_GROUP_UART1_4_GRP_PINS 24, 25 257 #define MIO_GROUP_UART1_5_GRP_PINS 28, 29 258 #define MIO_GROUP_UART1_6_GRP_PINS 32, 33 259 #define MIO_GROUP_UART1_7_GRP_PINS 36, 37 260 #define MIO_GROUP_UART1_8_GRP_PINS 40, 41 261 #define MIO_GROUP_UART1_9_GRP_PINS 44, 45 262 #define MIO_GROUP_UART1_10_GRP_PINS 48, 49 263 #define MIO_GROUP_UART1_11_GRP_PINS 52, 53 264 #define MIO_GROUP_I2C0_0_GRP_PINS 10, 11 265 #define MIO_GROUP_I2C0_1_GRP_PINS 14, 15 266 #define MIO_GROUP_I2C0_2_GRP_PINS 18, 19 267 #define MIO_GROUP_I2C0_3_GRP_PINS 22, 23 268 #define MIO_GROUP_I2C0_4_GRP_PINS 26, 27 269 #define MIO_GROUP_I2C0_5_GRP_PINS 30, 31 270 #define MIO_GROUP_I2C0_6_GRP_PINS 34, 35 271 #define MIO_GROUP_I2C0_7_GRP_PINS 38, 39 272 #define MIO_GROUP_I2C0_8_GRP_PINS 42, 43 273 #define MIO_GROUP_I2C0_9_GRP_PINS 46, 47 274 #define MIO_GROUP_I2C0_10_GRP_PINS 50, 51 275 #define MIO_GROUP_I2C1_0_GRP_PINS 12, 13 276 #define MIO_GROUP_I2C1_1_GRP_PINS 16, 17 277 #define MIO_GROUP_I2C1_2_GRP_PINS 20, 21 278 #define MIO_GROUP_I2C1_3_GRP_PINS 24, 25 279 #define MIO_GROUP_I2C1_4_GRP_PINS 28, 29 280 #define MIO_GROUP_I2C1_5_GRP_PINS 32, 33 281 #define MIO_GROUP_I2C1_6_GRP_PINS 36, 37 282 #define MIO_GROUP_I2C1_7_GRP_PINS 40, 41 283 #define MIO_GROUP_I2C1_8_GRP_PINS 44, 45 284 #define MIO_GROUP_I2C1_9_GRP_PINS 48, 49 285 #define MIO_GROUP_I2C1_10_GRP_PINS 52, 53 286 #define MIO_GROUP_TTC0_0_GRP_PINS 18, 19 287 #define MIO_GROUP_TTC0_1_GRP_PINS 30, 31 288 #define MIO_GROUP_TTC0_2_GRP_PINS 42, 43 289 #define MIO_GROUP_TTC1_0_GRP_PINS 16, 17 290 #define MIO_GROUP_TTC1_1_GRP_PINS 28, 29 291 #define MIO_GROUP_TTC1_2_GRP_PINS 40, 41 292 #define MIO_GROUP_SWDT0_0_GRP_PINS 14, 15 293 #define MIO_GROUP_SWDT0_1_GRP_PINS 26, 27 294 #define MIO_GROUP_SWDT0_2_GRP_PINS 38, 39 295 #define MIO_GROUP_SWDT0_3_GRP_PINS 50, 51 296 #define MIO_GROUP_SWDT0_4_GRP_PINS 52, 53 297 #define MIO_GROUP_GPIO0_0_GRP_PINS 0 298 #define MIO_GROUP_GPIO0_1_GRP_PINS 1 299 #define MIO_GROUP_GPIO0_2_GRP_PINS 2 300 #define MIO_GROUP_GPIO0_3_GRP_PINS 3 301 #define MIO_GROUP_GPIO0_4_GRP_PINS 4 302 #define MIO_GROUP_GPIO0_5_GRP_PINS 5 303 #define MIO_GROUP_GPIO0_6_GRP_PINS 6 304 #define MIO_GROUP_GPIO0_7_GRP_PINS 7 305 #define MIO_GROUP_GPIO0_8_GRP_PINS 8 306 #define MIO_GROUP_GPIO0_9_GRP_PINS 9 307 #define MIO_GROUP_GPIO0_10_GRP_PINS 10 308 #define MIO_GROUP_GPIO0_11_GRP_PINS 11 309 #define MIO_GROUP_GPIO0_12_GRP_PINS 12 310 #define MIO_GROUP_GPIO0_13_GRP_PINS 13 311 #define MIO_GROUP_GPIO0_14_GRP_PINS 14 312 #define MIO_GROUP_GPIO0_15_GRP_PINS 15 313 #define MIO_GROUP_GPIO0_16_GRP_PINS 16 314 #define MIO_GROUP_GPIO0_17_GRP_PINS 17 315 #define MIO_GROUP_GPIO0_18_GRP_PINS 18 316 #define MIO_GROUP_GPIO0_19_GRP_PINS 19 317 #define MIO_GROUP_GPIO0_20_GRP_PINS 20 318 #define MIO_GROUP_GPIO0_21_GRP_PINS 21 319 #define MIO_GROUP_GPIO0_22_GRP_PINS 22 320 #define MIO_GROUP_GPIO0_23_GRP_PINS 23 321 #define MIO_GROUP_GPIO0_24_GRP_PINS 24 322 #define MIO_GROUP_GPIO0_25_GRP_PINS 25 323 #define MIO_GROUP_GPIO0_26_GRP_PINS 26 324 #define MIO_GROUP_GPIO0_27_GRP_PINS 27 325 #define MIO_GROUP_GPIO0_28_GRP_PINS 28 326 #define MIO_GROUP_GPIO0_29_GRP_PINS 29 327 #define MIO_GROUP_GPIO0_30_GRP_PINS 30 328 #define MIO_GROUP_GPIO0_31_GRP_PINS 31 329 #define MIO_GROUP_GPIO0_32_GRP_PINS 32 330 #define MIO_GROUP_GPIO0_33_GRP_PINS 33 331 #define MIO_GROUP_GPIO0_34_GRP_PINS 34 332 #define MIO_GROUP_GPIO0_35_GRP_PINS 35 333 #define MIO_GROUP_GPIO0_36_GRP_PINS 36 334 #define MIO_GROUP_GPIO0_37_GRP_PINS 37 335 #define MIO_GROUP_GPIO0_38_GRP_PINS 38 336 #define MIO_GROUP_GPIO0_39_GRP_PINS 39 337 #define MIO_GROUP_GPIO0_40_GRP_PINS 40 338 #define MIO_GROUP_GPIO0_41_GRP_PINS 41 339 #define MIO_GROUP_GPIO0_42_GRP_PINS 42 340 #define MIO_GROUP_GPIO0_43_GRP_PINS 43 341 #define MIO_GROUP_GPIO0_44_GRP_PINS 44 342 #define MIO_GROUP_GPIO0_45_GRP_PINS 45 343 #define MIO_GROUP_GPIO0_46_GRP_PINS 46 344 #define MIO_GROUP_GPIO0_47_GRP_PINS 47 345 #define MIO_GROUP_GPIO0_48_GRP_PINS 48 346 #define MIO_GROUP_GPIO0_49_GRP_PINS 49 347 #define MIO_GROUP_GPIO0_50_GRP_PINS 50 348 #define MIO_GROUP_GPIO0_51_GRP_PINS 51 349 #define MIO_GROUP_GPIO0_52_GRP_PINS 52 350 #define MIO_GROUP_GPIO0_53_GRP_PINS 53 351 #define MIO_GROUP_USB0_0_GRP_PINS 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 352 #define MIO_GROUP_USB1_0_GRP_PINS 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 353 354 typedef struct { 355 uint32_t mask; 356 uint32_t val; 357 uint16_t offset; 358 } pinctrl_soc_pin_t; 359 360 /* Iterate over each pinctrl-n phandle child */ 361 #define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \ 362 {DT_FOREACH_CHILD(DT_PHANDLE(node_id, prop), \ 363 Z_PINCTRL_STATE_PIN_CHILD_INIT)}; 364 365 /* 366 * If child has groups property: 367 * - Iterate over each pin in group and populate pinctrl_soc_pin_t 368 * If child has pins property: 369 * - Iterate over each pin in pins and populate pinctrl_soc_pin_t 370 */ 371 #define Z_PINCTRL_STATE_PIN_CHILD_INIT(node_id) \ 372 COND_CODE_1(DT_NODE_HAS_PROP(node_id, groups), \ 373 (DT_FOREACH_PROP_ELEM(node_id, groups, Z_PINCTRL_STATE_PIN_CHILD_GROUP_INIT)), \ 374 ()) \ 375 COND_CODE_1(DT_NODE_HAS_PROP(node_id, pins), \ 376 (DT_FOREACH_PROP_ELEM(node_id, pins, Z_PINCTRL_STATE_PIN_CHILD_PIN_INIT)), \ 377 ()) 378 379 /* Process each pin in group using MIO_GROUP_x_PINS macros defined above */ 380 #define Z_PINCTRL_STATE_PIN_CHILD_GROUP_INIT(node_id, prop, idx) \ 381 FOR_EACH_FIXED_ARG(Z_PINCTRL_STATE_PIN_CHILD_GROUP_PIN_INIT, (), node_id, \ 382 UTIL_CAT(UTIL_CAT(MIO_GROUP_, \ 383 DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx)), _PINS)) 384 385 /* Reverse order of arguments to adapt between FOR_EACH_FIXED_ARG() and DT_FOREACH_PROP_ELEM() */ 386 #define Z_PINCTRL_STATE_PIN_CHILD_GROUP_PIN_INIT(pin, node_id) \ 387 Z_PINCTRL_STATE_PIN_INIT(node_id, pin) 388 389 /* Process pin using MIOx macros defines above */ 390 #define Z_PINCTRL_STATE_PIN_CHILD_PIN_INIT(node_id, prop, idx) \ 391 Z_PINCTRL_STATE_PIN_INIT(node_id, DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx)) 392 393 /* Process pin functions and special functions (CD, WP) */ 394 #define Z_PINCTRL_STATE_PIN_INIT(node_id, pin) \ 395 COND_CODE_1(Z_PINCTRL_STATE_PIN_IS_SPECIAL_FUNCTION(node_id), \ 396 (Z_PINCTRL_STATE_PIN_SPECIAL_INIT(node_id, pin)), \ 397 (Z_PINCTRL_STATE_PIN_FUNCTION_INIT(node_id, pin))) 398 399 /* Determine if pin has special function */ 400 #define Z_PINCTRL_STATE_PIN_IS_SPECIAL_FUNCTION(node_id) \ 401 COND_CODE_1(DT_NODE_HAS_PROP(node_id, function), \ 402 (UTIL_CAT(MIO_PIN_SPECIAL_FUNCTION_, DT_STRING_UPPER_TOKEN(node_id, function))), \ 403 (0)) 404 405 /* Populate pinctrl_soc_pin_t for each special function pin */ 406 #define Z_PINCTRL_STATE_PIN_SPECIAL_INIT(node_id, pin) \ 407 { \ 408 .mask = UTIL_CAT(MIO_PIN_SPECIAL_MASK_, \ 409 DT_STRING_UPPER_TOKEN(node_id, function)), \ 410 .val = pin << UTIL_CAT(MIO_PIN_SPECIAL_SHIFT_, \ 411 DT_STRING_UPPER_TOKEN(node_id, function)), \ 412 .offset = UTIL_CAT(MIO_PIN_SPECIAL_OFFSET_, \ 413 DT_STRING_UPPER_TOKEN(node_id, function)), \ 414 }, 415 416 /* Populate pinctrl_soc_pin_t for each pin */ 417 #define Z_PINCTRL_STATE_PIN_FUNCTION_INIT(node_id, pin) \ 418 { \ 419 .mask = Z_PINCTRL_STATE_PIN_MASK(node_id), \ 420 .val = Z_PINCTRL_STATE_PIN_VAL(node_id), \ 421 .offset = pin * sizeof(uint32_t), \ 422 }, 423 424 #define Z_PINCTRL_STATE_PIN_MASK(node_id) \ 425 COND_CODE_1(DT_NODE_HAS_PROP(node_id, function), (MIO_PIN_LX_SEL_MASK), (0U)) | \ 426 COND_CODE_1(DT_PROP(node_id, bias_disable), \ 427 (MIO_PIN_PULLUP_MASK | MIO_PIN_TRI_ENABLE_MASK), (0U)) | \ 428 COND_CODE_1(DT_PROP(node_id, low_power_disable), (MIO_PIN_DISABLE_RCVR_MASK), (0U)) | \ 429 COND_CODE_1(DT_NODE_HAS_PROP(node_id, power_source), (MIO_PIN_IO_TYPE_MASK), (0U)) | \ 430 COND_CODE_1(DT_NODE_HAS_PROP(node_id, slew_rate), (MIO_PIN_SPEED_MASK), (0U)) 431 432 #define Z_PINCTRL_STATE_PIN_VAL(node_id) \ 433 COND_CODE_1(DT_NODE_HAS_PROP(node_id, function), \ 434 (UTIL_CAT(MIO_PIN_FUNCTION_, DT_STRING_UPPER_TOKEN(node_id, function))), (0U)) | \ 435 MIO_PIN_TRI_ENABLE(DT_PROP(node_id, bias_high_impedance)) | \ 436 MIO_PIN_PULLUP(DT_PROP(node_id, bias_pull_up)) | \ 437 MIO_PIN_DISABLE_RCVR(DT_PROP(node_id, low_power_enable)) | \ 438 MIO_PIN_IO_TYPE(DT_PROP_OR(node_id, power_source, (0U))) | \ 439 MIO_PIN_SPEED(DT_PROP_OR(node_id, slew_rate, (0U))) 440 441 #ifdef __cplusplus 442 } 443 #endif 444 445 #endif /* ZEPHYR_SOC_ARM_XILINX_ZYNQ7000_COMMON_PINCTRL_SOC_H_ */ 446