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_iref_clk = { 1621 .halt_reg = 0x8c010, 1622 .halt_check = BRANCH_HALT, 1623 .clkr = { 1624 .enable_reg = 0x8c010, 1625 .enable_mask = BIT(0), 1626 .hw.init = &(struct clk_init_data){ 1627 .name = "gcc_gpu_iref_clk", 1628 .ops = &clk_branch2_ops, 1629 }, 1630 }, 1631 }; 1632 1633 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1634 .halt_reg = 0x7100c, 1635 .halt_check = BRANCH_VOTED, 1636 .clkr = { 1637 .enable_reg = 0x7100c, 1638 .enable_mask = BIT(0), 1639 .hw.init = &(struct clk_init_data){ 1640 .name = "gcc_gpu_memnoc_gfx_clk", 1641 .ops = &clk_branch2_ops, 1642 }, 1643 }, 1644 }; 1645 1646 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1647 .halt_reg = 0x71018, 1648 .halt_check = BRANCH_HALT, 1649 .clkr = { 1650 .enable_reg = 0x71018, 1651 .enable_mask = BIT(0), 1652 .hw.init = &(struct clk_init_data){ 1653 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1654 .ops = &clk_branch2_ops, 1655 }, 1656 }, 1657 }; 1658 1659 static struct clk_branch gcc_npu_at_clk = { 1660 .halt_reg = 0x4d010, 1661 .halt_check = BRANCH_VOTED, 1662 .clkr = { 1663 .enable_reg = 0x4d010, 1664 .enable_mask = BIT(0), 1665 .hw.init = &(struct clk_init_data){ 1666 .name = "gcc_npu_at_clk", 1667 .ops = &clk_branch2_ops, 1668 }, 1669 }, 1670 }; 1671 1672 static struct clk_branch gcc_npu_axi_clk = { 1673 .halt_reg = 0x4d008, 1674 .halt_check = BRANCH_VOTED, 1675 .clkr = { 1676 .enable_reg = 0x4d008, 1677 .enable_mask = BIT(0), 1678 .hw.init = &(struct clk_init_data){ 1679 .name = "gcc_npu_axi_clk", 1680 .ops = &clk_branch2_ops, 1681 }, 1682 }, 1683 }; 1684 1685 static struct clk_branch gcc_npu_cfg_ahb_clk = { 1686 .halt_reg = 0x4d004, 1687 .halt_check = BRANCH_HALT, 1688 .hwcg_reg = 0x4d004, 1689 .hwcg_bit = 1, 1690 .clkr = { 1691 .enable_reg = 0x4d004, 1692 .enable_mask = BIT(0), 1693 .hw.init = &(struct clk_init_data){ 1694 .name = "gcc_npu_cfg_ahb_clk", 1695 /* required for npu */ 1696 .flags = CLK_IS_CRITICAL, 1697 .ops = &clk_branch2_ops, 1698 }, 1699 }, 1700 }; 1701 1702 static struct clk_branch gcc_npu_trig_clk = { 1703 .halt_reg = 0x4d00c, 1704 .halt_check = BRANCH_VOTED, 1705 .clkr = { 1706 .enable_reg = 0x4d00c, 1707 .enable_mask = BIT(0), 1708 .hw.init = &(struct clk_init_data){ 1709 .name = "gcc_npu_trig_clk", 1710 .ops = &clk_branch2_ops, 1711 }, 1712 }, 1713 }; 1714 1715 static struct clk_branch gcc_pcie0_phy_refgen_clk = { 1716 .halt_reg = 0x6f02c, 1717 .halt_check = BRANCH_HALT, 1718 .clkr = { 1719 .enable_reg = 0x6f02c, 1720 .enable_mask = BIT(0), 1721 .hw.init = &(struct clk_init_data){ 1722 .name = "gcc_pcie0_phy_refgen_clk", 1723 .parent_hws = (const struct clk_hw *[]){ 1724 &gcc_pcie_phy_refgen_clk_src.clkr.hw }, 1725 .num_parents = 1, 1726 .flags = CLK_SET_RATE_PARENT, 1727 .ops = &clk_branch2_ops, 1728 }, 1729 }, 1730 }; 1731 1732 static struct clk_branch gcc_pcie1_phy_refgen_clk = { 1733 .halt_reg = 0x6f030, 1734 .halt_check = BRANCH_HALT, 1735 .clkr = { 1736 .enable_reg = 0x6f030, 1737 .enable_mask = BIT(0), 1738 .hw.init = &(struct clk_init_data){ 1739 .name = "gcc_pcie1_phy_refgen_clk", 1740 .parent_hws = (const struct clk_hw *[]){ 1741 &gcc_pcie_phy_refgen_clk_src.clkr.hw }, 1742 .num_parents = 1, 1743 .flags = CLK_SET_RATE_PARENT, 1744 .ops = &clk_branch2_ops, 1745 }, 1746 }, 1747 }; 1748 1749 static struct clk_branch gcc_pcie_0_aux_clk = { 1750 .halt_reg = 0x6b020, 1751 .halt_check = BRANCH_HALT_VOTED, 1752 .clkr = { 1753 .enable_reg = 0x5200c, 1754 .enable_mask = BIT(3), 1755 .hw.init = &(struct clk_init_data){ 1756 .name = "gcc_pcie_0_aux_clk", 1757 .parent_hws = (const struct clk_hw *[]){ 1758 &gcc_pcie_0_aux_clk_src.clkr.hw }, 1759 .num_parents = 1, 1760 .flags = CLK_SET_RATE_PARENT, 1761 .ops = &clk_branch2_ops, 1762 }, 1763 }, 1764 }; 1765 1766 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1767 .halt_reg = 0x6b01c, 1768 .halt_check = BRANCH_HALT_VOTED, 1769 .hwcg_reg = 0x6b01c, 1770 .hwcg_bit = 1, 1771 .clkr = { 1772 .enable_reg = 0x5200c, 1773 .enable_mask = BIT(2), 1774 .hw.init = &(struct clk_init_data){ 1775 .name = "gcc_pcie_0_cfg_ahb_clk", 1776 .ops = &clk_branch2_ops, 1777 }, 1778 }, 1779 }; 1780 1781 static struct clk_branch gcc_pcie_0_clkref_clk = { 1782 .halt_reg = 0x8c00c, 1783 .halt_check = BRANCH_HALT, 1784 .clkr = { 1785 .enable_reg = 0x8c00c, 1786 .enable_mask = BIT(0), 1787 .hw.init = &(struct clk_init_data){ 1788 .name = "gcc_pcie_0_clkref_clk", 1789 .ops = &clk_branch2_ops, 1790 }, 1791 }, 1792 }; 1793 1794 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1795 .halt_reg = 0x6b018, 1796 .halt_check = BRANCH_HALT_VOTED, 1797 .clkr = { 1798 .enable_reg = 0x5200c, 1799 .enable_mask = BIT(1), 1800 .hw.init = &(struct clk_init_data){ 1801 .name = "gcc_pcie_0_mstr_axi_clk", 1802 .ops = &clk_branch2_ops, 1803 }, 1804 }, 1805 }; 1806 1807 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */ 1808 static struct clk_branch gcc_pcie_0_pipe_clk = { 1809 .halt_reg = 0x6b024, 1810 .halt_check = BRANCH_HALT_DELAY, 1811 .clkr = { 1812 .enable_reg = 0x5200c, 1813 .enable_mask = BIT(4), 1814 .hw.init = &(struct clk_init_data){ 1815 .name = "gcc_pcie_0_pipe_clk", 1816 .ops = &clk_branch2_ops, 1817 }, 1818 }, 1819 }; 1820 1821 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1822 .halt_reg = 0x6b014, 1823 .halt_check = BRANCH_HALT_VOTED, 1824 .hwcg_reg = 0x6b014, 1825 .hwcg_bit = 1, 1826 .clkr = { 1827 .enable_reg = 0x5200c, 1828 .enable_mask = BIT(0), 1829 .hw.init = &(struct clk_init_data){ 1830 .name = "gcc_pcie_0_slv_axi_clk", 1831 .ops = &clk_branch2_ops, 1832 }, 1833 }, 1834 }; 1835 1836 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1837 .halt_reg = 0x6b010, 1838 .halt_check = BRANCH_HALT_VOTED, 1839 .clkr = { 1840 .enable_reg = 0x5200c, 1841 .enable_mask = BIT(5), 1842 .hw.init = &(struct clk_init_data){ 1843 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1844 .ops = &clk_branch2_ops, 1845 }, 1846 }, 1847 }; 1848 1849 static struct clk_branch gcc_pcie_1_aux_clk = { 1850 .halt_reg = 0x8d020, 1851 .halt_check = BRANCH_HALT_VOTED, 1852 .clkr = { 1853 .enable_reg = 0x52004, 1854 .enable_mask = BIT(29), 1855 .hw.init = &(struct clk_init_data){ 1856 .name = "gcc_pcie_1_aux_clk", 1857 .parent_hws = (const struct clk_hw *[]){ 1858 &gcc_pcie_1_aux_clk_src.clkr.hw }, 1859 .num_parents = 1, 1860 .flags = CLK_SET_RATE_PARENT, 1861 .ops = &clk_branch2_ops, 1862 }, 1863 }, 1864 }; 1865 1866 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 1867 .halt_reg = 0x8d01c, 1868 .halt_check = BRANCH_HALT_VOTED, 1869 .hwcg_reg = 0x8d01c, 1870 .hwcg_bit = 1, 1871 .clkr = { 1872 .enable_reg = 0x52004, 1873 .enable_mask = BIT(28), 1874 .hw.init = &(struct clk_init_data){ 1875 .name = "gcc_pcie_1_cfg_ahb_clk", 1876 .ops = &clk_branch2_ops, 1877 }, 1878 }, 1879 }; 1880 1881 static struct clk_branch gcc_pcie_1_clkref_clk = { 1882 .halt_reg = 0x8c02c, 1883 .halt_check = BRANCH_HALT, 1884 .clkr = { 1885 .enable_reg = 0x8c02c, 1886 .enable_mask = BIT(0), 1887 .hw.init = &(struct clk_init_data){ 1888 .name = "gcc_pcie_1_clkref_clk", 1889 .ops = &clk_branch2_ops, 1890 }, 1891 }, 1892 }; 1893 1894 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 1895 .halt_reg = 0x8d018, 1896 .halt_check = BRANCH_HALT_VOTED, 1897 .clkr = { 1898 .enable_reg = 0x52004, 1899 .enable_mask = BIT(27), 1900 .hw.init = &(struct clk_init_data){ 1901 .name = "gcc_pcie_1_mstr_axi_clk", 1902 .ops = &clk_branch2_ops, 1903 }, 1904 }, 1905 }; 1906 1907 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */ 1908 static struct clk_branch gcc_pcie_1_pipe_clk = { 1909 .halt_reg = 0x8d024, 1910 .halt_check = BRANCH_HALT_DELAY, 1911 .clkr = { 1912 .enable_reg = 0x52004, 1913 .enable_mask = BIT(30), 1914 .hw.init = &(struct clk_init_data){ 1915 .name = "gcc_pcie_1_pipe_clk", 1916 .ops = &clk_branch2_ops, 1917 }, 1918 }, 1919 }; 1920 1921 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 1922 .halt_reg = 0x8d014, 1923 .halt_check = BRANCH_HALT_VOTED, 1924 .hwcg_reg = 0x8d014, 1925 .hwcg_bit = 1, 1926 .clkr = { 1927 .enable_reg = 0x52004, 1928 .enable_mask = BIT(26), 1929 .hw.init = &(struct clk_init_data){ 1930 .name = "gcc_pcie_1_slv_axi_clk", 1931 .ops = &clk_branch2_ops, 1932 }, 1933 }, 1934 }; 1935 1936 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = { 1937 .halt_reg = 0x8d010, 1938 .halt_check = BRANCH_HALT_VOTED, 1939 .clkr = { 1940 .enable_reg = 0x52004, 1941 .enable_mask = BIT(25), 1942 .hw.init = &(struct clk_init_data){ 1943 .name = "gcc_pcie_1_slv_q2a_axi_clk", 1944 .ops = &clk_branch2_ops, 1945 }, 1946 }, 1947 }; 1948 1949 static struct clk_branch gcc_pcie_phy_aux_clk = { 1950 .halt_reg = 0x6f004, 1951 .halt_check = BRANCH_HALT, 1952 .clkr = { 1953 .enable_reg = 0x6f004, 1954 .enable_mask = BIT(0), 1955 .hw.init = &(struct clk_init_data){ 1956 .name = "gcc_pcie_phy_aux_clk", 1957 .parent_hws = (const struct clk_hw *[]){ 1958 &gcc_pcie_0_aux_clk_src.clkr.hw }, 1959 .num_parents = 1, 1960 .flags = CLK_SET_RATE_PARENT, 1961 .ops = &clk_branch2_ops, 1962 }, 1963 }, 1964 }; 1965 1966 static struct clk_branch gcc_pdm2_clk = { 1967 .halt_reg = 0x3300c, 1968 .halt_check = BRANCH_HALT, 1969 .clkr = { 1970 .enable_reg = 0x3300c, 1971 .enable_mask = BIT(0), 1972 .hw.init = &(struct clk_init_data){ 1973 .name = "gcc_pdm2_clk", 1974 .parent_hws = (const struct clk_hw *[]){ 1975 &gcc_pdm2_clk_src.clkr.hw }, 1976 .num_parents = 1, 1977 .flags = CLK_SET_RATE_PARENT, 1978 .ops = &clk_branch2_ops, 1979 }, 1980 }, 1981 }; 1982 1983 static struct clk_branch gcc_pdm_ahb_clk = { 1984 .halt_reg = 0x33004, 1985 .halt_check = BRANCH_HALT, 1986 .hwcg_reg = 0x33004, 1987 .hwcg_bit = 1, 1988 .clkr = { 1989 .enable_reg = 0x33004, 1990 .enable_mask = BIT(0), 1991 .hw.init = &(struct clk_init_data){ 1992 .name = "gcc_pdm_ahb_clk", 1993 .ops = &clk_branch2_ops, 1994 }, 1995 }, 1996 }; 1997 1998 static struct clk_branch gcc_pdm_xo4_clk = { 1999 .halt_reg = 0x33008, 2000 .halt_check = BRANCH_HALT, 2001 .clkr = { 2002 .enable_reg = 0x33008, 2003 .enable_mask = BIT(0), 2004 .hw.init = &(struct clk_init_data){ 2005 .name = "gcc_pdm_xo4_clk", 2006 .ops = &clk_branch2_ops, 2007 }, 2008 }, 2009 }; 2010 2011 static struct clk_branch gcc_prng_ahb_clk = { 2012 .halt_reg = 0x34004, 2013 .halt_check = BRANCH_HALT_VOTED, 2014 .clkr = { 2015 .enable_reg = 0x52004, 2016 .enable_mask = BIT(13), 2017 .hw.init = &(struct clk_init_data){ 2018 .name = "gcc_prng_ahb_clk", 2019 .ops = &clk_branch2_ops, 2020 }, 2021 }, 2022 }; 2023 2024 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2025 .halt_reg = 0xb018, 2026 .halt_check = BRANCH_HALT, 2027 .hwcg_reg = 0xb018, 2028 .hwcg_bit = 1, 2029 .clkr = { 2030 .enable_reg = 0xb018, 2031 .enable_mask = BIT(0), 2032 .hw.init = &(struct clk_init_data){ 2033 .name = "gcc_qmip_camera_nrt_ahb_clk", 2034 .ops = &clk_branch2_ops, 2035 }, 2036 }, 2037 }; 2038 2039 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2040 .halt_reg = 0xb01c, 2041 .halt_check = BRANCH_HALT, 2042 .hwcg_reg = 0xb01c, 2043 .hwcg_bit = 1, 2044 .clkr = { 2045 .enable_reg = 0xb01c, 2046 .enable_mask = BIT(0), 2047 .hw.init = &(struct clk_init_data){ 2048 .name = "gcc_qmip_camera_rt_ahb_clk", 2049 .ops = &clk_branch2_ops, 2050 }, 2051 }, 2052 }; 2053 2054 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2055 .halt_reg = 0xb020, 2056 .halt_check = BRANCH_HALT, 2057 .hwcg_reg = 0xb020, 2058 .hwcg_bit = 1, 2059 .clkr = { 2060 .enable_reg = 0xb020, 2061 .enable_mask = BIT(0), 2062 .hw.init = &(struct clk_init_data){ 2063 .name = "gcc_qmip_disp_ahb_clk", 2064 .ops = &clk_branch2_ops, 2065 }, 2066 }, 2067 }; 2068 2069 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = { 2070 .halt_reg = 0xb010, 2071 .halt_check = BRANCH_HALT, 2072 .hwcg_reg = 0xb010, 2073 .hwcg_bit = 1, 2074 .clkr = { 2075 .enable_reg = 0xb010, 2076 .enable_mask = BIT(0), 2077 .hw.init = &(struct clk_init_data){ 2078 .name = "gcc_qmip_video_cvp_ahb_clk", 2079 .ops = &clk_branch2_ops, 2080 }, 2081 }, 2082 }; 2083 2084 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2085 .halt_reg = 0xb014, 2086 .halt_check = BRANCH_HALT, 2087 .hwcg_reg = 0xb014, 2088 .hwcg_bit = 1, 2089 .clkr = { 2090 .enable_reg = 0xb014, 2091 .enable_mask = BIT(0), 2092 .hw.init = &(struct clk_init_data){ 2093 .name = "gcc_qmip_video_vcodec_ahb_clk", 2094 .ops = &clk_branch2_ops, 2095 }, 2096 }, 2097 }; 2098 2099 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = { 2100 .halt_reg = 0x4b000, 2101 .halt_check = BRANCH_HALT, 2102 .clkr = { 2103 .enable_reg = 0x4b000, 2104 .enable_mask = BIT(0), 2105 .hw.init = &(struct clk_init_data){ 2106 .name = "gcc_qspi_cnoc_periph_ahb_clk", 2107 .ops = &clk_branch2_ops, 2108 }, 2109 }, 2110 }; 2111 2112 static struct clk_branch gcc_qspi_core_clk = { 2113 .halt_reg = 0x4b004, 2114 .halt_check = BRANCH_HALT, 2115 .clkr = { 2116 .enable_reg = 0x4b004, 2117 .enable_mask = BIT(0), 2118 .hw.init = &(struct clk_init_data){ 2119 .name = "gcc_qspi_core_clk", 2120 .parent_hws = (const struct clk_hw *[]){ 2121 &gcc_qspi_core_clk_src.clkr.hw }, 2122 .num_parents = 1, 2123 .flags = CLK_SET_RATE_PARENT, 2124 .ops = &clk_branch2_ops, 2125 }, 2126 }, 2127 }; 2128 2129 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2130 .halt_reg = 0x17144, 2131 .halt_check = BRANCH_HALT_VOTED, 2132 .clkr = { 2133 .enable_reg = 0x5200c, 2134 .enable_mask = BIT(10), 2135 .hw.init = &(struct clk_init_data){ 2136 .name = "gcc_qupv3_wrap0_s0_clk", 2137 .parent_hws = (const struct clk_hw *[]){ 2138 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw }, 2139 .num_parents = 1, 2140 .flags = CLK_SET_RATE_PARENT, 2141 .ops = &clk_branch2_ops, 2142 }, 2143 }, 2144 }; 2145 2146 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2147 .halt_reg = 0x17274, 2148 .halt_check = BRANCH_HALT_VOTED, 2149 .clkr = { 2150 .enable_reg = 0x5200c, 2151 .enable_mask = BIT(11), 2152 .hw.init = &(struct clk_init_data){ 2153 .name = "gcc_qupv3_wrap0_s1_clk", 2154 .parent_hws = (const struct clk_hw *[]){ 2155 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw }, 2156 .num_parents = 1, 2157 .flags = CLK_SET_RATE_PARENT, 2158 .ops = &clk_branch2_ops, 2159 }, 2160 }, 2161 }; 2162 2163 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2164 .halt_reg = 0x173a4, 2165 .halt_check = BRANCH_HALT_VOTED, 2166 .clkr = { 2167 .enable_reg = 0x5200c, 2168 .enable_mask = BIT(12), 2169 .hw.init = &(struct clk_init_data){ 2170 .name = "gcc_qupv3_wrap0_s2_clk", 2171 .parent_hws = (const struct clk_hw *[]){ 2172 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw }, 2173 .num_parents = 1, 2174 .flags = CLK_SET_RATE_PARENT, 2175 .ops = &clk_branch2_ops, 2176 }, 2177 }, 2178 }; 2179 2180 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2181 .halt_reg = 0x174d4, 2182 .halt_check = BRANCH_HALT_VOTED, 2183 .clkr = { 2184 .enable_reg = 0x5200c, 2185 .enable_mask = BIT(13), 2186 .hw.init = &(struct clk_init_data){ 2187 .name = "gcc_qupv3_wrap0_s3_clk", 2188 .parent_hws = (const struct clk_hw *[]){ 2189 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw }, 2190 .num_parents = 1, 2191 .flags = CLK_SET_RATE_PARENT, 2192 .ops = &clk_branch2_ops, 2193 }, 2194 }, 2195 }; 2196 2197 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 2198 .halt_reg = 0x17604, 2199 .halt_check = BRANCH_HALT_VOTED, 2200 .clkr = { 2201 .enable_reg = 0x5200c, 2202 .enable_mask = BIT(14), 2203 .hw.init = &(struct clk_init_data){ 2204 .name = "gcc_qupv3_wrap0_s4_clk", 2205 .parent_hws = (const struct clk_hw *[]){ 2206 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw }, 2207 .num_parents = 1, 2208 .flags = CLK_SET_RATE_PARENT, 2209 .ops = &clk_branch2_ops, 2210 }, 2211 }, 2212 }; 2213 2214 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 2215 .halt_reg = 0x17734, 2216 .halt_check = BRANCH_HALT_VOTED, 2217 .clkr = { 2218 .enable_reg = 0x5200c, 2219 .enable_mask = BIT(15), 2220 .hw.init = &(struct clk_init_data){ 2221 .name = "gcc_qupv3_wrap0_s5_clk", 2222 .parent_hws = (const struct clk_hw *[]){ 2223 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw }, 2224 .num_parents = 1, 2225 .flags = CLK_SET_RATE_PARENT, 2226 .ops = &clk_branch2_ops, 2227 }, 2228 }, 2229 }; 2230 2231 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 2232 .halt_reg = 0x17864, 2233 .halt_check = BRANCH_HALT_VOTED, 2234 .clkr = { 2235 .enable_reg = 0x5200c, 2236 .enable_mask = BIT(16), 2237 .hw.init = &(struct clk_init_data){ 2238 .name = "gcc_qupv3_wrap0_s6_clk", 2239 .parent_hws = (const struct clk_hw *[]){ 2240 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw }, 2241 .num_parents = 1, 2242 .flags = CLK_SET_RATE_PARENT, 2243 .ops = &clk_branch2_ops, 2244 }, 2245 }, 2246 }; 2247 2248 static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 2249 .halt_reg = 0x17994, 2250 .halt_check = BRANCH_HALT_VOTED, 2251 .clkr = { 2252 .enable_reg = 0x5200c, 2253 .enable_mask = BIT(17), 2254 .hw.init = &(struct clk_init_data){ 2255 .name = "gcc_qupv3_wrap0_s7_clk", 2256 .parent_hws = (const struct clk_hw *[]){ 2257 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw }, 2258 .num_parents = 1, 2259 .flags = CLK_SET_RATE_PARENT, 2260 .ops = &clk_branch2_ops, 2261 }, 2262 }, 2263 }; 2264 2265 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 2266 .halt_reg = 0x18144, 2267 .halt_check = BRANCH_HALT_VOTED, 2268 .clkr = { 2269 .enable_reg = 0x5200c, 2270 .enable_mask = BIT(22), 2271 .hw.init = &(struct clk_init_data){ 2272 .name = "gcc_qupv3_wrap1_s0_clk", 2273 .parent_hws = (const struct clk_hw *[]){ 2274 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw }, 2275 .num_parents = 1, 2276 .flags = CLK_SET_RATE_PARENT, 2277 .ops = &clk_branch2_ops, 2278 }, 2279 }, 2280 }; 2281 2282 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 2283 .halt_reg = 0x18274, 2284 .halt_check = BRANCH_HALT_VOTED, 2285 .clkr = { 2286 .enable_reg = 0x5200c, 2287 .enable_mask = BIT(23), 2288 .hw.init = &(struct clk_init_data){ 2289 .name = "gcc_qupv3_wrap1_s1_clk", 2290 .parent_hws = (const struct clk_hw *[]){ 2291 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw }, 2292 .num_parents = 1, 2293 .flags = CLK_SET_RATE_PARENT, 2294 .ops = &clk_branch2_ops, 2295 }, 2296 }, 2297 }; 2298 2299 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 2300 .halt_reg = 0x183a4, 2301 .halt_check = BRANCH_HALT_VOTED, 2302 .clkr = { 2303 .enable_reg = 0x5200c, 2304 .enable_mask = BIT(24), 2305 .hw.init = &(struct clk_init_data){ 2306 .name = "gcc_qupv3_wrap1_s2_clk", 2307 .parent_hws = (const struct clk_hw *[]){ 2308 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw }, 2309 .num_parents = 1, 2310 .flags = CLK_SET_RATE_PARENT, 2311 .ops = &clk_branch2_ops, 2312 }, 2313 }, 2314 }; 2315 2316 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 2317 .halt_reg = 0x184d4, 2318 .halt_check = BRANCH_HALT_VOTED, 2319 .clkr = { 2320 .enable_reg = 0x5200c, 2321 .enable_mask = BIT(25), 2322 .hw.init = &(struct clk_init_data){ 2323 .name = "gcc_qupv3_wrap1_s3_clk", 2324 .parent_hws = (const struct clk_hw *[]){ 2325 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw }, 2326 .num_parents = 1, 2327 .flags = CLK_SET_RATE_PARENT, 2328 .ops = &clk_branch2_ops, 2329 }, 2330 }, 2331 }; 2332 2333 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 2334 .halt_reg = 0x18604, 2335 .halt_check = BRANCH_HALT_VOTED, 2336 .clkr = { 2337 .enable_reg = 0x5200c, 2338 .enable_mask = BIT(26), 2339 .hw.init = &(struct clk_init_data){ 2340 .name = "gcc_qupv3_wrap1_s4_clk", 2341 .parent_hws = (const struct clk_hw *[]){ 2342 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw }, 2343 .num_parents = 1, 2344 .flags = CLK_SET_RATE_PARENT, 2345 .ops = &clk_branch2_ops, 2346 }, 2347 }, 2348 }; 2349 2350 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 2351 .halt_reg = 0x18734, 2352 .halt_check = BRANCH_HALT_VOTED, 2353 .clkr = { 2354 .enable_reg = 0x5200c, 2355 .enable_mask = BIT(27), 2356 .hw.init = &(struct clk_init_data){ 2357 .name = "gcc_qupv3_wrap1_s5_clk", 2358 .parent_hws = (const struct clk_hw *[]){ 2359 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw }, 2360 .num_parents = 1, 2361 .flags = CLK_SET_RATE_PARENT, 2362 .ops = &clk_branch2_ops, 2363 }, 2364 }, 2365 }; 2366 2367 static struct clk_branch gcc_qupv3_wrap2_s0_clk = { 2368 .halt_reg = 0x1e144, 2369 .halt_check = BRANCH_HALT_VOTED, 2370 .clkr = { 2371 .enable_reg = 0x52014, 2372 .enable_mask = BIT(4), 2373 .hw.init = &(struct clk_init_data){ 2374 .name = "gcc_qupv3_wrap2_s0_clk", 2375 .parent_hws = (const struct clk_hw *[]){ 2376 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw }, 2377 .num_parents = 1, 2378 .flags = CLK_SET_RATE_PARENT, 2379 .ops = &clk_branch2_ops, 2380 }, 2381 }, 2382 }; 2383 2384 static struct clk_branch gcc_qupv3_wrap2_s1_clk = { 2385 .halt_reg = 0x1e274, 2386 .halt_check = BRANCH_HALT_VOTED, 2387 .clkr = { 2388 .enable_reg = 0x52014, 2389 .enable_mask = BIT(5), 2390 .hw.init = &(struct clk_init_data){ 2391 .name = "gcc_qupv3_wrap2_s1_clk", 2392 .parent_hws = (const struct clk_hw *[]){ 2393 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw }, 2394 .num_parents = 1, 2395 .flags = CLK_SET_RATE_PARENT, 2396 .ops = &clk_branch2_ops, 2397 }, 2398 }, 2399 }; 2400 2401 static struct clk_branch gcc_qupv3_wrap2_s2_clk = { 2402 .halt_reg = 0x1e3a4, 2403 .halt_check = BRANCH_HALT_VOTED, 2404 .clkr = { 2405 .enable_reg = 0x52014, 2406 .enable_mask = BIT(6), 2407 .hw.init = &(struct clk_init_data){ 2408 .name = "gcc_qupv3_wrap2_s2_clk", 2409 .parent_hws = (const struct clk_hw *[]){ 2410 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw }, 2411 .num_parents = 1, 2412 .flags = CLK_SET_RATE_PARENT, 2413 .ops = &clk_branch2_ops, 2414 }, 2415 }, 2416 }; 2417 2418 static struct clk_branch gcc_qupv3_wrap2_s3_clk = { 2419 .halt_reg = 0x1e4d4, 2420 .halt_check = BRANCH_HALT_VOTED, 2421 .clkr = { 2422 .enable_reg = 0x52014, 2423 .enable_mask = BIT(7), 2424 .hw.init = &(struct clk_init_data){ 2425 .name = "gcc_qupv3_wrap2_s3_clk", 2426 .parent_hws = (const struct clk_hw *[]){ 2427 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw }, 2428 .num_parents = 1, 2429 .flags = CLK_SET_RATE_PARENT, 2430 .ops = &clk_branch2_ops, 2431 }, 2432 }, 2433 }; 2434 2435 static struct clk_branch gcc_qupv3_wrap2_s4_clk = { 2436 .halt_reg = 0x1e604, 2437 .halt_check = BRANCH_HALT_VOTED, 2438 .clkr = { 2439 .enable_reg = 0x52014, 2440 .enable_mask = BIT(8), 2441 .hw.init = &(struct clk_init_data){ 2442 .name = "gcc_qupv3_wrap2_s4_clk", 2443 .parent_hws = (const struct clk_hw *[]){ 2444 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw }, 2445 .num_parents = 1, 2446 .flags = CLK_SET_RATE_PARENT, 2447 .ops = &clk_branch2_ops, 2448 }, 2449 }, 2450 }; 2451 2452 static struct clk_branch gcc_qupv3_wrap2_s5_clk = { 2453 .halt_reg = 0x1e734, 2454 .halt_check = BRANCH_HALT_VOTED, 2455 .clkr = { 2456 .enable_reg = 0x52014, 2457 .enable_mask = BIT(9), 2458 .hw.init = &(struct clk_init_data){ 2459 .name = "gcc_qupv3_wrap2_s5_clk", 2460 .parent_hws = (const struct clk_hw *[]){ 2461 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw }, 2462 .num_parents = 1, 2463 .flags = CLK_SET_RATE_PARENT, 2464 .ops = &clk_branch2_ops, 2465 }, 2466 }, 2467 }; 2468 2469 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2470 .halt_reg = 0x17004, 2471 .halt_check = BRANCH_HALT_VOTED, 2472 .clkr = { 2473 .enable_reg = 0x5200c, 2474 .enable_mask = BIT(6), 2475 .hw.init = &(struct clk_init_data){ 2476 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2477 .ops = &clk_branch2_ops, 2478 }, 2479 }, 2480 }; 2481 2482 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2483 .halt_reg = 0x17008, 2484 .halt_check = BRANCH_HALT_VOTED, 2485 .hwcg_reg = 0x17008, 2486 .hwcg_bit = 1, 2487 .clkr = { 2488 .enable_reg = 0x5200c, 2489 .enable_mask = BIT(7), 2490 .hw.init = &(struct clk_init_data){ 2491 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2492 .ops = &clk_branch2_ops, 2493 }, 2494 }, 2495 }; 2496 2497 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2498 .halt_reg = 0x18004, 2499 .halt_check = BRANCH_HALT_VOTED, 2500 .clkr = { 2501 .enable_reg = 0x5200c, 2502 .enable_mask = BIT(20), 2503 .hw.init = &(struct clk_init_data){ 2504 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2505 .ops = &clk_branch2_ops, 2506 }, 2507 }, 2508 }; 2509 2510 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2511 .halt_reg = 0x18008, 2512 .halt_check = BRANCH_HALT_VOTED, 2513 .hwcg_reg = 0x18008, 2514 .hwcg_bit = 1, 2515 .clkr = { 2516 .enable_reg = 0x5200c, 2517 .enable_mask = BIT(21), 2518 .hw.init = &(struct clk_init_data){ 2519 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2520 .ops = &clk_branch2_ops, 2521 }, 2522 }, 2523 }; 2524 2525 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = { 2526 .halt_reg = 0x1e004, 2527 .halt_check = BRANCH_HALT_VOTED, 2528 .clkr = { 2529 .enable_reg = 0x52014, 2530 .enable_mask = BIT(2), 2531 .hw.init = &(struct clk_init_data){ 2532 .name = "gcc_qupv3_wrap_2_m_ahb_clk", 2533 .ops = &clk_branch2_ops, 2534 }, 2535 }, 2536 }; 2537 2538 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = { 2539 .halt_reg = 0x1e008, 2540 .halt_check = BRANCH_HALT_VOTED, 2541 .hwcg_reg = 0x1e008, 2542 .hwcg_bit = 1, 2543 .clkr = { 2544 .enable_reg = 0x52014, 2545 .enable_mask = BIT(1), 2546 .hw.init = &(struct clk_init_data){ 2547 .name = "gcc_qupv3_wrap_2_s_ahb_clk", 2548 .ops = &clk_branch2_ops, 2549 }, 2550 }, 2551 }; 2552 2553 static struct clk_branch gcc_sdcc2_ahb_clk = { 2554 .halt_reg = 0x14008, 2555 .halt_check = BRANCH_HALT, 2556 .clkr = { 2557 .enable_reg = 0x14008, 2558 .enable_mask = BIT(0), 2559 .hw.init = &(struct clk_init_data){ 2560 .name = "gcc_sdcc2_ahb_clk", 2561 .ops = &clk_branch2_ops, 2562 }, 2563 }, 2564 }; 2565 2566 static struct clk_branch gcc_sdcc2_apps_clk = { 2567 .halt_reg = 0x14004, 2568 .halt_check = BRANCH_HALT, 2569 .clkr = { 2570 .enable_reg = 0x14004, 2571 .enable_mask = BIT(0), 2572 .hw.init = &(struct clk_init_data){ 2573 .name = "gcc_sdcc2_apps_clk", 2574 .parent_hws = (const struct clk_hw *[]){ 2575 &gcc_sdcc2_apps_clk_src.clkr.hw }, 2576 .num_parents = 1, 2577 .flags = CLK_SET_RATE_PARENT, 2578 .ops = &clk_branch2_ops, 2579 }, 2580 }, 2581 }; 2582 2583 static struct clk_branch gcc_sdcc4_ahb_clk = { 2584 .halt_reg = 0x16008, 2585 .halt_check = BRANCH_HALT, 2586 .clkr = { 2587 .enable_reg = 0x16008, 2588 .enable_mask = BIT(0), 2589 .hw.init = &(struct clk_init_data){ 2590 .name = "gcc_sdcc4_ahb_clk", 2591 .ops = &clk_branch2_ops, 2592 }, 2593 }, 2594 }; 2595 2596 static struct clk_branch gcc_sdcc4_apps_clk = { 2597 .halt_reg = 0x16004, 2598 .halt_check = BRANCH_HALT, 2599 .clkr = { 2600 .enable_reg = 0x16004, 2601 .enable_mask = BIT(0), 2602 .hw.init = &(struct clk_init_data){ 2603 .name = "gcc_sdcc4_apps_clk", 2604 .parent_hws = (const struct clk_hw *[]){ 2605 &gcc_sdcc4_apps_clk_src.clkr.hw }, 2606 .num_parents = 1, 2607 .flags = CLK_SET_RATE_PARENT, 2608 .ops = &clk_branch2_ops, 2609 }, 2610 }, 2611 }; 2612 2613 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 2614 .halt_reg = 0x4819c, 2615 .halt_check = BRANCH_HALT_VOTED, 2616 .clkr = { 2617 .enable_reg = 0x52004, 2618 .enable_mask = BIT(0), 2619 .hw.init = &(struct clk_init_data){ 2620 .name = "gcc_sys_noc_cpuss_ahb_clk", 2621 .parent_hws = (const struct clk_hw *[]){ 2622 &gcc_cpuss_ahb_clk_src.clkr.hw }, 2623 .num_parents = 1, 2624 /* required for cpuss */ 2625 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 2626 .ops = &clk_branch2_ops, 2627 }, 2628 }, 2629 }; 2630 2631 static struct clk_branch gcc_tsif_ahb_clk = { 2632 .halt_reg = 0x36004, 2633 .halt_check = BRANCH_HALT, 2634 .clkr = { 2635 .enable_reg = 0x36004, 2636 .enable_mask = BIT(0), 2637 .hw.init = &(struct clk_init_data){ 2638 .name = "gcc_tsif_ahb_clk", 2639 .ops = &clk_branch2_ops, 2640 }, 2641 }, 2642 }; 2643 2644 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2645 .halt_reg = 0x3600c, 2646 .halt_check = BRANCH_HALT, 2647 .clkr = { 2648 .enable_reg = 0x3600c, 2649 .enable_mask = BIT(0), 2650 .hw.init = &(struct clk_init_data){ 2651 .name = "gcc_tsif_inactivity_timers_clk", 2652 .ops = &clk_branch2_ops, 2653 }, 2654 }, 2655 }; 2656 2657 static struct clk_branch gcc_tsif_ref_clk = { 2658 .halt_reg = 0x36008, 2659 .halt_check = BRANCH_HALT, 2660 .clkr = { 2661 .enable_reg = 0x36008, 2662 .enable_mask = BIT(0), 2663 .hw.init = &(struct clk_init_data){ 2664 .name = "gcc_tsif_ref_clk", 2665 .parent_hws = (const struct clk_hw *[]){ 2666 &gcc_tsif_ref_clk_src.clkr.hw }, 2667 .num_parents = 1, 2668 .flags = CLK_SET_RATE_PARENT, 2669 .ops = &clk_branch2_ops, 2670 }, 2671 }, 2672 }; 2673 2674 static struct clk_branch gcc_ufs_card_ahb_clk = { 2675 .halt_reg = 0x75014, 2676 .halt_check = BRANCH_HALT, 2677 .hwcg_reg = 0x75014, 2678 .hwcg_bit = 1, 2679 .clkr = { 2680 .enable_reg = 0x75014, 2681 .enable_mask = BIT(0), 2682 .hw.init = &(struct clk_init_data){ 2683 .name = "gcc_ufs_card_ahb_clk", 2684 .ops = &clk_branch2_ops, 2685 }, 2686 }, 2687 }; 2688 2689 static struct clk_branch gcc_ufs_card_axi_clk = { 2690 .halt_reg = 0x75010, 2691 .halt_check = BRANCH_HALT, 2692 .hwcg_reg = 0x75010, 2693 .hwcg_bit = 1, 2694 .clkr = { 2695 .enable_reg = 0x75010, 2696 .enable_mask = BIT(0), 2697 .hw.init = &(struct clk_init_data){ 2698 .name = "gcc_ufs_card_axi_clk", 2699 .parent_hws = (const struct clk_hw *[]){ 2700 &gcc_ufs_card_axi_clk_src.clkr.hw }, 2701 .num_parents = 1, 2702 .flags = CLK_SET_RATE_PARENT, 2703 .ops = &clk_branch2_ops, 2704 }, 2705 }, 2706 }; 2707 2708 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = { 2709 .halt_reg = 0x75010, 2710 .halt_check = BRANCH_HALT, 2711 .hwcg_reg = 0x75010, 2712 .hwcg_bit = 1, 2713 .clkr = { 2714 .enable_reg = 0x75010, 2715 .enable_mask = BIT(1), 2716 .hw.init = &(struct clk_init_data){ 2717 .name = "gcc_ufs_card_axi_hw_ctl_clk", 2718 .parent_hws = (const struct clk_hw *[]){ 2719 &gcc_ufs_card_axi_clk.clkr.hw }, 2720 .num_parents = 1, 2721 .flags = CLK_SET_RATE_PARENT, 2722 .ops = &clk_branch_simple_ops, 2723 }, 2724 }, 2725 }; 2726 2727 static struct clk_branch gcc_ufs_card_clkref_clk = { 2728 .halt_reg = 0x8c004, 2729 .halt_check = BRANCH_HALT, 2730 .clkr = { 2731 .enable_reg = 0x8c004, 2732 .enable_mask = BIT(0), 2733 .hw.init = &(struct clk_init_data){ 2734 .name = "gcc_ufs_card_clkref_clk", 2735 .ops = &clk_branch2_ops, 2736 }, 2737 }, 2738 }; 2739 2740 static struct clk_branch gcc_ufs_card_ice_core_clk = { 2741 .halt_reg = 0x7505c, 2742 .halt_check = BRANCH_HALT, 2743 .hwcg_reg = 0x7505c, 2744 .hwcg_bit = 1, 2745 .clkr = { 2746 .enable_reg = 0x7505c, 2747 .enable_mask = BIT(0), 2748 .hw.init = &(struct clk_init_data){ 2749 .name = "gcc_ufs_card_ice_core_clk", 2750 .parent_hws = (const struct clk_hw *[]){ 2751 &gcc_ufs_card_ice_core_clk_src.clkr.hw }, 2752 .num_parents = 1, 2753 .flags = CLK_SET_RATE_PARENT, 2754 .ops = &clk_branch2_ops, 2755 }, 2756 }, 2757 }; 2758 2759 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = { 2760 .halt_reg = 0x7505c, 2761 .halt_check = BRANCH_HALT, 2762 .hwcg_reg = 0x7505c, 2763 .hwcg_bit = 1, 2764 .clkr = { 2765 .enable_reg = 0x7505c, 2766 .enable_mask = BIT(1), 2767 .hw.init = &(struct clk_init_data){ 2768 .name = "gcc_ufs_card_ice_core_hw_ctl_clk", 2769 .parent_hws = (const struct clk_hw *[]){ 2770 &gcc_ufs_card_ice_core_clk.clkr.hw }, 2771 .num_parents = 1, 2772 .flags = CLK_SET_RATE_PARENT, 2773 .ops = &clk_branch_simple_ops, 2774 }, 2775 }, 2776 }; 2777 2778 static struct clk_branch gcc_ufs_card_phy_aux_clk = { 2779 .halt_reg = 0x75090, 2780 .halt_check = BRANCH_HALT, 2781 .hwcg_reg = 0x75090, 2782 .hwcg_bit = 1, 2783 .clkr = { 2784 .enable_reg = 0x75090, 2785 .enable_mask = BIT(0), 2786 .hw.init = &(struct clk_init_data){ 2787 .name = "gcc_ufs_card_phy_aux_clk", 2788 .parent_hws = (const struct clk_hw *[]){ 2789 &gcc_ufs_card_phy_aux_clk_src.clkr.hw }, 2790 .num_parents = 1, 2791 .flags = CLK_SET_RATE_PARENT, 2792 .ops = &clk_branch2_ops, 2793 }, 2794 }, 2795 }; 2796 2797 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = { 2798 .halt_reg = 0x75090, 2799 .halt_check = BRANCH_HALT, 2800 .hwcg_reg = 0x75090, 2801 .hwcg_bit = 1, 2802 .clkr = { 2803 .enable_reg = 0x75090, 2804 .enable_mask = BIT(1), 2805 .hw.init = &(struct clk_init_data){ 2806 .name = "gcc_ufs_card_phy_aux_hw_ctl_clk", 2807 .parent_hws = (const struct clk_hw *[]){ 2808 &gcc_ufs_card_phy_aux_clk.clkr.hw }, 2809 .num_parents = 1, 2810 .flags = CLK_SET_RATE_PARENT, 2811 .ops = &clk_branch_simple_ops, 2812 }, 2813 }, 2814 }; 2815 2816 static struct clk_branch gcc_ufs_card_unipro_core_clk = { 2817 .halt_reg = 0x75058, 2818 .halt_check = BRANCH_HALT, 2819 .hwcg_reg = 0x75058, 2820 .hwcg_bit = 1, 2821 .clkr = { 2822 .enable_reg = 0x75058, 2823 .enable_mask = BIT(0), 2824 .hw.init = &(struct clk_init_data){ 2825 .name = "gcc_ufs_card_unipro_core_clk", 2826 .parent_hws = (const struct clk_hw *[]){ 2827 &gcc_ufs_card_unipro_core_clk_src.clkr.hw }, 2828 .num_parents = 1, 2829 .flags = CLK_SET_RATE_PARENT, 2830 .ops = &clk_branch2_ops, 2831 }, 2832 }, 2833 }; 2834 2835 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = { 2836 .halt_reg = 0x75058, 2837 .halt_check = BRANCH_HALT, 2838 .hwcg_reg = 0x75058, 2839 .hwcg_bit = 1, 2840 .clkr = { 2841 .enable_reg = 0x75058, 2842 .enable_mask = BIT(1), 2843 .hw.init = &(struct clk_init_data){ 2844 .name = "gcc_ufs_card_unipro_core_hw_ctl_clk", 2845 .parent_hws = (const struct clk_hw *[]){ 2846 &gcc_ufs_card_unipro_core_clk.clkr.hw }, 2847 .num_parents = 1, 2848 .flags = CLK_SET_RATE_PARENT, 2849 .ops = &clk_branch_simple_ops, 2850 }, 2851 }, 2852 }; 2853 2854 static struct clk_branch gcc_ufs_mem_clkref_clk = { 2855 .halt_reg = 0x8c000, 2856 .halt_check = BRANCH_HALT, 2857 .clkr = { 2858 .enable_reg = 0x8c000, 2859 .enable_mask = BIT(0), 2860 .hw.init = &(struct clk_init_data){ 2861 .name = "gcc_ufs_mem_clkref_clk", 2862 .ops = &clk_branch2_ops, 2863 }, 2864 }, 2865 }; 2866 2867 static struct clk_branch gcc_ufs_phy_ahb_clk = { 2868 .halt_reg = 0x77014, 2869 .halt_check = BRANCH_HALT, 2870 .hwcg_reg = 0x77014, 2871 .hwcg_bit = 1, 2872 .clkr = { 2873 .enable_reg = 0x77014, 2874 .enable_mask = BIT(0), 2875 .hw.init = &(struct clk_init_data){ 2876 .name = "gcc_ufs_phy_ahb_clk", 2877 .ops = &clk_branch2_ops, 2878 }, 2879 }, 2880 }; 2881 2882 static struct clk_branch gcc_ufs_phy_axi_clk = { 2883 .halt_reg = 0x77010, 2884 .halt_check = BRANCH_HALT, 2885 .hwcg_reg = 0x77010, 2886 .hwcg_bit = 1, 2887 .clkr = { 2888 .enable_reg = 0x77010, 2889 .enable_mask = BIT(0), 2890 .hw.init = &(struct clk_init_data){ 2891 .name = "gcc_ufs_phy_axi_clk", 2892 .parent_hws = (const struct clk_hw *[]){ 2893 &gcc_ufs_phy_axi_clk_src.clkr.hw }, 2894 .num_parents = 1, 2895 .flags = CLK_SET_RATE_PARENT, 2896 .ops = &clk_branch2_ops, 2897 }, 2898 }, 2899 }; 2900 2901 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 2902 .halt_reg = 0x77010, 2903 .halt_check = BRANCH_HALT, 2904 .hwcg_reg = 0x77010, 2905 .hwcg_bit = 1, 2906 .clkr = { 2907 .enable_reg = 0x77010, 2908 .enable_mask = BIT(1), 2909 .hw.init = &(struct clk_init_data){ 2910 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 2911 .parent_hws = (const struct clk_hw *[]){ 2912 &gcc_ufs_phy_axi_clk.clkr.hw }, 2913 .num_parents = 1, 2914 .flags = CLK_SET_RATE_PARENT, 2915 .ops = &clk_branch_simple_ops, 2916 }, 2917 }, 2918 }; 2919 2920 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 2921 .halt_reg = 0x7705c, 2922 .halt_check = BRANCH_HALT, 2923 .hwcg_reg = 0x7705c, 2924 .hwcg_bit = 1, 2925 .clkr = { 2926 .enable_reg = 0x7705c, 2927 .enable_mask = BIT(0), 2928 .hw.init = &(struct clk_init_data){ 2929 .name = "gcc_ufs_phy_ice_core_clk", 2930 .parent_hws = (const struct clk_hw *[]){ 2931 &gcc_ufs_phy_ice_core_clk_src.clkr.hw }, 2932 .num_parents = 1, 2933 .flags = CLK_SET_RATE_PARENT, 2934 .ops = &clk_branch2_ops, 2935 }, 2936 }, 2937 }; 2938 2939 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 2940 .halt_reg = 0x7705c, 2941 .halt_check = BRANCH_HALT, 2942 .hwcg_reg = 0x7705c, 2943 .hwcg_bit = 1, 2944 .clkr = { 2945 .enable_reg = 0x7705c, 2946 .enable_mask = BIT(1), 2947 .hw.init = &(struct clk_init_data){ 2948 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 2949 .parent_hws = (const struct clk_hw *[]){ 2950 &gcc_ufs_phy_ice_core_clk.clkr.hw }, 2951 .num_parents = 1, 2952 .flags = CLK_SET_RATE_PARENT, 2953 .ops = &clk_branch_simple_ops, 2954 }, 2955 }, 2956 }; 2957 2958 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2959 .halt_reg = 0x77090, 2960 .halt_check = BRANCH_HALT, 2961 .hwcg_reg = 0x77090, 2962 .hwcg_bit = 1, 2963 .clkr = { 2964 .enable_reg = 0x77090, 2965 .enable_mask = BIT(0), 2966 .hw.init = &(struct clk_init_data){ 2967 .name = "gcc_ufs_phy_phy_aux_clk", 2968 .parent_hws = (const struct clk_hw *[]){ 2969 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw }, 2970 .num_parents = 1, 2971 .flags = CLK_SET_RATE_PARENT, 2972 .ops = &clk_branch2_ops, 2973 }, 2974 }, 2975 }; 2976 2977 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 2978 .halt_reg = 0x77090, 2979 .halt_check = BRANCH_HALT, 2980 .hwcg_reg = 0x77090, 2981 .hwcg_bit = 1, 2982 .clkr = { 2983 .enable_reg = 0x77090, 2984 .enable_mask = BIT(1), 2985 .hw.init = &(struct clk_init_data){ 2986 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 2987 .parent_hws = (const struct clk_hw *[]){ 2988 &gcc_ufs_phy_phy_aux_clk.clkr.hw }, 2989 .num_parents = 1, 2990 .flags = CLK_SET_RATE_PARENT, 2991 .ops = &clk_branch_simple_ops, 2992 }, 2993 }, 2994 }; 2995 2996 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2997 .halt_reg = 0x77058, 2998 .halt_check = BRANCH_HALT, 2999 .hwcg_reg = 0x77058, 3000 .hwcg_bit = 1, 3001 .clkr = { 3002 .enable_reg = 0x77058, 3003 .enable_mask = BIT(0), 3004 .hw.init = &(struct clk_init_data){ 3005 .name = "gcc_ufs_phy_unipro_core_clk", 3006 .parent_hws = (const struct clk_hw *[]){ 3007 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw }, 3008 .num_parents = 1, 3009 .flags = CLK_SET_RATE_PARENT, 3010 .ops = &clk_branch2_ops, 3011 }, 3012 }, 3013 }; 3014 3015 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 3016 .halt_reg = 0x77058, 3017 .halt_check = BRANCH_HALT, 3018 .hwcg_reg = 0x77058, 3019 .hwcg_bit = 1, 3020 .clkr = { 3021 .enable_reg = 0x77058, 3022 .enable_mask = BIT(1), 3023 .hw.init = &(struct clk_init_data){ 3024 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 3025 .parent_hws = (const struct clk_hw *[]){ 3026 &gcc_ufs_phy_unipro_core_clk.clkr.hw }, 3027 .num_parents = 1, 3028 .flags = CLK_SET_RATE_PARENT, 3029 .ops = &clk_branch_simple_ops, 3030 }, 3031 }, 3032 }; 3033 3034 static struct clk_branch gcc_usb30_prim_master_clk = { 3035 .halt_reg = 0xf010, 3036 .halt_check = BRANCH_HALT, 3037 .clkr = { 3038 .enable_reg = 0xf010, 3039 .enable_mask = BIT(0), 3040 .hw.init = &(struct clk_init_data){ 3041 .name = "gcc_usb30_prim_master_clk", 3042 .parent_hws = (const struct clk_hw *[]){ 3043 &gcc_usb30_prim_master_clk_src.clkr.hw }, 3044 .num_parents = 1, 3045 .flags = CLK_SET_RATE_PARENT, 3046 .ops = &clk_branch2_ops, 3047 }, 3048 }, 3049 }; 3050 3051 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3052 .halt_reg = 0xf018, 3053 .halt_check = BRANCH_HALT, 3054 .clkr = { 3055 .enable_reg = 0xf018, 3056 .enable_mask = BIT(0), 3057 .hw.init = &(struct clk_init_data){ 3058 .name = "gcc_usb30_prim_mock_utmi_clk", 3059 .parent_hws = (const struct clk_hw *[]){ 3060 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw }, 3061 .num_parents = 1, 3062 .flags = CLK_SET_RATE_PARENT, 3063 .ops = &clk_branch2_ops, 3064 }, 3065 }, 3066 }; 3067 3068 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3069 .halt_reg = 0xf014, 3070 .halt_check = BRANCH_HALT, 3071 .clkr = { 3072 .enable_reg = 0xf014, 3073 .enable_mask = BIT(0), 3074 .hw.init = &(struct clk_init_data){ 3075 .name = "gcc_usb30_prim_sleep_clk", 3076 .ops = &clk_branch2_ops, 3077 }, 3078 }, 3079 }; 3080 3081 static struct clk_branch gcc_usb30_sec_master_clk = { 3082 .halt_reg = 0x10010, 3083 .halt_check = BRANCH_HALT, 3084 .clkr = { 3085 .enable_reg = 0x10010, 3086 .enable_mask = BIT(0), 3087 .hw.init = &(struct clk_init_data){ 3088 .name = "gcc_usb30_sec_master_clk", 3089 .parent_hws = (const struct clk_hw *[]){ 3090 &gcc_usb30_sec_master_clk_src.clkr.hw }, 3091 .num_parents = 1, 3092 .flags = CLK_SET_RATE_PARENT, 3093 .ops = &clk_branch2_ops, 3094 }, 3095 }, 3096 }; 3097 3098 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = { 3099 .halt_reg = 0x10018, 3100 .halt_check = BRANCH_HALT, 3101 .clkr = { 3102 .enable_reg = 0x10018, 3103 .enable_mask = BIT(0), 3104 .hw.init = &(struct clk_init_data){ 3105 .name = "gcc_usb30_sec_mock_utmi_clk", 3106 .parent_hws = (const struct clk_hw *[]){ 3107 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw }, 3108 .num_parents = 1, 3109 .flags = CLK_SET_RATE_PARENT, 3110 .ops = &clk_branch2_ops, 3111 }, 3112 }, 3113 }; 3114 3115 static struct clk_branch gcc_usb30_sec_sleep_clk = { 3116 .halt_reg = 0x10014, 3117 .halt_check = BRANCH_HALT, 3118 .clkr = { 3119 .enable_reg = 0x10014, 3120 .enable_mask = BIT(0), 3121 .hw.init = &(struct clk_init_data){ 3122 .name = "gcc_usb30_sec_sleep_clk", 3123 .ops = &clk_branch2_ops, 3124 }, 3125 }, 3126 }; 3127 3128 static struct clk_branch gcc_usb3_prim_clkref_clk = { 3129 .halt_reg = 0x8c008, 3130 .halt_check = BRANCH_HALT, 3131 .clkr = { 3132 .enable_reg = 0x8c008, 3133 .enable_mask = BIT(0), 3134 .hw.init = &(struct clk_init_data){ 3135 .name = "gcc_usb3_prim_clkref_clk", 3136 .ops = &clk_branch2_ops, 3137 }, 3138 }, 3139 }; 3140 3141 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 3142 .halt_reg = 0xf050, 3143 .halt_check = BRANCH_HALT, 3144 .clkr = { 3145 .enable_reg = 0xf050, 3146 .enable_mask = BIT(0), 3147 .hw.init = &(struct clk_init_data){ 3148 .name = "gcc_usb3_prim_phy_aux_clk", 3149 .parent_hws = (const struct clk_hw *[]){ 3150 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw }, 3151 .num_parents = 1, 3152 .flags = CLK_SET_RATE_PARENT, 3153 .ops = &clk_branch2_ops, 3154 }, 3155 }, 3156 }; 3157 3158 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3159 .halt_reg = 0xf054, 3160 .halt_check = BRANCH_HALT, 3161 .clkr = { 3162 .enable_reg = 0xf054, 3163 .enable_mask = BIT(0), 3164 .hw.init = &(struct clk_init_data){ 3165 .name = "gcc_usb3_prim_phy_com_aux_clk", 3166 .parent_hws = (const struct clk_hw *[]){ 3167 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw }, 3168 .num_parents = 1, 3169 .flags = CLK_SET_RATE_PARENT, 3170 .ops = &clk_branch2_ops, 3171 }, 3172 }, 3173 }; 3174 3175 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3176 .halt_check = BRANCH_HALT_SKIP, 3177 .clkr = { 3178 .enable_reg = 0xf058, 3179 .enable_mask = BIT(0), 3180 .hw.init = &(struct clk_init_data){ 3181 .name = "gcc_usb3_prim_phy_pipe_clk", 3182 .ops = &clk_branch2_ops, 3183 }, 3184 }, 3185 }; 3186 3187 static struct clk_branch gcc_usb3_sec_clkref_clk = { 3188 .halt_reg = 0x8c028, 3189 .halt_check = BRANCH_HALT, 3190 .clkr = { 3191 .enable_reg = 0x8c028, 3192 .enable_mask = BIT(0), 3193 .hw.init = &(struct clk_init_data){ 3194 .name = "gcc_usb3_sec_clkref_clk", 3195 .ops = &clk_branch2_ops, 3196 }, 3197 }, 3198 }; 3199 3200 static struct clk_branch gcc_usb3_sec_phy_aux_clk = { 3201 .halt_reg = 0x10050, 3202 .halt_check = BRANCH_HALT, 3203 .clkr = { 3204 .enable_reg = 0x10050, 3205 .enable_mask = BIT(0), 3206 .hw.init = &(struct clk_init_data){ 3207 .name = "gcc_usb3_sec_phy_aux_clk", 3208 .parent_hws = (const struct clk_hw *[]){ 3209 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw }, 3210 .num_parents = 1, 3211 .flags = CLK_SET_RATE_PARENT, 3212 .ops = &clk_branch2_ops, 3213 }, 3214 }, 3215 }; 3216 3217 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = { 3218 .halt_reg = 0x10054, 3219 .halt_check = BRANCH_HALT, 3220 .clkr = { 3221 .enable_reg = 0x10054, 3222 .enable_mask = BIT(0), 3223 .hw.init = &(struct clk_init_data){ 3224 .name = "gcc_usb3_sec_phy_com_aux_clk", 3225 .parent_hws = (const struct clk_hw *[]){ 3226 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw }, 3227 .num_parents = 1, 3228 .flags = CLK_SET_RATE_PARENT, 3229 .ops = &clk_branch2_ops, 3230 }, 3231 }, 3232 }; 3233 3234 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 3235 .halt_check = BRANCH_HALT_SKIP, 3236 .clkr = { 3237 .enable_reg = 0x10058, 3238 .enable_mask = BIT(0), 3239 .hw.init = &(struct clk_init_data){ 3240 .name = "gcc_usb3_sec_phy_pipe_clk", 3241 .ops = &clk_branch2_ops, 3242 }, 3243 }, 3244 }; 3245 3246 /* 3247 * Clock ON depends on external parent 'config noc', so cant poll 3248 * delay and also mark as crtitical for video boot 3249 */ 3250 static struct clk_branch gcc_video_ahb_clk = { 3251 .halt_reg = 0xb004, 3252 .halt_check = BRANCH_HALT_DELAY, 3253 .hwcg_reg = 0xb004, 3254 .hwcg_bit = 1, 3255 .clkr = { 3256 .enable_reg = 0xb004, 3257 .enable_mask = BIT(0), 3258 .hw.init = &(struct clk_init_data){ 3259 .name = "gcc_video_ahb_clk", 3260 .flags = CLK_IS_CRITICAL, 3261 .ops = &clk_branch2_ops, 3262 }, 3263 }, 3264 }; 3265 3266 static struct clk_branch gcc_video_axi0_clk = { 3267 .halt_reg = 0xb024, 3268 .halt_check = BRANCH_HALT, 3269 .clkr = { 3270 .enable_reg = 0xb024, 3271 .enable_mask = BIT(0), 3272 .hw.init = &(struct clk_init_data){ 3273 .name = "gcc_video_axi0_clk", 3274 .ops = &clk_branch2_ops, 3275 }, 3276 }, 3277 }; 3278 3279 static struct clk_branch gcc_video_axi1_clk = { 3280 .halt_reg = 0xb028, 3281 .halt_check = BRANCH_HALT, 3282 .clkr = { 3283 .enable_reg = 0xb028, 3284 .enable_mask = BIT(0), 3285 .hw.init = &(struct clk_init_data){ 3286 .name = "gcc_video_axi1_clk", 3287 .ops = &clk_branch2_ops, 3288 }, 3289 }, 3290 }; 3291 3292 static struct clk_branch gcc_video_axic_clk = { 3293 .halt_reg = 0xb02c, 3294 .halt_check = BRANCH_HALT, 3295 .clkr = { 3296 .enable_reg = 0xb02c, 3297 .enable_mask = BIT(0), 3298 .hw.init = &(struct clk_init_data){ 3299 .name = "gcc_video_axic_clk", 3300 .ops = &clk_branch2_ops, 3301 }, 3302 }, 3303 }; 3304 3305 /* XO critical input to video, so no need to poll */ 3306 static struct clk_branch gcc_video_xo_clk = { 3307 .halt_reg = 0xb040, 3308 .halt_check = BRANCH_HALT_DELAY, 3309 .clkr = { 3310 .enable_reg = 0xb040, 3311 .enable_mask = BIT(0), 3312 .hw.init = &(struct clk_init_data){ 3313 .name = "gcc_video_xo_clk", 3314 .flags = CLK_IS_CRITICAL, 3315 .ops = &clk_branch2_ops, 3316 }, 3317 }, 3318 }; 3319 3320 static struct gdsc usb30_prim_gdsc = { 3321 .gdscr = 0xf004, 3322 .pd = { 3323 .name = "usb30_prim_gdsc", 3324 }, 3325 .pwrsts = PWRSTS_OFF_ON, 3326 .flags = POLL_CFG_GDSCR, 3327 }; 3328 3329 static struct gdsc usb30_sec_gdsc = { 3330 .gdscr = 0x10004, 3331 .pd = { 3332 .name = "usb30_sec_gdsc", 3333 }, 3334 .pwrsts = PWRSTS_OFF_ON, 3335 .flags = POLL_CFG_GDSCR, 3336 }; 3337 3338 static struct clk_regmap *gcc_sm8150_clocks[] = { 3339 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr, 3340 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr, 3341 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = 3342 &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr, 3343 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 3344 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 3345 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 3346 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 3347 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr, 3348 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3349 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 3350 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 3351 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 3352 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 3353 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3354 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr, 3355 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 3356 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 3357 [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr, 3358 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 3359 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 3360 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 3361 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 3362 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3363 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr, 3364 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 3365 [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr, 3366 [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr, 3367 [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr, 3368 [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr, 3369 [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr, 3370 [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr, 3371 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3372 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3373 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3374 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3375 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3376 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3377 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 3378 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr, 3379 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3380 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3381 [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr, 3382 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 3383 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 3384 [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr, 3385 [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr, 3386 [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr, 3387 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3388 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 3389 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3390 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr, 3391 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3392 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3393 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3394 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 3395 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3396 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr, 3397 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3398 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr, 3399 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3400 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3401 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3402 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr, 3403 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 3404 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr, 3405 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3406 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3407 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3408 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3409 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3410 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3411 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3412 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3413 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr, 3414 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3415 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr, 3416 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr, 3417 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr, 3418 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 3419 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 3420 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 3421 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 3422 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 3423 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 3424 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 3425 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 3426 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 3427 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 3428 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 3429 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 3430 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 3431 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 3432 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 3433 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 3434 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 3435 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 3436 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 3437 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 3438 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 3439 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 3440 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 3441 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 3442 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 3443 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 3444 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 3445 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 3446 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr, 3447 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr, 3448 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr, 3449 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr, 3450 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr, 3451 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr, 3452 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr, 3453 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr, 3454 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr, 3455 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr, 3456 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr, 3457 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr, 3458 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 3459 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 3460 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 3461 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 3462 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr, 3463 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr, 3464 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3465 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3466 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3467 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3468 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3469 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 3470 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 3471 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3472 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3473 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3474 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr, 3475 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr, 3476 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr, 3477 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr, 3478 [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr, 3479 [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr, 3480 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr, 3481 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr, 3482 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = 3483 &gcc_ufs_card_ice_core_hw_ctl_clk.clkr, 3484 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr, 3485 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr, 3486 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = 3487 &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr, 3488 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr, 3489 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = 3490 &gcc_ufs_card_unipro_core_clk_src.clkr, 3491 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = 3492 &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr, 3493 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 3494 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3495 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3496 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3497 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 3498 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3499 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3500 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 3501 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 3502 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3503 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3504 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 3505 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3506 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 3507 &gcc_ufs_phy_unipro_core_clk_src.clkr, 3508 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 3509 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 3510 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3511 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3512 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3513 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 3514 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3515 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3516 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr, 3517 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr, 3518 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr, 3519 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = 3520 &gcc_usb30_sec_mock_utmi_clk_src.clkr, 3521 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr, 3522 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 3523 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 3524 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3525 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3526 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3527 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr, 3528 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr, 3529 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr, 3530 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr, 3531 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr, 3532 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 3533 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3534 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr, 3535 [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr, 3536 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 3537 [GPLL0] = &gpll0.clkr, 3538 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 3539 [GPLL7] = &gpll7.clkr, 3540 [GPLL9] = &gpll9.clkr, 3541 }; 3542 3543 static const struct qcom_reset_map gcc_sm8150_resets[] = { 3544 [GCC_EMAC_BCR] = { 0x6000 }, 3545 [GCC_GPU_BCR] = { 0x71000 }, 3546 [GCC_MMSS_BCR] = { 0xb000 }, 3547 [GCC_NPU_BCR] = { 0x4d000 }, 3548 [GCC_PCIE_0_BCR] = { 0x6b000 }, 3549 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3550 [GCC_PCIE_1_BCR] = { 0x8d000 }, 3551 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c }, 3552 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3553 [GCC_PDM_BCR] = { 0x33000 }, 3554 [GCC_PRNG_BCR] = { 0x34000 }, 3555 [GCC_QSPI_BCR] = { 0x24008 }, 3556 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 }, 3557 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 }, 3558 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 }, 3559 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 3560 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 3561 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 }, 3562 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 }, 3563 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c }, 3564 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 }, 3565 [GCC_SDCC2_BCR] = { 0x14000 }, 3566 [GCC_SDCC4_BCR] = { 0x16000 }, 3567 [GCC_TSIF_BCR] = { 0x36000 }, 3568 [GCC_UFS_CARD_BCR] = { 0x75000 }, 3569 [GCC_UFS_PHY_BCR] = { 0x77000 }, 3570 [GCC_USB30_PRIM_BCR] = { 0xf000 }, 3571 [GCC_USB30_SEC_BCR] = { 0x10000 }, 3572 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 3573 }; 3574 3575 static struct gdsc *gcc_sm8150_gdscs[] = { 3576 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 3577 [USB30_SEC_GDSC] = &usb30_sec_gdsc, 3578 }; 3579 3580 static const struct regmap_config gcc_sm8150_regmap_config = { 3581 .reg_bits = 32, 3582 .reg_stride = 4, 3583 .val_bits = 32, 3584 .max_register = 0x9c040, 3585 .fast_io = true, 3586 }; 3587 3588 static const struct qcom_cc_desc gcc_sm8150_desc = { 3589 .config = &gcc_sm8150_regmap_config, 3590 .clks = gcc_sm8150_clocks, 3591 .num_clks = ARRAY_SIZE(gcc_sm8150_clocks), 3592 .resets = gcc_sm8150_resets, 3593 .num_resets = ARRAY_SIZE(gcc_sm8150_resets), 3594 .gdscs = gcc_sm8150_gdscs, 3595 .num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs), 3596 }; 3597 3598 static const struct of_device_id gcc_sm8150_match_table[] = { 3599 { .compatible = "qcom,gcc-sm8150" }, 3600 { } 3601 }; 3602 MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table); 3603 3604 static int gcc_sm8150_probe(struct platform_device *pdev) 3605 { 3606 struct regmap *regmap; 3607 3608 regmap = qcom_cc_map(pdev, &gcc_sm8150_desc); 3609 if (IS_ERR(regmap)) 3610 return PTR_ERR(regmap); 3611 3612 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 3613 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3); 3614 regmap_update_bits(regmap, 0x71028, 0x3, 0x3); 3615 3616 return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap); 3617 } 3618 3619 static struct platform_driver gcc_sm8150_driver = { 3620 .probe = gcc_sm8150_probe, 3621 .driver = { 3622 .name = "gcc-sm8150", 3623 .of_match_table = gcc_sm8150_match_table, 3624 }, 3625 }; 3626 3627 static int __init gcc_sm8150_init(void) 3628 { 3629 return platform_driver_register(&gcc_sm8150_driver); 3630 } 3631 subsys_initcall(gcc_sm8150_init); 3632 3633 static void __exit gcc_sm8150_exit(void) 3634 { 3635 platform_driver_unregister(&gcc_sm8150_driver); 3636 } 3637 module_exit(gcc_sm8150_exit); 3638 3639 MODULE_DESCRIPTION("QTI GCC SM8150 Driver"); 3640 MODULE_LICENSE("GPL v2"); 3641