Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

reset: th1520: Support reset controllers in more subsystems

Introduce reset controllers for AP, MISC, VI, VP and DSP subsystems and
add their reset signal mappings.

Signed-off-by: Yao Zi <ziyao@disroot.org>
Reviewed-by: Drew Fustini <fustini@kernel.org>
Acked-by: Guo Ren <guoren@kernel.org>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>

authored by

Yao Zi and committed by
Philipp Zabel
da91533c 0040d9ea

+793
+793
drivers/reset/reset-th1520.c
··· 11 11 12 12 #include <dt-bindings/reset/thead,th1520-reset.h> 13 13 14 + /* register offset in RSTGEN_R */ 15 + #define TH1520_BROM_RST_CFG 0x0 16 + #define TH1520_C910_RST_CFG 0x4 17 + #define TH1520_CHIP_DBG_RST_CFG 0xc 18 + #define TH1520_AXI4_CPUSYS2_RST_CFG 0x10 19 + #define TH1520_X2H_CPUSYS_RST_CFG 0x18 20 + #define TH1520_AHB2_CPUSYS_RST_CFG 0x1c 21 + #define TH1520_APB3_CPUSYS_RST_CFG 0x20 22 + #define TH1520_MBOX0_RST_CFG 0x24 23 + #define TH1520_MBOX1_RST_CFG 0x28 24 + #define TH1520_MBOX2_RST_CFG 0x2c 25 + #define TH1520_MBOX3_RST_CFG 0x30 26 + #define TH1520_WDT0_RST_CFG 0x34 27 + #define TH1520_WDT1_RST_CFG 0x38 28 + #define TH1520_TIMER0_RST_CFG 0x3c 29 + #define TH1520_TIMER1_RST_CFG 0x40 30 + #define TH1520_PERISYS_AHB_RST_CFG 0x44 31 + #define TH1520_PERISYS_APB1_RST_CFG 0x48 32 + #define TH1520_PERISYS_APB2_RST_CFG 0x4c 33 + #define TH1520_GMAC0_RST_CFG 0x68 34 + #define TH1520_UART0_RST_CFG 0x70 35 + #define TH1520_UART1_RST_CFG 0x74 36 + #define TH1520_UART2_RST_CFG 0x78 37 + #define TH1520_UART3_RST_CFG 0x7c 38 + #define TH1520_UART4_RST_CFG 0x80 39 + #define TH1520_UART5_RST_CFG 0x84 40 + #define TH1520_QSPI0_RST_CFG 0x8c 41 + #define TH1520_QSPI1_RST_CFG 0x90 42 + #define TH1520_SPI_RST_CFG 0x94 43 + #define TH1520_I2C0_RST_CFG 0x98 44 + #define TH1520_I2C1_RST_CFG 0x9c 45 + #define TH1520_I2C2_RST_CFG 0xa0 46 + #define TH1520_I2C3_RST_CFG 0xa4 47 + #define TH1520_I2C4_RST_CFG 0xa8 48 + #define TH1520_I2C5_RST_CFG 0xac 49 + #define TH1520_GPIO0_RST_CFG 0xb0 50 + #define TH1520_GPIO1_RST_CFG 0xb4 51 + #define TH1520_GPIO2_RST_CFG 0xb8 52 + #define TH1520_PWM_RST_CFG 0xc0 53 + #define TH1520_PADCTRL0_APSYS_RST_CFG 0xc4 54 + #define TH1520_CPU2PERI_X2H_RST_CFG 0xcc 55 + #define TH1520_CPU2AON_X2H_RST_CFG 0xe4 56 + #define TH1520_AON2CPU_A2X_RST_CFG 0xfc 57 + #define TH1520_NPUSYS_AXI_RST_CFG 0x128 58 + #define TH1520_CPU2VP_X2P_RST_CFG 0x12c 59 + #define TH1520_CPU2VI_X2H_RST_CFG 0x138 60 + #define TH1520_BMU_C910_RST_CFG 0x148 61 + #define TH1520_DMAC_CPUSYS_RST_CFG 0x14c 62 + #define TH1520_SPINLOCK_RST_CFG 0x178 63 + #define TH1520_CFG2TEE_X2H_RST_CFG 0x188 64 + #define TH1520_DSMART_RST_CFG 0x18c 65 + #define TH1520_GPIO3_RST_CFG 0x1a8 66 + #define TH1520_I2S_RST_CFG 0x1ac 67 + #define TH1520_IMG_NNA_RST_CFG 0x1b0 68 + #define TH1520_PERI_APB3_RST_CFG 0x1dc 69 + #define TH1520_VP_SUBSYS_RST_CFG 0x1ec 70 + #define TH1520_PERISYS_APB4_RST_CFG 0x1f8 71 + #define TH1520_GMAC1_RST_CFG 0x204 72 + #define TH1520_GMAC_AXI_RST_CFG 0x208 73 + #define TH1520_PADCTRL1_APSYS_RST_CFG 0x20c 74 + #define TH1520_VOSYS_AXI_RST_CFG 0x210 75 + #define TH1520_VOSYS_X2X_RST_CFG 0x214 76 + #define TH1520_MISC2VP_X2X_RST_CFG 0x218 77 + #define TH1520_SUBSYS_RST_CFG 0x220 78 + 79 + /* register offset in DSP_REGMAP */ 80 + #define TH1520_DSPSYS_RST_CFG 0x0 81 + 82 + /* register offset in MISCSYS_REGMAP */ 83 + #define TH1520_EMMC_RST_CFG 0x0 84 + #define TH1520_MISCSYS_AXI_RST_CFG 0x8 85 + #define TH1520_SDIO0_RST_CFG 0xc 86 + #define TH1520_SDIO1_RST_CFG 0x10 87 + #define TH1520_USB3_DRD_RST_CFG 0x14 88 + 89 + /* register offset in VISYS_REGMAP */ 90 + #define TH1520_VISYS_RST_CFG 0x0 91 + #define TH1520_VISYS_2_RST_CFG 0x4 92 + 14 93 /* register offset in VOSYS_REGMAP */ 15 94 #define TH1520_GPU_RST_CFG 0x0 16 95 #define TH1520_GPU_RST_CFG_MASK GENMASK(1, 0) ··· 97 18 #define TH1520_DSI0_RST_CFG 0x8 98 19 #define TH1520_DSI1_RST_CFG 0xc 99 20 #define TH1520_HDMI_RST_CFG 0x14 21 + #define TH1520_AXI4_VO_DW_AXI_RST_CFG 0x18 22 + #define TH1520_X2H_X4_VOSYS_DW_RST_CFG 0x20 100 23 101 24 /* register values */ 102 25 #define TH1520_GPU_SW_GPU_RST BIT(0) ··· 109 28 #define TH1520_DSI_SW_DSI_PRST BIT(0) 110 29 #define TH1520_HDMI_SW_MAIN_RST BIT(0) 111 30 #define TH1520_HDMI_SW_PRST BIT(1) 31 + 32 + /* register offset in VPSYS_REGMAP */ 33 + #define TH1520_AXIBUS_RST_CFG 0x0 34 + #define TH1520_FCE_RST_CFG 0x4 35 + #define TH1520_G2D_RST_CFG 0x8 36 + #define TH1520_VDEC_RST_CFG 0xc 37 + #define TH1520_VENC_RST_CFG 0x10 112 38 113 39 struct th1520_reset_map { 114 40 u32 bit; ··· 169 81 [TH1520_RESET_ID_HDMI_APB] = { 170 82 .bit = TH1520_HDMI_SW_PRST, 171 83 .reg = TH1520_HDMI_RST_CFG, 84 + }, 85 + [TH1520_RESET_ID_VOAXI] = { 86 + .bit = BIT(0), 87 + .reg = TH1520_AXI4_VO_DW_AXI_RST_CFG, 88 + }, 89 + [TH1520_RESET_ID_VOAXI_APB] = { 90 + .bit = BIT(1), 91 + .reg = TH1520_AXI4_VO_DW_AXI_RST_CFG, 92 + }, 93 + [TH1520_RESET_ID_X2H_DPU_AXI] = { 94 + .bit = BIT(0), 95 + .reg = TH1520_X2H_X4_VOSYS_DW_RST_CFG, 96 + }, 97 + [TH1520_RESET_ID_X2H_DPU_AHB] = { 98 + .bit = BIT(1), 99 + .reg = TH1520_X2H_X4_VOSYS_DW_RST_CFG, 100 + }, 101 + [TH1520_RESET_ID_X2H_DPU1_AXI] = { 102 + .bit = BIT(2), 103 + .reg = TH1520_X2H_X4_VOSYS_DW_RST_CFG, 104 + }, 105 + [TH1520_RESET_ID_X2H_DPU1_AHB] = { 106 + .bit = BIT(3), 107 + .reg = TH1520_X2H_X4_VOSYS_DW_RST_CFG, 108 + }, 109 + }; 110 + 111 + static const struct th1520_reset_map th1520_ap_resets[] = { 112 + [TH1520_RESET_ID_BROM] = { 113 + .bit = BIT(0), 114 + .reg = TH1520_BROM_RST_CFG, 115 + }, 116 + [TH1520_RESET_ID_C910_TOP] = { 117 + .bit = BIT(0), 118 + .reg = TH1520_C910_RST_CFG, 119 + }, 120 + [TH1520_RESET_ID_NPU] = { 121 + .bit = BIT(0), 122 + .reg = TH1520_IMG_NNA_RST_CFG, 123 + }, 124 + [TH1520_RESET_ID_WDT0] = { 125 + .bit = BIT(0), 126 + .reg = TH1520_WDT0_RST_CFG, 127 + }, 128 + [TH1520_RESET_ID_WDT1] = { 129 + .bit = BIT(0), 130 + .reg = TH1520_WDT1_RST_CFG, 131 + }, 132 + [TH1520_RESET_ID_C910_C0] = { 133 + .bit = BIT(1), 134 + .reg = TH1520_C910_RST_CFG, 135 + }, 136 + [TH1520_RESET_ID_C910_C1] = { 137 + .bit = BIT(2), 138 + .reg = TH1520_C910_RST_CFG, 139 + }, 140 + [TH1520_RESET_ID_C910_C2] = { 141 + .bit = BIT(3), 142 + .reg = TH1520_C910_RST_CFG, 143 + }, 144 + [TH1520_RESET_ID_C910_C3] = { 145 + .bit = BIT(4), 146 + .reg = TH1520_C910_RST_CFG, 147 + }, 148 + [TH1520_RESET_ID_CHIP_DBG_CORE] = { 149 + .bit = BIT(0), 150 + .reg = TH1520_CHIP_DBG_RST_CFG, 151 + }, 152 + [TH1520_RESET_ID_CHIP_DBG_AXI] = { 153 + .bit = BIT(1), 154 + .reg = TH1520_CHIP_DBG_RST_CFG, 155 + }, 156 + [TH1520_RESET_ID_AXI4_CPUSYS2_AXI] = { 157 + .bit = BIT(0), 158 + .reg = TH1520_AXI4_CPUSYS2_RST_CFG, 159 + }, 160 + [TH1520_RESET_ID_AXI4_CPUSYS2_APB] = { 161 + .bit = BIT(1), 162 + .reg = TH1520_AXI4_CPUSYS2_RST_CFG, 163 + }, 164 + [TH1520_RESET_ID_X2H_CPUSYS] = { 165 + .bit = BIT(0), 166 + .reg = TH1520_X2H_CPUSYS_RST_CFG, 167 + }, 168 + [TH1520_RESET_ID_AHB2_CPUSYS] = { 169 + .bit = BIT(0), 170 + .reg = TH1520_AHB2_CPUSYS_RST_CFG, 171 + }, 172 + [TH1520_RESET_ID_APB3_CPUSYS] = { 173 + .bit = BIT(0), 174 + .reg = TH1520_APB3_CPUSYS_RST_CFG, 175 + }, 176 + [TH1520_RESET_ID_MBOX0_APB] = { 177 + .bit = BIT(0), 178 + .reg = TH1520_MBOX0_RST_CFG, 179 + }, 180 + [TH1520_RESET_ID_MBOX1_APB] = { 181 + .bit = BIT(0), 182 + .reg = TH1520_MBOX1_RST_CFG, 183 + }, 184 + [TH1520_RESET_ID_MBOX2_APB] = { 185 + .bit = BIT(0), 186 + .reg = TH1520_MBOX2_RST_CFG, 187 + }, 188 + [TH1520_RESET_ID_MBOX3_APB] = { 189 + .bit = BIT(0), 190 + .reg = TH1520_MBOX3_RST_CFG, 191 + }, 192 + [TH1520_RESET_ID_TIMER0_APB] = { 193 + .bit = BIT(0), 194 + .reg = TH1520_TIMER0_RST_CFG, 195 + }, 196 + [TH1520_RESET_ID_TIMER0_CORE] = { 197 + .bit = BIT(1), 198 + .reg = TH1520_TIMER0_RST_CFG, 199 + }, 200 + [TH1520_RESET_ID_TIMER1_APB] = { 201 + .bit = BIT(0), 202 + .reg = TH1520_TIMER1_RST_CFG, 203 + }, 204 + [TH1520_RESET_ID_TIMER1_CORE] = { 205 + .bit = BIT(1), 206 + .reg = TH1520_TIMER1_RST_CFG, 207 + }, 208 + [TH1520_RESET_ID_PERISYS_AHB] = { 209 + .bit = BIT(0), 210 + .reg = TH1520_PERISYS_AHB_RST_CFG, 211 + }, 212 + [TH1520_RESET_ID_PERISYS_APB1] = { 213 + .bit = BIT(0), 214 + .reg = TH1520_PERISYS_APB1_RST_CFG, 215 + }, 216 + [TH1520_RESET_ID_PERISYS_APB2] = { 217 + .bit = BIT(0), 218 + .reg = TH1520_PERISYS_APB2_RST_CFG, 219 + }, 220 + [TH1520_RESET_ID_GMAC0_APB] = { 221 + .bit = BIT(0), 222 + .reg = TH1520_GMAC0_RST_CFG, 223 + }, 224 + [TH1520_RESET_ID_GMAC0_AHB] = { 225 + .bit = BIT(1), 226 + .reg = TH1520_GMAC0_RST_CFG, 227 + }, 228 + [TH1520_RESET_ID_GMAC0_CLKGEN] = { 229 + .bit = BIT(2), 230 + .reg = TH1520_GMAC0_RST_CFG, 231 + }, 232 + [TH1520_RESET_ID_GMAC0_AXI] = { 233 + .bit = BIT(3), 234 + .reg = TH1520_GMAC0_RST_CFG, 235 + }, 236 + [TH1520_RESET_ID_UART0_APB] = { 237 + .bit = BIT(0), 238 + .reg = TH1520_UART0_RST_CFG, 239 + }, 240 + [TH1520_RESET_ID_UART0_IF] = { 241 + .bit = BIT(1), 242 + .reg = TH1520_UART0_RST_CFG, 243 + }, 244 + [TH1520_RESET_ID_UART1_APB] = { 245 + .bit = BIT(0), 246 + .reg = TH1520_UART1_RST_CFG, 247 + }, 248 + [TH1520_RESET_ID_UART1_IF] = { 249 + .bit = BIT(1), 250 + .reg = TH1520_UART1_RST_CFG, 251 + }, 252 + [TH1520_RESET_ID_UART2_APB] = { 253 + .bit = BIT(0), 254 + .reg = TH1520_UART2_RST_CFG, 255 + }, 256 + [TH1520_RESET_ID_UART2_IF] = { 257 + .bit = BIT(1), 258 + .reg = TH1520_UART2_RST_CFG, 259 + }, 260 + [TH1520_RESET_ID_UART3_APB] = { 261 + .bit = BIT(0), 262 + .reg = TH1520_UART3_RST_CFG, 263 + }, 264 + [TH1520_RESET_ID_UART3_IF] = { 265 + .bit = BIT(1), 266 + .reg = TH1520_UART3_RST_CFG, 267 + }, 268 + [TH1520_RESET_ID_UART4_APB] = { 269 + .bit = BIT(0), 270 + .reg = TH1520_UART4_RST_CFG, 271 + }, 272 + [TH1520_RESET_ID_UART4_IF] = { 273 + .bit = BIT(1), 274 + .reg = TH1520_UART4_RST_CFG, 275 + }, 276 + [TH1520_RESET_ID_UART5_APB] = { 277 + .bit = BIT(0), 278 + .reg = TH1520_UART5_RST_CFG, 279 + }, 280 + [TH1520_RESET_ID_UART5_IF] = { 281 + .bit = BIT(1), 282 + .reg = TH1520_UART5_RST_CFG, 283 + }, 284 + [TH1520_RESET_ID_QSPI0_IF] = { 285 + .bit = BIT(0), 286 + .reg = TH1520_QSPI0_RST_CFG, 287 + }, 288 + [TH1520_RESET_ID_QSPI0_APB] = { 289 + .bit = BIT(1), 290 + .reg = TH1520_QSPI0_RST_CFG, 291 + }, 292 + [TH1520_RESET_ID_QSPI1_IF] = { 293 + .bit = BIT(0), 294 + .reg = TH1520_QSPI1_RST_CFG, 295 + }, 296 + [TH1520_RESET_ID_QSPI1_APB] = { 297 + .bit = BIT(1), 298 + .reg = TH1520_QSPI1_RST_CFG, 299 + }, 300 + [TH1520_RESET_ID_SPI_IF] = { 301 + .bit = BIT(0), 302 + .reg = TH1520_SPI_RST_CFG, 303 + }, 304 + [TH1520_RESET_ID_SPI_APB] = { 305 + .bit = BIT(1), 306 + .reg = TH1520_SPI_RST_CFG, 307 + }, 308 + [TH1520_RESET_ID_I2C0_APB] = { 309 + .bit = BIT(0), 310 + .reg = TH1520_I2C0_RST_CFG, 311 + }, 312 + [TH1520_RESET_ID_I2C0_CORE] = { 313 + .bit = BIT(1), 314 + .reg = TH1520_I2C0_RST_CFG, 315 + }, 316 + [TH1520_RESET_ID_I2C1_APB] = { 317 + .bit = BIT(0), 318 + .reg = TH1520_I2C1_RST_CFG, 319 + }, 320 + [TH1520_RESET_ID_I2C1_CORE] = { 321 + .bit = BIT(1), 322 + .reg = TH1520_I2C1_RST_CFG, 323 + }, 324 + [TH1520_RESET_ID_I2C2_APB] = { 325 + .bit = BIT(0), 326 + .reg = TH1520_I2C2_RST_CFG, 327 + }, 328 + [TH1520_RESET_ID_I2C2_CORE] = { 329 + .bit = BIT(1), 330 + .reg = TH1520_I2C2_RST_CFG, 331 + }, 332 + [TH1520_RESET_ID_I2C3_APB] = { 333 + .bit = BIT(0), 334 + .reg = TH1520_I2C3_RST_CFG, 335 + }, 336 + [TH1520_RESET_ID_I2C3_CORE] = { 337 + .bit = BIT(1), 338 + .reg = TH1520_I2C3_RST_CFG, 339 + }, 340 + [TH1520_RESET_ID_I2C4_APB] = { 341 + .bit = BIT(0), 342 + .reg = TH1520_I2C4_RST_CFG, 343 + }, 344 + [TH1520_RESET_ID_I2C4_CORE] = { 345 + .bit = BIT(1), 346 + .reg = TH1520_I2C4_RST_CFG, 347 + }, 348 + [TH1520_RESET_ID_I2C5_APB] = { 349 + .bit = BIT(0), 350 + .reg = TH1520_I2C5_RST_CFG, 351 + }, 352 + [TH1520_RESET_ID_I2C5_CORE] = { 353 + .bit = BIT(1), 354 + .reg = TH1520_I2C5_RST_CFG, 355 + }, 356 + [TH1520_RESET_ID_GPIO0_DB] = { 357 + .bit = BIT(0), 358 + .reg = TH1520_GPIO0_RST_CFG, 359 + }, 360 + [TH1520_RESET_ID_GPIO0_APB] = { 361 + .bit = BIT(1), 362 + .reg = TH1520_GPIO0_RST_CFG, 363 + }, 364 + [TH1520_RESET_ID_GPIO1_DB] = { 365 + .bit = BIT(0), 366 + .reg = TH1520_GPIO1_RST_CFG, 367 + }, 368 + [TH1520_RESET_ID_GPIO1_APB] = { 369 + .bit = BIT(1), 370 + .reg = TH1520_GPIO1_RST_CFG, 371 + }, 372 + [TH1520_RESET_ID_GPIO2_DB] = { 373 + .bit = BIT(0), 374 + .reg = TH1520_GPIO2_RST_CFG, 375 + }, 376 + [TH1520_RESET_ID_GPIO2_APB] = { 377 + .bit = BIT(1), 378 + .reg = TH1520_GPIO2_RST_CFG, 379 + }, 380 + [TH1520_RESET_ID_PWM_COUNTER] = { 381 + .bit = BIT(0), 382 + .reg = TH1520_PWM_RST_CFG, 383 + }, 384 + [TH1520_RESET_ID_PWM_APB] = { 385 + .bit = BIT(1), 386 + .reg = TH1520_PWM_RST_CFG, 387 + }, 388 + [TH1520_RESET_ID_PADCTRL0_APB] = { 389 + .bit = BIT(0), 390 + .reg = TH1520_PADCTRL0_APSYS_RST_CFG, 391 + }, 392 + [TH1520_RESET_ID_CPU2PERI_X2H] = { 393 + .bit = BIT(1), 394 + .reg = TH1520_CPU2PERI_X2H_RST_CFG, 395 + }, 396 + [TH1520_RESET_ID_CPU2AON_X2H] = { 397 + .bit = BIT(0), 398 + .reg = TH1520_CPU2AON_X2H_RST_CFG, 399 + }, 400 + [TH1520_RESET_ID_AON2CPU_A2X] = { 401 + .bit = BIT(0), 402 + .reg = TH1520_AON2CPU_A2X_RST_CFG, 403 + }, 404 + [TH1520_RESET_ID_NPUSYS_AXI] = { 405 + .bit = BIT(0), 406 + .reg = TH1520_NPUSYS_AXI_RST_CFG, 407 + }, 408 + [TH1520_RESET_ID_NPUSYS_AXI_APB] = { 409 + .bit = BIT(1), 410 + .reg = TH1520_NPUSYS_AXI_RST_CFG, 411 + }, 412 + [TH1520_RESET_ID_CPU2VP_X2P] = { 413 + .bit = BIT(0), 414 + .reg = TH1520_CPU2VP_X2P_RST_CFG, 415 + }, 416 + [TH1520_RESET_ID_CPU2VI_X2H] = { 417 + .bit = BIT(0), 418 + .reg = TH1520_CPU2VI_X2H_RST_CFG, 419 + }, 420 + [TH1520_RESET_ID_BMU_AXI] = { 421 + .bit = BIT(0), 422 + .reg = TH1520_BMU_C910_RST_CFG, 423 + }, 424 + [TH1520_RESET_ID_BMU_APB] = { 425 + .bit = BIT(1), 426 + .reg = TH1520_BMU_C910_RST_CFG, 427 + }, 428 + [TH1520_RESET_ID_DMAC_CPUSYS_AXI] = { 429 + .bit = BIT(0), 430 + .reg = TH1520_DMAC_CPUSYS_RST_CFG, 431 + }, 432 + [TH1520_RESET_ID_DMAC_CPUSYS_AHB] = { 433 + .bit = BIT(1), 434 + .reg = TH1520_DMAC_CPUSYS_RST_CFG, 435 + }, 436 + [TH1520_RESET_ID_SPINLOCK] = { 437 + .bit = BIT(0), 438 + .reg = TH1520_SPINLOCK_RST_CFG, 439 + }, 440 + [TH1520_RESET_ID_CFG2TEE] = { 441 + .bit = BIT(0), 442 + .reg = TH1520_CFG2TEE_X2H_RST_CFG, 443 + }, 444 + [TH1520_RESET_ID_DSMART] = { 445 + .bit = BIT(0), 446 + .reg = TH1520_DSMART_RST_CFG, 447 + }, 448 + [TH1520_RESET_ID_GPIO3_DB] = { 449 + .bit = BIT(0), 450 + .reg = TH1520_GPIO3_RST_CFG, 451 + }, 452 + [TH1520_RESET_ID_GPIO3_APB] = { 453 + .bit = BIT(1), 454 + .reg = TH1520_GPIO3_RST_CFG, 455 + }, 456 + [TH1520_RESET_ID_PERI_I2S] = { 457 + .bit = BIT(0), 458 + .reg = TH1520_I2S_RST_CFG, 459 + }, 460 + [TH1520_RESET_ID_PERI_APB3] = { 461 + .bit = BIT(0), 462 + .reg = TH1520_PERI_APB3_RST_CFG, 463 + }, 464 + [TH1520_RESET_ID_PERI2PERI1_APB] = { 465 + .bit = BIT(1), 466 + .reg = TH1520_PERI_APB3_RST_CFG, 467 + }, 468 + [TH1520_RESET_ID_VPSYS_APB] = { 469 + .bit = BIT(0), 470 + .reg = TH1520_VP_SUBSYS_RST_CFG, 471 + }, 472 + [TH1520_RESET_ID_PERISYS_APB4] = { 473 + .bit = BIT(0), 474 + .reg = TH1520_PERISYS_APB4_RST_CFG, 475 + }, 476 + [TH1520_RESET_ID_GMAC1_APB] = { 477 + .bit = BIT(0), 478 + .reg = TH1520_GMAC1_RST_CFG, 479 + }, 480 + [TH1520_RESET_ID_GMAC1_AHB] = { 481 + .bit = BIT(1), 482 + .reg = TH1520_GMAC1_RST_CFG, 483 + }, 484 + [TH1520_RESET_ID_GMAC1_CLKGEN] = { 485 + .bit = BIT(2), 486 + .reg = TH1520_GMAC1_RST_CFG, 487 + }, 488 + [TH1520_RESET_ID_GMAC1_AXI] = { 489 + .bit = BIT(3), 490 + .reg = TH1520_GMAC1_RST_CFG, 491 + }, 492 + [TH1520_RESET_ID_GMAC_AXI] = { 493 + .bit = BIT(0), 494 + .reg = TH1520_GMAC_AXI_RST_CFG, 495 + }, 496 + [TH1520_RESET_ID_GMAC_AXI_APB] = { 497 + .bit = BIT(1), 498 + .reg = TH1520_GMAC_AXI_RST_CFG, 499 + }, 500 + [TH1520_RESET_ID_PADCTRL1_APB] = { 501 + .bit = BIT(0), 502 + .reg = TH1520_PADCTRL1_APSYS_RST_CFG, 503 + }, 504 + [TH1520_RESET_ID_VOSYS_AXI] = { 505 + .bit = BIT(0), 506 + .reg = TH1520_VOSYS_AXI_RST_CFG, 507 + }, 508 + [TH1520_RESET_ID_VOSYS_AXI_APB] = { 509 + .bit = BIT(1), 510 + .reg = TH1520_VOSYS_AXI_RST_CFG, 511 + }, 512 + [TH1520_RESET_ID_VOSYS_AXI_X2X] = { 513 + .bit = BIT(0), 514 + .reg = TH1520_VOSYS_X2X_RST_CFG, 515 + }, 516 + [TH1520_RESET_ID_MISC2VP_X2X] = { 517 + .bit = BIT(0), 518 + .reg = TH1520_MISC2VP_X2X_RST_CFG, 519 + }, 520 + [TH1520_RESET_ID_DSPSYS] = { 521 + .bit = BIT(0), 522 + .reg = TH1520_SUBSYS_RST_CFG, 523 + }, 524 + [TH1520_RESET_ID_VISYS] = { 525 + .bit = BIT(1), 526 + .reg = TH1520_SUBSYS_RST_CFG, 527 + }, 528 + [TH1520_RESET_ID_VOSYS] = { 529 + .bit = BIT(2), 530 + .reg = TH1520_SUBSYS_RST_CFG, 531 + }, 532 + [TH1520_RESET_ID_VPSYS] = { 533 + .bit = BIT(3), 534 + .reg = TH1520_SUBSYS_RST_CFG, 535 + }, 536 + }; 537 + 538 + static const struct th1520_reset_map th1520_dsp_resets[] = { 539 + [TH1520_RESET_ID_X2X_DSP1] = { 540 + .bit = BIT(0), 541 + .reg = TH1520_DSPSYS_RST_CFG, 542 + }, 543 + [TH1520_RESET_ID_X2X_DSP0] = { 544 + .bit = BIT(1), 545 + .reg = TH1520_DSPSYS_RST_CFG, 546 + }, 547 + [TH1520_RESET_ID_X2X_SLAVE_DSP1] = { 548 + .bit = BIT(2), 549 + .reg = TH1520_DSPSYS_RST_CFG, 550 + }, 551 + [TH1520_RESET_ID_X2X_SLAVE_DSP0] = { 552 + .bit = BIT(3), 553 + .reg = TH1520_DSPSYS_RST_CFG, 554 + }, 555 + [TH1520_RESET_ID_DSP0_CORE] = { 556 + .bit = BIT(8), 557 + .reg = TH1520_DSPSYS_RST_CFG, 558 + }, 559 + [TH1520_RESET_ID_DSP0_DEBUG] = { 560 + .bit = BIT(9), 561 + .reg = TH1520_DSPSYS_RST_CFG, 562 + }, 563 + [TH1520_RESET_ID_DSP0_APB] = { 564 + .bit = BIT(10), 565 + .reg = TH1520_DSPSYS_RST_CFG, 566 + }, 567 + [TH1520_RESET_ID_DSP1_CORE] = { 568 + .bit = BIT(12), 569 + .reg = TH1520_DSPSYS_RST_CFG, 570 + }, 571 + [TH1520_RESET_ID_DSP1_DEBUG] = { 572 + .bit = BIT(13), 573 + .reg = TH1520_DSPSYS_RST_CFG, 574 + }, 575 + [TH1520_RESET_ID_DSP1_APB] = { 576 + .bit = BIT(14), 577 + .reg = TH1520_DSPSYS_RST_CFG, 578 + }, 579 + [TH1520_RESET_ID_DSPSYS_APB] = { 580 + .bit = BIT(16), 581 + .reg = TH1520_DSPSYS_RST_CFG, 582 + }, 583 + [TH1520_RESET_ID_AXI4_DSPSYS_SLV] = { 584 + .bit = BIT(20), 585 + .reg = TH1520_DSPSYS_RST_CFG, 586 + }, 587 + [TH1520_RESET_ID_AXI4_DSPSYS] = { 588 + .bit = BIT(24), 589 + .reg = TH1520_DSPSYS_RST_CFG, 590 + }, 591 + [TH1520_RESET_ID_AXI4_DSP_RS] = { 592 + .bit = BIT(26), 593 + .reg = TH1520_DSPSYS_RST_CFG, 594 + }, 595 + }; 596 + 597 + static const struct th1520_reset_map th1520_misc_resets[] = { 598 + [TH1520_RESET_ID_EMMC_SDIO_CLKGEN] = { 599 + .bit = BIT(0), 600 + .reg = TH1520_EMMC_RST_CFG, 601 + }, 602 + [TH1520_RESET_ID_EMMC] = { 603 + .bit = BIT(1), 604 + .reg = TH1520_EMMC_RST_CFG, 605 + }, 606 + [TH1520_RESET_ID_MISCSYS_AXI] = { 607 + .bit = BIT(0), 608 + .reg = TH1520_MISCSYS_AXI_RST_CFG, 609 + }, 610 + [TH1520_RESET_ID_MISCSYS_AXI_APB] = { 611 + .bit = BIT(1), 612 + .reg = TH1520_MISCSYS_AXI_RST_CFG, 613 + }, 614 + [TH1520_RESET_ID_SDIO0] = { 615 + .bit = BIT(0), 616 + .reg = TH1520_SDIO0_RST_CFG, 617 + }, 618 + [TH1520_RESET_ID_SDIO1] = { 619 + .bit = BIT(1), 620 + .reg = TH1520_SDIO1_RST_CFG, 621 + }, 622 + [TH1520_RESET_ID_USB3_APB] = { 623 + .bit = BIT(0), 624 + .reg = TH1520_USB3_DRD_RST_CFG, 625 + }, 626 + [TH1520_RESET_ID_USB3_PHY] = { 627 + .bit = BIT(1), 628 + .reg = TH1520_USB3_DRD_RST_CFG, 629 + }, 630 + [TH1520_RESET_ID_USB3_VCC] = { 631 + .bit = BIT(2), 632 + .reg = TH1520_USB3_DRD_RST_CFG, 633 + }, 634 + }; 635 + 636 + static const struct th1520_reset_map th1520_vi_resets[] = { 637 + [TH1520_RESET_ID_ISP0] = { 638 + .bit = BIT(0), 639 + .reg = TH1520_VISYS_RST_CFG, 640 + }, 641 + [TH1520_RESET_ID_ISP1] = { 642 + .bit = BIT(4), 643 + .reg = TH1520_VISYS_RST_CFG, 644 + }, 645 + [TH1520_RESET_ID_CSI0_APB] = { 646 + .bit = BIT(16), 647 + .reg = TH1520_VISYS_RST_CFG, 648 + }, 649 + [TH1520_RESET_ID_CSI1_APB] = { 650 + .bit = BIT(17), 651 + .reg = TH1520_VISYS_RST_CFG, 652 + }, 653 + [TH1520_RESET_ID_CSI2_APB] = { 654 + .bit = BIT(18), 655 + .reg = TH1520_VISYS_RST_CFG, 656 + }, 657 + [TH1520_RESET_ID_MIPI_FIFO] = { 658 + .bit = BIT(20), 659 + .reg = TH1520_VISYS_RST_CFG, 660 + }, 661 + [TH1520_RESET_ID_ISP_VENC_APB] = { 662 + .bit = BIT(24), 663 + .reg = TH1520_VISYS_RST_CFG, 664 + }, 665 + [TH1520_RESET_ID_VIPRE_APB] = { 666 + .bit = BIT(28), 667 + .reg = TH1520_VISYS_RST_CFG, 668 + }, 669 + [TH1520_RESET_ID_VIPRE_AXI] = { 670 + .bit = BIT(29), 671 + .reg = TH1520_VISYS_RST_CFG, 672 + }, 673 + [TH1520_RESET_ID_DW200_APB] = { 674 + .bit = BIT(31), 675 + .reg = TH1520_VISYS_RST_CFG, 676 + }, 677 + [TH1520_RESET_ID_VISYS3_AXI] = { 678 + .bit = BIT(8), 679 + .reg = TH1520_VISYS_2_RST_CFG, 680 + }, 681 + [TH1520_RESET_ID_VISYS2_AXI] = { 682 + .bit = BIT(9), 683 + .reg = TH1520_VISYS_2_RST_CFG, 684 + }, 685 + [TH1520_RESET_ID_VISYS1_AXI] = { 686 + .bit = BIT(10), 687 + .reg = TH1520_VISYS_2_RST_CFG, 688 + }, 689 + [TH1520_RESET_ID_VISYS_AXI] = { 690 + .bit = BIT(12), 691 + .reg = TH1520_VISYS_2_RST_CFG, 692 + }, 693 + [TH1520_RESET_ID_VISYS_APB] = { 694 + .bit = BIT(16), 695 + .reg = TH1520_VISYS_2_RST_CFG, 696 + }, 697 + [TH1520_RESET_ID_ISP_VENC_AXI] = { 698 + .bit = BIT(20), 699 + .reg = TH1520_VISYS_2_RST_CFG, 700 + }, 701 + }; 702 + 703 + static const struct th1520_reset_map th1520_vp_resets[] = { 704 + [TH1520_RESET_ID_VPSYS_AXI_APB] = { 705 + .bit = BIT(0), 706 + .reg = TH1520_AXIBUS_RST_CFG, 707 + }, 708 + [TH1520_RESET_ID_VPSYS_AXI] = { 709 + .bit = BIT(1), 710 + .reg = TH1520_AXIBUS_RST_CFG, 711 + }, 712 + [TH1520_RESET_ID_FCE_APB] = { 713 + .bit = BIT(0), 714 + .reg = TH1520_FCE_RST_CFG, 715 + }, 716 + [TH1520_RESET_ID_FCE_CORE] = { 717 + .bit = BIT(1), 718 + .reg = TH1520_FCE_RST_CFG, 719 + }, 720 + [TH1520_RESET_ID_FCE_X2X_MASTER] = { 721 + .bit = BIT(4), 722 + .reg = TH1520_FCE_RST_CFG, 723 + }, 724 + [TH1520_RESET_ID_FCE_X2X_SLAVE] = { 725 + .bit = BIT(5), 726 + .reg = TH1520_FCE_RST_CFG, 727 + }, 728 + [TH1520_RESET_ID_G2D_APB] = { 729 + .bit = BIT(0), 730 + .reg = TH1520_G2D_RST_CFG, 731 + }, 732 + [TH1520_RESET_ID_G2D_ACLK] = { 733 + .bit = BIT(1), 734 + .reg = TH1520_G2D_RST_CFG, 735 + }, 736 + [TH1520_RESET_ID_G2D_CORE] = { 737 + .bit = BIT(2), 738 + .reg = TH1520_G2D_RST_CFG, 739 + }, 740 + [TH1520_RESET_ID_VDEC_APB] = { 741 + .bit = BIT(0), 742 + .reg = TH1520_VDEC_RST_CFG, 743 + }, 744 + [TH1520_RESET_ID_VDEC_ACLK] = { 745 + .bit = BIT(1), 746 + .reg = TH1520_VDEC_RST_CFG, 747 + }, 748 + [TH1520_RESET_ID_VDEC_CORE] = { 749 + .bit = BIT(2), 750 + .reg = TH1520_VDEC_RST_CFG, 751 + }, 752 + [TH1520_RESET_ID_VENC_APB] = { 753 + .bit = BIT(0), 754 + .reg = TH1520_VENC_RST_CFG, 755 + }, 756 + [TH1520_RESET_ID_VENC_CORE] = { 757 + .bit = BIT(1), 758 + .reg = TH1520_VENC_RST_CFG, 172 759 }, 173 760 }; 174 761 ··· 933 170 .num = ARRAY_SIZE(th1520_resets), 934 171 }; 935 172 173 + static const struct th1520_reset_data th1520_ap_reset_data = { 174 + .resets = th1520_ap_resets, 175 + .num = ARRAY_SIZE(th1520_ap_resets), 176 + }; 177 + 178 + static const struct th1520_reset_data th1520_dsp_reset_data = { 179 + .resets = th1520_dsp_resets, 180 + .num = ARRAY_SIZE(th1520_dsp_resets), 181 + }; 182 + 183 + static const struct th1520_reset_data th1520_misc_reset_data = { 184 + .resets = th1520_misc_resets, 185 + .num = ARRAY_SIZE(th1520_misc_resets), 186 + }; 187 + 188 + static const struct th1520_reset_data th1520_vi_reset_data = { 189 + .resets = th1520_vi_resets, 190 + .num = ARRAY_SIZE(th1520_vi_resets), 191 + }; 192 + 193 + static const struct th1520_reset_data th1520_vp_reset_data = { 194 + .resets = th1520_vp_resets, 195 + .num = ARRAY_SIZE(th1520_vp_resets), 196 + }; 197 + 936 198 static const struct of_device_id th1520_reset_match[] = { 937 199 { .compatible = "thead,th1520-reset", .data = &th1520_reset_data }, 200 + { .compatible = "thead,th1520-reset-ap", .data = &th1520_ap_reset_data }, 201 + { .compatible = "thead,th1520-reset-dsp", .data = &th1520_dsp_reset_data }, 202 + { .compatible = "thead,th1520-reset-misc", .data = &th1520_misc_reset_data }, 203 + { .compatible = "thead,th1520-reset-vi", .data = &th1520_vi_reset_data }, 204 + { .compatible = "thead,th1520-reset-vp", .data = &th1520_vp_reset_data }, 938 205 { /* sentinel */ } 939 206 }; 940 207 MODULE_DEVICE_TABLE(of, th1520_reset_match);