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 .ops = &clk_rcg2_floor_ops, 645 }, 646 }; 647 648 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 649 F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0), 650 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0), 651 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0), 652 F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0), 653 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 654 { } 655 }; 656 657 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 658 .cmd_rcgr = 0x3a01c, 659 .mnd_width = 8, 660 .hid_width = 5, 661 .parent_map = gcc_parent_map_4, 662 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 663 .clkr.hw.init = &(struct clk_init_data){ 664 .name = "gcc_ufs_phy_axi_clk_src", 665 .parent_data = gcc_parent_data_4, 666 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 667 .ops = &clk_rcg2_ops, 668 }, 669 }; 670 671 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 672 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 673 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 674 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 675 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0), 676 { } 677 }; 678 679 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 680 .cmd_rcgr = 0x3a048, 681 .mnd_width = 0, 682 .hid_width = 5, 683 .parent_map = gcc_parent_map_1, 684 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 685 .clkr.hw.init = &(struct clk_init_data){ 686 .name = "gcc_ufs_phy_ice_core_clk_src", 687 .parent_data = gcc_parent_data_1, 688 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 689 .ops = &clk_rcg2_ops, 690 }, 691 }; 692 693 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 694 F(9600000, P_BI_TCXO, 2, 0, 0), 695 F(19200000, P_BI_TCXO, 1, 0, 0), 696 { } 697 }; 698 699 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 700 .cmd_rcgr = 0x3a0b0, 701 .mnd_width = 0, 702 .hid_width = 5, 703 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 704 .clkr.hw.init = &(struct clk_init_data){ 705 .name = "gcc_ufs_phy_phy_aux_clk_src", 706 .parent_data = &(const struct clk_parent_data){ 707 .fw_name = "bi_tcxo", 708 }, 709 .num_parents = 1, 710 .ops = &clk_rcg2_ops, 711 }, 712 }; 713 714 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 715 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 716 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 717 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 718 { } 719 }; 720 721 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 722 .cmd_rcgr = 0x3a060, 723 .mnd_width = 0, 724 .hid_width = 5, 725 .parent_map = gcc_parent_map_1, 726 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 727 .clkr.hw.init = &(struct clk_init_data){ 728 .name = "gcc_ufs_phy_unipro_core_clk_src", 729 .parent_data = gcc_parent_data_1, 730 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 731 .ops = &clk_rcg2_ops, 732 }, 733 }; 734 735 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 736 F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0), 737 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 738 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 739 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 740 { } 741 }; 742 743 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 744 .cmd_rcgr = 0x1a01c, 745 .mnd_width = 8, 746 .hid_width = 5, 747 .parent_map = gcc_parent_map_4, 748 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 749 .clkr.hw.init = &(struct clk_init_data){ 750 .name = "gcc_usb30_prim_master_clk_src", 751 .parent_data = gcc_parent_data_4, 752 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 753 .ops = &clk_rcg2_ops, 754 }, 755 }; 756 757 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 758 F(19200000, P_BI_TCXO, 1, 0, 0), 759 { } 760 }; 761 762 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 763 .cmd_rcgr = 0x1a034, 764 .mnd_width = 0, 765 .hid_width = 5, 766 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 767 .clkr.hw.init = &(struct clk_init_data){ 768 .name = "gcc_usb30_prim_mock_utmi_clk_src", 769 .parent_data = &(const struct clk_parent_data){ 770 .fw_name = "bi_tcxo", 771 }, 772 .num_parents = 1, 773 .ops = &clk_rcg2_ops, 774 }, 775 }; 776 777 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 778 .cmd_rcgr = 0x1a060, 779 .mnd_width = 0, 780 .hid_width = 5, 781 .parent_map = gcc_parent_map_6, 782 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 783 .clkr.hw.init = &(struct clk_init_data){ 784 .name = "gcc_usb3_prim_phy_aux_clk_src", 785 .parent_data = gcc_parent_data_6, 786 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 787 .ops = &clk_rcg2_ops, 788 }, 789 }; 790 791 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 792 .halt_reg = 0x3e014, 793 .halt_check = BRANCH_HALT_DELAY, 794 .hwcg_reg = 0x3e014, 795 .hwcg_bit = 1, 796 .clkr = { 797 .enable_reg = 0x3e014, 798 .enable_mask = BIT(0), 799 .hw.init = &(struct clk_init_data){ 800 .name = "gcc_aggre_ufs_phy_axi_clk", 801 .parent_hws = (const struct clk_hw*[]){ 802 &gcc_ufs_phy_axi_clk_src.clkr.hw, 803 }, 804 .num_parents = 1, 805 .flags = CLK_SET_RATE_PARENT, 806 .ops = &clk_branch2_ops, 807 }, 808 }, 809 }; 810 811 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 812 .halt_reg = 0x3e014, 813 .halt_check = BRANCH_HALT, 814 .hwcg_reg = 0x3e014, 815 .hwcg_bit = 1, 816 .clkr = { 817 .enable_reg = 0x3e014, 818 .enable_mask = BIT(1), 819 .hw.init = &(struct clk_init_data){ 820 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 821 .parent_hws = (const struct clk_hw*[]){ 822 &gcc_ufs_phy_axi_clk_src.clkr.hw, 823 }, 824 .num_parents = 1, 825 .flags = CLK_SET_RATE_PARENT, 826 .ops = &clk_branch2_ops, 827 }, 828 }, 829 }; 830 831 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 832 .halt_reg = 0x3e014, 833 .halt_check = BRANCH_HALT, 834 .hwcg_reg = 0x3e014, 835 .hwcg_bit = 1, 836 .clkr = { 837 .enable_reg = 0x3e014, 838 .enable_mask = BIT(1), 839 .hw.init = &(struct clk_init_data){ 840 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 841 .parent_hws = (const struct clk_hw*[]){ 842 &gcc_ufs_phy_axi_clk_src.clkr.hw, 843 }, 844 .num_parents = 1, 845 .flags = CLK_SET_RATE_PARENT, 846 .ops = &clk_branch2_ops, 847 }, 848 }, 849 }; 850 851 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 852 .halt_reg = 0x3e010, 853 .halt_check = BRANCH_HALT, 854 .hwcg_reg = 0x3e010, 855 .hwcg_bit = 1, 856 .clkr = { 857 .enable_reg = 0x3e010, 858 .enable_mask = BIT(0), 859 .hw.init = &(struct clk_init_data){ 860 .name = "gcc_aggre_usb3_prim_axi_clk", 861 .parent_hws = (const struct clk_hw*[]){ 862 &gcc_usb30_prim_master_clk_src.clkr.hw, 863 }, 864 .num_parents = 1, 865 .flags = CLK_SET_RATE_PARENT, 866 .ops = &clk_branch2_ops, 867 }, 868 }, 869 }; 870 871 static struct clk_branch gcc_boot_rom_ahb_clk = { 872 .halt_reg = 0x26004, 873 .halt_check = BRANCH_HALT_VOTED, 874 .hwcg_reg = 0x26004, 875 .hwcg_bit = 1, 876 .clkr = { 877 .enable_reg = 0x52000, 878 .enable_mask = BIT(28), 879 .hw.init = &(struct clk_init_data){ 880 .name = "gcc_boot_rom_ahb_clk", 881 .ops = &clk_branch2_ops, 882 }, 883 }, 884 }; 885 886 static struct clk_branch gcc_camera_ahb_clk = { 887 .halt_reg = 0x17008, 888 .halt_check = BRANCH_HALT, 889 .hwcg_reg = 0x17008, 890 .hwcg_bit = 1, 891 .clkr = { 892 .enable_reg = 0x17008, 893 .enable_mask = BIT(0), 894 .hw.init = &(struct clk_init_data){ 895 .name = "gcc_camera_ahb_clk", 896 .flags = CLK_IS_CRITICAL, 897 .ops = &clk_branch2_ops, 898 }, 899 }, 900 }; 901 902 static struct clk_branch gcc_camera_axi_clk = { 903 .halt_reg = 0x17018, 904 .halt_check = BRANCH_HALT, 905 .hwcg_reg = 0x17018, 906 .hwcg_bit = 1, 907 .clkr = { 908 .enable_reg = 0x17018, 909 .enable_mask = BIT(0), 910 .hw.init = &(struct clk_init_data){ 911 .name = "gcc_camera_axi_clk", 912 .ops = &clk_branch2_ops, 913 }, 914 }, 915 }; 916 917 static struct clk_branch gcc_camera_throttle_nrt_axi_clk = { 918 .halt_reg = 0x17078, 919 .halt_check = BRANCH_VOTED, 920 .hwcg_reg = 0x17078, 921 .hwcg_bit = 1, 922 .clkr = { 923 .enable_reg = 0x17078, 924 .enable_mask = BIT(0), 925 .hw.init = &(struct clk_init_data){ 926 .name = "gcc_camera_throttle_nrt_axi_clk", 927 .ops = &clk_branch2_ops, 928 }, 929 }, 930 }; 931 932 static struct clk_branch gcc_camera_throttle_rt_axi_clk = { 933 .halt_reg = 0x17024, 934 .halt_check = BRANCH_VOTED, 935 .hwcg_reg = 0x17024, 936 .hwcg_bit = 1, 937 .clkr = { 938 .enable_reg = 0x17024, 939 .enable_mask = BIT(0), 940 .hw.init = &(struct clk_init_data){ 941 .name = "gcc_camera_throttle_rt_axi_clk", 942 .ops = &clk_branch2_ops, 943 }, 944 }, 945 }; 946 947 static struct clk_branch gcc_camera_xo_clk = { 948 .halt_reg = 0x17030, 949 .halt_check = BRANCH_HALT, 950 .clkr = { 951 .enable_reg = 0x17030, 952 .enable_mask = BIT(0), 953 .hw.init = &(struct clk_init_data){ 954 .name = "gcc_camera_xo_clk", 955 .flags = CLK_IS_CRITICAL, 956 .ops = &clk_branch2_ops, 957 }, 958 }, 959 }; 960 961 static struct clk_branch gcc_ce1_ahb_clk = { 962 .halt_reg = 0x2b00c, 963 .halt_check = BRANCH_HALT_VOTED, 964 .hwcg_reg = 0x2b00c, 965 .hwcg_bit = 1, 966 .clkr = { 967 .enable_reg = 0x52008, 968 .enable_mask = BIT(3), 969 .hw.init = &(struct clk_init_data){ 970 .name = "gcc_ce1_ahb_clk", 971 .ops = &clk_branch2_ops, 972 }, 973 }, 974 }; 975 976 static struct clk_branch gcc_ce1_axi_clk = { 977 .halt_reg = 0x2b008, 978 .halt_check = BRANCH_HALT_VOTED, 979 .clkr = { 980 .enable_reg = 0x52008, 981 .enable_mask = BIT(2), 982 .hw.init = &(struct clk_init_data){ 983 .name = "gcc_ce1_axi_clk", 984 .ops = &clk_branch2_ops, 985 }, 986 }, 987 }; 988 989 static struct clk_branch gcc_ce1_clk = { 990 .halt_reg = 0x2b004, 991 .halt_check = BRANCH_HALT_VOTED, 992 .clkr = { 993 .enable_reg = 0x52008, 994 .enable_mask = BIT(1), 995 .hw.init = &(struct clk_init_data){ 996 .name = "gcc_ce1_clk", 997 .ops = &clk_branch2_ops, 998 }, 999 }, 1000 }; 1001 1002 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1003 .halt_reg = 0x1101c, 1004 .halt_check = BRANCH_HALT, 1005 .hwcg_reg = 0x1101c, 1006 .hwcg_bit = 1, 1007 .clkr = { 1008 .enable_reg = 0x1101c, 1009 .enable_mask = BIT(0), 1010 .hw.init = &(struct clk_init_data){ 1011 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1012 .parent_hws = (const struct clk_hw*[]){ 1013 &gcc_usb30_prim_master_clk_src.clkr.hw, 1014 }, 1015 .num_parents = 1, 1016 .flags = CLK_SET_RATE_PARENT, 1017 .ops = &clk_branch2_ops, 1018 }, 1019 }, 1020 }; 1021 1022 static struct clk_branch gcc_cpuss_ahb_clk = { 1023 .halt_reg = 0x30000, 1024 .halt_check = BRANCH_HALT_VOTED, 1025 .hwcg_reg = 0x30000, 1026 .hwcg_bit = 1, 1027 .clkr = { 1028 .enable_reg = 0x52008, 1029 .enable_mask = BIT(4), 1030 .hw.init = &(struct clk_init_data){ 1031 .name = "gcc_cpuss_ahb_clk", 1032 .parent_hws = (const struct clk_hw*[]){ 1033 &gcc_cpuss_ahb_clk_src.clkr.hw, 1034 }, 1035 .num_parents = 1, 1036 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1037 .ops = &clk_branch2_ops, 1038 }, 1039 }, 1040 }; 1041 1042 static struct clk_branch gcc_cpuss_gnoc_clk = { 1043 .halt_reg = 0x30004, 1044 .halt_check = BRANCH_HALT_VOTED, 1045 .hwcg_reg = 0x30004, 1046 .hwcg_bit = 1, 1047 .clkr = { 1048 .enable_reg = 0x52008, 1049 .enable_mask = BIT(5), 1050 .hw.init = &(struct clk_init_data){ 1051 .name = "gcc_cpuss_gnoc_clk", 1052 .flags = CLK_IS_CRITICAL, 1053 .ops = &clk_branch2_ops, 1054 }, 1055 }, 1056 }; 1057 1058 static struct clk_branch gcc_cpuss_rbcpr_clk = { 1059 .halt_reg = 0x30008, 1060 .halt_check = BRANCH_HALT, 1061 .clkr = { 1062 .enable_reg = 0x30008, 1063 .enable_mask = BIT(0), 1064 .hw.init = &(struct clk_init_data){ 1065 .name = "gcc_cpuss_rbcpr_clk", 1066 .ops = &clk_branch2_ops, 1067 }, 1068 }, 1069 }; 1070 1071 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1072 .halt_reg = 0x2d038, 1073 .halt_check = BRANCH_VOTED, 1074 .hwcg_reg = 0x2d038, 1075 .hwcg_bit = 1, 1076 .clkr = { 1077 .enable_reg = 0x2d038, 1078 .enable_mask = BIT(0), 1079 .hw.init = &(struct clk_init_data){ 1080 .name = "gcc_ddrss_gpu_axi_clk", 1081 .ops = &clk_branch2_ops, 1082 }, 1083 }, 1084 }; 1085 1086 static struct clk_branch gcc_disp_ahb_clk = { 1087 .halt_reg = 0x1700c, 1088 .halt_check = BRANCH_HALT, 1089 .hwcg_reg = 0x1700c, 1090 .hwcg_bit = 1, 1091 .clkr = { 1092 .enable_reg = 0x1700c, 1093 .enable_mask = BIT(0), 1094 .hw.init = &(struct clk_init_data){ 1095 .name = "gcc_disp_ahb_clk", 1096 .flags = CLK_IS_CRITICAL, 1097 .ops = &clk_branch2_ops, 1098 }, 1099 }, 1100 }; 1101 1102 static struct clk_branch gcc_disp_axi_clk = { 1103 .halt_reg = 0x1701c, 1104 .halt_check = BRANCH_HALT, 1105 .hwcg_reg = 0x1701c, 1106 .hwcg_bit = 1, 1107 .clkr = { 1108 .enable_reg = 0x1701c, 1109 .enable_mask = BIT(0), 1110 .hw.init = &(struct clk_init_data){ 1111 .name = "gcc_disp_axi_clk", 1112 .ops = &clk_branch2_ops, 1113 }, 1114 }, 1115 }; 1116 1117 static struct clk_branch gcc_disp_cc_sleep_clk = { 1118 .halt_reg = 0x17074, 1119 .halt_check = BRANCH_HALT_DELAY, 1120 .hwcg_reg = 0x17074, 1121 .hwcg_bit = 1, 1122 .clkr = { 1123 .enable_reg = 0x17074, 1124 .enable_mask = BIT(0), 1125 .hw.init = &(struct clk_init_data){ 1126 .name = "gcc_disp_cc_sleep_clk", 1127 .ops = &clk_branch2_ops, 1128 }, 1129 }, 1130 }; 1131 1132 static struct clk_branch gcc_disp_cc_xo_clk = { 1133 .halt_reg = 0x17070, 1134 .halt_check = BRANCH_HALT, 1135 .hwcg_reg = 0x17070, 1136 .hwcg_bit = 1, 1137 .clkr = { 1138 .enable_reg = 0x17070, 1139 .enable_mask = BIT(0), 1140 .hw.init = &(struct clk_init_data){ 1141 .name = "gcc_disp_cc_xo_clk", 1142 .flags = CLK_IS_CRITICAL, 1143 .ops = &clk_branch2_ops, 1144 }, 1145 }, 1146 }; 1147 1148 static struct clk_branch gcc_disp_gpll0_clk = { 1149 .halt_check = BRANCH_HALT_DELAY, 1150 .clkr = { 1151 .enable_reg = 0x52000, 1152 .enable_mask = BIT(2), 1153 .hw.init = &(struct clk_init_data){ 1154 .name = "gcc_disp_gpll0_clk", 1155 .parent_hws = (const struct clk_hw*[]){ 1156 &gpll0.clkr.hw, 1157 }, 1158 .num_parents = 1, 1159 .ops = &clk_branch2_ops, 1160 }, 1161 }, 1162 }; 1163 1164 static struct clk_branch gcc_disp_throttle_axi_clk = { 1165 .halt_reg = 0x17028, 1166 .halt_check = BRANCH_HALT, 1167 .hwcg_reg = 0x17028, 1168 .hwcg_bit = 1, 1169 .clkr = { 1170 .enable_reg = 0x17028, 1171 .enable_mask = BIT(0), 1172 .hw.init = &(struct clk_init_data){ 1173 .name = "gcc_disp_throttle_axi_clk", 1174 .ops = &clk_branch2_ops, 1175 }, 1176 }, 1177 }; 1178 1179 static struct clk_branch gcc_disp_xo_clk = { 1180 .halt_reg = 0x17034, 1181 .halt_check = BRANCH_HALT, 1182 .clkr = { 1183 .enable_reg = 0x17034, 1184 .enable_mask = BIT(0), 1185 .hw.init = &(struct clk_init_data){ 1186 .name = "gcc_disp_xo_clk", 1187 .ops = &clk_branch2_ops, 1188 }, 1189 }, 1190 }; 1191 1192 static struct clk_branch gcc_gp1_clk = { 1193 .halt_reg = 0x37000, 1194 .halt_check = BRANCH_HALT, 1195 .clkr = { 1196 .enable_reg = 0x37000, 1197 .enable_mask = BIT(0), 1198 .hw.init = &(struct clk_init_data){ 1199 .name = "gcc_gp1_clk", 1200 .parent_hws = (const struct clk_hw*[]){ 1201 &gcc_gp1_clk_src.clkr.hw, 1202 }, 1203 .num_parents = 1, 1204 .flags = CLK_SET_RATE_PARENT, 1205 .ops = &clk_branch2_ops, 1206 }, 1207 }, 1208 }; 1209 1210 static struct clk_branch gcc_gp2_clk = { 1211 .halt_reg = 0x38000, 1212 .halt_check = BRANCH_HALT, 1213 .clkr = { 1214 .enable_reg = 0x38000, 1215 .enable_mask = BIT(0), 1216 .hw.init = &(struct clk_init_data){ 1217 .name = "gcc_gp2_clk", 1218 .parent_hws = (const struct clk_hw*[]){ 1219 &gcc_gp2_clk_src.clkr.hw, 1220 }, 1221 .num_parents = 1, 1222 .flags = CLK_SET_RATE_PARENT, 1223 .ops = &clk_branch2_ops, 1224 }, 1225 }, 1226 }; 1227 1228 static struct clk_branch gcc_gp3_clk = { 1229 .halt_reg = 0x39000, 1230 .halt_check = BRANCH_HALT, 1231 .clkr = { 1232 .enable_reg = 0x39000, 1233 .enable_mask = BIT(0), 1234 .hw.init = &(struct clk_init_data){ 1235 .name = "gcc_gp3_clk", 1236 .parent_hws = (const struct clk_hw*[]){ 1237 &gcc_gp3_clk_src.clkr.hw, 1238 }, 1239 .num_parents = 1, 1240 .flags = CLK_SET_RATE_PARENT, 1241 .ops = &clk_branch2_ops, 1242 }, 1243 }, 1244 }; 1245 1246 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 1247 .halt_reg = 0x45004, 1248 .halt_check = BRANCH_HALT, 1249 .hwcg_reg = 0x45004, 1250 .hwcg_bit = 1, 1251 .clkr = { 1252 .enable_reg = 0x45004, 1253 .enable_mask = BIT(0), 1254 .hw.init = &(struct clk_init_data){ 1255 .name = "gcc_gpu_cfg_ahb_clk", 1256 .flags = CLK_IS_CRITICAL, 1257 .ops = &clk_branch2_ops, 1258 }, 1259 }, 1260 }; 1261 1262 static struct clk_branch gcc_gpu_gpll0_clk = { 1263 .halt_check = BRANCH_HALT_DELAY, 1264 .clkr = { 1265 .enable_reg = 0x52008, 1266 .enable_mask = BIT(7), 1267 .hw.init = &(struct clk_init_data){ 1268 .name = "gcc_gpu_gpll0_clk", 1269 .parent_hws = (const struct clk_hw*[]){ 1270 &gpll0.clkr.hw, 1271 }, 1272 .num_parents = 1, 1273 .ops = &clk_branch2_ops, 1274 }, 1275 }, 1276 }; 1277 1278 static struct clk_branch gcc_gpu_gpll0_div_clk = { 1279 .halt_check = BRANCH_HALT_DELAY, 1280 .clkr = { 1281 .enable_reg = 0x52008, 1282 .enable_mask = BIT(8), 1283 .hw.init = &(struct clk_init_data){ 1284 .name = "gcc_gpu_gpll0_div_clk", 1285 .parent_hws = (const struct clk_hw*[]){ 1286 &gcc_gpu_gpll0_main_div_clk_src.clkr.hw, 1287 }, 1288 .num_parents = 1, 1289 .ops = &clk_branch2_ops, 1290 }, 1291 }, 1292 }; 1293 1294 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1295 .halt_reg = 0x4500c, 1296 .halt_check = BRANCH_VOTED, 1297 .hwcg_reg = 0x4500c, 1298 .hwcg_bit = 1, 1299 .clkr = { 1300 .enable_reg = 0x4500c, 1301 .enable_mask = BIT(0), 1302 .hw.init = &(struct clk_init_data){ 1303 .name = "gcc_gpu_memnoc_gfx_clk", 1304 .ops = &clk_branch2_ops, 1305 }, 1306 }, 1307 }; 1308 1309 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1310 .halt_reg = 0x45014, 1311 .halt_check = BRANCH_HALT, 1312 .hwcg_reg = 0x45014, 1313 .hwcg_bit = 1, 1314 .clkr = { 1315 .enable_reg = 0x45014, 1316 .enable_mask = BIT(0), 1317 .hw.init = &(struct clk_init_data){ 1318 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1319 .ops = &clk_branch2_ops, 1320 }, 1321 }, 1322 }; 1323 1324 static struct clk_branch gcc_npu_axi_clk = { 1325 .halt_reg = 0x4c008, 1326 .halt_check = BRANCH_VOTED, 1327 .hwcg_reg = 0x4c008, 1328 .hwcg_bit = 1, 1329 .clkr = { 1330 .enable_reg = 0x4c008, 1331 .enable_mask = BIT(0), 1332 .hw.init = &(struct clk_init_data){ 1333 .name = "gcc_npu_axi_clk", 1334 .ops = &clk_branch2_ops, 1335 }, 1336 }, 1337 }; 1338 1339 static struct clk_branch gcc_npu_bwmon_axi_clk = { 1340 .halt_reg = 0x4d004, 1341 .halt_check = BRANCH_HALT_DELAY, 1342 .hwcg_reg = 0x4d004, 1343 .hwcg_bit = 1, 1344 .clkr = { 1345 .enable_reg = 0x4d004, 1346 .enable_mask = BIT(0), 1347 .hw.init = &(struct clk_init_data){ 1348 .name = "gcc_npu_bwmon_axi_clk", 1349 .ops = &clk_branch2_ops, 1350 }, 1351 }, 1352 }; 1353 1354 static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = { 1355 .halt_reg = 0x4d008, 1356 .halt_check = BRANCH_HALT, 1357 .clkr = { 1358 .enable_reg = 0x4d008, 1359 .enable_mask = BIT(0), 1360 .hw.init = &(struct clk_init_data){ 1361 .name = "gcc_npu_bwmon_dma_cfg_ahb_clk", 1362 .ops = &clk_branch2_ops, 1363 }, 1364 }, 1365 }; 1366 1367 static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = { 1368 .halt_reg = 0x4d00c, 1369 .halt_check = BRANCH_HALT, 1370 .clkr = { 1371 .enable_reg = 0x4d00c, 1372 .enable_mask = BIT(0), 1373 .hw.init = &(struct clk_init_data){ 1374 .name = "gcc_npu_bwmon_dsp_cfg_ahb_clk", 1375 .ops = &clk_branch2_ops, 1376 }, 1377 }, 1378 }; 1379 1380 static struct clk_branch gcc_npu_cfg_ahb_clk = { 1381 .halt_reg = 0x4c004, 1382 .halt_check = BRANCH_HALT, 1383 .hwcg_reg = 0x4c004, 1384 .hwcg_bit = 1, 1385 .clkr = { 1386 .enable_reg = 0x4c004, 1387 .enable_mask = BIT(0), 1388 .hw.init = &(struct clk_init_data){ 1389 .name = "gcc_npu_cfg_ahb_clk", 1390 .flags = CLK_IS_CRITICAL, 1391 .ops = &clk_branch2_ops, 1392 }, 1393 }, 1394 }; 1395 1396 static struct clk_branch gcc_npu_dma_clk = { 1397 .halt_reg = 0x4c140, 1398 .halt_check = BRANCH_VOTED, 1399 .hwcg_reg = 0x4c140, 1400 .hwcg_bit = 1, 1401 .clkr = { 1402 .enable_reg = 0x4c140, 1403 .enable_mask = BIT(0), 1404 .hw.init = &(struct clk_init_data){ 1405 .name = "gcc_npu_dma_clk", 1406 .ops = &clk_branch2_ops, 1407 }, 1408 }, 1409 }; 1410 1411 static struct clk_branch gcc_npu_gpll0_clk = { 1412 .halt_check = BRANCH_HALT_DELAY, 1413 .clkr = { 1414 .enable_reg = 0x52008, 1415 .enable_mask = BIT(9), 1416 .hw.init = &(struct clk_init_data){ 1417 .name = "gcc_npu_gpll0_clk", 1418 .parent_hws = (const struct clk_hw*[]){ 1419 &gpll0.clkr.hw, 1420 }, 1421 .num_parents = 1, 1422 .ops = &clk_branch2_ops, 1423 }, 1424 }, 1425 }; 1426 1427 static struct clk_branch gcc_npu_gpll0_div_clk = { 1428 .halt_check = BRANCH_HALT_DELAY, 1429 .clkr = { 1430 .enable_reg = 0x52008, 1431 .enable_mask = BIT(10), 1432 .hw.init = &(struct clk_init_data){ 1433 .name = "gcc_npu_gpll0_div_clk", 1434 .parent_hws = (const struct clk_hw*[]){ 1435 &gcc_npu_pll0_main_div_clk_src.clkr.hw, 1436 }, 1437 .num_parents = 1, 1438 .ops = &clk_branch2_ops, 1439 }, 1440 }, 1441 }; 1442 1443 static struct clk_branch gcc_pdm2_clk = { 1444 .halt_reg = 0x2300c, 1445 .halt_check = BRANCH_HALT, 1446 .clkr = { 1447 .enable_reg = 0x2300c, 1448 .enable_mask = BIT(0), 1449 .hw.init = &(struct clk_init_data){ 1450 .name = "gcc_pdm2_clk", 1451 .parent_hws = (const struct clk_hw*[]){ 1452 &gcc_pdm2_clk_src.clkr.hw, 1453 }, 1454 .num_parents = 1, 1455 .flags = CLK_SET_RATE_PARENT, 1456 .ops = &clk_branch2_ops, 1457 }, 1458 }, 1459 }; 1460 1461 static struct clk_branch gcc_pdm_ahb_clk = { 1462 .halt_reg = 0x23004, 1463 .halt_check = BRANCH_HALT, 1464 .hwcg_reg = 0x23004, 1465 .hwcg_bit = 1, 1466 .clkr = { 1467 .enable_reg = 0x23004, 1468 .enable_mask = BIT(0), 1469 .hw.init = &(struct clk_init_data){ 1470 .name = "gcc_pdm_ahb_clk", 1471 .ops = &clk_branch2_ops, 1472 }, 1473 }, 1474 }; 1475 1476 static struct clk_branch gcc_pdm_xo4_clk = { 1477 .halt_reg = 0x23008, 1478 .halt_check = BRANCH_HALT, 1479 .clkr = { 1480 .enable_reg = 0x23008, 1481 .enable_mask = BIT(0), 1482 .hw.init = &(struct clk_init_data){ 1483 .name = "gcc_pdm_xo4_clk", 1484 .ops = &clk_branch2_ops, 1485 }, 1486 }, 1487 }; 1488 1489 static struct clk_branch gcc_prng_ahb_clk = { 1490 .halt_reg = 0x24004, 1491 .halt_check = BRANCH_HALT_VOTED, 1492 .hwcg_reg = 0x24004, 1493 .hwcg_bit = 1, 1494 .clkr = { 1495 .enable_reg = 0x52000, 1496 .enable_mask = BIT(26), 1497 .hw.init = &(struct clk_init_data){ 1498 .name = "gcc_prng_ahb_clk", 1499 .ops = &clk_branch2_ops, 1500 }, 1501 }, 1502 }; 1503 1504 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1505 .halt_reg = 0x21014, 1506 .halt_check = BRANCH_HALT_VOTED, 1507 .clkr = { 1508 .enable_reg = 0x52000, 1509 .enable_mask = BIT(9), 1510 .hw.init = &(struct clk_init_data){ 1511 .name = "gcc_qupv3_wrap0_core_2x_clk", 1512 .ops = &clk_branch2_ops, 1513 }, 1514 }, 1515 }; 1516 1517 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1518 .halt_reg = 0x2100c, 1519 .halt_check = BRANCH_HALT_VOTED, 1520 .clkr = { 1521 .enable_reg = 0x52000, 1522 .enable_mask = BIT(8), 1523 .hw.init = &(struct clk_init_data){ 1524 .name = "gcc_qupv3_wrap0_core_clk", 1525 .ops = &clk_branch2_ops, 1526 }, 1527 }, 1528 }; 1529 1530 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1531 .halt_reg = 0x21144, 1532 .halt_check = BRANCH_HALT_VOTED, 1533 .clkr = { 1534 .enable_reg = 0x52000, 1535 .enable_mask = BIT(10), 1536 .hw.init = &(struct clk_init_data){ 1537 .name = "gcc_qupv3_wrap0_s0_clk", 1538 .parent_hws = (const struct clk_hw*[]){ 1539 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1540 }, 1541 .num_parents = 1, 1542 .flags = CLK_SET_RATE_PARENT, 1543 .ops = &clk_branch2_ops, 1544 }, 1545 }, 1546 }; 1547 1548 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1549 .halt_reg = 0x21274, 1550 .halt_check = BRANCH_HALT_VOTED, 1551 .clkr = { 1552 .enable_reg = 0x52000, 1553 .enable_mask = BIT(11), 1554 .hw.init = &(struct clk_init_data){ 1555 .name = "gcc_qupv3_wrap0_s1_clk", 1556 .parent_hws = (const struct clk_hw*[]){ 1557 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1558 }, 1559 .num_parents = 1, 1560 .flags = CLK_SET_RATE_PARENT, 1561 .ops = &clk_branch2_ops, 1562 }, 1563 }, 1564 }; 1565 1566 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1567 .halt_reg = 0x213a4, 1568 .halt_check = BRANCH_HALT_VOTED, 1569 .clkr = { 1570 .enable_reg = 0x52000, 1571 .enable_mask = BIT(12), 1572 .hw.init = &(struct clk_init_data){ 1573 .name = "gcc_qupv3_wrap0_s2_clk", 1574 .parent_hws = (const struct clk_hw*[]){ 1575 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1576 }, 1577 .num_parents = 1, 1578 .flags = CLK_SET_RATE_PARENT, 1579 .ops = &clk_branch2_ops, 1580 }, 1581 }, 1582 }; 1583 1584 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1585 .halt_reg = 0x214d4, 1586 .halt_check = BRANCH_HALT_VOTED, 1587 .clkr = { 1588 .enable_reg = 0x52000, 1589 .enable_mask = BIT(13), 1590 .hw.init = &(struct clk_init_data){ 1591 .name = "gcc_qupv3_wrap0_s3_clk", 1592 .parent_hws = (const struct clk_hw*[]){ 1593 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1594 }, 1595 .num_parents = 1, 1596 .flags = CLK_SET_RATE_PARENT, 1597 .ops = &clk_branch2_ops, 1598 }, 1599 }, 1600 }; 1601 1602 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1603 .halt_reg = 0x21604, 1604 .halt_check = BRANCH_HALT_VOTED, 1605 .clkr = { 1606 .enable_reg = 0x52000, 1607 .enable_mask = BIT(14), 1608 .hw.init = &(struct clk_init_data){ 1609 .name = "gcc_qupv3_wrap0_s4_clk", 1610 .parent_hws = (const struct clk_hw*[]){ 1611 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1612 }, 1613 .num_parents = 1, 1614 .flags = CLK_SET_RATE_PARENT, 1615 .ops = &clk_branch2_ops, 1616 }, 1617 }, 1618 }; 1619 1620 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 1621 .halt_reg = 0x21734, 1622 .halt_check = BRANCH_HALT_VOTED, 1623 .clkr = { 1624 .enable_reg = 0x52000, 1625 .enable_mask = BIT(15), 1626 .hw.init = &(struct clk_init_data){ 1627 .name = "gcc_qupv3_wrap0_s5_clk", 1628 .parent_hws = (const struct clk_hw*[]){ 1629 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 1630 }, 1631 .num_parents = 1, 1632 .flags = CLK_SET_RATE_PARENT, 1633 .ops = &clk_branch2_ops, 1634 }, 1635 }, 1636 }; 1637 1638 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1639 .halt_reg = 0x22004, 1640 .halt_check = BRANCH_HALT_VOTED, 1641 .clkr = { 1642 .enable_reg = 0x52000, 1643 .enable_mask = BIT(16), 1644 .hw.init = &(struct clk_init_data){ 1645 .name = "gcc_qupv3_wrap1_core_2x_clk", 1646 .ops = &clk_branch2_ops, 1647 }, 1648 }, 1649 }; 1650 1651 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1652 .halt_reg = 0x22008, 1653 .halt_check = BRANCH_HALT_VOTED, 1654 .clkr = { 1655 .enable_reg = 0x52000, 1656 .enable_mask = BIT(17), 1657 .hw.init = &(struct clk_init_data){ 1658 .name = "gcc_qupv3_wrap1_core_clk", 1659 .ops = &clk_branch2_ops, 1660 }, 1661 }, 1662 }; 1663 1664 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1665 .halt_reg = 0x22014, 1666 .halt_check = BRANCH_HALT_VOTED, 1667 .clkr = { 1668 .enable_reg = 0x52000, 1669 .enable_mask = BIT(20), 1670 .hw.init = &(struct clk_init_data){ 1671 .name = "gcc_qupv3_wrap1_s0_clk", 1672 .parent_hws = (const struct clk_hw*[]){ 1673 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1674 }, 1675 .num_parents = 1, 1676 .flags = CLK_SET_RATE_PARENT, 1677 .ops = &clk_branch2_ops, 1678 }, 1679 }, 1680 }; 1681 1682 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1683 .halt_reg = 0x22144, 1684 .halt_check = BRANCH_HALT_VOTED, 1685 .clkr = { 1686 .enable_reg = 0x52000, 1687 .enable_mask = BIT(21), 1688 .hw.init = &(struct clk_init_data){ 1689 .name = "gcc_qupv3_wrap1_s1_clk", 1690 .parent_hws = (const struct clk_hw*[]){ 1691 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1692 }, 1693 .num_parents = 1, 1694 .flags = CLK_SET_RATE_PARENT, 1695 .ops = &clk_branch2_ops, 1696 }, 1697 }, 1698 }; 1699 1700 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1701 .halt_reg = 0x22274, 1702 .halt_check = BRANCH_HALT_VOTED, 1703 .clkr = { 1704 .enable_reg = 0x52000, 1705 .enable_mask = BIT(22), 1706 .hw.init = &(struct clk_init_data){ 1707 .name = "gcc_qupv3_wrap1_s2_clk", 1708 .parent_hws = (const struct clk_hw*[]){ 1709 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1710 }, 1711 .num_parents = 1, 1712 .flags = CLK_SET_RATE_PARENT, 1713 .ops = &clk_branch2_ops, 1714 }, 1715 }, 1716 }; 1717 1718 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1719 .halt_reg = 0x223a4, 1720 .halt_check = BRANCH_HALT_VOTED, 1721 .clkr = { 1722 .enable_reg = 0x52000, 1723 .enable_mask = BIT(23), 1724 .hw.init = &(struct clk_init_data){ 1725 .name = "gcc_qupv3_wrap1_s3_clk", 1726 .parent_hws = (const struct clk_hw*[]){ 1727 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1728 }, 1729 .num_parents = 1, 1730 .flags = CLK_SET_RATE_PARENT, 1731 .ops = &clk_branch2_ops, 1732 }, 1733 }, 1734 }; 1735 1736 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1737 .halt_reg = 0x224d4, 1738 .halt_check = BRANCH_HALT_VOTED, 1739 .clkr = { 1740 .enable_reg = 0x52000, 1741 .enable_mask = BIT(24), 1742 .hw.init = &(struct clk_init_data){ 1743 .name = "gcc_qupv3_wrap1_s4_clk", 1744 .parent_hws = (const struct clk_hw*[]){ 1745 &gcc_qupv3_wrap1_s4_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_qupv3_wrap1_s5_clk = { 1755 .halt_reg = 0x22604, 1756 .halt_check = BRANCH_HALT_VOTED, 1757 .clkr = { 1758 .enable_reg = 0x52000, 1759 .enable_mask = BIT(25), 1760 .hw.init = &(struct clk_init_data){ 1761 .name = "gcc_qupv3_wrap1_s5_clk", 1762 .parent_hws = (const struct clk_hw*[]){ 1763 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 1764 }, 1765 .num_parents = 1, 1766 .flags = CLK_SET_RATE_PARENT, 1767 .ops = &clk_branch2_ops, 1768 }, 1769 }, 1770 }; 1771 1772 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 1773 .halt_reg = 0x21004, 1774 .halt_check = BRANCH_HALT_VOTED, 1775 .hwcg_reg = 0x21004, 1776 .hwcg_bit = 1, 1777 .clkr = { 1778 .enable_reg = 0x52000, 1779 .enable_mask = BIT(6), 1780 .hw.init = &(struct clk_init_data){ 1781 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 1782 .ops = &clk_branch2_ops, 1783 }, 1784 }, 1785 }; 1786 1787 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 1788 .halt_reg = 0x21008, 1789 .halt_check = BRANCH_HALT_VOTED, 1790 .hwcg_reg = 0x21008, 1791 .hwcg_bit = 1, 1792 .clkr = { 1793 .enable_reg = 0x52000, 1794 .enable_mask = BIT(7), 1795 .hw.init = &(struct clk_init_data){ 1796 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 1797 .ops = &clk_branch2_ops, 1798 }, 1799 }, 1800 }; 1801 1802 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 1803 .halt_reg = 0x2200c, 1804 .halt_check = BRANCH_HALT_VOTED, 1805 .hwcg_reg = 0x2200c, 1806 .hwcg_bit = 1, 1807 .clkr = { 1808 .enable_reg = 0x52000, 1809 .enable_mask = BIT(18), 1810 .hw.init = &(struct clk_init_data){ 1811 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 1812 .ops = &clk_branch2_ops, 1813 }, 1814 }, 1815 }; 1816 1817 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 1818 .halt_reg = 0x22010, 1819 .halt_check = BRANCH_HALT_VOTED, 1820 .hwcg_reg = 0x22010, 1821 .hwcg_bit = 1, 1822 .clkr = { 1823 .enable_reg = 0x52000, 1824 .enable_mask = BIT(19), 1825 .hw.init = &(struct clk_init_data){ 1826 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 1827 .ops = &clk_branch2_ops, 1828 }, 1829 }, 1830 }; 1831 1832 static struct clk_branch gcc_sdcc1_ahb_clk = { 1833 .halt_reg = 0x4b004, 1834 .halt_check = BRANCH_HALT, 1835 .clkr = { 1836 .enable_reg = 0x4b004, 1837 .enable_mask = BIT(0), 1838 .hw.init = &(struct clk_init_data){ 1839 .name = "gcc_sdcc1_ahb_clk", 1840 .ops = &clk_branch2_ops, 1841 }, 1842 }, 1843 }; 1844 1845 static struct clk_branch gcc_sdcc1_apps_clk = { 1846 .halt_reg = 0x4b008, 1847 .halt_check = BRANCH_HALT, 1848 .clkr = { 1849 .enable_reg = 0x4b008, 1850 .enable_mask = BIT(0), 1851 .hw.init = &(struct clk_init_data){ 1852 .name = "gcc_sdcc1_apps_clk", 1853 .parent_hws = (const struct clk_hw*[]){ 1854 &gcc_sdcc1_apps_clk_src.clkr.hw, 1855 }, 1856 .num_parents = 1, 1857 .flags = CLK_SET_RATE_PARENT, 1858 .ops = &clk_branch2_ops, 1859 }, 1860 }, 1861 }; 1862 1863 static struct clk_branch gcc_sdcc1_ice_core_clk = { 1864 .halt_reg = 0x4b03c, 1865 .halt_check = BRANCH_HALT, 1866 .hwcg_reg = 0x4b03c, 1867 .hwcg_bit = 1, 1868 .clkr = { 1869 .enable_reg = 0x4b03c, 1870 .enable_mask = BIT(0), 1871 .hw.init = &(struct clk_init_data){ 1872 .name = "gcc_sdcc1_ice_core_clk", 1873 .parent_hws = (const struct clk_hw*[]){ 1874 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 1875 }, 1876 .num_parents = 1, 1877 .flags = CLK_SET_RATE_PARENT, 1878 .ops = &clk_branch2_ops, 1879 }, 1880 }, 1881 }; 1882 1883 static struct clk_branch gcc_sdcc2_ahb_clk = { 1884 .halt_reg = 0x20008, 1885 .halt_check = BRANCH_HALT, 1886 .clkr = { 1887 .enable_reg = 0x20008, 1888 .enable_mask = BIT(0), 1889 .hw.init = &(struct clk_init_data){ 1890 .name = "gcc_sdcc2_ahb_clk", 1891 .ops = &clk_branch2_ops, 1892 }, 1893 }, 1894 }; 1895 1896 static struct clk_branch gcc_sdcc2_apps_clk = { 1897 .halt_reg = 0x20004, 1898 .halt_check = BRANCH_HALT, 1899 .clkr = { 1900 .enable_reg = 0x20004, 1901 .enable_mask = BIT(0), 1902 .hw.init = &(struct clk_init_data){ 1903 .name = "gcc_sdcc2_apps_clk", 1904 .parent_hws = (const struct clk_hw*[]){ 1905 &gcc_sdcc2_apps_clk_src.clkr.hw, 1906 }, 1907 .num_parents = 1, 1908 .flags = CLK_SET_RATE_PARENT, 1909 .ops = &clk_branch2_ops, 1910 }, 1911 }, 1912 }; 1913 1914 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 1915 .halt_reg = 0x10140, 1916 .halt_check = BRANCH_HALT_VOTED, 1917 .hwcg_reg = 0x10140, 1918 .hwcg_bit = 1, 1919 .clkr = { 1920 .enable_reg = 0x52000, 1921 .enable_mask = BIT(0), 1922 .hw.init = &(struct clk_init_data){ 1923 .name = "gcc_sys_noc_cpuss_ahb_clk", 1924 .parent_hws = (const struct clk_hw*[]){ 1925 &gcc_cpuss_ahb_clk_src.clkr.hw, 1926 }, 1927 .num_parents = 1, 1928 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1929 .ops = &clk_branch2_ops, 1930 }, 1931 }, 1932 }; 1933 1934 static struct clk_branch gcc_ufs_mem_clkref_clk = { 1935 .halt_reg = 0x8c000, 1936 .halt_check = BRANCH_HALT, 1937 .clkr = { 1938 .enable_reg = 0x8c000, 1939 .enable_mask = BIT(0), 1940 .hw.init = &(struct clk_init_data){ 1941 .name = "gcc_ufs_mem_clkref_clk", 1942 .ops = &clk_branch2_ops, 1943 }, 1944 }, 1945 }; 1946 1947 static struct clk_branch gcc_ufs_phy_ahb_clk = { 1948 .halt_reg = 0x3a00c, 1949 .halt_check = BRANCH_HALT, 1950 .hwcg_reg = 0x3a00c, 1951 .hwcg_bit = 1, 1952 .clkr = { 1953 .enable_reg = 0x3a00c, 1954 .enable_mask = BIT(0), 1955 .hw.init = &(struct clk_init_data){ 1956 .name = "gcc_ufs_phy_ahb_clk", 1957 .ops = &clk_branch2_ops, 1958 }, 1959 }, 1960 }; 1961 1962 static struct clk_branch gcc_ufs_phy_axi_clk = { 1963 .halt_reg = 0x3a034, 1964 .halt_check = BRANCH_HALT, 1965 .hwcg_reg = 0x3a034, 1966 .hwcg_bit = 1, 1967 .clkr = { 1968 .enable_reg = 0x3a034, 1969 .enable_mask = BIT(0), 1970 .hw.init = &(struct clk_init_data){ 1971 .name = "gcc_ufs_phy_axi_clk", 1972 .parent_hws = (const struct clk_hw*[]){ 1973 &gcc_ufs_phy_axi_clk_src.clkr.hw, 1974 }, 1975 .num_parents = 1, 1976 .flags = CLK_SET_RATE_PARENT, 1977 .ops = &clk_branch2_ops, 1978 }, 1979 }, 1980 }; 1981 1982 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 1983 .halt_reg = 0x3a0a4, 1984 .halt_check = BRANCH_HALT, 1985 .hwcg_reg = 0x3a0a4, 1986 .hwcg_bit = 1, 1987 .clkr = { 1988 .enable_reg = 0x3a0a4, 1989 .enable_mask = BIT(0), 1990 .hw.init = &(struct clk_init_data){ 1991 .name = "gcc_ufs_phy_ice_core_clk", 1992 .parent_hws = (const struct clk_hw*[]){ 1993 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 1994 }, 1995 .num_parents = 1, 1996 .flags = CLK_SET_RATE_PARENT, 1997 .ops = &clk_branch2_ops, 1998 }, 1999 }, 2000 }; 2001 2002 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 2003 .halt_reg = 0x3a0a4, 2004 .halt_check = BRANCH_HALT, 2005 .hwcg_reg = 0x3a0a4, 2006 .hwcg_bit = 1, 2007 .clkr = { 2008 .enable_reg = 0x3a0a4, 2009 .enable_mask = BIT(1), 2010 .hw.init = &(struct clk_init_data){ 2011 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 2012 .parent_hws = (const struct clk_hw*[]){ 2013 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2014 }, 2015 .num_parents = 1, 2016 .flags = CLK_SET_RATE_PARENT, 2017 .ops = &clk_branch2_ops, 2018 }, 2019 }, 2020 }; 2021 2022 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2023 .halt_reg = 0x3a0ac, 2024 .halt_check = BRANCH_HALT, 2025 .hwcg_reg = 0x3a0ac, 2026 .hwcg_bit = 1, 2027 .clkr = { 2028 .enable_reg = 0x3a0ac, 2029 .enable_mask = BIT(0), 2030 .hw.init = &(struct clk_init_data){ 2031 .name = "gcc_ufs_phy_phy_aux_clk", 2032 .parent_hws = (const struct clk_hw*[]){ 2033 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2034 }, 2035 .num_parents = 1, 2036 .flags = CLK_SET_RATE_PARENT, 2037 .ops = &clk_branch2_ops, 2038 }, 2039 }, 2040 }; 2041 2042 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 2043 .halt_reg = 0x3a0ac, 2044 .halt_check = BRANCH_HALT, 2045 .hwcg_reg = 0x3a0ac, 2046 .hwcg_bit = 1, 2047 .clkr = { 2048 .enable_reg = 0x3a0ac, 2049 .enable_mask = BIT(1), 2050 .hw.init = &(struct clk_init_data){ 2051 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 2052 .parent_hws = (const struct clk_hw*[]){ 2053 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2054 }, 2055 .num_parents = 1, 2056 .flags = CLK_SET_RATE_PARENT, 2057 .ops = &clk_branch2_ops, 2058 }, 2059 }, 2060 }; 2061 2062 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2063 .halt_reg = 0x3a014, 2064 .halt_check = BRANCH_HALT_SKIP, 2065 .clkr = { 2066 .enable_reg = 0x3a014, 2067 .enable_mask = BIT(0), 2068 .hw.init = &(struct clk_init_data){ 2069 .name = "gcc_ufs_phy_rx_symbol_0_clk", 2070 .ops = &clk_branch2_ops, 2071 }, 2072 }, 2073 }; 2074 2075 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 2076 .halt_reg = 0x3a018, 2077 .halt_check = BRANCH_HALT_SKIP, 2078 .clkr = { 2079 .enable_reg = 0x3a018, 2080 .enable_mask = BIT(0), 2081 .hw.init = &(struct clk_init_data){ 2082 .name = "gcc_ufs_phy_rx_symbol_1_clk", 2083 .ops = &clk_branch2_ops, 2084 }, 2085 }, 2086 }; 2087 2088 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2089 .halt_reg = 0x3a010, 2090 .halt_check = BRANCH_HALT_SKIP, 2091 .clkr = { 2092 .enable_reg = 0x3a010, 2093 .enable_mask = BIT(0), 2094 .hw.init = &(struct clk_init_data){ 2095 .name = "gcc_ufs_phy_tx_symbol_0_clk", 2096 .ops = &clk_branch2_ops, 2097 }, 2098 }, 2099 }; 2100 2101 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2102 .halt_reg = 0x3a09c, 2103 .halt_check = BRANCH_HALT, 2104 .hwcg_reg = 0x3a09c, 2105 .hwcg_bit = 1, 2106 .clkr = { 2107 .enable_reg = 0x3a09c, 2108 .enable_mask = BIT(0), 2109 .hw.init = &(struct clk_init_data){ 2110 .name = "gcc_ufs_phy_unipro_core_clk", 2111 .parent_hws = (const struct clk_hw*[]){ 2112 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2113 }, 2114 .num_parents = 1, 2115 .flags = CLK_SET_RATE_PARENT, 2116 .ops = &clk_branch2_ops, 2117 }, 2118 }, 2119 }; 2120 2121 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 2122 .halt_reg = 0x3a09c, 2123 .halt_check = BRANCH_HALT, 2124 .hwcg_reg = 0x3a09c, 2125 .hwcg_bit = 1, 2126 .clkr = { 2127 .enable_reg = 0x3a09c, 2128 .enable_mask = BIT(1), 2129 .hw.init = &(struct clk_init_data){ 2130 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 2131 .parent_hws = (const struct clk_hw*[]){ 2132 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2133 }, 2134 .num_parents = 1, 2135 .flags = CLK_SET_RATE_PARENT, 2136 .ops = &clk_branch2_ops, 2137 }, 2138 }, 2139 }; 2140 2141 static struct clk_branch gcc_usb30_prim_master_clk = { 2142 .halt_reg = 0x1a00c, 2143 .halt_check = BRANCH_HALT, 2144 .clkr = { 2145 .enable_reg = 0x1a00c, 2146 .enable_mask = BIT(0), 2147 .hw.init = &(struct clk_init_data){ 2148 .name = "gcc_usb30_prim_master_clk", 2149 .parent_hws = (const struct clk_hw*[]){ 2150 &gcc_usb30_prim_master_clk_src.clkr.hw, 2151 }, 2152 .num_parents = 1, 2153 .flags = CLK_SET_RATE_PARENT, 2154 .ops = &clk_branch2_ops, 2155 }, 2156 }, 2157 }; 2158 2159 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2160 .halt_reg = 0x1a018, 2161 .halt_check = BRANCH_HALT, 2162 .clkr = { 2163 .enable_reg = 0x1a018, 2164 .enable_mask = BIT(0), 2165 .hw.init = &(struct clk_init_data){ 2166 .name = "gcc_usb30_prim_mock_utmi_clk", 2167 .parent_hws = (const struct clk_hw*[]){ 2168 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 2169 }, 2170 .num_parents = 1, 2171 .flags = CLK_SET_RATE_PARENT, 2172 .ops = &clk_branch2_ops, 2173 }, 2174 }, 2175 }; 2176 2177 static struct clk_branch gcc_usb30_prim_sleep_clk = { 2178 .halt_reg = 0x1a014, 2179 .halt_check = BRANCH_HALT, 2180 .clkr = { 2181 .enable_reg = 0x1a014, 2182 .enable_mask = BIT(0), 2183 .hw.init = &(struct clk_init_data){ 2184 .name = "gcc_usb30_prim_sleep_clk", 2185 .ops = &clk_branch2_ops, 2186 }, 2187 }, 2188 }; 2189 2190 static struct clk_branch gcc_usb3_prim_clkref_clk = { 2191 .halt_reg = 0x8c010, 2192 .halt_check = BRANCH_HALT, 2193 .clkr = { 2194 .enable_reg = 0x8c010, 2195 .enable_mask = BIT(0), 2196 .hw.init = &(struct clk_init_data){ 2197 .name = "gcc_usb3_prim_clkref_clk", 2198 .ops = &clk_branch2_ops, 2199 }, 2200 }, 2201 }; 2202 2203 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2204 .halt_reg = 0x1a050, 2205 .halt_check = BRANCH_HALT, 2206 .clkr = { 2207 .enable_reg = 0x1a050, 2208 .enable_mask = BIT(0), 2209 .hw.init = &(struct clk_init_data){ 2210 .name = "gcc_usb3_prim_phy_aux_clk", 2211 .parent_hws = (const struct clk_hw*[]){ 2212 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2213 }, 2214 .num_parents = 1, 2215 .flags = CLK_SET_RATE_PARENT, 2216 .ops = &clk_branch2_ops, 2217 }, 2218 }, 2219 }; 2220 2221 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2222 .halt_reg = 0x1a054, 2223 .halt_check = BRANCH_HALT, 2224 .clkr = { 2225 .enable_reg = 0x1a054, 2226 .enable_mask = BIT(0), 2227 .hw.init = &(struct clk_init_data){ 2228 .name = "gcc_usb3_prim_phy_com_aux_clk", 2229 .parent_hws = (const struct clk_hw*[]){ 2230 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2231 }, 2232 .num_parents = 1, 2233 .flags = CLK_SET_RATE_PARENT, 2234 .ops = &clk_branch2_ops, 2235 }, 2236 }, 2237 }; 2238 2239 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2240 .halt_reg = 0x1a058, 2241 .halt_check = BRANCH_HALT_SKIP, 2242 .hwcg_reg = 0x1a058, 2243 .hwcg_bit = 1, 2244 .clkr = { 2245 .enable_reg = 0x1a058, 2246 .enable_mask = BIT(0), 2247 .hw.init = &(struct clk_init_data){ 2248 .name = "gcc_usb3_prim_phy_pipe_clk", 2249 .ops = &clk_branch2_ops, 2250 }, 2251 }, 2252 }; 2253 2254 static struct clk_branch gcc_video_ahb_clk = { 2255 .halt_reg = 0x17004, 2256 .halt_check = BRANCH_HALT, 2257 .hwcg_reg = 0x17004, 2258 .hwcg_bit = 1, 2259 .clkr = { 2260 .enable_reg = 0x17004, 2261 .enable_mask = BIT(0), 2262 .hw.init = &(struct clk_init_data){ 2263 .name = "gcc_video_ahb_clk", 2264 .flags = CLK_IS_CRITICAL, 2265 .ops = &clk_branch2_ops, 2266 }, 2267 }, 2268 }; 2269 2270 static struct clk_branch gcc_video_axi_clk = { 2271 .halt_reg = 0x17014, 2272 .halt_check = BRANCH_HALT, 2273 .hwcg_reg = 0x17014, 2274 .hwcg_bit = 1, 2275 .clkr = { 2276 .enable_reg = 0x17014, 2277 .enable_mask = BIT(0), 2278 .hw.init = &(struct clk_init_data){ 2279 .name = "gcc_video_axi_clk", 2280 .ops = &clk_branch2_ops, 2281 }, 2282 }, 2283 }; 2284 2285 static struct clk_branch gcc_video_throttle_axi_clk = { 2286 .halt_reg = 0x17020, 2287 .halt_check = BRANCH_HALT, 2288 .hwcg_reg = 0x17020, 2289 .hwcg_bit = 1, 2290 .clkr = { 2291 .enable_reg = 0x17020, 2292 .enable_mask = BIT(0), 2293 .hw.init = &(struct clk_init_data){ 2294 .name = "gcc_video_throttle_axi_clk", 2295 .ops = &clk_branch2_ops, 2296 }, 2297 }, 2298 }; 2299 2300 static struct clk_branch gcc_video_xo_clk = { 2301 .halt_reg = 0x1702c, 2302 .halt_check = BRANCH_HALT, 2303 .clkr = { 2304 .enable_reg = 0x1702c, 2305 .enable_mask = BIT(0), 2306 .hw.init = &(struct clk_init_data){ 2307 .name = "gcc_video_xo_clk", 2308 .flags = CLK_IS_CRITICAL, 2309 .ops = &clk_branch2_ops, 2310 }, 2311 }, 2312 }; 2313 2314 static struct gdsc usb30_prim_gdsc = { 2315 .gdscr = 0x1a004, 2316 .pd = { 2317 .name = "usb30_prim_gdsc", 2318 }, 2319 .pwrsts = PWRSTS_OFF_ON, 2320 }; 2321 2322 static struct gdsc ufs_phy_gdsc = { 2323 .gdscr = 0x3a004, 2324 .pd = { 2325 .name = "ufs_phy_gdsc", 2326 }, 2327 .pwrsts = PWRSTS_OFF_ON, 2328 }; 2329 2330 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = { 2331 .gdscr = 0xb7040, 2332 .pd = { 2333 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc", 2334 }, 2335 .pwrsts = PWRSTS_OFF_ON, 2336 .flags = VOTABLE, 2337 }; 2338 2339 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = { 2340 .gdscr = 0xb7044, 2341 .pd = { 2342 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc", 2343 }, 2344 .pwrsts = PWRSTS_OFF_ON, 2345 .flags = VOTABLE, 2346 }; 2347 2348 static struct clk_regmap *gcc_sm6350_clocks[] = { 2349 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 2350 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 2351 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2352 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 2353 [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr, 2354 [GCC_CAMERA_THROTTLE_NRT_AXI_CLK] = 2355 &gcc_camera_throttle_nrt_axi_clk.clkr, 2356 [GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr, 2357 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 2358 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr, 2359 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr, 2360 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr, 2361 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2362 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 2363 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 2364 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 2365 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 2366 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 2367 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 2368 [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr, 2369 [GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr, 2370 [GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr, 2371 [GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr, 2372 [GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr, 2373 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 2374 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2375 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2376 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2377 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2378 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2379 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2380 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 2381 [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, 2382 [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, 2383 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 2384 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 2385 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 2386 [GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr, 2387 [GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr, 2388 [GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr, 2389 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 2390 [GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr, 2391 [GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr, 2392 [GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr, 2393 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2394 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2395 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2396 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2397 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 2398 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2399 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2400 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2401 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2402 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2403 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2404 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2405 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2406 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2407 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2408 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2409 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2410 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 2411 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 2412 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2413 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2414 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2415 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2416 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2417 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2418 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2419 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2420 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2421 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2422 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2423 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2424 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 2425 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 2426 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2427 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2428 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2429 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2430 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2431 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2432 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 2433 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2434 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 2435 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2436 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2437 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 2438 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 2439 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 2440 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 2441 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 2442 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 2443 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 2444 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 2445 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 2446 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 2447 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 2448 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 2449 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 2450 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 2451 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 2452 &gcc_ufs_phy_unipro_core_clk_src.clkr, 2453 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2454 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2455 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2456 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 2457 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2458 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2459 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 2460 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2461 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2462 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2463 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2464 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 2465 [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr, 2466 [GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr, 2467 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 2468 [GPLL0] = &gpll0.clkr, 2469 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 2470 [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr, 2471 [GPLL6] = &gpll6.clkr, 2472 [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr, 2473 [GPLL7] = &gpll7.clkr, 2474 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 2475 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 2476 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 2477 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 2478 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 2479 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 2480 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 2481 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 2482 [GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr, 2483 [GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr, 2484 }; 2485 2486 static struct gdsc *gcc_sm6350_gdscs[] = { 2487 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 2488 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 2489 [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc, 2490 [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc, 2491 }; 2492 2493 static const struct qcom_reset_map gcc_sm6350_resets[] = { 2494 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 }, 2495 [GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 }, 2496 [GCC_SDCC1_BCR] = { 0x4b000 }, 2497 [GCC_SDCC2_BCR] = { 0x20000 }, 2498 [GCC_UFS_PHY_BCR] = { 0x3a000 }, 2499 [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 2500 [GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 }, 2501 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 }, 2502 }; 2503 2504 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 2505 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2506 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2507 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2508 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2509 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2510 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 2511 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2512 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2513 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2514 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2515 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2516 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 2517 }; 2518 2519 static const struct regmap_config gcc_sm6350_regmap_config = { 2520 .reg_bits = 32, 2521 .reg_stride = 4, 2522 .val_bits = 32, 2523 .max_register = 0xbf030, 2524 .fast_io = true, 2525 }; 2526 2527 static const struct qcom_cc_desc gcc_sm6350_desc = { 2528 .config = &gcc_sm6350_regmap_config, 2529 .clks = gcc_sm6350_clocks, 2530 .num_clks = ARRAY_SIZE(gcc_sm6350_clocks), 2531 .resets = gcc_sm6350_resets, 2532 .num_resets = ARRAY_SIZE(gcc_sm6350_resets), 2533 .gdscs = gcc_sm6350_gdscs, 2534 .num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs), 2535 }; 2536 2537 static const struct of_device_id gcc_sm6350_match_table[] = { 2538 { .compatible = "qcom,gcc-sm6350" }, 2539 { } 2540 }; 2541 MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table); 2542 2543 static int gcc_sm6350_probe(struct platform_device *pdev) 2544 { 2545 struct regmap *regmap; 2546 int ret; 2547 2548 regmap = qcom_cc_map(pdev, &gcc_sm6350_desc); 2549 if (IS_ERR(regmap)) 2550 return PTR_ERR(regmap); 2551 2552 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 2553 regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3); 2554 regmap_update_bits(regmap, 0x45f00, 0x3, 0x3); 2555 2556 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 2557 ARRAY_SIZE(gcc_dfs_clocks)); 2558 if (ret) 2559 return ret; 2560 2561 return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);; 2562 } 2563 2564 static struct platform_driver gcc_sm6350_driver = { 2565 .probe = gcc_sm6350_probe, 2566 .driver = { 2567 .name = "gcc-sm6350", 2568 .of_match_table = gcc_sm6350_match_table, 2569 }, 2570 }; 2571 2572 static int __init gcc_sm6350_init(void) 2573 { 2574 return platform_driver_register(&gcc_sm6350_driver); 2575 } 2576 core_initcall(gcc_sm6350_init); 2577 2578 static void __exit gcc_sm6350_exit(void) 2579 { 2580 platform_driver_unregister(&gcc_sm6350_driver); 2581 } 2582 module_exit(gcc_sm6350_exit); 2583 2584 MODULE_DESCRIPTION("QTI GCC SM6350 Driver"); 2585 MODULE_LICENSE("GPL v2"); 2586