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,qdu1000-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 P_BI_TCXO, 24 P_GCC_GPLL0_OUT_EVEN, 25 P_GCC_GPLL0_OUT_MAIN, 26 P_GCC_GPLL1_OUT_MAIN, 27 P_GCC_GPLL2_OUT_MAIN, 28 P_GCC_GPLL3_OUT_MAIN, 29 P_GCC_GPLL4_OUT_MAIN, 30 P_GCC_GPLL5_OUT_MAIN, 31 P_GCC_GPLL6_OUT_MAIN, 32 P_GCC_GPLL7_OUT_MAIN, 33 P_GCC_GPLL8_OUT_MAIN, 34 P_PCIE_0_PHY_AUX_CLK, 35 P_PCIE_0_PIPE_CLK, 36 P_SLEEP_CLK, 37 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 38 }; 39 40 enum { 41 DT_TCXO_IDX, 42 DT_SLEEP_CLK_IDX, 43 DT_PCIE_0_PIPE_CLK_IDX, 44 DT_PCIE_0_PHY_AUX_CLK_IDX, 45 DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX, 46 }; 47 48 static struct clk_alpha_pll gcc_gpll0 = { 49 .offset = 0x0, 50 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 51 .clkr = { 52 .enable_reg = 0x62018, 53 .enable_mask = BIT(0), 54 .hw.init = &(const struct clk_init_data) { 55 .name = "gcc_gpll0", 56 .parent_data = &(const struct clk_parent_data) { 57 .index = DT_TCXO_IDX, 58 }, 59 .num_parents = 1, 60 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 61 }, 62 }, 63 }; 64 65 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = { 66 { 0x1, 2 } 67 }; 68 69 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = { 70 .offset = 0x0, 71 .post_div_shift = 10, 72 .post_div_table = post_div_table_gcc_gpll0_out_even, 73 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 74 .width = 4, 75 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 76 .clkr.hw.init = &(const struct clk_init_data) { 77 .name = "gcc_gpll0_out_even", 78 .parent_hws = (const struct clk_hw*[]) { 79 &gcc_gpll0.clkr.hw, 80 }, 81 .num_parents = 1, 82 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 83 }, 84 }; 85 86 static struct clk_alpha_pll gcc_gpll1 = { 87 .offset = 0x1000, 88 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 89 .clkr = { 90 .enable_reg = 0x62018, 91 .enable_mask = BIT(1), 92 .hw.init = &(const struct clk_init_data) { 93 .name = "gcc_gpll1", 94 .parent_data = &(const struct clk_parent_data) { 95 .index = DT_TCXO_IDX, 96 }, 97 .num_parents = 1, 98 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 99 }, 100 }, 101 }; 102 103 static struct clk_alpha_pll_postdiv gcc_gpll1_out_even = { 104 .offset = 0x1000, 105 .post_div_shift = 10, 106 .post_div_table = post_div_table_gcc_gpll0_out_even, 107 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 108 .width = 4, 109 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 110 .clkr.hw.init = &(const struct clk_init_data) { 111 .name = "gcc_gpll1_out_even", 112 .parent_hws = (const struct clk_hw*[]) { 113 &gcc_gpll1.clkr.hw, 114 }, 115 .num_parents = 1, 116 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 117 }, 118 }; 119 120 static struct clk_alpha_pll gcc_gpll2 = { 121 .offset = 0x2000, 122 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 123 .clkr = { 124 .enable_reg = 0x62018, 125 .enable_mask = BIT(2), 126 .hw.init = &(const struct clk_init_data) { 127 .name = "gcc_gpll2", 128 .parent_data = &(const struct clk_parent_data) { 129 .index = DT_TCXO_IDX, 130 }, 131 .num_parents = 1, 132 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 133 }, 134 }, 135 }; 136 137 static struct clk_alpha_pll_postdiv gcc_gpll2_out_even = { 138 .offset = 0x2000, 139 .post_div_shift = 10, 140 .post_div_table = post_div_table_gcc_gpll0_out_even, 141 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 142 .width = 4, 143 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 144 .clkr.hw.init = &(const struct clk_init_data) { 145 .name = "gcc_gpll2_out_even", 146 .parent_hws = (const struct clk_hw*[]) { 147 &gcc_gpll2.clkr.hw, 148 }, 149 .num_parents = 1, 150 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 151 }, 152 }; 153 154 static struct clk_alpha_pll gcc_gpll3 = { 155 .offset = 0x3000, 156 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 157 .clkr = { 158 .enable_reg = 0x62018, 159 .enable_mask = BIT(3), 160 .hw.init = &(const struct clk_init_data) { 161 .name = "gcc_gpll3", 162 .parent_data = &(const struct clk_parent_data) { 163 .index = DT_TCXO_IDX, 164 }, 165 .num_parents = 1, 166 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 167 }, 168 }, 169 }; 170 171 static struct clk_alpha_pll gcc_gpll4 = { 172 .offset = 0x4000, 173 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 174 .clkr = { 175 .enable_reg = 0x62018, 176 .enable_mask = BIT(4), 177 .hw.init = &(const struct clk_init_data) { 178 .name = "gcc_gpll4", 179 .parent_data = &(const struct clk_parent_data) { 180 .index = DT_TCXO_IDX, 181 }, 182 .num_parents = 1, 183 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 184 }, 185 }, 186 }; 187 188 static struct clk_alpha_pll gcc_gpll5 = { 189 .offset = 0x5000, 190 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 191 .clkr = { 192 .enable_reg = 0x62018, 193 .enable_mask = BIT(5), 194 .hw.init = &(const struct clk_init_data) { 195 .name = "gcc_gpll5", 196 .parent_data = &(const struct clk_parent_data) { 197 .index = DT_TCXO_IDX, 198 }, 199 .num_parents = 1, 200 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 201 }, 202 }, 203 }; 204 205 static struct clk_alpha_pll_postdiv gcc_gpll5_out_even = { 206 .offset = 0x5000, 207 .post_div_shift = 10, 208 .post_div_table = post_div_table_gcc_gpll0_out_even, 209 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 210 .width = 4, 211 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 212 .clkr.hw.init = &(const struct clk_init_data) { 213 .name = "gcc_gpll5_out_even", 214 .parent_hws = (const struct clk_hw*[]) { 215 &gcc_gpll5.clkr.hw, 216 }, 217 .num_parents = 1, 218 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 219 }, 220 }; 221 222 static struct clk_alpha_pll gcc_gpll6 = { 223 .offset = 0x6000, 224 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 225 .clkr = { 226 .enable_reg = 0x62018, 227 .enable_mask = BIT(6), 228 .hw.init = &(const struct clk_init_data) { 229 .name = "gcc_gpll6", 230 .parent_data = &(const struct clk_parent_data) { 231 .index = DT_TCXO_IDX, 232 }, 233 .num_parents = 1, 234 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 235 }, 236 }, 237 }; 238 239 static struct clk_alpha_pll gcc_gpll7 = { 240 .offset = 0x7000, 241 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 242 .clkr = { 243 .enable_reg = 0x62018, 244 .enable_mask = BIT(7), 245 .hw.init = &(const struct clk_init_data) { 246 .name = "gcc_gpll7", 247 .parent_data = &(const struct clk_parent_data) { 248 .index = DT_TCXO_IDX, 249 }, 250 .num_parents = 1, 251 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 252 }, 253 }, 254 }; 255 256 static struct clk_alpha_pll gcc_gpll8 = { 257 .offset = 0x8000, 258 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 259 .clkr = { 260 .enable_reg = 0x62018, 261 .enable_mask = BIT(8), 262 .hw.init = &(const struct clk_init_data) { 263 .name = "gcc_gpll8", 264 .parent_data = &(const struct clk_parent_data) { 265 .index = DT_TCXO_IDX, 266 }, 267 .num_parents = 1, 268 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 269 }, 270 }, 271 }; 272 273 static const struct parent_map gcc_parent_map_0[] = { 274 { P_BI_TCXO, 0 }, 275 { P_GCC_GPLL0_OUT_MAIN, 1 }, 276 { P_GCC_GPLL0_OUT_EVEN, 6 }, 277 }; 278 279 static const struct clk_parent_data gcc_parent_data_0[] = { 280 { .index = DT_TCXO_IDX }, 281 { .hw = &gcc_gpll0.clkr.hw }, 282 { .hw = &gcc_gpll0_out_even.clkr.hw }, 283 }; 284 285 static const struct parent_map gcc_parent_map_1[] = { 286 { P_BI_TCXO, 0 }, 287 { P_GCC_GPLL0_OUT_MAIN, 1 }, 288 { P_SLEEP_CLK, 5 }, 289 { P_GCC_GPLL0_OUT_EVEN, 6 }, 290 }; 291 292 static const struct clk_parent_data gcc_parent_data_1[] = { 293 { .index = DT_TCXO_IDX }, 294 { .hw = &gcc_gpll0.clkr.hw }, 295 { .index = DT_SLEEP_CLK_IDX }, 296 { .hw = &gcc_gpll0_out_even.clkr.hw }, 297 }; 298 299 static const struct parent_map gcc_parent_map_2[] = { 300 { P_BI_TCXO, 0 }, 301 { P_GCC_GPLL0_OUT_MAIN, 1 }, 302 { P_GCC_GPLL5_OUT_MAIN, 3 }, 303 { P_GCC_GPLL4_OUT_MAIN, 5 }, 304 }; 305 306 static const struct clk_parent_data gcc_parent_data_2[] = { 307 { .index = DT_TCXO_IDX }, 308 { .hw = &gcc_gpll0.clkr.hw }, 309 { .hw = &gcc_gpll5.clkr.hw }, 310 { .hw = &gcc_gpll4.clkr.hw }, 311 }; 312 313 static const struct parent_map gcc_parent_map_3[] = { 314 { P_BI_TCXO, 0 }, 315 { P_SLEEP_CLK, 5 }, 316 }; 317 318 static const struct clk_parent_data gcc_parent_data_3[] = { 319 { .index = DT_TCXO_IDX }, 320 { .index = DT_SLEEP_CLK_IDX }, 321 }; 322 323 static const struct parent_map gcc_parent_map_4[] = { 324 { P_BI_TCXO, 0 }, 325 { P_GCC_GPLL0_OUT_MAIN, 1 }, 326 { P_GCC_GPLL2_OUT_MAIN, 2 }, 327 { P_GCC_GPLL5_OUT_MAIN, 3 }, 328 { P_GCC_GPLL1_OUT_MAIN, 4 }, 329 { P_GCC_GPLL4_OUT_MAIN, 5 }, 330 { P_GCC_GPLL3_OUT_MAIN, 6 }, 331 }; 332 333 static const struct clk_parent_data gcc_parent_data_4[] = { 334 { .index = DT_TCXO_IDX }, 335 { .hw = &gcc_gpll0.clkr.hw }, 336 { .hw = &gcc_gpll2.clkr.hw }, 337 { .hw = &gcc_gpll5.clkr.hw }, 338 { .hw = &gcc_gpll1.clkr.hw }, 339 { .hw = &gcc_gpll4.clkr.hw }, 340 { .hw = &gcc_gpll3.clkr.hw }, 341 }; 342 343 static const struct parent_map gcc_parent_map_5[] = { 344 { P_BI_TCXO, 0 }, 345 { P_GCC_GPLL0_OUT_MAIN, 1 }, 346 { P_GCC_GPLL2_OUT_MAIN, 2 }, 347 { P_GCC_GPLL6_OUT_MAIN, 3 }, 348 { P_GCC_GPLL1_OUT_MAIN, 4 }, 349 { P_GCC_GPLL4_OUT_MAIN, 5 }, 350 { P_GCC_GPLL3_OUT_MAIN, 6 }, 351 }; 352 353 static const struct clk_parent_data gcc_parent_data_5[] = { 354 { .index = DT_TCXO_IDX }, 355 { .hw = &gcc_gpll0.clkr.hw }, 356 { .hw = &gcc_gpll2.clkr.hw }, 357 { .hw = &gcc_gpll6.clkr.hw }, 358 { .hw = &gcc_gpll1.clkr.hw }, 359 { .hw = &gcc_gpll4.clkr.hw }, 360 { .hw = &gcc_gpll3.clkr.hw }, 361 }; 362 363 static const struct parent_map gcc_parent_map_6[] = { 364 { P_PCIE_0_PHY_AUX_CLK, 0 }, 365 { P_BI_TCXO, 2 }, 366 }; 367 368 static const struct clk_parent_data gcc_parent_data_6[] = { 369 { .index = DT_PCIE_0_PHY_AUX_CLK_IDX }, 370 { .index = DT_TCXO_IDX }, 371 }; 372 373 static const struct parent_map gcc_parent_map_8[] = { 374 { P_BI_TCXO, 0 }, 375 { P_GCC_GPLL0_OUT_MAIN, 1 }, 376 { P_GCC_GPLL8_OUT_MAIN, 2 }, 377 { P_GCC_GPLL5_OUT_MAIN, 3 }, 378 { P_GCC_GPLL4_OUT_MAIN, 5 }, 379 }; 380 381 static const struct clk_parent_data gcc_parent_data_8[] = { 382 { .index = DT_TCXO_IDX }, 383 { .hw = &gcc_gpll0.clkr.hw }, 384 { .hw = &gcc_gpll8.clkr.hw }, 385 { .hw = &gcc_gpll5.clkr.hw }, 386 { .hw = &gcc_gpll4.clkr.hw }, 387 }; 388 389 static const struct parent_map gcc_parent_map_9[] = { 390 { P_BI_TCXO, 0 }, 391 { P_GCC_GPLL0_OUT_MAIN, 1 }, 392 { P_GCC_GPLL2_OUT_MAIN, 2 }, 393 { P_GCC_GPLL5_OUT_MAIN, 3 }, 394 { P_GCC_GPLL7_OUT_MAIN, 4 }, 395 { P_GCC_GPLL4_OUT_MAIN, 5 }, 396 }; 397 398 static const struct clk_parent_data gcc_parent_data_9[] = { 399 { .index = DT_TCXO_IDX }, 400 { .hw = &gcc_gpll0.clkr.hw }, 401 { .hw = &gcc_gpll2.clkr.hw }, 402 { .hw = &gcc_gpll5.clkr.hw }, 403 { .hw = &gcc_gpll7.clkr.hw }, 404 { .hw = &gcc_gpll4.clkr.hw }, 405 }; 406 407 static const struct parent_map gcc_parent_map_10[] = { 408 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 }, 409 { P_BI_TCXO, 2 }, 410 }; 411 412 static const struct clk_parent_data gcc_parent_data_10[] = { 413 { .index = DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX }, 414 { .index = DT_TCXO_IDX }, 415 }; 416 417 static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = { 418 .reg = 0x9d080, 419 .shift = 0, 420 .width = 2, 421 .parent_map = gcc_parent_map_6, 422 .clkr = { 423 .hw.init = &(const struct clk_init_data) { 424 .name = "gcc_pcie_0_phy_aux_clk_src", 425 .parent_data = gcc_parent_data_6, 426 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 427 .ops = &clk_regmap_mux_closest_ops, 428 }, 429 }, 430 }; 431 432 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = { 433 .reg = 0x9d064, 434 .clkr = { 435 .hw.init = &(const struct clk_init_data) { 436 .name = "gcc_pcie_0_pipe_clk_src", 437 .parent_data = &(const struct clk_parent_data){ 438 .index = DT_PCIE_0_PIPE_CLK_IDX, 439 }, 440 .num_parents = 1, 441 .ops = &clk_regmap_phy_mux_ops, 442 }, 443 }, 444 }; 445 446 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = { 447 .reg = 0x4906c, 448 .shift = 0, 449 .width = 2, 450 .parent_map = gcc_parent_map_10, 451 .clkr = { 452 .hw.init = &(const struct clk_init_data) { 453 .name = "gcc_usb3_prim_phy_pipe_clk_src", 454 .parent_data = gcc_parent_data_10, 455 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 456 .ops = &clk_regmap_mux_closest_ops, 457 }, 458 }, 459 }; 460 461 static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_dma_clk_src[] = { 462 F(466500000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0), 463 F(500000000, P_GCC_GPLL2_OUT_MAIN, 2, 0, 0), 464 { } 465 }; 466 467 static struct clk_rcg2 gcc_aggre_noc_ecpri_dma_clk_src = { 468 .cmd_rcgr = 0x92020, 469 .mnd_width = 0, 470 .hid_width = 5, 471 .parent_map = gcc_parent_map_4, 472 .freq_tbl = ftbl_gcc_aggre_noc_ecpri_dma_clk_src, 473 .clkr.hw.init = &(const struct clk_init_data) { 474 .name = "gcc_aggre_noc_ecpri_dma_clk_src", 475 .parent_data = gcc_parent_data_4, 476 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 477 .ops = &clk_rcg2_ops, 478 }, 479 }; 480 481 static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_gsi_clk_src[] = { 482 F(250000000, P_GCC_GPLL2_OUT_MAIN, 4, 0, 0), 483 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 484 { } 485 }; 486 487 static struct clk_rcg2 gcc_aggre_noc_ecpri_gsi_clk_src = { 488 .cmd_rcgr = 0x92038, 489 .mnd_width = 0, 490 .hid_width = 5, 491 .parent_map = gcc_parent_map_5, 492 .freq_tbl = ftbl_gcc_aggre_noc_ecpri_gsi_clk_src, 493 .clkr.hw.init = &(const struct clk_init_data) { 494 .name = "gcc_aggre_noc_ecpri_gsi_clk_src", 495 .parent_data = gcc_parent_data_5, 496 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 497 .ops = &clk_rcg2_ops, 498 }, 499 }; 500 501 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 502 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 503 { } 504 }; 505 506 static struct clk_rcg2 gcc_gp1_clk_src = { 507 .cmd_rcgr = 0x74004, 508 .mnd_width = 16, 509 .hid_width = 5, 510 .parent_map = gcc_parent_map_1, 511 .freq_tbl = ftbl_gcc_gp1_clk_src, 512 .clkr.hw.init = &(const struct clk_init_data) { 513 .name = "gcc_gp1_clk_src", 514 .parent_data = gcc_parent_data_1, 515 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 516 .ops = &clk_rcg2_ops, 517 }, 518 }; 519 520 static struct clk_rcg2 gcc_gp2_clk_src = { 521 .cmd_rcgr = 0x75004, 522 .mnd_width = 16, 523 .hid_width = 5, 524 .parent_map = gcc_parent_map_1, 525 .freq_tbl = ftbl_gcc_gp1_clk_src, 526 .clkr.hw.init = &(const struct clk_init_data) { 527 .name = "gcc_gp2_clk_src", 528 .parent_data = gcc_parent_data_1, 529 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 530 .ops = &clk_rcg2_ops, 531 }, 532 }; 533 534 static struct clk_rcg2 gcc_gp3_clk_src = { 535 .cmd_rcgr = 0x76004, 536 .mnd_width = 16, 537 .hid_width = 5, 538 .parent_map = gcc_parent_map_1, 539 .freq_tbl = ftbl_gcc_gp1_clk_src, 540 .clkr.hw.init = &(const struct clk_init_data) { 541 .name = "gcc_gp3_clk_src", 542 .parent_data = gcc_parent_data_1, 543 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 544 .ops = &clk_rcg2_ops, 545 }, 546 }; 547 548 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 549 F(19200000, P_BI_TCXO, 1, 0, 0), 550 { } 551 }; 552 553 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 554 .cmd_rcgr = 0x9d068, 555 .mnd_width = 16, 556 .hid_width = 5, 557 .parent_map = gcc_parent_map_3, 558 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 559 .clkr.hw.init = &(const struct clk_init_data) { 560 .name = "gcc_pcie_0_aux_clk_src", 561 .parent_data = gcc_parent_data_3, 562 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 563 .ops = &clk_rcg2_ops, 564 }, 565 }; 566 567 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = { 568 F(19200000, P_BI_TCXO, 1, 0, 0), 569 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 570 { } 571 }; 572 573 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = { 574 .cmd_rcgr = 0x9d04c, 575 .mnd_width = 0, 576 .hid_width = 5, 577 .parent_map = gcc_parent_map_0, 578 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src, 579 .clkr.hw.init = &(const struct clk_init_data) { 580 .name = "gcc_pcie_0_phy_rchng_clk_src", 581 .parent_data = gcc_parent_data_0, 582 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 583 .ops = &clk_rcg2_ops, 584 }, 585 }; 586 587 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 588 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0), 589 { } 590 }; 591 592 static struct clk_rcg2 gcc_pdm2_clk_src = { 593 .cmd_rcgr = 0x43010, 594 .mnd_width = 0, 595 .hid_width = 5, 596 .parent_map = gcc_parent_map_0, 597 .freq_tbl = ftbl_gcc_pdm2_clk_src, 598 .clkr.hw.init = &(const struct clk_init_data) { 599 .name = "gcc_pdm2_clk_src", 600 .parent_data = gcc_parent_data_0, 601 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 602 .ops = &clk_rcg2_ops, 603 }, 604 }; 605 606 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 607 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 608 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 609 F(19200000, P_BI_TCXO, 1, 0, 0), 610 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 611 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 612 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 613 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 614 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 615 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 616 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 617 { } 618 }; 619 620 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 621 .name = "gcc_qupv3_wrap0_s0_clk_src", 622 .parent_data = gcc_parent_data_0, 623 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 624 .ops = &clk_rcg2_ops, 625 }; 626 627 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 628 .cmd_rcgr = 0x27154, 629 .mnd_width = 16, 630 .hid_width = 5, 631 .parent_map = gcc_parent_map_0, 632 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 633 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 634 }; 635 636 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 637 .name = "gcc_qupv3_wrap0_s1_clk_src", 638 .parent_data = gcc_parent_data_0, 639 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 640 .ops = &clk_rcg2_ops, 641 }; 642 643 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 644 .cmd_rcgr = 0x27288, 645 .mnd_width = 16, 646 .hid_width = 5, 647 .parent_map = gcc_parent_map_0, 648 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 649 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 650 }; 651 652 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 653 .name = "gcc_qupv3_wrap0_s2_clk_src", 654 .parent_data = gcc_parent_data_0, 655 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 656 .ops = &clk_rcg2_ops, 657 }; 658 659 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 660 .cmd_rcgr = 0x273bc, 661 .mnd_width = 16, 662 .hid_width = 5, 663 .parent_map = gcc_parent_map_0, 664 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 665 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 666 }; 667 668 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 669 .name = "gcc_qupv3_wrap0_s3_clk_src", 670 .parent_data = gcc_parent_data_0, 671 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 672 .ops = &clk_rcg2_ops, 673 }; 674 675 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 676 .cmd_rcgr = 0x274f0, 677 .mnd_width = 16, 678 .hid_width = 5, 679 .parent_map = gcc_parent_map_0, 680 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 681 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 682 }; 683 684 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 685 .name = "gcc_qupv3_wrap0_s4_clk_src", 686 .parent_data = gcc_parent_data_0, 687 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 688 .ops = &clk_rcg2_ops, 689 }; 690 691 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 692 .cmd_rcgr = 0x27624, 693 .mnd_width = 16, 694 .hid_width = 5, 695 .parent_map = gcc_parent_map_0, 696 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 697 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 698 }; 699 700 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = { 701 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 702 { } 703 }; 704 705 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 706 .name = "gcc_qupv3_wrap0_s5_clk_src", 707 .parent_data = gcc_parent_data_0, 708 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 709 .ops = &clk_rcg2_ops, 710 }; 711 712 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 713 .cmd_rcgr = 0x27758, 714 .mnd_width = 16, 715 .hid_width = 5, 716 .parent_map = gcc_parent_map_0, 717 .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src, 718 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 719 }; 720 721 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = { 722 .name = "gcc_qupv3_wrap0_s6_clk_src", 723 .parent_data = gcc_parent_data_0, 724 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 725 .ops = &clk_rcg2_ops, 726 }; 727 728 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 729 .cmd_rcgr = 0x2788c, 730 .mnd_width = 16, 731 .hid_width = 5, 732 .parent_map = gcc_parent_map_0, 733 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 734 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init, 735 }; 736 737 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = { 738 .name = "gcc_qupv3_wrap0_s7_clk_src", 739 .parent_data = gcc_parent_data_0, 740 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 741 .ops = &clk_rcg2_ops, 742 }; 743 744 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 745 .cmd_rcgr = 0x279c0, 746 .mnd_width = 16, 747 .hid_width = 5, 748 .parent_map = gcc_parent_map_0, 749 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 750 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init, 751 }; 752 753 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 754 .name = "gcc_qupv3_wrap1_s0_clk_src", 755 .parent_data = gcc_parent_data_0, 756 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 757 .ops = &clk_rcg2_ops, 758 }; 759 760 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 761 .cmd_rcgr = 0x28154, 762 .mnd_width = 16, 763 .hid_width = 5, 764 .parent_map = gcc_parent_map_0, 765 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 766 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 767 }; 768 769 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 770 .name = "gcc_qupv3_wrap1_s1_clk_src", 771 .parent_data = gcc_parent_data_0, 772 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 773 .ops = &clk_rcg2_ops, 774 }; 775 776 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 777 .cmd_rcgr = 0x28288, 778 .mnd_width = 16, 779 .hid_width = 5, 780 .parent_map = gcc_parent_map_0, 781 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 782 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 783 }; 784 785 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 786 .name = "gcc_qupv3_wrap1_s2_clk_src", 787 .parent_data = gcc_parent_data_0, 788 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 789 .ops = &clk_rcg2_ops, 790 }; 791 792 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 793 .cmd_rcgr = 0x283bc, 794 .mnd_width = 16, 795 .hid_width = 5, 796 .parent_map = gcc_parent_map_0, 797 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 798 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 799 }; 800 801 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 802 .name = "gcc_qupv3_wrap1_s3_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 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 809 .cmd_rcgr = 0x284f0, 810 .mnd_width = 16, 811 .hid_width = 5, 812 .parent_map = gcc_parent_map_0, 813 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 814 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 815 }; 816 817 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 818 .name = "gcc_qupv3_wrap1_s4_clk_src", 819 .parent_data = gcc_parent_data_0, 820 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 821 .ops = &clk_rcg2_ops, 822 }; 823 824 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 825 .cmd_rcgr = 0x28624, 826 .mnd_width = 16, 827 .hid_width = 5, 828 .parent_map = gcc_parent_map_0, 829 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 830 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 831 }; 832 833 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 834 .name = "gcc_qupv3_wrap1_s5_clk_src", 835 .parent_data = gcc_parent_data_0, 836 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 837 .ops = &clk_rcg2_ops, 838 }; 839 840 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 841 .cmd_rcgr = 0x28758, 842 .mnd_width = 16, 843 .hid_width = 5, 844 .parent_map = gcc_parent_map_0, 845 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 846 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 847 }; 848 849 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = { 850 .name = "gcc_qupv3_wrap1_s6_clk_src", 851 .parent_data = gcc_parent_data_0, 852 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 853 .ops = &clk_rcg2_ops, 854 }; 855 856 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { 857 .cmd_rcgr = 0x2888c, 858 .mnd_width = 16, 859 .hid_width = 5, 860 .parent_map = gcc_parent_map_0, 861 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 862 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init, 863 }; 864 865 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = { 866 .name = "gcc_qupv3_wrap1_s7_clk_src", 867 .parent_data = gcc_parent_data_0, 868 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 869 .ops = &clk_rcg2_ops, 870 }; 871 872 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { 873 .cmd_rcgr = 0x289c0, 874 .mnd_width = 16, 875 .hid_width = 5, 876 .parent_map = gcc_parent_map_0, 877 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 878 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init, 879 }; 880 881 static const struct freq_tbl ftbl_gcc_sdcc5_apps_clk_src[] = { 882 F(144000, P_BI_TCXO, 16, 3, 25), 883 F(400000, P_BI_TCXO, 12, 1, 4), 884 F(19200000, P_BI_TCXO, 1, 0, 0), 885 F(20000000, P_GCC_GPLL0_OUT_MAIN, 10, 1, 3), 886 F(25000000, P_GCC_GPLL0_OUT_MAIN, 12, 1, 2), 887 F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0), 888 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 889 F(192000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 890 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 891 F(384000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 892 { } 893 }; 894 895 static struct clk_rcg2 gcc_sdcc5_apps_clk_src = { 896 .cmd_rcgr = 0x3b034, 897 .mnd_width = 8, 898 .hid_width = 5, 899 .parent_map = gcc_parent_map_8, 900 .freq_tbl = ftbl_gcc_sdcc5_apps_clk_src, 901 .clkr.hw.init = &(const struct clk_init_data) { 902 .name = "gcc_sdcc5_apps_clk_src", 903 .parent_data = gcc_parent_data_8, 904 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 905 .ops = &clk_rcg2_ops, 906 }, 907 }; 908 909 static const struct freq_tbl ftbl_gcc_sdcc5_ice_core_clk_src[] = { 910 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 911 { } 912 }; 913 914 static struct clk_rcg2 gcc_sdcc5_ice_core_clk_src = { 915 .cmd_rcgr = 0x3b01c, 916 .mnd_width = 0, 917 .hid_width = 5, 918 .parent_map = gcc_parent_map_2, 919 .freq_tbl = ftbl_gcc_sdcc5_ice_core_clk_src, 920 .clkr.hw.init = &(const struct clk_init_data) { 921 .name = "gcc_sdcc5_ice_core_clk_src", 922 .parent_data = gcc_parent_data_2, 923 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 924 .ops = &clk_rcg2_ops, 925 }, 926 }; 927 928 static struct clk_rcg2 gcc_sm_bus_xo_clk_src = { 929 .cmd_rcgr = 0x5b00c, 930 .mnd_width = 0, 931 .hid_width = 5, 932 .parent_map = gcc_parent_map_2, 933 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 934 .clkr.hw.init = &(const struct clk_init_data) { 935 .name = "gcc_sm_bus_xo_clk_src", 936 .parent_data = gcc_parent_data_2, 937 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 938 .ops = &clk_rcg2_ops, 939 }, 940 }; 941 942 static const struct freq_tbl ftbl_gcc_tsc_clk_src[] = { 943 F(500000000, P_GCC_GPLL7_OUT_MAIN, 2, 0, 0), 944 { } 945 }; 946 947 static struct clk_rcg2 gcc_tsc_clk_src = { 948 .cmd_rcgr = 0x57010, 949 .mnd_width = 0, 950 .hid_width = 5, 951 .parent_map = gcc_parent_map_9, 952 .freq_tbl = ftbl_gcc_tsc_clk_src, 953 .clkr.hw.init = &(const struct clk_init_data) { 954 .name = "gcc_tsc_clk_src", 955 .parent_data = gcc_parent_data_9, 956 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 957 .ops = &clk_rcg2_ops, 958 }, 959 }; 960 961 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 962 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 963 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0), 964 { } 965 }; 966 967 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 968 .cmd_rcgr = 0x49028, 969 .mnd_width = 8, 970 .hid_width = 5, 971 .parent_map = gcc_parent_map_0, 972 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 973 .clkr.hw.init = &(const struct clk_init_data) { 974 .name = "gcc_usb30_prim_master_clk_src", 975 .parent_data = gcc_parent_data_0, 976 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 977 .ops = &clk_rcg2_ops, 978 }, 979 }; 980 981 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 982 .cmd_rcgr = 0x49044, 983 .mnd_width = 0, 984 .hid_width = 5, 985 .parent_map = gcc_parent_map_0, 986 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 987 .clkr.hw.init = &(const struct clk_init_data) { 988 .name = "gcc_usb30_prim_mock_utmi_clk_src", 989 .parent_data = gcc_parent_data_0, 990 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 991 .ops = &clk_rcg2_ops, 992 }, 993 }; 994 995 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 996 .cmd_rcgr = 0x49070, 997 .mnd_width = 0, 998 .hid_width = 5, 999 .parent_map = gcc_parent_map_3, 1000 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 1001 .clkr.hw.init = &(const struct clk_init_data) { 1002 .name = "gcc_usb3_prim_phy_aux_clk_src", 1003 .parent_data = gcc_parent_data_3, 1004 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1005 .ops = &clk_rcg2_ops, 1006 }, 1007 }; 1008 1009 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1010 .reg = 0x4905c, 1011 .shift = 0, 1012 .width = 4, 1013 .clkr.hw.init = &(const struct clk_init_data) { 1014 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1015 .parent_hws = (const struct clk_hw*[]) { 1016 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 1017 }, 1018 .num_parents = 1, 1019 .flags = CLK_SET_RATE_PARENT, 1020 .ops = &clk_regmap_div_ro_ops, 1021 }, 1022 }; 1023 1024 static struct clk_branch gcc_aggre_noc_ecpri_dma_clk = { 1025 .halt_reg = 0x92008, 1026 .halt_check = BRANCH_HALT_VOTED, 1027 .hwcg_reg = 0x92008, 1028 .hwcg_bit = 1, 1029 .clkr = { 1030 .enable_reg = 0x92008, 1031 .enable_mask = BIT(0), 1032 .hw.init = &(const struct clk_init_data) { 1033 .name = "gcc_aggre_noc_ecpri_dma_clk", 1034 .parent_hws = (const struct clk_hw*[]) { 1035 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw, 1036 }, 1037 .num_parents = 1, 1038 .flags = CLK_SET_RATE_PARENT, 1039 .ops = &clk_branch2_ops, 1040 }, 1041 }, 1042 }; 1043 1044 static struct clk_branch gcc_aggre_noc_ecpri_gsi_clk = { 1045 .halt_reg = 0x9201c, 1046 .halt_check = BRANCH_HALT_VOTED, 1047 .hwcg_reg = 0x9201c, 1048 .hwcg_bit = 1, 1049 .clkr = { 1050 .enable_reg = 0x9201c, 1051 .enable_mask = BIT(0), 1052 .hw.init = &(const struct clk_init_data) { 1053 .name = "gcc_aggre_noc_ecpri_gsi_clk", 1054 .parent_hws = (const struct clk_hw*[]) { 1055 &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw, 1056 }, 1057 .num_parents = 1, 1058 .flags = CLK_SET_RATE_PARENT, 1059 .ops = &clk_branch2_ops, 1060 }, 1061 }, 1062 }; 1063 1064 static struct clk_branch gcc_boot_rom_ahb_clk = { 1065 .halt_reg = 0x48004, 1066 .halt_check = BRANCH_HALT_VOTED, 1067 .hwcg_reg = 0x48004, 1068 .hwcg_bit = 1, 1069 .clkr = { 1070 .enable_reg = 0x62000, 1071 .enable_mask = BIT(10), 1072 .hw.init = &(const struct clk_init_data) { 1073 .name = "gcc_boot_rom_ahb_clk", 1074 .ops = &clk_branch2_ops, 1075 }, 1076 }, 1077 }; 1078 1079 static struct clk_branch gcc_cfg_noc_ecpri_cc_ahb_clk = { 1080 .halt_reg = 0x3e004, 1081 .halt_check = BRANCH_HALT_VOTED, 1082 .hwcg_reg = 0x3e004, 1083 .hwcg_bit = 1, 1084 .clkr = { 1085 .enable_reg = 0x3e004, 1086 .enable_mask = BIT(0), 1087 .hw.init = &(const struct clk_init_data) { 1088 .name = "gcc_cfg_noc_ecpri_cc_ahb_clk", 1089 .ops = &clk_branch2_ops, 1090 }, 1091 }, 1092 }; 1093 1094 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1095 .halt_reg = 0x8401c, 1096 .halt_check = BRANCH_HALT_VOTED, 1097 .hwcg_reg = 0x8401c, 1098 .hwcg_bit = 1, 1099 .clkr = { 1100 .enable_reg = 0x8401c, 1101 .enable_mask = BIT(0), 1102 .hw.init = &(const struct clk_init_data) { 1103 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1104 .parent_hws = (const struct clk_hw*[]) { 1105 &gcc_usb30_prim_master_clk_src.clkr.hw, 1106 }, 1107 .num_parents = 1, 1108 .flags = CLK_SET_RATE_PARENT, 1109 .ops = &clk_branch2_ops, 1110 }, 1111 }, 1112 }; 1113 1114 static struct clk_branch gcc_ddrss_ecpri_dma_clk = { 1115 .halt_reg = 0x54030, 1116 .halt_check = BRANCH_HALT_VOTED, 1117 .hwcg_reg = 0x54030, 1118 .hwcg_bit = 1, 1119 .clkr = { 1120 .enable_reg = 0x54030, 1121 .enable_mask = BIT(0), 1122 .hw.init = &(const struct clk_init_data) { 1123 .name = "gcc_ddrss_ecpri_dma_clk", 1124 .parent_hws = (const struct clk_hw*[]) { 1125 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw, 1126 }, 1127 .num_parents = 1, 1128 .flags = CLK_SET_RATE_PARENT, 1129 .ops = &clk_branch2_aon_ops, 1130 }, 1131 }, 1132 }; 1133 1134 static struct clk_branch gcc_ecpri_ahb_clk = { 1135 .halt_reg = 0x3a008, 1136 .halt_check = BRANCH_HALT_VOTED, 1137 .hwcg_reg = 0x3a008, 1138 .hwcg_bit = 1, 1139 .clkr = { 1140 .enable_reg = 0x3a008, 1141 .enable_mask = BIT(0), 1142 .hw.init = &(const struct clk_init_data) { 1143 .name = "gcc_ecpri_ahb_clk", 1144 .ops = &clk_branch2_ops, 1145 }, 1146 }, 1147 }; 1148 1149 static struct clk_branch gcc_ecpri_cc_gpll0_clk_src = { 1150 .halt_check = BRANCH_HALT_DELAY, 1151 .clkr = { 1152 .enable_reg = 0x62010, 1153 .enable_mask = BIT(0), 1154 .hw.init = &(const struct clk_init_data) { 1155 .name = "gcc_ecpri_cc_gpll0_clk_src", 1156 .parent_hws = (const struct clk_hw*[]) { 1157 &gcc_gpll0.clkr.hw, 1158 }, 1159 .num_parents = 1, 1160 .flags = CLK_SET_RATE_PARENT, 1161 .ops = &clk_branch2_ops, 1162 }, 1163 }, 1164 }; 1165 1166 static struct clk_branch gcc_ecpri_cc_gpll1_even_clk_src = { 1167 .halt_check = BRANCH_HALT_DELAY, 1168 .clkr = { 1169 .enable_reg = 0x62010, 1170 .enable_mask = BIT(1), 1171 .hw.init = &(const struct clk_init_data) { 1172 .name = "gcc_ecpri_cc_gpll1_even_clk_src", 1173 .parent_hws = (const struct clk_hw*[]) { 1174 &gcc_gpll1_out_even.clkr.hw, 1175 }, 1176 .num_parents = 1, 1177 .flags = CLK_SET_RATE_PARENT, 1178 .ops = &clk_branch2_ops, 1179 }, 1180 }, 1181 }; 1182 1183 static struct clk_branch gcc_ecpri_cc_gpll2_even_clk_src = { 1184 .halt_check = BRANCH_HALT_DELAY, 1185 .clkr = { 1186 .enable_reg = 0x62010, 1187 .enable_mask = BIT(2), 1188 .hw.init = &(const struct clk_init_data) { 1189 .name = "gcc_ecpri_cc_gpll2_even_clk_src", 1190 .parent_hws = (const struct clk_hw*[]) { 1191 &gcc_gpll2_out_even.clkr.hw, 1192 }, 1193 .num_parents = 1, 1194 .flags = CLK_SET_RATE_PARENT, 1195 .ops = &clk_branch2_ops, 1196 }, 1197 }, 1198 }; 1199 1200 static struct clk_branch gcc_ecpri_cc_gpll3_clk_src = { 1201 .halt_check = BRANCH_HALT_DELAY, 1202 .clkr = { 1203 .enable_reg = 0x62010, 1204 .enable_mask = BIT(3), 1205 .hw.init = &(const struct clk_init_data) { 1206 .name = "gcc_ecpri_cc_gpll3_clk_src", 1207 .parent_hws = (const struct clk_hw*[]) { 1208 &gcc_gpll3.clkr.hw, 1209 }, 1210 .num_parents = 1, 1211 .flags = CLK_SET_RATE_PARENT, 1212 .ops = &clk_branch2_ops, 1213 }, 1214 }, 1215 }; 1216 1217 static struct clk_branch gcc_ecpri_cc_gpll4_clk_src = { 1218 .halt_check = BRANCH_HALT_DELAY, 1219 .clkr = { 1220 .enable_reg = 0x62010, 1221 .enable_mask = BIT(4), 1222 .hw.init = &(const struct clk_init_data) { 1223 .name = "gcc_ecpri_cc_gpll4_clk_src", 1224 .parent_hws = (const struct clk_hw*[]) { 1225 &gcc_gpll4.clkr.hw, 1226 }, 1227 .num_parents = 1, 1228 .flags = CLK_SET_RATE_PARENT, 1229 .ops = &clk_branch2_ops, 1230 }, 1231 }, 1232 }; 1233 1234 static struct clk_branch gcc_ecpri_cc_gpll5_even_clk_src = { 1235 .halt_check = BRANCH_HALT_DELAY, 1236 .clkr = { 1237 .enable_reg = 0x62010, 1238 .enable_mask = BIT(5), 1239 .hw.init = &(const struct clk_init_data) { 1240 .name = "gcc_ecpri_cc_gpll5_even_clk_src", 1241 .parent_hws = (const struct clk_hw*[]) { 1242 &gcc_gpll5_out_even.clkr.hw, 1243 }, 1244 .num_parents = 1, 1245 .flags = CLK_SET_RATE_PARENT, 1246 .ops = &clk_branch2_ops, 1247 }, 1248 }, 1249 }; 1250 1251 static struct clk_branch gcc_ecpri_xo_clk = { 1252 .halt_reg = 0x3a004, 1253 .halt_check = BRANCH_HALT, 1254 .clkr = { 1255 .enable_reg = 0x3a004, 1256 .enable_mask = BIT(0), 1257 .hw.init = &(const struct clk_init_data) { 1258 .name = "gcc_ecpri_xo_clk", 1259 .ops = &clk_branch2_ops, 1260 }, 1261 }, 1262 }; 1263 1264 static struct clk_branch gcc_eth_100g_c2c_hm_apb_clk = { 1265 .halt_reg = 0x39010, 1266 .halt_check = BRANCH_HALT, 1267 .clkr = { 1268 .enable_reg = 0x39010, 1269 .enable_mask = BIT(0), 1270 .hw.init = &(const struct clk_init_data) { 1271 .name = "gcc_eth_100g_c2c_hm_apb_clk", 1272 .ops = &clk_branch2_ops, 1273 }, 1274 }, 1275 }; 1276 1277 static struct clk_branch gcc_eth_100g_fh_hm_apb_0_clk = { 1278 .halt_reg = 0x39004, 1279 .halt_check = BRANCH_HALT, 1280 .clkr = { 1281 .enable_reg = 0x39004, 1282 .enable_mask = BIT(0), 1283 .hw.init = &(const struct clk_init_data) { 1284 .name = "gcc_eth_100g_fh_hm_apb_0_clk", 1285 .ops = &clk_branch2_ops, 1286 }, 1287 }, 1288 }; 1289 1290 static struct clk_branch gcc_eth_100g_fh_hm_apb_1_clk = { 1291 .halt_reg = 0x39008, 1292 .halt_check = BRANCH_HALT, 1293 .clkr = { 1294 .enable_reg = 0x39008, 1295 .enable_mask = BIT(0), 1296 .hw.init = &(const struct clk_init_data) { 1297 .name = "gcc_eth_100g_fh_hm_apb_1_clk", 1298 .ops = &clk_branch2_ops, 1299 }, 1300 }, 1301 }; 1302 1303 static struct clk_branch gcc_eth_100g_fh_hm_apb_2_clk = { 1304 .halt_reg = 0x3900c, 1305 .halt_check = BRANCH_HALT, 1306 .clkr = { 1307 .enable_reg = 0x3900c, 1308 .enable_mask = BIT(0), 1309 .hw.init = &(const struct clk_init_data) { 1310 .name = "gcc_eth_100g_fh_hm_apb_2_clk", 1311 .ops = &clk_branch2_ops, 1312 }, 1313 }, 1314 }; 1315 1316 static struct clk_branch gcc_eth_dbg_c2c_hm_apb_clk = { 1317 .halt_reg = 0x39014, 1318 .halt_check = BRANCH_HALT, 1319 .clkr = { 1320 .enable_reg = 0x39014, 1321 .enable_mask = BIT(0), 1322 .hw.init = &(const struct clk_init_data) { 1323 .name = "gcc_eth_dbg_c2c_hm_apb_clk", 1324 .ops = &clk_branch2_ops, 1325 }, 1326 }, 1327 }; 1328 1329 static struct clk_branch gcc_eth_dbg_snoc_axi_clk = { 1330 .halt_reg = 0x3901c, 1331 .halt_check = BRANCH_HALT_VOTED, 1332 .hwcg_reg = 0x3901c, 1333 .hwcg_bit = 1, 1334 .clkr = { 1335 .enable_reg = 0x3901c, 1336 .enable_mask = BIT(0), 1337 .hw.init = &(const struct clk_init_data) { 1338 .name = "gcc_eth_dbg_snoc_axi_clk", 1339 .ops = &clk_branch2_ops, 1340 }, 1341 }, 1342 }; 1343 1344 static struct clk_branch gcc_gemnoc_pcie_qx_clk = { 1345 .halt_reg = 0x5402c, 1346 .halt_check = BRANCH_HALT_VOTED, 1347 .hwcg_reg = 0x5402c, 1348 .hwcg_bit = 1, 1349 .clkr = { 1350 .enable_reg = 0x62008, 1351 .enable_mask = BIT(0), 1352 .hw.init = &(const struct clk_init_data) { 1353 .name = "gcc_gemnoc_pcie_qx_clk", 1354 .ops = &clk_branch2_aon_ops, 1355 }, 1356 }, 1357 }; 1358 1359 static struct clk_branch gcc_gp1_clk = { 1360 .halt_reg = 0x74000, 1361 .halt_check = BRANCH_HALT, 1362 .clkr = { 1363 .enable_reg = 0x74000, 1364 .enable_mask = BIT(0), 1365 .hw.init = &(const struct clk_init_data) { 1366 .name = "gcc_gp1_clk", 1367 .parent_hws = (const struct clk_hw*[]) { 1368 &gcc_gp1_clk_src.clkr.hw, 1369 }, 1370 .num_parents = 1, 1371 .flags = CLK_SET_RATE_PARENT, 1372 .ops = &clk_branch2_ops, 1373 }, 1374 }, 1375 }; 1376 1377 static struct clk_branch gcc_gp2_clk = { 1378 .halt_reg = 0x75000, 1379 .halt_check = BRANCH_HALT, 1380 .clkr = { 1381 .enable_reg = 0x75000, 1382 .enable_mask = BIT(0), 1383 .hw.init = &(const struct clk_init_data) { 1384 .name = "gcc_gp2_clk", 1385 .parent_hws = (const struct clk_hw*[]) { 1386 &gcc_gp2_clk_src.clkr.hw, 1387 }, 1388 .num_parents = 1, 1389 .flags = CLK_SET_RATE_PARENT, 1390 .ops = &clk_branch2_ops, 1391 }, 1392 }, 1393 }; 1394 1395 static struct clk_branch gcc_gp3_clk = { 1396 .halt_reg = 0x76000, 1397 .halt_check = BRANCH_HALT, 1398 .clkr = { 1399 .enable_reg = 0x76000, 1400 .enable_mask = BIT(0), 1401 .hw.init = &(const struct clk_init_data) { 1402 .name = "gcc_gp3_clk", 1403 .parent_hws = (const struct clk_hw*[]) { 1404 &gcc_gp3_clk_src.clkr.hw, 1405 }, 1406 .num_parents = 1, 1407 .flags = CLK_SET_RATE_PARENT, 1408 .ops = &clk_branch2_ops, 1409 }, 1410 }, 1411 }; 1412 1413 static struct clk_branch gcc_pcie_0_aux_clk = { 1414 .halt_reg = 0x9d030, 1415 .halt_check = BRANCH_HALT_VOTED, 1416 .hwcg_reg = 0x9d030, 1417 .hwcg_bit = 1, 1418 .clkr = { 1419 .enable_reg = 0x62000, 1420 .enable_mask = BIT(29), 1421 .hw.init = &(const struct clk_init_data) { 1422 .name = "gcc_pcie_0_aux_clk", 1423 .parent_hws = (const struct clk_hw*[]) { 1424 &gcc_pcie_0_aux_clk_src.clkr.hw, 1425 }, 1426 .num_parents = 1, 1427 .flags = CLK_SET_RATE_PARENT, 1428 .ops = &clk_branch2_ops, 1429 }, 1430 }, 1431 }; 1432 1433 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1434 .halt_reg = 0x9d02c, 1435 .halt_check = BRANCH_HALT_VOTED, 1436 .hwcg_reg = 0x9d02c, 1437 .hwcg_bit = 1, 1438 .clkr = { 1439 .enable_reg = 0x62000, 1440 .enable_mask = BIT(28), 1441 .hw.init = &(const struct clk_init_data) { 1442 .name = "gcc_pcie_0_cfg_ahb_clk", 1443 .ops = &clk_branch2_ops, 1444 }, 1445 }, 1446 }; 1447 1448 static struct clk_branch gcc_pcie_0_clkref_en = { 1449 .halt_reg = 0x9c004, 1450 .halt_check = BRANCH_HALT, 1451 .clkr = { 1452 .enable_reg = 0x9c004, 1453 .enable_mask = BIT(0), 1454 .hw.init = &(const struct clk_init_data) { 1455 .name = "gcc_pcie_0_clkref_en", 1456 .ops = &clk_branch2_ops, 1457 }, 1458 }, 1459 }; 1460 1461 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1462 .halt_reg = 0x9d024, 1463 .halt_check = BRANCH_HALT_SKIP, 1464 .hwcg_reg = 0x9d024, 1465 .hwcg_bit = 1, 1466 .clkr = { 1467 .enable_reg = 0x62000, 1468 .enable_mask = BIT(27), 1469 .hw.init = &(const struct clk_init_data) { 1470 .name = "gcc_pcie_0_mstr_axi_clk", 1471 .ops = &clk_branch2_ops, 1472 }, 1473 }, 1474 }; 1475 1476 static struct clk_branch gcc_pcie_0_phy_aux_clk = { 1477 .halt_reg = 0x9d038, 1478 .halt_check = BRANCH_HALT_VOTED, 1479 .hwcg_reg = 0x9d038, 1480 .hwcg_bit = 1, 1481 .clkr = { 1482 .enable_reg = 0x62000, 1483 .enable_mask = BIT(24), 1484 .hw.init = &(const struct clk_init_data) { 1485 .name = "gcc_pcie_0_phy_aux_clk", 1486 .parent_hws = (const struct clk_hw*[]) { 1487 &gcc_pcie_0_phy_aux_clk_src.clkr.hw, 1488 }, 1489 .num_parents = 1, 1490 .flags = CLK_SET_RATE_PARENT, 1491 .ops = &clk_branch2_ops, 1492 }, 1493 }, 1494 }; 1495 1496 static struct clk_branch gcc_pcie_0_phy_rchng_clk = { 1497 .halt_reg = 0x9d048, 1498 .halt_check = BRANCH_HALT_VOTED, 1499 .hwcg_reg = 0x9d048, 1500 .hwcg_bit = 1, 1501 .clkr = { 1502 .enable_reg = 0x62000, 1503 .enable_mask = BIT(23), 1504 .hw.init = &(const struct clk_init_data) { 1505 .name = "gcc_pcie_0_phy_rchng_clk", 1506 .parent_hws = (const struct clk_hw*[]) { 1507 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw, 1508 }, 1509 .num_parents = 1, 1510 .flags = CLK_SET_RATE_PARENT, 1511 .ops = &clk_branch2_ops, 1512 }, 1513 }, 1514 }; 1515 1516 static struct clk_branch gcc_pcie_0_pipe_clk = { 1517 .halt_reg = 0x9d040, 1518 .halt_check = BRANCH_HALT_VOTED, 1519 .hwcg_reg = 0x9d040, 1520 .hwcg_bit = 1, 1521 .clkr = { 1522 .enable_reg = 0x62000, 1523 .enable_mask = BIT(30), 1524 .hw.init = &(const struct clk_init_data) { 1525 .name = "gcc_pcie_0_pipe_clk", 1526 .parent_hws = (const struct clk_hw*[]) { 1527 &gcc_pcie_0_pipe_clk_src.clkr.hw, 1528 }, 1529 .num_parents = 1, 1530 .flags = CLK_SET_RATE_PARENT, 1531 .ops = &clk_branch2_ops, 1532 }, 1533 }, 1534 }; 1535 1536 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1537 .halt_reg = 0x9d01c, 1538 .halt_check = BRANCH_HALT_VOTED, 1539 .hwcg_reg = 0x9d01c, 1540 .hwcg_bit = 1, 1541 .clkr = { 1542 .enable_reg = 0x62000, 1543 .enable_mask = BIT(26), 1544 .hw.init = &(const struct clk_init_data) { 1545 .name = "gcc_pcie_0_slv_axi_clk", 1546 .ops = &clk_branch2_ops, 1547 }, 1548 }, 1549 }; 1550 1551 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1552 .halt_reg = 0x9d018, 1553 .halt_check = BRANCH_HALT_VOTED, 1554 .hwcg_reg = 0x9d018, 1555 .hwcg_bit = 1, 1556 .clkr = { 1557 .enable_reg = 0x62000, 1558 .enable_mask = BIT(25), 1559 .hw.init = &(const struct clk_init_data) { 1560 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1561 .ops = &clk_branch2_ops, 1562 }, 1563 }, 1564 }; 1565 1566 static struct clk_branch gcc_pdm2_clk = { 1567 .halt_reg = 0x4300c, 1568 .halt_check = BRANCH_HALT, 1569 .clkr = { 1570 .enable_reg = 0x4300c, 1571 .enable_mask = BIT(0), 1572 .hw.init = &(const struct clk_init_data) { 1573 .name = "gcc_pdm2_clk", 1574 .parent_hws = (const struct clk_hw*[]) { 1575 &gcc_pdm2_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_pdm_ahb_clk = { 1585 .halt_reg = 0x43004, 1586 .halt_check = BRANCH_HALT_VOTED, 1587 .hwcg_reg = 0x43004, 1588 .hwcg_bit = 1, 1589 .clkr = { 1590 .enable_reg = 0x43004, 1591 .enable_mask = BIT(0), 1592 .hw.init = &(const struct clk_init_data) { 1593 .name = "gcc_pdm_ahb_clk", 1594 .ops = &clk_branch2_ops, 1595 }, 1596 }, 1597 }; 1598 1599 static struct clk_branch gcc_pdm_xo4_clk = { 1600 .halt_reg = 0x43008, 1601 .halt_check = BRANCH_HALT, 1602 .clkr = { 1603 .enable_reg = 0x43008, 1604 .enable_mask = BIT(0), 1605 .hw.init = &(const struct clk_init_data) { 1606 .name = "gcc_pdm_xo4_clk", 1607 .ops = &clk_branch2_ops, 1608 }, 1609 }, 1610 }; 1611 1612 static struct clk_branch gcc_qmip_anoc_pcie_clk = { 1613 .halt_reg = 0x84044, 1614 .halt_check = BRANCH_HALT_VOTED, 1615 .hwcg_reg = 0x84044, 1616 .hwcg_bit = 1, 1617 .clkr = { 1618 .enable_reg = 0x84044, 1619 .enable_mask = BIT(0), 1620 .hw.init = &(const struct clk_init_data) { 1621 .name = "gcc_qmip_anoc_pcie_clk", 1622 .ops = &clk_branch2_ops, 1623 }, 1624 }, 1625 }; 1626 1627 static struct clk_branch gcc_qmip_ecpri_dma0_clk = { 1628 .halt_reg = 0x84038, 1629 .halt_check = BRANCH_HALT_VOTED, 1630 .hwcg_reg = 0x84038, 1631 .hwcg_bit = 1, 1632 .clkr = { 1633 .enable_reg = 0x84038, 1634 .enable_mask = BIT(0), 1635 .hw.init = &(const struct clk_init_data) { 1636 .name = "gcc_qmip_ecpri_dma0_clk", 1637 .ops = &clk_branch2_ops, 1638 }, 1639 }, 1640 }; 1641 1642 static struct clk_branch gcc_qmip_ecpri_dma1_clk = { 1643 .halt_reg = 0x8403c, 1644 .halt_check = BRANCH_HALT_VOTED, 1645 .hwcg_reg = 0x8403c, 1646 .hwcg_bit = 1, 1647 .clkr = { 1648 .enable_reg = 0x8403c, 1649 .enable_mask = BIT(0), 1650 .hw.init = &(const struct clk_init_data) { 1651 .name = "gcc_qmip_ecpri_dma1_clk", 1652 .ops = &clk_branch2_ops, 1653 }, 1654 }, 1655 }; 1656 1657 static struct clk_branch gcc_qmip_ecpri_gsi_clk = { 1658 .halt_reg = 0x84040, 1659 .halt_check = BRANCH_HALT_VOTED, 1660 .hwcg_reg = 0x84040, 1661 .hwcg_bit = 1, 1662 .clkr = { 1663 .enable_reg = 0x84040, 1664 .enable_mask = BIT(0), 1665 .hw.init = &(const struct clk_init_data) { 1666 .name = "gcc_qmip_ecpri_gsi_clk", 1667 .ops = &clk_branch2_ops, 1668 }, 1669 }, 1670 }; 1671 1672 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1673 .halt_reg = 0x27018, 1674 .halt_check = BRANCH_HALT_VOTED, 1675 .clkr = { 1676 .enable_reg = 0x62008, 1677 .enable_mask = BIT(9), 1678 .hw.init = &(const struct clk_init_data) { 1679 .name = "gcc_qupv3_wrap0_core_2x_clk", 1680 .ops = &clk_branch2_ops, 1681 }, 1682 }, 1683 }; 1684 1685 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1686 .halt_reg = 0x2700c, 1687 .halt_check = BRANCH_HALT_VOTED, 1688 .clkr = { 1689 .enable_reg = 0x62008, 1690 .enable_mask = BIT(8), 1691 .hw.init = &(const struct clk_init_data) { 1692 .name = "gcc_qupv3_wrap0_core_clk", 1693 .ops = &clk_branch2_ops, 1694 }, 1695 }, 1696 }; 1697 1698 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1699 .halt_reg = 0x2714c, 1700 .halt_check = BRANCH_HALT_VOTED, 1701 .clkr = { 1702 .enable_reg = 0x62008, 1703 .enable_mask = BIT(10), 1704 .hw.init = &(const struct clk_init_data) { 1705 .name = "gcc_qupv3_wrap0_s0_clk", 1706 .parent_hws = (const struct clk_hw*[]) { 1707 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1708 }, 1709 .num_parents = 1, 1710 .flags = CLK_SET_RATE_PARENT, 1711 .ops = &clk_branch2_ops, 1712 }, 1713 }, 1714 }; 1715 1716 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1717 .halt_reg = 0x27280, 1718 .halt_check = BRANCH_HALT_VOTED, 1719 .clkr = { 1720 .enable_reg = 0x62008, 1721 .enable_mask = BIT(11), 1722 .hw.init = &(const struct clk_init_data) { 1723 .name = "gcc_qupv3_wrap0_s1_clk", 1724 .parent_hws = (const struct clk_hw*[]) { 1725 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1726 }, 1727 .num_parents = 1, 1728 .flags = CLK_SET_RATE_PARENT, 1729 .ops = &clk_branch2_ops, 1730 }, 1731 }, 1732 }; 1733 1734 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1735 .halt_reg = 0x273b4, 1736 .halt_check = BRANCH_HALT_VOTED, 1737 .clkr = { 1738 .enable_reg = 0x62008, 1739 .enable_mask = BIT(12), 1740 .hw.init = &(const struct clk_init_data) { 1741 .name = "gcc_qupv3_wrap0_s2_clk", 1742 .parent_hws = (const struct clk_hw*[]) { 1743 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1744 }, 1745 .num_parents = 1, 1746 .flags = CLK_SET_RATE_PARENT, 1747 .ops = &clk_branch2_ops, 1748 }, 1749 }, 1750 }; 1751 1752 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1753 .halt_reg = 0x274e8, 1754 .halt_check = BRANCH_HALT_VOTED, 1755 .clkr = { 1756 .enable_reg = 0x62008, 1757 .enable_mask = BIT(13), 1758 .hw.init = &(const struct clk_init_data) { 1759 .name = "gcc_qupv3_wrap0_s3_clk", 1760 .parent_hws = (const struct clk_hw*[]) { 1761 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1762 }, 1763 .num_parents = 1, 1764 .flags = CLK_SET_RATE_PARENT, 1765 .ops = &clk_branch2_ops, 1766 }, 1767 }, 1768 }; 1769 1770 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1771 .halt_reg = 0x2761c, 1772 .halt_check = BRANCH_HALT_VOTED, 1773 .clkr = { 1774 .enable_reg = 0x62008, 1775 .enable_mask = BIT(14), 1776 .hw.init = &(const struct clk_init_data) { 1777 .name = "gcc_qupv3_wrap0_s4_clk", 1778 .parent_hws = (const struct clk_hw*[]) { 1779 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1780 }, 1781 .num_parents = 1, 1782 .flags = CLK_SET_RATE_PARENT, 1783 .ops = &clk_branch2_ops, 1784 }, 1785 }, 1786 }; 1787 1788 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 1789 .halt_reg = 0x27750, 1790 .halt_check = BRANCH_HALT_VOTED, 1791 .clkr = { 1792 .enable_reg = 0x62008, 1793 .enable_mask = BIT(15), 1794 .hw.init = &(const struct clk_init_data) { 1795 .name = "gcc_qupv3_wrap0_s5_clk", 1796 .parent_hws = (const struct clk_hw*[]) { 1797 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 1798 }, 1799 .num_parents = 1, 1800 .flags = CLK_SET_RATE_PARENT, 1801 .ops = &clk_branch2_ops, 1802 }, 1803 }, 1804 }; 1805 1806 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 1807 .halt_reg = 0x27884, 1808 .halt_check = BRANCH_HALT_VOTED, 1809 .clkr = { 1810 .enable_reg = 0x62008, 1811 .enable_mask = BIT(16), 1812 .hw.init = &(const struct clk_init_data) { 1813 .name = "gcc_qupv3_wrap0_s6_clk", 1814 .parent_hws = (const struct clk_hw*[]) { 1815 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw, 1816 }, 1817 .num_parents = 1, 1818 .flags = CLK_SET_RATE_PARENT, 1819 .ops = &clk_branch2_ops, 1820 }, 1821 }, 1822 }; 1823 1824 static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 1825 .halt_reg = 0x279b8, 1826 .halt_check = BRANCH_HALT_VOTED, 1827 .clkr = { 1828 .enable_reg = 0x62008, 1829 .enable_mask = BIT(17), 1830 .hw.init = &(const struct clk_init_data) { 1831 .name = "gcc_qupv3_wrap0_s7_clk", 1832 .parent_hws = (const struct clk_hw*[]) { 1833 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw, 1834 }, 1835 .num_parents = 1, 1836 .flags = CLK_SET_RATE_PARENT, 1837 .ops = &clk_branch2_ops, 1838 }, 1839 }, 1840 }; 1841 1842 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1843 .halt_reg = 0x28018, 1844 .halt_check = BRANCH_HALT_VOTED, 1845 .clkr = { 1846 .enable_reg = 0x62008, 1847 .enable_mask = BIT(18), 1848 .hw.init = &(const struct clk_init_data) { 1849 .name = "gcc_qupv3_wrap1_core_2x_clk", 1850 .ops = &clk_branch2_ops, 1851 }, 1852 }, 1853 }; 1854 1855 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1856 .halt_reg = 0x2800c, 1857 .halt_check = BRANCH_HALT_VOTED, 1858 .clkr = { 1859 .enable_reg = 0x62008, 1860 .enable_mask = BIT(19), 1861 .hw.init = &(const struct clk_init_data) { 1862 .name = "gcc_qupv3_wrap1_core_clk", 1863 .ops = &clk_branch2_ops, 1864 }, 1865 }, 1866 }; 1867 1868 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1869 .halt_reg = 0x2814c, 1870 .halt_check = BRANCH_HALT_VOTED, 1871 .clkr = { 1872 .enable_reg = 0x62008, 1873 .enable_mask = BIT(22), 1874 .hw.init = &(const struct clk_init_data) { 1875 .name = "gcc_qupv3_wrap1_s0_clk", 1876 .parent_hws = (const struct clk_hw*[]) { 1877 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1878 }, 1879 .num_parents = 1, 1880 .flags = CLK_SET_RATE_PARENT, 1881 .ops = &clk_branch2_ops, 1882 }, 1883 }, 1884 }; 1885 1886 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1887 .halt_reg = 0x28280, 1888 .halt_check = BRANCH_HALT_VOTED, 1889 .clkr = { 1890 .enable_reg = 0x62008, 1891 .enable_mask = BIT(23), 1892 .hw.init = &(const struct clk_init_data) { 1893 .name = "gcc_qupv3_wrap1_s1_clk", 1894 .parent_hws = (const struct clk_hw*[]) { 1895 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1896 }, 1897 .num_parents = 1, 1898 .flags = CLK_SET_RATE_PARENT, 1899 .ops = &clk_branch2_ops, 1900 }, 1901 }, 1902 }; 1903 1904 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1905 .halt_reg = 0x283b4, 1906 .halt_check = BRANCH_HALT_VOTED, 1907 .clkr = { 1908 .enable_reg = 0x62008, 1909 .enable_mask = BIT(24), 1910 .hw.init = &(const struct clk_init_data) { 1911 .name = "gcc_qupv3_wrap1_s2_clk", 1912 .parent_hws = (const struct clk_hw*[]) { 1913 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1914 }, 1915 .num_parents = 1, 1916 .flags = CLK_SET_RATE_PARENT, 1917 .ops = &clk_branch2_ops, 1918 }, 1919 }, 1920 }; 1921 1922 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1923 .halt_reg = 0x284e8, 1924 .halt_check = BRANCH_HALT_VOTED, 1925 .clkr = { 1926 .enable_reg = 0x62008, 1927 .enable_mask = BIT(25), 1928 .hw.init = &(const struct clk_init_data) { 1929 .name = "gcc_qupv3_wrap1_s3_clk", 1930 .parent_hws = (const struct clk_hw*[]) { 1931 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1932 }, 1933 .num_parents = 1, 1934 .flags = CLK_SET_RATE_PARENT, 1935 .ops = &clk_branch2_ops, 1936 }, 1937 }, 1938 }; 1939 1940 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1941 .halt_reg = 0x2861c, 1942 .halt_check = BRANCH_HALT_VOTED, 1943 .clkr = { 1944 .enable_reg = 0x62008, 1945 .enable_mask = BIT(26), 1946 .hw.init = &(const struct clk_init_data) { 1947 .name = "gcc_qupv3_wrap1_s4_clk", 1948 .parent_hws = (const struct clk_hw*[]) { 1949 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 1950 }, 1951 .num_parents = 1, 1952 .flags = CLK_SET_RATE_PARENT, 1953 .ops = &clk_branch2_ops, 1954 }, 1955 }, 1956 }; 1957 1958 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 1959 .halt_reg = 0x28750, 1960 .halt_check = BRANCH_HALT_VOTED, 1961 .clkr = { 1962 .enable_reg = 0x62008, 1963 .enable_mask = BIT(27), 1964 .hw.init = &(const struct clk_init_data) { 1965 .name = "gcc_qupv3_wrap1_s5_clk", 1966 .parent_hws = (const struct clk_hw*[]) { 1967 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 1968 }, 1969 .num_parents = 1, 1970 .flags = CLK_SET_RATE_PARENT, 1971 .ops = &clk_branch2_ops, 1972 }, 1973 }, 1974 }; 1975 1976 static struct clk_branch gcc_qupv3_wrap1_s6_clk = { 1977 .halt_reg = 0x28884, 1978 .halt_check = BRANCH_HALT_VOTED, 1979 .clkr = { 1980 .enable_reg = 0x62008, 1981 .enable_mask = BIT(28), 1982 .hw.init = &(const struct clk_init_data) { 1983 .name = "gcc_qupv3_wrap1_s6_clk", 1984 .parent_hws = (const struct clk_hw*[]) { 1985 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw, 1986 }, 1987 .num_parents = 1, 1988 .flags = CLK_SET_RATE_PARENT, 1989 .ops = &clk_branch2_ops, 1990 }, 1991 }, 1992 }; 1993 1994 static struct clk_branch gcc_qupv3_wrap1_s7_clk = { 1995 .halt_reg = 0x289b8, 1996 .halt_check = BRANCH_HALT_VOTED, 1997 .clkr = { 1998 .enable_reg = 0x62008, 1999 .enable_mask = BIT(29), 2000 .hw.init = &(const struct clk_init_data) { 2001 .name = "gcc_qupv3_wrap1_s7_clk", 2002 .parent_hws = (const struct clk_hw*[]) { 2003 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw, 2004 }, 2005 .num_parents = 1, 2006 .flags = CLK_SET_RATE_PARENT, 2007 .ops = &clk_branch2_ops, 2008 }, 2009 }, 2010 }; 2011 2012 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2013 .halt_reg = 0x27004, 2014 .halt_check = BRANCH_HALT_VOTED, 2015 .hwcg_reg = 0x27004, 2016 .hwcg_bit = 1, 2017 .clkr = { 2018 .enable_reg = 0x62008, 2019 .enable_mask = BIT(6), 2020 .hw.init = &(const struct clk_init_data) { 2021 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2022 .ops = &clk_branch2_ops, 2023 }, 2024 }, 2025 }; 2026 2027 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2028 .halt_reg = 0x27008, 2029 .halt_check = BRANCH_HALT_VOTED, 2030 .hwcg_reg = 0x27008, 2031 .hwcg_bit = 1, 2032 .clkr = { 2033 .enable_reg = 0x62008, 2034 .enable_mask = BIT(7), 2035 .hw.init = &(const struct clk_init_data) { 2036 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2037 .ops = &clk_branch2_ops, 2038 }, 2039 }, 2040 }; 2041 2042 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2043 .halt_reg = 0x28004, 2044 .halt_check = BRANCH_HALT_VOTED, 2045 .hwcg_reg = 0x28004, 2046 .hwcg_bit = 1, 2047 .clkr = { 2048 .enable_reg = 0x62008, 2049 .enable_mask = BIT(20), 2050 .hw.init = &(const struct clk_init_data) { 2051 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2052 .ops = &clk_branch2_ops, 2053 }, 2054 }, 2055 }; 2056 2057 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2058 .halt_reg = 0x28008, 2059 .halt_check = BRANCH_HALT_VOTED, 2060 .hwcg_reg = 0x28008, 2061 .hwcg_bit = 1, 2062 .clkr = { 2063 .enable_reg = 0x62008, 2064 .enable_mask = BIT(21), 2065 .hw.init = &(const struct clk_init_data) { 2066 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2067 .ops = &clk_branch2_ops, 2068 }, 2069 }, 2070 }; 2071 2072 static struct clk_branch gcc_sdcc5_ahb_clk = { 2073 .halt_reg = 0x3b00c, 2074 .halt_check = BRANCH_HALT, 2075 .clkr = { 2076 .enable_reg = 0x3b00c, 2077 .enable_mask = BIT(0), 2078 .hw.init = &(const struct clk_init_data) { 2079 .name = "gcc_sdcc5_ahb_clk", 2080 .ops = &clk_branch2_ops, 2081 }, 2082 }, 2083 }; 2084 2085 static struct clk_branch gcc_sdcc5_apps_clk = { 2086 .halt_reg = 0x3b004, 2087 .halt_check = BRANCH_HALT, 2088 .clkr = { 2089 .enable_reg = 0x3b004, 2090 .enable_mask = BIT(0), 2091 .hw.init = &(const struct clk_init_data) { 2092 .name = "gcc_sdcc5_apps_clk", 2093 .parent_hws = (const struct clk_hw*[]) { 2094 &gcc_sdcc5_apps_clk_src.clkr.hw, 2095 }, 2096 .num_parents = 1, 2097 .flags = CLK_SET_RATE_PARENT, 2098 .ops = &clk_branch2_ops, 2099 }, 2100 }, 2101 }; 2102 2103 static struct clk_branch gcc_sdcc5_ice_core_clk = { 2104 .halt_reg = 0x3b010, 2105 .halt_check = BRANCH_HALT, 2106 .clkr = { 2107 .enable_reg = 0x3b010, 2108 .enable_mask = BIT(0), 2109 .hw.init = &(const struct clk_init_data) { 2110 .name = "gcc_sdcc5_ice_core_clk", 2111 .parent_hws = (const struct clk_hw*[]) { 2112 &gcc_sdcc5_ice_core_clk_src.clkr.hw, 2113 }, 2114 .num_parents = 1, 2115 .flags = CLK_SET_RATE_PARENT, 2116 .ops = &clk_branch2_ops, 2117 }, 2118 }, 2119 }; 2120 2121 static struct clk_branch gcc_sm_bus_ahb_clk = { 2122 .halt_reg = 0x5b004, 2123 .halt_check = BRANCH_HALT, 2124 .clkr = { 2125 .enable_reg = 0x5b004, 2126 .enable_mask = BIT(0), 2127 .hw.init = &(const struct clk_init_data) { 2128 .name = "gcc_sm_bus_ahb_clk", 2129 .ops = &clk_branch2_ops, 2130 }, 2131 }, 2132 }; 2133 2134 static struct clk_branch gcc_sm_bus_xo_clk = { 2135 .halt_reg = 0x5b008, 2136 .halt_check = BRANCH_HALT, 2137 .clkr = { 2138 .enable_reg = 0x5b008, 2139 .enable_mask = BIT(0), 2140 .hw.init = &(const struct clk_init_data) { 2141 .name = "gcc_sm_bus_xo_clk", 2142 .parent_hws = (const struct clk_hw*[]) { 2143 &gcc_sm_bus_xo_clk_src.clkr.hw, 2144 }, 2145 .num_parents = 1, 2146 .flags = CLK_SET_RATE_PARENT, 2147 .ops = &clk_branch2_ops, 2148 }, 2149 }, 2150 }; 2151 2152 static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_qx_clk = { 2153 .halt_reg = 0x9200c, 2154 .halt_check = BRANCH_HALT_SKIP, 2155 .hwcg_reg = 0x9200c, 2156 .hwcg_bit = 1, 2157 .clkr = { 2158 .enable_reg = 0x62000, 2159 .enable_mask = BIT(11), 2160 .hw.init = &(const struct clk_init_data) { 2161 .name = "gcc_snoc_cnoc_gemnoc_pcie_qx_clk", 2162 .ops = &clk_branch2_ops, 2163 }, 2164 }, 2165 }; 2166 2167 static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk = { 2168 .halt_reg = 0x92010, 2169 .halt_check = BRANCH_HALT_SKIP, 2170 .hwcg_reg = 0x92010, 2171 .hwcg_bit = 1, 2172 .clkr = { 2173 .enable_reg = 0x62000, 2174 .enable_mask = BIT(12), 2175 .hw.init = &(const struct clk_init_data) { 2176 .name = "gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk", 2177 .ops = &clk_branch2_ops, 2178 }, 2179 }, 2180 }; 2181 2182 static struct clk_branch gcc_snoc_cnoc_pcie_qx_clk = { 2183 .halt_reg = 0x84030, 2184 .halt_check = BRANCH_HALT, 2185 .clkr = { 2186 .enable_reg = 0x84030, 2187 .enable_mask = BIT(0), 2188 .hw.init = &(const struct clk_init_data) { 2189 .name = "gcc_snoc_cnoc_pcie_qx_clk", 2190 .ops = &clk_branch2_ops, 2191 }, 2192 }, 2193 }; 2194 2195 static struct clk_branch gcc_snoc_pcie_sf_center_qx_clk = { 2196 .halt_reg = 0x92014, 2197 .halt_check = BRANCH_HALT_SKIP, 2198 .hwcg_reg = 0x92014, 2199 .hwcg_bit = 1, 2200 .clkr = { 2201 .enable_reg = 0x62000, 2202 .enable_mask = BIT(19), 2203 .hw.init = &(const struct clk_init_data) { 2204 .name = "gcc_snoc_pcie_sf_center_qx_clk", 2205 .ops = &clk_branch2_ops, 2206 }, 2207 }, 2208 }; 2209 2210 static struct clk_branch gcc_snoc_pcie_sf_south_qx_clk = { 2211 .halt_reg = 0x92018, 2212 .halt_check = BRANCH_HALT_SKIP, 2213 .hwcg_reg = 0x92018, 2214 .hwcg_bit = 1, 2215 .clkr = { 2216 .enable_reg = 0x62000, 2217 .enable_mask = BIT(22), 2218 .hw.init = &(const struct clk_init_data) { 2219 .name = "gcc_snoc_pcie_sf_south_qx_clk", 2220 .ops = &clk_branch2_ops, 2221 }, 2222 }, 2223 }; 2224 2225 static struct clk_branch gcc_tsc_cfg_ahb_clk = { 2226 .halt_reg = 0x5700c, 2227 .halt_check = BRANCH_HALT, 2228 .clkr = { 2229 .enable_reg = 0x5700c, 2230 .enable_mask = BIT(0), 2231 .hw.init = &(const struct clk_init_data) { 2232 .name = "gcc_tsc_cfg_ahb_clk", 2233 .ops = &clk_branch2_ops, 2234 }, 2235 }, 2236 }; 2237 2238 static struct clk_branch gcc_tsc_cntr_clk = { 2239 .halt_reg = 0x57004, 2240 .halt_check = BRANCH_HALT, 2241 .clkr = { 2242 .enable_reg = 0x57004, 2243 .enable_mask = BIT(0), 2244 .hw.init = &(const struct clk_init_data) { 2245 .name = "gcc_tsc_cntr_clk", 2246 .parent_hws = (const struct clk_hw*[]) { 2247 &gcc_tsc_clk_src.clkr.hw, 2248 }, 2249 .num_parents = 1, 2250 .flags = CLK_SET_RATE_PARENT, 2251 .ops = &clk_branch2_ops, 2252 }, 2253 }, 2254 }; 2255 2256 static struct clk_branch gcc_tsc_etu_clk = { 2257 .halt_reg = 0x57008, 2258 .halt_check = BRANCH_HALT, 2259 .clkr = { 2260 .enable_reg = 0x57008, 2261 .enable_mask = BIT(0), 2262 .hw.init = &(const struct clk_init_data) { 2263 .name = "gcc_tsc_etu_clk", 2264 .parent_hws = (const struct clk_hw*[]) { 2265 &gcc_tsc_clk_src.clkr.hw, 2266 }, 2267 .num_parents = 1, 2268 .flags = CLK_SET_RATE_PARENT, 2269 .ops = &clk_branch2_ops, 2270 }, 2271 }, 2272 }; 2273 2274 static struct clk_branch gcc_usb2_clkref_en = { 2275 .halt_reg = 0x9c008, 2276 .halt_check = BRANCH_HALT, 2277 .clkr = { 2278 .enable_reg = 0x9c008, 2279 .enable_mask = BIT(0), 2280 .hw.init = &(const struct clk_init_data) { 2281 .name = "gcc_usb2_clkref_en", 2282 .ops = &clk_branch2_ops, 2283 }, 2284 }, 2285 }; 2286 2287 static struct clk_branch gcc_usb30_prim_master_clk = { 2288 .halt_reg = 0x49018, 2289 .halt_check = BRANCH_HALT, 2290 .clkr = { 2291 .enable_reg = 0x49018, 2292 .enable_mask = BIT(0), 2293 .hw.init = &(const struct clk_init_data) { 2294 .name = "gcc_usb30_prim_master_clk", 2295 .parent_hws = (const struct clk_hw*[]) { 2296 &gcc_usb30_prim_master_clk_src.clkr.hw, 2297 }, 2298 .num_parents = 1, 2299 .flags = CLK_SET_RATE_PARENT, 2300 .ops = &clk_branch2_ops, 2301 }, 2302 }, 2303 }; 2304 2305 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2306 .halt_reg = 0x49024, 2307 .halt_check = BRANCH_HALT, 2308 .clkr = { 2309 .enable_reg = 0x49024, 2310 .enable_mask = BIT(0), 2311 .hw.init = &(const struct clk_init_data) { 2312 .name = "gcc_usb30_prim_mock_utmi_clk", 2313 .parent_hws = (const struct clk_hw*[]) { 2314 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 2315 }, 2316 .num_parents = 1, 2317 .flags = CLK_SET_RATE_PARENT, 2318 .ops = &clk_branch2_ops, 2319 }, 2320 }, 2321 }; 2322 2323 static struct clk_branch gcc_usb30_prim_sleep_clk = { 2324 .halt_reg = 0x49020, 2325 .halt_check = BRANCH_HALT, 2326 .clkr = { 2327 .enable_reg = 0x49020, 2328 .enable_mask = BIT(0), 2329 .hw.init = &(const struct clk_init_data) { 2330 .name = "gcc_usb30_prim_sleep_clk", 2331 .ops = &clk_branch2_ops, 2332 }, 2333 }, 2334 }; 2335 2336 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2337 .halt_reg = 0x49060, 2338 .halt_check = BRANCH_HALT, 2339 .clkr = { 2340 .enable_reg = 0x49060, 2341 .enable_mask = BIT(0), 2342 .hw.init = &(const struct clk_init_data) { 2343 .name = "gcc_usb3_prim_phy_aux_clk", 2344 .parent_hws = (const struct clk_hw*[]) { 2345 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2346 }, 2347 .num_parents = 1, 2348 .flags = CLK_SET_RATE_PARENT, 2349 .ops = &clk_branch2_ops, 2350 }, 2351 }, 2352 }; 2353 2354 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2355 .halt_reg = 0x49064, 2356 .halt_check = BRANCH_HALT, 2357 .clkr = { 2358 .enable_reg = 0x49064, 2359 .enable_mask = BIT(0), 2360 .hw.init = &(const struct clk_init_data) { 2361 .name = "gcc_usb3_prim_phy_com_aux_clk", 2362 .parent_hws = (const struct clk_hw*[]) { 2363 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2364 }, 2365 .num_parents = 1, 2366 .flags = CLK_SET_RATE_PARENT, 2367 .ops = &clk_branch2_ops, 2368 }, 2369 }, 2370 }; 2371 2372 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2373 .halt_reg = 0x49068, 2374 .halt_check = BRANCH_HALT_DELAY, 2375 .hwcg_reg = 0x49068, 2376 .hwcg_bit = 1, 2377 .clkr = { 2378 .enable_reg = 0x49068, 2379 .enable_mask = BIT(0), 2380 .hw.init = &(const struct clk_init_data) { 2381 .name = "gcc_usb3_prim_phy_pipe_clk", 2382 .parent_hws = (const struct clk_hw*[]) { 2383 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 2384 }, 2385 .num_parents = 1, 2386 .flags = CLK_SET_RATE_PARENT, 2387 .ops = &clk_branch2_ops, 2388 }, 2389 }, 2390 }; 2391 2392 static struct clk_regmap *gcc_qdu1000_clocks[] = { 2393 [GCC_AGGRE_NOC_ECPRI_DMA_CLK] = &gcc_aggre_noc_ecpri_dma_clk.clkr, 2394 [GCC_AGGRE_NOC_ECPRI_DMA_CLK_SRC] = &gcc_aggre_noc_ecpri_dma_clk_src.clkr, 2395 [GCC_AGGRE_NOC_ECPRI_GSI_CLK_SRC] = &gcc_aggre_noc_ecpri_gsi_clk_src.clkr, 2396 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2397 [GCC_CFG_NOC_ECPRI_CC_AHB_CLK] = &gcc_cfg_noc_ecpri_cc_ahb_clk.clkr, 2398 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2399 [GCC_DDRSS_ECPRI_DMA_CLK] = &gcc_ddrss_ecpri_dma_clk.clkr, 2400 [GCC_ECPRI_AHB_CLK] = &gcc_ecpri_ahb_clk.clkr, 2401 [GCC_ECPRI_CC_GPLL0_CLK_SRC] = &gcc_ecpri_cc_gpll0_clk_src.clkr, 2402 [GCC_ECPRI_CC_GPLL1_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll1_even_clk_src.clkr, 2403 [GCC_ECPRI_CC_GPLL2_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll2_even_clk_src.clkr, 2404 [GCC_ECPRI_CC_GPLL3_CLK_SRC] = &gcc_ecpri_cc_gpll3_clk_src.clkr, 2405 [GCC_ECPRI_CC_GPLL4_CLK_SRC] = &gcc_ecpri_cc_gpll4_clk_src.clkr, 2406 [GCC_ECPRI_CC_GPLL5_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll5_even_clk_src.clkr, 2407 [GCC_ECPRI_XO_CLK] = &gcc_ecpri_xo_clk.clkr, 2408 [GCC_ETH_DBG_SNOC_AXI_CLK] = &gcc_eth_dbg_snoc_axi_clk.clkr, 2409 [GCC_GEMNOC_PCIE_QX_CLK] = &gcc_gemnoc_pcie_qx_clk.clkr, 2410 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2411 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2412 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2413 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2414 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2415 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2416 [GCC_GPLL0] = &gcc_gpll0.clkr, 2417 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr, 2418 [GCC_GPLL1] = &gcc_gpll1.clkr, 2419 [GCC_GPLL2] = &gcc_gpll2.clkr, 2420 [GCC_GPLL2_OUT_EVEN] = &gcc_gpll2_out_even.clkr, 2421 [GCC_GPLL3] = &gcc_gpll3.clkr, 2422 [GCC_GPLL4] = &gcc_gpll4.clkr, 2423 [GCC_GPLL5] = &gcc_gpll5.clkr, 2424 [GCC_GPLL5_OUT_EVEN] = &gcc_gpll5_out_even.clkr, 2425 [GCC_GPLL6] = &gcc_gpll6.clkr, 2426 [GCC_GPLL7] = &gcc_gpll7.clkr, 2427 [GCC_GPLL8] = &gcc_gpll8.clkr, 2428 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 2429 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 2430 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 2431 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr, 2432 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 2433 [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr, 2434 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr, 2435 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr, 2436 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 2437 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 2438 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 2439 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2440 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2441 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2442 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2443 [GCC_QMIP_ANOC_PCIE_CLK] = &gcc_qmip_anoc_pcie_clk.clkr, 2444 [GCC_QMIP_ECPRI_DMA0_CLK] = &gcc_qmip_ecpri_dma0_clk.clkr, 2445 [GCC_QMIP_ECPRI_DMA1_CLK] = &gcc_qmip_ecpri_dma1_clk.clkr, 2446 [GCC_QMIP_ECPRI_GSI_CLK] = &gcc_qmip_ecpri_gsi_clk.clkr, 2447 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2448 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2449 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2450 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2451 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2452 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2453 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2454 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2455 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2456 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2457 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2458 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2459 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 2460 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 2461 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 2462 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 2463 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 2464 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 2465 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2466 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2467 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2468 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2469 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2470 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2471 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2472 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2473 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2474 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2475 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2476 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2477 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 2478 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 2479 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr, 2480 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr, 2481 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr, 2482 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr, 2483 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2484 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2485 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2486 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2487 [GCC_SDCC5_AHB_CLK] = &gcc_sdcc5_ahb_clk.clkr, 2488 [GCC_SDCC5_APPS_CLK] = &gcc_sdcc5_apps_clk.clkr, 2489 [GCC_SDCC5_APPS_CLK_SRC] = &gcc_sdcc5_apps_clk_src.clkr, 2490 [GCC_SDCC5_ICE_CORE_CLK] = &gcc_sdcc5_ice_core_clk.clkr, 2491 [GCC_SDCC5_ICE_CORE_CLK_SRC] = &gcc_sdcc5_ice_core_clk_src.clkr, 2492 [GCC_SM_BUS_AHB_CLK] = &gcc_sm_bus_ahb_clk.clkr, 2493 [GCC_SM_BUS_XO_CLK] = &gcc_sm_bus_xo_clk.clkr, 2494 [GCC_SM_BUS_XO_CLK_SRC] = &gcc_sm_bus_xo_clk_src.clkr, 2495 [GCC_SNOC_CNOC_GEMNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_qx_clk.clkr, 2496 [GCC_SNOC_CNOC_GEMNOC_PCIE_SOUTH_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk.clkr, 2497 [GCC_SNOC_CNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_pcie_qx_clk.clkr, 2498 [GCC_SNOC_PCIE_SF_CENTER_QX_CLK] = &gcc_snoc_pcie_sf_center_qx_clk.clkr, 2499 [GCC_SNOC_PCIE_SF_SOUTH_QX_CLK] = &gcc_snoc_pcie_sf_south_qx_clk.clkr, 2500 [GCC_TSC_CFG_AHB_CLK] = &gcc_tsc_cfg_ahb_clk.clkr, 2501 [GCC_TSC_CLK_SRC] = &gcc_tsc_clk_src.clkr, 2502 [GCC_TSC_CNTR_CLK] = &gcc_tsc_cntr_clk.clkr, 2503 [GCC_TSC_ETU_CLK] = &gcc_tsc_etu_clk.clkr, 2504 [GCC_USB2_CLKREF_EN] = &gcc_usb2_clkref_en.clkr, 2505 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2506 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2507 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2508 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2509 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 2510 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2511 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2512 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2513 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2514 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2515 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr, 2516 [GCC_ETH_100G_C2C_HM_APB_CLK] = &gcc_eth_100g_c2c_hm_apb_clk.clkr, 2517 [GCC_ETH_100G_FH_HM_APB_0_CLK] = &gcc_eth_100g_fh_hm_apb_0_clk.clkr, 2518 [GCC_ETH_100G_FH_HM_APB_1_CLK] = &gcc_eth_100g_fh_hm_apb_1_clk.clkr, 2519 [GCC_ETH_100G_FH_HM_APB_2_CLK] = &gcc_eth_100g_fh_hm_apb_2_clk.clkr, 2520 [GCC_ETH_DBG_C2C_HM_APB_CLK] = &gcc_eth_dbg_c2c_hm_apb_clk.clkr, 2521 [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr, 2522 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr, 2523 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 2524 }; 2525 2526 static const struct qcom_reset_map gcc_qdu1000_resets[] = { 2527 [GCC_ECPRI_CC_BCR] = { 0x3e000 }, 2528 [GCC_ECPRI_SS_BCR] = { 0x3a000 }, 2529 [GCC_ETH_WRAPPER_BCR] = { 0x39000 }, 2530 [GCC_PCIE_0_BCR] = { 0x9d000 }, 2531 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x9e014 }, 2532 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x9e020 }, 2533 [GCC_PCIE_0_PHY_BCR] = { 0x7c000 }, 2534 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 }, 2535 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c }, 2536 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 }, 2537 [GCC_PDM_BCR] = { 0x43000 }, 2538 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 }, 2539 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 }, 2540 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 }, 2541 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 }, 2542 [GCC_SDCC5_BCR] = { 0x3b000 }, 2543 [GCC_TSC_BCR] = { 0x57000 }, 2544 [GCC_USB30_PRIM_BCR] = { 0x49000 }, 2545 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 }, 2546 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 }, 2547 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 }, 2548 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c }, 2549 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 }, 2550 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 }, 2551 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 }, 2552 }; 2553 2554 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 2555 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2556 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2557 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2558 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2559 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2560 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 2561 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src), 2562 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src), 2563 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2564 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2565 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2566 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2567 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2568 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 2569 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src), 2570 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src), 2571 }; 2572 2573 static const struct regmap_config gcc_qdu1000_regmap_config = { 2574 .reg_bits = 32, 2575 .reg_stride = 4, 2576 .val_bits = 32, 2577 .max_register = 0x1f41f0, 2578 .fast_io = true, 2579 }; 2580 2581 static const struct qcom_cc_desc gcc_qdu1000_desc = { 2582 .config = &gcc_qdu1000_regmap_config, 2583 .clks = gcc_qdu1000_clocks, 2584 .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks), 2585 .resets = gcc_qdu1000_resets, 2586 .num_resets = ARRAY_SIZE(gcc_qdu1000_resets), 2587 }; 2588 2589 static const struct of_device_id gcc_qdu1000_match_table[] = { 2590 { .compatible = "qcom,qdu1000-gcc" }, 2591 { } 2592 }; 2593 MODULE_DEVICE_TABLE(of, gcc_qdu1000_match_table); 2594 2595 static int gcc_qdu1000_probe(struct platform_device *pdev) 2596 { 2597 struct regmap *regmap; 2598 int ret; 2599 2600 regmap = qcom_cc_map(pdev, &gcc_qdu1000_desc); 2601 if (IS_ERR(regmap)) 2602 return PTR_ERR(regmap); 2603 2604 /* Update FORCE_MEM_CORE_ON for gcc_pcie_0_mstr_axi_clk */ 2605 regmap_update_bits(regmap, 0x9d024, BIT(14), BIT(14)); 2606 2607 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 2608 ARRAY_SIZE(gcc_dfs_clocks)); 2609 if (ret) 2610 return ret; 2611 2612 ret = qcom_cc_really_probe(pdev, &gcc_qdu1000_desc, regmap); 2613 if (ret) 2614 return dev_err_probe(&pdev->dev, ret, "Failed to register GCC clocks\n"); 2615 2616 return ret; 2617 } 2618 2619 static struct platform_driver gcc_qdu1000_driver = { 2620 .probe = gcc_qdu1000_probe, 2621 .driver = { 2622 .name = "gcc-qdu1000", 2623 .of_match_table = gcc_qdu1000_match_table, 2624 }, 2625 }; 2626 2627 static int __init gcc_qdu1000_init(void) 2628 { 2629 return platform_driver_register(&gcc_qdu1000_driver); 2630 } 2631 subsys_initcall(gcc_qdu1000_init); 2632 2633 static void __exit gcc_qdu1000_exit(void) 2634 { 2635 platform_driver_unregister(&gcc_qdu1000_driver); 2636 } 2637 module_exit(gcc_qdu1000_exit); 2638 2639 MODULE_DESCRIPTION("QTI GCC QDU1000 Driver"); 2640 MODULE_LICENSE("GPL"); 2641