1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. 3 4 #include <linux/kernel.h> 5 #include <linux/bitops.h> 6 #include <linux/err.h> 7 #include <linux/platform_device.h> 8 #include <linux/module.h> 9 #include <linux/of.h> 10 #include <linux/of_device.h> 11 #include <linux/clk-provider.h> 12 #include <linux/regmap.h> 13 #include <linux/reset-controller.h> 14 15 #include <dt-bindings/clock/qcom,gcc-sm8150.h> 16 17 #include "common.h" 18 #include "clk-alpha-pll.h" 19 #include "clk-branch.h" 20 #include "clk-pll.h" 21 #include "clk-rcg.h" 22 #include "clk-regmap.h" 23 #include "reset.h" 24 #include "gdsc.h" 25 26 enum { 27 P_BI_TCXO, 28 P_AUD_REF_CLK, 29 P_CORE_BI_PLL_TEST_SE, 30 P_GPLL0_OUT_EVEN, 31 P_GPLL0_OUT_MAIN, 32 P_GPLL7_OUT_MAIN, 33 P_GPLL9_OUT_MAIN, 34 P_SLEEP_CLK, 35 }; 36 37 static const struct pll_vco trion_vco[] = { 38 { 249600000, 2000000000, 0 }, 39 }; 40 41 static struct clk_alpha_pll gpll0 = { 42 .offset = 0x0, 43 .vco_table = trion_vco, 44 .num_vco = ARRAY_SIZE(trion_vco), 45 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 46 .clkr = { 47 .enable_reg = 0x52000, 48 .enable_mask = BIT(0), 49 .hw.init = &(struct clk_init_data){ 50 .name = "gpll0", 51 .parent_data = &(const struct clk_parent_data){ 52 .fw_name = "bi_tcxo", 53 .name = "bi_tcxo", 54 }, 55 .num_parents = 1, 56 .ops = &clk_trion_fixed_pll_ops, 57 }, 58 }, 59 }; 60 61 static const struct clk_div_table post_div_table_trion_even[] = { 62 { 0x0, 1 }, 63 { 0x1, 2 }, 64 { 0x3, 4 }, 65 { 0x7, 8 }, 66 { } 67 }; 68 69 static struct clk_alpha_pll_postdiv gpll0_out_even = { 70 .offset = 0x0, 71 .post_div_shift = 8, 72 .post_div_table = post_div_table_trion_even, 73 .num_post_div = ARRAY_SIZE(post_div_table_trion_even), 74 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 75 .width = 4, 76 .clkr.hw.init = &(struct clk_init_data){ 77 .name = "gpll0_out_even", 78 .parent_data = &(const struct clk_parent_data){ 79 .hw = &gpll0.clkr.hw, 80 }, 81 .num_parents = 1, 82 .ops = &clk_trion_pll_postdiv_ops, 83 }, 84 }; 85 86 static struct clk_alpha_pll gpll7 = { 87 .offset = 0x1a000, 88 .vco_table = trion_vco, 89 .num_vco = ARRAY_SIZE(trion_vco), 90 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 91 .clkr = { 92 .enable_reg = 0x52000, 93 .enable_mask = BIT(7), 94 .hw.init = &(struct clk_init_data){ 95 .name = "gpll7", 96 .parent_data = &(const struct clk_parent_data){ 97 .fw_name = "bi_tcxo", 98 .name = "bi_tcxo", 99 }, 100 .num_parents = 1, 101 .ops = &clk_trion_fixed_pll_ops, 102 }, 103 }, 104 }; 105 106 static struct clk_alpha_pll gpll9 = { 107 .offset = 0x1c000, 108 .vco_table = trion_vco, 109 .num_vco = ARRAY_SIZE(trion_vco), 110 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 111 .clkr = { 112 .enable_reg = 0x52000, 113 .enable_mask = BIT(9), 114 .hw.init = &(struct clk_init_data){ 115 .name = "gpll9", 116 .parent_data = &(const struct clk_parent_data){ 117 .fw_name = "bi_tcxo", 118 .name = "bi_tcxo", 119 }, 120 .num_parents = 1, 121 .ops = &clk_trion_fixed_pll_ops, 122 }, 123 }, 124 }; 125 126 static const struct parent_map gcc_parent_map_0[] = { 127 { P_BI_TCXO, 0 }, 128 { P_GPLL0_OUT_MAIN, 1 }, 129 { P_GPLL0_OUT_EVEN, 6 }, 130 { P_CORE_BI_PLL_TEST_SE, 7 }, 131 }; 132 133 static const struct clk_parent_data gcc_parents_0[] = { 134 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 135 { .hw = &gpll0.clkr.hw }, 136 { .hw = &gpll0_out_even.clkr.hw }, 137 { .fw_name = "core_bi_pll_test_se" }, 138 }; 139 140 static const struct parent_map gcc_parent_map_1[] = { 141 { P_BI_TCXO, 0 }, 142 { P_GPLL0_OUT_MAIN, 1 }, 143 { P_SLEEP_CLK, 5 }, 144 { P_GPLL0_OUT_EVEN, 6 }, 145 { P_CORE_BI_PLL_TEST_SE, 7 }, 146 }; 147 148 static const struct clk_parent_data gcc_parents_1[] = { 149 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 150 { .hw = &gpll0.clkr.hw }, 151 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 152 { .hw = &gpll0_out_even.clkr.hw }, 153 { .fw_name = "core_bi_pll_test_se" }, 154 }; 155 156 static const struct parent_map gcc_parent_map_2[] = { 157 { P_BI_TCXO, 0 }, 158 { P_SLEEP_CLK, 5 }, 159 { P_CORE_BI_PLL_TEST_SE, 7 }, 160 }; 161 162 static const struct clk_parent_data gcc_parents_2[] = { 163 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 164 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 165 { .fw_name = "core_bi_pll_test_se" }, 166 }; 167 168 static const struct parent_map gcc_parent_map_3[] = { 169 { P_BI_TCXO, 0 }, 170 { P_GPLL0_OUT_MAIN, 1 }, 171 { P_CORE_BI_PLL_TEST_SE, 7 }, 172 }; 173 174 static const struct clk_parent_data gcc_parents_3[] = { 175 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 176 { .hw = &gpll0.clkr.hw }, 177 { .fw_name = "core_bi_pll_test_se"}, 178 }; 179 180 static const struct parent_map gcc_parent_map_4[] = { 181 { P_BI_TCXO, 0 }, 182 { P_CORE_BI_PLL_TEST_SE, 7 }, 183 }; 184 185 static const struct clk_parent_data gcc_parents_4[] = { 186 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 187 { .fw_name = "core_bi_pll_test_se" }, 188 }; 189 190 static const struct parent_map gcc_parent_map_5[] = { 191 { P_BI_TCXO, 0 }, 192 { P_GPLL0_OUT_MAIN, 1 }, 193 { P_GPLL7_OUT_MAIN, 3 }, 194 { P_GPLL0_OUT_EVEN, 6 }, 195 { P_CORE_BI_PLL_TEST_SE, 7 }, 196 }; 197 198 static const struct clk_parent_data gcc_parents_5[] = { 199 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 200 { .hw = &gpll0.clkr.hw }, 201 { .hw = &gpll7.clkr.hw }, 202 { .hw = &gpll0_out_even.clkr.hw }, 203 { .fw_name = "core_bi_pll_test_se" }, 204 }; 205 206 static const struct parent_map gcc_parent_map_6[] = { 207 { P_BI_TCXO, 0 }, 208 { P_GPLL0_OUT_MAIN, 1 }, 209 { P_GPLL9_OUT_MAIN, 2 }, 210 { P_GPLL0_OUT_EVEN, 6 }, 211 { P_CORE_BI_PLL_TEST_SE, 7 }, 212 }; 213 214 static const struct clk_parent_data gcc_parents_6[] = { 215 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 216 { .hw = &gpll0.clkr.hw }, 217 { .hw = &gpll9.clkr.hw }, 218 { .hw = &gpll0_out_even.clkr.hw }, 219 { .fw_name = "core_bi_pll_test_se" }, 220 }; 221 222 static const struct parent_map gcc_parent_map_7[] = { 223 { P_BI_TCXO, 0 }, 224 { P_GPLL0_OUT_MAIN, 1 }, 225 { P_AUD_REF_CLK, 2 }, 226 { P_GPLL0_OUT_EVEN, 6 }, 227 { P_CORE_BI_PLL_TEST_SE, 7 }, 228 }; 229 230 static const struct clk_parent_data gcc_parents_7[] = { 231 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 232 { .hw = &gpll0.clkr.hw }, 233 { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" }, 234 { .hw = &gpll0_out_even.clkr.hw }, 235 { .fw_name = "core_bi_pll_test_se" }, 236 }; 237 238 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = { 239 F(19200000, P_BI_TCXO, 1, 0, 0), 240 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 241 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 242 { } 243 }; 244 245 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = { 246 .cmd_rcgr = 0x48014, 247 .mnd_width = 0, 248 .hid_width = 5, 249 .parent_map = gcc_parent_map_0, 250 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src, 251 .clkr.hw.init = &(struct clk_init_data){ 252 .name = "gcc_cpuss_ahb_clk_src", 253 .parent_data = gcc_parents_0, 254 .num_parents = 4, 255 .flags = CLK_SET_RATE_PARENT, 256 .ops = &clk_rcg2_ops, 257 }, 258 }; 259 260 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { 261 F(19200000, P_BI_TCXO, 1, 0, 0), 262 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 263 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 264 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 265 { } 266 }; 267 268 static struct clk_rcg2 gcc_emac_ptp_clk_src = { 269 .cmd_rcgr = 0x6038, 270 .mnd_width = 0, 271 .hid_width = 5, 272 .parent_map = gcc_parent_map_5, 273 .freq_tbl = ftbl_gcc_emac_ptp_clk_src, 274 .clkr.hw.init = &(struct clk_init_data){ 275 .name = "gcc_emac_ptp_clk_src", 276 .parent_data = gcc_parents_5, 277 .num_parents = 5, 278 .flags = CLK_SET_RATE_PARENT, 279 .ops = &clk_rcg2_ops, 280 }, 281 }; 282 283 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = { 284 F(2500000, P_BI_TCXO, 1, 25, 192), 285 F(5000000, P_BI_TCXO, 1, 25, 96), 286 F(19200000, P_BI_TCXO, 1, 0, 0), 287 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 288 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 289 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 290 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 291 { } 292 }; 293 294 static struct clk_rcg2 gcc_emac_rgmii_clk_src = { 295 .cmd_rcgr = 0x601c, 296 .mnd_width = 8, 297 .hid_width = 5, 298 .parent_map = gcc_parent_map_5, 299 .freq_tbl = ftbl_gcc_emac_rgmii_clk_src, 300 .clkr.hw.init = &(struct clk_init_data){ 301 .name = "gcc_emac_rgmii_clk_src", 302 .parent_data = gcc_parents_5, 303 .num_parents = 5, 304 .flags = CLK_SET_RATE_PARENT, 305 .ops = &clk_rcg2_ops, 306 }, 307 }; 308 309 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 310 F(19200000, P_BI_TCXO, 1, 0, 0), 311 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 312 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 313 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 314 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 315 { } 316 }; 317 318 static struct clk_rcg2 gcc_gp1_clk_src = { 319 .cmd_rcgr = 0x64004, 320 .mnd_width = 8, 321 .hid_width = 5, 322 .parent_map = gcc_parent_map_1, 323 .freq_tbl = ftbl_gcc_gp1_clk_src, 324 .clkr.hw.init = &(struct clk_init_data){ 325 .name = "gcc_gp1_clk_src", 326 .parent_data = gcc_parents_1, 327 .num_parents = 5, 328 .flags = CLK_SET_RATE_PARENT, 329 .ops = &clk_rcg2_ops, 330 }, 331 }; 332 333 static struct clk_rcg2 gcc_gp2_clk_src = { 334 .cmd_rcgr = 0x65004, 335 .mnd_width = 8, 336 .hid_width = 5, 337 .parent_map = gcc_parent_map_1, 338 .freq_tbl = ftbl_gcc_gp1_clk_src, 339 .clkr.hw.init = &(struct clk_init_data){ 340 .name = "gcc_gp2_clk_src", 341 .parent_data = gcc_parents_1, 342 .num_parents = 5, 343 .flags = CLK_SET_RATE_PARENT, 344 .ops = &clk_rcg2_ops, 345 }, 346 }; 347 348 static struct clk_rcg2 gcc_gp3_clk_src = { 349 .cmd_rcgr = 0x66004, 350 .mnd_width = 8, 351 .hid_width = 5, 352 .parent_map = gcc_parent_map_1, 353 .freq_tbl = ftbl_gcc_gp1_clk_src, 354 .clkr.hw.init = &(struct clk_init_data){ 355 .name = "gcc_gp3_clk_src", 356 .parent_data = gcc_parents_1, 357 .num_parents = 5, 358 .flags = CLK_SET_RATE_PARENT, 359 .ops = &clk_rcg2_ops, 360 }, 361 }; 362 363 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 364 F(9600000, P_BI_TCXO, 2, 0, 0), 365 F(19200000, P_BI_TCXO, 1, 0, 0), 366 { } 367 }; 368 369 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 370 .cmd_rcgr = 0x6b02c, 371 .mnd_width = 16, 372 .hid_width = 5, 373 .parent_map = gcc_parent_map_2, 374 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 375 .clkr.hw.init = &(struct clk_init_data){ 376 .name = "gcc_pcie_0_aux_clk_src", 377 .parent_data = gcc_parents_2, 378 .num_parents = 3, 379 .flags = CLK_SET_RATE_PARENT, 380 .ops = &clk_rcg2_ops, 381 }, 382 }; 383 384 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = { 385 .cmd_rcgr = 0x8d02c, 386 .mnd_width = 16, 387 .hid_width = 5, 388 .parent_map = gcc_parent_map_2, 389 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 390 .clkr.hw.init = &(struct clk_init_data){ 391 .name = "gcc_pcie_1_aux_clk_src", 392 .parent_data = gcc_parents_2, 393 .num_parents = 3, 394 .flags = CLK_SET_RATE_PARENT, 395 .ops = &clk_rcg2_ops, 396 }, 397 }; 398 399 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = { 400 F(19200000, P_BI_TCXO, 1, 0, 0), 401 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 402 { } 403 }; 404 405 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = { 406 .cmd_rcgr = 0x6f014, 407 .mnd_width = 0, 408 .hid_width = 5, 409 .parent_map = gcc_parent_map_0, 410 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src, 411 .clkr.hw.init = &(struct clk_init_data){ 412 .name = "gcc_pcie_phy_refgen_clk_src", 413 .parent_data = gcc_parents_0, 414 .num_parents = 4, 415 .flags = CLK_SET_RATE_PARENT, 416 .ops = &clk_rcg2_ops, 417 }, 418 }; 419 420 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 421 F(9600000, P_BI_TCXO, 2, 0, 0), 422 F(19200000, P_BI_TCXO, 1, 0, 0), 423 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 424 { } 425 }; 426 427 static struct clk_rcg2 gcc_pdm2_clk_src = { 428 .cmd_rcgr = 0x33010, 429 .mnd_width = 0, 430 .hid_width = 5, 431 .parent_map = gcc_parent_map_0, 432 .freq_tbl = ftbl_gcc_pdm2_clk_src, 433 .clkr.hw.init = &(struct clk_init_data){ 434 .name = "gcc_pdm2_clk_src", 435 .parent_data = gcc_parents_0, 436 .num_parents = 4, 437 .flags = CLK_SET_RATE_PARENT, 438 .ops = &clk_rcg2_ops, 439 }, 440 }; 441 442 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = { 443 F(19200000, P_BI_TCXO, 1, 0, 0), 444 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 445 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 446 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 447 { } 448 }; 449 450 static struct clk_rcg2 gcc_qspi_core_clk_src = { 451 .cmd_rcgr = 0x4b008, 452 .mnd_width = 0, 453 .hid_width = 5, 454 .parent_map = gcc_parent_map_0, 455 .freq_tbl = ftbl_gcc_qspi_core_clk_src, 456 .clkr.hw.init = &(struct clk_init_data){ 457 .name = "gcc_qspi_core_clk_src", 458 .parent_data = gcc_parents_0, 459 .num_parents = 4, 460 .flags = CLK_SET_RATE_PARENT, 461 .ops = &clk_rcg2_ops, 462 }, 463 }; 464 465 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 466 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625), 467 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625), 468 F(19200000, P_BI_TCXO, 1, 0, 0), 469 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625), 470 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75), 471 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25), 472 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75), 473 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15), 474 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25), 475 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 476 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375), 477 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75), 478 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625), 479 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0), 480 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75), 481 { } 482 }; 483 484 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 485 .cmd_rcgr = 0x17148, 486 .mnd_width = 16, 487 .hid_width = 5, 488 .parent_map = gcc_parent_map_0, 489 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 490 .clkr.hw.init = &(struct clk_init_data){ 491 .name = "gcc_qupv3_wrap0_s0_clk_src", 492 .parent_data = gcc_parents_0, 493 .num_parents = 4, 494 .flags = CLK_SET_RATE_PARENT, 495 .ops = &clk_rcg2_ops, 496 }, 497 }; 498 499 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 500 .cmd_rcgr = 0x17278, 501 .mnd_width = 16, 502 .hid_width = 5, 503 .parent_map = gcc_parent_map_0, 504 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 505 .clkr.hw.init = &(struct clk_init_data){ 506 .name = "gcc_qupv3_wrap0_s1_clk_src", 507 .parent_data = gcc_parents_0, 508 .num_parents = 4, 509 .flags = CLK_SET_RATE_PARENT, 510 .ops = &clk_rcg2_ops, 511 }, 512 }; 513 514 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 515 .cmd_rcgr = 0x173a8, 516 .mnd_width = 16, 517 .hid_width = 5, 518 .parent_map = gcc_parent_map_0, 519 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 520 .clkr.hw.init = &(struct clk_init_data){ 521 .name = "gcc_qupv3_wrap0_s2_clk_src", 522 .parent_data = gcc_parents_0, 523 .num_parents = 4, 524 .flags = CLK_SET_RATE_PARENT, 525 .ops = &clk_rcg2_ops, 526 }, 527 }; 528 529 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 530 .cmd_rcgr = 0x174d8, 531 .mnd_width = 16, 532 .hid_width = 5, 533 .parent_map = gcc_parent_map_0, 534 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 535 .clkr.hw.init = &(struct clk_init_data){ 536 .name = "gcc_qupv3_wrap0_s3_clk_src", 537 .parent_data = gcc_parents_0, 538 .num_parents = 4, 539 .flags = CLK_SET_RATE_PARENT, 540 .ops = &clk_rcg2_ops, 541 }, 542 }; 543 544 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 545 .cmd_rcgr = 0x17608, 546 .mnd_width = 16, 547 .hid_width = 5, 548 .parent_map = gcc_parent_map_0, 549 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 550 .clkr.hw.init = &(struct clk_init_data){ 551 .name = "gcc_qupv3_wrap0_s4_clk_src", 552 .parent_data = gcc_parents_0, 553 .num_parents = 4, 554 .flags = CLK_SET_RATE_PARENT, 555 .ops = &clk_rcg2_ops, 556 }, 557 }; 558 559 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 560 .cmd_rcgr = 0x17738, 561 .mnd_width = 16, 562 .hid_width = 5, 563 .parent_map = gcc_parent_map_0, 564 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 565 .clkr.hw.init = &(struct clk_init_data){ 566 .name = "gcc_qupv3_wrap0_s5_clk_src", 567 .parent_data = gcc_parents_0, 568 .num_parents = 4, 569 .flags = CLK_SET_RATE_PARENT, 570 .ops = &clk_rcg2_ops, 571 }, 572 }; 573 574 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 575 .cmd_rcgr = 0x17868, 576 .mnd_width = 16, 577 .hid_width = 5, 578 .parent_map = gcc_parent_map_0, 579 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 580 .clkr.hw.init = &(struct clk_init_data){ 581 .name = "gcc_qupv3_wrap0_s6_clk_src", 582 .parent_data = gcc_parents_0, 583 .num_parents = 4, 584 .flags = CLK_SET_RATE_PARENT, 585 .ops = &clk_rcg2_ops, 586 }, 587 }; 588 589 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 590 .cmd_rcgr = 0x17998, 591 .mnd_width = 16, 592 .hid_width = 5, 593 .parent_map = gcc_parent_map_0, 594 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 595 .clkr.hw.init = &(struct clk_init_data){ 596 .name = "gcc_qupv3_wrap0_s7_clk_src", 597 .parent_data = gcc_parents_0, 598 .num_parents = 4, 599 .flags = CLK_SET_RATE_PARENT, 600 .ops = &clk_rcg2_ops, 601 }, 602 }; 603 604 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 605 .cmd_rcgr = 0x18148, 606 .mnd_width = 16, 607 .hid_width = 5, 608 .parent_map = gcc_parent_map_0, 609 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 610 .clkr.hw.init = &(struct clk_init_data){ 611 .name = "gcc_qupv3_wrap1_s0_clk_src", 612 .parent_data = gcc_parents_0, 613 .num_parents = 4, 614 .flags = CLK_SET_RATE_PARENT, 615 .ops = &clk_rcg2_ops, 616 }, 617 }; 618 619 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 620 .cmd_rcgr = 0x18278, 621 .mnd_width = 16, 622 .hid_width = 5, 623 .parent_map = gcc_parent_map_0, 624 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 625 .clkr.hw.init = &(struct clk_init_data){ 626 .name = "gcc_qupv3_wrap1_s1_clk_src", 627 .parent_data = gcc_parents_0, 628 .num_parents = 4, 629 .flags = CLK_SET_RATE_PARENT, 630 .ops = &clk_rcg2_ops, 631 }, 632 }; 633 634 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 635 .cmd_rcgr = 0x183a8, 636 .mnd_width = 16, 637 .hid_width = 5, 638 .parent_map = gcc_parent_map_0, 639 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 640 .clkr.hw.init = &(struct clk_init_data){ 641 .name = "gcc_qupv3_wrap1_s2_clk_src", 642 .parent_data = gcc_parents_0, 643 .num_parents = 4, 644 .flags = CLK_SET_RATE_PARENT, 645 .ops = &clk_rcg2_ops, 646 }, 647 }; 648 649 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 650 .cmd_rcgr = 0x184d8, 651 .mnd_width = 16, 652 .hid_width = 5, 653 .parent_map = gcc_parent_map_0, 654 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 655 .clkr.hw.init = &(struct clk_init_data){ 656 .name = "gcc_qupv3_wrap1_s3_clk_src", 657 .parent_data = gcc_parents_0, 658 .num_parents = 4, 659 .flags = CLK_SET_RATE_PARENT, 660 .ops = &clk_rcg2_ops, 661 }, 662 }; 663 664 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 665 .cmd_rcgr = 0x18608, 666 .mnd_width = 16, 667 .hid_width = 5, 668 .parent_map = gcc_parent_map_0, 669 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 670 .clkr.hw.init = &(struct clk_init_data){ 671 .name = "gcc_qupv3_wrap1_s4_clk_src", 672 .parent_data = gcc_parents_0, 673 .num_parents = 4, 674 .flags = CLK_SET_RATE_PARENT, 675 .ops = &clk_rcg2_ops, 676 }, 677 }; 678 679 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 680 .cmd_rcgr = 0x18738, 681 .mnd_width = 16, 682 .hid_width = 5, 683 .parent_map = gcc_parent_map_0, 684 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 685 .clkr.hw.init = &(struct clk_init_data){ 686 .name = "gcc_qupv3_wrap1_s5_clk_src", 687 .parent_data = gcc_parents_0, 688 .num_parents = 4, 689 .flags = CLK_SET_RATE_PARENT, 690 .ops = &clk_rcg2_ops, 691 }, 692 }; 693 694 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = { 695 .cmd_rcgr = 0x1e148, 696 .mnd_width = 16, 697 .hid_width = 5, 698 .parent_map = gcc_parent_map_0, 699 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 700 .clkr.hw.init = &(struct clk_init_data){ 701 .name = "gcc_qupv3_wrap2_s0_clk_src", 702 .parent_data = gcc_parents_0, 703 .num_parents = 4, 704 .flags = CLK_SET_RATE_PARENT, 705 .ops = &clk_rcg2_ops, 706 }, 707 }; 708 709 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = { 710 .cmd_rcgr = 0x1e278, 711 .mnd_width = 16, 712 .hid_width = 5, 713 .parent_map = gcc_parent_map_0, 714 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 715 .clkr.hw.init = &(struct clk_init_data){ 716 .name = "gcc_qupv3_wrap2_s1_clk_src", 717 .parent_data = gcc_parents_0, 718 .num_parents = 4, 719 .flags = CLK_SET_RATE_PARENT, 720 .ops = &clk_rcg2_ops, 721 }, 722 }; 723 724 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = { 725 .cmd_rcgr = 0x1e3a8, 726 .mnd_width = 16, 727 .hid_width = 5, 728 .parent_map = gcc_parent_map_0, 729 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 730 .clkr.hw.init = &(struct clk_init_data){ 731 .name = "gcc_qupv3_wrap2_s2_clk_src", 732 .parent_data = gcc_parents_0, 733 .num_parents = 4, 734 .flags = CLK_SET_RATE_PARENT, 735 .ops = &clk_rcg2_ops, 736 }, 737 }; 738 739 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = { 740 .cmd_rcgr = 0x1e4d8, 741 .mnd_width = 16, 742 .hid_width = 5, 743 .parent_map = gcc_parent_map_0, 744 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 745 .clkr.hw.init = &(struct clk_init_data){ 746 .name = "gcc_qupv3_wrap2_s3_clk_src", 747 .parent_data = gcc_parents_0, 748 .num_parents = 4, 749 .flags = CLK_SET_RATE_PARENT, 750 .ops = &clk_rcg2_ops, 751 }, 752 }; 753 754 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = { 755 .cmd_rcgr = 0x1e608, 756 .mnd_width = 16, 757 .hid_width = 5, 758 .parent_map = gcc_parent_map_0, 759 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 760 .clkr.hw.init = &(struct clk_init_data){ 761 .name = "gcc_qupv3_wrap2_s4_clk_src", 762 .parent_data = gcc_parents_0, 763 .num_parents = 4, 764 .flags = CLK_SET_RATE_PARENT, 765 .ops = &clk_rcg2_ops, 766 }, 767 }; 768 769 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = { 770 .cmd_rcgr = 0x1e738, 771 .mnd_width = 16, 772 .hid_width = 5, 773 .parent_map = gcc_parent_map_0, 774 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 775 .clkr.hw.init = &(struct clk_init_data){ 776 .name = "gcc_qupv3_wrap2_s5_clk_src", 777 .parent_data = gcc_parents_0, 778 .num_parents = 4, 779 .flags = CLK_SET_RATE_PARENT, 780 .ops = &clk_rcg2_ops, 781 }, 782 }; 783 784 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 785 F(400000, P_BI_TCXO, 12, 1, 4), 786 F(9600000, P_BI_TCXO, 2, 0, 0), 787 F(19200000, P_BI_TCXO, 1, 0, 0), 788 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), 789 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 790 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 791 F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0), 792 { } 793 }; 794 795 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 796 .cmd_rcgr = 0x1400c, 797 .mnd_width = 8, 798 .hid_width = 5, 799 .parent_map = gcc_parent_map_6, 800 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 801 .clkr.hw.init = &(struct clk_init_data){ 802 .name = "gcc_sdcc2_apps_clk_src", 803 .parent_data = gcc_parents_6, 804 .num_parents = 5, 805 .flags = CLK_SET_RATE_PARENT, 806 .ops = &clk_rcg2_floor_ops, 807 }, 808 }; 809 810 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = { 811 F(400000, P_BI_TCXO, 12, 1, 4), 812 F(9600000, P_BI_TCXO, 2, 0, 0), 813 F(19200000, P_BI_TCXO, 1, 0, 0), 814 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), 815 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 816 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 817 { } 818 }; 819 820 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = { 821 .cmd_rcgr = 0x1600c, 822 .mnd_width = 8, 823 .hid_width = 5, 824 .parent_map = gcc_parent_map_3, 825 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src, 826 .clkr.hw.init = &(struct clk_init_data){ 827 .name = "gcc_sdcc4_apps_clk_src", 828 .parent_data = gcc_parents_3, 829 .num_parents = 3, 830 .flags = CLK_SET_RATE_PARENT, 831 .ops = &clk_rcg2_floor_ops, 832 }, 833 }; 834 835 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = { 836 F(105495, P_BI_TCXO, 2, 1, 91), 837 { } 838 }; 839 840 static struct clk_rcg2 gcc_tsif_ref_clk_src = { 841 .cmd_rcgr = 0x36010, 842 .mnd_width = 8, 843 .hid_width = 5, 844 .parent_map = gcc_parent_map_7, 845 .freq_tbl = ftbl_gcc_tsif_ref_clk_src, 846 .clkr.hw.init = &(struct clk_init_data){ 847 .name = "gcc_tsif_ref_clk_src", 848 .parent_data = gcc_parents_7, 849 .num_parents = 5, 850 .flags = CLK_SET_RATE_PARENT, 851 .ops = &clk_rcg2_ops, 852 }, 853 }; 854 855 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = { 856 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 857 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 858 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 859 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 860 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 861 { } 862 }; 863 864 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = { 865 .cmd_rcgr = 0x75020, 866 .mnd_width = 8, 867 .hid_width = 5, 868 .parent_map = gcc_parent_map_0, 869 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src, 870 .clkr.hw.init = &(struct clk_init_data){ 871 .name = "gcc_ufs_card_axi_clk_src", 872 .parent_data = gcc_parents_0, 873 .num_parents = 4, 874 .flags = CLK_SET_RATE_PARENT, 875 .ops = &clk_rcg2_ops, 876 }, 877 }; 878 879 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = { 880 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 881 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 882 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 883 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 884 { } 885 }; 886 887 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = { 888 .cmd_rcgr = 0x75060, 889 .mnd_width = 0, 890 .hid_width = 5, 891 .parent_map = gcc_parent_map_0, 892 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 893 .clkr.hw.init = &(struct clk_init_data){ 894 .name = "gcc_ufs_card_ice_core_clk_src", 895 .parent_data = gcc_parents_0, 896 .num_parents = 4, 897 .flags = CLK_SET_RATE_PARENT, 898 .ops = &clk_rcg2_ops, 899 }, 900 }; 901 902 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = { 903 F(19200000, P_BI_TCXO, 1, 0, 0), 904 { } 905 }; 906 907 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = { 908 .cmd_rcgr = 0x75094, 909 .mnd_width = 0, 910 .hid_width = 5, 911 .parent_map = gcc_parent_map_4, 912 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src, 913 .clkr.hw.init = &(struct clk_init_data){ 914 .name = "gcc_ufs_card_phy_aux_clk_src", 915 .parent_data = gcc_parents_4, 916 .num_parents = 2, 917 .flags = CLK_SET_RATE_PARENT, 918 .ops = &clk_rcg2_ops, 919 }, 920 }; 921 922 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = { 923 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 924 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 925 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 926 { } 927 }; 928 929 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = { 930 .cmd_rcgr = 0x75078, 931 .mnd_width = 0, 932 .hid_width = 5, 933 .parent_map = gcc_parent_map_0, 934 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src, 935 .clkr.hw.init = &(struct clk_init_data){ 936 .name = "gcc_ufs_card_unipro_core_clk_src", 937 .parent_data = gcc_parents_0, 938 .num_parents = 4, 939 .flags = CLK_SET_RATE_PARENT, 940 .ops = &clk_rcg2_ops, 941 }, 942 }; 943 944 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 945 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 946 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 947 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 948 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 949 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 950 { } 951 }; 952 953 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 954 .cmd_rcgr = 0x77020, 955 .mnd_width = 8, 956 .hid_width = 5, 957 .parent_map = gcc_parent_map_0, 958 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 959 .clkr.hw.init = &(struct clk_init_data){ 960 .name = "gcc_ufs_phy_axi_clk_src", 961 .parent_data = gcc_parents_0, 962 .num_parents = 4, 963 .flags = CLK_SET_RATE_PARENT, 964 .ops = &clk_rcg2_ops, 965 }, 966 }; 967 968 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 969 .cmd_rcgr = 0x77060, 970 .mnd_width = 0, 971 .hid_width = 5, 972 .parent_map = gcc_parent_map_0, 973 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 974 .clkr.hw.init = &(struct clk_init_data){ 975 .name = "gcc_ufs_phy_ice_core_clk_src", 976 .parent_data = gcc_parents_0, 977 .num_parents = 4, 978 .flags = CLK_SET_RATE_PARENT, 979 .ops = &clk_rcg2_ops, 980 }, 981 }; 982 983 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 984 .cmd_rcgr = 0x77094, 985 .mnd_width = 0, 986 .hid_width = 5, 987 .parent_map = gcc_parent_map_4, 988 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 989 .clkr.hw.init = &(struct clk_init_data){ 990 .name = "gcc_ufs_phy_phy_aux_clk_src", 991 .parent_data = gcc_parents_4, 992 .num_parents = 2, 993 .flags = CLK_SET_RATE_PARENT, 994 .ops = &clk_rcg2_ops, 995 }, 996 }; 997 998 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 999 .cmd_rcgr = 0x77078, 1000 .mnd_width = 0, 1001 .hid_width = 5, 1002 .parent_map = gcc_parent_map_0, 1003 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 1004 .clkr.hw.init = &(struct clk_init_data){ 1005 .name = "gcc_ufs_phy_unipro_core_clk_src", 1006 .parent_data = gcc_parents_0, 1007 .num_parents = 4, 1008 .flags = CLK_SET_RATE_PARENT, 1009 .ops = &clk_rcg2_ops, 1010 }, 1011 }; 1012 1013 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1014 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0), 1015 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0), 1016 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 1017 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 1018 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 1019 { } 1020 }; 1021 1022 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1023 .cmd_rcgr = 0xf01c, 1024 .mnd_width = 8, 1025 .hid_width = 5, 1026 .parent_map = gcc_parent_map_0, 1027 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1028 .clkr.hw.init = &(struct clk_init_data){ 1029 .name = "gcc_usb30_prim_master_clk_src", 1030 .parent_data = gcc_parents_0, 1031 .num_parents = 4, 1032 .flags = CLK_SET_RATE_PARENT, 1033 .ops = &clk_rcg2_ops, 1034 }, 1035 }; 1036 1037 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 1038 F(19200000, P_BI_TCXO, 1, 0, 0), 1039 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0), 1040 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0), 1041 { } 1042 }; 1043 1044 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1045 .cmd_rcgr = 0xf034, 1046 .mnd_width = 0, 1047 .hid_width = 5, 1048 .parent_map = gcc_parent_map_0, 1049 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1050 .clkr.hw.init = &(struct clk_init_data){ 1051 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1052 .parent_data = gcc_parents_0, 1053 .num_parents = 4, 1054 .flags = CLK_SET_RATE_PARENT, 1055 .ops = &clk_rcg2_ops, 1056 }, 1057 }; 1058 1059 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = { 1060 .cmd_rcgr = 0x1001c, 1061 .mnd_width = 8, 1062 .hid_width = 5, 1063 .parent_map = gcc_parent_map_0, 1064 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1065 .clkr.hw.init = &(struct clk_init_data){ 1066 .name = "gcc_usb30_sec_master_clk_src", 1067 .parent_data = gcc_parents_0, 1068 .num_parents = 4, 1069 .flags = CLK_SET_RATE_PARENT, 1070 .ops = &clk_rcg2_ops, 1071 }, 1072 }; 1073 1074 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = { 1075 .cmd_rcgr = 0x10034, 1076 .mnd_width = 0, 1077 .hid_width = 5, 1078 .parent_map = gcc_parent_map_0, 1079 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1080 .clkr.hw.init = &(struct clk_init_data){ 1081 .name = "gcc_usb30_sec_mock_utmi_clk_src", 1082 .parent_data = gcc_parents_0, 1083 .num_parents = 4, 1084 .flags = CLK_SET_RATE_PARENT, 1085 .ops = &clk_rcg2_ops, 1086 }, 1087 }; 1088 1089 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1090 .cmd_rcgr = 0xf060, 1091 .mnd_width = 0, 1092 .hid_width = 5, 1093 .parent_map = gcc_parent_map_2, 1094 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src, 1095 .clkr.hw.init = &(struct clk_init_data){ 1096 .name = "gcc_usb3_prim_phy_aux_clk_src", 1097 .parent_data = gcc_parents_2, 1098 .num_parents = 3, 1099 .flags = CLK_SET_RATE_PARENT, 1100 .ops = &clk_rcg2_ops, 1101 }, 1102 }; 1103 1104 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = { 1105 .cmd_rcgr = 0x10060, 1106 .mnd_width = 0, 1107 .hid_width = 5, 1108 .parent_map = gcc_parent_map_2, 1109 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src, 1110 .clkr.hw.init = &(struct clk_init_data){ 1111 .name = "gcc_usb3_sec_phy_aux_clk_src", 1112 .parent_data = gcc_parents_2, 1113 .num_parents = 3, 1114 .flags = CLK_SET_RATE_PARENT, 1115 .ops = &clk_rcg2_ops, 1116 }, 1117 }; 1118 1119 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = { 1120 .halt_reg = 0x90018, 1121 .halt_check = BRANCH_HALT, 1122 .clkr = { 1123 .enable_reg = 0x90018, 1124 .enable_mask = BIT(0), 1125 .hw.init = &(struct clk_init_data){ 1126 .name = "gcc_aggre_noc_pcie_tbu_clk", 1127 .ops = &clk_branch2_ops, 1128 }, 1129 }, 1130 }; 1131 1132 static struct clk_branch gcc_aggre_ufs_card_axi_clk = { 1133 .halt_reg = 0x750c0, 1134 .halt_check = BRANCH_HALT, 1135 .hwcg_reg = 0x750c0, 1136 .hwcg_bit = 1, 1137 .clkr = { 1138 .enable_reg = 0x750c0, 1139 .enable_mask = BIT(0), 1140 .hw.init = &(struct clk_init_data){ 1141 .name = "gcc_aggre_ufs_card_axi_clk", 1142 .parent_hws = (const struct clk_hw *[]){ 1143 &gcc_ufs_card_axi_clk_src.clkr.hw }, 1144 .num_parents = 1, 1145 .flags = CLK_SET_RATE_PARENT, 1146 .ops = &clk_branch2_ops, 1147 }, 1148 }, 1149 }; 1150 1151 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = { 1152 .halt_reg = 0x750c0, 1153 .halt_check = BRANCH_HALT, 1154 .hwcg_reg = 0x750c0, 1155 .hwcg_bit = 1, 1156 .clkr = { 1157 .enable_reg = 0x750c0, 1158 .enable_mask = BIT(1), 1159 .hw.init = &(struct clk_init_data){ 1160 .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk", 1161 .parent_hws = (const struct clk_hw *[]){ 1162 &gcc_aggre_ufs_card_axi_clk.clkr.hw }, 1163 .num_parents = 1, 1164 .flags = CLK_SET_RATE_PARENT, 1165 .ops = &clk_branch_simple_ops, 1166 }, 1167 }, 1168 }; 1169 1170 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 1171 .halt_reg = 0x770c0, 1172 .halt_check = BRANCH_HALT, 1173 .hwcg_reg = 0x770c0, 1174 .hwcg_bit = 1, 1175 .clkr = { 1176 .enable_reg = 0x770c0, 1177 .enable_mask = BIT(0), 1178 .hw.init = &(struct clk_init_data){ 1179 .name = "gcc_aggre_ufs_phy_axi_clk", 1180 .parent_hws = (const struct clk_hw *[]){ 1181 &gcc_ufs_phy_axi_clk_src.clkr.hw }, 1182 .num_parents = 1, 1183 .flags = CLK_SET_RATE_PARENT, 1184 .ops = &clk_branch2_ops, 1185 }, 1186 }, 1187 }; 1188 1189 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 1190 .halt_reg = 0x770c0, 1191 .halt_check = BRANCH_HALT, 1192 .hwcg_reg = 0x770c0, 1193 .hwcg_bit = 1, 1194 .clkr = { 1195 .enable_reg = 0x770c0, 1196 .enable_mask = BIT(1), 1197 .hw.init = &(struct clk_init_data){ 1198 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 1199 .parent_hws = (const struct clk_hw *[]){ 1200 &gcc_aggre_ufs_phy_axi_clk.clkr.hw }, 1201 .num_parents = 1, 1202 .flags = CLK_SET_RATE_PARENT, 1203 .ops = &clk_branch_simple_ops, 1204 }, 1205 }, 1206 }; 1207 1208 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 1209 .halt_reg = 0xf07c, 1210 .halt_check = BRANCH_HALT, 1211 .clkr = { 1212 .enable_reg = 0xf07c, 1213 .enable_mask = BIT(0), 1214 .hw.init = &(struct clk_init_data){ 1215 .name = "gcc_aggre_usb3_prim_axi_clk", 1216 .parent_hws = (const struct clk_hw *[]){ 1217 &gcc_usb30_prim_master_clk_src.clkr.hw }, 1218 .num_parents = 1, 1219 .flags = CLK_SET_RATE_PARENT, 1220 .ops = &clk_branch2_ops, 1221 }, 1222 }, 1223 }; 1224 1225 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = { 1226 .halt_reg = 0x1007c, 1227 .halt_check = BRANCH_HALT, 1228 .clkr = { 1229 .enable_reg = 0x1007c, 1230 .enable_mask = BIT(0), 1231 .hw.init = &(struct clk_init_data){ 1232 .name = "gcc_aggre_usb3_sec_axi_clk", 1233 .parent_hws = (const struct clk_hw *[]){ 1234 &gcc_usb30_sec_master_clk_src.clkr.hw }, 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_boot_rom_ahb_clk = { 1243 .halt_reg = 0x38004, 1244 .halt_check = BRANCH_HALT_VOTED, 1245 .hwcg_reg = 0x38004, 1246 .hwcg_bit = 1, 1247 .clkr = { 1248 .enable_reg = 0x52004, 1249 .enable_mask = BIT(10), 1250 .hw.init = &(struct clk_init_data){ 1251 .name = "gcc_boot_rom_ahb_clk", 1252 .ops = &clk_branch2_ops, 1253 }, 1254 }, 1255 }; 1256 1257 /* 1258 * Clock ON depends on external parent 'config noc', so cant poll 1259 * delay and also mark as crtitical for camss boot 1260 */ 1261 static struct clk_branch gcc_camera_ahb_clk = { 1262 .halt_reg = 0xb008, 1263 .halt_check = BRANCH_HALT_DELAY, 1264 .hwcg_reg = 0xb008, 1265 .hwcg_bit = 1, 1266 .clkr = { 1267 .enable_reg = 0xb008, 1268 .enable_mask = BIT(0), 1269 .hw.init = &(struct clk_init_data){ 1270 .name = "gcc_camera_ahb_clk", 1271 .flags = CLK_IS_CRITICAL, 1272 .ops = &clk_branch2_ops, 1273 }, 1274 }, 1275 }; 1276 1277 static struct clk_branch gcc_camera_hf_axi_clk = { 1278 .halt_reg = 0xb030, 1279 .halt_check = BRANCH_HALT, 1280 .clkr = { 1281 .enable_reg = 0xb030, 1282 .enable_mask = BIT(0), 1283 .hw.init = &(struct clk_init_data){ 1284 .name = "gcc_camera_hf_axi_clk", 1285 .ops = &clk_branch2_ops, 1286 }, 1287 }, 1288 }; 1289 1290 static struct clk_branch gcc_camera_sf_axi_clk = { 1291 .halt_reg = 0xb034, 1292 .halt_check = BRANCH_HALT, 1293 .clkr = { 1294 .enable_reg = 0xb034, 1295 .enable_mask = BIT(0), 1296 .hw.init = &(struct clk_init_data){ 1297 .name = "gcc_camera_sf_axi_clk", 1298 .ops = &clk_branch2_ops, 1299 }, 1300 }, 1301 }; 1302 1303 /* XO critical input to camss, so no need to poll */ 1304 static struct clk_branch gcc_camera_xo_clk = { 1305 .halt_reg = 0xb044, 1306 .halt_check = BRANCH_HALT_DELAY, 1307 .clkr = { 1308 .enable_reg = 0xb044, 1309 .enable_mask = BIT(0), 1310 .hw.init = &(struct clk_init_data){ 1311 .name = "gcc_camera_xo_clk", 1312 .flags = CLK_IS_CRITICAL, 1313 .ops = &clk_branch2_ops, 1314 }, 1315 }, 1316 }; 1317 1318 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1319 .halt_reg = 0xf078, 1320 .halt_check = BRANCH_HALT, 1321 .clkr = { 1322 .enable_reg = 0xf078, 1323 .enable_mask = BIT(0), 1324 .hw.init = &(struct clk_init_data){ 1325 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1326 .parent_hws = (const struct clk_hw *[]){ 1327 &gcc_usb30_prim_master_clk_src.clkr.hw }, 1328 .num_parents = 1, 1329 .flags = CLK_SET_RATE_PARENT, 1330 .ops = &clk_branch2_ops, 1331 }, 1332 }, 1333 }; 1334 1335 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = { 1336 .halt_reg = 0x10078, 1337 .halt_check = BRANCH_HALT, 1338 .clkr = { 1339 .enable_reg = 0x10078, 1340 .enable_mask = BIT(0), 1341 .hw.init = &(struct clk_init_data){ 1342 .name = "gcc_cfg_noc_usb3_sec_axi_clk", 1343 .parent_hws = (const struct clk_hw *[]){ 1344 &gcc_usb30_sec_master_clk_src.clkr.hw }, 1345 .num_parents = 1, 1346 .flags = CLK_SET_RATE_PARENT, 1347 .ops = &clk_branch2_ops, 1348 }, 1349 }, 1350 }; 1351 1352 static struct clk_branch gcc_cpuss_ahb_clk = { 1353 .halt_reg = 0x48000, 1354 .halt_check = BRANCH_HALT_VOTED, 1355 .clkr = { 1356 .enable_reg = 0x52004, 1357 .enable_mask = BIT(21), 1358 .hw.init = &(struct clk_init_data){ 1359 .name = "gcc_cpuss_ahb_clk", 1360 .parent_hws = (const struct clk_hw *[]){ 1361 &gcc_cpuss_ahb_clk_src.clkr.hw }, 1362 .num_parents = 1, 1363 /* required for cpuss */ 1364 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1365 .ops = &clk_branch2_ops, 1366 }, 1367 }, 1368 }; 1369 1370 static struct clk_branch gcc_cpuss_dvm_bus_clk = { 1371 .halt_reg = 0x48190, 1372 .halt_check = BRANCH_HALT, 1373 .clkr = { 1374 .enable_reg = 0x48190, 1375 .enable_mask = BIT(0), 1376 .hw.init = &(struct clk_init_data){ 1377 .name = "gcc_cpuss_dvm_bus_clk", 1378 /* required for cpuss */ 1379 .flags = CLK_IS_CRITICAL, 1380 .ops = &clk_branch2_ops, 1381 }, 1382 }, 1383 }; 1384 1385 static struct clk_branch gcc_cpuss_gnoc_clk = { 1386 .halt_reg = 0x48004, 1387 .halt_check = BRANCH_HALT_VOTED, 1388 .hwcg_reg = 0x48004, 1389 .hwcg_bit = 1, 1390 .clkr = { 1391 .enable_reg = 0x52004, 1392 .enable_mask = BIT(22), 1393 .hw.init = &(struct clk_init_data){ 1394 .name = "gcc_cpuss_gnoc_clk", 1395 /* required for cpuss */ 1396 .flags = CLK_IS_CRITICAL, 1397 .ops = &clk_branch2_ops, 1398 }, 1399 }, 1400 }; 1401 1402 static struct clk_branch gcc_cpuss_rbcpr_clk = { 1403 .halt_reg = 0x48008, 1404 .halt_check = BRANCH_HALT, 1405 .clkr = { 1406 .enable_reg = 0x48008, 1407 .enable_mask = BIT(0), 1408 .hw.init = &(struct clk_init_data){ 1409 .name = "gcc_cpuss_rbcpr_clk", 1410 .ops = &clk_branch2_ops, 1411 }, 1412 }, 1413 }; 1414 1415 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1416 .halt_reg = 0x71154, 1417 .halt_check = BRANCH_VOTED, 1418 .clkr = { 1419 .enable_reg = 0x71154, 1420 .enable_mask = BIT(0), 1421 .hw.init = &(struct clk_init_data){ 1422 .name = "gcc_ddrss_gpu_axi_clk", 1423 .ops = &clk_branch2_ops, 1424 }, 1425 }, 1426 }; 1427 1428 /* 1429 * Clock ON depends on external parent 'config noc', so cant poll 1430 * delay and also mark as crtitical for disp boot 1431 */ 1432 static struct clk_branch gcc_disp_ahb_clk = { 1433 .halt_reg = 0xb00c, 1434 .halt_check = BRANCH_HALT_DELAY, 1435 .hwcg_reg = 0xb00c, 1436 .hwcg_bit = 1, 1437 .clkr = { 1438 .enable_reg = 0xb00c, 1439 .enable_mask = BIT(0), 1440 .hw.init = &(struct clk_init_data){ 1441 .name = "gcc_disp_ahb_clk", 1442 .flags = CLK_IS_CRITICAL, 1443 .ops = &clk_branch2_ops, 1444 }, 1445 }, 1446 }; 1447 1448 static struct clk_branch gcc_disp_hf_axi_clk = { 1449 .halt_reg = 0xb038, 1450 .halt_check = BRANCH_HALT, 1451 .clkr = { 1452 .enable_reg = 0xb038, 1453 .enable_mask = BIT(0), 1454 .hw.init = &(struct clk_init_data){ 1455 .name = "gcc_disp_hf_axi_clk", 1456 .ops = &clk_branch2_ops, 1457 }, 1458 }, 1459 }; 1460 1461 static struct clk_branch gcc_disp_sf_axi_clk = { 1462 .halt_reg = 0xb03c, 1463 .halt_check = BRANCH_HALT, 1464 .clkr = { 1465 .enable_reg = 0xb03c, 1466 .enable_mask = BIT(0), 1467 .hw.init = &(struct clk_init_data){ 1468 .name = "gcc_disp_sf_axi_clk", 1469 .ops = &clk_branch2_ops, 1470 }, 1471 }, 1472 }; 1473 1474 /* XO critical input to disp, so no need to poll */ 1475 static struct clk_branch gcc_disp_xo_clk = { 1476 .halt_reg = 0xb048, 1477 .halt_check = BRANCH_HALT_DELAY, 1478 .clkr = { 1479 .enable_reg = 0xb048, 1480 .enable_mask = BIT(0), 1481 .hw.init = &(struct clk_init_data){ 1482 .name = "gcc_disp_xo_clk", 1483 .flags = CLK_IS_CRITICAL, 1484 .ops = &clk_branch2_ops, 1485 }, 1486 }, 1487 }; 1488 1489 static struct clk_branch gcc_emac_axi_clk = { 1490 .halt_reg = 0x6010, 1491 .halt_check = BRANCH_HALT, 1492 .clkr = { 1493 .enable_reg = 0x6010, 1494 .enable_mask = BIT(0), 1495 .hw.init = &(struct clk_init_data){ 1496 .name = "gcc_emac_axi_clk", 1497 .ops = &clk_branch2_ops, 1498 }, 1499 }, 1500 }; 1501 1502 static struct clk_branch gcc_emac_ptp_clk = { 1503 .halt_reg = 0x6034, 1504 .halt_check = BRANCH_HALT, 1505 .clkr = { 1506 .enable_reg = 0x6034, 1507 .enable_mask = BIT(0), 1508 .hw.init = &(struct clk_init_data){ 1509 .name = "gcc_emac_ptp_clk", 1510 .parent_hws = (const struct clk_hw *[]){ 1511 &gcc_emac_ptp_clk_src.clkr.hw }, 1512 .num_parents = 1, 1513 .flags = CLK_SET_RATE_PARENT, 1514 .ops = &clk_branch2_ops, 1515 }, 1516 }, 1517 }; 1518 1519 static struct clk_branch gcc_emac_rgmii_clk = { 1520 .halt_reg = 0x6018, 1521 .halt_check = BRANCH_HALT, 1522 .clkr = { 1523 .enable_reg = 0x6018, 1524 .enable_mask = BIT(0), 1525 .hw.init = &(struct clk_init_data){ 1526 .name = "gcc_emac_rgmii_clk", 1527 .parent_hws = (const struct clk_hw *[]){ 1528 &gcc_emac_rgmii_clk_src.clkr.hw }, 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_emac_slv_ahb_clk = { 1537 .halt_reg = 0x6014, 1538 .halt_check = BRANCH_HALT, 1539 .hwcg_reg = 0x6014, 1540 .hwcg_bit = 1, 1541 .clkr = { 1542 .enable_reg = 0x6014, 1543 .enable_mask = BIT(0), 1544 .hw.init = &(struct clk_init_data){ 1545 .name = "gcc_emac_slv_ahb_clk", 1546 .ops = &clk_branch2_ops, 1547 }, 1548 }, 1549 }; 1550 1551 static struct clk_branch gcc_gp1_clk = { 1552 .halt_reg = 0x64000, 1553 .halt_check = BRANCH_HALT, 1554 .clkr = { 1555 .enable_reg = 0x64000, 1556 .enable_mask = BIT(0), 1557 .hw.init = &(struct clk_init_data){ 1558 .name = "gcc_gp1_clk", 1559 .parent_hws = (const struct clk_hw *[]){ 1560 &gcc_gp1_clk_src.clkr.hw }, 1561 .num_parents = 1, 1562 .flags = CLK_SET_RATE_PARENT, 1563 .ops = &clk_branch2_ops, 1564 }, 1565 }, 1566 }; 1567 1568 static struct clk_branch gcc_gp2_clk = { 1569 .halt_reg = 0x65000, 1570 .halt_check = BRANCH_HALT, 1571 .clkr = { 1572 .enable_reg = 0x65000, 1573 .enable_mask = BIT(0), 1574 .hw.init = &(struct clk_init_data){ 1575 .name = "gcc_gp2_clk", 1576 .parent_hws = (const struct clk_hw *[]){ 1577 &gcc_gp2_clk_src.clkr.hw }, 1578 .num_parents = 1, 1579 .flags = CLK_SET_RATE_PARENT, 1580 .ops = &clk_branch2_ops, 1581 }, 1582 }, 1583 }; 1584 1585 static struct clk_branch gcc_gp3_clk = { 1586 .halt_reg = 0x66000, 1587 .halt_check = BRANCH_HALT, 1588 .clkr = { 1589 .enable_reg = 0x66000, 1590 .enable_mask = BIT(0), 1591 .hw.init = &(struct clk_init_data){ 1592 .name = "gcc_gp3_clk", 1593 .parent_hws = (const struct clk_hw *[]){ 1594 &gcc_gp3_clk_src.clkr.hw }, 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_gpu_cfg_ahb_clk = { 1603 .halt_reg = 0x71004, 1604 .halt_check = BRANCH_HALT, 1605 .hwcg_reg = 0x71004, 1606 .hwcg_bit = 1, 1607 .clkr = { 1608 .enable_reg = 0x71004, 1609 .enable_mask = BIT(0), 1610 .hw.init = &(struct clk_init_data){ 1611 .name = "gcc_gpu_cfg_ahb_clk", 1612 /* required for gpu */ 1613 .flags = CLK_IS_CRITICAL, 1614 .ops = &clk_branch2_ops, 1615 }, 1616 }, 1617 }; 1618 1619 static struct clk_branch gcc_gpu_gpll0_clk_src = { 1620 .clkr = { 1621 .enable_reg = 0x52004, 1622 .enable_mask = BIT(15), 1623 .hw.init = &(struct clk_init_data){ 1624 .name = "gcc_gpu_gpll0_clk_src", 1625 .parent_hws = (const struct clk_hw *[]){ 1626 &gpll0.clkr.hw }, 1627 .num_parents = 1, 1628 .flags = CLK_SET_RATE_PARENT, 1629 .ops = &clk_branch2_ops, 1630 }, 1631 }, 1632 }; 1633 1634 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 1635 .clkr = { 1636 .enable_reg = 0x52004, 1637 .enable_mask = BIT(16), 1638 .hw.init = &(struct clk_init_data){ 1639 .name = "gcc_gpu_gpll0_div_clk_src", 1640 .parent_hws = (const struct clk_hw *[]){ 1641 &gcc_gpu_gpll0_clk_src.clkr.hw }, 1642 .num_parents = 1, 1643 .flags = CLK_SET_RATE_PARENT, 1644 .ops = &clk_branch2_ops, 1645 }, 1646 }, 1647 }; 1648 1649 static struct clk_branch gcc_gpu_iref_clk = { 1650 .halt_reg = 0x8c010, 1651 .halt_check = BRANCH_HALT, 1652 .clkr = { 1653 .enable_reg = 0x8c010, 1654 .enable_mask = BIT(0), 1655 .hw.init = &(struct clk_init_data){ 1656 .name = "gcc_gpu_iref_clk", 1657 .ops = &clk_branch2_ops, 1658 }, 1659 }, 1660 }; 1661 1662 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1663 .halt_reg = 0x7100c, 1664 .halt_check = BRANCH_VOTED, 1665 .clkr = { 1666 .enable_reg = 0x7100c, 1667 .enable_mask = BIT(0), 1668 .hw.init = &(struct clk_init_data){ 1669 .name = "gcc_gpu_memnoc_gfx_clk", 1670 .ops = &clk_branch2_ops, 1671 }, 1672 }, 1673 }; 1674 1675 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1676 .halt_reg = 0x71018, 1677 .halt_check = BRANCH_HALT, 1678 .clkr = { 1679 .enable_reg = 0x71018, 1680 .enable_mask = BIT(0), 1681 .hw.init = &(struct clk_init_data){ 1682 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1683 .ops = &clk_branch2_ops, 1684 }, 1685 }, 1686 }; 1687 1688 static struct clk_branch gcc_npu_at_clk = { 1689 .halt_reg = 0x4d010, 1690 .halt_check = BRANCH_VOTED, 1691 .clkr = { 1692 .enable_reg = 0x4d010, 1693 .enable_mask = BIT(0), 1694 .hw.init = &(struct clk_init_data){ 1695 .name = "gcc_npu_at_clk", 1696 .ops = &clk_branch2_ops, 1697 }, 1698 }, 1699 }; 1700 1701 static struct clk_branch gcc_npu_axi_clk = { 1702 .halt_reg = 0x4d008, 1703 .halt_check = BRANCH_VOTED, 1704 .clkr = { 1705 .enable_reg = 0x4d008, 1706 .enable_mask = BIT(0), 1707 .hw.init = &(struct clk_init_data){ 1708 .name = "gcc_npu_axi_clk", 1709 .ops = &clk_branch2_ops, 1710 }, 1711 }, 1712 }; 1713 1714 static struct clk_branch gcc_npu_cfg_ahb_clk = { 1715 .halt_reg = 0x4d004, 1716 .halt_check = BRANCH_HALT, 1717 .hwcg_reg = 0x4d004, 1718 .hwcg_bit = 1, 1719 .clkr = { 1720 .enable_reg = 0x4d004, 1721 .enable_mask = BIT(0), 1722 .hw.init = &(struct clk_init_data){ 1723 .name = "gcc_npu_cfg_ahb_clk", 1724 /* required for npu */ 1725 .flags = CLK_IS_CRITICAL, 1726 .ops = &clk_branch2_ops, 1727 }, 1728 }, 1729 }; 1730 1731 static struct clk_branch gcc_npu_gpll0_clk_src = { 1732 .clkr = { 1733 .enable_reg = 0x52004, 1734 .enable_mask = BIT(18), 1735 .hw.init = &(struct clk_init_data){ 1736 .name = "gcc_npu_gpll0_clk_src", 1737 .parent_hws = (const struct clk_hw *[]){ 1738 &gpll0.clkr.hw }, 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_npu_gpll0_div_clk_src = { 1747 .clkr = { 1748 .enable_reg = 0x52004, 1749 .enable_mask = BIT(19), 1750 .hw.init = &(struct clk_init_data){ 1751 .name = "gcc_npu_gpll0_div_clk_src", 1752 .parent_hws = (const struct clk_hw *[]){ 1753 &gcc_npu_gpll0_clk_src.clkr.hw }, 1754 .num_parents = 1, 1755 .flags = CLK_SET_RATE_PARENT, 1756 .ops = &clk_branch2_ops, 1757 }, 1758 }, 1759 }; 1760 1761 static struct clk_branch gcc_npu_trig_clk = { 1762 .halt_reg = 0x4d00c, 1763 .halt_check = BRANCH_VOTED, 1764 .clkr = { 1765 .enable_reg = 0x4d00c, 1766 .enable_mask = BIT(0), 1767 .hw.init = &(struct clk_init_data){ 1768 .name = "gcc_npu_trig_clk", 1769 .ops = &clk_branch2_ops, 1770 }, 1771 }, 1772 }; 1773 1774 static struct clk_branch gcc_pcie0_phy_refgen_clk = { 1775 .halt_reg = 0x6f02c, 1776 .halt_check = BRANCH_HALT, 1777 .clkr = { 1778 .enable_reg = 0x6f02c, 1779 .enable_mask = BIT(0), 1780 .hw.init = &(struct clk_init_data){ 1781 .name = "gcc_pcie0_phy_refgen_clk", 1782 .parent_hws = (const struct clk_hw *[]){ 1783 &gcc_pcie_phy_refgen_clk_src.clkr.hw }, 1784 .num_parents = 1, 1785 .flags = CLK_SET_RATE_PARENT, 1786 .ops = &clk_branch2_ops, 1787 }, 1788 }, 1789 }; 1790 1791 static struct clk_branch gcc_pcie1_phy_refgen_clk = { 1792 .halt_reg = 0x6f030, 1793 .halt_check = BRANCH_HALT, 1794 .clkr = { 1795 .enable_reg = 0x6f030, 1796 .enable_mask = BIT(0), 1797 .hw.init = &(struct clk_init_data){ 1798 .name = "gcc_pcie1_phy_refgen_clk", 1799 .parent_hws = (const struct clk_hw *[]){ 1800 &gcc_pcie_phy_refgen_clk_src.clkr.hw }, 1801 .num_parents = 1, 1802 .flags = CLK_SET_RATE_PARENT, 1803 .ops = &clk_branch2_ops, 1804 }, 1805 }, 1806 }; 1807 1808 static struct clk_branch gcc_pcie_0_aux_clk = { 1809 .halt_reg = 0x6b020, 1810 .halt_check = BRANCH_HALT_VOTED, 1811 .clkr = { 1812 .enable_reg = 0x5200c, 1813 .enable_mask = BIT(3), 1814 .hw.init = &(struct clk_init_data){ 1815 .name = "gcc_pcie_0_aux_clk", 1816 .parent_hws = (const struct clk_hw *[]){ 1817 &gcc_pcie_0_aux_clk_src.clkr.hw }, 1818 .num_parents = 1, 1819 .flags = CLK_SET_RATE_PARENT, 1820 .ops = &clk_branch2_ops, 1821 }, 1822 }, 1823 }; 1824 1825 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1826 .halt_reg = 0x6b01c, 1827 .halt_check = BRANCH_HALT_VOTED, 1828 .hwcg_reg = 0x6b01c, 1829 .hwcg_bit = 1, 1830 .clkr = { 1831 .enable_reg = 0x5200c, 1832 .enable_mask = BIT(2), 1833 .hw.init = &(struct clk_init_data){ 1834 .name = "gcc_pcie_0_cfg_ahb_clk", 1835 .ops = &clk_branch2_ops, 1836 }, 1837 }, 1838 }; 1839 1840 static struct clk_branch gcc_pcie_0_clkref_clk = { 1841 .halt_reg = 0x8c00c, 1842 .halt_check = BRANCH_HALT, 1843 .clkr = { 1844 .enable_reg = 0x8c00c, 1845 .enable_mask = BIT(0), 1846 .hw.init = &(struct clk_init_data){ 1847 .name = "gcc_pcie_0_clkref_clk", 1848 .ops = &clk_branch2_ops, 1849 }, 1850 }, 1851 }; 1852 1853 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1854 .halt_reg = 0x6b018, 1855 .halt_check = BRANCH_HALT_VOTED, 1856 .clkr = { 1857 .enable_reg = 0x5200c, 1858 .enable_mask = BIT(1), 1859 .hw.init = &(struct clk_init_data){ 1860 .name = "gcc_pcie_0_mstr_axi_clk", 1861 .ops = &clk_branch2_ops, 1862 }, 1863 }, 1864 }; 1865 1866 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */ 1867 static struct clk_branch gcc_pcie_0_pipe_clk = { 1868 .halt_reg = 0x6b024, 1869 .halt_check = BRANCH_HALT_DELAY, 1870 .clkr = { 1871 .enable_reg = 0x5200c, 1872 .enable_mask = BIT(4), 1873 .hw.init = &(struct clk_init_data){ 1874 .name = "gcc_pcie_0_pipe_clk", 1875 .ops = &clk_branch2_ops, 1876 }, 1877 }, 1878 }; 1879 1880 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1881 .halt_reg = 0x6b014, 1882 .halt_check = BRANCH_HALT_VOTED, 1883 .hwcg_reg = 0x6b014, 1884 .hwcg_bit = 1, 1885 .clkr = { 1886 .enable_reg = 0x5200c, 1887 .enable_mask = BIT(0), 1888 .hw.init = &(struct clk_init_data){ 1889 .name = "gcc_pcie_0_slv_axi_clk", 1890 .ops = &clk_branch2_ops, 1891 }, 1892 }, 1893 }; 1894 1895 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1896 .halt_reg = 0x6b010, 1897 .halt_check = BRANCH_HALT_VOTED, 1898 .clkr = { 1899 .enable_reg = 0x5200c, 1900 .enable_mask = BIT(5), 1901 .hw.init = &(struct clk_init_data){ 1902 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1903 .ops = &clk_branch2_ops, 1904 }, 1905 }, 1906 }; 1907 1908 static struct clk_branch gcc_pcie_1_aux_clk = { 1909 .halt_reg = 0x8d020, 1910 .halt_check = BRANCH_HALT_VOTED, 1911 .clkr = { 1912 .enable_reg = 0x52004, 1913 .enable_mask = BIT(29), 1914 .hw.init = &(struct clk_init_data){ 1915 .name = "gcc_pcie_1_aux_clk", 1916 .parent_hws = (const struct clk_hw *[]){ 1917 &gcc_pcie_1_aux_clk_src.clkr.hw }, 1918 .num_parents = 1, 1919 .flags = CLK_SET_RATE_PARENT, 1920 .ops = &clk_branch2_ops, 1921 }, 1922 }, 1923 }; 1924 1925 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 1926 .halt_reg = 0x8d01c, 1927 .halt_check = BRANCH_HALT_VOTED, 1928 .hwcg_reg = 0x8d01c, 1929 .hwcg_bit = 1, 1930 .clkr = { 1931 .enable_reg = 0x52004, 1932 .enable_mask = BIT(28), 1933 .hw.init = &(struct clk_init_data){ 1934 .name = "gcc_pcie_1_cfg_ahb_clk", 1935 .ops = &clk_branch2_ops, 1936 }, 1937 }, 1938 }; 1939 1940 static struct clk_branch gcc_pcie_1_clkref_clk = { 1941 .halt_reg = 0x8c02c, 1942 .halt_check = BRANCH_HALT, 1943 .clkr = { 1944 .enable_reg = 0x8c02c, 1945 .enable_mask = BIT(0), 1946 .hw.init = &(struct clk_init_data){ 1947 .name = "gcc_pcie_1_clkref_clk", 1948 .ops = &clk_branch2_ops, 1949 }, 1950 }, 1951 }; 1952 1953 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 1954 .halt_reg = 0x8d018, 1955 .halt_check = BRANCH_HALT_VOTED, 1956 .clkr = { 1957 .enable_reg = 0x52004, 1958 .enable_mask = BIT(27), 1959 .hw.init = &(struct clk_init_data){ 1960 .name = "gcc_pcie_1_mstr_axi_clk", 1961 .ops = &clk_branch2_ops, 1962 }, 1963 }, 1964 }; 1965 1966 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */ 1967 static struct clk_branch gcc_pcie_1_pipe_clk = { 1968 .halt_reg = 0x8d024, 1969 .halt_check = BRANCH_HALT_DELAY, 1970 .clkr = { 1971 .enable_reg = 0x52004, 1972 .enable_mask = BIT(30), 1973 .hw.init = &(struct clk_init_data){ 1974 .name = "gcc_pcie_1_pipe_clk", 1975 .ops = &clk_branch2_ops, 1976 }, 1977 }, 1978 }; 1979 1980 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 1981 .halt_reg = 0x8d014, 1982 .halt_check = BRANCH_HALT_VOTED, 1983 .hwcg_reg = 0x8d014, 1984 .hwcg_bit = 1, 1985 .clkr = { 1986 .enable_reg = 0x52004, 1987 .enable_mask = BIT(26), 1988 .hw.init = &(struct clk_init_data){ 1989 .name = "gcc_pcie_1_slv_axi_clk", 1990 .ops = &clk_branch2_ops, 1991 }, 1992 }, 1993 }; 1994 1995 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = { 1996 .halt_reg = 0x8d010, 1997 .halt_check = BRANCH_HALT_VOTED, 1998 .clkr = { 1999 .enable_reg = 0x52004, 2000 .enable_mask = BIT(25), 2001 .hw.init = &(struct clk_init_data){ 2002 .name = "gcc_pcie_1_slv_q2a_axi_clk", 2003 .ops = &clk_branch2_ops, 2004 }, 2005 }, 2006 }; 2007 2008 static struct clk_branch gcc_pcie_phy_aux_clk = { 2009 .halt_reg = 0x6f004, 2010 .halt_check = BRANCH_HALT, 2011 .clkr = { 2012 .enable_reg = 0x6f004, 2013 .enable_mask = BIT(0), 2014 .hw.init = &(struct clk_init_data){ 2015 .name = "gcc_pcie_phy_aux_clk", 2016 .parent_hws = (const struct clk_hw *[]){ 2017 &gcc_pcie_0_aux_clk_src.clkr.hw }, 2018 .num_parents = 1, 2019 .flags = CLK_SET_RATE_PARENT, 2020 .ops = &clk_branch2_ops, 2021 }, 2022 }, 2023 }; 2024 2025 static struct clk_branch gcc_pdm2_clk = { 2026 .halt_reg = 0x3300c, 2027 .halt_check = BRANCH_HALT, 2028 .clkr = { 2029 .enable_reg = 0x3300c, 2030 .enable_mask = BIT(0), 2031 .hw.init = &(struct clk_init_data){ 2032 .name = "gcc_pdm2_clk", 2033 .parent_hws = (const struct clk_hw *[]){ 2034 &gcc_pdm2_clk_src.clkr.hw }, 2035 .num_parents = 1, 2036 .flags = CLK_SET_RATE_PARENT, 2037 .ops = &clk_branch2_ops, 2038 }, 2039 }, 2040 }; 2041 2042 static struct clk_branch gcc_pdm_ahb_clk = { 2043 .halt_reg = 0x33004, 2044 .halt_check = BRANCH_HALT, 2045 .hwcg_reg = 0x33004, 2046 .hwcg_bit = 1, 2047 .clkr = { 2048 .enable_reg = 0x33004, 2049 .enable_mask = BIT(0), 2050 .hw.init = &(struct clk_init_data){ 2051 .name = "gcc_pdm_ahb_clk", 2052 .ops = &clk_branch2_ops, 2053 }, 2054 }, 2055 }; 2056 2057 static struct clk_branch gcc_pdm_xo4_clk = { 2058 .halt_reg = 0x33008, 2059 .halt_check = BRANCH_HALT, 2060 .clkr = { 2061 .enable_reg = 0x33008, 2062 .enable_mask = BIT(0), 2063 .hw.init = &(struct clk_init_data){ 2064 .name = "gcc_pdm_xo4_clk", 2065 .ops = &clk_branch2_ops, 2066 }, 2067 }, 2068 }; 2069 2070 static struct clk_branch gcc_prng_ahb_clk = { 2071 .halt_reg = 0x34004, 2072 .halt_check = BRANCH_HALT_VOTED, 2073 .clkr = { 2074 .enable_reg = 0x52004, 2075 .enable_mask = BIT(13), 2076 .hw.init = &(struct clk_init_data){ 2077 .name = "gcc_prng_ahb_clk", 2078 .ops = &clk_branch2_ops, 2079 }, 2080 }, 2081 }; 2082 2083 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2084 .halt_reg = 0xb018, 2085 .halt_check = BRANCH_HALT, 2086 .hwcg_reg = 0xb018, 2087 .hwcg_bit = 1, 2088 .clkr = { 2089 .enable_reg = 0xb018, 2090 .enable_mask = BIT(0), 2091 .hw.init = &(struct clk_init_data){ 2092 .name = "gcc_qmip_camera_nrt_ahb_clk", 2093 .ops = &clk_branch2_ops, 2094 }, 2095 }, 2096 }; 2097 2098 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2099 .halt_reg = 0xb01c, 2100 .halt_check = BRANCH_HALT, 2101 .hwcg_reg = 0xb01c, 2102 .hwcg_bit = 1, 2103 .clkr = { 2104 .enable_reg = 0xb01c, 2105 .enable_mask = BIT(0), 2106 .hw.init = &(struct clk_init_data){ 2107 .name = "gcc_qmip_camera_rt_ahb_clk", 2108 .ops = &clk_branch2_ops, 2109 }, 2110 }, 2111 }; 2112 2113 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2114 .halt_reg = 0xb020, 2115 .halt_check = BRANCH_HALT, 2116 .hwcg_reg = 0xb020, 2117 .hwcg_bit = 1, 2118 .clkr = { 2119 .enable_reg = 0xb020, 2120 .enable_mask = BIT(0), 2121 .hw.init = &(struct clk_init_data){ 2122 .name = "gcc_qmip_disp_ahb_clk", 2123 .ops = &clk_branch2_ops, 2124 }, 2125 }, 2126 }; 2127 2128 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = { 2129 .halt_reg = 0xb010, 2130 .halt_check = BRANCH_HALT, 2131 .hwcg_reg = 0xb010, 2132 .hwcg_bit = 1, 2133 .clkr = { 2134 .enable_reg = 0xb010, 2135 .enable_mask = BIT(0), 2136 .hw.init = &(struct clk_init_data){ 2137 .name = "gcc_qmip_video_cvp_ahb_clk", 2138 .ops = &clk_branch2_ops, 2139 }, 2140 }, 2141 }; 2142 2143 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2144 .halt_reg = 0xb014, 2145 .halt_check = BRANCH_HALT, 2146 .hwcg_reg = 0xb014, 2147 .hwcg_bit = 1, 2148 .clkr = { 2149 .enable_reg = 0xb014, 2150 .enable_mask = BIT(0), 2151 .hw.init = &(struct clk_init_data){ 2152 .name = "gcc_qmip_video_vcodec_ahb_clk", 2153 .ops = &clk_branch2_ops, 2154 }, 2155 }, 2156 }; 2157 2158 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = { 2159 .halt_reg = 0x4b000, 2160 .halt_check = BRANCH_HALT, 2161 .clkr = { 2162 .enable_reg = 0x4b000, 2163 .enable_mask = BIT(0), 2164 .hw.init = &(struct clk_init_data){ 2165 .name = "gcc_qspi_cnoc_periph_ahb_clk", 2166 .ops = &clk_branch2_ops, 2167 }, 2168 }, 2169 }; 2170 2171 static struct clk_branch gcc_qspi_core_clk = { 2172 .halt_reg = 0x4b004, 2173 .halt_check = BRANCH_HALT, 2174 .clkr = { 2175 .enable_reg = 0x4b004, 2176 .enable_mask = BIT(0), 2177 .hw.init = &(struct clk_init_data){ 2178 .name = "gcc_qspi_core_clk", 2179 .parent_hws = (const struct clk_hw *[]){ 2180 &gcc_qspi_core_clk_src.clkr.hw }, 2181 .num_parents = 1, 2182 .flags = CLK_SET_RATE_PARENT, 2183 .ops = &clk_branch2_ops, 2184 }, 2185 }, 2186 }; 2187 2188 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2189 .halt_reg = 0x17144, 2190 .halt_check = BRANCH_HALT_VOTED, 2191 .clkr = { 2192 .enable_reg = 0x5200c, 2193 .enable_mask = BIT(10), 2194 .hw.init = &(struct clk_init_data){ 2195 .name = "gcc_qupv3_wrap0_s0_clk", 2196 .parent_hws = (const struct clk_hw *[]){ 2197 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw }, 2198 .num_parents = 1, 2199 .flags = CLK_SET_RATE_PARENT, 2200 .ops = &clk_branch2_ops, 2201 }, 2202 }, 2203 }; 2204 2205 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2206 .halt_reg = 0x17274, 2207 .halt_check = BRANCH_HALT_VOTED, 2208 .clkr = { 2209 .enable_reg = 0x5200c, 2210 .enable_mask = BIT(11), 2211 .hw.init = &(struct clk_init_data){ 2212 .name = "gcc_qupv3_wrap0_s1_clk", 2213 .parent_hws = (const struct clk_hw *[]){ 2214 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw }, 2215 .num_parents = 1, 2216 .flags = CLK_SET_RATE_PARENT, 2217 .ops = &clk_branch2_ops, 2218 }, 2219 }, 2220 }; 2221 2222 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2223 .halt_reg = 0x173a4, 2224 .halt_check = BRANCH_HALT_VOTED, 2225 .clkr = { 2226 .enable_reg = 0x5200c, 2227 .enable_mask = BIT(12), 2228 .hw.init = &(struct clk_init_data){ 2229 .name = "gcc_qupv3_wrap0_s2_clk", 2230 .parent_hws = (const struct clk_hw *[]){ 2231 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw }, 2232 .num_parents = 1, 2233 .flags = CLK_SET_RATE_PARENT, 2234 .ops = &clk_branch2_ops, 2235 }, 2236 }, 2237 }; 2238 2239 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2240 .halt_reg = 0x174d4, 2241 .halt_check = BRANCH_HALT_VOTED, 2242 .clkr = { 2243 .enable_reg = 0x5200c, 2244 .enable_mask = BIT(13), 2245 .hw.init = &(struct clk_init_data){ 2246 .name = "gcc_qupv3_wrap0_s3_clk", 2247 .parent_hws = (const struct clk_hw *[]){ 2248 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw }, 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_qupv3_wrap0_s4_clk = { 2257 .halt_reg = 0x17604, 2258 .halt_check = BRANCH_HALT_VOTED, 2259 .clkr = { 2260 .enable_reg = 0x5200c, 2261 .enable_mask = BIT(14), 2262 .hw.init = &(struct clk_init_data){ 2263 .name = "gcc_qupv3_wrap0_s4_clk", 2264 .parent_hws = (const struct clk_hw *[]){ 2265 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw }, 2266 .num_parents = 1, 2267 .flags = CLK_SET_RATE_PARENT, 2268 .ops = &clk_branch2_ops, 2269 }, 2270 }, 2271 }; 2272 2273 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 2274 .halt_reg = 0x17734, 2275 .halt_check = BRANCH_HALT_VOTED, 2276 .clkr = { 2277 .enable_reg = 0x5200c, 2278 .enable_mask = BIT(15), 2279 .hw.init = &(struct clk_init_data){ 2280 .name = "gcc_qupv3_wrap0_s5_clk", 2281 .parent_hws = (const struct clk_hw *[]){ 2282 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw }, 2283 .num_parents = 1, 2284 .flags = CLK_SET_RATE_PARENT, 2285 .ops = &clk_branch2_ops, 2286 }, 2287 }, 2288 }; 2289 2290 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 2291 .halt_reg = 0x17864, 2292 .halt_check = BRANCH_HALT_VOTED, 2293 .clkr = { 2294 .enable_reg = 0x5200c, 2295 .enable_mask = BIT(16), 2296 .hw.init = &(struct clk_init_data){ 2297 .name = "gcc_qupv3_wrap0_s6_clk", 2298 .parent_hws = (const struct clk_hw *[]){ 2299 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw }, 2300 .num_parents = 1, 2301 .flags = CLK_SET_RATE_PARENT, 2302 .ops = &clk_branch2_ops, 2303 }, 2304 }, 2305 }; 2306 2307 static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 2308 .halt_reg = 0x17994, 2309 .halt_check = BRANCH_HALT_VOTED, 2310 .clkr = { 2311 .enable_reg = 0x5200c, 2312 .enable_mask = BIT(17), 2313 .hw.init = &(struct clk_init_data){ 2314 .name = "gcc_qupv3_wrap0_s7_clk", 2315 .parent_hws = (const struct clk_hw *[]){ 2316 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw }, 2317 .num_parents = 1, 2318 .flags = CLK_SET_RATE_PARENT, 2319 .ops = &clk_branch2_ops, 2320 }, 2321 }, 2322 }; 2323 2324 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 2325 .halt_reg = 0x18144, 2326 .halt_check = BRANCH_HALT_VOTED, 2327 .clkr = { 2328 .enable_reg = 0x5200c, 2329 .enable_mask = BIT(22), 2330 .hw.init = &(struct clk_init_data){ 2331 .name = "gcc_qupv3_wrap1_s0_clk", 2332 .parent_hws = (const struct clk_hw *[]){ 2333 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw }, 2334 .num_parents = 1, 2335 .flags = CLK_SET_RATE_PARENT, 2336 .ops = &clk_branch2_ops, 2337 }, 2338 }, 2339 }; 2340 2341 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 2342 .halt_reg = 0x18274, 2343 .halt_check = BRANCH_HALT_VOTED, 2344 .clkr = { 2345 .enable_reg = 0x5200c, 2346 .enable_mask = BIT(23), 2347 .hw.init = &(struct clk_init_data){ 2348 .name = "gcc_qupv3_wrap1_s1_clk", 2349 .parent_hws = (const struct clk_hw *[]){ 2350 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw }, 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_qupv3_wrap1_s2_clk = { 2359 .halt_reg = 0x183a4, 2360 .halt_check = BRANCH_HALT_VOTED, 2361 .clkr = { 2362 .enable_reg = 0x5200c, 2363 .enable_mask = BIT(24), 2364 .hw.init = &(struct clk_init_data){ 2365 .name = "gcc_qupv3_wrap1_s2_clk", 2366 .parent_hws = (const struct clk_hw *[]){ 2367 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw }, 2368 .num_parents = 1, 2369 .flags = CLK_SET_RATE_PARENT, 2370 .ops = &clk_branch2_ops, 2371 }, 2372 }, 2373 }; 2374 2375 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 2376 .halt_reg = 0x184d4, 2377 .halt_check = BRANCH_HALT_VOTED, 2378 .clkr = { 2379 .enable_reg = 0x5200c, 2380 .enable_mask = BIT(25), 2381 .hw.init = &(struct clk_init_data){ 2382 .name = "gcc_qupv3_wrap1_s3_clk", 2383 .parent_hws = (const struct clk_hw *[]){ 2384 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw }, 2385 .num_parents = 1, 2386 .flags = CLK_SET_RATE_PARENT, 2387 .ops = &clk_branch2_ops, 2388 }, 2389 }, 2390 }; 2391 2392 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 2393 .halt_reg = 0x18604, 2394 .halt_check = BRANCH_HALT_VOTED, 2395 .clkr = { 2396 .enable_reg = 0x5200c, 2397 .enable_mask = BIT(26), 2398 .hw.init = &(struct clk_init_data){ 2399 .name = "gcc_qupv3_wrap1_s4_clk", 2400 .parent_hws = (const struct clk_hw *[]){ 2401 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw }, 2402 .num_parents = 1, 2403 .flags = CLK_SET_RATE_PARENT, 2404 .ops = &clk_branch2_ops, 2405 }, 2406 }, 2407 }; 2408 2409 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 2410 .halt_reg = 0x18734, 2411 .halt_check = BRANCH_HALT_VOTED, 2412 .clkr = { 2413 .enable_reg = 0x5200c, 2414 .enable_mask = BIT(27), 2415 .hw.init = &(struct clk_init_data){ 2416 .name = "gcc_qupv3_wrap1_s5_clk", 2417 .parent_hws = (const struct clk_hw *[]){ 2418 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw }, 2419 .num_parents = 1, 2420 .flags = CLK_SET_RATE_PARENT, 2421 .ops = &clk_branch2_ops, 2422 }, 2423 }, 2424 }; 2425 2426 static struct clk_branch gcc_qupv3_wrap2_s0_clk = { 2427 .halt_reg = 0x1e144, 2428 .halt_check = BRANCH_HALT_VOTED, 2429 .clkr = { 2430 .enable_reg = 0x52014, 2431 .enable_mask = BIT(4), 2432 .hw.init = &(struct clk_init_data){ 2433 .name = "gcc_qupv3_wrap2_s0_clk", 2434 .parent_hws = (const struct clk_hw *[]){ 2435 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw }, 2436 .num_parents = 1, 2437 .flags = CLK_SET_RATE_PARENT, 2438 .ops = &clk_branch2_ops, 2439 }, 2440 }, 2441 }; 2442 2443 static struct clk_branch gcc_qupv3_wrap2_s1_clk = { 2444 .halt_reg = 0x1e274, 2445 .halt_check = BRANCH_HALT_VOTED, 2446 .clkr = { 2447 .enable_reg = 0x52014, 2448 .enable_mask = BIT(5), 2449 .hw.init = &(struct clk_init_data){ 2450 .name = "gcc_qupv3_wrap2_s1_clk", 2451 .parent_hws = (const struct clk_hw *[]){ 2452 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw }, 2453 .num_parents = 1, 2454 .flags = CLK_SET_RATE_PARENT, 2455 .ops = &clk_branch2_ops, 2456 }, 2457 }, 2458 }; 2459 2460 static struct clk_branch gcc_qupv3_wrap2_s2_clk = { 2461 .halt_reg = 0x1e3a4, 2462 .halt_check = BRANCH_HALT_VOTED, 2463 .clkr = { 2464 .enable_reg = 0x52014, 2465 .enable_mask = BIT(6), 2466 .hw.init = &(struct clk_init_data){ 2467 .name = "gcc_qupv3_wrap2_s2_clk", 2468 .parent_hws = (const struct clk_hw *[]){ 2469 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw }, 2470 .num_parents = 1, 2471 .flags = CLK_SET_RATE_PARENT, 2472 .ops = &clk_branch2_ops, 2473 }, 2474 }, 2475 }; 2476 2477 static struct clk_branch gcc_qupv3_wrap2_s3_clk = { 2478 .halt_reg = 0x1e4d4, 2479 .halt_check = BRANCH_HALT_VOTED, 2480 .clkr = { 2481 .enable_reg = 0x52014, 2482 .enable_mask = BIT(7), 2483 .hw.init = &(struct clk_init_data){ 2484 .name = "gcc_qupv3_wrap2_s3_clk", 2485 .parent_hws = (const struct clk_hw *[]){ 2486 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw }, 2487 .num_parents = 1, 2488 .flags = CLK_SET_RATE_PARENT, 2489 .ops = &clk_branch2_ops, 2490 }, 2491 }, 2492 }; 2493 2494 static struct clk_branch gcc_qupv3_wrap2_s4_clk = { 2495 .halt_reg = 0x1e604, 2496 .halt_check = BRANCH_HALT_VOTED, 2497 .clkr = { 2498 .enable_reg = 0x52014, 2499 .enable_mask = BIT(8), 2500 .hw.init = &(struct clk_init_data){ 2501 .name = "gcc_qupv3_wrap2_s4_clk", 2502 .parent_hws = (const struct clk_hw *[]){ 2503 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw }, 2504 .num_parents = 1, 2505 .flags = CLK_SET_RATE_PARENT, 2506 .ops = &clk_branch2_ops, 2507 }, 2508 }, 2509 }; 2510 2511 static struct clk_branch gcc_qupv3_wrap2_s5_clk = { 2512 .halt_reg = 0x1e734, 2513 .halt_check = BRANCH_HALT_VOTED, 2514 .clkr = { 2515 .enable_reg = 0x52014, 2516 .enable_mask = BIT(9), 2517 .hw.init = &(struct clk_init_data){ 2518 .name = "gcc_qupv3_wrap2_s5_clk", 2519 .parent_hws = (const struct clk_hw *[]){ 2520 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw }, 2521 .num_parents = 1, 2522 .flags = CLK_SET_RATE_PARENT, 2523 .ops = &clk_branch2_ops, 2524 }, 2525 }, 2526 }; 2527 2528 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2529 .halt_reg = 0x17004, 2530 .halt_check = BRANCH_HALT_VOTED, 2531 .clkr = { 2532 .enable_reg = 0x5200c, 2533 .enable_mask = BIT(6), 2534 .hw.init = &(struct clk_init_data){ 2535 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2536 .ops = &clk_branch2_ops, 2537 }, 2538 }, 2539 }; 2540 2541 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2542 .halt_reg = 0x17008, 2543 .halt_check = BRANCH_HALT_VOTED, 2544 .hwcg_reg = 0x17008, 2545 .hwcg_bit = 1, 2546 .clkr = { 2547 .enable_reg = 0x5200c, 2548 .enable_mask = BIT(7), 2549 .hw.init = &(struct clk_init_data){ 2550 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2551 .ops = &clk_branch2_ops, 2552 }, 2553 }, 2554 }; 2555 2556 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2557 .halt_reg = 0x18004, 2558 .halt_check = BRANCH_HALT_VOTED, 2559 .clkr = { 2560 .enable_reg = 0x5200c, 2561 .enable_mask = BIT(20), 2562 .hw.init = &(struct clk_init_data){ 2563 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2564 .ops = &clk_branch2_ops, 2565 }, 2566 }, 2567 }; 2568 2569 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2570 .halt_reg = 0x18008, 2571 .halt_check = BRANCH_HALT_VOTED, 2572 .hwcg_reg = 0x18008, 2573 .hwcg_bit = 1, 2574 .clkr = { 2575 .enable_reg = 0x5200c, 2576 .enable_mask = BIT(21), 2577 .hw.init = &(struct clk_init_data){ 2578 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2579 .ops = &clk_branch2_ops, 2580 }, 2581 }, 2582 }; 2583 2584 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = { 2585 .halt_reg = 0x1e004, 2586 .halt_check = BRANCH_HALT_VOTED, 2587 .clkr = { 2588 .enable_reg = 0x52014, 2589 .enable_mask = BIT(2), 2590 .hw.init = &(struct clk_init_data){ 2591 .name = "gcc_qupv3_wrap_2_m_ahb_clk", 2592 .ops = &clk_branch2_ops, 2593 }, 2594 }, 2595 }; 2596 2597 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = { 2598 .halt_reg = 0x1e008, 2599 .halt_check = BRANCH_HALT_VOTED, 2600 .hwcg_reg = 0x1e008, 2601 .hwcg_bit = 1, 2602 .clkr = { 2603 .enable_reg = 0x52014, 2604 .enable_mask = BIT(1), 2605 .hw.init = &(struct clk_init_data){ 2606 .name = "gcc_qupv3_wrap_2_s_ahb_clk", 2607 .ops = &clk_branch2_ops, 2608 }, 2609 }, 2610 }; 2611 2612 static struct clk_branch gcc_sdcc2_ahb_clk = { 2613 .halt_reg = 0x14008, 2614 .halt_check = BRANCH_HALT, 2615 .clkr = { 2616 .enable_reg = 0x14008, 2617 .enable_mask = BIT(0), 2618 .hw.init = &(struct clk_init_data){ 2619 .name = "gcc_sdcc2_ahb_clk", 2620 .ops = &clk_branch2_ops, 2621 }, 2622 }, 2623 }; 2624 2625 static struct clk_branch gcc_sdcc2_apps_clk = { 2626 .halt_reg = 0x14004, 2627 .halt_check = BRANCH_HALT, 2628 .clkr = { 2629 .enable_reg = 0x14004, 2630 .enable_mask = BIT(0), 2631 .hw.init = &(struct clk_init_data){ 2632 .name = "gcc_sdcc2_apps_clk", 2633 .parent_hws = (const struct clk_hw *[]){ 2634 &gcc_sdcc2_apps_clk_src.clkr.hw }, 2635 .num_parents = 1, 2636 .flags = CLK_SET_RATE_PARENT, 2637 .ops = &clk_branch2_ops, 2638 }, 2639 }, 2640 }; 2641 2642 static struct clk_branch gcc_sdcc4_ahb_clk = { 2643 .halt_reg = 0x16008, 2644 .halt_check = BRANCH_HALT, 2645 .clkr = { 2646 .enable_reg = 0x16008, 2647 .enable_mask = BIT(0), 2648 .hw.init = &(struct clk_init_data){ 2649 .name = "gcc_sdcc4_ahb_clk", 2650 .ops = &clk_branch2_ops, 2651 }, 2652 }, 2653 }; 2654 2655 static struct clk_branch gcc_sdcc4_apps_clk = { 2656 .halt_reg = 0x16004, 2657 .halt_check = BRANCH_HALT, 2658 .clkr = { 2659 .enable_reg = 0x16004, 2660 .enable_mask = BIT(0), 2661 .hw.init = &(struct clk_init_data){ 2662 .name = "gcc_sdcc4_apps_clk", 2663 .parent_hws = (const struct clk_hw *[]){ 2664 &gcc_sdcc4_apps_clk_src.clkr.hw }, 2665 .num_parents = 1, 2666 .flags = CLK_SET_RATE_PARENT, 2667 .ops = &clk_branch2_ops, 2668 }, 2669 }, 2670 }; 2671 2672 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 2673 .halt_reg = 0x4819c, 2674 .halt_check = BRANCH_HALT_VOTED, 2675 .clkr = { 2676 .enable_reg = 0x52004, 2677 .enable_mask = BIT(0), 2678 .hw.init = &(struct clk_init_data){ 2679 .name = "gcc_sys_noc_cpuss_ahb_clk", 2680 .parent_hws = (const struct clk_hw *[]){ 2681 &gcc_cpuss_ahb_clk_src.clkr.hw }, 2682 .num_parents = 1, 2683 /* required for cpuss */ 2684 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 2685 .ops = &clk_branch2_ops, 2686 }, 2687 }, 2688 }; 2689 2690 static struct clk_branch gcc_tsif_ahb_clk = { 2691 .halt_reg = 0x36004, 2692 .halt_check = BRANCH_HALT, 2693 .clkr = { 2694 .enable_reg = 0x36004, 2695 .enable_mask = BIT(0), 2696 .hw.init = &(struct clk_init_data){ 2697 .name = "gcc_tsif_ahb_clk", 2698 .ops = &clk_branch2_ops, 2699 }, 2700 }, 2701 }; 2702 2703 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2704 .halt_reg = 0x3600c, 2705 .halt_check = BRANCH_HALT, 2706 .clkr = { 2707 .enable_reg = 0x3600c, 2708 .enable_mask = BIT(0), 2709 .hw.init = &(struct clk_init_data){ 2710 .name = "gcc_tsif_inactivity_timers_clk", 2711 .ops = &clk_branch2_ops, 2712 }, 2713 }, 2714 }; 2715 2716 static struct clk_branch gcc_tsif_ref_clk = { 2717 .halt_reg = 0x36008, 2718 .halt_check = BRANCH_HALT, 2719 .clkr = { 2720 .enable_reg = 0x36008, 2721 .enable_mask = BIT(0), 2722 .hw.init = &(struct clk_init_data){ 2723 .name = "gcc_tsif_ref_clk", 2724 .parent_hws = (const struct clk_hw *[]){ 2725 &gcc_tsif_ref_clk_src.clkr.hw }, 2726 .num_parents = 1, 2727 .flags = CLK_SET_RATE_PARENT, 2728 .ops = &clk_branch2_ops, 2729 }, 2730 }, 2731 }; 2732 2733 static struct clk_branch gcc_ufs_card_ahb_clk = { 2734 .halt_reg = 0x75014, 2735 .halt_check = BRANCH_HALT, 2736 .hwcg_reg = 0x75014, 2737 .hwcg_bit = 1, 2738 .clkr = { 2739 .enable_reg = 0x75014, 2740 .enable_mask = BIT(0), 2741 .hw.init = &(struct clk_init_data){ 2742 .name = "gcc_ufs_card_ahb_clk", 2743 .ops = &clk_branch2_ops, 2744 }, 2745 }, 2746 }; 2747 2748 static struct clk_branch gcc_ufs_card_axi_clk = { 2749 .halt_reg = 0x75010, 2750 .halt_check = BRANCH_HALT, 2751 .hwcg_reg = 0x75010, 2752 .hwcg_bit = 1, 2753 .clkr = { 2754 .enable_reg = 0x75010, 2755 .enable_mask = BIT(0), 2756 .hw.init = &(struct clk_init_data){ 2757 .name = "gcc_ufs_card_axi_clk", 2758 .parent_hws = (const struct clk_hw *[]){ 2759 &gcc_ufs_card_axi_clk_src.clkr.hw }, 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_ufs_card_axi_hw_ctl_clk = { 2768 .halt_reg = 0x75010, 2769 .halt_check = BRANCH_HALT, 2770 .hwcg_reg = 0x75010, 2771 .hwcg_bit = 1, 2772 .clkr = { 2773 .enable_reg = 0x75010, 2774 .enable_mask = BIT(1), 2775 .hw.init = &(struct clk_init_data){ 2776 .name = "gcc_ufs_card_axi_hw_ctl_clk", 2777 .parent_hws = (const struct clk_hw *[]){ 2778 &gcc_ufs_card_axi_clk.clkr.hw }, 2779 .num_parents = 1, 2780 .flags = CLK_SET_RATE_PARENT, 2781 .ops = &clk_branch_simple_ops, 2782 }, 2783 }, 2784 }; 2785 2786 static struct clk_branch gcc_ufs_card_clkref_clk = { 2787 .halt_reg = 0x8c004, 2788 .halt_check = BRANCH_HALT, 2789 .clkr = { 2790 .enable_reg = 0x8c004, 2791 .enable_mask = BIT(0), 2792 .hw.init = &(struct clk_init_data){ 2793 .name = "gcc_ufs_card_clkref_clk", 2794 .ops = &clk_branch2_ops, 2795 }, 2796 }, 2797 }; 2798 2799 static struct clk_branch gcc_ufs_card_ice_core_clk = { 2800 .halt_reg = 0x7505c, 2801 .halt_check = BRANCH_HALT, 2802 .hwcg_reg = 0x7505c, 2803 .hwcg_bit = 1, 2804 .clkr = { 2805 .enable_reg = 0x7505c, 2806 .enable_mask = BIT(0), 2807 .hw.init = &(struct clk_init_data){ 2808 .name = "gcc_ufs_card_ice_core_clk", 2809 .parent_hws = (const struct clk_hw *[]){ 2810 &gcc_ufs_card_ice_core_clk_src.clkr.hw }, 2811 .num_parents = 1, 2812 .flags = CLK_SET_RATE_PARENT, 2813 .ops = &clk_branch2_ops, 2814 }, 2815 }, 2816 }; 2817 2818 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = { 2819 .halt_reg = 0x7505c, 2820 .halt_check = BRANCH_HALT, 2821 .hwcg_reg = 0x7505c, 2822 .hwcg_bit = 1, 2823 .clkr = { 2824 .enable_reg = 0x7505c, 2825 .enable_mask = BIT(1), 2826 .hw.init = &(struct clk_init_data){ 2827 .name = "gcc_ufs_card_ice_core_hw_ctl_clk", 2828 .parent_hws = (const struct clk_hw *[]){ 2829 &gcc_ufs_card_ice_core_clk.clkr.hw }, 2830 .num_parents = 1, 2831 .flags = CLK_SET_RATE_PARENT, 2832 .ops = &clk_branch_simple_ops, 2833 }, 2834 }, 2835 }; 2836 2837 static struct clk_branch gcc_ufs_card_phy_aux_clk = { 2838 .halt_reg = 0x75090, 2839 .halt_check = BRANCH_HALT, 2840 .hwcg_reg = 0x75090, 2841 .hwcg_bit = 1, 2842 .clkr = { 2843 .enable_reg = 0x75090, 2844 .enable_mask = BIT(0), 2845 .hw.init = &(struct clk_init_data){ 2846 .name = "gcc_ufs_card_phy_aux_clk", 2847 .parent_hws = (const struct clk_hw *[]){ 2848 &gcc_ufs_card_phy_aux_clk_src.clkr.hw }, 2849 .num_parents = 1, 2850 .flags = CLK_SET_RATE_PARENT, 2851 .ops = &clk_branch2_ops, 2852 }, 2853 }, 2854 }; 2855 2856 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = { 2857 .halt_reg = 0x75090, 2858 .halt_check = BRANCH_HALT, 2859 .hwcg_reg = 0x75090, 2860 .hwcg_bit = 1, 2861 .clkr = { 2862 .enable_reg = 0x75090, 2863 .enable_mask = BIT(1), 2864 .hw.init = &(struct clk_init_data){ 2865 .name = "gcc_ufs_card_phy_aux_hw_ctl_clk", 2866 .parent_hws = (const struct clk_hw *[]){ 2867 &gcc_ufs_card_phy_aux_clk.clkr.hw }, 2868 .num_parents = 1, 2869 .flags = CLK_SET_RATE_PARENT, 2870 .ops = &clk_branch_simple_ops, 2871 }, 2872 }, 2873 }; 2874 2875 /* external clocks so add BRANCH_HALT_SKIP */ 2876 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = { 2877 .halt_check = BRANCH_HALT_SKIP, 2878 .clkr = { 2879 .enable_reg = 0x7501c, 2880 .enable_mask = BIT(0), 2881 .hw.init = &(struct clk_init_data){ 2882 .name = "gcc_ufs_card_rx_symbol_0_clk", 2883 .ops = &clk_branch2_ops, 2884 }, 2885 }, 2886 }; 2887 2888 /* external clocks so add BRANCH_HALT_SKIP */ 2889 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = { 2890 .halt_check = BRANCH_HALT_SKIP, 2891 .clkr = { 2892 .enable_reg = 0x750ac, 2893 .enable_mask = BIT(0), 2894 .hw.init = &(struct clk_init_data){ 2895 .name = "gcc_ufs_card_rx_symbol_1_clk", 2896 .ops = &clk_branch2_ops, 2897 }, 2898 }, 2899 }; 2900 2901 /* external clocks so add BRANCH_HALT_SKIP */ 2902 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = { 2903 .halt_check = BRANCH_HALT_SKIP, 2904 .clkr = { 2905 .enable_reg = 0x75018, 2906 .enable_mask = BIT(0), 2907 .hw.init = &(struct clk_init_data){ 2908 .name = "gcc_ufs_card_tx_symbol_0_clk", 2909 .ops = &clk_branch2_ops, 2910 }, 2911 }, 2912 }; 2913 2914 static struct clk_branch gcc_ufs_card_unipro_core_clk = { 2915 .halt_reg = 0x75058, 2916 .halt_check = BRANCH_HALT, 2917 .hwcg_reg = 0x75058, 2918 .hwcg_bit = 1, 2919 .clkr = { 2920 .enable_reg = 0x75058, 2921 .enable_mask = BIT(0), 2922 .hw.init = &(struct clk_init_data){ 2923 .name = "gcc_ufs_card_unipro_core_clk", 2924 .parent_hws = (const struct clk_hw *[]){ 2925 &gcc_ufs_card_unipro_core_clk_src.clkr.hw }, 2926 .num_parents = 1, 2927 .flags = CLK_SET_RATE_PARENT, 2928 .ops = &clk_branch2_ops, 2929 }, 2930 }, 2931 }; 2932 2933 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = { 2934 .halt_reg = 0x75058, 2935 .halt_check = BRANCH_HALT, 2936 .hwcg_reg = 0x75058, 2937 .hwcg_bit = 1, 2938 .clkr = { 2939 .enable_reg = 0x75058, 2940 .enable_mask = BIT(1), 2941 .hw.init = &(struct clk_init_data){ 2942 .name = "gcc_ufs_card_unipro_core_hw_ctl_clk", 2943 .parent_hws = (const struct clk_hw *[]){ 2944 &gcc_ufs_card_unipro_core_clk.clkr.hw }, 2945 .num_parents = 1, 2946 .flags = CLK_SET_RATE_PARENT, 2947 .ops = &clk_branch_simple_ops, 2948 }, 2949 }, 2950 }; 2951 2952 static struct clk_branch gcc_ufs_mem_clkref_clk = { 2953 .halt_reg = 0x8c000, 2954 .halt_check = BRANCH_HALT, 2955 .clkr = { 2956 .enable_reg = 0x8c000, 2957 .enable_mask = BIT(0), 2958 .hw.init = &(struct clk_init_data){ 2959 .name = "gcc_ufs_mem_clkref_clk", 2960 .ops = &clk_branch2_ops, 2961 }, 2962 }, 2963 }; 2964 2965 static struct clk_branch gcc_ufs_phy_ahb_clk = { 2966 .halt_reg = 0x77014, 2967 .halt_check = BRANCH_HALT, 2968 .hwcg_reg = 0x77014, 2969 .hwcg_bit = 1, 2970 .clkr = { 2971 .enable_reg = 0x77014, 2972 .enable_mask = BIT(0), 2973 .hw.init = &(struct clk_init_data){ 2974 .name = "gcc_ufs_phy_ahb_clk", 2975 .ops = &clk_branch2_ops, 2976 }, 2977 }, 2978 }; 2979 2980 static struct clk_branch gcc_ufs_phy_axi_clk = { 2981 .halt_reg = 0x77010, 2982 .halt_check = BRANCH_HALT, 2983 .hwcg_reg = 0x77010, 2984 .hwcg_bit = 1, 2985 .clkr = { 2986 .enable_reg = 0x77010, 2987 .enable_mask = BIT(0), 2988 .hw.init = &(struct clk_init_data){ 2989 .name = "gcc_ufs_phy_axi_clk", 2990 .parent_hws = (const struct clk_hw *[]){ 2991 &gcc_ufs_phy_axi_clk_src.clkr.hw }, 2992 .num_parents = 1, 2993 .flags = CLK_SET_RATE_PARENT, 2994 .ops = &clk_branch2_ops, 2995 }, 2996 }, 2997 }; 2998 2999 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 3000 .halt_reg = 0x77010, 3001 .halt_check = BRANCH_HALT, 3002 .hwcg_reg = 0x77010, 3003 .hwcg_bit = 1, 3004 .clkr = { 3005 .enable_reg = 0x77010, 3006 .enable_mask = BIT(1), 3007 .hw.init = &(struct clk_init_data){ 3008 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 3009 .parent_hws = (const struct clk_hw *[]){ 3010 &gcc_ufs_phy_axi_clk.clkr.hw }, 3011 .num_parents = 1, 3012 .flags = CLK_SET_RATE_PARENT, 3013 .ops = &clk_branch_simple_ops, 3014 }, 3015 }, 3016 }; 3017 3018 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 3019 .halt_reg = 0x7705c, 3020 .halt_check = BRANCH_HALT, 3021 .hwcg_reg = 0x7705c, 3022 .hwcg_bit = 1, 3023 .clkr = { 3024 .enable_reg = 0x7705c, 3025 .enable_mask = BIT(0), 3026 .hw.init = &(struct clk_init_data){ 3027 .name = "gcc_ufs_phy_ice_core_clk", 3028 .parent_hws = (const struct clk_hw *[]){ 3029 &gcc_ufs_phy_ice_core_clk_src.clkr.hw }, 3030 .num_parents = 1, 3031 .flags = CLK_SET_RATE_PARENT, 3032 .ops = &clk_branch2_ops, 3033 }, 3034 }, 3035 }; 3036 3037 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 3038 .halt_reg = 0x7705c, 3039 .halt_check = BRANCH_HALT, 3040 .hwcg_reg = 0x7705c, 3041 .hwcg_bit = 1, 3042 .clkr = { 3043 .enable_reg = 0x7705c, 3044 .enable_mask = BIT(1), 3045 .hw.init = &(struct clk_init_data){ 3046 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 3047 .parent_hws = (const struct clk_hw *[]){ 3048 &gcc_ufs_phy_ice_core_clk.clkr.hw }, 3049 .num_parents = 1, 3050 .flags = CLK_SET_RATE_PARENT, 3051 .ops = &clk_branch_simple_ops, 3052 }, 3053 }, 3054 }; 3055 3056 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 3057 .halt_reg = 0x77090, 3058 .halt_check = BRANCH_HALT, 3059 .hwcg_reg = 0x77090, 3060 .hwcg_bit = 1, 3061 .clkr = { 3062 .enable_reg = 0x77090, 3063 .enable_mask = BIT(0), 3064 .hw.init = &(struct clk_init_data){ 3065 .name = "gcc_ufs_phy_phy_aux_clk", 3066 .parent_hws = (const struct clk_hw *[]){ 3067 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw }, 3068 .num_parents = 1, 3069 .flags = CLK_SET_RATE_PARENT, 3070 .ops = &clk_branch2_ops, 3071 }, 3072 }, 3073 }; 3074 3075 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 3076 .halt_reg = 0x77090, 3077 .halt_check = BRANCH_HALT, 3078 .hwcg_reg = 0x77090, 3079 .hwcg_bit = 1, 3080 .clkr = { 3081 .enable_reg = 0x77090, 3082 .enable_mask = BIT(1), 3083 .hw.init = &(struct clk_init_data){ 3084 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 3085 .parent_hws = (const struct clk_hw *[]){ 3086 &gcc_ufs_phy_phy_aux_clk.clkr.hw }, 3087 .num_parents = 1, 3088 .flags = CLK_SET_RATE_PARENT, 3089 .ops = &clk_branch_simple_ops, 3090 }, 3091 }, 3092 }; 3093 3094 /* external clocks so add BRANCH_HALT_SKIP */ 3095 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 3096 .halt_check = BRANCH_HALT_SKIP, 3097 .clkr = { 3098 .enable_reg = 0x7701c, 3099 .enable_mask = BIT(0), 3100 .hw.init = &(struct clk_init_data){ 3101 .name = "gcc_ufs_phy_rx_symbol_0_clk", 3102 .ops = &clk_branch2_ops, 3103 }, 3104 }, 3105 }; 3106 3107 /* external clocks so add BRANCH_HALT_SKIP */ 3108 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 3109 .halt_check = BRANCH_HALT_SKIP, 3110 .clkr = { 3111 .enable_reg = 0x770ac, 3112 .enable_mask = BIT(0), 3113 .hw.init = &(struct clk_init_data){ 3114 .name = "gcc_ufs_phy_rx_symbol_1_clk", 3115 .ops = &clk_branch2_ops, 3116 }, 3117 }, 3118 }; 3119 3120 /* external clocks so add BRANCH_HALT_SKIP */ 3121 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 3122 .halt_check = BRANCH_HALT_SKIP, 3123 .clkr = { 3124 .enable_reg = 0x77018, 3125 .enable_mask = BIT(0), 3126 .hw.init = &(struct clk_init_data){ 3127 .name = "gcc_ufs_phy_tx_symbol_0_clk", 3128 .ops = &clk_branch2_ops, 3129 }, 3130 }, 3131 }; 3132 3133 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 3134 .halt_reg = 0x77058, 3135 .halt_check = BRANCH_HALT, 3136 .hwcg_reg = 0x77058, 3137 .hwcg_bit = 1, 3138 .clkr = { 3139 .enable_reg = 0x77058, 3140 .enable_mask = BIT(0), 3141 .hw.init = &(struct clk_init_data){ 3142 .name = "gcc_ufs_phy_unipro_core_clk", 3143 .parent_hws = (const struct clk_hw *[]){ 3144 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw }, 3145 .num_parents = 1, 3146 .flags = CLK_SET_RATE_PARENT, 3147 .ops = &clk_branch2_ops, 3148 }, 3149 }, 3150 }; 3151 3152 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 3153 .halt_reg = 0x77058, 3154 .halt_check = BRANCH_HALT, 3155 .hwcg_reg = 0x77058, 3156 .hwcg_bit = 1, 3157 .clkr = { 3158 .enable_reg = 0x77058, 3159 .enable_mask = BIT(1), 3160 .hw.init = &(struct clk_init_data){ 3161 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 3162 .parent_hws = (const struct clk_hw *[]){ 3163 &gcc_ufs_phy_unipro_core_clk.clkr.hw }, 3164 .num_parents = 1, 3165 .flags = CLK_SET_RATE_PARENT, 3166 .ops = &clk_branch_simple_ops, 3167 }, 3168 }, 3169 }; 3170 3171 static struct clk_branch gcc_usb30_prim_master_clk = { 3172 .halt_reg = 0xf010, 3173 .halt_check = BRANCH_HALT, 3174 .clkr = { 3175 .enable_reg = 0xf010, 3176 .enable_mask = BIT(0), 3177 .hw.init = &(struct clk_init_data){ 3178 .name = "gcc_usb30_prim_master_clk", 3179 .parent_hws = (const struct clk_hw *[]){ 3180 &gcc_usb30_prim_master_clk_src.clkr.hw }, 3181 .num_parents = 1, 3182 .flags = CLK_SET_RATE_PARENT, 3183 .ops = &clk_branch2_ops, 3184 }, 3185 }, 3186 }; 3187 3188 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3189 .halt_reg = 0xf018, 3190 .halt_check = BRANCH_HALT, 3191 .clkr = { 3192 .enable_reg = 0xf018, 3193 .enable_mask = BIT(0), 3194 .hw.init = &(struct clk_init_data){ 3195 .name = "gcc_usb30_prim_mock_utmi_clk", 3196 .parent_hws = (const struct clk_hw *[]){ 3197 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw }, 3198 .num_parents = 1, 3199 .flags = CLK_SET_RATE_PARENT, 3200 .ops = &clk_branch2_ops, 3201 }, 3202 }, 3203 }; 3204 3205 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3206 .halt_reg = 0xf014, 3207 .halt_check = BRANCH_HALT, 3208 .clkr = { 3209 .enable_reg = 0xf014, 3210 .enable_mask = BIT(0), 3211 .hw.init = &(struct clk_init_data){ 3212 .name = "gcc_usb30_prim_sleep_clk", 3213 .ops = &clk_branch2_ops, 3214 }, 3215 }, 3216 }; 3217 3218 static struct clk_branch gcc_usb30_sec_master_clk = { 3219 .halt_reg = 0x10010, 3220 .halt_check = BRANCH_HALT, 3221 .clkr = { 3222 .enable_reg = 0x10010, 3223 .enable_mask = BIT(0), 3224 .hw.init = &(struct clk_init_data){ 3225 .name = "gcc_usb30_sec_master_clk", 3226 .parent_hws = (const struct clk_hw *[]){ 3227 &gcc_usb30_sec_master_clk_src.clkr.hw }, 3228 .num_parents = 1, 3229 .flags = CLK_SET_RATE_PARENT, 3230 .ops = &clk_branch2_ops, 3231 }, 3232 }, 3233 }; 3234 3235 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = { 3236 .halt_reg = 0x10018, 3237 .halt_check = BRANCH_HALT, 3238 .clkr = { 3239 .enable_reg = 0x10018, 3240 .enable_mask = BIT(0), 3241 .hw.init = &(struct clk_init_data){ 3242 .name = "gcc_usb30_sec_mock_utmi_clk", 3243 .parent_hws = (const struct clk_hw *[]){ 3244 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw }, 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_usb30_sec_sleep_clk = { 3253 .halt_reg = 0x10014, 3254 .halt_check = BRANCH_HALT, 3255 .clkr = { 3256 .enable_reg = 0x10014, 3257 .enable_mask = BIT(0), 3258 .hw.init = &(struct clk_init_data){ 3259 .name = "gcc_usb30_sec_sleep_clk", 3260 .ops = &clk_branch2_ops, 3261 }, 3262 }, 3263 }; 3264 3265 static struct clk_branch gcc_usb3_prim_clkref_clk = { 3266 .halt_reg = 0x8c008, 3267 .halt_check = BRANCH_HALT, 3268 .clkr = { 3269 .enable_reg = 0x8c008, 3270 .enable_mask = BIT(0), 3271 .hw.init = &(struct clk_init_data){ 3272 .name = "gcc_usb3_prim_clkref_clk", 3273 .ops = &clk_branch2_ops, 3274 }, 3275 }, 3276 }; 3277 3278 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 3279 .halt_reg = 0xf050, 3280 .halt_check = BRANCH_HALT, 3281 .clkr = { 3282 .enable_reg = 0xf050, 3283 .enable_mask = BIT(0), 3284 .hw.init = &(struct clk_init_data){ 3285 .name = "gcc_usb3_prim_phy_aux_clk", 3286 .parent_hws = (const struct clk_hw *[]){ 3287 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw }, 3288 .num_parents = 1, 3289 .flags = CLK_SET_RATE_PARENT, 3290 .ops = &clk_branch2_ops, 3291 }, 3292 }, 3293 }; 3294 3295 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3296 .halt_reg = 0xf054, 3297 .halt_check = BRANCH_HALT, 3298 .clkr = { 3299 .enable_reg = 0xf054, 3300 .enable_mask = BIT(0), 3301 .hw.init = &(struct clk_init_data){ 3302 .name = "gcc_usb3_prim_phy_com_aux_clk", 3303 .parent_hws = (const struct clk_hw *[]){ 3304 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw }, 3305 .num_parents = 1, 3306 .flags = CLK_SET_RATE_PARENT, 3307 .ops = &clk_branch2_ops, 3308 }, 3309 }, 3310 }; 3311 3312 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3313 .halt_check = BRANCH_HALT_SKIP, 3314 .clkr = { 3315 .enable_reg = 0xf058, 3316 .enable_mask = BIT(0), 3317 .hw.init = &(struct clk_init_data){ 3318 .name = "gcc_usb3_prim_phy_pipe_clk", 3319 .ops = &clk_branch2_ops, 3320 }, 3321 }, 3322 }; 3323 3324 static struct clk_branch gcc_usb3_sec_clkref_clk = { 3325 .halt_reg = 0x8c028, 3326 .halt_check = BRANCH_HALT, 3327 .clkr = { 3328 .enable_reg = 0x8c028, 3329 .enable_mask = BIT(0), 3330 .hw.init = &(struct clk_init_data){ 3331 .name = "gcc_usb3_sec_clkref_clk", 3332 .ops = &clk_branch2_ops, 3333 }, 3334 }, 3335 }; 3336 3337 static struct clk_branch gcc_usb3_sec_phy_aux_clk = { 3338 .halt_reg = 0x10050, 3339 .halt_check = BRANCH_HALT, 3340 .clkr = { 3341 .enable_reg = 0x10050, 3342 .enable_mask = BIT(0), 3343 .hw.init = &(struct clk_init_data){ 3344 .name = "gcc_usb3_sec_phy_aux_clk", 3345 .parent_hws = (const struct clk_hw *[]){ 3346 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw }, 3347 .num_parents = 1, 3348 .flags = CLK_SET_RATE_PARENT, 3349 .ops = &clk_branch2_ops, 3350 }, 3351 }, 3352 }; 3353 3354 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = { 3355 .halt_reg = 0x10054, 3356 .halt_check = BRANCH_HALT, 3357 .clkr = { 3358 .enable_reg = 0x10054, 3359 .enable_mask = BIT(0), 3360 .hw.init = &(struct clk_init_data){ 3361 .name = "gcc_usb3_sec_phy_com_aux_clk", 3362 .parent_hws = (const struct clk_hw *[]){ 3363 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw }, 3364 .num_parents = 1, 3365 .flags = CLK_SET_RATE_PARENT, 3366 .ops = &clk_branch2_ops, 3367 }, 3368 }, 3369 }; 3370 3371 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 3372 .halt_check = BRANCH_HALT_SKIP, 3373 .clkr = { 3374 .enable_reg = 0x10058, 3375 .enable_mask = BIT(0), 3376 .hw.init = &(struct clk_init_data){ 3377 .name = "gcc_usb3_sec_phy_pipe_clk", 3378 .ops = &clk_branch2_ops, 3379 }, 3380 }, 3381 }; 3382 3383 /* 3384 * Clock ON depends on external parent 'config noc', so cant poll 3385 * delay and also mark as crtitical for video boot 3386 */ 3387 static struct clk_branch gcc_video_ahb_clk = { 3388 .halt_reg = 0xb004, 3389 .halt_check = BRANCH_HALT_DELAY, 3390 .hwcg_reg = 0xb004, 3391 .hwcg_bit = 1, 3392 .clkr = { 3393 .enable_reg = 0xb004, 3394 .enable_mask = BIT(0), 3395 .hw.init = &(struct clk_init_data){ 3396 .name = "gcc_video_ahb_clk", 3397 .flags = CLK_IS_CRITICAL, 3398 .ops = &clk_branch2_ops, 3399 }, 3400 }, 3401 }; 3402 3403 static struct clk_branch gcc_video_axi0_clk = { 3404 .halt_reg = 0xb024, 3405 .halt_check = BRANCH_HALT, 3406 .clkr = { 3407 .enable_reg = 0xb024, 3408 .enable_mask = BIT(0), 3409 .hw.init = &(struct clk_init_data){ 3410 .name = "gcc_video_axi0_clk", 3411 .ops = &clk_branch2_ops, 3412 }, 3413 }, 3414 }; 3415 3416 static struct clk_branch gcc_video_axi1_clk = { 3417 .halt_reg = 0xb028, 3418 .halt_check = BRANCH_HALT, 3419 .clkr = { 3420 .enable_reg = 0xb028, 3421 .enable_mask = BIT(0), 3422 .hw.init = &(struct clk_init_data){ 3423 .name = "gcc_video_axi1_clk", 3424 .ops = &clk_branch2_ops, 3425 }, 3426 }, 3427 }; 3428 3429 static struct clk_branch gcc_video_axic_clk = { 3430 .halt_reg = 0xb02c, 3431 .halt_check = BRANCH_HALT, 3432 .clkr = { 3433 .enable_reg = 0xb02c, 3434 .enable_mask = BIT(0), 3435 .hw.init = &(struct clk_init_data){ 3436 .name = "gcc_video_axic_clk", 3437 .ops = &clk_branch2_ops, 3438 }, 3439 }, 3440 }; 3441 3442 /* XO critical input to video, so no need to poll */ 3443 static struct clk_branch gcc_video_xo_clk = { 3444 .halt_reg = 0xb040, 3445 .halt_check = BRANCH_HALT_DELAY, 3446 .clkr = { 3447 .enable_reg = 0xb040, 3448 .enable_mask = BIT(0), 3449 .hw.init = &(struct clk_init_data){ 3450 .name = "gcc_video_xo_clk", 3451 .flags = CLK_IS_CRITICAL, 3452 .ops = &clk_branch2_ops, 3453 }, 3454 }, 3455 }; 3456 3457 static struct gdsc usb30_prim_gdsc = { 3458 .gdscr = 0xf004, 3459 .pd = { 3460 .name = "usb30_prim_gdsc", 3461 }, 3462 .pwrsts = PWRSTS_OFF_ON, 3463 .flags = POLL_CFG_GDSCR, 3464 }; 3465 3466 static struct gdsc usb30_sec_gdsc = { 3467 .gdscr = 0x10004, 3468 .pd = { 3469 .name = "usb30_sec_gdsc", 3470 }, 3471 .pwrsts = PWRSTS_OFF_ON, 3472 .flags = POLL_CFG_GDSCR, 3473 }; 3474 3475 static struct clk_regmap *gcc_sm8150_clocks[] = { 3476 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr, 3477 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr, 3478 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = 3479 &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr, 3480 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 3481 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 3482 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 3483 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 3484 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr, 3485 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3486 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 3487 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 3488 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 3489 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 3490 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3491 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr, 3492 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 3493 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 3494 [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr, 3495 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 3496 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 3497 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 3498 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 3499 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3500 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr, 3501 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 3502 [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr, 3503 [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr, 3504 [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr, 3505 [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr, 3506 [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr, 3507 [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr, 3508 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3509 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3510 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3511 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3512 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3513 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3514 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 3515 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3516 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3517 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr, 3518 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3519 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3520 [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr, 3521 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 3522 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 3523 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr, 3524 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr, 3525 [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr, 3526 [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr, 3527 [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr, 3528 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3529 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 3530 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3531 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr, 3532 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3533 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3534 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3535 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 3536 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3537 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr, 3538 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3539 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr, 3540 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3541 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3542 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3543 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr, 3544 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 3545 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr, 3546 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3547 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3548 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3549 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3550 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3551 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3552 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3553 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3554 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr, 3555 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3556 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr, 3557 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr, 3558 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr, 3559 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 3560 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 3561 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 3562 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 3563 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 3564 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 3565 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 3566 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 3567 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 3568 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 3569 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 3570 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 3571 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 3572 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 3573 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 3574 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 3575 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 3576 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 3577 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 3578 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 3579 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 3580 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 3581 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 3582 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 3583 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 3584 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 3585 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 3586 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 3587 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr, 3588 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr, 3589 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr, 3590 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr, 3591 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr, 3592 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr, 3593 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr, 3594 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr, 3595 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr, 3596 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr, 3597 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr, 3598 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr, 3599 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 3600 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 3601 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 3602 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 3603 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr, 3604 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr, 3605 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3606 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3607 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3608 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3609 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3610 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 3611 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 3612 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3613 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3614 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3615 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr, 3616 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr, 3617 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr, 3618 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr, 3619 [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr, 3620 [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr, 3621 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr, 3622 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr, 3623 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = 3624 &gcc_ufs_card_ice_core_hw_ctl_clk.clkr, 3625 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr, 3626 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr, 3627 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = 3628 &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr, 3629 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr, 3630 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr, 3631 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr, 3632 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr, 3633 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = 3634 &gcc_ufs_card_unipro_core_clk_src.clkr, 3635 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = 3636 &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr, 3637 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 3638 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3639 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3640 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3641 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 3642 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3643 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3644 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 3645 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 3646 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3647 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3648 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 3649 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 3650 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 3651 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 3652 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3653 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 3654 &gcc_ufs_phy_unipro_core_clk_src.clkr, 3655 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 3656 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 3657 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3658 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3659 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3660 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 3661 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3662 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3663 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr, 3664 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr, 3665 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr, 3666 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = 3667 &gcc_usb30_sec_mock_utmi_clk_src.clkr, 3668 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr, 3669 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 3670 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 3671 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3672 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3673 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3674 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr, 3675 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr, 3676 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr, 3677 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr, 3678 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr, 3679 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 3680 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3681 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr, 3682 [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr, 3683 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 3684 [GPLL0] = &gpll0.clkr, 3685 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 3686 [GPLL7] = &gpll7.clkr, 3687 [GPLL9] = &gpll9.clkr, 3688 }; 3689 3690 static const struct qcom_reset_map gcc_sm8150_resets[] = { 3691 [GCC_EMAC_BCR] = { 0x6000 }, 3692 [GCC_GPU_BCR] = { 0x71000 }, 3693 [GCC_MMSS_BCR] = { 0xb000 }, 3694 [GCC_NPU_BCR] = { 0x4d000 }, 3695 [GCC_PCIE_0_BCR] = { 0x6b000 }, 3696 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3697 [GCC_PCIE_1_BCR] = { 0x8d000 }, 3698 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c }, 3699 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3700 [GCC_PDM_BCR] = { 0x33000 }, 3701 [GCC_PRNG_BCR] = { 0x34000 }, 3702 [GCC_QSPI_BCR] = { 0x24008 }, 3703 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 }, 3704 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 }, 3705 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 }, 3706 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 3707 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 3708 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 }, 3709 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 }, 3710 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c }, 3711 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 }, 3712 [GCC_SDCC2_BCR] = { 0x14000 }, 3713 [GCC_SDCC4_BCR] = { 0x16000 }, 3714 [GCC_TSIF_BCR] = { 0x36000 }, 3715 [GCC_UFS_CARD_BCR] = { 0x75000 }, 3716 [GCC_UFS_PHY_BCR] = { 0x77000 }, 3717 [GCC_USB30_PRIM_BCR] = { 0xf000 }, 3718 [GCC_USB30_SEC_BCR] = { 0x10000 }, 3719 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 3720 }; 3721 3722 static struct gdsc *gcc_sm8150_gdscs[] = { 3723 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 3724 [USB30_SEC_GDSC] = &usb30_sec_gdsc, 3725 }; 3726 3727 static const struct regmap_config gcc_sm8150_regmap_config = { 3728 .reg_bits = 32, 3729 .reg_stride = 4, 3730 .val_bits = 32, 3731 .max_register = 0x9c040, 3732 .fast_io = true, 3733 }; 3734 3735 static const struct qcom_cc_desc gcc_sm8150_desc = { 3736 .config = &gcc_sm8150_regmap_config, 3737 .clks = gcc_sm8150_clocks, 3738 .num_clks = ARRAY_SIZE(gcc_sm8150_clocks), 3739 .resets = gcc_sm8150_resets, 3740 .num_resets = ARRAY_SIZE(gcc_sm8150_resets), 3741 .gdscs = gcc_sm8150_gdscs, 3742 .num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs), 3743 }; 3744 3745 static const struct of_device_id gcc_sm8150_match_table[] = { 3746 { .compatible = "qcom,gcc-sm8150" }, 3747 { } 3748 }; 3749 MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table); 3750 3751 static int gcc_sm8150_probe(struct platform_device *pdev) 3752 { 3753 struct regmap *regmap; 3754 3755 regmap = qcom_cc_map(pdev, &gcc_sm8150_desc); 3756 if (IS_ERR(regmap)) 3757 return PTR_ERR(regmap); 3758 3759 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 3760 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3); 3761 regmap_update_bits(regmap, 0x71028, 0x3, 0x3); 3762 3763 return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap); 3764 } 3765 3766 static struct platform_driver gcc_sm8150_driver = { 3767 .probe = gcc_sm8150_probe, 3768 .driver = { 3769 .name = "gcc-sm8150", 3770 .of_match_table = gcc_sm8150_match_table, 3771 }, 3772 }; 3773 3774 static int __init gcc_sm8150_init(void) 3775 { 3776 return platform_driver_register(&gcc_sm8150_driver); 3777 } 3778 subsys_initcall(gcc_sm8150_init); 3779 3780 static void __exit gcc_sm8150_exit(void) 3781 { 3782 platform_driver_unregister(&gcc_sm8150_driver); 3783 } 3784 module_exit(gcc_sm8150_exit); 3785 3786 MODULE_DESCRIPTION("QTI GCC SM8150 Driver"); 3787 MODULE_LICENSE("GPL v2"); 3788