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