1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/module.h> 8 #include <linux/of_device.h> 9 #include <linux/regmap.h> 10 11 #include <dt-bindings/clock/qcom,ipq5332-gcc.h> 12 13 #include "clk-alpha-pll.h" 14 #include "clk-branch.h" 15 #include "clk-rcg.h" 16 #include "clk-regmap.h" 17 #include "clk-regmap-divider.h" 18 #include "clk-regmap-mux.h" 19 #include "clk-regmap-phy-mux.h" 20 #include "reset.h" 21 22 enum { 23 DT_XO, 24 DT_SLEEP_CLK, 25 DT_PCIE_2LANE_PHY_PIPE_CLK, 26 DT_PCIE_2LANE_PHY_PIPE_CLK_X1, 27 DT_USB_PCIE_WRAPPER_PIPE_CLK, 28 }; 29 30 enum { 31 P_PCIE3X2_PIPE, 32 P_PCIE3X1_0_PIPE, 33 P_PCIE3X1_1_PIPE, 34 P_USB3PHY_0_PIPE, 35 P_CORE_BI_PLL_TEST_SE, 36 P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 37 P_GPLL0_OUT_AUX, 38 P_GPLL0_OUT_MAIN, 39 P_GPLL2_OUT_AUX, 40 P_GPLL2_OUT_MAIN, 41 P_GPLL4_OUT_AUX, 42 P_GPLL4_OUT_MAIN, 43 P_SLEEP_CLK, 44 P_XO, 45 }; 46 47 static const struct clk_parent_data gcc_parent_data_xo = { .index = DT_XO }; 48 49 static struct clk_alpha_pll gpll0_main = { 50 .offset = 0x20000, 51 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], 52 .clkr = { 53 .enable_reg = 0xb000, 54 .enable_mask = BIT(0), 55 .hw.init = &(const struct clk_init_data) { 56 .name = "gpll0_main", 57 .parent_data = &gcc_parent_data_xo, 58 .num_parents = 1, 59 .ops = &clk_alpha_pll_stromer_ops, 60 }, 61 }, 62 }; 63 64 static struct clk_fixed_factor gpll0_div2 = { 65 .mult = 1, 66 .div = 2, 67 .hw.init = &(struct clk_init_data) { 68 .name = "gpll0_div2", 69 .parent_hws = (const struct clk_hw *[]) { 70 &gpll0_main.clkr.hw }, 71 .num_parents = 1, 72 .ops = &clk_fixed_factor_ops, 73 .flags = CLK_SET_RATE_PARENT, 74 }, 75 }; 76 77 static struct clk_alpha_pll_postdiv gpll0 = { 78 .offset = 0x20000, 79 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], 80 .width = 4, 81 .clkr.hw.init = &(struct clk_init_data) { 82 .name = "gpll0", 83 .parent_hws = (const struct clk_hw *[]) { 84 &gpll0_main.clkr.hw }, 85 .num_parents = 1, 86 .ops = &clk_alpha_pll_postdiv_ro_ops, 87 .flags = CLK_SET_RATE_PARENT, 88 }, 89 }; 90 91 static struct clk_alpha_pll gpll2_main = { 92 .offset = 0x21000, 93 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], 94 .clkr = { 95 .enable_reg = 0xb000, 96 .enable_mask = BIT(1), 97 .hw.init = &(const struct clk_init_data) { 98 .name = "gpll2", 99 .parent_data = &gcc_parent_data_xo, 100 .num_parents = 1, 101 .ops = &clk_alpha_pll_stromer_ops, 102 }, 103 }, 104 }; 105 106 static struct clk_alpha_pll_postdiv gpll2 = { 107 .offset = 0x21000, 108 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], 109 .width = 4, 110 .clkr.hw.init = &(struct clk_init_data) { 111 .name = "gpll2_main", 112 .parent_hws = (const struct clk_hw *[]) { 113 &gpll2_main.clkr.hw }, 114 .num_parents = 1, 115 .ops = &clk_alpha_pll_postdiv_ro_ops, 116 .flags = CLK_SET_RATE_PARENT, 117 }, 118 }; 119 120 static struct clk_alpha_pll gpll4_main = { 121 .offset = 0x22000, 122 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], 123 .clkr = { 124 .enable_reg = 0xb000, 125 .enable_mask = BIT(2), 126 .hw.init = &(const struct clk_init_data) { 127 .name = "gpll4_main", 128 .parent_data = &gcc_parent_data_xo, 129 .num_parents = 1, 130 .ops = &clk_alpha_pll_stromer_ops, 131 /* 132 * There are no consumers for this GPLL in kernel yet, 133 * (will be added soon), so the clock framework 134 * disables this source. But some of the clocks 135 * initialized by boot loaders uses this source. So we 136 * need to keep this clock ON. Add the 137 * CLK_IGNORE_UNUSED flag so the clock will not be 138 * disabled. Once the consumer in kernel is added, we 139 * can get rid of this flag. 140 */ 141 .flags = CLK_IGNORE_UNUSED, 142 }, 143 }, 144 }; 145 146 static struct clk_alpha_pll_postdiv gpll4 = { 147 .offset = 0x22000, 148 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], 149 .width = 4, 150 .clkr.hw.init = &(struct clk_init_data) { 151 .name = "gpll4", 152 .parent_hws = (const struct clk_hw *[]) { 153 &gpll4_main.clkr.hw }, 154 .num_parents = 1, 155 .ops = &clk_alpha_pll_postdiv_ro_ops, 156 .flags = CLK_SET_RATE_PARENT, 157 }, 158 }; 159 160 static const struct parent_map gcc_parent_map_xo[] = { 161 { P_XO, 0 }, 162 }; 163 164 static const struct parent_map gcc_parent_map_0[] = { 165 { P_XO, 0 }, 166 { P_GPLL0_OUT_MAIN, 1 }, 167 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 168 }; 169 170 static const struct clk_parent_data gcc_parent_data_0[] = { 171 { .index = DT_XO }, 172 { .hw = &gpll0.clkr.hw }, 173 { .hw = &gpll0_div2.hw }, 174 }; 175 176 static const struct parent_map gcc_parent_map_1[] = { 177 { P_XO, 0 }, 178 { P_GPLL0_OUT_MAIN, 1 }, 179 }; 180 181 static const struct clk_parent_data gcc_parent_data_1[] = { 182 { .index = DT_XO }, 183 { .hw = &gpll0.clkr.hw }, 184 }; 185 186 static const struct parent_map gcc_parent_map_2[] = { 187 { P_XO, 0 }, 188 { P_GPLL0_OUT_MAIN, 1 }, 189 { P_GPLL4_OUT_MAIN, 2 }, 190 }; 191 192 static const struct clk_parent_data gcc_parent_data_2[] = { 193 { .index = DT_XO }, 194 { .hw = &gpll0.clkr.hw }, 195 { .hw = &gpll4.clkr.hw }, 196 }; 197 198 static const struct parent_map gcc_parent_map_3[] = { 199 { P_XO, 0 }, 200 { P_GPLL0_OUT_MAIN, 1 }, 201 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 202 { P_SLEEP_CLK, 6 }, 203 }; 204 205 static const struct clk_parent_data gcc_parent_data_3[] = { 206 { .index = DT_XO }, 207 { .hw = &gpll0.clkr.hw }, 208 { .hw = &gpll0_div2.hw }, 209 { .index = DT_SLEEP_CLK }, 210 }; 211 212 static const struct parent_map gcc_parent_map_4[] = { 213 { P_XO, 0 }, 214 { P_GPLL4_OUT_MAIN, 1 }, 215 { P_GPLL0_OUT_AUX, 2 }, 216 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 217 }; 218 219 static const struct clk_parent_data gcc_parent_data_4[] = { 220 { .index = DT_XO }, 221 { .hw = &gpll4.clkr.hw }, 222 { .hw = &gpll0.clkr.hw }, 223 { .hw = &gpll0_div2.hw }, 224 }; 225 226 static const struct parent_map gcc_parent_map_5[] = { 227 { P_XO, 0 }, 228 { P_GPLL0_OUT_MAIN, 1 }, 229 { P_GPLL2_OUT_AUX, 2 }, 230 { P_GPLL4_OUT_AUX, 3 }, 231 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 232 { P_GPLL0_OUT_AUX, 5 }, 233 }; 234 235 static const struct clk_parent_data gcc_parent_data_5[] = { 236 { .index = DT_XO }, 237 { .hw = &gpll0.clkr.hw }, 238 { .hw = &gpll2.clkr.hw }, 239 { .hw = &gpll4.clkr.hw }, 240 { .hw = &gpll0_div2.hw }, 241 { .hw = &gpll0.clkr.hw }, 242 }; 243 244 static const struct parent_map gcc_parent_map_6[] = { 245 { P_XO, 0 }, 246 { P_GPLL0_OUT_MAIN, 1 }, 247 { P_GPLL0_OUT_AUX, 2 }, 248 { P_SLEEP_CLK, 6 }, 249 }; 250 251 static const struct clk_parent_data gcc_parent_data_6[] = { 252 { .index = DT_XO }, 253 { .hw = &gpll0.clkr.hw }, 254 { .hw = &gpll0.clkr.hw }, 255 { .index = DT_SLEEP_CLK }, 256 }; 257 258 static const struct parent_map gcc_parent_map_7[] = { 259 { P_XO, 0 }, 260 { P_GPLL0_OUT_MAIN, 1 }, 261 { P_GPLL2_OUT_AUX, 2 }, 262 { P_GPLL4_OUT_AUX, 3 }, 263 { P_SLEEP_CLK, 6 }, 264 }; 265 266 static const struct clk_parent_data gcc_parent_data_7[] = { 267 { .index = DT_XO }, 268 { .hw = &gpll0.clkr.hw }, 269 { .hw = &gpll2.clkr.hw }, 270 { .hw = &gpll4.clkr.hw }, 271 { .index = DT_SLEEP_CLK }, 272 }; 273 274 static const struct parent_map gcc_parent_map_8[] = { 275 { P_XO, 0 }, 276 { P_GPLL0_OUT_MAIN, 1 }, 277 { P_GPLL2_OUT_AUX, 2 }, 278 }; 279 280 static const struct clk_parent_data gcc_parent_data_8[] = { 281 { .index = DT_XO }, 282 { .hw = &gpll0.clkr.hw }, 283 { .hw = &gpll2.clkr.hw }, 284 }; 285 286 static const struct parent_map gcc_parent_map_9[] = { 287 { P_XO, 0 }, 288 { P_GPLL0_OUT_MAIN, 1 }, 289 { P_GPLL2_OUT_MAIN, 2 }, 290 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 291 }; 292 293 static const struct clk_parent_data gcc_parent_data_9[] = { 294 { .index = DT_XO }, 295 { .hw = &gpll0.clkr.hw }, 296 { .hw = &gpll2.clkr.hw }, 297 { .hw = &gpll0_div2.hw }, 298 }; 299 300 static const struct parent_map gcc_parent_map_10[] = { 301 { P_SLEEP_CLK, 6 }, 302 }; 303 304 static const struct clk_parent_data gcc_parent_data_10[] = { 305 { .index = DT_SLEEP_CLK }, 306 }; 307 308 static const struct parent_map gcc_parent_map_11[] = { 309 { P_XO, 0 }, 310 { P_GPLL0_OUT_MAIN, 1 }, 311 { P_GPLL4_OUT_MAIN, 2 }, 312 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 3 }, 313 }; 314 315 static const struct clk_parent_data gcc_parent_data_11[] = { 316 { .index = DT_XO }, 317 { .hw = &gpll0.clkr.hw }, 318 { .hw = &gpll4.clkr.hw }, 319 { .hw = &gpll0_div2.hw }, 320 }; 321 322 static const struct parent_map gcc_parent_map_12[] = { 323 { P_XO, 0 }, 324 { P_GPLL0_OUT_AUX, 2 }, 325 { P_SLEEP_CLK, 6 }, 326 }; 327 328 static const struct clk_parent_data gcc_parent_data_12[] = { 329 { .index = DT_XO }, 330 { .hw = &gpll0.clkr.hw }, 331 { .index = DT_SLEEP_CLK }, 332 }; 333 334 static const struct parent_map gcc_parent_map_13[] = { 335 { P_XO, 0 }, 336 { P_GPLL4_OUT_AUX, 1 }, 337 { P_GPLL0_OUT_MAIN, 3 }, 338 { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 }, 339 }; 340 341 static const struct clk_parent_data gcc_parent_data_13[] = { 342 { .index = DT_XO }, 343 { .hw = &gpll4.clkr.hw }, 344 { .hw = &gpll0.clkr.hw }, 345 { .hw = &gpll0_div2.hw }, 346 }; 347 348 static const struct freq_tbl ftbl_gcc_adss_pwm_clk_src[] = { 349 F(24000000, P_XO, 1, 0, 0), 350 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 351 { } 352 }; 353 354 static struct clk_rcg2 gcc_adss_pwm_clk_src = { 355 .cmd_rcgr = 0x1c004, 356 .mnd_width = 0, 357 .hid_width = 5, 358 .parent_map = gcc_parent_map_1, 359 .freq_tbl = ftbl_gcc_adss_pwm_clk_src, 360 .clkr.hw.init = &(const struct clk_init_data) { 361 .name = "gcc_adss_pwm_clk_src", 362 .parent_data = gcc_parent_data_1, 363 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 364 .ops = &clk_rcg2_ops, 365 }, 366 }; 367 368 static const struct freq_tbl ftbl_gcc_apss_axi_clk_src[] = { 369 F(480000000, P_GPLL4_OUT_AUX, 2.5, 0, 0), 370 F(533333333, P_GPLL0_OUT_MAIN, 1.5, 0, 0), 371 { } 372 }; 373 374 static struct clk_rcg2 gcc_apss_axi_clk_src = { 375 .cmd_rcgr = 0x24004, 376 .mnd_width = 0, 377 .hid_width = 5, 378 .parent_map = gcc_parent_map_5, 379 .freq_tbl = ftbl_gcc_apss_axi_clk_src, 380 .clkr.hw.init = &(const struct clk_init_data) { 381 .name = "gcc_apss_axi_clk_src", 382 .parent_data = gcc_parent_data_5, 383 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 384 .ops = &clk_rcg2_ops, 385 }, 386 }; 387 388 static const struct freq_tbl ftbl_gcc_blsp1_qup1_spi_apps_clk_src[] = { 389 F(960000, P_XO, 1, 1, 25), 390 F(4800000, P_XO, 5, 0, 0), 391 F(9600000, P_XO, 2.5, 0, 0), 392 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5), 393 F(24000000, P_XO, 1, 0, 0), 394 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 395 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 396 { } 397 }; 398 399 static struct clk_rcg2 gcc_blsp1_qup1_spi_apps_clk_src = { 400 .cmd_rcgr = 0x2004, 401 .mnd_width = 8, 402 .hid_width = 5, 403 .parent_map = gcc_parent_map_0, 404 .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src, 405 .clkr.hw.init = &(const struct clk_init_data) { 406 .name = "gcc_blsp1_qup1_spi_apps_clk_src", 407 .parent_data = gcc_parent_data_0, 408 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 409 .ops = &clk_rcg2_ops, 410 }, 411 }; 412 413 static struct clk_rcg2 gcc_blsp1_qup2_spi_apps_clk_src = { 414 .cmd_rcgr = 0x3004, 415 .mnd_width = 8, 416 .hid_width = 5, 417 .parent_map = gcc_parent_map_0, 418 .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src, 419 .clkr.hw.init = &(const struct clk_init_data) { 420 .name = "gcc_blsp1_qup2_spi_apps_clk_src", 421 .parent_data = gcc_parent_data_0, 422 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 423 .ops = &clk_rcg2_ops, 424 }, 425 }; 426 427 static struct clk_rcg2 gcc_blsp1_qup3_spi_apps_clk_src = { 428 .cmd_rcgr = 0x4004, 429 .mnd_width = 8, 430 .hid_width = 5, 431 .parent_map = gcc_parent_map_0, 432 .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src, 433 .clkr.hw.init = &(const struct clk_init_data) { 434 .name = "gcc_blsp1_qup3_spi_apps_clk_src", 435 .parent_data = gcc_parent_data_0, 436 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 437 .ops = &clk_rcg2_ops, 438 }, 439 }; 440 441 static const struct freq_tbl ftbl_gcc_blsp1_uart1_apps_clk_src[] = { 442 F(3686400, P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 1, 144, 15625), 443 F(7372800, P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 1, 288, 15625), 444 F(14745600, P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 1, 576, 15625), 445 F(24000000, P_XO, 1, 0, 0), 446 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 447 F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25), 448 F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20), 449 F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500), 450 F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50), 451 F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125), 452 F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100), 453 F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625), 454 F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40), 455 F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0), 456 { } 457 }; 458 459 static struct clk_rcg2 gcc_blsp1_uart1_apps_clk_src = { 460 .cmd_rcgr = 0x202c, 461 .mnd_width = 16, 462 .hid_width = 5, 463 .parent_map = gcc_parent_map_0, 464 .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src, 465 .clkr.hw.init = &(const struct clk_init_data) { 466 .name = "gcc_blsp1_uart1_apps_clk_src", 467 .parent_data = gcc_parent_data_0, 468 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 469 .ops = &clk_rcg2_ops, 470 }, 471 }; 472 473 static struct clk_rcg2 gcc_blsp1_uart2_apps_clk_src = { 474 .cmd_rcgr = 0x302c, 475 .mnd_width = 16, 476 .hid_width = 5, 477 .parent_map = gcc_parent_map_0, 478 .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src, 479 .clkr.hw.init = &(const struct clk_init_data) { 480 .name = "gcc_blsp1_uart2_apps_clk_src", 481 .parent_data = gcc_parent_data_0, 482 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 483 .ops = &clk_rcg2_ops, 484 }, 485 }; 486 487 static struct clk_rcg2 gcc_blsp1_uart3_apps_clk_src = { 488 .cmd_rcgr = 0x402c, 489 .mnd_width = 16, 490 .hid_width = 5, 491 .parent_map = gcc_parent_map_0, 492 .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src, 493 .clkr.hw.init = &(const struct clk_init_data) { 494 .name = "gcc_blsp1_uart3_apps_clk_src", 495 .parent_data = gcc_parent_data_0, 496 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 497 .ops = &clk_rcg2_ops, 498 }, 499 }; 500 501 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 502 F(24000000, P_XO, 1, 0, 0), 503 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 504 { } 505 }; 506 507 static struct clk_rcg2 gcc_gp1_clk_src = { 508 .cmd_rcgr = 0x8004, 509 .mnd_width = 8, 510 .hid_width = 5, 511 .parent_map = gcc_parent_map_3, 512 .freq_tbl = ftbl_gcc_gp1_clk_src, 513 .clkr.hw.init = &(const struct clk_init_data) { 514 .name = "gcc_gp1_clk_src", 515 .parent_data = gcc_parent_data_3, 516 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 517 .ops = &clk_rcg2_ops, 518 }, 519 }; 520 521 static struct clk_rcg2 gcc_gp2_clk_src = { 522 .cmd_rcgr = 0x9004, 523 .mnd_width = 8, 524 .hid_width = 5, 525 .parent_map = gcc_parent_map_3, 526 .freq_tbl = ftbl_gcc_gp1_clk_src, 527 .clkr.hw.init = &(const struct clk_init_data) { 528 .name = "gcc_gp2_clk_src", 529 .parent_data = gcc_parent_data_3, 530 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 531 .ops = &clk_rcg2_ops, 532 }, 533 }; 534 535 static const struct freq_tbl ftbl_gcc_lpass_sway_clk_src[] = { 536 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0), 537 { } 538 }; 539 540 static struct clk_rcg2 gcc_lpass_sway_clk_src = { 541 .cmd_rcgr = 0x27004, 542 .mnd_width = 0, 543 .hid_width = 5, 544 .parent_map = gcc_parent_map_1, 545 .freq_tbl = ftbl_gcc_lpass_sway_clk_src, 546 .clkr.hw.init = &(const struct clk_init_data) { 547 .name = "gcc_lpass_sway_clk_src", 548 .parent_data = gcc_parent_data_1, 549 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 550 .ops = &clk_rcg2_ops, 551 }, 552 }; 553 554 static const struct freq_tbl ftbl_gcc_nss_ts_clk_src[] = { 555 F(24000000, P_XO, 1, 0, 0), 556 { } 557 }; 558 559 static struct clk_rcg2 gcc_nss_ts_clk_src = { 560 .cmd_rcgr = 0x17088, 561 .mnd_width = 0, 562 .hid_width = 5, 563 .parent_map = gcc_parent_map_xo, 564 .freq_tbl = ftbl_gcc_nss_ts_clk_src, 565 .clkr.hw.init = &(const struct clk_init_data) { 566 .name = "gcc_nss_ts_clk_src", 567 .parent_data = &gcc_parent_data_xo, 568 .num_parents = 1, 569 .ops = &clk_rcg2_ops, 570 }, 571 }; 572 573 static const struct freq_tbl ftbl_gcc_pcie3x1_0_axi_clk_src[] = { 574 F(240000000, P_GPLL4_OUT_MAIN, 5, 0, 0), 575 { } 576 }; 577 578 static struct clk_rcg2 gcc_pcie3x1_0_axi_clk_src = { 579 .cmd_rcgr = 0x29018, 580 .mnd_width = 0, 581 .hid_width = 5, 582 .parent_map = gcc_parent_map_2, 583 .freq_tbl = ftbl_gcc_pcie3x1_0_axi_clk_src, 584 .clkr.hw.init = &(const struct clk_init_data) { 585 .name = "gcc_pcie3x1_0_axi_clk_src", 586 .parent_data = gcc_parent_data_2, 587 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 588 .ops = &clk_rcg2_ops, 589 }, 590 }; 591 592 static struct clk_rcg2 gcc_pcie3x1_0_rchg_clk_src = { 593 .cmd_rcgr = 0x2907c, 594 .hid_width = 5, 595 .parent_map = gcc_parent_map_0, 596 .freq_tbl = ftbl_gcc_adss_pwm_clk_src, 597 .clkr.hw.init = &(const struct clk_init_data) { 598 .name = "gcc_pcie3x1_0_rchg_clk_src", 599 .parent_data = gcc_parent_data_0, 600 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 601 .ops = &clk_rcg2_ops, 602 }, 603 }; 604 605 static struct clk_branch gcc_pcie3x1_0_rchg_clk = { 606 .halt_reg = 0x2907c, 607 .clkr = { 608 .enable_reg = 0x2907c, 609 .enable_mask = BIT(1), 610 .hw.init = &(struct clk_init_data) { 611 .name = "gcc_pcie3x1_0_rchg_clk", 612 .parent_hws = (const struct clk_hw *[]) { 613 &gcc_pcie3x1_0_rchg_clk_src.clkr.hw }, 614 .num_parents = 1, 615 .flags = CLK_SET_RATE_PARENT, 616 .ops = &clk_branch2_ops, 617 }, 618 }, 619 }; 620 621 static struct clk_rcg2 gcc_pcie3x1_1_axi_clk_src = { 622 .cmd_rcgr = 0x2a004, 623 .mnd_width = 0, 624 .hid_width = 5, 625 .parent_map = gcc_parent_map_2, 626 .freq_tbl = ftbl_gcc_pcie3x1_0_axi_clk_src, 627 .clkr.hw.init = &(const struct clk_init_data) { 628 .name = "gcc_pcie3x1_1_axi_clk_src", 629 .parent_data = gcc_parent_data_2, 630 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 631 .ops = &clk_rcg2_ops, 632 }, 633 }; 634 635 static struct clk_rcg2 gcc_pcie3x1_1_rchg_clk_src = { 636 .cmd_rcgr = 0x2a078, 637 .hid_width = 5, 638 .parent_map = gcc_parent_map_0, 639 .freq_tbl = ftbl_gcc_adss_pwm_clk_src, 640 .clkr.hw.init = &(const struct clk_init_data) { 641 .name = "gcc_pcie3x1_1_rchg_clk_src", 642 .parent_data = gcc_parent_data_0, 643 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 644 .ops = &clk_rcg2_ops, 645 }, 646 }; 647 648 static struct clk_branch gcc_pcie3x1_1_rchg_clk = { 649 .halt_reg = 0x2a078, 650 .clkr = { 651 .enable_reg = 0x2a078, 652 .enable_mask = BIT(1), 653 .hw.init = &(struct clk_init_data) { 654 .name = "gcc_pcie3x1_1_rchg_clk", 655 .parent_hws = (const struct clk_hw *[]) { 656 &gcc_pcie3x1_1_rchg_clk_src.clkr.hw }, 657 .num_parents = 1, 658 .flags = CLK_SET_RATE_PARENT, 659 .ops = &clk_branch2_ops, 660 }, 661 }, 662 }; 663 664 static const struct freq_tbl ftbl_gcc_pcie3x2_axi_m_clk_src[] = { 665 F(266666667, P_GPLL4_OUT_MAIN, 4.5, 0, 0), 666 { } 667 }; 668 669 static struct clk_rcg2 gcc_pcie3x2_axi_m_clk_src = { 670 .cmd_rcgr = 0x28018, 671 .mnd_width = 0, 672 .hid_width = 5, 673 .parent_map = gcc_parent_map_2, 674 .freq_tbl = ftbl_gcc_pcie3x2_axi_m_clk_src, 675 .clkr.hw.init = &(const struct clk_init_data) { 676 .name = "gcc_pcie3x2_axi_m_clk_src", 677 .parent_data = gcc_parent_data_2, 678 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 679 .ops = &clk_rcg2_ops, 680 }, 681 }; 682 683 static struct clk_rcg2 gcc_pcie3x2_axi_s_clk_src = { 684 .cmd_rcgr = 0x28084, 685 .mnd_width = 0, 686 .hid_width = 5, 687 .parent_map = gcc_parent_map_2, 688 .freq_tbl = ftbl_gcc_pcie3x1_0_axi_clk_src, 689 .clkr.hw.init = &(const struct clk_init_data) { 690 .name = "gcc_pcie3x2_axi_s_clk_src", 691 .parent_data = gcc_parent_data_2, 692 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 693 .ops = &clk_rcg2_ops, 694 }, 695 }; 696 697 static struct clk_rcg2 gcc_pcie3x2_rchg_clk_src = { 698 .cmd_rcgr = 0x28078, 699 .mnd_width = 0, 700 .hid_width = 5, 701 .parent_map = gcc_parent_map_0, 702 .freq_tbl = ftbl_gcc_adss_pwm_clk_src, 703 .clkr.hw.init = &(const struct clk_init_data) { 704 .name = "gcc_pcie3x2_rchg_clk_src", 705 .parent_data = gcc_parent_data_0, 706 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 707 .ops = &clk_rcg2_ops, 708 }, 709 }; 710 711 static struct clk_branch gcc_pcie3x2_rchg_clk = { 712 .halt_reg = 0x28078, 713 .clkr = { 714 .enable_reg = 0x28078, 715 .enable_mask = BIT(1), 716 .hw.init = &(struct clk_init_data) { 717 .name = "gcc_pcie3x2_rchg_clk", 718 .parent_hws = (const struct clk_hw *[]) { 719 &gcc_pcie3x2_rchg_clk_src.clkr.hw }, 720 .num_parents = 1, 721 .flags = CLK_SET_RATE_PARENT, 722 .ops = &clk_branch2_ops, 723 }, 724 }, 725 }; 726 727 static const struct freq_tbl ftbl_gcc_pcie_aux_clk_src[] = { 728 F(2000000, P_XO, 12, 0, 0), 729 { } 730 }; 731 732 static struct clk_rcg2 gcc_pcie_aux_clk_src = { 733 .cmd_rcgr = 0x28004, 734 .mnd_width = 16, 735 .hid_width = 5, 736 .parent_map = gcc_parent_map_6, 737 .freq_tbl = ftbl_gcc_pcie_aux_clk_src, 738 .clkr.hw.init = &(const struct clk_init_data) { 739 .name = "gcc_pcie_aux_clk_src", 740 .parent_data = gcc_parent_data_6, 741 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 742 .ops = &clk_rcg2_ops, 743 }, 744 }; 745 746 static struct clk_regmap_phy_mux gcc_pcie3x2_pipe_clk_src = { 747 .reg = 0x28064, 748 .clkr = { 749 .hw.init = &(struct clk_init_data) { 750 .name = "gcc_pcie3x2_pipe_clk_src", 751 .parent_data = &(const struct clk_parent_data) { 752 .index = DT_PCIE_2LANE_PHY_PIPE_CLK, 753 }, 754 .num_parents = 1, 755 .ops = &clk_regmap_phy_mux_ops, 756 }, 757 }, 758 }; 759 760 static struct clk_regmap_phy_mux gcc_pcie3x1_0_pipe_clk_src = { 761 .reg = 0x29064, 762 .clkr = { 763 .hw.init = &(struct clk_init_data) { 764 .name = "gcc_pcie3x1_0_pipe_clk_src", 765 .parent_data = &(const struct clk_parent_data) { 766 .index = DT_USB_PCIE_WRAPPER_PIPE_CLK, 767 }, 768 .num_parents = 1, 769 .ops = &clk_regmap_phy_mux_ops, 770 }, 771 }, 772 }; 773 774 static struct clk_regmap_phy_mux gcc_pcie3x1_1_pipe_clk_src = { 775 .reg = 0x2a064, 776 .clkr = { 777 .hw.init = &(struct clk_init_data) { 778 .name = "gcc_pcie3x1_1_pipe_clk_src", 779 .parent_data = &(const struct clk_parent_data) { 780 .index = DT_PCIE_2LANE_PHY_PIPE_CLK_X1, 781 }, 782 .num_parents = 1, 783 .ops = &clk_regmap_phy_mux_ops, 784 }, 785 }, 786 }; 787 788 static const struct freq_tbl ftbl_gcc_pcnoc_bfdcd_clk_src[] = { 789 F(24000000, P_XO, 1, 0, 0), 790 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 791 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 792 { } 793 }; 794 795 static struct clk_rcg2 gcc_pcnoc_bfdcd_clk_src = { 796 .cmd_rcgr = 0x31004, 797 .mnd_width = 0, 798 .hid_width = 5, 799 .parent_map = gcc_parent_map_0, 800 .freq_tbl = ftbl_gcc_pcnoc_bfdcd_clk_src, 801 .clkr.hw.init = &(const struct clk_init_data) { 802 .name = "gcc_pcnoc_bfdcd_clk_src", 803 .parent_data = gcc_parent_data_0, 804 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 805 .ops = &clk_rcg2_ops, 806 }, 807 }; 808 809 static struct clk_rcg2 gcc_q6_axim_clk_src = { 810 .cmd_rcgr = 0x25004, 811 .mnd_width = 0, 812 .hid_width = 5, 813 .parent_map = gcc_parent_map_7, 814 .freq_tbl = ftbl_gcc_apss_axi_clk_src, 815 .clkr.hw.init = &(const struct clk_init_data) { 816 .name = "gcc_q6_axim_clk_src", 817 .parent_data = gcc_parent_data_7, 818 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 819 .ops = &clk_rcg2_ops, 820 }, 821 }; 822 823 static const struct freq_tbl ftbl_gcc_qdss_at_clk_src[] = { 824 F(240000000, P_GPLL4_OUT_MAIN, 5, 0, 0), 825 { } 826 }; 827 828 static struct clk_rcg2 gcc_qdss_at_clk_src = { 829 .cmd_rcgr = 0x2d004, 830 .mnd_width = 0, 831 .hid_width = 5, 832 .parent_map = gcc_parent_map_4, 833 .freq_tbl = ftbl_gcc_qdss_at_clk_src, 834 .clkr.hw.init = &(const struct clk_init_data) { 835 .name = "gcc_qdss_at_clk_src", 836 .parent_data = gcc_parent_data_4, 837 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 838 .ops = &clk_rcg2_ops, 839 }, 840 }; 841 842 static const struct freq_tbl ftbl_gcc_qdss_tsctr_clk_src[] = { 843 F(600000000, P_GPLL4_OUT_MAIN, 2, 0, 0), 844 { } 845 }; 846 847 static struct clk_rcg2 gcc_qdss_tsctr_clk_src = { 848 .cmd_rcgr = 0x2d01c, 849 .mnd_width = 0, 850 .hid_width = 5, 851 .parent_map = gcc_parent_map_4, 852 .freq_tbl = ftbl_gcc_qdss_tsctr_clk_src, 853 .clkr.hw.init = &(const struct clk_init_data) { 854 .name = "gcc_qdss_tsctr_clk_src", 855 .parent_data = gcc_parent_data_4, 856 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 857 .ops = &clk_rcg2_ops, 858 }, 859 }; 860 861 static struct clk_fixed_factor gcc_qdss_tsctr_div2_clk_src = { 862 .mult = 1, 863 .div = 2, 864 .hw.init = &(struct clk_init_data) { 865 .name = "gcc_qdss_tsctr_div2_clk_src", 866 .parent_hws = (const struct clk_hw *[]) { 867 &gcc_qdss_tsctr_clk_src.clkr.hw }, 868 .num_parents = 1, 869 .flags = CLK_SET_RATE_PARENT, 870 .ops = &clk_fixed_factor_ops, 871 }, 872 }; 873 874 static struct clk_fixed_factor gcc_qdss_tsctr_div3_clk_src = { 875 .mult = 1, 876 .div = 3, 877 .hw.init = &(struct clk_init_data) { 878 .name = "gcc_qdss_tsctr_div3_clk_src", 879 .parent_hws = (const struct clk_hw *[]) { 880 &gcc_qdss_tsctr_clk_src.clkr.hw }, 881 .num_parents = 1, 882 .ops = &clk_fixed_factor_ops, 883 }, 884 }; 885 886 static struct clk_fixed_factor gcc_qdss_tsctr_div4_clk_src = { 887 .mult = 1, 888 .div = 4, 889 .hw.init = &(struct clk_init_data) { 890 .name = "gcc_qdss_tsctr_div4_clk_src", 891 .parent_hws = (const struct clk_hw *[]) { 892 &gcc_qdss_tsctr_clk_src.clkr.hw }, 893 .num_parents = 1, 894 .ops = &clk_fixed_factor_ops, 895 }, 896 }; 897 898 static struct clk_fixed_factor gcc_qdss_tsctr_div8_clk_src = { 899 .mult = 1, 900 .div = 8, 901 .hw.init = &(struct clk_init_data) { 902 .name = "gcc_qdss_tsctr_div8_clk_src", 903 .parent_hws = (const struct clk_hw *[]) { 904 &gcc_qdss_tsctr_clk_src.clkr.hw }, 905 .num_parents = 1, 906 .ops = &clk_fixed_factor_ops, 907 }, 908 }; 909 910 static struct clk_fixed_factor gcc_qdss_tsctr_div16_clk_src = { 911 .mult = 1, 912 .div = 16, 913 .hw.init = &(struct clk_init_data) { 914 .name = "gcc_qdss_tsctr_div16_clk_src", 915 .parent_hws = (const struct clk_hw *[]) { 916 &gcc_qdss_tsctr_clk_src.clkr.hw }, 917 .num_parents = 1, 918 .ops = &clk_fixed_factor_ops, 919 }, 920 }; 921 922 static const struct freq_tbl ftbl_gcc_qpic_io_macro_clk_src[] = { 923 F(24000000, P_XO, 1, 0, 0), 924 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 925 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 926 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 927 { } 928 }; 929 930 static struct clk_rcg2 gcc_qpic_io_macro_clk_src = { 931 .cmd_rcgr = 0x32004, 932 .mnd_width = 0, 933 .hid_width = 5, 934 .parent_map = gcc_parent_map_8, 935 .freq_tbl = ftbl_gcc_qpic_io_macro_clk_src, 936 .clkr.hw.init = &(const struct clk_init_data) { 937 .name = "gcc_qpic_io_macro_clk_src", 938 .parent_data = gcc_parent_data_8, 939 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 940 .ops = &clk_rcg2_ops, 941 }, 942 }; 943 944 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 945 F(143713, P_XO, 1, 1, 167), 946 F(400000, P_XO, 1, 1, 60), 947 F(24000000, P_XO, 1, 0, 0), 948 F(48000000, P_GPLL2_OUT_MAIN, 12, 1, 2), 949 F(96000000, P_GPLL2_OUT_MAIN, 12, 0, 0), 950 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 951 F(192000000, P_GPLL2_OUT_MAIN, 6, 0, 0), 952 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 953 { } 954 }; 955 956 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 957 .cmd_rcgr = 0x33004, 958 .mnd_width = 8, 959 .hid_width = 5, 960 .parent_map = gcc_parent_map_9, 961 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 962 .clkr.hw.init = &(const struct clk_init_data) { 963 .name = "gcc_sdcc1_apps_clk_src", 964 .parent_data = gcc_parent_data_9, 965 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 966 .ops = &clk_rcg2_floor_ops, 967 }, 968 }; 969 970 static const struct freq_tbl ftbl_gcc_sleep_clk_src[] = { 971 F(32000, P_SLEEP_CLK, 1, 0, 0), 972 { } 973 }; 974 975 static struct clk_rcg2 gcc_sleep_clk_src = { 976 .cmd_rcgr = 0x3400c, 977 .mnd_width = 0, 978 .hid_width = 5, 979 .parent_map = gcc_parent_map_10, 980 .freq_tbl = ftbl_gcc_sleep_clk_src, 981 .clkr.hw.init = &(const struct clk_init_data) { 982 .name = "gcc_sleep_clk_src", 983 .parent_data = gcc_parent_data_10, 984 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 985 .ops = &clk_rcg2_ops, 986 }, 987 }; 988 989 static const struct freq_tbl ftbl_gcc_system_noc_bfdcd_clk_src[] = { 990 F(24000000, P_XO, 1, 0, 0), 991 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0), 992 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 993 F(266666667, P_GPLL4_OUT_MAIN, 4.5, 0, 0), 994 { } 995 }; 996 997 static struct clk_rcg2 gcc_system_noc_bfdcd_clk_src = { 998 .cmd_rcgr = 0x2e004, 999 .mnd_width = 0, 1000 .hid_width = 5, 1001 .parent_map = gcc_parent_map_11, 1002 .freq_tbl = ftbl_gcc_system_noc_bfdcd_clk_src, 1003 .clkr.hw.init = &(const struct clk_init_data) { 1004 .name = "gcc_system_noc_bfdcd_clk_src", 1005 .parent_data = gcc_parent_data_11, 1006 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1007 .ops = &clk_rcg2_ops, 1008 }, 1009 }; 1010 1011 static struct clk_fixed_factor gcc_system_noc_bfdcd_div2_clk_src = { 1012 .mult = 1, 1013 .div = 2, 1014 .hw.init = &(struct clk_init_data) { 1015 .name = "gcc_system_noc_bfdcd_div2_clk_src", 1016 .parent_hws = (const struct clk_hw *[]) { 1017 &gcc_system_noc_bfdcd_clk_src.clkr.hw }, 1018 .num_parents = 1, 1019 .ops = &clk_fixed_factor_ops, 1020 .flags = CLK_SET_RATE_PARENT, 1021 }, 1022 }; 1023 1024 static struct clk_rcg2 gcc_uniphy_sys_clk_src = { 1025 .cmd_rcgr = 0x16004, 1026 .mnd_width = 0, 1027 .hid_width = 5, 1028 .parent_map = gcc_parent_map_xo, 1029 .freq_tbl = ftbl_gcc_nss_ts_clk_src, 1030 .clkr.hw.init = &(const struct clk_init_data) { 1031 .name = "gcc_uniphy_sys_clk_src", 1032 .parent_data = &gcc_parent_data_xo, 1033 .num_parents = 1, 1034 .ops = &clk_rcg2_ops, 1035 }, 1036 }; 1037 1038 static struct clk_rcg2 gcc_usb0_aux_clk_src = { 1039 .cmd_rcgr = 0x2c018, 1040 .mnd_width = 16, 1041 .hid_width = 5, 1042 .parent_map = gcc_parent_map_12, 1043 .freq_tbl = ftbl_gcc_pcie_aux_clk_src, 1044 .clkr.hw.init = &(const struct clk_init_data) { 1045 .name = "gcc_usb0_aux_clk_src", 1046 .parent_data = gcc_parent_data_12, 1047 .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1048 .ops = &clk_rcg2_ops, 1049 }, 1050 }; 1051 1052 static const struct freq_tbl ftbl_gcc_usb0_lfps_clk_src[] = { 1053 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 1054 { } 1055 }; 1056 1057 static struct clk_rcg2 gcc_usb0_lfps_clk_src = { 1058 .cmd_rcgr = 0x2c07c, 1059 .mnd_width = 8, 1060 .hid_width = 5, 1061 .parent_map = gcc_parent_map_1, 1062 .freq_tbl = ftbl_gcc_usb0_lfps_clk_src, 1063 .clkr.hw.init = &(const struct clk_init_data) { 1064 .name = "gcc_usb0_lfps_clk_src", 1065 .parent_data = gcc_parent_data_1, 1066 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1067 .ops = &clk_rcg2_ops, 1068 }, 1069 }; 1070 1071 static struct clk_rcg2 gcc_usb0_master_clk_src = { 1072 .cmd_rcgr = 0x2c004, 1073 .mnd_width = 8, 1074 .hid_width = 5, 1075 .parent_map = gcc_parent_map_0, 1076 .freq_tbl = ftbl_gcc_gp1_clk_src, 1077 .clkr.hw.init = &(const struct clk_init_data) { 1078 .name = "gcc_usb0_master_clk_src", 1079 .parent_data = gcc_parent_data_0, 1080 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1081 .ops = &clk_rcg2_ops, 1082 }, 1083 }; 1084 1085 static const struct freq_tbl ftbl_gcc_usb0_mock_utmi_clk_src[] = { 1086 F(60000000, P_GPLL4_OUT_AUX, 10, 1, 2), 1087 { } 1088 }; 1089 1090 static struct clk_rcg2 gcc_usb0_mock_utmi_clk_src = { 1091 .cmd_rcgr = 0x2c02c, 1092 .mnd_width = 8, 1093 .hid_width = 5, 1094 .parent_map = gcc_parent_map_13, 1095 .freq_tbl = ftbl_gcc_usb0_mock_utmi_clk_src, 1096 .clkr.hw.init = &(const struct clk_init_data) { 1097 .name = "gcc_usb0_mock_utmi_clk_src", 1098 .parent_data = gcc_parent_data_13, 1099 .num_parents = ARRAY_SIZE(gcc_parent_data_13), 1100 .ops = &clk_rcg2_ops, 1101 }, 1102 }; 1103 1104 static struct clk_regmap_phy_mux gcc_usb0_pipe_clk_src = { 1105 .reg = 0x2c074, 1106 .clkr = { 1107 .hw.init = &(struct clk_init_data) { 1108 .name = "gcc_usb0_pipe_clk_src", 1109 .parent_data = &(const struct clk_parent_data) { 1110 .index = DT_USB_PCIE_WRAPPER_PIPE_CLK, 1111 }, 1112 .num_parents = 1, 1113 .ops = &clk_regmap_phy_mux_ops, 1114 }, 1115 }, 1116 }; 1117 1118 static struct clk_rcg2 gcc_wcss_ahb_clk_src = { 1119 .cmd_rcgr = 0x25030, 1120 .mnd_width = 0, 1121 .hid_width = 5, 1122 .parent_map = gcc_parent_map_1, 1123 .freq_tbl = ftbl_gcc_lpass_sway_clk_src, 1124 .clkr.hw.init = &(const struct clk_init_data) { 1125 .name = "gcc_wcss_ahb_clk_src", 1126 .parent_data = gcc_parent_data_1, 1127 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1128 .ops = &clk_rcg2_ops, 1129 }, 1130 }; 1131 1132 static struct clk_rcg2 gcc_xo_clk_src = { 1133 .cmd_rcgr = 0x34004, 1134 .mnd_width = 0, 1135 .hid_width = 5, 1136 .parent_map = gcc_parent_map_xo, 1137 .freq_tbl = ftbl_gcc_nss_ts_clk_src, 1138 .clkr.hw.init = &(const struct clk_init_data) { 1139 .name = "gcc_xo_clk_src", 1140 .parent_data = &gcc_parent_data_xo, 1141 .num_parents = 1, 1142 .ops = &clk_rcg2_ops, 1143 }, 1144 }; 1145 1146 static struct clk_fixed_factor gcc_xo_div4_clk_src = { 1147 .mult = 1, 1148 .div = 4, 1149 .hw.init = &(struct clk_init_data) { 1150 .name = "gcc_xo_div4_clk_src", 1151 .parent_hws = (const struct clk_hw *[]) { 1152 &gcc_xo_clk_src.clkr.hw }, 1153 .num_parents = 1, 1154 .ops = &clk_fixed_factor_ops, 1155 .flags = CLK_SET_RATE_PARENT, 1156 }, 1157 }; 1158 1159 static struct clk_regmap_div gcc_qdss_dap_div_clk_src = { 1160 .reg = 0x2d028, 1161 .shift = 0, 1162 .width = 4, 1163 .clkr.hw.init = &(const struct clk_init_data) { 1164 .name = "gcc_qdss_dap_div_clk_src", 1165 .parent_hws = (const struct clk_hw*[]) { 1166 &gcc_qdss_tsctr_clk_src.clkr.hw, 1167 }, 1168 .num_parents = 1, 1169 .ops = &clk_regmap_div_ro_ops, 1170 }, 1171 }; 1172 1173 static struct clk_regmap_div gcc_usb0_mock_utmi_div_clk_src = { 1174 .reg = 0x2c040, 1175 .shift = 0, 1176 .width = 2, 1177 .clkr.hw.init = &(const struct clk_init_data) { 1178 .name = "gcc_usb0_mock_utmi_div_clk_src", 1179 .parent_hws = (const struct clk_hw*[]) { 1180 &gcc_usb0_mock_utmi_clk_src.clkr.hw, 1181 }, 1182 .num_parents = 1, 1183 .flags = CLK_SET_RATE_PARENT, 1184 .ops = &clk_regmap_div_ro_ops, 1185 }, 1186 }; 1187 1188 static struct clk_branch gcc_adss_pwm_clk = { 1189 .halt_reg = 0x1c00c, 1190 .halt_check = BRANCH_HALT, 1191 .clkr = { 1192 .enable_reg = 0x1c00c, 1193 .enable_mask = BIT(0), 1194 .hw.init = &(const struct clk_init_data) { 1195 .name = "gcc_adss_pwm_clk", 1196 .parent_hws = (const struct clk_hw*[]) { 1197 &gcc_adss_pwm_clk_src.clkr.hw, 1198 }, 1199 .num_parents = 1, 1200 .flags = CLK_SET_RATE_PARENT, 1201 .ops = &clk_branch2_ops, 1202 }, 1203 }, 1204 }; 1205 1206 static struct clk_branch gcc_ahb_clk = { 1207 .halt_reg = 0x34024, 1208 .halt_check = BRANCH_HALT_VOTED, 1209 .clkr = { 1210 .enable_reg = 0x34024, 1211 .enable_mask = BIT(0), 1212 .hw.init = &(const struct clk_init_data) { 1213 .name = "gcc_ahb_clk", 1214 .parent_hws = (const struct clk_hw*[]) { 1215 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1216 }, 1217 .num_parents = 1, 1218 .flags = CLK_SET_RATE_PARENT, 1219 .ops = &clk_branch2_ops, 1220 }, 1221 }, 1222 }; 1223 1224 static struct clk_branch gcc_blsp1_ahb_clk = { 1225 .halt_reg = 0x1008, 1226 .halt_check = BRANCH_HALT_VOTED, 1227 .clkr = { 1228 .enable_reg = 0xb004, 1229 .enable_mask = BIT(4), 1230 .hw.init = &(const struct clk_init_data) { 1231 .name = "gcc_blsp1_ahb_clk", 1232 .parent_hws = (const struct clk_hw*[]) { 1233 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1234 }, 1235 .num_parents = 1, 1236 .flags = CLK_SET_RATE_PARENT, 1237 .ops = &clk_branch2_ops, 1238 }, 1239 }, 1240 }; 1241 1242 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1243 .halt_reg = 0x2024, 1244 .halt_check = BRANCH_HALT, 1245 .clkr = { 1246 .enable_reg = 0x2024, 1247 .enable_mask = BIT(0), 1248 .hw.init = &(const struct clk_init_data) { 1249 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1250 .parent_hws = (const struct clk_hw*[]) { 1251 &gcc_blsp1_qup1_spi_apps_clk_src.clkr.hw, 1252 }, 1253 .num_parents = 1, 1254 .flags = CLK_SET_RATE_PARENT, 1255 .ops = &clk_branch2_ops, 1256 }, 1257 }, 1258 }; 1259 1260 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1261 .halt_reg = 0x2020, 1262 .halt_check = BRANCH_HALT, 1263 .clkr = { 1264 .enable_reg = 0x2020, 1265 .enable_mask = BIT(0), 1266 .hw.init = &(const struct clk_init_data) { 1267 .name = "gcc_blsp1_qup1_spi_apps_clk", 1268 .parent_hws = (const struct clk_hw*[]) { 1269 &gcc_blsp1_qup1_spi_apps_clk_src.clkr.hw, 1270 }, 1271 .num_parents = 1, 1272 .flags = CLK_SET_RATE_PARENT, 1273 .ops = &clk_branch2_ops, 1274 }, 1275 }, 1276 }; 1277 1278 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1279 .halt_reg = 0x3024, 1280 .halt_check = BRANCH_HALT, 1281 .clkr = { 1282 .enable_reg = 0x3024, 1283 .enable_mask = BIT(0), 1284 .hw.init = &(const struct clk_init_data) { 1285 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1286 .parent_hws = (const struct clk_hw*[]) { 1287 &gcc_blsp1_qup2_spi_apps_clk_src.clkr.hw, 1288 }, 1289 .num_parents = 1, 1290 .flags = CLK_SET_RATE_PARENT, 1291 .ops = &clk_branch2_ops, 1292 }, 1293 }, 1294 }; 1295 1296 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1297 .halt_reg = 0x3020, 1298 .halt_check = BRANCH_HALT, 1299 .clkr = { 1300 .enable_reg = 0x3020, 1301 .enable_mask = BIT(0), 1302 .hw.init = &(const struct clk_init_data) { 1303 .name = "gcc_blsp1_qup2_spi_apps_clk", 1304 .parent_hws = (const struct clk_hw*[]) { 1305 &gcc_blsp1_qup2_spi_apps_clk_src.clkr.hw, 1306 }, 1307 .num_parents = 1, 1308 .flags = CLK_SET_RATE_PARENT, 1309 .ops = &clk_branch2_ops, 1310 }, 1311 }, 1312 }; 1313 1314 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1315 .halt_reg = 0x4024, 1316 .halt_check = BRANCH_HALT, 1317 .clkr = { 1318 .enable_reg = 0x4024, 1319 .enable_mask = BIT(0), 1320 .hw.init = &(const struct clk_init_data) { 1321 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1322 .parent_hws = (const struct clk_hw*[]) { 1323 &gcc_blsp1_qup3_spi_apps_clk_src.clkr.hw, 1324 }, 1325 .num_parents = 1, 1326 .flags = CLK_SET_RATE_PARENT, 1327 .ops = &clk_branch2_ops, 1328 }, 1329 }, 1330 }; 1331 1332 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1333 .halt_reg = 0x4020, 1334 .halt_check = BRANCH_HALT, 1335 .clkr = { 1336 .enable_reg = 0x4020, 1337 .enable_mask = BIT(0), 1338 .hw.init = &(const struct clk_init_data) { 1339 .name = "gcc_blsp1_qup3_spi_apps_clk", 1340 .parent_hws = (const struct clk_hw*[]) { 1341 &gcc_blsp1_qup3_spi_apps_clk_src.clkr.hw, 1342 }, 1343 .num_parents = 1, 1344 .flags = CLK_SET_RATE_PARENT, 1345 .ops = &clk_branch2_ops, 1346 }, 1347 }, 1348 }; 1349 1350 static struct clk_branch gcc_blsp1_sleep_clk = { 1351 .halt_reg = 0x1010, 1352 .halt_check = BRANCH_HALT_VOTED, 1353 .clkr = { 1354 .enable_reg = 0xb004, 1355 .enable_mask = BIT(5), 1356 .hw.init = &(const struct clk_init_data) { 1357 .name = "gcc_blsp1_sleep_clk", 1358 .parent_hws = (const struct clk_hw*[]) { 1359 &gcc_sleep_clk_src.clkr.hw, 1360 }, 1361 .num_parents = 1, 1362 .flags = CLK_SET_RATE_PARENT, 1363 .ops = &clk_branch2_ops, 1364 }, 1365 }, 1366 }; 1367 1368 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1369 .halt_reg = 0x2040, 1370 .halt_check = BRANCH_HALT, 1371 .clkr = { 1372 .enable_reg = 0x2040, 1373 .enable_mask = BIT(0), 1374 .hw.init = &(const struct clk_init_data) { 1375 .name = "gcc_blsp1_uart1_apps_clk", 1376 .parent_hws = (const struct clk_hw*[]) { 1377 &gcc_blsp1_uart1_apps_clk_src.clkr.hw, 1378 }, 1379 .num_parents = 1, 1380 .flags = CLK_SET_RATE_PARENT, 1381 .ops = &clk_branch2_ops, 1382 }, 1383 }, 1384 }; 1385 1386 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1387 .halt_reg = 0x3040, 1388 .halt_check = BRANCH_HALT, 1389 .clkr = { 1390 .enable_reg = 0x3040, 1391 .enable_mask = BIT(0), 1392 .hw.init = &(const struct clk_init_data) { 1393 .name = "gcc_blsp1_uart2_apps_clk", 1394 .parent_hws = (const struct clk_hw*[]) { 1395 &gcc_blsp1_uart2_apps_clk_src.clkr.hw, 1396 }, 1397 .num_parents = 1, 1398 .flags = CLK_SET_RATE_PARENT, 1399 .ops = &clk_branch2_ops, 1400 }, 1401 }, 1402 }; 1403 1404 static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1405 .halt_reg = 0x4054, 1406 .halt_check = BRANCH_HALT, 1407 .clkr = { 1408 .enable_reg = 0x4054, 1409 .enable_mask = BIT(0), 1410 .hw.init = &(const struct clk_init_data) { 1411 .name = "gcc_blsp1_uart3_apps_clk", 1412 .parent_hws = (const struct clk_hw*[]) { 1413 &gcc_blsp1_uart3_apps_clk_src.clkr.hw, 1414 }, 1415 .num_parents = 1, 1416 .flags = CLK_SET_RATE_PARENT, 1417 .ops = &clk_branch2_ops, 1418 }, 1419 }, 1420 }; 1421 1422 static struct clk_branch gcc_ce_ahb_clk = { 1423 .halt_reg = 0x25074, 1424 .halt_check = BRANCH_HALT, 1425 .clkr = { 1426 .enable_reg = 0x25074, 1427 .enable_mask = BIT(0), 1428 .hw.init = &(const struct clk_init_data) { 1429 .name = "gcc_ce_ahb_clk", 1430 .parent_hws = (const struct clk_hw*[]) { 1431 &gcc_system_noc_bfdcd_div2_clk_src.hw, 1432 }, 1433 .num_parents = 1, 1434 .flags = CLK_SET_RATE_PARENT, 1435 .ops = &clk_branch2_ops, 1436 }, 1437 }, 1438 }; 1439 1440 static struct clk_branch gcc_ce_axi_clk = { 1441 .halt_reg = 0x25068, 1442 .halt_check = BRANCH_HALT, 1443 .clkr = { 1444 .enable_reg = 0x25068, 1445 .enable_mask = BIT(0), 1446 .hw.init = &(const struct clk_init_data) { 1447 .name = "gcc_ce_axi_clk", 1448 .parent_hws = (const struct clk_hw*[]) { 1449 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 1450 }, 1451 .num_parents = 1, 1452 .flags = CLK_SET_RATE_PARENT, 1453 .ops = &clk_branch2_ops, 1454 }, 1455 }, 1456 }; 1457 1458 static struct clk_branch gcc_ce_pcnoc_ahb_clk = { 1459 .halt_reg = 0x25070, 1460 .halt_check = BRANCH_HALT, 1461 .clkr = { 1462 .enable_reg = 0x25070, 1463 .enable_mask = BIT(0), 1464 .hw.init = &(const struct clk_init_data) { 1465 .name = "gcc_ce_pcnoc_ahb_clk", 1466 .parent_hws = (const struct clk_hw*[]) { 1467 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1468 }, 1469 .num_parents = 1, 1470 .flags = CLK_SET_RATE_PARENT, 1471 .ops = &clk_branch2_ops, 1472 }, 1473 }, 1474 }; 1475 1476 static struct clk_branch gcc_cmn_12gpll_ahb_clk = { 1477 .halt_reg = 0x3a004, 1478 .halt_check = BRANCH_HALT, 1479 .clkr = { 1480 .enable_reg = 0x3a004, 1481 .enable_mask = BIT(0), 1482 .hw.init = &(const struct clk_init_data) { 1483 .name = "gcc_cmn_12gpll_ahb_clk", 1484 .parent_hws = (const struct clk_hw*[]) { 1485 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1486 }, 1487 .num_parents = 1, 1488 .flags = CLK_SET_RATE_PARENT, 1489 .ops = &clk_branch2_ops, 1490 }, 1491 }, 1492 }; 1493 1494 static struct clk_branch gcc_cmn_12gpll_apu_clk = { 1495 .halt_reg = 0x3a00c, 1496 .halt_check = BRANCH_HALT, 1497 .clkr = { 1498 .enable_reg = 0x3a00c, 1499 .enable_mask = BIT(0), 1500 .hw.init = &(const struct clk_init_data) { 1501 .name = "gcc_cmn_12gpll_apu_clk", 1502 .parent_hws = (const struct clk_hw*[]) { 1503 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1504 }, 1505 .num_parents = 1, 1506 .flags = CLK_SET_RATE_PARENT, 1507 .ops = &clk_branch2_ops, 1508 }, 1509 }, 1510 }; 1511 1512 static struct clk_branch gcc_cmn_12gpll_sys_clk = { 1513 .halt_reg = 0x3a008, 1514 .halt_check = BRANCH_HALT, 1515 .clkr = { 1516 .enable_reg = 0x3a008, 1517 .enable_mask = BIT(0), 1518 .hw.init = &(const struct clk_init_data) { 1519 .name = "gcc_cmn_12gpll_sys_clk", 1520 .parent_hws = (const struct clk_hw*[]) { 1521 &gcc_uniphy_sys_clk_src.clkr.hw, 1522 }, 1523 .num_parents = 1, 1524 .flags = CLK_SET_RATE_PARENT, 1525 .ops = &clk_branch2_ops, 1526 }, 1527 }, 1528 }; 1529 1530 static struct clk_branch gcc_gp1_clk = { 1531 .halt_reg = 0x8018, 1532 .halt_check = BRANCH_HALT, 1533 .clkr = { 1534 .enable_reg = 0x8018, 1535 .enable_mask = BIT(0), 1536 .hw.init = &(const struct clk_init_data) { 1537 .name = "gcc_gp1_clk", 1538 .parent_hws = (const struct clk_hw*[]) { 1539 &gcc_gp1_clk_src.clkr.hw, 1540 }, 1541 .num_parents = 1, 1542 .flags = CLK_SET_RATE_PARENT, 1543 .ops = &clk_branch2_ops, 1544 }, 1545 }, 1546 }; 1547 1548 static struct clk_branch gcc_gp2_clk = { 1549 .halt_reg = 0x9018, 1550 .halt_check = BRANCH_HALT, 1551 .clkr = { 1552 .enable_reg = 0x9018, 1553 .enable_mask = BIT(0), 1554 .hw.init = &(const struct clk_init_data) { 1555 .name = "gcc_gp2_clk", 1556 .parent_hws = (const struct clk_hw*[]) { 1557 &gcc_gp2_clk_src.clkr.hw, 1558 }, 1559 .num_parents = 1, 1560 .flags = CLK_SET_RATE_PARENT, 1561 .ops = &clk_branch2_ops, 1562 }, 1563 }, 1564 }; 1565 1566 static struct clk_branch gcc_lpass_core_axim_clk = { 1567 .halt_reg = 0x27018, 1568 .halt_check = BRANCH_HALT_VOTED, 1569 .clkr = { 1570 .enable_reg = 0x27018, 1571 .enable_mask = BIT(0), 1572 .hw.init = &(const struct clk_init_data) { 1573 .name = "gcc_lpass_core_axim_clk", 1574 .parent_hws = (const struct clk_hw*[]) { 1575 &gcc_lpass_sway_clk_src.clkr.hw, 1576 }, 1577 .num_parents = 1, 1578 .flags = CLK_SET_RATE_PARENT, 1579 .ops = &clk_branch2_ops, 1580 }, 1581 }, 1582 }; 1583 1584 static struct clk_branch gcc_lpass_sway_clk = { 1585 .halt_reg = 0x27014, 1586 .halt_check = BRANCH_HALT, 1587 .clkr = { 1588 .enable_reg = 0x27014, 1589 .enable_mask = BIT(0), 1590 .hw.init = &(const struct clk_init_data) { 1591 .name = "gcc_lpass_sway_clk", 1592 .parent_hws = (const struct clk_hw*[]) { 1593 &gcc_lpass_sway_clk_src.clkr.hw, 1594 }, 1595 .num_parents = 1, 1596 .flags = CLK_SET_RATE_PARENT, 1597 .ops = &clk_branch2_ops, 1598 }, 1599 }, 1600 }; 1601 1602 static struct clk_branch gcc_mdio_ahb_clk = { 1603 .halt_reg = 0x12004, 1604 .halt_check = BRANCH_HALT, 1605 .clkr = { 1606 .enable_reg = 0x12004, 1607 .enable_mask = BIT(0), 1608 .hw.init = &(const struct clk_init_data) { 1609 .name = "gcc_mdio_ahb_clk", 1610 .parent_hws = (const struct clk_hw*[]) { 1611 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1612 }, 1613 .num_parents = 1, 1614 .flags = CLK_SET_RATE_PARENT, 1615 .ops = &clk_branch2_ops, 1616 }, 1617 }, 1618 }; 1619 1620 static struct clk_branch gcc_mdio_slave_ahb_clk = { 1621 .halt_reg = 0x1200c, 1622 .halt_check = BRANCH_HALT, 1623 .clkr = { 1624 .enable_reg = 0x1200c, 1625 .enable_mask = BIT(0), 1626 .hw.init = &(const struct clk_init_data) { 1627 .name = "gcc_mdio_slave_ahb_clk", 1628 .parent_hws = (const struct clk_hw*[]) { 1629 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1630 }, 1631 .num_parents = 1, 1632 .flags = CLK_SET_RATE_PARENT, 1633 .ops = &clk_branch2_ops, 1634 }, 1635 }, 1636 }; 1637 1638 static struct clk_branch gcc_mem_noc_q6_axi_clk = { 1639 .halt_reg = 0x19010, 1640 .halt_check = BRANCH_HALT, 1641 .clkr = { 1642 .enable_reg = 0x19010, 1643 .enable_mask = BIT(0), 1644 .hw.init = &(const struct clk_init_data) { 1645 .name = "gcc_mem_noc_q6_axi_clk", 1646 .parent_hws = (const struct clk_hw*[]) { 1647 &gcc_q6_axim_clk_src.clkr.hw, 1648 }, 1649 .num_parents = 1, 1650 .flags = CLK_SET_RATE_PARENT, 1651 .ops = &clk_branch2_ops, 1652 }, 1653 }, 1654 }; 1655 1656 static struct clk_branch gcc_mem_noc_ts_clk = { 1657 .halt_reg = 0x19028, 1658 .halt_check = BRANCH_HALT_VOTED, 1659 .clkr = { 1660 .enable_reg = 0x19028, 1661 .enable_mask = BIT(0), 1662 .hw.init = &(const struct clk_init_data) { 1663 .name = "gcc_mem_noc_ts_clk", 1664 .parent_hws = (const struct clk_hw*[]) { 1665 &gcc_qdss_tsctr_div8_clk_src.hw, 1666 }, 1667 .num_parents = 1, 1668 .flags = CLK_SET_RATE_PARENT, 1669 .ops = &clk_branch2_ops, 1670 }, 1671 }, 1672 }; 1673 1674 static struct clk_branch gcc_nss_ts_clk = { 1675 .halt_reg = 0x17018, 1676 .halt_check = BRANCH_HALT_VOTED, 1677 .clkr = { 1678 .enable_reg = 0x17018, 1679 .enable_mask = BIT(0), 1680 .hw.init = &(const struct clk_init_data) { 1681 .name = "gcc_nss_ts_clk", 1682 .parent_hws = (const struct clk_hw*[]) { 1683 &gcc_nss_ts_clk_src.clkr.hw, 1684 }, 1685 .num_parents = 1, 1686 .flags = CLK_SET_RATE_PARENT, 1687 .ops = &clk_branch2_ops, 1688 }, 1689 }, 1690 }; 1691 1692 static struct clk_branch gcc_nsscc_clk = { 1693 .halt_reg = 0x17034, 1694 .halt_check = BRANCH_HALT, 1695 .clkr = { 1696 .enable_reg = 0x17034, 1697 .enable_mask = BIT(0), 1698 .hw.init = &(const struct clk_init_data) { 1699 .name = "gcc_nsscc_clk", 1700 .parent_hws = (const struct clk_hw*[]) { 1701 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1702 }, 1703 .num_parents = 1, 1704 .flags = CLK_SET_RATE_PARENT, 1705 .ops = &clk_branch2_ops, 1706 }, 1707 }, 1708 }; 1709 1710 static struct clk_branch gcc_nsscfg_clk = { 1711 .halt_reg = 0x1702c, 1712 .halt_check = BRANCH_HALT, 1713 .clkr = { 1714 .enable_reg = 0x1702c, 1715 .enable_mask = BIT(0), 1716 .hw.init = &(const struct clk_init_data) { 1717 .name = "gcc_nsscfg_clk", 1718 .parent_hws = (const struct clk_hw*[]) { 1719 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1720 }, 1721 .num_parents = 1, 1722 .flags = CLK_SET_RATE_PARENT, 1723 .ops = &clk_branch2_ops, 1724 }, 1725 }, 1726 }; 1727 1728 static struct clk_branch gcc_nssnoc_atb_clk = { 1729 .halt_reg = 0x17014, 1730 .halt_check = BRANCH_HALT, 1731 .clkr = { 1732 .enable_reg = 0x17014, 1733 .enable_mask = BIT(0), 1734 .hw.init = &(const struct clk_init_data) { 1735 .name = "gcc_nssnoc_atb_clk", 1736 .parent_hws = (const struct clk_hw*[]) { 1737 &gcc_qdss_at_clk_src.clkr.hw, 1738 }, 1739 .num_parents = 1, 1740 .flags = CLK_SET_RATE_PARENT, 1741 .ops = &clk_branch2_ops, 1742 }, 1743 }, 1744 }; 1745 1746 static struct clk_branch gcc_nssnoc_nsscc_clk = { 1747 .halt_reg = 0x17030, 1748 .halt_check = BRANCH_HALT, 1749 .clkr = { 1750 .enable_reg = 0x17030, 1751 .enable_mask = BIT(0), 1752 .hw.init = &(const struct clk_init_data) { 1753 .name = "gcc_nssnoc_nsscc_clk", 1754 .parent_hws = (const struct clk_hw*[]) { 1755 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1756 }, 1757 .num_parents = 1, 1758 .flags = CLK_SET_RATE_PARENT, 1759 .ops = &clk_branch2_ops, 1760 }, 1761 }, 1762 }; 1763 1764 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = { 1765 .halt_reg = 0x1701c, 1766 .halt_check = BRANCH_HALT, 1767 .clkr = { 1768 .enable_reg = 0x1701c, 1769 .enable_mask = BIT(0), 1770 .hw.init = &(const struct clk_init_data) { 1771 .name = "gcc_nssnoc_qosgen_ref_clk", 1772 .parent_hws = (const struct clk_hw*[]) { 1773 &gcc_xo_div4_clk_src.hw, 1774 }, 1775 .num_parents = 1, 1776 .flags = CLK_SET_RATE_PARENT, 1777 .ops = &clk_branch2_ops, 1778 }, 1779 }, 1780 }; 1781 1782 static struct clk_branch gcc_nssnoc_snoc_1_clk = { 1783 .halt_reg = 0x1707c, 1784 .halt_check = BRANCH_HALT, 1785 .clkr = { 1786 .enable_reg = 0x1707c, 1787 .enable_mask = BIT(0), 1788 .hw.init = &(const struct clk_init_data) { 1789 .name = "gcc_nssnoc_snoc_1_clk", 1790 .parent_hws = (const struct clk_hw*[]) { 1791 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 1792 }, 1793 .num_parents = 1, 1794 .flags = CLK_SET_RATE_PARENT, 1795 .ops = &clk_branch2_ops, 1796 }, 1797 }, 1798 }; 1799 1800 static struct clk_branch gcc_nssnoc_snoc_clk = { 1801 .halt_reg = 0x17028, 1802 .halt_check = BRANCH_HALT, 1803 .clkr = { 1804 .enable_reg = 0x17028, 1805 .enable_mask = BIT(0), 1806 .hw.init = &(const struct clk_init_data) { 1807 .name = "gcc_nssnoc_snoc_clk", 1808 .parent_hws = (const struct clk_hw*[]) { 1809 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 1810 }, 1811 .num_parents = 1, 1812 .flags = CLK_SET_RATE_PARENT, 1813 .ops = &clk_branch2_ops, 1814 }, 1815 }, 1816 }; 1817 1818 static struct clk_branch gcc_nssnoc_timeout_ref_clk = { 1819 .halt_reg = 0x17020, 1820 .halt_check = BRANCH_HALT, 1821 .clkr = { 1822 .enable_reg = 0x17020, 1823 .enable_mask = BIT(0), 1824 .hw.init = &(const struct clk_init_data) { 1825 .name = "gcc_nssnoc_timeout_ref_clk", 1826 .parent_hws = (const struct clk_hw*[]) { 1827 &gcc_xo_div4_clk_src.hw, 1828 }, 1829 .num_parents = 1, 1830 .flags = CLK_SET_RATE_PARENT, 1831 .ops = &clk_branch2_ops, 1832 }, 1833 }, 1834 }; 1835 1836 static struct clk_branch gcc_nssnoc_xo_dcd_clk = { 1837 .halt_reg = 0x17074, 1838 .halt_check = BRANCH_HALT, 1839 .clkr = { 1840 .enable_reg = 0x17074, 1841 .enable_mask = BIT(0), 1842 .hw.init = &(const struct clk_init_data) { 1843 .name = "gcc_nssnoc_xo_dcd_clk", 1844 .parent_hws = (const struct clk_hw*[]) { 1845 &gcc_xo_clk_src.clkr.hw, 1846 }, 1847 .num_parents = 1, 1848 .flags = CLK_SET_RATE_PARENT, 1849 .ops = &clk_branch2_ops, 1850 }, 1851 }, 1852 }; 1853 1854 static struct clk_branch gcc_pcie3x1_0_ahb_clk = { 1855 .halt_reg = 0x29030, 1856 .halt_check = BRANCH_HALT, 1857 .clkr = { 1858 .enable_reg = 0x29030, 1859 .enable_mask = BIT(0), 1860 .hw.init = &(const struct clk_init_data) { 1861 .name = "gcc_pcie3x1_0_ahb_clk", 1862 .parent_hws = (const struct clk_hw*[]) { 1863 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1864 }, 1865 .num_parents = 1, 1866 .flags = CLK_SET_RATE_PARENT, 1867 .ops = &clk_branch2_ops, 1868 }, 1869 }, 1870 }; 1871 1872 static struct clk_branch gcc_pcie3x1_0_aux_clk = { 1873 .halt_reg = 0x29070, 1874 .halt_check = BRANCH_HALT, 1875 .clkr = { 1876 .enable_reg = 0x29070, 1877 .enable_mask = BIT(0), 1878 .hw.init = &(const struct clk_init_data) { 1879 .name = "gcc_pcie3x1_0_aux_clk", 1880 .parent_hws = (const struct clk_hw*[]) { 1881 &gcc_pcie_aux_clk_src.clkr.hw, 1882 }, 1883 .num_parents = 1, 1884 .flags = CLK_SET_RATE_PARENT, 1885 .ops = &clk_branch2_ops, 1886 }, 1887 }, 1888 }; 1889 1890 static struct clk_branch gcc_pcie3x1_0_axi_m_clk = { 1891 .halt_reg = 0x29038, 1892 .halt_check = BRANCH_HALT, 1893 .clkr = { 1894 .enable_reg = 0x29038, 1895 .enable_mask = BIT(0), 1896 .hw.init = &(const struct clk_init_data) { 1897 .name = "gcc_pcie3x1_0_axi_m_clk", 1898 .parent_hws = (const struct clk_hw*[]) { 1899 &gcc_pcie3x1_0_axi_clk_src.clkr.hw, 1900 }, 1901 .num_parents = 1, 1902 .flags = CLK_SET_RATE_PARENT, 1903 .ops = &clk_branch2_ops, 1904 }, 1905 }, 1906 }; 1907 1908 static struct clk_branch gcc_pcie3x1_0_axi_s_bridge_clk = { 1909 .halt_reg = 0x29048, 1910 .halt_check = BRANCH_HALT, 1911 .clkr = { 1912 .enable_reg = 0x29048, 1913 .enable_mask = BIT(0), 1914 .hw.init = &(const struct clk_init_data) { 1915 .name = "gcc_pcie3x1_0_axi_s_bridge_clk", 1916 .parent_hws = (const struct clk_hw*[]) { 1917 &gcc_pcie3x1_0_axi_clk_src.clkr.hw, 1918 }, 1919 .num_parents = 1, 1920 .flags = CLK_SET_RATE_PARENT, 1921 .ops = &clk_branch2_ops, 1922 }, 1923 }, 1924 }; 1925 1926 static struct clk_branch gcc_pcie3x1_0_axi_s_clk = { 1927 .halt_reg = 0x29040, 1928 .halt_check = BRANCH_HALT, 1929 .clkr = { 1930 .enable_reg = 0x29040, 1931 .enable_mask = BIT(0), 1932 .hw.init = &(const struct clk_init_data) { 1933 .name = "gcc_pcie3x1_0_axi_s_clk", 1934 .parent_hws = (const struct clk_hw*[]) { 1935 &gcc_pcie3x1_0_axi_clk_src.clkr.hw, 1936 }, 1937 .num_parents = 1, 1938 .flags = CLK_SET_RATE_PARENT, 1939 .ops = &clk_branch2_ops, 1940 }, 1941 }, 1942 }; 1943 1944 static struct clk_branch gcc_pcie3x1_0_pipe_clk = { 1945 .halt_reg = 0x29068, 1946 .halt_check = BRANCH_HALT_DELAY, 1947 .clkr = { 1948 .enable_reg = 0x29068, 1949 .enable_mask = BIT(0), 1950 .hw.init = &(const struct clk_init_data) { 1951 .name = "gcc_pcie3x1_0_pipe_clk", 1952 .parent_hws = (const struct clk_hw*[]) { 1953 &gcc_pcie3x1_0_pipe_clk_src.clkr.hw, 1954 }, 1955 .num_parents = 1, 1956 .flags = CLK_SET_RATE_PARENT, 1957 .ops = &clk_branch2_ops, 1958 }, 1959 }, 1960 }; 1961 1962 static struct clk_branch gcc_pcie3x1_1_ahb_clk = { 1963 .halt_reg = 0x2a00c, 1964 .halt_check = BRANCH_HALT, 1965 .clkr = { 1966 .enable_reg = 0x2a00c, 1967 .enable_mask = BIT(0), 1968 .hw.init = &(const struct clk_init_data) { 1969 .name = "gcc_pcie3x1_1_ahb_clk", 1970 .parent_hws = (const struct clk_hw*[]) { 1971 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 1972 }, 1973 .num_parents = 1, 1974 .flags = CLK_SET_RATE_PARENT, 1975 .ops = &clk_branch2_ops, 1976 }, 1977 }, 1978 }; 1979 1980 static struct clk_branch gcc_pcie3x1_1_aux_clk = { 1981 .halt_reg = 0x2a070, 1982 .halt_check = BRANCH_HALT, 1983 .clkr = { 1984 .enable_reg = 0x2a070, 1985 .enable_mask = BIT(0), 1986 .hw.init = &(const struct clk_init_data) { 1987 .name = "gcc_pcie3x1_1_aux_clk", 1988 .parent_hws = (const struct clk_hw*[]) { 1989 &gcc_pcie_aux_clk_src.clkr.hw, 1990 }, 1991 .num_parents = 1, 1992 .flags = CLK_SET_RATE_PARENT, 1993 .ops = &clk_branch2_ops, 1994 }, 1995 }, 1996 }; 1997 1998 static struct clk_branch gcc_pcie3x1_1_axi_m_clk = { 1999 .halt_reg = 0x2a014, 2000 .halt_check = BRANCH_HALT, 2001 .clkr = { 2002 .enable_reg = 0x2a014, 2003 .enable_mask = BIT(0), 2004 .hw.init = &(const struct clk_init_data) { 2005 .name = "gcc_pcie3x1_1_axi_m_clk", 2006 .parent_hws = (const struct clk_hw*[]) { 2007 &gcc_pcie3x1_1_axi_clk_src.clkr.hw, 2008 }, 2009 .num_parents = 1, 2010 .flags = CLK_SET_RATE_PARENT, 2011 .ops = &clk_branch2_ops, 2012 }, 2013 }, 2014 }; 2015 2016 static struct clk_branch gcc_pcie3x1_1_axi_s_bridge_clk = { 2017 .halt_reg = 0x2a024, 2018 .halt_check = BRANCH_HALT, 2019 .clkr = { 2020 .enable_reg = 0x2a024, 2021 .enable_mask = BIT(0), 2022 .hw.init = &(const struct clk_init_data) { 2023 .name = "gcc_pcie3x1_1_axi_s_bridge_clk", 2024 .parent_hws = (const struct clk_hw*[]) { 2025 &gcc_pcie3x1_1_axi_clk_src.clkr.hw, 2026 }, 2027 .num_parents = 1, 2028 .flags = CLK_SET_RATE_PARENT, 2029 .ops = &clk_branch2_ops, 2030 }, 2031 }, 2032 }; 2033 2034 static struct clk_branch gcc_pcie3x1_1_axi_s_clk = { 2035 .halt_reg = 0x2a01c, 2036 .halt_check = BRANCH_HALT, 2037 .clkr = { 2038 .enable_reg = 0x2a01c, 2039 .enable_mask = BIT(0), 2040 .hw.init = &(const struct clk_init_data) { 2041 .name = "gcc_pcie3x1_1_axi_s_clk", 2042 .parent_hws = (const struct clk_hw*[]) { 2043 &gcc_pcie3x1_1_axi_clk_src.clkr.hw, 2044 }, 2045 .num_parents = 1, 2046 .flags = CLK_SET_RATE_PARENT, 2047 .ops = &clk_branch2_ops, 2048 }, 2049 }, 2050 }; 2051 2052 static struct clk_branch gcc_pcie3x1_1_pipe_clk = { 2053 .halt_reg = 0x2a068, 2054 .halt_check = BRANCH_HALT_DELAY, 2055 .clkr = { 2056 .enable_reg = 0x2a068, 2057 .enable_mask = BIT(0), 2058 .hw.init = &(const struct clk_init_data) { 2059 .name = "gcc_pcie3x1_1_pipe_clk", 2060 .parent_hws = (const struct clk_hw*[]) { 2061 &gcc_pcie3x1_1_pipe_clk_src.clkr.hw, 2062 }, 2063 .num_parents = 1, 2064 .flags = CLK_SET_RATE_PARENT, 2065 .ops = &clk_branch2_ops, 2066 }, 2067 }, 2068 }; 2069 2070 static struct clk_branch gcc_pcie3x1_phy_ahb_clk = { 2071 .halt_reg = 0x29078, 2072 .halt_check = BRANCH_HALT, 2073 .clkr = { 2074 .enable_reg = 0x29078, 2075 .enable_mask = BIT(0), 2076 .hw.init = &(const struct clk_init_data) { 2077 .name = "gcc_pcie3x1_phy_ahb_clk", 2078 .parent_hws = (const struct clk_hw*[]) { 2079 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2080 }, 2081 .num_parents = 1, 2082 .flags = CLK_SET_RATE_PARENT, 2083 .ops = &clk_branch2_ops, 2084 }, 2085 }, 2086 }; 2087 2088 static struct clk_branch gcc_pcie3x2_ahb_clk = { 2089 .halt_reg = 0x28030, 2090 .halt_check = BRANCH_HALT, 2091 .clkr = { 2092 .enable_reg = 0x28030, 2093 .enable_mask = BIT(0), 2094 .hw.init = &(const struct clk_init_data) { 2095 .name = "gcc_pcie3x2_ahb_clk", 2096 .parent_hws = (const struct clk_hw*[]) { 2097 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2098 }, 2099 .num_parents = 1, 2100 .flags = CLK_SET_RATE_PARENT, 2101 .ops = &clk_branch2_ops, 2102 }, 2103 }, 2104 }; 2105 2106 static struct clk_branch gcc_pcie3x2_aux_clk = { 2107 .halt_reg = 0x28070, 2108 .halt_check = BRANCH_HALT, 2109 .clkr = { 2110 .enable_reg = 0x28070, 2111 .enable_mask = BIT(0), 2112 .hw.init = &(const struct clk_init_data) { 2113 .name = "gcc_pcie3x2_aux_clk", 2114 .parent_hws = (const struct clk_hw*[]) { 2115 &gcc_pcie_aux_clk_src.clkr.hw, 2116 }, 2117 .num_parents = 1, 2118 .flags = CLK_SET_RATE_PARENT, 2119 .ops = &clk_branch2_ops, 2120 }, 2121 }, 2122 }; 2123 2124 static struct clk_branch gcc_pcie3x2_axi_m_clk = { 2125 .halt_reg = 0x28038, 2126 .halt_check = BRANCH_HALT, 2127 .clkr = { 2128 .enable_reg = 0x28038, 2129 .enable_mask = BIT(0), 2130 .hw.init = &(const struct clk_init_data) { 2131 .name = "gcc_pcie3x2_axi_m_clk", 2132 .parent_hws = (const struct clk_hw*[]) { 2133 &gcc_pcie3x2_axi_m_clk_src.clkr.hw, 2134 }, 2135 .num_parents = 1, 2136 .flags = CLK_SET_RATE_PARENT, 2137 .ops = &clk_branch2_ops, 2138 }, 2139 }, 2140 }; 2141 2142 static struct clk_branch gcc_pcie3x2_axi_s_bridge_clk = { 2143 .halt_reg = 0x28048, 2144 .halt_check = BRANCH_HALT, 2145 .clkr = { 2146 .enable_reg = 0x28048, 2147 .enable_mask = BIT(0), 2148 .hw.init = &(const struct clk_init_data) { 2149 .name = "gcc_pcie3x2_axi_s_bridge_clk", 2150 .parent_hws = (const struct clk_hw*[]) { 2151 &gcc_pcie3x2_axi_s_clk_src.clkr.hw, 2152 }, 2153 .num_parents = 1, 2154 .flags = CLK_SET_RATE_PARENT, 2155 .ops = &clk_branch2_ops, 2156 }, 2157 }, 2158 }; 2159 2160 static struct clk_branch gcc_pcie3x2_axi_s_clk = { 2161 .halt_reg = 0x28040, 2162 .halt_check = BRANCH_HALT, 2163 .clkr = { 2164 .enable_reg = 0x28040, 2165 .enable_mask = BIT(0), 2166 .hw.init = &(const struct clk_init_data) { 2167 .name = "gcc_pcie3x2_axi_s_clk", 2168 .parent_hws = (const struct clk_hw*[]) { 2169 &gcc_pcie3x2_axi_s_clk_src.clkr.hw, 2170 }, 2171 .num_parents = 1, 2172 .flags = CLK_SET_RATE_PARENT, 2173 .ops = &clk_branch2_ops, 2174 }, 2175 }, 2176 }; 2177 2178 static struct clk_branch gcc_pcie3x2_phy_ahb_clk = { 2179 .halt_reg = 0x28080, 2180 .halt_check = BRANCH_HALT, 2181 .clkr = { 2182 .enable_reg = 0x28080, 2183 .enable_mask = BIT(0), 2184 .hw.init = &(const struct clk_init_data) { 2185 .name = "gcc_pcie3x2_phy_ahb_clk", 2186 .parent_hws = (const struct clk_hw*[]) { 2187 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2188 }, 2189 .num_parents = 1, 2190 .flags = CLK_SET_RATE_PARENT, 2191 .ops = &clk_branch2_ops, 2192 }, 2193 }, 2194 }; 2195 2196 static struct clk_branch gcc_pcie3x2_pipe_clk = { 2197 .halt_reg = 0x28068, 2198 .halt_check = BRANCH_HALT_DELAY, 2199 .clkr = { 2200 .enable_reg = 0x28068, 2201 .enable_mask = BIT(0), 2202 .hw.init = &(const struct clk_init_data) { 2203 .name = "gcc_pcie3x2_pipe_clk", 2204 .parent_hws = (const struct clk_hw*[]) { 2205 &gcc_pcie3x2_pipe_clk_src.clkr.hw, 2206 }, 2207 .num_parents = 1, 2208 .flags = CLK_SET_RATE_PARENT, 2209 .ops = &clk_branch2_ops, 2210 }, 2211 }, 2212 }; 2213 2214 static struct clk_branch gcc_pcnoc_at_clk = { 2215 .halt_reg = 0x31024, 2216 .halt_check = BRANCH_HALT_VOTED, 2217 .clkr = { 2218 .enable_reg = 0x31024, 2219 .enable_mask = BIT(0), 2220 .hw.init = &(const struct clk_init_data) { 2221 .name = "gcc_pcnoc_at_clk", 2222 .parent_hws = (const struct clk_hw*[]) { 2223 &gcc_qdss_at_clk_src.clkr.hw, 2224 }, 2225 .num_parents = 1, 2226 .flags = CLK_SET_RATE_PARENT, 2227 .ops = &clk_branch2_ops, 2228 }, 2229 }, 2230 }; 2231 2232 static struct clk_branch gcc_pcnoc_lpass_clk = { 2233 .halt_reg = 0x31020, 2234 .halt_check = BRANCH_HALT, 2235 .clkr = { 2236 .enable_reg = 0x31020, 2237 .enable_mask = BIT(0), 2238 .hw.init = &(const struct clk_init_data) { 2239 .name = "gcc_pcnoc_lpass_clk", 2240 .parent_hws = (const struct clk_hw*[]) { 2241 &gcc_lpass_sway_clk_src.clkr.hw, 2242 }, 2243 .num_parents = 1, 2244 .flags = CLK_SET_RATE_PARENT, 2245 .ops = &clk_branch2_ops, 2246 }, 2247 }, 2248 }; 2249 2250 static struct clk_branch gcc_prng_ahb_clk = { 2251 .halt_reg = 0x13024, 2252 .halt_check = BRANCH_HALT_VOTED, 2253 .clkr = { 2254 .enable_reg = 0xb004, 2255 .enable_mask = BIT(10), 2256 .hw.init = &(const struct clk_init_data) { 2257 .name = "gcc_prng_ahb_clk", 2258 .parent_hws = (const struct clk_hw*[]) { 2259 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2260 }, 2261 .num_parents = 1, 2262 .flags = CLK_SET_RATE_PARENT, 2263 .ops = &clk_branch2_ops, 2264 }, 2265 }, 2266 }; 2267 2268 static struct clk_branch gcc_q6_ahb_clk = { 2269 .halt_reg = 0x25014, 2270 .halt_check = BRANCH_HALT_VOTED, 2271 .clkr = { 2272 .enable_reg = 0x25014, 2273 .enable_mask = BIT(0), 2274 .hw.init = &(const struct clk_init_data) { 2275 .name = "gcc_q6_ahb_clk", 2276 .parent_hws = (const struct clk_hw*[]) { 2277 &gcc_wcss_ahb_clk_src.clkr.hw, 2278 }, 2279 .num_parents = 1, 2280 .flags = CLK_SET_RATE_PARENT, 2281 .ops = &clk_branch2_ops, 2282 }, 2283 }, 2284 }; 2285 2286 static struct clk_branch gcc_q6_ahb_s_clk = { 2287 .halt_reg = 0x25018, 2288 .halt_check = BRANCH_HALT_VOTED, 2289 .clkr = { 2290 .enable_reg = 0x25018, 2291 .enable_mask = BIT(0), 2292 .hw.init = &(const struct clk_init_data) { 2293 .name = "gcc_q6_ahb_s_clk", 2294 .parent_hws = (const struct clk_hw*[]) { 2295 &gcc_wcss_ahb_clk_src.clkr.hw, 2296 }, 2297 .num_parents = 1, 2298 .flags = CLK_SET_RATE_PARENT, 2299 .ops = &clk_branch2_ops, 2300 }, 2301 }, 2302 }; 2303 2304 static struct clk_branch gcc_q6_axim_clk = { 2305 .halt_reg = 0x2500c, 2306 .halt_check = BRANCH_HALT_VOTED, 2307 .clkr = { 2308 .enable_reg = 0x2500c, 2309 .enable_mask = BIT(0), 2310 .hw.init = &(const struct clk_init_data) { 2311 .name = "gcc_q6_axim_clk", 2312 .parent_hws = (const struct clk_hw*[]) { 2313 &gcc_q6_axim_clk_src.clkr.hw, 2314 }, 2315 .num_parents = 1, 2316 .flags = CLK_SET_RATE_PARENT, 2317 .ops = &clk_branch2_ops, 2318 }, 2319 }, 2320 }; 2321 2322 static struct clk_branch gcc_q6_axis_clk = { 2323 .halt_reg = 0x25010, 2324 .halt_check = BRANCH_HALT_VOTED, 2325 .clkr = { 2326 .enable_reg = 0x25010, 2327 .enable_mask = BIT(0), 2328 .hw.init = &(const struct clk_init_data) { 2329 .name = "gcc_q6_axis_clk", 2330 .parent_hws = (const struct clk_hw*[]) { 2331 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 2332 }, 2333 .num_parents = 1, 2334 .flags = CLK_SET_RATE_PARENT, 2335 .ops = &clk_branch2_ops, 2336 }, 2337 }, 2338 }; 2339 2340 static struct clk_branch gcc_q6_tsctr_1to2_clk = { 2341 .halt_reg = 0x25020, 2342 .halt_check = BRANCH_HALT_VOTED, 2343 .clkr = { 2344 .enable_reg = 0x25020, 2345 .enable_mask = BIT(0), 2346 .hw.init = &(const struct clk_init_data) { 2347 .name = "gcc_q6_tsctr_1to2_clk", 2348 .parent_hws = (const struct clk_hw*[]) { 2349 &gcc_qdss_tsctr_div2_clk_src.hw, 2350 }, 2351 .num_parents = 1, 2352 .flags = CLK_SET_RATE_PARENT, 2353 .ops = &clk_branch2_ops, 2354 }, 2355 }, 2356 }; 2357 2358 static struct clk_branch gcc_q6ss_atbm_clk = { 2359 .halt_reg = 0x2501c, 2360 .halt_check = BRANCH_HALT_VOTED, 2361 .clkr = { 2362 .enable_reg = 0x2501c, 2363 .enable_mask = BIT(0), 2364 .hw.init = &(const struct clk_init_data) { 2365 .name = "gcc_q6ss_atbm_clk", 2366 .parent_hws = (const struct clk_hw*[]) { 2367 &gcc_qdss_at_clk_src.clkr.hw, 2368 }, 2369 .num_parents = 1, 2370 .flags = CLK_SET_RATE_PARENT, 2371 .ops = &clk_branch2_ops, 2372 }, 2373 }, 2374 }; 2375 2376 static struct clk_branch gcc_q6ss_pclkdbg_clk = { 2377 .halt_reg = 0x25024, 2378 .halt_check = BRANCH_HALT_VOTED, 2379 .clkr = { 2380 .enable_reg = 0x25024, 2381 .enable_mask = BIT(0), 2382 .hw.init = &(const struct clk_init_data) { 2383 .name = "gcc_q6ss_pclkdbg_clk", 2384 .parent_hws = (const struct clk_hw*[]) { 2385 &gcc_qdss_dap_div_clk_src.clkr.hw, 2386 }, 2387 .num_parents = 1, 2388 .flags = CLK_SET_RATE_PARENT, 2389 .ops = &clk_branch2_ops, 2390 }, 2391 }, 2392 }; 2393 2394 static struct clk_branch gcc_q6ss_trig_clk = { 2395 .halt_reg = 0x250a0, 2396 .halt_check = BRANCH_HALT_VOTED, 2397 .clkr = { 2398 .enable_reg = 0x250a0, 2399 .enable_mask = BIT(0), 2400 .hw.init = &(const struct clk_init_data) { 2401 .name = "gcc_q6ss_trig_clk", 2402 .parent_hws = (const struct clk_hw*[]) { 2403 &gcc_qdss_dap_div_clk_src.clkr.hw, 2404 }, 2405 .num_parents = 1, 2406 .flags = CLK_SET_RATE_PARENT, 2407 .ops = &clk_branch2_ops, 2408 }, 2409 }, 2410 }; 2411 2412 static struct clk_branch gcc_qdss_at_clk = { 2413 .halt_reg = 0x2d038, 2414 .halt_check = BRANCH_HALT_VOTED, 2415 .clkr = { 2416 .enable_reg = 0x2d038, 2417 .enable_mask = BIT(0), 2418 .hw.init = &(const struct clk_init_data) { 2419 .name = "gcc_qdss_at_clk", 2420 .parent_hws = (const struct clk_hw*[]) { 2421 &gcc_qdss_at_clk_src.clkr.hw, 2422 }, 2423 .num_parents = 1, 2424 .flags = CLK_SET_RATE_PARENT, 2425 .ops = &clk_branch2_ops, 2426 }, 2427 }, 2428 }; 2429 2430 static struct clk_branch gcc_qdss_cfg_ahb_clk = { 2431 .halt_reg = 0x2d06c, 2432 .halt_check = BRANCH_HALT_VOTED, 2433 .clkr = { 2434 .enable_reg = 0x2d06c, 2435 .enable_mask = BIT(0), 2436 .hw.init = &(const struct clk_init_data) { 2437 .name = "gcc_qdss_cfg_ahb_clk", 2438 .parent_hws = (const struct clk_hw*[]) { 2439 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2440 }, 2441 .num_parents = 1, 2442 .flags = CLK_SET_RATE_PARENT, 2443 .ops = &clk_branch2_ops, 2444 }, 2445 }, 2446 }; 2447 2448 static struct clk_branch gcc_qdss_dap_ahb_clk = { 2449 .halt_reg = 0x2d068, 2450 .halt_check = BRANCH_HALT_VOTED, 2451 .clkr = { 2452 .enable_reg = 0x2d068, 2453 .enable_mask = BIT(0), 2454 .hw.init = &(const struct clk_init_data) { 2455 .name = "gcc_qdss_dap_ahb_clk", 2456 .parent_hws = (const struct clk_hw*[]) { 2457 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2458 }, 2459 .num_parents = 1, 2460 .flags = CLK_SET_RATE_PARENT, 2461 .ops = &clk_branch2_ops, 2462 }, 2463 }, 2464 }; 2465 2466 static struct clk_branch gcc_qdss_dap_clk = { 2467 .halt_reg = 0x2d05c, 2468 .halt_check = BRANCH_HALT_VOTED, 2469 .clkr = { 2470 .enable_reg = 0xb004, 2471 .enable_mask = BIT(2), 2472 .hw.init = &(const struct clk_init_data) { 2473 .name = "gcc_qdss_dap_clk", 2474 .parent_hws = (const struct clk_hw*[]) { 2475 &gcc_qdss_dap_div_clk_src.clkr.hw, 2476 }, 2477 .num_parents = 1, 2478 .flags = CLK_SET_RATE_PARENT, 2479 .ops = &clk_branch2_ops, 2480 }, 2481 }, 2482 }; 2483 2484 static struct clk_branch gcc_qdss_etr_usb_clk = { 2485 .halt_reg = 0x2d064, 2486 .halt_check = BRANCH_HALT_VOTED, 2487 .clkr = { 2488 .enable_reg = 0x2d064, 2489 .enable_mask = BIT(0), 2490 .hw.init = &(const struct clk_init_data) { 2491 .name = "gcc_qdss_etr_usb_clk", 2492 .parent_hws = (const struct clk_hw*[]) { 2493 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 2494 }, 2495 .num_parents = 1, 2496 .flags = CLK_SET_RATE_PARENT, 2497 .ops = &clk_branch2_ops, 2498 }, 2499 }, 2500 }; 2501 2502 static struct clk_fixed_factor gcc_eud_at_div_clk_src = { 2503 .mult = 1, 2504 .div = 6, 2505 .hw.init = &(struct clk_init_data) { 2506 .name = "gcc_eud_at_div_clk_src", 2507 .parent_hws = (const struct clk_hw *[]) { 2508 &gcc_qdss_at_clk_src.clkr.hw }, 2509 .num_parents = 1, 2510 .flags = CLK_SET_RATE_PARENT, 2511 .ops = &clk_fixed_factor_ops, 2512 }, 2513 }; 2514 2515 static struct clk_branch gcc_qdss_eud_at_clk = { 2516 .halt_reg = 0x2d070, 2517 .halt_check = BRANCH_HALT_VOTED, 2518 .clkr = { 2519 .enable_reg = 0x2d070, 2520 .enable_mask = BIT(0), 2521 .hw.init = &(const struct clk_init_data) { 2522 .name = "gcc_qdss_eud_at_clk", 2523 .parent_hws = (const struct clk_hw*[]) { 2524 &gcc_eud_at_div_clk_src.hw, 2525 }, 2526 .num_parents = 1, 2527 .flags = CLK_SET_RATE_PARENT, 2528 .ops = &clk_branch2_ops, 2529 }, 2530 }, 2531 }; 2532 2533 static struct clk_branch gcc_qpic_ahb_clk = { 2534 .halt_reg = 0x32010, 2535 .halt_check = BRANCH_HALT, 2536 .clkr = { 2537 .enable_reg = 0x32010, 2538 .enable_mask = BIT(0), 2539 .hw.init = &(const struct clk_init_data) { 2540 .name = "gcc_qpic_ahb_clk", 2541 .parent_hws = (const struct clk_hw*[]) { 2542 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2543 }, 2544 .num_parents = 1, 2545 .flags = CLK_SET_RATE_PARENT, 2546 .ops = &clk_branch2_ops, 2547 }, 2548 }, 2549 }; 2550 2551 static struct clk_branch gcc_qpic_clk = { 2552 .halt_reg = 0x32014, 2553 .halt_check = BRANCH_HALT, 2554 .clkr = { 2555 .enable_reg = 0x32014, 2556 .enable_mask = BIT(0), 2557 .hw.init = &(const struct clk_init_data) { 2558 .name = "gcc_qpic_clk", 2559 .parent_hws = (const struct clk_hw*[]) { 2560 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2561 }, 2562 .num_parents = 1, 2563 .flags = CLK_SET_RATE_PARENT, 2564 .ops = &clk_branch2_ops, 2565 }, 2566 }, 2567 }; 2568 2569 static struct clk_branch gcc_qpic_io_macro_clk = { 2570 .halt_reg = 0x3200c, 2571 .halt_check = BRANCH_HALT, 2572 .clkr = { 2573 .enable_reg = 0x3200c, 2574 .enable_mask = BIT(0), 2575 .hw.init = &(const struct clk_init_data) { 2576 .name = "gcc_qpic_io_macro_clk", 2577 .parent_hws = (const struct clk_hw*[]) { 2578 &gcc_qpic_io_macro_clk_src.clkr.hw, 2579 }, 2580 .num_parents = 1, 2581 .flags = CLK_SET_RATE_PARENT, 2582 .ops = &clk_branch2_ops, 2583 }, 2584 }, 2585 }; 2586 2587 static struct clk_branch gcc_qpic_sleep_clk = { 2588 .halt_reg = 0x3201c, 2589 .halt_check = BRANCH_HALT, 2590 .clkr = { 2591 .enable_reg = 0x3201c, 2592 .enable_mask = BIT(0), 2593 .hw.init = &(const struct clk_init_data) { 2594 .name = "gcc_qpic_sleep_clk", 2595 .parent_hws = (const struct clk_hw*[]) { 2596 &gcc_sleep_clk_src.clkr.hw, 2597 }, 2598 .num_parents = 1, 2599 .flags = CLK_SET_RATE_PARENT, 2600 .ops = &clk_branch2_ops, 2601 }, 2602 }, 2603 }; 2604 2605 static struct clk_branch gcc_sdcc1_ahb_clk = { 2606 .halt_reg = 0x33034, 2607 .halt_check = BRANCH_HALT, 2608 .clkr = { 2609 .enable_reg = 0x33034, 2610 .enable_mask = BIT(0), 2611 .hw.init = &(const struct clk_init_data) { 2612 .name = "gcc_sdcc1_ahb_clk", 2613 .parent_hws = (const struct clk_hw*[]) { 2614 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2615 }, 2616 .num_parents = 1, 2617 .flags = CLK_SET_RATE_PARENT, 2618 .ops = &clk_branch2_ops, 2619 }, 2620 }, 2621 }; 2622 2623 static struct clk_branch gcc_sdcc1_apps_clk = { 2624 .halt_reg = 0x3302c, 2625 .halt_check = BRANCH_HALT, 2626 .clkr = { 2627 .enable_reg = 0x3302c, 2628 .enable_mask = BIT(0), 2629 .hw.init = &(const struct clk_init_data) { 2630 .name = "gcc_sdcc1_apps_clk", 2631 .parent_hws = (const struct clk_hw*[]) { 2632 &gcc_sdcc1_apps_clk_src.clkr.hw, 2633 }, 2634 .num_parents = 1, 2635 .flags = CLK_SET_RATE_PARENT, 2636 .ops = &clk_branch2_ops, 2637 }, 2638 }, 2639 }; 2640 2641 static struct clk_branch gcc_snoc_lpass_cfg_clk = { 2642 .halt_reg = 0x2e028, 2643 .halt_check = BRANCH_HALT, 2644 .clkr = { 2645 .enable_reg = 0x2e028, 2646 .enable_mask = BIT(0), 2647 .hw.init = &(const struct clk_init_data) { 2648 .name = "gcc_snoc_lpass_cfg_clk", 2649 .parent_hws = (const struct clk_hw*[]) { 2650 &gcc_lpass_sway_clk_src.clkr.hw, 2651 }, 2652 .num_parents = 1, 2653 .flags = CLK_SET_RATE_PARENT, 2654 .ops = &clk_branch2_ops, 2655 }, 2656 }, 2657 }; 2658 2659 static struct clk_branch gcc_snoc_nssnoc_1_clk = { 2660 .halt_reg = 0x17090, 2661 .halt_check = BRANCH_HALT, 2662 .clkr = { 2663 .enable_reg = 0x17090, 2664 .enable_mask = BIT(0), 2665 .hw.init = &(const struct clk_init_data) { 2666 .name = "gcc_snoc_nssnoc_1_clk", 2667 .parent_hws = (const struct clk_hw*[]) { 2668 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 2669 }, 2670 .num_parents = 1, 2671 .flags = CLK_SET_RATE_PARENT, 2672 .ops = &clk_branch2_ops, 2673 }, 2674 }, 2675 }; 2676 2677 static struct clk_branch gcc_snoc_nssnoc_clk = { 2678 .halt_reg = 0x17084, 2679 .halt_check = BRANCH_HALT, 2680 .clkr = { 2681 .enable_reg = 0x17084, 2682 .enable_mask = BIT(0), 2683 .hw.init = &(const struct clk_init_data) { 2684 .name = "gcc_snoc_nssnoc_clk", 2685 .parent_hws = (const struct clk_hw*[]) { 2686 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 2687 }, 2688 .num_parents = 1, 2689 .flags = CLK_SET_RATE_PARENT, 2690 .ops = &clk_branch2_ops, 2691 }, 2692 }, 2693 }; 2694 2695 static struct clk_branch gcc_snoc_pcie3_1lane_1_m_clk = { 2696 .halt_reg = 0x2e050, 2697 .halt_check = BRANCH_HALT, 2698 .clkr = { 2699 .enable_reg = 0x2e050, 2700 .enable_mask = BIT(0), 2701 .hw.init = &(const struct clk_init_data) { 2702 .name = "gcc_snoc_pcie3_1lane_1_m_clk", 2703 .parent_hws = (const struct clk_hw*[]) { 2704 &gcc_pcie3x1_1_axi_clk_src.clkr.hw, 2705 }, 2706 .num_parents = 1, 2707 .flags = CLK_SET_RATE_PARENT, 2708 .ops = &clk_branch2_ops, 2709 }, 2710 }, 2711 }; 2712 2713 static struct clk_branch gcc_snoc_pcie3_1lane_1_s_clk = { 2714 .halt_reg = 0x2e0ac, 2715 .halt_check = BRANCH_HALT, 2716 .clkr = { 2717 .enable_reg = 0x2e0ac, 2718 .enable_mask = BIT(0), 2719 .hw.init = &(const struct clk_init_data) { 2720 .name = "gcc_snoc_pcie3_1lane_1_s_clk", 2721 .parent_hws = (const struct clk_hw*[]) { 2722 &gcc_pcie3x1_1_axi_clk_src.clkr.hw, 2723 }, 2724 .num_parents = 1, 2725 .flags = CLK_SET_RATE_PARENT, 2726 .ops = &clk_branch2_ops, 2727 }, 2728 }, 2729 }; 2730 2731 static struct clk_branch gcc_snoc_pcie3_1lane_m_clk = { 2732 .halt_reg = 0x2e080, 2733 .halt_check = BRANCH_HALT, 2734 .clkr = { 2735 .enable_reg = 0x2e080, 2736 .enable_mask = BIT(0), 2737 .hw.init = &(const struct clk_init_data) { 2738 .name = "gcc_snoc_pcie3_1lane_m_clk", 2739 .parent_hws = (const struct clk_hw*[]) { 2740 &gcc_pcie3x1_0_axi_clk_src.clkr.hw, 2741 }, 2742 .num_parents = 1, 2743 .flags = CLK_SET_RATE_PARENT, 2744 .ops = &clk_branch2_ops, 2745 }, 2746 }, 2747 }; 2748 2749 static struct clk_branch gcc_snoc_pcie3_1lane_s_clk = { 2750 .halt_reg = 0x2e04c, 2751 .halt_check = BRANCH_HALT, 2752 .clkr = { 2753 .enable_reg = 0x2e04c, 2754 .enable_mask = BIT(0), 2755 .hw.init = &(const struct clk_init_data) { 2756 .name = "gcc_snoc_pcie3_1lane_s_clk", 2757 .parent_hws = (const struct clk_hw*[]) { 2758 &gcc_pcie3x1_0_axi_clk_src.clkr.hw, 2759 }, 2760 .num_parents = 1, 2761 .flags = CLK_SET_RATE_PARENT, 2762 .ops = &clk_branch2_ops, 2763 }, 2764 }, 2765 }; 2766 2767 static struct clk_branch gcc_snoc_pcie3_2lane_m_clk = { 2768 .halt_reg = 0x2e07c, 2769 .halt_check = BRANCH_HALT, 2770 .clkr = { 2771 .enable_reg = 0x2e07c, 2772 .enable_mask = BIT(0), 2773 .hw.init = &(const struct clk_init_data) { 2774 .name = "gcc_snoc_pcie3_2lane_m_clk", 2775 .parent_hws = (const struct clk_hw*[]) { 2776 &gcc_pcie3x2_axi_m_clk_src.clkr.hw, 2777 }, 2778 .num_parents = 1, 2779 .flags = CLK_SET_RATE_PARENT, 2780 .ops = &clk_branch2_ops, 2781 }, 2782 }, 2783 }; 2784 2785 static struct clk_branch gcc_snoc_pcie3_2lane_s_clk = { 2786 .halt_reg = 0x2e048, 2787 .halt_check = BRANCH_HALT, 2788 .clkr = { 2789 .enable_reg = 0x2e048, 2790 .enable_mask = BIT(0), 2791 .hw.init = &(const struct clk_init_data) { 2792 .name = "gcc_snoc_pcie3_2lane_s_clk", 2793 .parent_hws = (const struct clk_hw*[]) { 2794 &gcc_pcie3x2_axi_s_clk_src.clkr.hw, 2795 }, 2796 .num_parents = 1, 2797 .flags = CLK_SET_RATE_PARENT, 2798 .ops = &clk_branch2_ops, 2799 }, 2800 }, 2801 }; 2802 2803 static struct clk_branch gcc_snoc_usb_clk = { 2804 .halt_reg = 0x2e058, 2805 .halt_check = BRANCH_HALT_VOTED, 2806 .clkr = { 2807 .enable_reg = 0x2e058, 2808 .enable_mask = BIT(0), 2809 .hw.init = &(const struct clk_init_data) { 2810 .name = "gcc_snoc_usb_clk", 2811 .parent_hws = (const struct clk_hw*[]) { 2812 &gcc_usb0_master_clk_src.clkr.hw, 2813 }, 2814 .num_parents = 1, 2815 .flags = CLK_SET_RATE_PARENT, 2816 .ops = &clk_branch2_ops, 2817 }, 2818 }, 2819 }; 2820 2821 static struct clk_branch gcc_sys_noc_at_clk = { 2822 .halt_reg = 0x2e038, 2823 .halt_check = BRANCH_HALT_VOTED, 2824 .clkr = { 2825 .enable_reg = 0x2e038, 2826 .enable_mask = BIT(0), 2827 .hw.init = &(const struct clk_init_data) { 2828 .name = "gcc_sys_noc_at_clk", 2829 .parent_hws = (const struct clk_hw*[]) { 2830 &gcc_qdss_at_clk_src.clkr.hw, 2831 }, 2832 .num_parents = 1, 2833 .flags = CLK_SET_RATE_PARENT, 2834 .ops = &clk_branch2_ops, 2835 }, 2836 }, 2837 }; 2838 2839 static struct clk_branch gcc_sys_noc_wcss_ahb_clk = { 2840 .halt_reg = 0x2e030, 2841 .halt_check = BRANCH_HALT, 2842 .clkr = { 2843 .enable_reg = 0x2e030, 2844 .enable_mask = BIT(0), 2845 .hw.init = &(const struct clk_init_data) { 2846 .name = "gcc_sys_noc_wcss_ahb_clk", 2847 .parent_hws = (const struct clk_hw*[]) { 2848 &gcc_wcss_ahb_clk_src.clkr.hw, 2849 }, 2850 .num_parents = 1, 2851 .flags = CLK_SET_RATE_PARENT, 2852 .ops = &clk_branch2_ops, 2853 }, 2854 }, 2855 }; 2856 2857 static struct clk_branch gcc_uniphy0_ahb_clk = { 2858 .halt_reg = 0x16010, 2859 .halt_check = BRANCH_HALT, 2860 .clkr = { 2861 .enable_reg = 0x16010, 2862 .enable_mask = BIT(0), 2863 .hw.init = &(const struct clk_init_data) { 2864 .name = "gcc_uniphy0_ahb_clk", 2865 .parent_hws = (const struct clk_hw*[]) { 2866 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2867 }, 2868 .num_parents = 1, 2869 .flags = CLK_SET_RATE_PARENT, 2870 .ops = &clk_branch2_ops, 2871 }, 2872 }, 2873 }; 2874 2875 static struct clk_branch gcc_uniphy0_sys_clk = { 2876 .halt_reg = 0x1600c, 2877 .halt_check = BRANCH_HALT, 2878 .clkr = { 2879 .enable_reg = 0x1600c, 2880 .enable_mask = BIT(0), 2881 .hw.init = &(const struct clk_init_data) { 2882 .name = "gcc_uniphy0_sys_clk", 2883 .parent_hws = (const struct clk_hw*[]) { 2884 &gcc_uniphy_sys_clk_src.clkr.hw, 2885 }, 2886 .num_parents = 1, 2887 .flags = CLK_SET_RATE_PARENT, 2888 .ops = &clk_branch2_ops, 2889 }, 2890 }, 2891 }; 2892 2893 static struct clk_branch gcc_uniphy1_ahb_clk = { 2894 .halt_reg = 0x1601c, 2895 .halt_check = BRANCH_HALT, 2896 .clkr = { 2897 .enable_reg = 0x1601c, 2898 .enable_mask = BIT(0), 2899 .hw.init = &(const struct clk_init_data) { 2900 .name = "gcc_uniphy1_ahb_clk", 2901 .parent_hws = (const struct clk_hw*[]) { 2902 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 2903 }, 2904 .num_parents = 1, 2905 .flags = CLK_SET_RATE_PARENT, 2906 .ops = &clk_branch2_ops, 2907 }, 2908 }, 2909 }; 2910 2911 static struct clk_branch gcc_uniphy1_sys_clk = { 2912 .halt_reg = 0x16018, 2913 .halt_check = BRANCH_HALT, 2914 .clkr = { 2915 .enable_reg = 0x16018, 2916 .enable_mask = BIT(0), 2917 .hw.init = &(const struct clk_init_data) { 2918 .name = "gcc_uniphy1_sys_clk", 2919 .parent_hws = (const struct clk_hw*[]) { 2920 &gcc_uniphy_sys_clk_src.clkr.hw, 2921 }, 2922 .num_parents = 1, 2923 .flags = CLK_SET_RATE_PARENT, 2924 .ops = &clk_branch2_ops, 2925 }, 2926 }, 2927 }; 2928 2929 static struct clk_branch gcc_usb0_aux_clk = { 2930 .halt_reg = 0x2c050, 2931 .halt_check = BRANCH_HALT_VOTED, 2932 .clkr = { 2933 .enable_reg = 0x2c050, 2934 .enable_mask = BIT(0), 2935 .hw.init = &(const struct clk_init_data) { 2936 .name = "gcc_usb0_aux_clk", 2937 .parent_hws = (const struct clk_hw*[]) { 2938 &gcc_usb0_aux_clk_src.clkr.hw, 2939 }, 2940 .num_parents = 1, 2941 .flags = CLK_SET_RATE_PARENT, 2942 .ops = &clk_branch2_ops, 2943 }, 2944 }, 2945 }; 2946 2947 static struct clk_branch gcc_usb0_eud_at_clk = { 2948 .halt_reg = 0x30004, 2949 .halt_check = BRANCH_HALT_VOTED, 2950 .clkr = { 2951 .enable_reg = 0x30004, 2952 .enable_mask = BIT(0), 2953 .hw.init = &(const struct clk_init_data) { 2954 .name = "gcc_usb0_eud_at_clk", 2955 .parent_hws = (const struct clk_hw*[]) { 2956 &gcc_eud_at_div_clk_src.hw, 2957 }, 2958 .num_parents = 1, 2959 .flags = CLK_SET_RATE_PARENT, 2960 .ops = &clk_branch2_ops, 2961 }, 2962 }, 2963 }; 2964 2965 static struct clk_branch gcc_usb0_lfps_clk = { 2966 .halt_reg = 0x2c090, 2967 .halt_check = BRANCH_HALT_VOTED, 2968 .clkr = { 2969 .enable_reg = 0x2c090, 2970 .enable_mask = BIT(0), 2971 .hw.init = &(const struct clk_init_data) { 2972 .name = "gcc_usb0_lfps_clk", 2973 .parent_hws = (const struct clk_hw*[]) { 2974 &gcc_usb0_lfps_clk_src.clkr.hw, 2975 }, 2976 .num_parents = 1, 2977 .flags = CLK_SET_RATE_PARENT, 2978 .ops = &clk_branch2_ops, 2979 }, 2980 }, 2981 }; 2982 2983 static struct clk_branch gcc_usb0_master_clk = { 2984 .halt_reg = 0x2c048, 2985 .halt_check = BRANCH_HALT_VOTED, 2986 .clkr = { 2987 .enable_reg = 0x2c048, 2988 .enable_mask = BIT(0), 2989 .hw.init = &(const struct clk_init_data) { 2990 .name = "gcc_usb0_master_clk", 2991 .parent_hws = (const struct clk_hw*[]) { 2992 &gcc_usb0_master_clk_src.clkr.hw, 2993 }, 2994 .num_parents = 1, 2995 .flags = CLK_SET_RATE_PARENT, 2996 .ops = &clk_branch2_ops, 2997 }, 2998 }, 2999 }; 3000 3001 static struct clk_branch gcc_usb0_mock_utmi_clk = { 3002 .halt_reg = 0x2c054, 3003 .clkr = { 3004 .enable_reg = 0x2c054, 3005 .enable_mask = BIT(0), 3006 .hw.init = &(const struct clk_init_data) { 3007 .name = "gcc_usb0_mock_utmi_clk", 3008 .parent_hws = (const struct clk_hw*[]) { 3009 &gcc_usb0_mock_utmi_div_clk_src.clkr.hw, 3010 }, 3011 .num_parents = 1, 3012 .flags = CLK_SET_RATE_PARENT, 3013 .ops = &clk_branch2_ops, 3014 }, 3015 }, 3016 }; 3017 3018 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = { 3019 .halt_reg = 0x2c05c, 3020 .halt_check = BRANCH_HALT_VOTED, 3021 .clkr = { 3022 .enable_reg = 0x2c05c, 3023 .enable_mask = BIT(0), 3024 .hw.init = &(const struct clk_init_data) { 3025 .name = "gcc_usb0_phy_cfg_ahb_clk", 3026 .parent_hws = (const struct clk_hw*[]) { 3027 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 3028 }, 3029 .num_parents = 1, 3030 .flags = CLK_SET_RATE_PARENT, 3031 .ops = &clk_branch2_ops, 3032 }, 3033 }, 3034 }; 3035 3036 static struct clk_branch gcc_usb0_pipe_clk = { 3037 .halt_reg = 0x2c078, 3038 .halt_check = BRANCH_HALT_DELAY, 3039 .clkr = { 3040 .enable_reg = 0x2c078, 3041 .enable_mask = BIT(0), 3042 .hw.init = &(const struct clk_init_data) { 3043 .name = "gcc_usb0_pipe_clk", 3044 .parent_hws = (const struct clk_hw*[]) { 3045 &gcc_usb0_pipe_clk_src.clkr.hw, 3046 }, 3047 .num_parents = 1, 3048 .flags = CLK_SET_RATE_PARENT, 3049 .ops = &clk_branch2_ops, 3050 }, 3051 }, 3052 }; 3053 3054 static struct clk_branch gcc_usb0_sleep_clk = { 3055 .halt_reg = 0x2c058, 3056 .halt_check = BRANCH_HALT_VOTED, 3057 .clkr = { 3058 .enable_reg = 0x2c058, 3059 .enable_mask = BIT(0), 3060 .hw.init = &(const struct clk_init_data) { 3061 .name = "gcc_usb0_sleep_clk", 3062 .parent_hws = (const struct clk_hw*[]) { 3063 &gcc_sleep_clk_src.clkr.hw, 3064 }, 3065 .num_parents = 1, 3066 .flags = CLK_SET_RATE_PARENT, 3067 .ops = &clk_branch2_ops, 3068 }, 3069 }, 3070 }; 3071 3072 static struct clk_branch gcc_wcss_axim_clk = { 3073 .halt_reg = 0x2505c, 3074 .halt_check = BRANCH_HALT, 3075 .clkr = { 3076 .enable_reg = 0x2505c, 3077 .enable_mask = BIT(0), 3078 .hw.init = &(const struct clk_init_data) { 3079 .name = "gcc_wcss_axim_clk", 3080 .parent_hws = (const struct clk_hw*[]) { 3081 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 3082 }, 3083 .num_parents = 1, 3084 .flags = CLK_SET_RATE_PARENT, 3085 .ops = &clk_branch2_ops, 3086 }, 3087 }, 3088 }; 3089 3090 static struct clk_branch gcc_wcss_axis_clk = { 3091 .halt_reg = 0x25060, 3092 .halt_check = BRANCH_HALT, 3093 .clkr = { 3094 .enable_reg = 0x25060, 3095 .enable_mask = BIT(0), 3096 .hw.init = &(const struct clk_init_data) { 3097 .name = "gcc_wcss_axis_clk", 3098 .parent_hws = (const struct clk_hw*[]) { 3099 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 3100 }, 3101 .num_parents = 1, 3102 .flags = CLK_SET_RATE_PARENT, 3103 .ops = &clk_branch2_ops, 3104 }, 3105 }, 3106 }; 3107 3108 static struct clk_branch gcc_wcss_dbg_ifc_apb_bdg_clk = { 3109 .halt_reg = 0x25048, 3110 .halt_check = BRANCH_HALT, 3111 .clkr = { 3112 .enable_reg = 0x25048, 3113 .enable_mask = BIT(0), 3114 .hw.init = &(const struct clk_init_data) { 3115 .name = "gcc_wcss_dbg_ifc_apb_bdg_clk", 3116 .parent_hws = (const struct clk_hw*[]) { 3117 &gcc_qdss_dap_div_clk_src.clkr.hw, 3118 }, 3119 .num_parents = 1, 3120 .flags = CLK_SET_RATE_PARENT, 3121 .ops = &clk_branch2_ops, 3122 }, 3123 }, 3124 }; 3125 3126 static struct clk_branch gcc_wcss_dbg_ifc_apb_clk = { 3127 .halt_reg = 0x25038, 3128 .halt_check = BRANCH_HALT, 3129 .clkr = { 3130 .enable_reg = 0x25038, 3131 .enable_mask = BIT(0), 3132 .hw.init = &(const struct clk_init_data) { 3133 .name = "gcc_wcss_dbg_ifc_apb_clk", 3134 .parent_hws = (const struct clk_hw*[]) { 3135 &gcc_qdss_dap_div_clk_src.clkr.hw, 3136 }, 3137 .num_parents = 1, 3138 .flags = CLK_SET_RATE_PARENT, 3139 .ops = &clk_branch2_ops, 3140 }, 3141 }, 3142 }; 3143 3144 static struct clk_branch gcc_wcss_dbg_ifc_atb_bdg_clk = { 3145 .halt_reg = 0x2504c, 3146 .halt_check = BRANCH_HALT, 3147 .clkr = { 3148 .enable_reg = 0x2504c, 3149 .enable_mask = BIT(0), 3150 .hw.init = &(const struct clk_init_data) { 3151 .name = "gcc_wcss_dbg_ifc_atb_bdg_clk", 3152 .parent_hws = (const struct clk_hw*[]) { 3153 &gcc_qdss_at_clk_src.clkr.hw, 3154 }, 3155 .num_parents = 1, 3156 .flags = CLK_SET_RATE_PARENT, 3157 .ops = &clk_branch2_ops, 3158 }, 3159 }, 3160 }; 3161 3162 static struct clk_branch gcc_wcss_dbg_ifc_atb_clk = { 3163 .halt_reg = 0x2503c, 3164 .halt_check = BRANCH_HALT, 3165 .clkr = { 3166 .enable_reg = 0x2503c, 3167 .enable_mask = BIT(0), 3168 .hw.init = &(const struct clk_init_data) { 3169 .name = "gcc_wcss_dbg_ifc_atb_clk", 3170 .parent_hws = (const struct clk_hw*[]) { 3171 &gcc_qdss_at_clk_src.clkr.hw, 3172 }, 3173 .num_parents = 1, 3174 .flags = CLK_SET_RATE_PARENT, 3175 .ops = &clk_branch2_ops, 3176 }, 3177 }, 3178 }; 3179 3180 static struct clk_branch gcc_wcss_dbg_ifc_nts_bdg_clk = { 3181 .halt_reg = 0x25050, 3182 .halt_check = BRANCH_HALT, 3183 .clkr = { 3184 .enable_reg = 0x25050, 3185 .enable_mask = BIT(0), 3186 .hw.init = &(const struct clk_init_data) { 3187 .name = "gcc_wcss_dbg_ifc_nts_bdg_clk", 3188 .parent_hws = (const struct clk_hw*[]) { 3189 &gcc_qdss_tsctr_div2_clk_src.hw, 3190 }, 3191 .num_parents = 1, 3192 .flags = CLK_SET_RATE_PARENT, 3193 .ops = &clk_branch2_ops, 3194 }, 3195 }, 3196 }; 3197 3198 static struct clk_branch gcc_wcss_dbg_ifc_nts_clk = { 3199 .halt_reg = 0x25040, 3200 .halt_check = BRANCH_HALT, 3201 .clkr = { 3202 .enable_reg = 0x25040, 3203 .enable_mask = BIT(0), 3204 .hw.init = &(const struct clk_init_data) { 3205 .name = "gcc_wcss_dbg_ifc_nts_clk", 3206 .parent_hws = (const struct clk_hw*[]) { 3207 &gcc_qdss_tsctr_div2_clk_src.hw, 3208 }, 3209 .num_parents = 1, 3210 .flags = CLK_SET_RATE_PARENT, 3211 .ops = &clk_branch2_ops, 3212 }, 3213 }, 3214 }; 3215 3216 static struct clk_branch gcc_wcss_ecahb_clk = { 3217 .halt_reg = 0x25058, 3218 .halt_check = BRANCH_HALT, 3219 .clkr = { 3220 .enable_reg = 0x25058, 3221 .enable_mask = BIT(0), 3222 .hw.init = &(const struct clk_init_data) { 3223 .name = "gcc_wcss_ecahb_clk", 3224 .parent_hws = (const struct clk_hw*[]) { 3225 &gcc_wcss_ahb_clk_src.clkr.hw, 3226 }, 3227 .num_parents = 1, 3228 .flags = CLK_SET_RATE_PARENT, 3229 .ops = &clk_branch2_ops, 3230 }, 3231 }, 3232 }; 3233 3234 static struct clk_branch gcc_wcss_mst_async_bdg_clk = { 3235 .halt_reg = 0x2e0b0, 3236 .halt_check = BRANCH_HALT, 3237 .clkr = { 3238 .enable_reg = 0x2e0b0, 3239 .enable_mask = BIT(0), 3240 .hw.init = &(const struct clk_init_data) { 3241 .name = "gcc_wcss_mst_async_bdg_clk", 3242 .parent_hws = (const struct clk_hw*[]) { 3243 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 3244 }, 3245 .num_parents = 1, 3246 .flags = CLK_SET_RATE_PARENT, 3247 .ops = &clk_branch2_ops, 3248 }, 3249 }, 3250 }; 3251 3252 static struct clk_branch gcc_wcss_slv_async_bdg_clk = { 3253 .halt_reg = 0x2e0b4, 3254 .halt_check = BRANCH_HALT, 3255 .clkr = { 3256 .enable_reg = 0x2e0b4, 3257 .enable_mask = BIT(0), 3258 .hw.init = &(const struct clk_init_data) { 3259 .name = "gcc_wcss_slv_async_bdg_clk", 3260 .parent_hws = (const struct clk_hw*[]) { 3261 &gcc_system_noc_bfdcd_clk_src.clkr.hw, 3262 }, 3263 .num_parents = 1, 3264 .flags = CLK_SET_RATE_PARENT, 3265 .ops = &clk_branch2_ops, 3266 }, 3267 }, 3268 }; 3269 3270 static struct clk_branch gcc_xo_clk = { 3271 .halt_reg = 0x34018, 3272 .halt_check = BRANCH_HALT, 3273 .clkr = { 3274 .enable_reg = 0x34018, 3275 .enable_mask = BIT(0), 3276 .hw.init = &(const struct clk_init_data) { 3277 .name = "gcc_xo_clk", 3278 .parent_hws = (const struct clk_hw*[]) { 3279 &gcc_xo_clk_src.clkr.hw, 3280 }, 3281 .num_parents = 1, 3282 .flags = CLK_SET_RATE_PARENT, 3283 .ops = &clk_branch2_ops, 3284 }, 3285 }, 3286 }; 3287 3288 static struct clk_branch gcc_xo_div4_clk = { 3289 .halt_reg = 0x3401c, 3290 .halt_check = BRANCH_HALT, 3291 .clkr = { 3292 .enable_reg = 0x3401c, 3293 .enable_mask = BIT(0), 3294 .hw.init = &(const struct clk_init_data) { 3295 .name = "gcc_xo_div4_clk", 3296 .parent_hws = (const struct clk_hw*[]) { 3297 &gcc_xo_div4_clk_src.hw, 3298 }, 3299 .num_parents = 1, 3300 .flags = CLK_SET_RATE_PARENT, 3301 .ops = &clk_branch2_ops, 3302 }, 3303 }, 3304 }; 3305 3306 static struct clk_branch gcc_im_sleep_clk = { 3307 .halt_reg = 0x34020, 3308 .halt_check = BRANCH_HALT, 3309 .clkr = { 3310 .enable_reg = 0x34020, 3311 .enable_mask = BIT(0), 3312 .hw.init = &(const struct clk_init_data) { 3313 .name = "gcc_im_sleep_clk", 3314 .parent_hws = (const struct clk_hw*[]) { 3315 &gcc_sleep_clk_src.clkr.hw, 3316 }, 3317 .num_parents = 1, 3318 .flags = CLK_SET_RATE_PARENT, 3319 .ops = &clk_branch2_ops, 3320 }, 3321 }, 3322 }; 3323 3324 static struct clk_branch gcc_nssnoc_pcnoc_1_clk = { 3325 .halt_reg = 0x17080, 3326 .halt_check = BRANCH_HALT, 3327 .clkr = { 3328 .enable_reg = 0x17080, 3329 .enable_mask = BIT(0), 3330 .hw.init = &(const struct clk_init_data) { 3331 .name = "gcc_nssnoc_pcnoc_1_clk", 3332 .parent_hws = (const struct clk_hw*[]) { 3333 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 3334 }, 3335 .num_parents = 1, 3336 .flags = CLK_SET_RATE_PARENT, 3337 .ops = &clk_branch2_ops, 3338 }, 3339 }, 3340 }; 3341 3342 static struct clk_branch gcc_mem_noc_ahb_clk = { 3343 .halt_reg = 0x1900c, 3344 .halt_check = BRANCH_HALT, 3345 .clkr = { 3346 .enable_reg = 0x1900c, 3347 .enable_mask = BIT(0), 3348 .hw.init = &(const struct clk_init_data) { 3349 .name = "gcc_mem_noc_ahb_clk", 3350 .parent_hws = (const struct clk_hw*[]) { 3351 &gcc_pcnoc_bfdcd_clk_src.clkr.hw, 3352 }, 3353 .num_parents = 1, 3354 .flags = CLK_SET_RATE_PARENT, 3355 .ops = &clk_branch2_ops, 3356 }, 3357 }, 3358 }; 3359 3360 static struct clk_branch gcc_mem_noc_apss_axi_clk = { 3361 .halt_reg = 0x1901c, 3362 .halt_check = BRANCH_HALT_VOTED, 3363 .clkr = { 3364 .enable_reg = 0xb004, 3365 .enable_mask = BIT(6), 3366 .hw.init = &(const struct clk_init_data) { 3367 .name = "gcc_mem_noc_apss_axi_clk", 3368 .parent_hws = (const struct clk_hw*[]) { 3369 &gcc_apss_axi_clk_src.clkr.hw, 3370 }, 3371 .num_parents = 1, 3372 .flags = CLK_SET_RATE_PARENT, 3373 .ops = &clk_branch2_ops, 3374 }, 3375 }, 3376 }; 3377 3378 static struct clk_regmap_div gcc_snoc_qosgen_extref_div_clk_src = { 3379 .reg = 0x2e010, 3380 .shift = 0, 3381 .width = 2, 3382 .clkr.hw.init = &(const struct clk_init_data) { 3383 .name = "gcc_snoc_qosgen_extref_div_clk_src", 3384 .parent_hws = (const struct clk_hw*[]) { 3385 &gcc_xo_clk_src.clkr.hw, 3386 }, 3387 .num_parents = 1, 3388 .flags = CLK_SET_RATE_PARENT, 3389 .ops = &clk_regmap_div_ro_ops, 3390 }, 3391 }; 3392 3393 static struct clk_branch gcc_mem_noc_qosgen_extref_clk = { 3394 .halt_reg = 0x19024, 3395 .halt_check = BRANCH_HALT, 3396 .clkr = { 3397 .enable_reg = 0x19024, 3398 .enable_mask = BIT(0), 3399 .hw.init = &(const struct clk_init_data) { 3400 .name = "gcc_mem_noc_qosgen_extref_clk", 3401 .parent_hws = (const struct clk_hw*[]) { 3402 &gcc_snoc_qosgen_extref_div_clk_src.clkr.hw, 3403 }, 3404 .num_parents = 1, 3405 .flags = CLK_SET_RATE_PARENT, 3406 .ops = &clk_branch2_ops, 3407 }, 3408 }, 3409 }; 3410 3411 static struct clk_regmap *gcc_ipq5332_clocks[] = { 3412 [GPLL0_MAIN] = &gpll0_main.clkr, 3413 [GPLL0] = &gpll0.clkr, 3414 [GPLL2_MAIN] = &gpll2_main.clkr, 3415 [GPLL2] = &gpll2.clkr, 3416 [GPLL4_MAIN] = &gpll4_main.clkr, 3417 [GPLL4] = &gpll4.clkr, 3418 [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr, 3419 [GCC_ADSS_PWM_CLK_SRC] = &gcc_adss_pwm_clk_src.clkr, 3420 [GCC_AHB_CLK] = &gcc_ahb_clk.clkr, 3421 [GCC_APSS_AXI_CLK_SRC] = &gcc_apss_axi_clk_src.clkr, 3422 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3423 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3424 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3425 [GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup1_spi_apps_clk_src.clkr, 3426 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3427 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3428 [GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup2_spi_apps_clk_src.clkr, 3429 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3430 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3431 [GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup3_spi_apps_clk_src.clkr, 3432 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, 3433 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3434 [GCC_BLSP1_UART1_APPS_CLK_SRC] = &gcc_blsp1_uart1_apps_clk_src.clkr, 3435 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3436 [GCC_BLSP1_UART2_APPS_CLK_SRC] = &gcc_blsp1_uart2_apps_clk_src.clkr, 3437 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 3438 [GCC_BLSP1_UART3_APPS_CLK_SRC] = &gcc_blsp1_uart3_apps_clk_src.clkr, 3439 [GCC_CE_AHB_CLK] = &gcc_ce_ahb_clk.clkr, 3440 [GCC_CE_AXI_CLK] = &gcc_ce_axi_clk.clkr, 3441 [GCC_CE_PCNOC_AHB_CLK] = &gcc_ce_pcnoc_ahb_clk.clkr, 3442 [GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr, 3443 [GCC_CMN_12GPLL_APU_CLK] = &gcc_cmn_12gpll_apu_clk.clkr, 3444 [GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr, 3445 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3446 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3447 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3448 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3449 [GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr, 3450 [GCC_LPASS_SWAY_CLK] = &gcc_lpass_sway_clk.clkr, 3451 [GCC_LPASS_SWAY_CLK_SRC] = &gcc_lpass_sway_clk_src.clkr, 3452 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr, 3453 [GCC_MDIO_SLAVE_AHB_CLK] = &gcc_mdio_slave_ahb_clk.clkr, 3454 [GCC_MEM_NOC_Q6_AXI_CLK] = &gcc_mem_noc_q6_axi_clk.clkr, 3455 [GCC_MEM_NOC_TS_CLK] = &gcc_mem_noc_ts_clk.clkr, 3456 [GCC_NSS_TS_CLK] = &gcc_nss_ts_clk.clkr, 3457 [GCC_NSS_TS_CLK_SRC] = &gcc_nss_ts_clk_src.clkr, 3458 [GCC_NSSCC_CLK] = &gcc_nsscc_clk.clkr, 3459 [GCC_NSSCFG_CLK] = &gcc_nsscfg_clk.clkr, 3460 [GCC_NSSNOC_ATB_CLK] = &gcc_nssnoc_atb_clk.clkr, 3461 [GCC_NSSNOC_NSSCC_CLK] = &gcc_nssnoc_nsscc_clk.clkr, 3462 [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr, 3463 [GCC_NSSNOC_SNOC_1_CLK] = &gcc_nssnoc_snoc_1_clk.clkr, 3464 [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr, 3465 [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr, 3466 [GCC_NSSNOC_XO_DCD_CLK] = &gcc_nssnoc_xo_dcd_clk.clkr, 3467 [GCC_PCIE3X1_0_AHB_CLK] = &gcc_pcie3x1_0_ahb_clk.clkr, 3468 [GCC_PCIE3X1_0_AUX_CLK] = &gcc_pcie3x1_0_aux_clk.clkr, 3469 [GCC_PCIE3X1_0_AXI_CLK_SRC] = &gcc_pcie3x1_0_axi_clk_src.clkr, 3470 [GCC_PCIE3X1_0_AXI_M_CLK] = &gcc_pcie3x1_0_axi_m_clk.clkr, 3471 [GCC_PCIE3X1_0_AXI_S_BRIDGE_CLK] = &gcc_pcie3x1_0_axi_s_bridge_clk.clkr, 3472 [GCC_PCIE3X1_0_AXI_S_CLK] = &gcc_pcie3x1_0_axi_s_clk.clkr, 3473 [GCC_PCIE3X1_0_PIPE_CLK] = &gcc_pcie3x1_0_pipe_clk.clkr, 3474 [GCC_PCIE3X1_0_RCHG_CLK] = &gcc_pcie3x1_0_rchg_clk.clkr, 3475 [GCC_PCIE3X1_0_RCHG_CLK_SRC] = &gcc_pcie3x1_0_rchg_clk_src.clkr, 3476 [GCC_PCIE3X1_1_AHB_CLK] = &gcc_pcie3x1_1_ahb_clk.clkr, 3477 [GCC_PCIE3X1_1_AUX_CLK] = &gcc_pcie3x1_1_aux_clk.clkr, 3478 [GCC_PCIE3X1_1_AXI_CLK_SRC] = &gcc_pcie3x1_1_axi_clk_src.clkr, 3479 [GCC_PCIE3X1_1_AXI_M_CLK] = &gcc_pcie3x1_1_axi_m_clk.clkr, 3480 [GCC_PCIE3X1_1_AXI_S_BRIDGE_CLK] = &gcc_pcie3x1_1_axi_s_bridge_clk.clkr, 3481 [GCC_PCIE3X1_1_AXI_S_CLK] = &gcc_pcie3x1_1_axi_s_clk.clkr, 3482 [GCC_PCIE3X1_1_PIPE_CLK] = &gcc_pcie3x1_1_pipe_clk.clkr, 3483 [GCC_PCIE3X1_1_RCHG_CLK] = &gcc_pcie3x1_1_rchg_clk.clkr, 3484 [GCC_PCIE3X1_1_RCHG_CLK_SRC] = &gcc_pcie3x1_1_rchg_clk_src.clkr, 3485 [GCC_PCIE3X1_PHY_AHB_CLK] = &gcc_pcie3x1_phy_ahb_clk.clkr, 3486 [GCC_PCIE3X2_AHB_CLK] = &gcc_pcie3x2_ahb_clk.clkr, 3487 [GCC_PCIE3X2_AUX_CLK] = &gcc_pcie3x2_aux_clk.clkr, 3488 [GCC_PCIE3X2_AXI_M_CLK] = &gcc_pcie3x2_axi_m_clk.clkr, 3489 [GCC_PCIE3X2_AXI_M_CLK_SRC] = &gcc_pcie3x2_axi_m_clk_src.clkr, 3490 [GCC_PCIE3X2_AXI_S_BRIDGE_CLK] = &gcc_pcie3x2_axi_s_bridge_clk.clkr, 3491 [GCC_PCIE3X2_AXI_S_CLK] = &gcc_pcie3x2_axi_s_clk.clkr, 3492 [GCC_PCIE3X2_AXI_S_CLK_SRC] = &gcc_pcie3x2_axi_s_clk_src.clkr, 3493 [GCC_PCIE3X2_PHY_AHB_CLK] = &gcc_pcie3x2_phy_ahb_clk.clkr, 3494 [GCC_PCIE3X2_PIPE_CLK] = &gcc_pcie3x2_pipe_clk.clkr, 3495 [GCC_PCIE3X2_RCHG_CLK] = &gcc_pcie3x2_rchg_clk.clkr, 3496 [GCC_PCIE3X2_RCHG_CLK_SRC] = &gcc_pcie3x2_rchg_clk_src.clkr, 3497 [GCC_PCIE_AUX_CLK_SRC] = &gcc_pcie_aux_clk_src.clkr, 3498 [GCC_PCNOC_AT_CLK] = &gcc_pcnoc_at_clk.clkr, 3499 [GCC_PCNOC_BFDCD_CLK_SRC] = &gcc_pcnoc_bfdcd_clk_src.clkr, 3500 [GCC_PCNOC_LPASS_CLK] = &gcc_pcnoc_lpass_clk.clkr, 3501 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3502 [GCC_Q6_AHB_CLK] = &gcc_q6_ahb_clk.clkr, 3503 [GCC_Q6_AHB_S_CLK] = &gcc_q6_ahb_s_clk.clkr, 3504 [GCC_Q6_AXIM_CLK] = &gcc_q6_axim_clk.clkr, 3505 [GCC_Q6_AXIM_CLK_SRC] = &gcc_q6_axim_clk_src.clkr, 3506 [GCC_Q6_AXIS_CLK] = &gcc_q6_axis_clk.clkr, 3507 [GCC_Q6_TSCTR_1TO2_CLK] = &gcc_q6_tsctr_1to2_clk.clkr, 3508 [GCC_Q6SS_ATBM_CLK] = &gcc_q6ss_atbm_clk.clkr, 3509 [GCC_Q6SS_PCLKDBG_CLK] = &gcc_q6ss_pclkdbg_clk.clkr, 3510 [GCC_Q6SS_TRIG_CLK] = &gcc_q6ss_trig_clk.clkr, 3511 [GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr, 3512 [GCC_QDSS_AT_CLK_SRC] = &gcc_qdss_at_clk_src.clkr, 3513 [GCC_QDSS_CFG_AHB_CLK] = &gcc_qdss_cfg_ahb_clk.clkr, 3514 [GCC_QDSS_DAP_AHB_CLK] = &gcc_qdss_dap_ahb_clk.clkr, 3515 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 3516 [GCC_QDSS_DAP_DIV_CLK_SRC] = &gcc_qdss_dap_div_clk_src.clkr, 3517 [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr, 3518 [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr, 3519 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr, 3520 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr, 3521 [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr, 3522 [GCC_QPIC_IO_MACRO_CLK_SRC] = &gcc_qpic_io_macro_clk_src.clkr, 3523 [GCC_QPIC_SLEEP_CLK] = &gcc_qpic_sleep_clk.clkr, 3524 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3525 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3526 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 3527 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr, 3528 [GCC_SNOC_LPASS_CFG_CLK] = &gcc_snoc_lpass_cfg_clk.clkr, 3529 [GCC_SNOC_NSSNOC_1_CLK] = &gcc_snoc_nssnoc_1_clk.clkr, 3530 [GCC_SNOC_NSSNOC_CLK] = &gcc_snoc_nssnoc_clk.clkr, 3531 [GCC_SNOC_PCIE3_1LANE_1_M_CLK] = &gcc_snoc_pcie3_1lane_1_m_clk.clkr, 3532 [GCC_SNOC_PCIE3_1LANE_1_S_CLK] = &gcc_snoc_pcie3_1lane_1_s_clk.clkr, 3533 [GCC_SNOC_PCIE3_1LANE_M_CLK] = &gcc_snoc_pcie3_1lane_m_clk.clkr, 3534 [GCC_SNOC_PCIE3_1LANE_S_CLK] = &gcc_snoc_pcie3_1lane_s_clk.clkr, 3535 [GCC_SNOC_PCIE3_2LANE_M_CLK] = &gcc_snoc_pcie3_2lane_m_clk.clkr, 3536 [GCC_SNOC_PCIE3_2LANE_S_CLK] = &gcc_snoc_pcie3_2lane_s_clk.clkr, 3537 [GCC_SNOC_USB_CLK] = &gcc_snoc_usb_clk.clkr, 3538 [GCC_SYS_NOC_AT_CLK] = &gcc_sys_noc_at_clk.clkr, 3539 [GCC_SYS_NOC_WCSS_AHB_CLK] = &gcc_sys_noc_wcss_ahb_clk.clkr, 3540 [GCC_SYSTEM_NOC_BFDCD_CLK_SRC] = &gcc_system_noc_bfdcd_clk_src.clkr, 3541 [GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr, 3542 [GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr, 3543 [GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr, 3544 [GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr, 3545 [GCC_UNIPHY_SYS_CLK_SRC] = &gcc_uniphy_sys_clk_src.clkr, 3546 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr, 3547 [GCC_USB0_AUX_CLK_SRC] = &gcc_usb0_aux_clk_src.clkr, 3548 [GCC_USB0_EUD_AT_CLK] = &gcc_usb0_eud_at_clk.clkr, 3549 [GCC_USB0_LFPS_CLK] = &gcc_usb0_lfps_clk.clkr, 3550 [GCC_USB0_LFPS_CLK_SRC] = &gcc_usb0_lfps_clk_src.clkr, 3551 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr, 3552 [GCC_USB0_MASTER_CLK_SRC] = &gcc_usb0_master_clk_src.clkr, 3553 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr, 3554 [GCC_USB0_MOCK_UTMI_CLK_SRC] = &gcc_usb0_mock_utmi_clk_src.clkr, 3555 [GCC_USB0_MOCK_UTMI_DIV_CLK_SRC] = &gcc_usb0_mock_utmi_div_clk_src.clkr, 3556 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr, 3557 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr, 3558 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr, 3559 [GCC_WCSS_AHB_CLK_SRC] = &gcc_wcss_ahb_clk_src.clkr, 3560 [GCC_WCSS_AXIM_CLK] = &gcc_wcss_axim_clk.clkr, 3561 [GCC_WCSS_AXIS_CLK] = &gcc_wcss_axis_clk.clkr, 3562 [GCC_WCSS_DBG_IFC_APB_BDG_CLK] = &gcc_wcss_dbg_ifc_apb_bdg_clk.clkr, 3563 [GCC_WCSS_DBG_IFC_APB_CLK] = &gcc_wcss_dbg_ifc_apb_clk.clkr, 3564 [GCC_WCSS_DBG_IFC_ATB_BDG_CLK] = &gcc_wcss_dbg_ifc_atb_bdg_clk.clkr, 3565 [GCC_WCSS_DBG_IFC_ATB_CLK] = &gcc_wcss_dbg_ifc_atb_clk.clkr, 3566 [GCC_WCSS_DBG_IFC_NTS_BDG_CLK] = &gcc_wcss_dbg_ifc_nts_bdg_clk.clkr, 3567 [GCC_WCSS_DBG_IFC_NTS_CLK] = &gcc_wcss_dbg_ifc_nts_clk.clkr, 3568 [GCC_WCSS_ECAHB_CLK] = &gcc_wcss_ecahb_clk.clkr, 3569 [GCC_WCSS_MST_ASYNC_BDG_CLK] = &gcc_wcss_mst_async_bdg_clk.clkr, 3570 [GCC_WCSS_SLV_ASYNC_BDG_CLK] = &gcc_wcss_slv_async_bdg_clk.clkr, 3571 [GCC_XO_CLK] = &gcc_xo_clk.clkr, 3572 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr, 3573 [GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr, 3574 [GCC_IM_SLEEP_CLK] = &gcc_im_sleep_clk.clkr, 3575 [GCC_NSSNOC_PCNOC_1_CLK] = &gcc_nssnoc_pcnoc_1_clk.clkr, 3576 [GCC_MEM_NOC_AHB_CLK] = &gcc_mem_noc_ahb_clk.clkr, 3577 [GCC_MEM_NOC_APSS_AXI_CLK] = &gcc_mem_noc_apss_axi_clk.clkr, 3578 [GCC_SNOC_QOSGEN_EXTREF_DIV_CLK_SRC] = &gcc_snoc_qosgen_extref_div_clk_src.clkr, 3579 [GCC_MEM_NOC_QOSGEN_EXTREF_CLK] = &gcc_mem_noc_qosgen_extref_clk.clkr, 3580 [GCC_PCIE3X2_PIPE_CLK_SRC] = &gcc_pcie3x2_pipe_clk_src.clkr, 3581 [GCC_PCIE3X1_0_PIPE_CLK_SRC] = &gcc_pcie3x1_0_pipe_clk_src.clkr, 3582 [GCC_PCIE3X1_1_PIPE_CLK_SRC] = &gcc_pcie3x1_1_pipe_clk_src.clkr, 3583 [GCC_USB0_PIPE_CLK_SRC] = &gcc_usb0_pipe_clk_src.clkr, 3584 }; 3585 3586 static const struct qcom_reset_map gcc_ipq5332_resets[] = { 3587 [GCC_ADSS_BCR] = { 0x1c000 }, 3588 [GCC_ADSS_PWM_CLK_ARES] = { 0x1c00c, 2 }, 3589 [GCC_AHB_CLK_ARES] = { 0x34024, 2 }, 3590 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x38000 }, 3591 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_GPLL0_CLK_ARES] = { 0x3800c, 2 }, 3592 [GCC_APSS_AHB_CLK_ARES] = { 0x24018, 2 }, 3593 [GCC_APSS_AXI_CLK_ARES] = { 0x2401c, 2 }, 3594 [GCC_BLSP1_AHB_CLK_ARES] = { 0x1008, 2 }, 3595 [GCC_BLSP1_BCR] = { 0x1000 }, 3596 [GCC_BLSP1_QUP1_BCR] = { 0x2000 }, 3597 [GCC_BLSP1_QUP1_I2C_APPS_CLK_ARES] = { 0x2024, 2 }, 3598 [GCC_BLSP1_QUP1_SPI_APPS_CLK_ARES] = { 0x2020, 2 }, 3599 [GCC_BLSP1_QUP2_BCR] = { 0x3000 }, 3600 [GCC_BLSP1_QUP2_I2C_APPS_CLK_ARES] = { 0x3024, 2 }, 3601 [GCC_BLSP1_QUP2_SPI_APPS_CLK_ARES] = { 0x3020, 2 }, 3602 [GCC_BLSP1_QUP3_BCR] = { 0x4000 }, 3603 [GCC_BLSP1_QUP3_I2C_APPS_CLK_ARES] = { 0x4024, 2 }, 3604 [GCC_BLSP1_QUP3_SPI_APPS_CLK_ARES] = { 0x4020, 2 }, 3605 [GCC_BLSP1_SLEEP_CLK_ARES] = { 0x1010, 2 }, 3606 [GCC_BLSP1_UART1_APPS_CLK_ARES] = { 0x2040, 2 }, 3607 [GCC_BLSP1_UART1_BCR] = { 0x2028 }, 3608 [GCC_BLSP1_UART2_APPS_CLK_ARES] = { 0x3040, 2 }, 3609 [GCC_BLSP1_UART2_BCR] = { 0x3028 }, 3610 [GCC_BLSP1_UART3_APPS_CLK_ARES] = { 0x4054, 2 }, 3611 [GCC_BLSP1_UART3_BCR] = { 0x4028 }, 3612 [GCC_CE_BCR] = { 0x18008 }, 3613 [GCC_CMN_BLK_BCR] = { 0x3a000 }, 3614 [GCC_CMN_LDO0_BCR] = { 0x1d000 }, 3615 [GCC_CMN_LDO1_BCR] = { 0x1d008 }, 3616 [GCC_DCC_BCR] = { 0x35000 }, 3617 [GCC_GP1_CLK_ARES] = { 0x8018, 2 }, 3618 [GCC_GP2_CLK_ARES] = { 0x9018, 2 }, 3619 [GCC_LPASS_BCR] = { 0x27000 }, 3620 [GCC_LPASS_CORE_AXIM_CLK_ARES] = { 0x27018, 2 }, 3621 [GCC_LPASS_SWAY_CLK_ARES] = { 0x27014, 2 }, 3622 [GCC_MDIOM_BCR] = { 0x12000 }, 3623 [GCC_MDIOS_BCR] = { 0x12008 }, 3624 [GCC_NSS_BCR] = { 0x17000 }, 3625 [GCC_NSS_TS_CLK_ARES] = { 0x17018, 2 }, 3626 [GCC_NSSCC_CLK_ARES] = { 0x17034, 2 }, 3627 [GCC_NSSCFG_CLK_ARES] = { 0x1702c, 2 }, 3628 [GCC_NSSNOC_ATB_CLK_ARES] = { 0x17014, 2 }, 3629 [GCC_NSSNOC_NSSCC_CLK_ARES] = { 0x17030, 2 }, 3630 [GCC_NSSNOC_QOSGEN_REF_CLK_ARES] = { 0x1701c, 2 }, 3631 [GCC_NSSNOC_SNOC_1_CLK_ARES] = { 0x1707c, 2 }, 3632 [GCC_NSSNOC_SNOC_CLK_ARES] = { 0x17028, 2 }, 3633 [GCC_NSSNOC_TIMEOUT_REF_CLK_ARES] = { 0x17020, 2 }, 3634 [GCC_NSSNOC_XO_DCD_CLK_ARES] = { 0x17074, 2 }, 3635 [GCC_PCIE3X1_0_AHB_CLK_ARES] = { 0x29030, 2 }, 3636 [GCC_PCIE3X1_0_AUX_CLK_ARES] = { 0x29070, 2 }, 3637 [GCC_PCIE3X1_0_AXI_M_CLK_ARES] = { 0x29038, 2 }, 3638 [GCC_PCIE3X1_0_AXI_S_BRIDGE_CLK_ARES] = { 0x29048, 2 }, 3639 [GCC_PCIE3X1_0_AXI_S_CLK_ARES] = { 0x29040, 2 }, 3640 [GCC_PCIE3X1_0_BCR] = { 0x29000 }, 3641 [GCC_PCIE3X1_0_LINK_DOWN_BCR] = { 0x29054 }, 3642 [GCC_PCIE3X1_0_PHY_BCR] = { 0x29060 }, 3643 [GCC_PCIE3X1_0_PHY_PHY_BCR] = { 0x2905c }, 3644 [GCC_PCIE3X1_1_AHB_CLK_ARES] = { 0x2a00c, 2 }, 3645 [GCC_PCIE3X1_1_AUX_CLK_ARES] = { 0x2a070, 2 }, 3646 [GCC_PCIE3X1_1_AXI_M_CLK_ARES] = { 0x2a014, 2 }, 3647 [GCC_PCIE3X1_1_AXI_S_BRIDGE_CLK_ARES] = { 0x2a024, 2 }, 3648 [GCC_PCIE3X1_1_AXI_S_CLK_ARES] = { 0x2a01c, 2 }, 3649 [GCC_PCIE3X1_1_BCR] = { 0x2a000 }, 3650 [GCC_PCIE3X1_1_LINK_DOWN_BCR] = { 0x2a028 }, 3651 [GCC_PCIE3X1_1_PHY_BCR] = { 0x2a030 }, 3652 [GCC_PCIE3X1_1_PHY_PHY_BCR] = { 0x2a02c }, 3653 [GCC_PCIE3X1_PHY_AHB_CLK_ARES] = { 0x29078, 2 }, 3654 [GCC_PCIE3X2_AHB_CLK_ARES] = { 0x28030, 2 }, 3655 [GCC_PCIE3X2_AUX_CLK_ARES] = { 0x28070, 2 }, 3656 [GCC_PCIE3X2_AXI_M_CLK_ARES] = { 0x28038, 2 }, 3657 [GCC_PCIE3X2_AXI_S_BRIDGE_CLK_ARES] = { 0x28048, 2 }, 3658 [GCC_PCIE3X2_AXI_S_CLK_ARES] = { 0x28040, 2 }, 3659 [GCC_PCIE3X2_BCR] = { 0x28000 }, 3660 [GCC_PCIE3X2_LINK_DOWN_BCR] = { 0x28054 }, 3661 [GCC_PCIE3X2_PHY_AHB_CLK_ARES] = { 0x28080, 2 }, 3662 [GCC_PCIE3X2_PHY_BCR] = { 0x28060 }, 3663 [GCC_PCIE3X2PHY_PHY_BCR] = { 0x2805c }, 3664 [GCC_PCNOC_BCR] = { 0x31000 }, 3665 [GCC_PCNOC_LPASS_CLK_ARES] = { 0x31020, 2 }, 3666 [GCC_PRNG_AHB_CLK_ARES] = { 0x13024, 2 }, 3667 [GCC_PRNG_BCR] = { 0x13020 }, 3668 [GCC_Q6_AHB_CLK_ARES] = { 0x25014, 2 }, 3669 [GCC_Q6_AHB_S_CLK_ARES] = { 0x25018, 2 }, 3670 [GCC_Q6_AXIM_CLK_ARES] = { 0x2500c, 2 }, 3671 [GCC_Q6_AXIS_CLK_ARES] = { 0x25010, 2 }, 3672 [GCC_Q6_TSCTR_1TO2_CLK_ARES] = { 0x25020, 2 }, 3673 [GCC_Q6SS_ATBM_CLK_ARES] = { 0x2501c, 2 }, 3674 [GCC_Q6SS_PCLKDBG_CLK_ARES] = { 0x25024, 2 }, 3675 [GCC_Q6SS_TRIG_CLK_ARES] = { 0x250a0, 2 }, 3676 [GCC_QDSS_APB2JTAG_CLK_ARES] = { 0x2d060, 2 }, 3677 [GCC_QDSS_AT_CLK_ARES] = { 0x2d038, 2 }, 3678 [GCC_QDSS_BCR] = { 0x2d000 }, 3679 [GCC_QDSS_CFG_AHB_CLK_ARES] = { 0x2d06c, 2 }, 3680 [GCC_QDSS_DAP_AHB_CLK_ARES] = { 0x2d068, 2 }, 3681 [GCC_QDSS_DAP_CLK_ARES] = { 0x2d05c, 2 }, 3682 [GCC_QDSS_ETR_USB_CLK_ARES] = { 0x2d064, 2 }, 3683 [GCC_QDSS_EUD_AT_CLK_ARES] = { 0x2d070, 2 }, 3684 [GCC_QDSS_STM_CLK_ARES] = { 0x2d040, 2 }, 3685 [GCC_QDSS_TRACECLKIN_CLK_ARES] = { 0x2d044, 2 }, 3686 [GCC_QDSS_TS_CLK_ARES] = { 0x2d078, 2 }, 3687 [GCC_QDSS_TSCTR_DIV16_CLK_ARES] = { 0x2d058, 2 }, 3688 [GCC_QDSS_TSCTR_DIV2_CLK_ARES] = { 0x2d048, 2 }, 3689 [GCC_QDSS_TSCTR_DIV3_CLK_ARES] = { 0x2d04c, 2 }, 3690 [GCC_QDSS_TSCTR_DIV4_CLK_ARES] = { 0x2d050, 2 }, 3691 [GCC_QDSS_TSCTR_DIV8_CLK_ARES] = { 0x2d054, 2 }, 3692 [GCC_QPIC_AHB_CLK_ARES] = { 0x32010, 2 }, 3693 [GCC_QPIC_CLK_ARES] = { 0x32014, 2 }, 3694 [GCC_QPIC_BCR] = { 0x32000 }, 3695 [GCC_QPIC_IO_MACRO_CLK_ARES] = { 0x3200c, 2 }, 3696 [GCC_QPIC_SLEEP_CLK_ARES] = { 0x3201c, 2 }, 3697 [GCC_QUSB2_0_PHY_BCR] = { 0x2c068 }, 3698 [GCC_SDCC1_AHB_CLK_ARES] = { 0x33034, 2 }, 3699 [GCC_SDCC1_APPS_CLK_ARES] = { 0x3302c, 2 }, 3700 [GCC_SDCC_BCR] = { 0x33000 }, 3701 [GCC_SNOC_BCR] = { 0x2e000 }, 3702 [GCC_SNOC_LPASS_CFG_CLK_ARES] = { 0x2e028, 2 }, 3703 [GCC_SNOC_NSSNOC_1_CLK_ARES] = { 0x17090, 2 }, 3704 [GCC_SNOC_NSSNOC_CLK_ARES] = { 0x17084, 2 }, 3705 [GCC_SYS_NOC_QDSS_STM_AXI_CLK_ARES] = { 0x2e034, 2 }, 3706 [GCC_SYS_NOC_WCSS_AHB_CLK_ARES] = { 0x2e030, 2 }, 3707 [GCC_UNIPHY0_AHB_CLK_ARES] = { 0x16010, 2 }, 3708 [GCC_UNIPHY0_BCR] = { 0x16000 }, 3709 [GCC_UNIPHY0_SYS_CLK_ARES] = { 0x1600c, 2 }, 3710 [GCC_UNIPHY1_AHB_CLK_ARES] = { 0x1601c, 2 }, 3711 [GCC_UNIPHY1_BCR] = { 0x16014 }, 3712 [GCC_UNIPHY1_SYS_CLK_ARES] = { 0x16018, 2 }, 3713 [GCC_USB0_AUX_CLK_ARES] = { 0x2c050, 2 }, 3714 [GCC_USB0_EUD_AT_CLK_ARES] = { 0x30004, 2 }, 3715 [GCC_USB0_LFPS_CLK_ARES] = { 0x2c090, 2 }, 3716 [GCC_USB0_MASTER_CLK_ARES] = { 0x2c048, 2 }, 3717 [GCC_USB0_MOCK_UTMI_CLK_ARES] = { 0x2c054, 2 }, 3718 [GCC_USB0_PHY_BCR] = { 0x2c06c }, 3719 [GCC_USB0_PHY_CFG_AHB_CLK_ARES] = { 0x2c05c, 2 }, 3720 [GCC_USB0_SLEEP_CLK_ARES] = { 0x2c058, 2 }, 3721 [GCC_USB3PHY_0_PHY_BCR] = { 0x2c070 }, 3722 [GCC_USB_BCR] = { 0x2c000 }, 3723 [GCC_WCSS_AXIM_CLK_ARES] = { 0x2505c, 2 }, 3724 [GCC_WCSS_AXIS_CLK_ARES] = { 0x25060, 2 }, 3725 [GCC_WCSS_BCR] = { 0x18004 }, 3726 [GCC_WCSS_DBG_IFC_APB_BDG_CLK_ARES] = { 0x25048, 2 }, 3727 [GCC_WCSS_DBG_IFC_APB_CLK_ARES] = { 0x25038, 2 }, 3728 [GCC_WCSS_DBG_IFC_ATB_BDG_CLK_ARES] = { 0x2504c, 2 }, 3729 [GCC_WCSS_DBG_IFC_ATB_CLK_ARES] = { 0x2503c, 2 }, 3730 [GCC_WCSS_DBG_IFC_NTS_BDG_CLK_ARES] = { 0x25050, 2 }, 3731 [GCC_WCSS_DBG_IFC_NTS_CLK_ARES] = { 0x25040, 2 }, 3732 [GCC_WCSS_ECAHB_CLK_ARES] = { 0x25058, 2 }, 3733 [GCC_WCSS_MST_ASYNC_BDG_CLK_ARES] = { 0x2e0b0, 2 }, 3734 [GCC_WCSS_Q6_BCR] = { 0x18000 }, 3735 [GCC_WCSS_SLV_ASYNC_BDG_CLK_ARES] = { 0x2e0b4, 2 }, 3736 [GCC_XO_CLK_ARES] = { 0x34018, 2 }, 3737 [GCC_XO_DIV4_CLK_ARES] = { 0x3401c, 2 }, 3738 [GCC_Q6SS_DBG_ARES] = { 0x25094 }, 3739 [GCC_WCSS_DBG_BDG_ARES] = { 0x25098, 0 }, 3740 [GCC_WCSS_DBG_ARES] = { 0x25098, 1 }, 3741 [GCC_WCSS_AXI_S_ARES] = { 0x25098, 2 }, 3742 [GCC_WCSS_AXI_M_ARES] = { 0x25098, 3 }, 3743 [GCC_WCSSAON_ARES] = { 0x2509C }, 3744 [GCC_PCIE3X2_PIPE_ARES] = { 0x28058, 0 }, 3745 [GCC_PCIE3X2_CORE_STICKY_ARES] = { 0x28058, 1 }, 3746 [GCC_PCIE3X2_AXI_S_STICKY_ARES] = { 0x28058, 2 }, 3747 [GCC_PCIE3X2_AXI_M_STICKY_ARES] = { 0x28058, 3 }, 3748 [GCC_PCIE3X1_0_PIPE_ARES] = { 0x29058, 0 }, 3749 [GCC_PCIE3X1_0_CORE_STICKY_ARES] = { 0x29058, 1 }, 3750 [GCC_PCIE3X1_0_AXI_S_STICKY_ARES] = { 0x29058, 2 }, 3751 [GCC_PCIE3X1_0_AXI_M_STICKY_ARES] = { 0x29058, 3 }, 3752 [GCC_PCIE3X1_1_PIPE_ARES] = { 0x2a058, 0 }, 3753 [GCC_PCIE3X1_1_CORE_STICKY_ARES] = { 0x2a058, 1 }, 3754 [GCC_PCIE3X1_1_AXI_S_STICKY_ARES] = { 0x2a058, 2 }, 3755 [GCC_PCIE3X1_1_AXI_M_STICKY_ARES] = { 0x2a058, 3 }, 3756 [GCC_IM_SLEEP_CLK_ARES] = { 0x34020, 2 }, 3757 [GCC_NSSNOC_PCNOC_1_CLK_ARES] = { 0x17080, 2 }, 3758 [GCC_UNIPHY0_XPCS_ARES] = { 0x16050 }, 3759 [GCC_UNIPHY1_XPCS_ARES] = { 0x16060 }, 3760 }; 3761 3762 static const struct regmap_config gcc_ipq5332_regmap_config = { 3763 .reg_bits = 32, 3764 .reg_stride = 4, 3765 .val_bits = 32, 3766 .max_register = 0x3f024, 3767 .fast_io = true, 3768 }; 3769 3770 static struct clk_hw *gcc_ipq5332_hws[] = { 3771 &gpll0_div2.hw, 3772 &gcc_xo_div4_clk_src.hw, 3773 &gcc_system_noc_bfdcd_div2_clk_src.hw, 3774 &gcc_qdss_tsctr_div2_clk_src.hw, 3775 &gcc_qdss_tsctr_div3_clk_src.hw, 3776 &gcc_qdss_tsctr_div4_clk_src.hw, 3777 &gcc_qdss_tsctr_div8_clk_src.hw, 3778 &gcc_qdss_tsctr_div16_clk_src.hw, 3779 &gcc_eud_at_div_clk_src.hw, 3780 }; 3781 3782 static const struct qcom_cc_desc gcc_ipq5332_desc = { 3783 .config = &gcc_ipq5332_regmap_config, 3784 .clks = gcc_ipq5332_clocks, 3785 .num_clks = ARRAY_SIZE(gcc_ipq5332_clocks), 3786 .resets = gcc_ipq5332_resets, 3787 .num_resets = ARRAY_SIZE(gcc_ipq5332_resets), 3788 .clk_hws = gcc_ipq5332_hws, 3789 .num_clk_hws = ARRAY_SIZE(gcc_ipq5332_hws), 3790 }; 3791 3792 static int gcc_ipq5332_probe(struct platform_device *pdev) 3793 { 3794 return qcom_cc_probe(pdev, &gcc_ipq5332_desc); 3795 } 3796 3797 static const struct of_device_id gcc_ipq5332_match_table[] = { 3798 { .compatible = "qcom,ipq5332-gcc" }, 3799 { } 3800 }; 3801 MODULE_DEVICE_TABLE(of, gcc_ipq5332_match_table); 3802 3803 static struct platform_driver gcc_ipq5332_driver = { 3804 .probe = gcc_ipq5332_probe, 3805 .driver = { 3806 .name = "gcc-ipq5332", 3807 .of_match_table = gcc_ipq5332_match_table, 3808 }, 3809 }; 3810 3811 static int __init gcc_ipq5332_init(void) 3812 { 3813 return platform_driver_register(&gcc_ipq5332_driver); 3814 } 3815 core_initcall(gcc_ipq5332_init); 3816 3817 static void __exit gcc_ipq5332_exit(void) 3818 { 3819 platform_driver_unregister(&gcc_ipq5332_driver); 3820 } 3821 module_exit(gcc_ipq5332_exit); 3822 3823 MODULE_DESCRIPTION("QTI GCC IPQ5332 Driver"); 3824 MODULE_LICENSE("GPL"); 3825