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