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