1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org> 5 */ 6 7 #include <linux/clk-provider.h> 8 #include <linux/module.h> 9 #include <linux/platform_device.h> 10 #include <linux/regmap.h> 11 12 #include <dt-bindings/clock/qcom,gcc-sm6350.h> 13 14 #include "clk-alpha-pll.h" 15 #include "clk-branch.h" 16 #include "clk-rcg.h" 17 #include "clk-regmap.h" 18 #include "clk-regmap-divider.h" 19 #include "clk-regmap-mux.h" 20 #include "common.h" 21 #include "gdsc.h" 22 #include "reset.h" 23 24 enum { 25 P_BI_TCXO, 26 P_GPLL0_OUT_EVEN, 27 P_GPLL0_OUT_MAIN, 28 P_GPLL0_OUT_ODD, 29 P_GPLL6_OUT_EVEN, 30 P_GPLL7_OUT_MAIN, 31 P_SLEEP_CLK, 32 }; 33 34 static struct clk_alpha_pll gpll0 = { 35 .offset = 0x0, 36 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 37 .clkr = { 38 .enable_reg = 0x52010, 39 .enable_mask = BIT(0), 40 .hw.init = &(struct clk_init_data){ 41 .name = "gpll0", 42 .parent_data = &(const struct clk_parent_data){ 43 .fw_name = "bi_tcxo", 44 }, 45 .num_parents = 1, 46 .ops = &clk_alpha_pll_fixed_fabia_ops, 47 }, 48 }, 49 }; 50 51 static const struct clk_div_table post_div_table_gpll0_out_even[] = { 52 { 0x1, 2 }, 53 { } 54 }; 55 56 static struct clk_alpha_pll_postdiv gpll0_out_even = { 57 .offset = 0x0, 58 .post_div_shift = 8, 59 .post_div_table = post_div_table_gpll0_out_even, 60 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even), 61 .width = 4, 62 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 63 .clkr.hw.init = &(struct clk_init_data){ 64 .name = "gpll0_out_even", 65 .parent_hws = (const struct clk_hw*[]){ 66 &gpll0.clkr.hw, 67 }, 68 .num_parents = 1, 69 .ops = &clk_alpha_pll_postdiv_fabia_ops, 70 }, 71 }; 72 73 static const struct clk_div_table post_div_table_gpll0_out_odd[] = { 74 { 0x3, 3 }, 75 { } 76 }; 77 78 static struct clk_alpha_pll_postdiv gpll0_out_odd = { 79 .offset = 0x0, 80 .post_div_shift = 12, 81 .post_div_table = post_div_table_gpll0_out_odd, 82 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd), 83 .width = 4, 84 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 85 .clkr.hw.init = &(struct clk_init_data){ 86 .name = "gpll0_out_odd", 87 .parent_hws = (const struct clk_hw*[]){ 88 &gpll0.clkr.hw, 89 }, 90 .num_parents = 1, 91 .ops = &clk_alpha_pll_postdiv_fabia_ops, 92 }, 93 }; 94 95 static struct clk_alpha_pll gpll6 = { 96 .offset = 0x6000, 97 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 98 .clkr = { 99 .enable_reg = 0x52010, 100 .enable_mask = BIT(6), 101 .hw.init = &(struct clk_init_data){ 102 .name = "gpll6", 103 .parent_hws = (const struct clk_hw*[]){ 104 &gpll0.clkr.hw, 105 }, 106 .num_parents = 1, 107 .ops = &clk_alpha_pll_fixed_fabia_ops, 108 }, 109 }, 110 }; 111 112 static const struct clk_div_table post_div_table_gpll6_out_even[] = { 113 { 0x1, 2 }, 114 { } 115 }; 116 117 static struct clk_alpha_pll_postdiv gpll6_out_even = { 118 .offset = 0x6000, 119 .post_div_shift = 8, 120 .post_div_table = post_div_table_gpll6_out_even, 121 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even), 122 .width = 4, 123 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 124 .clkr.hw.init = &(struct clk_init_data){ 125 .name = "gpll6_out_even", 126 .parent_hws = (const struct clk_hw*[]){ 127 &gpll0.clkr.hw, 128 }, 129 .num_parents = 1, 130 .ops = &clk_alpha_pll_postdiv_fabia_ops, 131 }, 132 }; 133 134 static struct clk_alpha_pll gpll7 = { 135 .offset = 0x7000, 136 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 137 .clkr = { 138 .enable_reg = 0x52010, 139 .enable_mask = BIT(7), 140 .hw.init = &(struct clk_init_data){ 141 .name = "gpll7", 142 .parent_hws = (const struct clk_hw*[]){ 143 &gpll0.clkr.hw, 144 }, 145 .num_parents = 1, 146 .ops = &clk_alpha_pll_fixed_fabia_ops, 147 }, 148 }, 149 }; 150 151 static const struct parent_map gcc_parent_map_0[] = { 152 { P_BI_TCXO, 0 }, 153 { P_GPLL0_OUT_MAIN, 1 }, 154 { P_GPLL6_OUT_EVEN, 2 }, 155 { P_GPLL0_OUT_EVEN, 6 }, 156 }; 157 158 static const struct clk_parent_data gcc_parent_data_0[] = { 159 { .fw_name = "bi_tcxo" }, 160 { .hw = &gpll0.clkr.hw }, 161 { .hw = &gpll6_out_even.clkr.hw }, 162 { .hw = &gpll0_out_even.clkr.hw }, 163 }; 164 165 static const struct parent_map gcc_parent_map_1[] = { 166 { P_BI_TCXO, 0 }, 167 { P_GPLL0_OUT_EVEN, 6 }, 168 }; 169 170 static const struct clk_parent_data gcc_parent_data_1[] = { 171 { .fw_name = "bi_tcxo" }, 172 { .hw = &gpll0_out_even.clkr.hw }, 173 }; 174 175 static const struct parent_map gcc_parent_map_2[] = { 176 { P_BI_TCXO, 0 }, 177 { P_GPLL0_OUT_ODD, 2 }, 178 }; 179 180 static const struct clk_parent_data gcc_parent_data_2_ao[] = { 181 { .fw_name = "bi_tcxo_ao" }, 182 { .hw = &gpll0_out_odd.clkr.hw }, 183 }; 184 185 static const struct parent_map gcc_parent_map_4[] = { 186 { P_BI_TCXO, 0 }, 187 { P_GPLL0_OUT_MAIN, 1 }, 188 { P_GPLL0_OUT_ODD, 2 }, 189 }; 190 191 static const struct clk_parent_data gcc_parent_data_4[] = { 192 { .fw_name = "bi_tcxo" }, 193 { .hw = &gpll0.clkr.hw }, 194 { .hw = &gpll0_out_odd.clkr.hw }, 195 }; 196 197 static const struct parent_map gcc_parent_map_5[] = { 198 { P_BI_TCXO, 0 }, 199 { P_GPLL0_OUT_ODD, 2 }, 200 { P_SLEEP_CLK, 5 }, 201 { P_GPLL0_OUT_EVEN, 6 }, 202 }; 203 204 static const struct clk_parent_data gcc_parent_data_5[] = { 205 { .fw_name = "bi_tcxo" }, 206 { .hw = &gpll0_out_odd.clkr.hw }, 207 { .fw_name = "sleep_clk" }, 208 { .hw = &gpll0_out_even.clkr.hw }, 209 }; 210 211 static const struct parent_map gcc_parent_map_6[] = { 212 { P_BI_TCXO, 0 }, 213 { P_SLEEP_CLK, 5 }, 214 }; 215 216 static const struct clk_parent_data gcc_parent_data_6[] = { 217 { .fw_name = "bi_tcxo" }, 218 { .fw_name = "sleep_clk" } 219 }; 220 221 static const struct parent_map gcc_parent_map_7[] = { 222 { P_BI_TCXO, 0 }, 223 { P_GPLL6_OUT_EVEN, 2 }, 224 { P_GPLL0_OUT_EVEN, 6 }, 225 }; 226 227 static const struct clk_parent_data gcc_parent_data_7[] = { 228 { .fw_name = "bi_tcxo" }, 229 { .hw = &gpll6_out_even.clkr.hw }, 230 { .hw = &gpll0_out_even.clkr.hw }, 231 }; 232 233 static const struct parent_map gcc_parent_map_8[] = { 234 { P_BI_TCXO, 0 }, 235 { P_GPLL0_OUT_ODD, 2 }, 236 { P_GPLL7_OUT_MAIN, 3 }, 237 }; 238 239 static const struct clk_parent_data gcc_parent_data_8[] = { 240 { .fw_name = "bi_tcxo" }, 241 { .hw = &gpll0_out_odd.clkr.hw }, 242 { .hw = &gpll7.clkr.hw }, 243 }; 244 245 static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = { 246 .reg = 0x4514C, 247 .shift = 0, 248 .width = 2, 249 .clkr.hw.init = &(struct clk_init_data) { 250 .name = "gcc_gpu_gpll0_main_div_clk_src", 251 .parent_hws = (const struct clk_hw*[]){ 252 &gpll0.clkr.hw, 253 }, 254 .num_parents = 1, 255 .ops = &clk_regmap_div_ro_ops, 256 }, 257 }; 258 259 static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = { 260 .reg = 0x4ce00, 261 .shift = 0, 262 .width = 2, 263 .clkr.hw.init = &(struct clk_init_data) { 264 .name = "gcc_npu_pll0_main_div_clk_src", 265 .parent_hws = (const struct clk_hw*[]){ 266 &gpll0.clkr.hw, 267 }, 268 .num_parents = 1, 269 .ops = &clk_regmap_div_ro_ops, 270 }, 271 }; 272 273 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = { 274 F(19200000, P_BI_TCXO, 1, 0, 0), 275 { } 276 }; 277 278 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = { 279 .cmd_rcgr = 0x30014, 280 .mnd_width = 0, 281 .hid_width = 5, 282 .parent_map = gcc_parent_map_2, 283 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src, 284 .clkr.hw.init = &(struct clk_init_data){ 285 .name = "gcc_cpuss_ahb_clk_src", 286 .parent_data = gcc_parent_data_2_ao, 287 .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao), 288 .ops = &clk_rcg2_ops, 289 }, 290 }; 291 292 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 293 F(19200000, P_BI_TCXO, 1, 0, 0), 294 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 295 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 296 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 297 F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0), 298 { } 299 }; 300 301 static struct clk_rcg2 gcc_gp1_clk_src = { 302 .cmd_rcgr = 0x37004, 303 .mnd_width = 8, 304 .hid_width = 5, 305 .parent_map = gcc_parent_map_5, 306 .freq_tbl = ftbl_gcc_gp1_clk_src, 307 .clkr.hw.init = &(struct clk_init_data){ 308 .name = "gcc_gp1_clk_src", 309 .parent_data = gcc_parent_data_5, 310 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 311 .ops = &clk_rcg2_ops, 312 }, 313 }; 314 315 static struct clk_rcg2 gcc_gp2_clk_src = { 316 .cmd_rcgr = 0x38004, 317 .mnd_width = 8, 318 .hid_width = 5, 319 .parent_map = gcc_parent_map_5, 320 .freq_tbl = ftbl_gcc_gp1_clk_src, 321 .clkr.hw.init = &(struct clk_init_data){ 322 .name = "gcc_gp2_clk_src", 323 .parent_data = gcc_parent_data_5, 324 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 325 .ops = &clk_rcg2_ops, 326 }, 327 }; 328 329 static struct clk_rcg2 gcc_gp3_clk_src = { 330 .cmd_rcgr = 0x39004, 331 .mnd_width = 8, 332 .hid_width = 5, 333 .parent_map = gcc_parent_map_5, 334 .freq_tbl = ftbl_gcc_gp1_clk_src, 335 .clkr.hw.init = &(struct clk_init_data){ 336 .name = "gcc_gp3_clk_src", 337 .parent_data = gcc_parent_data_5, 338 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 339 .ops = &clk_rcg2_ops, 340 }, 341 }; 342 343 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 344 F(19200000, P_BI_TCXO, 1, 0, 0), 345 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0), 346 { } 347 }; 348 349 static struct clk_rcg2 gcc_pdm2_clk_src = { 350 .cmd_rcgr = 0x23010, 351 .mnd_width = 0, 352 .hid_width = 5, 353 .parent_map = gcc_parent_map_1, 354 .freq_tbl = ftbl_gcc_pdm2_clk_src, 355 .clkr.hw.init = &(struct clk_init_data){ 356 .name = "gcc_pdm2_clk_src", 357 .parent_data = gcc_parent_data_1, 358 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 359 .ops = &clk_rcg2_ops, 360 }, 361 }; 362 363 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 364 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625), 365 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625), 366 F(19200000, P_BI_TCXO, 1, 0, 0), 367 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625), 368 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75), 369 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25), 370 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75), 371 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 372 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15), 373 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25), 374 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 375 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375), 376 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75), 377 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625), 378 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0), 379 F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0), 380 { } 381 }; 382 383 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 384 .name = "gcc_qupv3_wrap0_s0_clk_src", 385 .parent_data = gcc_parent_data_0, 386 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 387 .ops = &clk_rcg2_ops, 388 }; 389 390 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 391 .cmd_rcgr = 0x21148, 392 .mnd_width = 16, 393 .hid_width = 5, 394 .parent_map = gcc_parent_map_0, 395 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 396 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 397 }; 398 399 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 400 .name = "gcc_qupv3_wrap0_s1_clk_src", 401 .parent_data = gcc_parent_data_0, 402 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 403 .ops = &clk_rcg2_ops, 404 }; 405 406 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 407 .cmd_rcgr = 0x21278, 408 .mnd_width = 16, 409 .hid_width = 5, 410 .parent_map = gcc_parent_map_0, 411 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 412 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 413 }; 414 415 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 416 .name = "gcc_qupv3_wrap0_s2_clk_src", 417 .parent_data = gcc_parent_data_0, 418 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 419 .ops = &clk_rcg2_ops, 420 }; 421 422 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 423 .cmd_rcgr = 0x213a8, 424 .mnd_width = 16, 425 .hid_width = 5, 426 .parent_map = gcc_parent_map_0, 427 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 428 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 429 }; 430 431 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 432 .name = "gcc_qupv3_wrap0_s3_clk_src", 433 .parent_data = gcc_parent_data_0, 434 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 435 .ops = &clk_rcg2_ops, 436 }; 437 438 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 439 .cmd_rcgr = 0x214d8, 440 .mnd_width = 16, 441 .hid_width = 5, 442 .parent_map = gcc_parent_map_0, 443 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 444 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 445 }; 446 447 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 448 .name = "gcc_qupv3_wrap0_s4_clk_src", 449 .parent_data = gcc_parent_data_0, 450 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 451 .ops = &clk_rcg2_ops, 452 }; 453 454 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 455 .cmd_rcgr = 0x21608, 456 .mnd_width = 16, 457 .hid_width = 5, 458 .parent_map = gcc_parent_map_0, 459 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 460 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 461 }; 462 463 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 464 .name = "gcc_qupv3_wrap0_s5_clk_src", 465 .parent_data = gcc_parent_data_0, 466 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 467 .ops = &clk_rcg2_ops, 468 }; 469 470 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 471 .cmd_rcgr = 0x21738, 472 .mnd_width = 16, 473 .hid_width = 5, 474 .parent_map = gcc_parent_map_0, 475 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 476 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 477 }; 478 479 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 480 .name = "gcc_qupv3_wrap1_s0_clk_src", 481 .parent_data = gcc_parent_data_0, 482 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 483 .ops = &clk_rcg2_ops, 484 }; 485 486 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 487 .cmd_rcgr = 0x22018, 488 .mnd_width = 16, 489 .hid_width = 5, 490 .parent_map = gcc_parent_map_0, 491 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 492 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 493 }; 494 495 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 496 .name = "gcc_qupv3_wrap1_s1_clk_src", 497 .parent_data = gcc_parent_data_0, 498 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 499 .ops = &clk_rcg2_ops, 500 }; 501 502 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 503 .cmd_rcgr = 0x22148, 504 .mnd_width = 16, 505 .hid_width = 5, 506 .parent_map = gcc_parent_map_0, 507 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 508 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 509 }; 510 511 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 512 .name = "gcc_qupv3_wrap1_s2_clk_src", 513 .parent_data = gcc_parent_data_0, 514 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 515 .ops = &clk_rcg2_ops, 516 }; 517 518 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 519 .cmd_rcgr = 0x22278, 520 .mnd_width = 16, 521 .hid_width = 5, 522 .parent_map = gcc_parent_map_0, 523 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 524 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 525 }; 526 527 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 528 .name = "gcc_qupv3_wrap1_s3_clk_src", 529 .parent_data = gcc_parent_data_0, 530 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 531 .ops = &clk_rcg2_ops, 532 }; 533 534 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 535 .cmd_rcgr = 0x223a8, 536 .mnd_width = 16, 537 .hid_width = 5, 538 .parent_map = gcc_parent_map_0, 539 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 540 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 541 }; 542 543 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 544 .name = "gcc_qupv3_wrap1_s4_clk_src", 545 .parent_data = gcc_parent_data_0, 546 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 547 .ops = &clk_rcg2_ops, 548 }; 549 550 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 551 .cmd_rcgr = 0x224d8, 552 .mnd_width = 16, 553 .hid_width = 5, 554 .parent_map = gcc_parent_map_0, 555 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 556 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 557 }; 558 559 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 560 .name = "gcc_qupv3_wrap1_s5_clk_src", 561 .parent_data = gcc_parent_data_0, 562 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 563 .ops = &clk_rcg2_ops, 564 }; 565 566 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 567 .cmd_rcgr = 0x22608, 568 .mnd_width = 16, 569 .hid_width = 5, 570 .parent_map = gcc_parent_map_0, 571 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 572 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 573 }; 574 575 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 576 F(144000, P_BI_TCXO, 16, 3, 25), 577 F(400000, P_BI_TCXO, 12, 1, 4), 578 F(19200000, P_BI_TCXO, 1, 0, 0), 579 F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3), 580 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 581 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 582 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 583 F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0), 584 F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0), 585 { } 586 }; 587 588 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 589 .cmd_rcgr = 0x4b024, 590 .mnd_width = 8, 591 .hid_width = 5, 592 .parent_map = gcc_parent_map_7, 593 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 594 .clkr.hw.init = &(struct clk_init_data){ 595 .name = "gcc_sdcc1_apps_clk_src", 596 .parent_data = gcc_parent_data_7, 597 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 598 .ops = &clk_rcg2_ops, 599 }, 600 }; 601 602 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 603 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 604 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 605 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0), 606 { } 607 }; 608 609 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 610 .cmd_rcgr = 0x4b00c, 611 .mnd_width = 0, 612 .hid_width = 5, 613 .parent_map = gcc_parent_map_1, 614 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 615 .clkr.hw.init = &(struct clk_init_data){ 616 .name = "gcc_sdcc1_ice_core_clk_src", 617 .parent_data = gcc_parent_data_1, 618 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 619 .ops = &clk_rcg2_ops, 620 }, 621 }; 622 623 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 624 F(400000, P_BI_TCXO, 12, 1, 4), 625 F(9600000, P_BI_TCXO, 2, 0, 0), 626 F(19200000, P_BI_TCXO, 1, 0, 0), 627 F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0), 628 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 629 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 630 F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 631 { } 632 }; 633 634 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 635 .cmd_rcgr = 0x2000c, 636 .mnd_width = 8, 637 .hid_width = 5, 638 .parent_map = gcc_parent_map_8, 639 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 640 .clkr.hw.init = &(struct clk_init_data){ 641 .name = "gcc_sdcc2_apps_clk_src", 642 .parent_data = gcc_parent_data_8, 643 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 644 .flags = CLK_OPS_PARENT_ENABLE, 645 .ops = &clk_rcg2_floor_ops, 646 }, 647 }; 648 649 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 650 F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0), 651 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 652 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 653 F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0), 654 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 655 { } 656 }; 657 658 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 659 .cmd_rcgr = 0x3a01c, 660 .mnd_width = 8, 661 .hid_width = 5, 662 .parent_map = gcc_parent_map_4, 663 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 664 .clkr.hw.init = &(struct clk_init_data){ 665 .name = "gcc_ufs_phy_axi_clk_src", 666 .parent_data = gcc_parent_data_4, 667 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 668 .ops = &clk_rcg2_ops, 669 }, 670 }; 671 672 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 673 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 674 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 675 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 676 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0), 677 { } 678 }; 679 680 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 681 .cmd_rcgr = 0x3a048, 682 .mnd_width = 0, 683 .hid_width = 5, 684 .parent_map = gcc_parent_map_1, 685 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 686 .clkr.hw.init = &(struct clk_init_data){ 687 .name = "gcc_ufs_phy_ice_core_clk_src", 688 .parent_data = gcc_parent_data_1, 689 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 690 .ops = &clk_rcg2_ops, 691 }, 692 }; 693 694 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 695 F(9600000, P_BI_TCXO, 2, 0, 0), 696 F(19200000, P_BI_TCXO, 1, 0, 0), 697 { } 698 }; 699 700 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 701 .cmd_rcgr = 0x3a0b0, 702 .mnd_width = 0, 703 .hid_width = 5, 704 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 705 .clkr.hw.init = &(struct clk_init_data){ 706 .name = "gcc_ufs_phy_phy_aux_clk_src", 707 .parent_data = &(const struct clk_parent_data){ 708 .fw_name = "bi_tcxo", 709 }, 710 .num_parents = 1, 711 .ops = &clk_rcg2_ops, 712 }, 713 }; 714 715 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 716 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 717 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 718 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 719 { } 720 }; 721 722 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 723 .cmd_rcgr = 0x3a060, 724 .mnd_width = 0, 725 .hid_width = 5, 726 .parent_map = gcc_parent_map_1, 727 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 728 .clkr.hw.init = &(struct clk_init_data){ 729 .name = "gcc_ufs_phy_unipro_core_clk_src", 730 .parent_data = gcc_parent_data_1, 731 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 732 .ops = &clk_rcg2_ops, 733 }, 734 }; 735 736 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 737 F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0), 738 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 739 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 740 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 741 { } 742 }; 743 744 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 745 .cmd_rcgr = 0x1a01c, 746 .mnd_width = 8, 747 .hid_width = 5, 748 .parent_map = gcc_parent_map_4, 749 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 750 .clkr.hw.init = &(struct clk_init_data){ 751 .name = "gcc_usb30_prim_master_clk_src", 752 .parent_data = gcc_parent_data_4, 753 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 754 .ops = &clk_rcg2_ops, 755 }, 756 }; 757 758 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 759 F(19200000, P_BI_TCXO, 1, 0, 0), 760 { } 761 }; 762 763 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 764 .cmd_rcgr = 0x1a034, 765 .mnd_width = 0, 766 .hid_width = 5, 767 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 768 .clkr.hw.init = &(struct clk_init_data){ 769 .name = "gcc_usb30_prim_mock_utmi_clk_src", 770 .parent_data = &(const struct clk_parent_data){ 771 .fw_name = "bi_tcxo", 772 }, 773 .num_parents = 1, 774 .ops = &clk_rcg2_ops, 775 }, 776 }; 777 778 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 779 .cmd_rcgr = 0x1a060, 780 .mnd_width = 0, 781 .hid_width = 5, 782 .parent_map = gcc_parent_map_6, 783 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 784 .clkr.hw.init = &(struct clk_init_data){ 785 .name = "gcc_usb3_prim_phy_aux_clk_src", 786 .parent_data = gcc_parent_data_6, 787 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 788 .ops = &clk_rcg2_ops, 789 }, 790 }; 791 792 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 793 .halt_reg = 0x3e014, 794 .halt_check = BRANCH_HALT_DELAY, 795 .hwcg_reg = 0x3e014, 796 .hwcg_bit = 1, 797 .clkr = { 798 .enable_reg = 0x3e014, 799 .enable_mask = BIT(0), 800 .hw.init = &(struct clk_init_data){ 801 .name = "gcc_aggre_ufs_phy_axi_clk", 802 .parent_hws = (const struct clk_hw*[]){ 803 &gcc_ufs_phy_axi_clk_src.clkr.hw, 804 }, 805 .num_parents = 1, 806 .flags = CLK_SET_RATE_PARENT, 807 .ops = &clk_branch2_ops, 808 }, 809 }, 810 }; 811 812 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 813 .halt_reg = 0x3e014, 814 .halt_check = BRANCH_HALT, 815 .hwcg_reg = 0x3e014, 816 .hwcg_bit = 1, 817 .clkr = { 818 .enable_reg = 0x3e014, 819 .enable_mask = BIT(1), 820 .hw.init = &(struct clk_init_data){ 821 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 822 .parent_hws = (const struct clk_hw*[]){ 823 &gcc_ufs_phy_axi_clk_src.clkr.hw, 824 }, 825 .num_parents = 1, 826 .flags = CLK_SET_RATE_PARENT, 827 .ops = &clk_branch2_ops, 828 }, 829 }, 830 }; 831 832 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 833 .halt_reg = 0x3e014, 834 .halt_check = BRANCH_HALT, 835 .hwcg_reg = 0x3e014, 836 .hwcg_bit = 1, 837 .clkr = { 838 .enable_reg = 0x3e014, 839 .enable_mask = BIT(1), 840 .hw.init = &(struct clk_init_data){ 841 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 842 .parent_hws = (const struct clk_hw*[]){ 843 &gcc_ufs_phy_axi_clk_src.clkr.hw, 844 }, 845 .num_parents = 1, 846 .flags = CLK_SET_RATE_PARENT, 847 .ops = &clk_branch2_ops, 848 }, 849 }, 850 }; 851 852 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 853 .halt_reg = 0x3e010, 854 .halt_check = BRANCH_HALT, 855 .hwcg_reg = 0x3e010, 856 .hwcg_bit = 1, 857 .clkr = { 858 .enable_reg = 0x3e010, 859 .enable_mask = BIT(0), 860 .hw.init = &(struct clk_init_data){ 861 .name = "gcc_aggre_usb3_prim_axi_clk", 862 .parent_hws = (const struct clk_hw*[]){ 863 &gcc_usb30_prim_master_clk_src.clkr.hw, 864 }, 865 .num_parents = 1, 866 .flags = CLK_SET_RATE_PARENT, 867 .ops = &clk_branch2_ops, 868 }, 869 }, 870 }; 871 872 static struct clk_branch gcc_boot_rom_ahb_clk = { 873 .halt_reg = 0x26004, 874 .halt_check = BRANCH_HALT_VOTED, 875 .hwcg_reg = 0x26004, 876 .hwcg_bit = 1, 877 .clkr = { 878 .enable_reg = 0x52000, 879 .enable_mask = BIT(28), 880 .hw.init = &(struct clk_init_data){ 881 .name = "gcc_boot_rom_ahb_clk", 882 .ops = &clk_branch2_ops, 883 }, 884 }, 885 }; 886 887 static struct clk_branch gcc_camera_ahb_clk = { 888 .halt_reg = 0x17008, 889 .halt_check = BRANCH_HALT, 890 .hwcg_reg = 0x17008, 891 .hwcg_bit = 1, 892 .clkr = { 893 .enable_reg = 0x17008, 894 .enable_mask = BIT(0), 895 .hw.init = &(struct clk_init_data){ 896 .name = "gcc_camera_ahb_clk", 897 .flags = CLK_IS_CRITICAL, 898 .ops = &clk_branch2_ops, 899 }, 900 }, 901 }; 902 903 static struct clk_branch gcc_camera_axi_clk = { 904 .halt_reg = 0x17018, 905 .halt_check = BRANCH_HALT, 906 .hwcg_reg = 0x17018, 907 .hwcg_bit = 1, 908 .clkr = { 909 .enable_reg = 0x17018, 910 .enable_mask = BIT(0), 911 .hw.init = &(struct clk_init_data){ 912 .name = "gcc_camera_axi_clk", 913 .ops = &clk_branch2_ops, 914 }, 915 }, 916 }; 917 918 static struct clk_branch gcc_camera_throttle_nrt_axi_clk = { 919 .halt_reg = 0x17078, 920 .halt_check = BRANCH_VOTED, 921 .hwcg_reg = 0x17078, 922 .hwcg_bit = 1, 923 .clkr = { 924 .enable_reg = 0x17078, 925 .enable_mask = BIT(0), 926 .hw.init = &(struct clk_init_data){ 927 .name = "gcc_camera_throttle_nrt_axi_clk", 928 .ops = &clk_branch2_ops, 929 }, 930 }, 931 }; 932 933 static struct clk_branch gcc_camera_throttle_rt_axi_clk = { 934 .halt_reg = 0x17024, 935 .halt_check = BRANCH_VOTED, 936 .hwcg_reg = 0x17024, 937 .hwcg_bit = 1, 938 .clkr = { 939 .enable_reg = 0x17024, 940 .enable_mask = BIT(0), 941 .hw.init = &(struct clk_init_data){ 942 .name = "gcc_camera_throttle_rt_axi_clk", 943 .ops = &clk_branch2_ops, 944 }, 945 }, 946 }; 947 948 static struct clk_branch gcc_camera_xo_clk = { 949 .halt_reg = 0x17030, 950 .halt_check = BRANCH_HALT, 951 .clkr = { 952 .enable_reg = 0x17030, 953 .enable_mask = BIT(0), 954 .hw.init = &(struct clk_init_data){ 955 .name = "gcc_camera_xo_clk", 956 .flags = CLK_IS_CRITICAL, 957 .ops = &clk_branch2_ops, 958 }, 959 }, 960 }; 961 962 static struct clk_branch gcc_ce1_ahb_clk = { 963 .halt_reg = 0x2b00c, 964 .halt_check = BRANCH_HALT_VOTED, 965 .hwcg_reg = 0x2b00c, 966 .hwcg_bit = 1, 967 .clkr = { 968 .enable_reg = 0x52008, 969 .enable_mask = BIT(3), 970 .hw.init = &(struct clk_init_data){ 971 .name = "gcc_ce1_ahb_clk", 972 .ops = &clk_branch2_ops, 973 }, 974 }, 975 }; 976 977 static struct clk_branch gcc_ce1_axi_clk = { 978 .halt_reg = 0x2b008, 979 .halt_check = BRANCH_HALT_VOTED, 980 .clkr = { 981 .enable_reg = 0x52008, 982 .enable_mask = BIT(2), 983 .hw.init = &(struct clk_init_data){ 984 .name = "gcc_ce1_axi_clk", 985 .ops = &clk_branch2_ops, 986 }, 987 }, 988 }; 989 990 static struct clk_branch gcc_ce1_clk = { 991 .halt_reg = 0x2b004, 992 .halt_check = BRANCH_HALT_VOTED, 993 .clkr = { 994 .enable_reg = 0x52008, 995 .enable_mask = BIT(1), 996 .hw.init = &(struct clk_init_data){ 997 .name = "gcc_ce1_clk", 998 .ops = &clk_branch2_ops, 999 }, 1000 }, 1001 }; 1002 1003 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1004 .halt_reg = 0x1101c, 1005 .halt_check = BRANCH_HALT, 1006 .hwcg_reg = 0x1101c, 1007 .hwcg_bit = 1, 1008 .clkr = { 1009 .enable_reg = 0x1101c, 1010 .enable_mask = BIT(0), 1011 .hw.init = &(struct clk_init_data){ 1012 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1013 .parent_hws = (const struct clk_hw*[]){ 1014 &gcc_usb30_prim_master_clk_src.clkr.hw, 1015 }, 1016 .num_parents = 1, 1017 .flags = CLK_SET_RATE_PARENT, 1018 .ops = &clk_branch2_ops, 1019 }, 1020 }, 1021 }; 1022 1023 static struct clk_branch gcc_cpuss_ahb_clk = { 1024 .halt_reg = 0x30000, 1025 .halt_check = BRANCH_HALT_VOTED, 1026 .hwcg_reg = 0x30000, 1027 .hwcg_bit = 1, 1028 .clkr = { 1029 .enable_reg = 0x52008, 1030 .enable_mask = BIT(4), 1031 .hw.init = &(struct clk_init_data){ 1032 .name = "gcc_cpuss_ahb_clk", 1033 .parent_hws = (const struct clk_hw*[]){ 1034 &gcc_cpuss_ahb_clk_src.clkr.hw, 1035 }, 1036 .num_parents = 1, 1037 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1038 .ops = &clk_branch2_ops, 1039 }, 1040 }, 1041 }; 1042 1043 static struct clk_branch gcc_cpuss_gnoc_clk = { 1044 .halt_reg = 0x30004, 1045 .halt_check = BRANCH_HALT_VOTED, 1046 .hwcg_reg = 0x30004, 1047 .hwcg_bit = 1, 1048 .clkr = { 1049 .enable_reg = 0x52008, 1050 .enable_mask = BIT(5), 1051 .hw.init = &(struct clk_init_data){ 1052 .name = "gcc_cpuss_gnoc_clk", 1053 .flags = CLK_IS_CRITICAL, 1054 .ops = &clk_branch2_ops, 1055 }, 1056 }, 1057 }; 1058 1059 static struct clk_branch gcc_cpuss_rbcpr_clk = { 1060 .halt_reg = 0x30008, 1061 .halt_check = BRANCH_HALT, 1062 .clkr = { 1063 .enable_reg = 0x30008, 1064 .enable_mask = BIT(0), 1065 .hw.init = &(struct clk_init_data){ 1066 .name = "gcc_cpuss_rbcpr_clk", 1067 .ops = &clk_branch2_ops, 1068 }, 1069 }, 1070 }; 1071 1072 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1073 .halt_reg = 0x2d038, 1074 .halt_check = BRANCH_VOTED, 1075 .hwcg_reg = 0x2d038, 1076 .hwcg_bit = 1, 1077 .clkr = { 1078 .enable_reg = 0x2d038, 1079 .enable_mask = BIT(0), 1080 .hw.init = &(struct clk_init_data){ 1081 .name = "gcc_ddrss_gpu_axi_clk", 1082 .ops = &clk_branch2_ops, 1083 }, 1084 }, 1085 }; 1086 1087 static struct clk_branch gcc_disp_ahb_clk = { 1088 .halt_reg = 0x1700c, 1089 .halt_check = BRANCH_HALT, 1090 .hwcg_reg = 0x1700c, 1091 .hwcg_bit = 1, 1092 .clkr = { 1093 .enable_reg = 0x1700c, 1094 .enable_mask = BIT(0), 1095 .hw.init = &(struct clk_init_data){ 1096 .name = "gcc_disp_ahb_clk", 1097 .flags = CLK_IS_CRITICAL, 1098 .ops = &clk_branch2_ops, 1099 }, 1100 }, 1101 }; 1102 1103 static struct clk_branch gcc_disp_axi_clk = { 1104 .halt_reg = 0x1701c, 1105 .halt_check = BRANCH_HALT, 1106 .hwcg_reg = 0x1701c, 1107 .hwcg_bit = 1, 1108 .clkr = { 1109 .enable_reg = 0x1701c, 1110 .enable_mask = BIT(0), 1111 .hw.init = &(struct clk_init_data){ 1112 .name = "gcc_disp_axi_clk", 1113 .ops = &clk_branch2_ops, 1114 }, 1115 }, 1116 }; 1117 1118 static struct clk_branch gcc_disp_cc_sleep_clk = { 1119 .halt_reg = 0x17074, 1120 .halt_check = BRANCH_HALT_DELAY, 1121 .hwcg_reg = 0x17074, 1122 .hwcg_bit = 1, 1123 .clkr = { 1124 .enable_reg = 0x17074, 1125 .enable_mask = BIT(0), 1126 .hw.init = &(struct clk_init_data){ 1127 .name = "gcc_disp_cc_sleep_clk", 1128 .ops = &clk_branch2_ops, 1129 }, 1130 }, 1131 }; 1132 1133 static struct clk_branch gcc_disp_cc_xo_clk = { 1134 .halt_reg = 0x17070, 1135 .halt_check = BRANCH_HALT, 1136 .hwcg_reg = 0x17070, 1137 .hwcg_bit = 1, 1138 .clkr = { 1139 .enable_reg = 0x17070, 1140 .enable_mask = BIT(0), 1141 .hw.init = &(struct clk_init_data){ 1142 .name = "gcc_disp_cc_xo_clk", 1143 .flags = CLK_IS_CRITICAL, 1144 .ops = &clk_branch2_ops, 1145 }, 1146 }, 1147 }; 1148 1149 static struct clk_branch gcc_disp_gpll0_clk = { 1150 .halt_check = BRANCH_HALT_DELAY, 1151 .clkr = { 1152 .enable_reg = 0x52000, 1153 .enable_mask = BIT(2), 1154 .hw.init = &(struct clk_init_data){ 1155 .name = "gcc_disp_gpll0_clk", 1156 .parent_hws = (const struct clk_hw*[]){ 1157 &gpll0.clkr.hw, 1158 }, 1159 .num_parents = 1, 1160 .ops = &clk_branch2_ops, 1161 }, 1162 }, 1163 }; 1164 1165 static struct clk_branch gcc_disp_throttle_axi_clk = { 1166 .halt_reg = 0x17028, 1167 .halt_check = BRANCH_HALT, 1168 .hwcg_reg = 0x17028, 1169 .hwcg_bit = 1, 1170 .clkr = { 1171 .enable_reg = 0x17028, 1172 .enable_mask = BIT(0), 1173 .hw.init = &(struct clk_init_data){ 1174 .name = "gcc_disp_throttle_axi_clk", 1175 .ops = &clk_branch2_ops, 1176 }, 1177 }, 1178 }; 1179 1180 static struct clk_branch gcc_disp_xo_clk = { 1181 .halt_reg = 0x17034, 1182 .halt_check = BRANCH_HALT, 1183 .clkr = { 1184 .enable_reg = 0x17034, 1185 .enable_mask = BIT(0), 1186 .hw.init = &(struct clk_init_data){ 1187 .name = "gcc_disp_xo_clk", 1188 .ops = &clk_branch2_ops, 1189 }, 1190 }, 1191 }; 1192 1193 static struct clk_branch gcc_gp1_clk = { 1194 .halt_reg = 0x37000, 1195 .halt_check = BRANCH_HALT, 1196 .clkr = { 1197 .enable_reg = 0x37000, 1198 .enable_mask = BIT(0), 1199 .hw.init = &(struct clk_init_data){ 1200 .name = "gcc_gp1_clk", 1201 .parent_hws = (const struct clk_hw*[]){ 1202 &gcc_gp1_clk_src.clkr.hw, 1203 }, 1204 .num_parents = 1, 1205 .flags = CLK_SET_RATE_PARENT, 1206 .ops = &clk_branch2_ops, 1207 }, 1208 }, 1209 }; 1210 1211 static struct clk_branch gcc_gp2_clk = { 1212 .halt_reg = 0x38000, 1213 .halt_check = BRANCH_HALT, 1214 .clkr = { 1215 .enable_reg = 0x38000, 1216 .enable_mask = BIT(0), 1217 .hw.init = &(struct clk_init_data){ 1218 .name = "gcc_gp2_clk", 1219 .parent_hws = (const struct clk_hw*[]){ 1220 &gcc_gp2_clk_src.clkr.hw, 1221 }, 1222 .num_parents = 1, 1223 .flags = CLK_SET_RATE_PARENT, 1224 .ops = &clk_branch2_ops, 1225 }, 1226 }, 1227 }; 1228 1229 static struct clk_branch gcc_gp3_clk = { 1230 .halt_reg = 0x39000, 1231 .halt_check = BRANCH_HALT, 1232 .clkr = { 1233 .enable_reg = 0x39000, 1234 .enable_mask = BIT(0), 1235 .hw.init = &(struct clk_init_data){ 1236 .name = "gcc_gp3_clk", 1237 .parent_hws = (const struct clk_hw*[]){ 1238 &gcc_gp3_clk_src.clkr.hw, 1239 }, 1240 .num_parents = 1, 1241 .flags = CLK_SET_RATE_PARENT, 1242 .ops = &clk_branch2_ops, 1243 }, 1244 }, 1245 }; 1246 1247 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 1248 .halt_reg = 0x45004, 1249 .halt_check = BRANCH_HALT, 1250 .hwcg_reg = 0x45004, 1251 .hwcg_bit = 1, 1252 .clkr = { 1253 .enable_reg = 0x45004, 1254 .enable_mask = BIT(0), 1255 .hw.init = &(struct clk_init_data){ 1256 .name = "gcc_gpu_cfg_ahb_clk", 1257 .flags = CLK_IS_CRITICAL, 1258 .ops = &clk_branch2_ops, 1259 }, 1260 }, 1261 }; 1262 1263 static struct clk_branch gcc_gpu_gpll0_clk = { 1264 .halt_check = BRANCH_HALT_DELAY, 1265 .clkr = { 1266 .enable_reg = 0x52008, 1267 .enable_mask = BIT(7), 1268 .hw.init = &(struct clk_init_data){ 1269 .name = "gcc_gpu_gpll0_clk", 1270 .parent_hws = (const struct clk_hw*[]){ 1271 &gpll0.clkr.hw, 1272 }, 1273 .num_parents = 1, 1274 .ops = &clk_branch2_ops, 1275 }, 1276 }, 1277 }; 1278 1279 static struct clk_branch gcc_gpu_gpll0_div_clk = { 1280 .halt_check = BRANCH_HALT_DELAY, 1281 .clkr = { 1282 .enable_reg = 0x52008, 1283 .enable_mask = BIT(8), 1284 .hw.init = &(struct clk_init_data){ 1285 .name = "gcc_gpu_gpll0_div_clk", 1286 .parent_hws = (const struct clk_hw*[]){ 1287 &gcc_gpu_gpll0_main_div_clk_src.clkr.hw, 1288 }, 1289 .num_parents = 1, 1290 .ops = &clk_branch2_ops, 1291 }, 1292 }, 1293 }; 1294 1295 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1296 .halt_reg = 0x4500c, 1297 .halt_check = BRANCH_VOTED, 1298 .hwcg_reg = 0x4500c, 1299 .hwcg_bit = 1, 1300 .clkr = { 1301 .enable_reg = 0x4500c, 1302 .enable_mask = BIT(0), 1303 .hw.init = &(struct clk_init_data){ 1304 .name = "gcc_gpu_memnoc_gfx_clk", 1305 .ops = &clk_branch2_ops, 1306 }, 1307 }, 1308 }; 1309 1310 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1311 .halt_reg = 0x45014, 1312 .halt_check = BRANCH_HALT, 1313 .hwcg_reg = 0x45014, 1314 .hwcg_bit = 1, 1315 .clkr = { 1316 .enable_reg = 0x45014, 1317 .enable_mask = BIT(0), 1318 .hw.init = &(struct clk_init_data){ 1319 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1320 .ops = &clk_branch2_ops, 1321 }, 1322 }, 1323 }; 1324 1325 static struct clk_branch gcc_npu_axi_clk = { 1326 .halt_reg = 0x4c008, 1327 .halt_check = BRANCH_VOTED, 1328 .hwcg_reg = 0x4c008, 1329 .hwcg_bit = 1, 1330 .clkr = { 1331 .enable_reg = 0x4c008, 1332 .enable_mask = BIT(0), 1333 .hw.init = &(struct clk_init_data){ 1334 .name = "gcc_npu_axi_clk", 1335 .ops = &clk_branch2_ops, 1336 }, 1337 }, 1338 }; 1339 1340 static struct clk_branch gcc_npu_bwmon_axi_clk = { 1341 .halt_reg = 0x4d004, 1342 .halt_check = BRANCH_HALT_DELAY, 1343 .hwcg_reg = 0x4d004, 1344 .hwcg_bit = 1, 1345 .clkr = { 1346 .enable_reg = 0x4d004, 1347 .enable_mask = BIT(0), 1348 .hw.init = &(struct clk_init_data){ 1349 .name = "gcc_npu_bwmon_axi_clk", 1350 .ops = &clk_branch2_ops, 1351 }, 1352 }, 1353 }; 1354 1355 static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = { 1356 .halt_reg = 0x4d008, 1357 .halt_check = BRANCH_HALT, 1358 .clkr = { 1359 .enable_reg = 0x4d008, 1360 .enable_mask = BIT(0), 1361 .hw.init = &(struct clk_init_data){ 1362 .name = "gcc_npu_bwmon_dma_cfg_ahb_clk", 1363 .ops = &clk_branch2_ops, 1364 }, 1365 }, 1366 }; 1367 1368 static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = { 1369 .halt_reg = 0x4d00c, 1370 .halt_check = BRANCH_HALT, 1371 .clkr = { 1372 .enable_reg = 0x4d00c, 1373 .enable_mask = BIT(0), 1374 .hw.init = &(struct clk_init_data){ 1375 .name = "gcc_npu_bwmon_dsp_cfg_ahb_clk", 1376 .ops = &clk_branch2_ops, 1377 }, 1378 }, 1379 }; 1380 1381 static struct clk_branch gcc_npu_cfg_ahb_clk = { 1382 .halt_reg = 0x4c004, 1383 .halt_check = BRANCH_HALT, 1384 .hwcg_reg = 0x4c004, 1385 .hwcg_bit = 1, 1386 .clkr = { 1387 .enable_reg = 0x4c004, 1388 .enable_mask = BIT(0), 1389 .hw.init = &(struct clk_init_data){ 1390 .name = "gcc_npu_cfg_ahb_clk", 1391 .flags = CLK_IS_CRITICAL, 1392 .ops = &clk_branch2_ops, 1393 }, 1394 }, 1395 }; 1396 1397 static struct clk_branch gcc_npu_dma_clk = { 1398 .halt_reg = 0x4c140, 1399 .halt_check = BRANCH_VOTED, 1400 .hwcg_reg = 0x4c140, 1401 .hwcg_bit = 1, 1402 .clkr = { 1403 .enable_reg = 0x4c140, 1404 .enable_mask = BIT(0), 1405 .hw.init = &(struct clk_init_data){ 1406 .name = "gcc_npu_dma_clk", 1407 .ops = &clk_branch2_ops, 1408 }, 1409 }, 1410 }; 1411 1412 static struct clk_branch gcc_npu_gpll0_clk = { 1413 .halt_check = BRANCH_HALT_DELAY, 1414 .clkr = { 1415 .enable_reg = 0x52008, 1416 .enable_mask = BIT(9), 1417 .hw.init = &(struct clk_init_data){ 1418 .name = "gcc_npu_gpll0_clk", 1419 .parent_hws = (const struct clk_hw*[]){ 1420 &gpll0.clkr.hw, 1421 }, 1422 .num_parents = 1, 1423 .ops = &clk_branch2_ops, 1424 }, 1425 }, 1426 }; 1427 1428 static struct clk_branch gcc_npu_gpll0_div_clk = { 1429 .halt_check = BRANCH_HALT_DELAY, 1430 .clkr = { 1431 .enable_reg = 0x52008, 1432 .enable_mask = BIT(10), 1433 .hw.init = &(struct clk_init_data){ 1434 .name = "gcc_npu_gpll0_div_clk", 1435 .parent_hws = (const struct clk_hw*[]){ 1436 &gcc_npu_pll0_main_div_clk_src.clkr.hw, 1437 }, 1438 .num_parents = 1, 1439 .ops = &clk_branch2_ops, 1440 }, 1441 }, 1442 }; 1443 1444 static struct clk_branch gcc_pdm2_clk = { 1445 .halt_reg = 0x2300c, 1446 .halt_check = BRANCH_HALT, 1447 .clkr = { 1448 .enable_reg = 0x2300c, 1449 .enable_mask = BIT(0), 1450 .hw.init = &(struct clk_init_data){ 1451 .name = "gcc_pdm2_clk", 1452 .parent_hws = (const struct clk_hw*[]){ 1453 &gcc_pdm2_clk_src.clkr.hw, 1454 }, 1455 .num_parents = 1, 1456 .flags = CLK_SET_RATE_PARENT, 1457 .ops = &clk_branch2_ops, 1458 }, 1459 }, 1460 }; 1461 1462 static struct clk_branch gcc_pdm_ahb_clk = { 1463 .halt_reg = 0x23004, 1464 .halt_check = BRANCH_HALT, 1465 .hwcg_reg = 0x23004, 1466 .hwcg_bit = 1, 1467 .clkr = { 1468 .enable_reg = 0x23004, 1469 .enable_mask = BIT(0), 1470 .hw.init = &(struct clk_init_data){ 1471 .name = "gcc_pdm_ahb_clk", 1472 .ops = &clk_branch2_ops, 1473 }, 1474 }, 1475 }; 1476 1477 static struct clk_branch gcc_pdm_xo4_clk = { 1478 .halt_reg = 0x23008, 1479 .halt_check = BRANCH_HALT, 1480 .clkr = { 1481 .enable_reg = 0x23008, 1482 .enable_mask = BIT(0), 1483 .hw.init = &(struct clk_init_data){ 1484 .name = "gcc_pdm_xo4_clk", 1485 .ops = &clk_branch2_ops, 1486 }, 1487 }, 1488 }; 1489 1490 static struct clk_branch gcc_prng_ahb_clk = { 1491 .halt_reg = 0x24004, 1492 .halt_check = BRANCH_HALT_VOTED, 1493 .hwcg_reg = 0x24004, 1494 .hwcg_bit = 1, 1495 .clkr = { 1496 .enable_reg = 0x52000, 1497 .enable_mask = BIT(26), 1498 .hw.init = &(struct clk_init_data){ 1499 .name = "gcc_prng_ahb_clk", 1500 .ops = &clk_branch2_ops, 1501 }, 1502 }, 1503 }; 1504 1505 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1506 .halt_reg = 0x21014, 1507 .halt_check = BRANCH_HALT_VOTED, 1508 .clkr = { 1509 .enable_reg = 0x52000, 1510 .enable_mask = BIT(9), 1511 .hw.init = &(struct clk_init_data){ 1512 .name = "gcc_qupv3_wrap0_core_2x_clk", 1513 .ops = &clk_branch2_ops, 1514 }, 1515 }, 1516 }; 1517 1518 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1519 .halt_reg = 0x2100c, 1520 .halt_check = BRANCH_HALT_VOTED, 1521 .clkr = { 1522 .enable_reg = 0x52000, 1523 .enable_mask = BIT(8), 1524 .hw.init = &(struct clk_init_data){ 1525 .name = "gcc_qupv3_wrap0_core_clk", 1526 .ops = &clk_branch2_ops, 1527 }, 1528 }, 1529 }; 1530 1531 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1532 .halt_reg = 0x21144, 1533 .halt_check = BRANCH_HALT_VOTED, 1534 .clkr = { 1535 .enable_reg = 0x52000, 1536 .enable_mask = BIT(10), 1537 .hw.init = &(struct clk_init_data){ 1538 .name = "gcc_qupv3_wrap0_s0_clk", 1539 .parent_hws = (const struct clk_hw*[]){ 1540 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1541 }, 1542 .num_parents = 1, 1543 .flags = CLK_SET_RATE_PARENT, 1544 .ops = &clk_branch2_ops, 1545 }, 1546 }, 1547 }; 1548 1549 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1550 .halt_reg = 0x21274, 1551 .halt_check = BRANCH_HALT_VOTED, 1552 .clkr = { 1553 .enable_reg = 0x52000, 1554 .enable_mask = BIT(11), 1555 .hw.init = &(struct clk_init_data){ 1556 .name = "gcc_qupv3_wrap0_s1_clk", 1557 .parent_hws = (const struct clk_hw*[]){ 1558 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1559 }, 1560 .num_parents = 1, 1561 .flags = CLK_SET_RATE_PARENT, 1562 .ops = &clk_branch2_ops, 1563 }, 1564 }, 1565 }; 1566 1567 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1568 .halt_reg = 0x213a4, 1569 .halt_check = BRANCH_HALT_VOTED, 1570 .clkr = { 1571 .enable_reg = 0x52000, 1572 .enable_mask = BIT(12), 1573 .hw.init = &(struct clk_init_data){ 1574 .name = "gcc_qupv3_wrap0_s2_clk", 1575 .parent_hws = (const struct clk_hw*[]){ 1576 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1577 }, 1578 .num_parents = 1, 1579 .flags = CLK_SET_RATE_PARENT, 1580 .ops = &clk_branch2_ops, 1581 }, 1582 }, 1583 }; 1584 1585 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1586 .halt_reg = 0x214d4, 1587 .halt_check = BRANCH_HALT_VOTED, 1588 .clkr = { 1589 .enable_reg = 0x52000, 1590 .enable_mask = BIT(13), 1591 .hw.init = &(struct clk_init_data){ 1592 .name = "gcc_qupv3_wrap0_s3_clk", 1593 .parent_hws = (const struct clk_hw*[]){ 1594 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1595 }, 1596 .num_parents = 1, 1597 .flags = CLK_SET_RATE_PARENT, 1598 .ops = &clk_branch2_ops, 1599 }, 1600 }, 1601 }; 1602 1603 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1604 .halt_reg = 0x21604, 1605 .halt_check = BRANCH_HALT_VOTED, 1606 .clkr = { 1607 .enable_reg = 0x52000, 1608 .enable_mask = BIT(14), 1609 .hw.init = &(struct clk_init_data){ 1610 .name = "gcc_qupv3_wrap0_s4_clk", 1611 .parent_hws = (const struct clk_hw*[]){ 1612 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1613 }, 1614 .num_parents = 1, 1615 .flags = CLK_SET_RATE_PARENT, 1616 .ops = &clk_branch2_ops, 1617 }, 1618 }, 1619 }; 1620 1621 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 1622 .halt_reg = 0x21734, 1623 .halt_check = BRANCH_HALT_VOTED, 1624 .clkr = { 1625 .enable_reg = 0x52000, 1626 .enable_mask = BIT(15), 1627 .hw.init = &(struct clk_init_data){ 1628 .name = "gcc_qupv3_wrap0_s5_clk", 1629 .parent_hws = (const struct clk_hw*[]){ 1630 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 1631 }, 1632 .num_parents = 1, 1633 .flags = CLK_SET_RATE_PARENT, 1634 .ops = &clk_branch2_ops, 1635 }, 1636 }, 1637 }; 1638 1639 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1640 .halt_reg = 0x22004, 1641 .halt_check = BRANCH_HALT_VOTED, 1642 .clkr = { 1643 .enable_reg = 0x52000, 1644 .enable_mask = BIT(16), 1645 .hw.init = &(struct clk_init_data){ 1646 .name = "gcc_qupv3_wrap1_core_2x_clk", 1647 .ops = &clk_branch2_ops, 1648 }, 1649 }, 1650 }; 1651 1652 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1653 .halt_reg = 0x22008, 1654 .halt_check = BRANCH_HALT_VOTED, 1655 .clkr = { 1656 .enable_reg = 0x52000, 1657 .enable_mask = BIT(17), 1658 .hw.init = &(struct clk_init_data){ 1659 .name = "gcc_qupv3_wrap1_core_clk", 1660 .ops = &clk_branch2_ops, 1661 }, 1662 }, 1663 }; 1664 1665 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1666 .halt_reg = 0x22014, 1667 .halt_check = BRANCH_HALT_VOTED, 1668 .clkr = { 1669 .enable_reg = 0x52000, 1670 .enable_mask = BIT(20), 1671 .hw.init = &(struct clk_init_data){ 1672 .name = "gcc_qupv3_wrap1_s0_clk", 1673 .parent_hws = (const struct clk_hw*[]){ 1674 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1675 }, 1676 .num_parents = 1, 1677 .flags = CLK_SET_RATE_PARENT, 1678 .ops = &clk_branch2_ops, 1679 }, 1680 }, 1681 }; 1682 1683 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1684 .halt_reg = 0x22144, 1685 .halt_check = BRANCH_HALT_VOTED, 1686 .clkr = { 1687 .enable_reg = 0x52000, 1688 .enable_mask = BIT(21), 1689 .hw.init = &(struct clk_init_data){ 1690 .name = "gcc_qupv3_wrap1_s1_clk", 1691 .parent_hws = (const struct clk_hw*[]){ 1692 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1693 }, 1694 .num_parents = 1, 1695 .flags = CLK_SET_RATE_PARENT, 1696 .ops = &clk_branch2_ops, 1697 }, 1698 }, 1699 }; 1700 1701 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1702 .halt_reg = 0x22274, 1703 .halt_check = BRANCH_HALT_VOTED, 1704 .clkr = { 1705 .enable_reg = 0x52000, 1706 .enable_mask = BIT(22), 1707 .hw.init = &(struct clk_init_data){ 1708 .name = "gcc_qupv3_wrap1_s2_clk", 1709 .parent_hws = (const struct clk_hw*[]){ 1710 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1711 }, 1712 .num_parents = 1, 1713 .flags = CLK_SET_RATE_PARENT, 1714 .ops = &clk_branch2_ops, 1715 }, 1716 }, 1717 }; 1718 1719 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1720 .halt_reg = 0x223a4, 1721 .halt_check = BRANCH_HALT_VOTED, 1722 .clkr = { 1723 .enable_reg = 0x52000, 1724 .enable_mask = BIT(23), 1725 .hw.init = &(struct clk_init_data){ 1726 .name = "gcc_qupv3_wrap1_s3_clk", 1727 .parent_hws = (const struct clk_hw*[]){ 1728 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1729 }, 1730 .num_parents = 1, 1731 .flags = CLK_SET_RATE_PARENT, 1732 .ops = &clk_branch2_ops, 1733 }, 1734 }, 1735 }; 1736 1737 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1738 .halt_reg = 0x224d4, 1739 .halt_check = BRANCH_HALT_VOTED, 1740 .clkr = { 1741 .enable_reg = 0x52000, 1742 .enable_mask = BIT(24), 1743 .hw.init = &(struct clk_init_data){ 1744 .name = "gcc_qupv3_wrap1_s4_clk", 1745 .parent_hws = (const struct clk_hw*[]){ 1746 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 1747 }, 1748 .num_parents = 1, 1749 .flags = CLK_SET_RATE_PARENT, 1750 .ops = &clk_branch2_ops, 1751 }, 1752 }, 1753 }; 1754 1755 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 1756 .halt_reg = 0x22604, 1757 .halt_check = BRANCH_HALT_VOTED, 1758 .clkr = { 1759 .enable_reg = 0x52000, 1760 .enable_mask = BIT(25), 1761 .hw.init = &(struct clk_init_data){ 1762 .name = "gcc_qupv3_wrap1_s5_clk", 1763 .parent_hws = (const struct clk_hw*[]){ 1764 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 1765 }, 1766 .num_parents = 1, 1767 .flags = CLK_SET_RATE_PARENT, 1768 .ops = &clk_branch2_ops, 1769 }, 1770 }, 1771 }; 1772 1773 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 1774 .halt_reg = 0x21004, 1775 .halt_check = BRANCH_HALT_VOTED, 1776 .hwcg_reg = 0x21004, 1777 .hwcg_bit = 1, 1778 .clkr = { 1779 .enable_reg = 0x52000, 1780 .enable_mask = BIT(6), 1781 .hw.init = &(struct clk_init_data){ 1782 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 1783 .ops = &clk_branch2_ops, 1784 }, 1785 }, 1786 }; 1787 1788 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 1789 .halt_reg = 0x21008, 1790 .halt_check = BRANCH_HALT_VOTED, 1791 .hwcg_reg = 0x21008, 1792 .hwcg_bit = 1, 1793 .clkr = { 1794 .enable_reg = 0x52000, 1795 .enable_mask = BIT(7), 1796 .hw.init = &(struct clk_init_data){ 1797 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 1798 .ops = &clk_branch2_ops, 1799 }, 1800 }, 1801 }; 1802 1803 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 1804 .halt_reg = 0x2200c, 1805 .halt_check = BRANCH_HALT_VOTED, 1806 .hwcg_reg = 0x2200c, 1807 .hwcg_bit = 1, 1808 .clkr = { 1809 .enable_reg = 0x52000, 1810 .enable_mask = BIT(18), 1811 .hw.init = &(struct clk_init_data){ 1812 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 1813 .ops = &clk_branch2_ops, 1814 }, 1815 }, 1816 }; 1817 1818 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 1819 .halt_reg = 0x22010, 1820 .halt_check = BRANCH_HALT_VOTED, 1821 .hwcg_reg = 0x22010, 1822 .hwcg_bit = 1, 1823 .clkr = { 1824 .enable_reg = 0x52000, 1825 .enable_mask = BIT(19), 1826 .hw.init = &(struct clk_init_data){ 1827 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 1828 .ops = &clk_branch2_ops, 1829 }, 1830 }, 1831 }; 1832 1833 static struct clk_branch gcc_sdcc1_ahb_clk = { 1834 .halt_reg = 0x4b004, 1835 .halt_check = BRANCH_HALT, 1836 .clkr = { 1837 .enable_reg = 0x4b004, 1838 .enable_mask = BIT(0), 1839 .hw.init = &(struct clk_init_data){ 1840 .name = "gcc_sdcc1_ahb_clk", 1841 .ops = &clk_branch2_ops, 1842 }, 1843 }, 1844 }; 1845 1846 static struct clk_branch gcc_sdcc1_apps_clk = { 1847 .halt_reg = 0x4b008, 1848 .halt_check = BRANCH_HALT, 1849 .clkr = { 1850 .enable_reg = 0x4b008, 1851 .enable_mask = BIT(0), 1852 .hw.init = &(struct clk_init_data){ 1853 .name = "gcc_sdcc1_apps_clk", 1854 .parent_hws = (const struct clk_hw*[]){ 1855 &gcc_sdcc1_apps_clk_src.clkr.hw, 1856 }, 1857 .num_parents = 1, 1858 .flags = CLK_SET_RATE_PARENT, 1859 .ops = &clk_branch2_ops, 1860 }, 1861 }, 1862 }; 1863 1864 static struct clk_branch gcc_sdcc1_ice_core_clk = { 1865 .halt_reg = 0x4b03c, 1866 .halt_check = BRANCH_HALT, 1867 .hwcg_reg = 0x4b03c, 1868 .hwcg_bit = 1, 1869 .clkr = { 1870 .enable_reg = 0x4b03c, 1871 .enable_mask = BIT(0), 1872 .hw.init = &(struct clk_init_data){ 1873 .name = "gcc_sdcc1_ice_core_clk", 1874 .parent_hws = (const struct clk_hw*[]){ 1875 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 1876 }, 1877 .num_parents = 1, 1878 .flags = CLK_SET_RATE_PARENT, 1879 .ops = &clk_branch2_ops, 1880 }, 1881 }, 1882 }; 1883 1884 static struct clk_branch gcc_sdcc2_ahb_clk = { 1885 .halt_reg = 0x20008, 1886 .halt_check = BRANCH_HALT, 1887 .clkr = { 1888 .enable_reg = 0x20008, 1889 .enable_mask = BIT(0), 1890 .hw.init = &(struct clk_init_data){ 1891 .name = "gcc_sdcc2_ahb_clk", 1892 .ops = &clk_branch2_ops, 1893 }, 1894 }, 1895 }; 1896 1897 static struct clk_branch gcc_sdcc2_apps_clk = { 1898 .halt_reg = 0x20004, 1899 .halt_check = BRANCH_HALT, 1900 .clkr = { 1901 .enable_reg = 0x20004, 1902 .enable_mask = BIT(0), 1903 .hw.init = &(struct clk_init_data){ 1904 .name = "gcc_sdcc2_apps_clk", 1905 .parent_hws = (const struct clk_hw*[]){ 1906 &gcc_sdcc2_apps_clk_src.clkr.hw, 1907 }, 1908 .num_parents = 1, 1909 .flags = CLK_SET_RATE_PARENT, 1910 .ops = &clk_branch2_ops, 1911 }, 1912 }, 1913 }; 1914 1915 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 1916 .halt_reg = 0x10140, 1917 .halt_check = BRANCH_HALT_VOTED, 1918 .hwcg_reg = 0x10140, 1919 .hwcg_bit = 1, 1920 .clkr = { 1921 .enable_reg = 0x52000, 1922 .enable_mask = BIT(0), 1923 .hw.init = &(struct clk_init_data){ 1924 .name = "gcc_sys_noc_cpuss_ahb_clk", 1925 .parent_hws = (const struct clk_hw*[]){ 1926 &gcc_cpuss_ahb_clk_src.clkr.hw, 1927 }, 1928 .num_parents = 1, 1929 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1930 .ops = &clk_branch2_ops, 1931 }, 1932 }, 1933 }; 1934 1935 static struct clk_branch gcc_ufs_mem_clkref_clk = { 1936 .halt_reg = 0x8c000, 1937 .halt_check = BRANCH_HALT, 1938 .clkr = { 1939 .enable_reg = 0x8c000, 1940 .enable_mask = BIT(0), 1941 .hw.init = &(struct clk_init_data){ 1942 .name = "gcc_ufs_mem_clkref_clk", 1943 .ops = &clk_branch2_ops, 1944 }, 1945 }, 1946 }; 1947 1948 static struct clk_branch gcc_ufs_phy_ahb_clk = { 1949 .halt_reg = 0x3a00c, 1950 .halt_check = BRANCH_HALT, 1951 .hwcg_reg = 0x3a00c, 1952 .hwcg_bit = 1, 1953 .clkr = { 1954 .enable_reg = 0x3a00c, 1955 .enable_mask = BIT(0), 1956 .hw.init = &(struct clk_init_data){ 1957 .name = "gcc_ufs_phy_ahb_clk", 1958 .ops = &clk_branch2_ops, 1959 }, 1960 }, 1961 }; 1962 1963 static struct clk_branch gcc_ufs_phy_axi_clk = { 1964 .halt_reg = 0x3a034, 1965 .halt_check = BRANCH_HALT, 1966 .hwcg_reg = 0x3a034, 1967 .hwcg_bit = 1, 1968 .clkr = { 1969 .enable_reg = 0x3a034, 1970 .enable_mask = BIT(0), 1971 .hw.init = &(struct clk_init_data){ 1972 .name = "gcc_ufs_phy_axi_clk", 1973 .parent_hws = (const struct clk_hw*[]){ 1974 &gcc_ufs_phy_axi_clk_src.clkr.hw, 1975 }, 1976 .num_parents = 1, 1977 .flags = CLK_SET_RATE_PARENT, 1978 .ops = &clk_branch2_ops, 1979 }, 1980 }, 1981 }; 1982 1983 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 1984 .halt_reg = 0x3a0a4, 1985 .halt_check = BRANCH_HALT, 1986 .hwcg_reg = 0x3a0a4, 1987 .hwcg_bit = 1, 1988 .clkr = { 1989 .enable_reg = 0x3a0a4, 1990 .enable_mask = BIT(0), 1991 .hw.init = &(struct clk_init_data){ 1992 .name = "gcc_ufs_phy_ice_core_clk", 1993 .parent_hws = (const struct clk_hw*[]){ 1994 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 1995 }, 1996 .num_parents = 1, 1997 .flags = CLK_SET_RATE_PARENT, 1998 .ops = &clk_branch2_ops, 1999 }, 2000 }, 2001 }; 2002 2003 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 2004 .halt_reg = 0x3a0a4, 2005 .halt_check = BRANCH_HALT, 2006 .hwcg_reg = 0x3a0a4, 2007 .hwcg_bit = 1, 2008 .clkr = { 2009 .enable_reg = 0x3a0a4, 2010 .enable_mask = BIT(1), 2011 .hw.init = &(struct clk_init_data){ 2012 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 2013 .parent_hws = (const struct clk_hw*[]){ 2014 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2015 }, 2016 .num_parents = 1, 2017 .flags = CLK_SET_RATE_PARENT, 2018 .ops = &clk_branch2_ops, 2019 }, 2020 }, 2021 }; 2022 2023 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2024 .halt_reg = 0x3a0ac, 2025 .halt_check = BRANCH_HALT, 2026 .hwcg_reg = 0x3a0ac, 2027 .hwcg_bit = 1, 2028 .clkr = { 2029 .enable_reg = 0x3a0ac, 2030 .enable_mask = BIT(0), 2031 .hw.init = &(struct clk_init_data){ 2032 .name = "gcc_ufs_phy_phy_aux_clk", 2033 .parent_hws = (const struct clk_hw*[]){ 2034 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2035 }, 2036 .num_parents = 1, 2037 .flags = CLK_SET_RATE_PARENT, 2038 .ops = &clk_branch2_ops, 2039 }, 2040 }, 2041 }; 2042 2043 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 2044 .halt_reg = 0x3a0ac, 2045 .halt_check = BRANCH_HALT, 2046 .hwcg_reg = 0x3a0ac, 2047 .hwcg_bit = 1, 2048 .clkr = { 2049 .enable_reg = 0x3a0ac, 2050 .enable_mask = BIT(1), 2051 .hw.init = &(struct clk_init_data){ 2052 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 2053 .parent_hws = (const struct clk_hw*[]){ 2054 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2055 }, 2056 .num_parents = 1, 2057 .flags = CLK_SET_RATE_PARENT, 2058 .ops = &clk_branch2_ops, 2059 }, 2060 }, 2061 }; 2062 2063 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2064 .halt_reg = 0x3a014, 2065 .halt_check = BRANCH_HALT_SKIP, 2066 .clkr = { 2067 .enable_reg = 0x3a014, 2068 .enable_mask = BIT(0), 2069 .hw.init = &(struct clk_init_data){ 2070 .name = "gcc_ufs_phy_rx_symbol_0_clk", 2071 .ops = &clk_branch2_ops, 2072 }, 2073 }, 2074 }; 2075 2076 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 2077 .halt_reg = 0x3a018, 2078 .halt_check = BRANCH_HALT_SKIP, 2079 .clkr = { 2080 .enable_reg = 0x3a018, 2081 .enable_mask = BIT(0), 2082 .hw.init = &(struct clk_init_data){ 2083 .name = "gcc_ufs_phy_rx_symbol_1_clk", 2084 .ops = &clk_branch2_ops, 2085 }, 2086 }, 2087 }; 2088 2089 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2090 .halt_reg = 0x3a010, 2091 .halt_check = BRANCH_HALT_SKIP, 2092 .clkr = { 2093 .enable_reg = 0x3a010, 2094 .enable_mask = BIT(0), 2095 .hw.init = &(struct clk_init_data){ 2096 .name = "gcc_ufs_phy_tx_symbol_0_clk", 2097 .ops = &clk_branch2_ops, 2098 }, 2099 }, 2100 }; 2101 2102 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2103 .halt_reg = 0x3a09c, 2104 .halt_check = BRANCH_HALT, 2105 .hwcg_reg = 0x3a09c, 2106 .hwcg_bit = 1, 2107 .clkr = { 2108 .enable_reg = 0x3a09c, 2109 .enable_mask = BIT(0), 2110 .hw.init = &(struct clk_init_data){ 2111 .name = "gcc_ufs_phy_unipro_core_clk", 2112 .parent_hws = (const struct clk_hw*[]){ 2113 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2114 }, 2115 .num_parents = 1, 2116 .flags = CLK_SET_RATE_PARENT, 2117 .ops = &clk_branch2_ops, 2118 }, 2119 }, 2120 }; 2121 2122 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 2123 .halt_reg = 0x3a09c, 2124 .halt_check = BRANCH_HALT, 2125 .hwcg_reg = 0x3a09c, 2126 .hwcg_bit = 1, 2127 .clkr = { 2128 .enable_reg = 0x3a09c, 2129 .enable_mask = BIT(1), 2130 .hw.init = &(struct clk_init_data){ 2131 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 2132 .parent_hws = (const struct clk_hw*[]){ 2133 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2134 }, 2135 .num_parents = 1, 2136 .flags = CLK_SET_RATE_PARENT, 2137 .ops = &clk_branch2_ops, 2138 }, 2139 }, 2140 }; 2141 2142 static struct clk_branch gcc_usb30_prim_master_clk = { 2143 .halt_reg = 0x1a00c, 2144 .halt_check = BRANCH_HALT, 2145 .clkr = { 2146 .enable_reg = 0x1a00c, 2147 .enable_mask = BIT(0), 2148 .hw.init = &(struct clk_init_data){ 2149 .name = "gcc_usb30_prim_master_clk", 2150 .parent_hws = (const struct clk_hw*[]){ 2151 &gcc_usb30_prim_master_clk_src.clkr.hw, 2152 }, 2153 .num_parents = 1, 2154 .flags = CLK_SET_RATE_PARENT, 2155 .ops = &clk_branch2_ops, 2156 }, 2157 }, 2158 }; 2159 2160 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2161 .halt_reg = 0x1a018, 2162 .halt_check = BRANCH_HALT, 2163 .clkr = { 2164 .enable_reg = 0x1a018, 2165 .enable_mask = BIT(0), 2166 .hw.init = &(struct clk_init_data){ 2167 .name = "gcc_usb30_prim_mock_utmi_clk", 2168 .parent_hws = (const struct clk_hw*[]){ 2169 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 2170 }, 2171 .num_parents = 1, 2172 .flags = CLK_SET_RATE_PARENT, 2173 .ops = &clk_branch2_ops, 2174 }, 2175 }, 2176 }; 2177 2178 static struct clk_branch gcc_usb30_prim_sleep_clk = { 2179 .halt_reg = 0x1a014, 2180 .halt_check = BRANCH_HALT, 2181 .clkr = { 2182 .enable_reg = 0x1a014, 2183 .enable_mask = BIT(0), 2184 .hw.init = &(struct clk_init_data){ 2185 .name = "gcc_usb30_prim_sleep_clk", 2186 .ops = &clk_branch2_ops, 2187 }, 2188 }, 2189 }; 2190 2191 static struct clk_branch gcc_usb3_prim_clkref_clk = { 2192 .halt_reg = 0x8c010, 2193 .halt_check = BRANCH_HALT, 2194 .clkr = { 2195 .enable_reg = 0x8c010, 2196 .enable_mask = BIT(0), 2197 .hw.init = &(struct clk_init_data){ 2198 .name = "gcc_usb3_prim_clkref_clk", 2199 .ops = &clk_branch2_ops, 2200 }, 2201 }, 2202 }; 2203 2204 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2205 .halt_reg = 0x1a050, 2206 .halt_check = BRANCH_HALT, 2207 .clkr = { 2208 .enable_reg = 0x1a050, 2209 .enable_mask = BIT(0), 2210 .hw.init = &(struct clk_init_data){ 2211 .name = "gcc_usb3_prim_phy_aux_clk", 2212 .parent_hws = (const struct clk_hw*[]){ 2213 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2214 }, 2215 .num_parents = 1, 2216 .flags = CLK_SET_RATE_PARENT, 2217 .ops = &clk_branch2_ops, 2218 }, 2219 }, 2220 }; 2221 2222 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2223 .halt_reg = 0x1a054, 2224 .halt_check = BRANCH_HALT, 2225 .clkr = { 2226 .enable_reg = 0x1a054, 2227 .enable_mask = BIT(0), 2228 .hw.init = &(struct clk_init_data){ 2229 .name = "gcc_usb3_prim_phy_com_aux_clk", 2230 .parent_hws = (const struct clk_hw*[]){ 2231 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2232 }, 2233 .num_parents = 1, 2234 .flags = CLK_SET_RATE_PARENT, 2235 .ops = &clk_branch2_ops, 2236 }, 2237 }, 2238 }; 2239 2240 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2241 .halt_reg = 0x1a058, 2242 .halt_check = BRANCH_HALT_SKIP, 2243 .hwcg_reg = 0x1a058, 2244 .hwcg_bit = 1, 2245 .clkr = { 2246 .enable_reg = 0x1a058, 2247 .enable_mask = BIT(0), 2248 .hw.init = &(struct clk_init_data){ 2249 .name = "gcc_usb3_prim_phy_pipe_clk", 2250 .ops = &clk_branch2_ops, 2251 }, 2252 }, 2253 }; 2254 2255 static struct clk_branch gcc_video_ahb_clk = { 2256 .halt_reg = 0x17004, 2257 .halt_check = BRANCH_HALT, 2258 .hwcg_reg = 0x17004, 2259 .hwcg_bit = 1, 2260 .clkr = { 2261 .enable_reg = 0x17004, 2262 .enable_mask = BIT(0), 2263 .hw.init = &(struct clk_init_data){ 2264 .name = "gcc_video_ahb_clk", 2265 .flags = CLK_IS_CRITICAL, 2266 .ops = &clk_branch2_ops, 2267 }, 2268 }, 2269 }; 2270 2271 static struct clk_branch gcc_video_axi_clk = { 2272 .halt_reg = 0x17014, 2273 .halt_check = BRANCH_HALT, 2274 .hwcg_reg = 0x17014, 2275 .hwcg_bit = 1, 2276 .clkr = { 2277 .enable_reg = 0x17014, 2278 .enable_mask = BIT(0), 2279 .hw.init = &(struct clk_init_data){ 2280 .name = "gcc_video_axi_clk", 2281 .ops = &clk_branch2_ops, 2282 }, 2283 }, 2284 }; 2285 2286 static struct clk_branch gcc_video_throttle_axi_clk = { 2287 .halt_reg = 0x17020, 2288 .halt_check = BRANCH_HALT, 2289 .hwcg_reg = 0x17020, 2290 .hwcg_bit = 1, 2291 .clkr = { 2292 .enable_reg = 0x17020, 2293 .enable_mask = BIT(0), 2294 .hw.init = &(struct clk_init_data){ 2295 .name = "gcc_video_throttle_axi_clk", 2296 .ops = &clk_branch2_ops, 2297 }, 2298 }, 2299 }; 2300 2301 static struct clk_branch gcc_video_xo_clk = { 2302 .halt_reg = 0x1702c, 2303 .halt_check = BRANCH_HALT, 2304 .clkr = { 2305 .enable_reg = 0x1702c, 2306 .enable_mask = BIT(0), 2307 .hw.init = &(struct clk_init_data){ 2308 .name = "gcc_video_xo_clk", 2309 .flags = CLK_IS_CRITICAL, 2310 .ops = &clk_branch2_ops, 2311 }, 2312 }, 2313 }; 2314 2315 static struct gdsc usb30_prim_gdsc = { 2316 .gdscr = 0x1a004, 2317 .pd = { 2318 .name = "usb30_prim_gdsc", 2319 }, 2320 .pwrsts = PWRSTS_RET_ON, 2321 }; 2322 2323 static struct gdsc ufs_phy_gdsc = { 2324 .gdscr = 0x3a004, 2325 .pd = { 2326 .name = "ufs_phy_gdsc", 2327 }, 2328 .pwrsts = PWRSTS_OFF_ON, 2329 }; 2330 2331 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = { 2332 .gdscr = 0xb7040, 2333 .pd = { 2334 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc", 2335 }, 2336 .pwrsts = PWRSTS_OFF_ON, 2337 .flags = VOTABLE, 2338 }; 2339 2340 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = { 2341 .gdscr = 0xb7044, 2342 .pd = { 2343 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc", 2344 }, 2345 .pwrsts = PWRSTS_OFF_ON, 2346 .flags = VOTABLE, 2347 }; 2348 2349 static struct clk_regmap *gcc_sm6350_clocks[] = { 2350 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 2351 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 2352 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2353 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 2354 [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr, 2355 [GCC_CAMERA_THROTTLE_NRT_AXI_CLK] = 2356 &gcc_camera_throttle_nrt_axi_clk.clkr, 2357 [GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr, 2358 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 2359 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr, 2360 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr, 2361 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr, 2362 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2363 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 2364 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 2365 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 2366 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 2367 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 2368 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 2369 [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr, 2370 [GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr, 2371 [GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr, 2372 [GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr, 2373 [GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr, 2374 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 2375 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2376 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2377 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2378 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2379 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2380 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2381 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 2382 [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, 2383 [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, 2384 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 2385 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 2386 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 2387 [GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr, 2388 [GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr, 2389 [GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr, 2390 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 2391 [GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr, 2392 [GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr, 2393 [GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr, 2394 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2395 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2396 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2397 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2398 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 2399 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2400 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2401 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2402 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2403 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2404 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2405 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2406 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2407 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2408 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2409 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2410 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2411 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 2412 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 2413 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2414 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2415 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2416 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2417 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2418 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2419 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2420 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2421 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2422 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2423 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2424 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2425 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 2426 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 2427 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2428 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2429 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2430 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2431 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2432 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2433 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 2434 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2435 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 2436 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2437 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2438 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 2439 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 2440 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 2441 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 2442 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 2443 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 2444 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 2445 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 2446 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 2447 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 2448 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 2449 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 2450 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 2451 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 2452 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 2453 &gcc_ufs_phy_unipro_core_clk_src.clkr, 2454 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2455 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2456 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2457 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 2458 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2459 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2460 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 2461 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2462 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2463 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2464 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2465 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 2466 [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr, 2467 [GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr, 2468 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 2469 [GPLL0] = &gpll0.clkr, 2470 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 2471 [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr, 2472 [GPLL6] = &gpll6.clkr, 2473 [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr, 2474 [GPLL7] = &gpll7.clkr, 2475 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 2476 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 2477 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 2478 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 2479 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 2480 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 2481 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 2482 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 2483 [GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr, 2484 [GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr, 2485 }; 2486 2487 static struct gdsc *gcc_sm6350_gdscs[] = { 2488 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 2489 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 2490 [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc, 2491 [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc, 2492 }; 2493 2494 static const struct qcom_reset_map gcc_sm6350_resets[] = { 2495 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 }, 2496 [GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 }, 2497 [GCC_SDCC1_BCR] = { 0x4b000 }, 2498 [GCC_SDCC2_BCR] = { 0x20000 }, 2499 [GCC_UFS_PHY_BCR] = { 0x3a000 }, 2500 [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 2501 [GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 }, 2502 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 }, 2503 }; 2504 2505 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 2506 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2507 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2508 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2509 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2510 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2511 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 2512 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2513 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2514 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2515 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2516 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2517 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 2518 }; 2519 2520 static const struct regmap_config gcc_sm6350_regmap_config = { 2521 .reg_bits = 32, 2522 .reg_stride = 4, 2523 .val_bits = 32, 2524 .max_register = 0xbf030, 2525 .fast_io = true, 2526 }; 2527 2528 static const struct qcom_cc_desc gcc_sm6350_desc = { 2529 .config = &gcc_sm6350_regmap_config, 2530 .clks = gcc_sm6350_clocks, 2531 .num_clks = ARRAY_SIZE(gcc_sm6350_clocks), 2532 .resets = gcc_sm6350_resets, 2533 .num_resets = ARRAY_SIZE(gcc_sm6350_resets), 2534 .gdscs = gcc_sm6350_gdscs, 2535 .num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs), 2536 }; 2537 2538 static const struct of_device_id gcc_sm6350_match_table[] = { 2539 { .compatible = "qcom,gcc-sm6350" }, 2540 { } 2541 }; 2542 MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table); 2543 2544 static int gcc_sm6350_probe(struct platform_device *pdev) 2545 { 2546 struct regmap *regmap; 2547 int ret; 2548 2549 regmap = qcom_cc_map(pdev, &gcc_sm6350_desc); 2550 if (IS_ERR(regmap)) 2551 return PTR_ERR(regmap); 2552 2553 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 2554 regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3); 2555 regmap_update_bits(regmap, 0x45f00, 0x3, 0x3); 2556 2557 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 2558 ARRAY_SIZE(gcc_dfs_clocks)); 2559 if (ret) 2560 return ret; 2561 2562 return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap); 2563 } 2564 2565 static struct platform_driver gcc_sm6350_driver = { 2566 .probe = gcc_sm6350_probe, 2567 .driver = { 2568 .name = "gcc-sm6350", 2569 .of_match_table = gcc_sm6350_match_table, 2570 }, 2571 }; 2572 2573 static int __init gcc_sm6350_init(void) 2574 { 2575 return platform_driver_register(&gcc_sm6350_driver); 2576 } 2577 core_initcall(gcc_sm6350_init); 2578 2579 static void __exit gcc_sm6350_exit(void) 2580 { 2581 platform_driver_unregister(&gcc_sm6350_driver); 2582 } 2583 module_exit(gcc_sm6350_exit); 2584 2585 MODULE_DESCRIPTION("QTI GCC SM6350 Driver"); 2586 MODULE_LICENSE("GPL v2"); 2587