1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org> 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/err.h> 8 #include <linux/module.h> 9 #include <linux/platform_device.h> 10 #include <linux/of.h> 11 #include <linux/of_device.h> 12 #include <linux/clk-provider.h> 13 #include <linux/regmap.h> 14 #include <linux/reset-controller.h> 15 16 #include <dt-bindings/clock/qcom,gcc-sm6125.h> 17 18 #include "clk-alpha-pll.h" 19 #include "clk-branch.h" 20 #include "clk-rcg.h" 21 #include "clk-regmap.h" 22 #include "common.h" 23 #include "gdsc.h" 24 #include "reset.h" 25 26 enum { 27 P_BI_TCXO, 28 P_GPLL0_OUT_AUX2, 29 P_GPLL0_OUT_EARLY, 30 P_GPLL3_OUT_EARLY, 31 P_GPLL4_OUT_MAIN, 32 P_GPLL5_OUT_MAIN, 33 P_GPLL6_OUT_EARLY, 34 P_GPLL6_OUT_MAIN, 35 P_GPLL7_OUT_MAIN, 36 P_GPLL8_OUT_EARLY, 37 P_GPLL8_OUT_MAIN, 38 P_GPLL9_OUT_MAIN, 39 P_SLEEP_CLK, 40 }; 41 42 static struct clk_alpha_pll gpll0_out_early = { 43 .offset = 0x0, 44 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 45 .clkr = { 46 .enable_reg = 0x79000, 47 .enable_mask = BIT(0), 48 .hw.init = &(struct clk_init_data){ 49 .name = "gpll0_out_early", 50 .parent_data = &(const struct clk_parent_data){ 51 .fw_name = "bi_tcxo", 52 }, 53 .num_parents = 1, 54 .ops = &clk_alpha_pll_ops, 55 }, 56 }, 57 }; 58 59 static struct clk_fixed_factor gpll0_out_aux2 = { 60 .mult = 1, 61 .div = 2, 62 .hw.init = &(struct clk_init_data){ 63 .name = "gpll0_out_aux2", 64 .parent_hws = (const struct clk_hw*[]){ 65 &gpll0_out_early.clkr.hw, 66 }, 67 .num_parents = 1, 68 .ops = &clk_fixed_factor_ops, 69 }, 70 }; 71 72 static struct clk_fixed_factor gpll0_out_main = { 73 .mult = 1, 74 .div = 2, 75 .hw.init = &(struct clk_init_data){ 76 .name = "gpll0_out_main", 77 .parent_hws = (const struct clk_hw*[]){ 78 &gpll0_out_early.clkr.hw, 79 }, 80 .num_parents = 1, 81 .ops = &clk_fixed_factor_ops, 82 }, 83 }; 84 85 static struct clk_alpha_pll gpll3_out_early = { 86 .offset = 0x3000, 87 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 88 .clkr = { 89 .enable_reg = 0x79000, 90 .enable_mask = BIT(3), 91 .hw.init = &(struct clk_init_data){ 92 .name = "gpll3_out_early", 93 .parent_data = &(const struct clk_parent_data){ 94 .fw_name = "bi_tcxo", 95 }, 96 .num_parents = 1, 97 .ops = &clk_alpha_pll_ops, 98 }, 99 }, 100 }; 101 102 static struct clk_alpha_pll gpll4_out_main = { 103 .offset = 0x4000, 104 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 105 .clkr = { 106 .enable_reg = 0x79000, 107 .enable_mask = BIT(4), 108 .hw.init = &(struct clk_init_data){ 109 .name = "gpll4_out_main", 110 .parent_data = &(const struct clk_parent_data){ 111 .fw_name = "bi_tcxo", 112 }, 113 .num_parents = 1, 114 .ops = &clk_alpha_pll_ops, 115 }, 116 }, 117 }; 118 119 static struct clk_alpha_pll gpll5_out_main = { 120 .offset = 0x5000, 121 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 122 .clkr = { 123 .enable_reg = 0x79000, 124 .enable_mask = BIT(5), 125 .hw.init = &(struct clk_init_data){ 126 .name = "gpll5_out_main", 127 .parent_data = &(const struct clk_parent_data){ 128 .fw_name = "bi_tcxo", 129 }, 130 .num_parents = 1, 131 .ops = &clk_alpha_pll_ops, 132 }, 133 }, 134 }; 135 136 static struct clk_alpha_pll gpll6_out_early = { 137 .offset = 0x6000, 138 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 139 .clkr = { 140 .enable_reg = 0x79000, 141 .enable_mask = BIT(6), 142 .hw.init = &(struct clk_init_data){ 143 .name = "gpll6_out_early", 144 .parent_data = &(const struct clk_parent_data){ 145 .fw_name = "bi_tcxo", 146 }, 147 .num_parents = 1, 148 .ops = &clk_alpha_pll_ops, 149 }, 150 }, 151 }; 152 153 static struct clk_fixed_factor gpll6_out_main = { 154 .mult = 1, 155 .div = 2, 156 .hw.init = &(struct clk_init_data){ 157 .name = "gpll6_out_main", 158 .parent_hws = (const struct clk_hw*[]){ 159 &gpll6_out_early.clkr.hw, 160 }, 161 .num_parents = 1, 162 .ops = &clk_fixed_factor_ops, 163 }, 164 }; 165 166 static struct clk_alpha_pll gpll7_out_early = { 167 .offset = 0x7000, 168 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 169 .clkr = { 170 .enable_reg = 0x79000, 171 .enable_mask = BIT(7), 172 .hw.init = &(struct clk_init_data){ 173 .name = "gpll7_out_early", 174 .parent_data = &(const struct clk_parent_data){ 175 .fw_name = "bi_tcxo", 176 }, 177 .num_parents = 1, 178 .ops = &clk_alpha_pll_ops, 179 }, 180 }, 181 }; 182 183 static struct clk_fixed_factor gpll7_out_main = { 184 .mult = 1, 185 .div = 2, 186 .hw.init = &(struct clk_init_data){ 187 .name = "gpll7_out_main", 188 .parent_hws = (const struct clk_hw*[]){ 189 &gpll7_out_early.clkr.hw, 190 }, 191 .num_parents = 1, 192 .ops = &clk_fixed_factor_ops, 193 }, 194 }; 195 196 static struct clk_alpha_pll gpll8_out_early = { 197 .offset = 0x8000, 198 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 199 .clkr = { 200 .enable_reg = 0x79000, 201 .enable_mask = BIT(8), 202 .hw.init = &(struct clk_init_data){ 203 .name = "gpll8_out_early", 204 .parent_data = &(const struct clk_parent_data){ 205 .fw_name = "bi_tcxo", 206 }, 207 .num_parents = 1, 208 .ops = &clk_alpha_pll_ops, 209 }, 210 }, 211 }; 212 213 static struct clk_fixed_factor gpll8_out_main = { 214 .mult = 1, 215 .div = 2, 216 .hw.init = &(struct clk_init_data){ 217 .name = "gpll8_out_main", 218 .parent_hws = (const struct clk_hw*[]){ 219 &gpll8_out_early.clkr.hw, 220 }, 221 .num_parents = 1, 222 .ops = &clk_fixed_factor_ops, 223 }, 224 }; 225 226 static struct clk_alpha_pll gpll9_out_early = { 227 .offset = 0x9000, 228 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 229 .clkr = { 230 .enable_reg = 0x79000, 231 .enable_mask = BIT(9), 232 .hw.init = &(struct clk_init_data){ 233 .name = "gpll9_out_early", 234 .parent_data = &(const struct clk_parent_data){ 235 .fw_name = "bi_tcxo", 236 }, 237 .num_parents = 1, 238 .ops = &clk_alpha_pll_ops, 239 }, 240 }, 241 }; 242 243 static struct clk_fixed_factor gpll9_out_main = { 244 .mult = 1, 245 .div = 2, 246 .hw.init = &(struct clk_init_data){ 247 .name = "gpll9_out_main", 248 .parent_hws = (const struct clk_hw*[]){ 249 &gpll9_out_early.clkr.hw, 250 }, 251 .num_parents = 1, 252 .ops = &clk_fixed_factor_ops, 253 }, 254 }; 255 256 static const struct parent_map gcc_parent_map_0[] = { 257 { P_BI_TCXO, 0 }, 258 { P_GPLL0_OUT_EARLY, 1 }, 259 { P_GPLL0_OUT_AUX2, 2 }, 260 }; 261 262 static const struct clk_parent_data gcc_parent_data_0[] = { 263 { .fw_name = "bi_tcxo" }, 264 { .hw = &gpll0_out_early.clkr.hw }, 265 { .hw = &gpll0_out_aux2.hw }, 266 }; 267 268 static const struct parent_map gcc_parent_map_1[] = { 269 { P_BI_TCXO, 0 }, 270 { P_GPLL0_OUT_EARLY, 1 }, 271 { P_GPLL0_OUT_AUX2, 2 }, 272 { P_GPLL6_OUT_MAIN, 4 }, 273 }; 274 275 static const struct clk_parent_data gcc_parent_data_1[] = { 276 { .fw_name = "bi_tcxo" }, 277 { .hw = &gpll0_out_early.clkr.hw }, 278 { .hw = &gpll0_out_aux2.hw }, 279 { .hw = &gpll6_out_main.hw }, 280 }; 281 282 static const struct parent_map gcc_parent_map_2[] = { 283 { P_BI_TCXO, 0 }, 284 { P_GPLL0_OUT_EARLY, 1 }, 285 { P_GPLL0_OUT_AUX2, 2 }, 286 { P_SLEEP_CLK, 5 }, 287 }; 288 289 static const struct clk_parent_data gcc_parent_data_2[] = { 290 { .fw_name = "bi_tcxo" }, 291 { .hw = &gpll0_out_early.clkr.hw }, 292 { .hw = &gpll0_out_aux2.hw }, 293 { .fw_name = "sleep_clk" }, 294 }; 295 296 static const struct parent_map gcc_parent_map_3[] = { 297 { P_BI_TCXO, 0 }, 298 { P_GPLL0_OUT_EARLY, 1 }, 299 { P_GPLL5_OUT_MAIN, 3 }, 300 { P_GPLL4_OUT_MAIN, 5 }, 301 }; 302 303 static const struct clk_parent_data gcc_parent_data_3[] = { 304 { .fw_name = "bi_tcxo" }, 305 { .hw = &gpll0_out_early.clkr.hw }, 306 { .hw = &gpll5_out_main.clkr.hw }, 307 { .hw = &gpll4_out_main.clkr.hw }, 308 }; 309 310 static const struct parent_map gcc_parent_map_4[] = { 311 { P_BI_TCXO, 0 }, 312 { P_GPLL0_OUT_EARLY, 1 }, 313 { P_GPLL9_OUT_MAIN, 2 }, 314 }; 315 316 static const struct clk_parent_data gcc_parent_data_4[] = { 317 { .fw_name = "bi_tcxo" }, 318 { .hw = &gpll0_out_early.clkr.hw }, 319 { .hw = &gpll9_out_main.hw }, 320 }; 321 322 static const struct parent_map gcc_parent_map_5[] = { 323 { P_BI_TCXO, 0 }, 324 { P_GPLL0_OUT_EARLY, 1 }, 325 }; 326 327 static const struct clk_parent_data gcc_parent_data_5[] = { 328 { .fw_name = "bi_tcxo" }, 329 { .hw = &gpll0_out_early.clkr.hw }, 330 }; 331 332 static const struct parent_map gcc_parent_map_6[] = { 333 { P_BI_TCXO, 0 }, 334 { P_GPLL0_OUT_EARLY, 1 }, 335 { P_GPLL4_OUT_MAIN, 5 }, 336 }; 337 338 static const struct clk_parent_data gcc_parent_data_6[] = { 339 { .fw_name = "bi_tcxo" }, 340 { .hw = &gpll0_out_early.clkr.hw }, 341 { .hw = &gpll4_out_main.clkr.hw }, 342 }; 343 344 static const struct parent_map gcc_parent_map_7[] = { 345 { P_BI_TCXO, 0 }, 346 { P_GPLL0_OUT_EARLY, 1 }, 347 { P_SLEEP_CLK, 5 }, 348 }; 349 350 static const struct clk_parent_data gcc_parent_data_7[] = { 351 { .fw_name = "bi_tcxo" }, 352 { .hw = &gpll0_out_early.clkr.hw }, 353 { .fw_name = "sleep_clk" }, 354 }; 355 356 static const struct parent_map gcc_parent_map_8[] = { 357 { P_BI_TCXO, 0 }, 358 { P_GPLL0_OUT_EARLY, 1 }, 359 { P_GPLL9_OUT_MAIN, 2 }, 360 { P_GPLL6_OUT_EARLY, 3 }, 361 { P_GPLL8_OUT_MAIN, 4 }, 362 { P_GPLL4_OUT_MAIN, 5 }, 363 { P_GPLL3_OUT_EARLY, 6 }, 364 }; 365 366 static const struct clk_parent_data gcc_parent_data_8[] = { 367 { .fw_name = "bi_tcxo" }, 368 { .hw = &gpll0_out_early.clkr.hw }, 369 { .hw = &gpll9_out_main.hw }, 370 { .hw = &gpll6_out_early.clkr.hw }, 371 { .hw = &gpll8_out_main.hw }, 372 { .hw = &gpll4_out_main.clkr.hw }, 373 { .hw = &gpll3_out_early.clkr.hw }, 374 }; 375 376 static const struct parent_map gcc_parent_map_9[] = { 377 { P_BI_TCXO, 0 }, 378 { P_GPLL0_OUT_EARLY, 1 }, 379 { P_GPLL8_OUT_MAIN, 4 }, 380 }; 381 382 static const struct clk_parent_data gcc_parent_data_9[] = { 383 { .fw_name = "bi_tcxo" }, 384 { .hw = &gpll0_out_early.clkr.hw }, 385 { .hw = &gpll8_out_main.hw }, 386 }; 387 388 static const struct parent_map gcc_parent_map_10[] = { 389 { P_BI_TCXO, 0 }, 390 { P_GPLL0_OUT_EARLY, 1 }, 391 { P_GPLL9_OUT_MAIN, 2 }, 392 { P_GPLL6_OUT_EARLY, 3 }, 393 { P_GPLL8_OUT_MAIN, 4 }, 394 { P_GPLL3_OUT_EARLY, 6 }, 395 }; 396 397 static const struct clk_parent_data gcc_parent_data_10[] = { 398 { .fw_name = "bi_tcxo" }, 399 { .hw = &gpll0_out_early.clkr.hw }, 400 { .hw = &gpll9_out_main.hw }, 401 { .hw = &gpll6_out_early.clkr.hw }, 402 { .hw = &gpll8_out_main.hw }, 403 { .hw = &gpll3_out_early.clkr.hw }, 404 }; 405 406 static const struct parent_map gcc_parent_map_11[] = { 407 { P_BI_TCXO, 0 }, 408 { P_GPLL0_OUT_EARLY, 1 }, 409 { P_GPLL8_OUT_EARLY, 4 }, 410 { P_GPLL4_OUT_MAIN, 5 }, 411 }; 412 413 static const struct clk_parent_data gcc_parent_data_11[] = { 414 { .fw_name = "bi_tcxo" }, 415 { .hw = &gpll0_out_early.clkr.hw }, 416 { .hw = &gpll8_out_early.clkr.hw }, 417 { .hw = &gpll4_out_main.clkr.hw }, 418 }; 419 420 static const struct parent_map gcc_parent_map_12[] = { 421 { P_BI_TCXO, 0 }, 422 { P_GPLL0_OUT_EARLY, 1 }, 423 { P_GPLL6_OUT_EARLY, 3 }, 424 { P_GPLL8_OUT_EARLY, 4 }, 425 }; 426 427 static const struct clk_parent_data gcc_parent_data_12[] = { 428 { .fw_name = "bi_tcxo" }, 429 { .hw = &gpll0_out_early.clkr.hw }, 430 { .hw = &gpll6_out_early.clkr.hw }, 431 { .hw = &gpll8_out_early.clkr.hw }, 432 }; 433 434 static const struct parent_map gcc_parent_map_13[] = { 435 { P_BI_TCXO, 0 }, 436 { P_GPLL0_OUT_EARLY, 1 }, 437 { P_GPLL0_OUT_AUX2, 2 }, 438 { P_GPLL7_OUT_MAIN, 3 }, 439 { P_GPLL4_OUT_MAIN, 5 }, 440 }; 441 442 static const struct clk_parent_data gcc_parent_data_13[] = { 443 { .fw_name = "bi_tcxo" }, 444 { .hw = &gpll0_out_early.clkr.hw }, 445 { .hw = &gpll0_out_aux2.hw }, 446 { .hw = &gpll7_out_main.hw }, 447 { .hw = &gpll4_out_main.clkr.hw }, 448 }; 449 450 static const struct parent_map gcc_parent_map_14[] = { 451 { P_BI_TCXO, 0 }, 452 { P_SLEEP_CLK, 5 }, 453 }; 454 455 static const struct clk_parent_data gcc_parent_data_14[] = { 456 { .fw_name = "bi_tcxo" }, 457 { .fw_name = "sleep_clk" }, 458 }; 459 460 static const struct freq_tbl ftbl_gcc_camss_ahb_clk_src[] = { 461 F(19200000, P_BI_TCXO, 1, 0, 0), 462 F(40000000, P_GPLL8_OUT_MAIN, 12, 0, 0), 463 F(80000000, P_GPLL8_OUT_MAIN, 6, 0, 0), 464 { } 465 }; 466 467 static struct clk_rcg2 gcc_camss_ahb_clk_src = { 468 .cmd_rcgr = 0x56088, 469 .mnd_width = 0, 470 .hid_width = 5, 471 .parent_map = gcc_parent_map_9, 472 .freq_tbl = ftbl_gcc_camss_ahb_clk_src, 473 .clkr.hw.init = &(struct clk_init_data){ 474 .name = "gcc_camss_ahb_clk_src", 475 .parent_data = gcc_parent_data_9, 476 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 477 .ops = &clk_rcg2_ops, 478 }, 479 }; 480 481 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = { 482 F(37500000, P_GPLL0_OUT_EARLY, 16, 0, 0), 483 F(50000000, P_GPLL0_OUT_EARLY, 12, 0, 0), 484 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 485 { } 486 }; 487 488 static struct clk_rcg2 gcc_camss_cci_clk_src = { 489 .cmd_rcgr = 0x52004, 490 .mnd_width = 8, 491 .hid_width = 5, 492 .parent_map = gcc_parent_map_5, 493 .freq_tbl = ftbl_gcc_camss_cci_clk_src, 494 .clkr.hw.init = &(struct clk_init_data){ 495 .name = "gcc_camss_cci_clk_src", 496 .parent_data = gcc_parent_data_5, 497 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 498 .ops = &clk_rcg2_ops, 499 }, 500 }; 501 502 static const struct freq_tbl ftbl_gcc_camss_cpp_clk_src[] = { 503 F(120000000, P_GPLL8_OUT_MAIN, 4, 0, 0), 504 F(240000000, P_GPLL8_OUT_MAIN, 2, 0, 0), 505 F(320000000, P_GPLL8_OUT_MAIN, 1.5, 0, 0), 506 F(480000000, P_GPLL8_OUT_MAIN, 1, 0, 0), 507 F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0), 508 { } 509 }; 510 511 static struct clk_rcg2 gcc_camss_cpp_clk_src = { 512 .cmd_rcgr = 0x560c8, 513 .mnd_width = 0, 514 .hid_width = 5, 515 .parent_map = gcc_parent_map_10, 516 .freq_tbl = ftbl_gcc_camss_cpp_clk_src, 517 .clkr.hw.init = &(struct clk_init_data){ 518 .name = "gcc_camss_cpp_clk_src", 519 .parent_data = gcc_parent_data_10, 520 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 521 .ops = &clk_rcg2_ops, 522 }, 523 }; 524 525 static const struct freq_tbl ftbl_gcc_camss_csi0_clk_src[] = { 526 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 527 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 528 F(311000000, P_GPLL5_OUT_MAIN, 3, 0, 0), 529 F(403200000, P_GPLL4_OUT_MAIN, 2, 0, 0), 530 F(466500000, P_GPLL5_OUT_MAIN, 2, 0, 0), 531 { } 532 }; 533 534 static struct clk_rcg2 gcc_camss_csi0_clk_src = { 535 .cmd_rcgr = 0x55030, 536 .mnd_width = 0, 537 .hid_width = 5, 538 .parent_map = gcc_parent_map_3, 539 .freq_tbl = ftbl_gcc_camss_csi0_clk_src, 540 .clkr.hw.init = &(struct clk_init_data){ 541 .name = "gcc_camss_csi0_clk_src", 542 .parent_data = gcc_parent_data_3, 543 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 544 .ops = &clk_rcg2_ops, 545 }, 546 }; 547 548 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = { 549 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 550 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 551 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0), 552 { } 553 }; 554 555 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = { 556 .cmd_rcgr = 0x53004, 557 .mnd_width = 0, 558 .hid_width = 5, 559 .parent_map = gcc_parent_map_6, 560 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 561 .clkr.hw.init = &(struct clk_init_data){ 562 .name = "gcc_camss_csi0phytimer_clk_src", 563 .parent_data = gcc_parent_data_6, 564 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 565 .ops = &clk_rcg2_ops, 566 }, 567 }; 568 569 static struct clk_rcg2 gcc_camss_csi1_clk_src = { 570 .cmd_rcgr = 0x5506c, 571 .mnd_width = 0, 572 .hid_width = 5, 573 .parent_map = gcc_parent_map_3, 574 .freq_tbl = ftbl_gcc_camss_csi0_clk_src, 575 .clkr.hw.init = &(struct clk_init_data){ 576 .name = "gcc_camss_csi1_clk_src", 577 .parent_data = gcc_parent_data_3, 578 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 579 .ops = &clk_rcg2_ops, 580 }, 581 }; 582 583 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = { 584 .cmd_rcgr = 0x53024, 585 .mnd_width = 0, 586 .hid_width = 5, 587 .parent_map = gcc_parent_map_6, 588 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 589 .clkr.hw.init = &(struct clk_init_data){ 590 .name = "gcc_camss_csi1phytimer_clk_src", 591 .parent_data = gcc_parent_data_6, 592 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 593 .ops = &clk_rcg2_ops, 594 }, 595 }; 596 597 static struct clk_rcg2 gcc_camss_csi2_clk_src = { 598 .cmd_rcgr = 0x550a4, 599 .mnd_width = 0, 600 .hid_width = 5, 601 .parent_map = gcc_parent_map_3, 602 .freq_tbl = ftbl_gcc_camss_csi0_clk_src, 603 .clkr.hw.init = &(struct clk_init_data){ 604 .name = "gcc_camss_csi2_clk_src", 605 .parent_data = gcc_parent_data_3, 606 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 607 .ops = &clk_rcg2_ops, 608 }, 609 }; 610 611 static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = { 612 .cmd_rcgr = 0x53044, 613 .mnd_width = 0, 614 .hid_width = 5, 615 .parent_map = gcc_parent_map_6, 616 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 617 .clkr.hw.init = &(struct clk_init_data){ 618 .name = "gcc_camss_csi2phytimer_clk_src", 619 .parent_data = gcc_parent_data_6, 620 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 621 .ops = &clk_rcg2_ops, 622 }, 623 }; 624 625 static struct clk_rcg2 gcc_camss_csi3_clk_src = { 626 .cmd_rcgr = 0x550e0, 627 .mnd_width = 0, 628 .hid_width = 5, 629 .parent_map = gcc_parent_map_3, 630 .freq_tbl = ftbl_gcc_camss_csi0_clk_src, 631 .clkr.hw.init = &(struct clk_init_data){ 632 .name = "gcc_camss_csi3_clk_src", 633 .parent_data = gcc_parent_data_3, 634 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 635 .ops = &clk_rcg2_ops, 636 }, 637 }; 638 639 static const struct freq_tbl ftbl_gcc_camss_csiphy_clk_src[] = { 640 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 641 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 642 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0), 643 F(320000000, P_GPLL8_OUT_EARLY, 3, 0, 0), 644 { } 645 }; 646 647 static struct clk_rcg2 gcc_camss_csiphy_clk_src = { 648 .cmd_rcgr = 0x55000, 649 .mnd_width = 0, 650 .hid_width = 5, 651 .parent_map = gcc_parent_map_11, 652 .freq_tbl = ftbl_gcc_camss_csiphy_clk_src, 653 .clkr.hw.init = &(struct clk_init_data){ 654 .name = "gcc_camss_csiphy_clk_src", 655 .parent_data = gcc_parent_data_11, 656 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 657 .ops = &clk_rcg2_ops, 658 }, 659 }; 660 661 static const struct freq_tbl ftbl_gcc_camss_gp0_clk_src[] = { 662 F(50000000, P_GPLL0_OUT_EARLY, 12, 0, 0), 663 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 664 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 665 { } 666 }; 667 668 static struct clk_rcg2 gcc_camss_gp0_clk_src = { 669 .cmd_rcgr = 0x50000, 670 .mnd_width = 8, 671 .hid_width = 5, 672 .parent_map = gcc_parent_map_7, 673 .freq_tbl = ftbl_gcc_camss_gp0_clk_src, 674 .clkr.hw.init = &(struct clk_init_data){ 675 .name = "gcc_camss_gp0_clk_src", 676 .parent_data = gcc_parent_data_7, 677 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 678 .ops = &clk_rcg2_ops, 679 }, 680 }; 681 682 static struct clk_rcg2 gcc_camss_gp1_clk_src = { 683 .cmd_rcgr = 0x5001c, 684 .mnd_width = 8, 685 .hid_width = 5, 686 .parent_map = gcc_parent_map_7, 687 .freq_tbl = ftbl_gcc_camss_gp0_clk_src, 688 .clkr.hw.init = &(struct clk_init_data){ 689 .name = "gcc_camss_gp1_clk_src", 690 .parent_data = gcc_parent_data_7, 691 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 692 .ops = &clk_rcg2_ops, 693 }, 694 }; 695 696 static const struct freq_tbl ftbl_gcc_camss_jpeg_clk_src[] = { 697 F(66666667, P_GPLL0_OUT_EARLY, 9, 0, 0), 698 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0), 699 F(219428571, P_GPLL6_OUT_EARLY, 3.5, 0, 0), 700 F(320000000, P_GPLL8_OUT_EARLY, 3, 0, 0), 701 F(480000000, P_GPLL8_OUT_EARLY, 2, 0, 0), 702 { } 703 }; 704 705 static struct clk_rcg2 gcc_camss_jpeg_clk_src = { 706 .cmd_rcgr = 0x52028, 707 .mnd_width = 0, 708 .hid_width = 5, 709 .parent_map = gcc_parent_map_12, 710 .freq_tbl = ftbl_gcc_camss_jpeg_clk_src, 711 .clkr.hw.init = &(struct clk_init_data){ 712 .name = "gcc_camss_jpeg_clk_src", 713 .parent_data = gcc_parent_data_12, 714 .num_parents = ARRAY_SIZE(gcc_parent_data_12), 715 .ops = &clk_rcg2_ops, 716 }, 717 }; 718 719 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = { 720 F(19200000, P_BI_TCXO, 1, 0, 0), 721 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24), 722 F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9), 723 { } 724 }; 725 726 static struct clk_rcg2 gcc_camss_mclk0_clk_src = { 727 .cmd_rcgr = 0x51000, 728 .mnd_width = 8, 729 .hid_width = 5, 730 .parent_map = gcc_parent_map_4, 731 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 732 .clkr.hw.init = &(struct clk_init_data){ 733 .name = "gcc_camss_mclk0_clk_src", 734 .parent_data = gcc_parent_data_4, 735 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 736 .ops = &clk_rcg2_ops, 737 }, 738 }; 739 740 static struct clk_rcg2 gcc_camss_mclk1_clk_src = { 741 .cmd_rcgr = 0x5101c, 742 .mnd_width = 8, 743 .hid_width = 5, 744 .parent_map = gcc_parent_map_4, 745 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 746 .clkr.hw.init = &(struct clk_init_data){ 747 .name = "gcc_camss_mclk1_clk_src", 748 .parent_data = gcc_parent_data_4, 749 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 750 .ops = &clk_rcg2_ops, 751 }, 752 }; 753 754 static struct clk_rcg2 gcc_camss_mclk2_clk_src = { 755 .cmd_rcgr = 0x51038, 756 .mnd_width = 8, 757 .hid_width = 5, 758 .parent_map = gcc_parent_map_4, 759 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 760 .clkr.hw.init = &(struct clk_init_data){ 761 .name = "gcc_camss_mclk2_clk_src", 762 .parent_data = gcc_parent_data_4, 763 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 764 .ops = &clk_rcg2_ops, 765 }, 766 }; 767 768 static struct clk_rcg2 gcc_camss_mclk3_clk_src = { 769 .cmd_rcgr = 0x51054, 770 .mnd_width = 8, 771 .hid_width = 5, 772 .parent_map = gcc_parent_map_4, 773 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 774 .clkr.hw.init = &(struct clk_init_data){ 775 .name = "gcc_camss_mclk3_clk_src", 776 .parent_data = gcc_parent_data_4, 777 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 778 .ops = &clk_rcg2_ops, 779 }, 780 }; 781 782 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk_src[] = { 783 F(120000000, P_GPLL8_OUT_MAIN, 4, 0, 0), 784 F(256000000, P_GPLL6_OUT_EARLY, 3, 0, 0), 785 F(403200000, P_GPLL4_OUT_MAIN, 2, 0, 0), 786 F(480000000, P_GPLL8_OUT_MAIN, 1, 0, 0), 787 F(533000000, P_GPLL3_OUT_EARLY, 2, 0, 0), 788 F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0), 789 { } 790 }; 791 792 static struct clk_rcg2 gcc_camss_vfe0_clk_src = { 793 .cmd_rcgr = 0x54010, 794 .mnd_width = 0, 795 .hid_width = 5, 796 .parent_map = gcc_parent_map_8, 797 .freq_tbl = ftbl_gcc_camss_vfe0_clk_src, 798 .clkr.hw.init = &(struct clk_init_data){ 799 .name = "gcc_camss_vfe0_clk_src", 800 .parent_data = gcc_parent_data_8, 801 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 802 .ops = &clk_rcg2_ops, 803 }, 804 }; 805 806 static struct clk_rcg2 gcc_camss_vfe1_clk_src = { 807 .cmd_rcgr = 0x54048, 808 .mnd_width = 0, 809 .hid_width = 5, 810 .parent_map = gcc_parent_map_8, 811 .freq_tbl = ftbl_gcc_camss_vfe0_clk_src, 812 .clkr.hw.init = &(struct clk_init_data){ 813 .name = "gcc_camss_vfe1_clk_src", 814 .parent_data = gcc_parent_data_8, 815 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 816 .ops = &clk_rcg2_ops, 817 }, 818 }; 819 820 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 821 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 822 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 823 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 824 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 825 { } 826 }; 827 828 static struct clk_rcg2 gcc_gp1_clk_src = { 829 .cmd_rcgr = 0x4d004, 830 .mnd_width = 8, 831 .hid_width = 5, 832 .parent_map = gcc_parent_map_2, 833 .freq_tbl = ftbl_gcc_gp1_clk_src, 834 .clkr.hw.init = &(struct clk_init_data){ 835 .name = "gcc_gp1_clk_src", 836 .parent_data = gcc_parent_data_2, 837 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 838 .ops = &clk_rcg2_ops, 839 }, 840 }; 841 842 static struct clk_rcg2 gcc_gp2_clk_src = { 843 .cmd_rcgr = 0x4e004, 844 .mnd_width = 8, 845 .hid_width = 5, 846 .parent_map = gcc_parent_map_2, 847 .freq_tbl = ftbl_gcc_gp1_clk_src, 848 .clkr.hw.init = &(struct clk_init_data){ 849 .name = "gcc_gp2_clk_src", 850 .parent_data = gcc_parent_data_2, 851 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 852 .ops = &clk_rcg2_ops, 853 }, 854 }; 855 856 static struct clk_rcg2 gcc_gp3_clk_src = { 857 .cmd_rcgr = 0x4f004, 858 .mnd_width = 8, 859 .hid_width = 5, 860 .parent_map = gcc_parent_map_2, 861 .freq_tbl = ftbl_gcc_gp1_clk_src, 862 .clkr.hw.init = &(struct clk_init_data){ 863 .name = "gcc_gp3_clk_src", 864 .parent_data = gcc_parent_data_2, 865 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 866 .ops = &clk_rcg2_ops, 867 }, 868 }; 869 870 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 871 F(19200000, P_BI_TCXO, 1, 0, 0), 872 F(60000000, P_GPLL0_OUT_EARLY, 10, 0, 0), 873 { } 874 }; 875 876 static struct clk_rcg2 gcc_pdm2_clk_src = { 877 .cmd_rcgr = 0x20010, 878 .mnd_width = 0, 879 .hid_width = 5, 880 .parent_map = gcc_parent_map_0, 881 .freq_tbl = ftbl_gcc_pdm2_clk_src, 882 .clkr.hw.init = &(struct clk_init_data){ 883 .name = "gcc_pdm2_clk_src", 884 .parent_data = gcc_parent_data_0, 885 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 886 .ops = &clk_rcg2_ops, 887 }, 888 }; 889 890 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 891 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625), 892 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625), 893 F(19200000, P_BI_TCXO, 1, 0, 0), 894 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625), 895 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75), 896 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25), 897 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75), 898 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 899 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15), 900 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25), 901 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 902 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375), 903 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75), 904 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625), 905 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0), 906 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0), 907 { } 908 }; 909 910 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 911 .name = "gcc_qupv3_wrap0_s0_clk_src", 912 .parent_data = gcc_parent_data_1, 913 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 914 .ops = &clk_rcg2_ops, 915 }; 916 917 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 918 .cmd_rcgr = 0x1f148, 919 .mnd_width = 16, 920 .hid_width = 5, 921 .parent_map = gcc_parent_map_1, 922 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 923 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 924 }; 925 926 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 927 .name = "gcc_qupv3_wrap0_s1_clk_src", 928 .parent_data = gcc_parent_data_1, 929 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 930 .ops = &clk_rcg2_ops, 931 }; 932 933 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 934 .cmd_rcgr = 0x1f278, 935 .mnd_width = 16, 936 .hid_width = 5, 937 .parent_map = gcc_parent_map_1, 938 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 939 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 940 }; 941 942 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 943 .name = "gcc_qupv3_wrap0_s2_clk_src", 944 .parent_data = gcc_parent_data_1, 945 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 946 .ops = &clk_rcg2_ops, 947 }; 948 949 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 950 .cmd_rcgr = 0x1f3a8, 951 .mnd_width = 16, 952 .hid_width = 5, 953 .parent_map = gcc_parent_map_1, 954 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 955 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 956 }; 957 958 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 959 .name = "gcc_qupv3_wrap0_s3_clk_src", 960 .parent_data = gcc_parent_data_1, 961 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 962 .ops = &clk_rcg2_ops, 963 }; 964 965 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 966 .cmd_rcgr = 0x1f4d8, 967 .mnd_width = 16, 968 .hid_width = 5, 969 .parent_map = gcc_parent_map_1, 970 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 971 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 972 }; 973 974 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 975 .name = "gcc_qupv3_wrap0_s4_clk_src", 976 .parent_data = gcc_parent_data_1, 977 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 978 .ops = &clk_rcg2_ops, 979 }; 980 981 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 982 .cmd_rcgr = 0x1f608, 983 .mnd_width = 16, 984 .hid_width = 5, 985 .parent_map = gcc_parent_map_1, 986 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 987 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 988 }; 989 990 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 991 .name = "gcc_qupv3_wrap0_s5_clk_src", 992 .parent_data = gcc_parent_data_1, 993 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 994 .ops = &clk_rcg2_ops, 995 }; 996 997 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 998 .cmd_rcgr = 0x1f738, 999 .mnd_width = 16, 1000 .hid_width = 5, 1001 .parent_map = gcc_parent_map_1, 1002 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1003 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 1004 }; 1005 1006 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 1007 .name = "gcc_qupv3_wrap1_s0_clk_src", 1008 .parent_data = gcc_parent_data_1, 1009 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1010 .ops = &clk_rcg2_ops, 1011 }; 1012 1013 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 1014 .cmd_rcgr = 0x39148, 1015 .mnd_width = 16, 1016 .hid_width = 5, 1017 .parent_map = gcc_parent_map_1, 1018 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1019 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 1020 }; 1021 1022 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 1023 .name = "gcc_qupv3_wrap1_s1_clk_src", 1024 .parent_data = gcc_parent_data_1, 1025 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1026 .ops = &clk_rcg2_ops, 1027 }; 1028 1029 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 1030 .cmd_rcgr = 0x39278, 1031 .mnd_width = 16, 1032 .hid_width = 5, 1033 .parent_map = gcc_parent_map_1, 1034 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1035 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 1036 }; 1037 1038 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 1039 .name = "gcc_qupv3_wrap1_s2_clk_src", 1040 .parent_data = gcc_parent_data_1, 1041 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1042 .ops = &clk_rcg2_ops, 1043 }; 1044 1045 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 1046 .cmd_rcgr = 0x393a8, 1047 .mnd_width = 16, 1048 .hid_width = 5, 1049 .parent_map = gcc_parent_map_1, 1050 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1051 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 1052 }; 1053 1054 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 1055 .name = "gcc_qupv3_wrap1_s3_clk_src", 1056 .parent_data = gcc_parent_data_1, 1057 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1058 .ops = &clk_rcg2_ops, 1059 }; 1060 1061 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 1062 .cmd_rcgr = 0x394d8, 1063 .mnd_width = 16, 1064 .hid_width = 5, 1065 .parent_map = gcc_parent_map_1, 1066 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1067 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 1068 }; 1069 1070 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 1071 .name = "gcc_qupv3_wrap1_s4_clk_src", 1072 .parent_data = gcc_parent_data_1, 1073 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1074 .ops = &clk_rcg2_ops, 1075 }; 1076 1077 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 1078 .cmd_rcgr = 0x39608, 1079 .mnd_width = 16, 1080 .hid_width = 5, 1081 .parent_map = gcc_parent_map_1, 1082 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1083 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 1084 }; 1085 1086 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 1087 .name = "gcc_qupv3_wrap1_s5_clk_src", 1088 .parent_data = gcc_parent_data_1, 1089 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1090 .ops = &clk_rcg2_ops, 1091 }; 1092 1093 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 1094 .cmd_rcgr = 0x39738, 1095 .mnd_width = 16, 1096 .hid_width = 5, 1097 .parent_map = gcc_parent_map_1, 1098 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1099 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 1100 }; 1101 1102 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 1103 F(144000, P_BI_TCXO, 16, 3, 25), 1104 F(400000, P_BI_TCXO, 12, 1, 4), 1105 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3), 1106 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2), 1107 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1108 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1109 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 1110 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 1111 { } 1112 }; 1113 1114 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 1115 .cmd_rcgr = 0x38028, 1116 .mnd_width = 8, 1117 .hid_width = 5, 1118 .parent_map = gcc_parent_map_1, 1119 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 1120 .clkr.hw.init = &(struct clk_init_data){ 1121 .name = "gcc_sdcc1_apps_clk_src", 1122 .parent_data = gcc_parent_data_1, 1123 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1124 .ops = &clk_rcg2_ops, 1125 }, 1126 }; 1127 1128 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 1129 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1130 F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0), 1131 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1132 F(300000000, P_GPLL0_OUT_EARLY, 2, 0, 0), 1133 { } 1134 }; 1135 1136 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 1137 .cmd_rcgr = 0x38010, 1138 .mnd_width = 0, 1139 .hid_width = 5, 1140 .parent_map = gcc_parent_map_0, 1141 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 1142 .clkr.hw.init = &(struct clk_init_data){ 1143 .name = "gcc_sdcc1_ice_core_clk_src", 1144 .parent_data = gcc_parent_data_0, 1145 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1146 .ops = &clk_rcg2_floor_ops, 1147 }, 1148 }; 1149 1150 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1151 F(400000, P_BI_TCXO, 12, 1, 4), 1152 F(19200000, P_BI_TCXO, 1, 0, 0), 1153 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1154 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1155 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1156 F(202000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 1157 { } 1158 }; 1159 1160 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 1161 .cmd_rcgr = 0x1e00c, 1162 .mnd_width = 8, 1163 .hid_width = 5, 1164 .parent_map = gcc_parent_map_13, 1165 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 1166 .clkr.hw.init = &(struct clk_init_data){ 1167 .name = "gcc_sdcc2_apps_clk_src", 1168 .parent_data = gcc_parent_data_13, 1169 .num_parents = ARRAY_SIZE(gcc_parent_data_13), 1170 .ops = &clk_rcg2_floor_ops, 1171 }, 1172 }; 1173 1174 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 1175 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1176 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1177 F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0), 1178 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1179 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1180 { } 1181 }; 1182 1183 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 1184 .cmd_rcgr = 0x45020, 1185 .mnd_width = 8, 1186 .hid_width = 5, 1187 .parent_map = gcc_parent_map_0, 1188 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 1189 .clkr.hw.init = &(struct clk_init_data){ 1190 .name = "gcc_ufs_phy_axi_clk_src", 1191 .parent_data = gcc_parent_data_0, 1192 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1193 .ops = &clk_rcg2_ops, 1194 }, 1195 }; 1196 1197 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 1198 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 1199 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1200 F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0), 1201 F(300000000, P_GPLL0_OUT_EARLY, 2, 0, 0), 1202 { } 1203 }; 1204 1205 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 1206 .cmd_rcgr = 0x45048, 1207 .mnd_width = 0, 1208 .hid_width = 5, 1209 .parent_map = gcc_parent_map_0, 1210 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 1211 .clkr.hw.init = &(struct clk_init_data){ 1212 .name = "gcc_ufs_phy_ice_core_clk_src", 1213 .parent_data = gcc_parent_data_0, 1214 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1215 .ops = &clk_rcg2_ops, 1216 }, 1217 }; 1218 1219 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 1220 F(9600000, P_BI_TCXO, 2, 0, 0), 1221 F(19200000, P_BI_TCXO, 1, 0, 0), 1222 { } 1223 }; 1224 1225 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 1226 .cmd_rcgr = 0x4507c, 1227 .mnd_width = 0, 1228 .hid_width = 5, 1229 .parent_map = gcc_parent_map_0, 1230 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 1231 .clkr.hw.init = &(struct clk_init_data){ 1232 .name = "gcc_ufs_phy_phy_aux_clk_src", 1233 .parent_data = gcc_parent_data_0, 1234 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1235 .ops = &clk_rcg2_ops, 1236 }, 1237 }; 1238 1239 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 1240 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 1241 F(75000000, P_GPLL0_OUT_EARLY, 8, 0, 0), 1242 F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0), 1243 { } 1244 }; 1245 1246 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 1247 .cmd_rcgr = 0x45060, 1248 .mnd_width = 0, 1249 .hid_width = 5, 1250 .parent_map = gcc_parent_map_0, 1251 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 1252 .clkr.hw.init = &(struct clk_init_data){ 1253 .name = "gcc_ufs_phy_unipro_core_clk_src", 1254 .parent_data = gcc_parent_data_0, 1255 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1256 .ops = &clk_rcg2_ops, 1257 }, 1258 }; 1259 1260 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1261 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0), 1262 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0), 1263 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1264 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1265 { } 1266 }; 1267 1268 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1269 .cmd_rcgr = 0x1a01c, 1270 .mnd_width = 8, 1271 .hid_width = 5, 1272 .parent_map = gcc_parent_map_0, 1273 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1274 .clkr.hw.init = &(struct clk_init_data){ 1275 .name = "gcc_usb30_prim_master_clk_src", 1276 .parent_data = gcc_parent_data_0, 1277 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1278 .ops = &clk_rcg2_ops, 1279 }, 1280 }; 1281 1282 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 1283 F(19200000, P_BI_TCXO, 1, 0, 0), 1284 F(20000000, P_GPLL0_OUT_AUX2, 15, 0, 0), 1285 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0), 1286 F(60000000, P_GPLL0_OUT_EARLY, 10, 0, 0), 1287 { } 1288 }; 1289 1290 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1291 .cmd_rcgr = 0x1a034, 1292 .mnd_width = 0, 1293 .hid_width = 5, 1294 .parent_map = gcc_parent_map_0, 1295 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1296 .clkr.hw.init = &(struct clk_init_data){ 1297 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1298 .parent_data = gcc_parent_data_0, 1299 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1300 .ops = &clk_rcg2_ops, 1301 }, 1302 }; 1303 1304 static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = { 1305 F(19200000, P_BI_TCXO, 1, 0, 0), 1306 { } 1307 }; 1308 1309 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1310 .cmd_rcgr = 0x1a060, 1311 .mnd_width = 0, 1312 .hid_width = 5, 1313 .parent_map = gcc_parent_map_14, 1314 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src, 1315 .clkr.hw.init = &(struct clk_init_data){ 1316 .name = "gcc_usb3_prim_phy_aux_clk_src", 1317 .parent_data = gcc_parent_data_14, 1318 .num_parents = ARRAY_SIZE(gcc_parent_data_14), 1319 .ops = &clk_rcg2_ops, 1320 }, 1321 }; 1322 1323 static struct clk_rcg2 gcc_vs_ctrl_clk_src = { 1324 .cmd_rcgr = 0x42030, 1325 .mnd_width = 0, 1326 .hid_width = 5, 1327 .parent_map = gcc_parent_map_5, 1328 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src, 1329 .clkr.hw.init = &(struct clk_init_data){ 1330 .name = "gcc_vs_ctrl_clk_src", 1331 .parent_data = gcc_parent_data_5, 1332 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 1333 .ops = &clk_rcg2_ops, 1334 }, 1335 }; 1336 1337 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = { 1338 F(19200000, P_BI_TCXO, 1, 0, 0), 1339 F(400000000, P_GPLL0_OUT_EARLY, 1.5, 0, 0), 1340 F(600000000, P_GPLL0_OUT_EARLY, 1, 0, 0), 1341 { } 1342 }; 1343 1344 static struct clk_rcg2 gcc_vsensor_clk_src = { 1345 .cmd_rcgr = 0x42018, 1346 .mnd_width = 0, 1347 .hid_width = 5, 1348 .parent_map = gcc_parent_map_5, 1349 .freq_tbl = ftbl_gcc_vsensor_clk_src, 1350 .clkr.hw.init = &(struct clk_init_data){ 1351 .name = "gcc_vsensor_clk_src", 1352 .parent_data = gcc_parent_data_5, 1353 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 1354 .ops = &clk_rcg2_ops, 1355 }, 1356 }; 1357 1358 static struct clk_branch gcc_ahb2phy_csi_clk = { 1359 .halt_reg = 0x1d004, 1360 .halt_check = BRANCH_HALT, 1361 .hwcg_reg = 0x1d004, 1362 .hwcg_bit = 1, 1363 .clkr = { 1364 .enable_reg = 0x1d004, 1365 .enable_mask = BIT(0), 1366 .hw.init = &(struct clk_init_data){ 1367 .name = "gcc_ahb2phy_csi_clk", 1368 .ops = &clk_branch2_ops, 1369 }, 1370 }, 1371 }; 1372 1373 static struct clk_branch gcc_ahb2phy_usb_clk = { 1374 .halt_reg = 0x1d008, 1375 .halt_check = BRANCH_HALT, 1376 .hwcg_reg = 0x1d008, 1377 .hwcg_bit = 1, 1378 .clkr = { 1379 .enable_reg = 0x1d008, 1380 .enable_mask = BIT(0), 1381 .hw.init = &(struct clk_init_data){ 1382 .name = "gcc_ahb2phy_usb_clk", 1383 .ops = &clk_branch2_ops, 1384 }, 1385 }, 1386 }; 1387 1388 static struct clk_branch gcc_apc_vs_clk = { 1389 .halt_reg = 0x4204c, 1390 .halt_check = BRANCH_HALT, 1391 .clkr = { 1392 .enable_reg = 0x4204c, 1393 .enable_mask = BIT(0), 1394 .hw.init = &(struct clk_init_data){ 1395 .name = "gcc_apc_vs_clk", 1396 .parent_hws = (const struct clk_hw*[]){ 1397 &gcc_vsensor_clk_src.clkr.hw, 1398 }, 1399 .num_parents = 1, 1400 .flags = CLK_SET_RATE_PARENT, 1401 .ops = &clk_branch2_ops, 1402 }, 1403 }, 1404 }; 1405 1406 static struct clk_branch gcc_bimc_gpu_axi_clk = { 1407 .halt_reg = 0x71154, 1408 .halt_check = BRANCH_HALT_DELAY, 1409 .clkr = { 1410 .enable_reg = 0x71154, 1411 .enable_mask = BIT(0), 1412 .hw.init = &(struct clk_init_data){ 1413 .name = "gcc_bimc_gpu_axi_clk", 1414 .ops = &clk_branch2_ops, 1415 }, 1416 }, 1417 }; 1418 1419 static struct clk_branch gcc_boot_rom_ahb_clk = { 1420 .halt_reg = 0x23004, 1421 .halt_check = BRANCH_HALT_VOTED, 1422 .hwcg_reg = 0x23004, 1423 .hwcg_bit = 1, 1424 .clkr = { 1425 .enable_reg = 0x79004, 1426 .enable_mask = BIT(10), 1427 .hw.init = &(struct clk_init_data){ 1428 .name = "gcc_boot_rom_ahb_clk", 1429 .ops = &clk_branch2_ops, 1430 }, 1431 }, 1432 }; 1433 1434 static struct clk_branch gcc_camera_ahb_clk = { 1435 .halt_reg = 0x17008, 1436 .halt_check = BRANCH_HALT_DELAY, 1437 .hwcg_reg = 0x17008, 1438 .hwcg_bit = 1, 1439 .clkr = { 1440 .enable_reg = 0x17008, 1441 .enable_mask = BIT(0), 1442 .hw.init = &(struct clk_init_data){ 1443 .name = "gcc_camera_ahb_clk", 1444 .flags = CLK_IS_CRITICAL, 1445 .ops = &clk_branch2_ops, 1446 }, 1447 }, 1448 }; 1449 1450 static struct clk_branch gcc_camera_xo_clk = { 1451 .halt_reg = 0x17028, 1452 .halt_check = BRANCH_HALT, 1453 .clkr = { 1454 .enable_reg = 0x17028, 1455 .enable_mask = BIT(0), 1456 .hw.init = &(struct clk_init_data){ 1457 .name = "gcc_camera_xo_clk", 1458 .flags = CLK_IS_CRITICAL, 1459 .ops = &clk_branch2_ops, 1460 }, 1461 }, 1462 }; 1463 1464 static struct clk_branch gcc_camss_cci_ahb_clk = { 1465 .halt_reg = 0x52020, 1466 .halt_check = BRANCH_HALT, 1467 .clkr = { 1468 .enable_reg = 0x52020, 1469 .enable_mask = BIT(0), 1470 .hw.init = &(struct clk_init_data){ 1471 .name = "gcc_camss_cci_ahb_clk", 1472 .parent_hws = (const struct clk_hw*[]){ 1473 &gcc_camss_ahb_clk_src.clkr.hw, 1474 }, 1475 .num_parents = 1, 1476 .flags = CLK_SET_RATE_PARENT, 1477 .ops = &clk_branch2_ops, 1478 }, 1479 }, 1480 }; 1481 1482 static struct clk_branch gcc_camss_cci_clk = { 1483 .halt_reg = 0x5201c, 1484 .halt_check = BRANCH_HALT, 1485 .clkr = { 1486 .enable_reg = 0x5201c, 1487 .enable_mask = BIT(0), 1488 .hw.init = &(struct clk_init_data){ 1489 .name = "gcc_camss_cci_clk", 1490 .parent_hws = (const struct clk_hw*[]){ 1491 &gcc_camss_cci_clk_src.clkr.hw, 1492 }, 1493 .num_parents = 1, 1494 .flags = CLK_SET_RATE_PARENT, 1495 .ops = &clk_branch2_ops, 1496 }, 1497 }, 1498 }; 1499 1500 static struct clk_branch gcc_camss_cphy_csid0_clk = { 1501 .halt_reg = 0x5504c, 1502 .halt_check = BRANCH_HALT, 1503 .clkr = { 1504 .enable_reg = 0x5504c, 1505 .enable_mask = BIT(0), 1506 .hw.init = &(struct clk_init_data){ 1507 .name = "gcc_camss_cphy_csid0_clk", 1508 .parent_hws = (const struct clk_hw*[]){ 1509 &gcc_camss_csiphy_clk_src.clkr.hw, 1510 }, 1511 .num_parents = 1, 1512 .flags = CLK_SET_RATE_PARENT, 1513 .ops = &clk_branch2_ops, 1514 }, 1515 }, 1516 }; 1517 1518 static struct clk_branch gcc_camss_cphy_csid1_clk = { 1519 .halt_reg = 0x55088, 1520 .halt_check = BRANCH_HALT, 1521 .clkr = { 1522 .enable_reg = 0x55088, 1523 .enable_mask = BIT(0), 1524 .hw.init = &(struct clk_init_data){ 1525 .name = "gcc_camss_cphy_csid1_clk", 1526 .parent_hws = (const struct clk_hw*[]){ 1527 &gcc_camss_csiphy_clk_src.clkr.hw, 1528 }, 1529 .num_parents = 1, 1530 .flags = CLK_SET_RATE_PARENT, 1531 .ops = &clk_branch2_ops, 1532 }, 1533 }, 1534 }; 1535 1536 static struct clk_branch gcc_camss_cphy_csid2_clk = { 1537 .halt_reg = 0x550c0, 1538 .halt_check = BRANCH_HALT, 1539 .clkr = { 1540 .enable_reg = 0x550c0, 1541 .enable_mask = BIT(0), 1542 .hw.init = &(struct clk_init_data){ 1543 .name = "gcc_camss_cphy_csid2_clk", 1544 .parent_hws = (const struct clk_hw*[]){ 1545 &gcc_camss_csiphy_clk_src.clkr.hw, 1546 }, 1547 .num_parents = 1, 1548 .flags = CLK_SET_RATE_PARENT, 1549 .ops = &clk_branch2_ops, 1550 }, 1551 }, 1552 }; 1553 1554 static struct clk_branch gcc_camss_cphy_csid3_clk = { 1555 .halt_reg = 0x550fc, 1556 .halt_check = BRANCH_HALT, 1557 .clkr = { 1558 .enable_reg = 0x550fc, 1559 .enable_mask = BIT(0), 1560 .hw.init = &(struct clk_init_data){ 1561 .name = "gcc_camss_cphy_csid3_clk", 1562 .parent_hws = (const struct clk_hw*[]){ 1563 &gcc_camss_csiphy_clk_src.clkr.hw, 1564 }, 1565 .num_parents = 1, 1566 .flags = CLK_SET_RATE_PARENT, 1567 .ops = &clk_branch2_ops, 1568 }, 1569 }, 1570 }; 1571 1572 static struct clk_branch gcc_camss_cpp_ahb_clk = { 1573 .halt_reg = 0x560e8, 1574 .halt_check = BRANCH_HALT, 1575 .clkr = { 1576 .enable_reg = 0x560e8, 1577 .enable_mask = BIT(0), 1578 .hw.init = &(struct clk_init_data){ 1579 .name = "gcc_camss_cpp_ahb_clk", 1580 .parent_hws = (const struct clk_hw*[]){ 1581 &gcc_camss_ahb_clk_src.clkr.hw, 1582 }, 1583 .num_parents = 1, 1584 .flags = CLK_SET_RATE_PARENT, 1585 .ops = &clk_branch2_ops, 1586 }, 1587 }, 1588 }; 1589 1590 static struct clk_branch gcc_camss_cpp_axi_clk = { 1591 .halt_reg = 0x560f4, 1592 .halt_check = BRANCH_HALT, 1593 .clkr = { 1594 .enable_reg = 0x560f4, 1595 .enable_mask = BIT(0), 1596 .hw.init = &(struct clk_init_data){ 1597 .name = "gcc_camss_cpp_axi_clk", 1598 .ops = &clk_branch2_ops, 1599 }, 1600 }, 1601 }; 1602 1603 static struct clk_branch gcc_camss_cpp_clk = { 1604 .halt_reg = 0x560e0, 1605 .halt_check = BRANCH_HALT, 1606 .clkr = { 1607 .enable_reg = 0x560e0, 1608 .enable_mask = BIT(0), 1609 .hw.init = &(struct clk_init_data){ 1610 .name = "gcc_camss_cpp_clk", 1611 .parent_hws = (const struct clk_hw*[]){ 1612 &gcc_camss_cpp_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_camss_cpp_vbif_ahb_clk = { 1622 .halt_reg = 0x560f0, 1623 .halt_check = BRANCH_HALT, 1624 .clkr = { 1625 .enable_reg = 0x560f0, 1626 .enable_mask = BIT(0), 1627 .hw.init = &(struct clk_init_data){ 1628 .name = "gcc_camss_cpp_vbif_ahb_clk", 1629 .parent_hws = (const struct clk_hw*[]){ 1630 &gcc_camss_ahb_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_camss_csi0_ahb_clk = { 1640 .halt_reg = 0x55050, 1641 .halt_check = BRANCH_HALT, 1642 .clkr = { 1643 .enable_reg = 0x55050, 1644 .enable_mask = BIT(0), 1645 .hw.init = &(struct clk_init_data){ 1646 .name = "gcc_camss_csi0_ahb_clk", 1647 .parent_hws = (const struct clk_hw*[]){ 1648 &gcc_camss_ahb_clk_src.clkr.hw, 1649 }, 1650 .num_parents = 1, 1651 .flags = CLK_SET_RATE_PARENT, 1652 .ops = &clk_branch2_ops, 1653 }, 1654 }, 1655 }; 1656 1657 static struct clk_branch gcc_camss_csi0_clk = { 1658 .halt_reg = 0x55048, 1659 .halt_check = BRANCH_HALT, 1660 .clkr = { 1661 .enable_reg = 0x55048, 1662 .enable_mask = BIT(0), 1663 .hw.init = &(struct clk_init_data){ 1664 .name = "gcc_camss_csi0_clk", 1665 .parent_hws = (const struct clk_hw*[]){ 1666 &gcc_camss_csi0_clk_src.clkr.hw, 1667 }, 1668 .num_parents = 1, 1669 .flags = CLK_SET_RATE_PARENT, 1670 .ops = &clk_branch2_ops, 1671 }, 1672 }, 1673 }; 1674 1675 static struct clk_branch gcc_camss_csi0phytimer_clk = { 1676 .halt_reg = 0x5301c, 1677 .halt_check = BRANCH_HALT, 1678 .clkr = { 1679 .enable_reg = 0x5301c, 1680 .enable_mask = BIT(0), 1681 .hw.init = &(struct clk_init_data){ 1682 .name = "gcc_camss_csi0phytimer_clk", 1683 .parent_hws = (const struct clk_hw*[]){ 1684 &gcc_camss_csi0phytimer_clk_src.clkr.hw, 1685 }, 1686 .num_parents = 1, 1687 .flags = CLK_SET_RATE_PARENT, 1688 .ops = &clk_branch2_ops, 1689 }, 1690 }, 1691 }; 1692 1693 static struct clk_branch gcc_camss_csi0pix_clk = { 1694 .halt_reg = 0x55060, 1695 .halt_check = BRANCH_HALT, 1696 .clkr = { 1697 .enable_reg = 0x55060, 1698 .enable_mask = BIT(0), 1699 .hw.init = &(struct clk_init_data){ 1700 .name = "gcc_camss_csi0pix_clk", 1701 .parent_hws = (const struct clk_hw*[]){ 1702 &gcc_camss_csi0_clk_src.clkr.hw, 1703 }, 1704 .num_parents = 1, 1705 .flags = CLK_SET_RATE_PARENT, 1706 .ops = &clk_branch2_ops, 1707 }, 1708 }, 1709 }; 1710 1711 static struct clk_branch gcc_camss_csi0rdi_clk = { 1712 .halt_reg = 0x55058, 1713 .halt_check = BRANCH_HALT, 1714 .clkr = { 1715 .enable_reg = 0x55058, 1716 .enable_mask = BIT(0), 1717 .hw.init = &(struct clk_init_data){ 1718 .name = "gcc_camss_csi0rdi_clk", 1719 .parent_hws = (const struct clk_hw*[]){ 1720 &gcc_camss_csi0_clk_src.clkr.hw, 1721 }, 1722 .num_parents = 1, 1723 .flags = CLK_SET_RATE_PARENT, 1724 .ops = &clk_branch2_ops, 1725 }, 1726 }, 1727 }; 1728 1729 static struct clk_branch gcc_camss_csi1_ahb_clk = { 1730 .halt_reg = 0x5508c, 1731 .halt_check = BRANCH_HALT, 1732 .clkr = { 1733 .enable_reg = 0x5508c, 1734 .enable_mask = BIT(0), 1735 .hw.init = &(struct clk_init_data){ 1736 .name = "gcc_camss_csi1_ahb_clk", 1737 .parent_hws = (const struct clk_hw*[]){ 1738 &gcc_camss_ahb_clk_src.clkr.hw, 1739 }, 1740 .num_parents = 1, 1741 .flags = CLK_SET_RATE_PARENT, 1742 .ops = &clk_branch2_ops, 1743 }, 1744 }, 1745 }; 1746 1747 static struct clk_branch gcc_camss_csi1_clk = { 1748 .halt_reg = 0x55084, 1749 .halt_check = BRANCH_HALT, 1750 .clkr = { 1751 .enable_reg = 0x55084, 1752 .enable_mask = BIT(0), 1753 .hw.init = &(struct clk_init_data){ 1754 .name = "gcc_camss_csi1_clk", 1755 .parent_hws = (const struct clk_hw*[]){ 1756 &gcc_camss_csi1_clk_src.clkr.hw, 1757 }, 1758 .num_parents = 1, 1759 .flags = CLK_SET_RATE_PARENT, 1760 .ops = &clk_branch2_ops, 1761 }, 1762 }, 1763 }; 1764 1765 static struct clk_branch gcc_camss_csi1phytimer_clk = { 1766 .halt_reg = 0x5303c, 1767 .halt_check = BRANCH_HALT, 1768 .clkr = { 1769 .enable_reg = 0x5303c, 1770 .enable_mask = BIT(0), 1771 .hw.init = &(struct clk_init_data){ 1772 .name = "gcc_camss_csi1phytimer_clk", 1773 .parent_hws = (const struct clk_hw*[]){ 1774 &gcc_camss_csi1phytimer_clk_src.clkr.hw, 1775 }, 1776 .num_parents = 1, 1777 .flags = CLK_SET_RATE_PARENT, 1778 .ops = &clk_branch2_ops, 1779 }, 1780 }, 1781 }; 1782 1783 static struct clk_branch gcc_camss_csi1pix_clk = { 1784 .halt_reg = 0x5509c, 1785 .halt_check = BRANCH_HALT, 1786 .clkr = { 1787 .enable_reg = 0x5509c, 1788 .enable_mask = BIT(0), 1789 .hw.init = &(struct clk_init_data){ 1790 .name = "gcc_camss_csi1pix_clk", 1791 .parent_hws = (const struct clk_hw*[]){ 1792 &gcc_camss_csi1_clk_src.clkr.hw, 1793 }, 1794 .num_parents = 1, 1795 .flags = CLK_SET_RATE_PARENT, 1796 .ops = &clk_branch2_ops, 1797 }, 1798 }, 1799 }; 1800 1801 static struct clk_branch gcc_camss_csi1rdi_clk = { 1802 .halt_reg = 0x55094, 1803 .halt_check = BRANCH_HALT, 1804 .clkr = { 1805 .enable_reg = 0x55094, 1806 .enable_mask = BIT(0), 1807 .hw.init = &(struct clk_init_data){ 1808 .name = "gcc_camss_csi1rdi_clk", 1809 .parent_hws = (const struct clk_hw*[]){ 1810 &gcc_camss_csi1_clk_src.clkr.hw, 1811 }, 1812 .num_parents = 1, 1813 .flags = CLK_SET_RATE_PARENT, 1814 .ops = &clk_branch2_ops, 1815 }, 1816 }, 1817 }; 1818 1819 static struct clk_branch gcc_camss_csi2_ahb_clk = { 1820 .halt_reg = 0x550c4, 1821 .halt_check = BRANCH_HALT, 1822 .clkr = { 1823 .enable_reg = 0x550c4, 1824 .enable_mask = BIT(0), 1825 .hw.init = &(struct clk_init_data){ 1826 .name = "gcc_camss_csi2_ahb_clk", 1827 .parent_hws = (const struct clk_hw*[]){ 1828 &gcc_camss_ahb_clk_src.clkr.hw, 1829 }, 1830 .num_parents = 1, 1831 .flags = CLK_SET_RATE_PARENT, 1832 .ops = &clk_branch2_ops, 1833 }, 1834 }, 1835 }; 1836 1837 static struct clk_branch gcc_camss_csi2_clk = { 1838 .halt_reg = 0x550bc, 1839 .halt_check = BRANCH_HALT, 1840 .clkr = { 1841 .enable_reg = 0x550bc, 1842 .enable_mask = BIT(0), 1843 .hw.init = &(struct clk_init_data){ 1844 .name = "gcc_camss_csi2_clk", 1845 .parent_hws = (const struct clk_hw*[]){ 1846 &gcc_camss_csi2_clk_src.clkr.hw, 1847 }, 1848 .num_parents = 1, 1849 .flags = CLK_SET_RATE_PARENT, 1850 .ops = &clk_branch2_ops, 1851 }, 1852 }, 1853 }; 1854 1855 static struct clk_branch gcc_camss_csi2phytimer_clk = { 1856 .halt_reg = 0x5305c, 1857 .halt_check = BRANCH_HALT, 1858 .clkr = { 1859 .enable_reg = 0x5305c, 1860 .enable_mask = BIT(0), 1861 .hw.init = &(struct clk_init_data){ 1862 .name = "gcc_camss_csi2phytimer_clk", 1863 .parent_hws = (const struct clk_hw*[]){ 1864 &gcc_camss_csi2phytimer_clk_src.clkr.hw, 1865 }, 1866 .num_parents = 1, 1867 .flags = CLK_SET_RATE_PARENT, 1868 .ops = &clk_branch2_ops, 1869 }, 1870 }, 1871 }; 1872 1873 static struct clk_branch gcc_camss_csi2pix_clk = { 1874 .halt_reg = 0x550d4, 1875 .halt_check = BRANCH_HALT, 1876 .clkr = { 1877 .enable_reg = 0x550d4, 1878 .enable_mask = BIT(0), 1879 .hw.init = &(struct clk_init_data){ 1880 .name = "gcc_camss_csi2pix_clk", 1881 .parent_hws = (const struct clk_hw*[]){ 1882 &gcc_camss_csi2_clk_src.clkr.hw, 1883 }, 1884 .num_parents = 1, 1885 .flags = CLK_SET_RATE_PARENT, 1886 .ops = &clk_branch2_ops, 1887 }, 1888 }, 1889 }; 1890 1891 static struct clk_branch gcc_camss_csi2rdi_clk = { 1892 .halt_reg = 0x550cc, 1893 .halt_check = BRANCH_HALT, 1894 .clkr = { 1895 .enable_reg = 0x550cc, 1896 .enable_mask = BIT(0), 1897 .hw.init = &(struct clk_init_data){ 1898 .name = "gcc_camss_csi2rdi_clk", 1899 .parent_hws = (const struct clk_hw*[]){ 1900 &gcc_camss_csi2_clk_src.clkr.hw, 1901 }, 1902 .num_parents = 1, 1903 .flags = CLK_SET_RATE_PARENT, 1904 .ops = &clk_branch2_ops, 1905 }, 1906 }, 1907 }; 1908 1909 static struct clk_branch gcc_camss_csi3_ahb_clk = { 1910 .halt_reg = 0x55100, 1911 .halt_check = BRANCH_HALT, 1912 .clkr = { 1913 .enable_reg = 0x55100, 1914 .enable_mask = BIT(0), 1915 .hw.init = &(struct clk_init_data){ 1916 .name = "gcc_camss_csi3_ahb_clk", 1917 .parent_hws = (const struct clk_hw*[]){ 1918 &gcc_camss_ahb_clk_src.clkr.hw, 1919 }, 1920 .num_parents = 1, 1921 .flags = CLK_SET_RATE_PARENT, 1922 .ops = &clk_branch2_ops, 1923 }, 1924 }, 1925 }; 1926 1927 static struct clk_branch gcc_camss_csi3_clk = { 1928 .halt_reg = 0x550f8, 1929 .halt_check = BRANCH_HALT, 1930 .clkr = { 1931 .enable_reg = 0x550f8, 1932 .enable_mask = BIT(0), 1933 .hw.init = &(struct clk_init_data){ 1934 .name = "gcc_camss_csi3_clk", 1935 .parent_hws = (const struct clk_hw*[]){ 1936 &gcc_camss_csi3_clk_src.clkr.hw, 1937 }, 1938 .num_parents = 1, 1939 .flags = CLK_SET_RATE_PARENT, 1940 .ops = &clk_branch2_ops, 1941 }, 1942 }, 1943 }; 1944 1945 static struct clk_branch gcc_camss_csi3pix_clk = { 1946 .halt_reg = 0x55110, 1947 .halt_check = BRANCH_HALT, 1948 .clkr = { 1949 .enable_reg = 0x55110, 1950 .enable_mask = BIT(0), 1951 .hw.init = &(struct clk_init_data){ 1952 .name = "gcc_camss_csi3pix_clk", 1953 .parent_hws = (const struct clk_hw*[]){ 1954 &gcc_camss_csi3_clk_src.clkr.hw, 1955 }, 1956 .num_parents = 1, 1957 .flags = CLK_SET_RATE_PARENT, 1958 .ops = &clk_branch2_ops, 1959 }, 1960 }, 1961 }; 1962 1963 static struct clk_branch gcc_camss_csi3rdi_clk = { 1964 .halt_reg = 0x55108, 1965 .halt_check = BRANCH_HALT, 1966 .clkr = { 1967 .enable_reg = 0x55108, 1968 .enable_mask = BIT(0), 1969 .hw.init = &(struct clk_init_data){ 1970 .name = "gcc_camss_csi3rdi_clk", 1971 .parent_hws = (const struct clk_hw*[]){ 1972 &gcc_camss_csi3_clk_src.clkr.hw, 1973 }, 1974 .num_parents = 1, 1975 .flags = CLK_SET_RATE_PARENT, 1976 .ops = &clk_branch2_ops, 1977 }, 1978 }, 1979 }; 1980 1981 static struct clk_branch gcc_camss_csi_vfe0_clk = { 1982 .halt_reg = 0x54074, 1983 .halt_check = BRANCH_HALT, 1984 .clkr = { 1985 .enable_reg = 0x54074, 1986 .enable_mask = BIT(0), 1987 .hw.init = &(struct clk_init_data){ 1988 .name = "gcc_camss_csi_vfe0_clk", 1989 .parent_hws = (const struct clk_hw*[]){ 1990 &gcc_camss_vfe0_clk_src.clkr.hw, 1991 }, 1992 .num_parents = 1, 1993 .flags = CLK_SET_RATE_PARENT, 1994 .ops = &clk_branch2_ops, 1995 }, 1996 }, 1997 }; 1998 1999 static struct clk_branch gcc_camss_csi_vfe1_clk = { 2000 .halt_reg = 0x54080, 2001 .halt_check = BRANCH_HALT, 2002 .clkr = { 2003 .enable_reg = 0x54080, 2004 .enable_mask = BIT(0), 2005 .hw.init = &(struct clk_init_data){ 2006 .name = "gcc_camss_csi_vfe1_clk", 2007 .parent_hws = (const struct clk_hw*[]){ 2008 &gcc_camss_vfe1_clk_src.clkr.hw, 2009 }, 2010 .num_parents = 1, 2011 .flags = CLK_SET_RATE_PARENT, 2012 .ops = &clk_branch2_ops, 2013 }, 2014 }, 2015 }; 2016 2017 static struct clk_branch gcc_camss_csiphy0_clk = { 2018 .halt_reg = 0x55018, 2019 .halt_check = BRANCH_HALT, 2020 .clkr = { 2021 .enable_reg = 0x55018, 2022 .enable_mask = BIT(0), 2023 .hw.init = &(struct clk_init_data){ 2024 .name = "gcc_camss_csiphy0_clk", 2025 .parent_hws = (const struct clk_hw*[]){ 2026 &gcc_camss_csiphy_clk_src.clkr.hw, 2027 }, 2028 .num_parents = 1, 2029 .flags = CLK_SET_RATE_PARENT, 2030 .ops = &clk_branch2_ops, 2031 }, 2032 }, 2033 }; 2034 2035 static struct clk_branch gcc_camss_csiphy1_clk = { 2036 .halt_reg = 0x5501c, 2037 .halt_check = BRANCH_HALT, 2038 .clkr = { 2039 .enable_reg = 0x5501c, 2040 .enable_mask = BIT(0), 2041 .hw.init = &(struct clk_init_data){ 2042 .name = "gcc_camss_csiphy1_clk", 2043 .parent_hws = (const struct clk_hw*[]){ 2044 &gcc_camss_csiphy_clk_src.clkr.hw, 2045 }, 2046 .num_parents = 1, 2047 .flags = CLK_SET_RATE_PARENT, 2048 .ops = &clk_branch2_ops, 2049 }, 2050 }, 2051 }; 2052 2053 static struct clk_branch gcc_camss_csiphy2_clk = { 2054 .halt_reg = 0x55020, 2055 .halt_check = BRANCH_HALT, 2056 .clkr = { 2057 .enable_reg = 0x55020, 2058 .enable_mask = BIT(0), 2059 .hw.init = &(struct clk_init_data){ 2060 .name = "gcc_camss_csiphy2_clk", 2061 .parent_hws = (const struct clk_hw*[]){ 2062 &gcc_camss_csiphy_clk_src.clkr.hw, 2063 }, 2064 .num_parents = 1, 2065 .flags = CLK_SET_RATE_PARENT, 2066 .ops = &clk_branch2_ops, 2067 }, 2068 }, 2069 }; 2070 2071 static struct clk_branch gcc_camss_gp0_clk = { 2072 .halt_reg = 0x50018, 2073 .halt_check = BRANCH_HALT, 2074 .clkr = { 2075 .enable_reg = 0x50018, 2076 .enable_mask = BIT(0), 2077 .hw.init = &(struct clk_init_data){ 2078 .name = "gcc_camss_gp0_clk", 2079 .parent_hws = (const struct clk_hw*[]){ 2080 &gcc_camss_gp0_clk_src.clkr.hw, 2081 }, 2082 .num_parents = 1, 2083 .flags = CLK_SET_RATE_PARENT, 2084 .ops = &clk_branch2_ops, 2085 }, 2086 }, 2087 }; 2088 2089 static struct clk_branch gcc_camss_gp1_clk = { 2090 .halt_reg = 0x50034, 2091 .halt_check = BRANCH_HALT, 2092 .clkr = { 2093 .enable_reg = 0x50034, 2094 .enable_mask = BIT(0), 2095 .hw.init = &(struct clk_init_data){ 2096 .name = "gcc_camss_gp1_clk", 2097 .parent_hws = (const struct clk_hw*[]){ 2098 &gcc_camss_gp1_clk_src.clkr.hw, 2099 }, 2100 .num_parents = 1, 2101 .flags = CLK_SET_RATE_PARENT, 2102 .ops = &clk_branch2_ops, 2103 }, 2104 }, 2105 }; 2106 2107 static struct clk_branch gcc_camss_ispif_ahb_clk = { 2108 .halt_reg = 0x540a4, 2109 .halt_check = BRANCH_HALT, 2110 .clkr = { 2111 .enable_reg = 0x540a4, 2112 .enable_mask = BIT(0), 2113 .hw.init = &(struct clk_init_data){ 2114 .name = "gcc_camss_ispif_ahb_clk", 2115 .parent_hws = (const struct clk_hw*[]){ 2116 &gcc_camss_ahb_clk_src.clkr.hw, 2117 }, 2118 .num_parents = 1, 2119 .flags = CLK_SET_RATE_PARENT, 2120 .ops = &clk_branch2_ops, 2121 }, 2122 }, 2123 }; 2124 2125 static struct clk_branch gcc_camss_jpeg_ahb_clk = { 2126 .halt_reg = 0x52048, 2127 .halt_check = BRANCH_HALT, 2128 .clkr = { 2129 .enable_reg = 0x52048, 2130 .enable_mask = BIT(0), 2131 .hw.init = &(struct clk_init_data){ 2132 .name = "gcc_camss_jpeg_ahb_clk", 2133 .parent_hws = (const struct clk_hw*[]){ 2134 &gcc_camss_ahb_clk_src.clkr.hw, 2135 }, 2136 .num_parents = 1, 2137 .flags = CLK_SET_RATE_PARENT, 2138 .ops = &clk_branch2_ops, 2139 }, 2140 }, 2141 }; 2142 2143 static struct clk_branch gcc_camss_jpeg_axi_clk = { 2144 .halt_reg = 0x5204c, 2145 .halt_check = BRANCH_HALT, 2146 .clkr = { 2147 .enable_reg = 0x5204c, 2148 .enable_mask = BIT(0), 2149 .hw.init = &(struct clk_init_data){ 2150 .name = "gcc_camss_jpeg_axi_clk", 2151 .ops = &clk_branch2_ops, 2152 }, 2153 }, 2154 }; 2155 2156 static struct clk_branch gcc_camss_jpeg_clk = { 2157 .halt_reg = 0x52040, 2158 .halt_check = BRANCH_HALT, 2159 .clkr = { 2160 .enable_reg = 0x52040, 2161 .enable_mask = BIT(0), 2162 .hw.init = &(struct clk_init_data){ 2163 .name = "gcc_camss_jpeg_clk", 2164 .parent_hws = (const struct clk_hw*[]){ 2165 &gcc_camss_jpeg_clk_src.clkr.hw, 2166 }, 2167 .num_parents = 1, 2168 .flags = CLK_SET_RATE_PARENT, 2169 .ops = &clk_branch2_ops, 2170 }, 2171 }, 2172 }; 2173 2174 static struct clk_branch gcc_camss_mclk0_clk = { 2175 .halt_reg = 0x51018, 2176 .halt_check = BRANCH_HALT, 2177 .clkr = { 2178 .enable_reg = 0x51018, 2179 .enable_mask = BIT(0), 2180 .hw.init = &(struct clk_init_data){ 2181 .name = "gcc_camss_mclk0_clk", 2182 .parent_hws = (const struct clk_hw*[]){ 2183 &gcc_camss_mclk0_clk_src.clkr.hw, 2184 }, 2185 .num_parents = 1, 2186 .flags = CLK_SET_RATE_PARENT, 2187 .ops = &clk_branch2_ops, 2188 }, 2189 }, 2190 }; 2191 2192 static struct clk_branch gcc_camss_mclk1_clk = { 2193 .halt_reg = 0x51034, 2194 .halt_check = BRANCH_HALT, 2195 .clkr = { 2196 .enable_reg = 0x51034, 2197 .enable_mask = BIT(0), 2198 .hw.init = &(struct clk_init_data){ 2199 .name = "gcc_camss_mclk1_clk", 2200 .parent_hws = (const struct clk_hw*[]){ 2201 &gcc_camss_mclk1_clk_src.clkr.hw, 2202 }, 2203 .num_parents = 1, 2204 .flags = CLK_SET_RATE_PARENT, 2205 .ops = &clk_branch2_ops, 2206 }, 2207 }, 2208 }; 2209 2210 static struct clk_branch gcc_camss_mclk2_clk = { 2211 .halt_reg = 0x51050, 2212 .halt_check = BRANCH_HALT, 2213 .clkr = { 2214 .enable_reg = 0x51050, 2215 .enable_mask = BIT(0), 2216 .hw.init = &(struct clk_init_data){ 2217 .name = "gcc_camss_mclk2_clk", 2218 .parent_hws = (const struct clk_hw*[]){ 2219 &gcc_camss_mclk2_clk_src.clkr.hw, 2220 }, 2221 .num_parents = 1, 2222 .flags = CLK_SET_RATE_PARENT, 2223 .ops = &clk_branch2_ops, 2224 }, 2225 }, 2226 }; 2227 2228 static struct clk_branch gcc_camss_mclk3_clk = { 2229 .halt_reg = 0x5106c, 2230 .halt_check = BRANCH_HALT, 2231 .clkr = { 2232 .enable_reg = 0x5106c, 2233 .enable_mask = BIT(0), 2234 .hw.init = &(struct clk_init_data){ 2235 .name = "gcc_camss_mclk3_clk", 2236 .parent_hws = (const struct clk_hw*[]){ 2237 &gcc_camss_mclk3_clk_src.clkr.hw, 2238 }, 2239 .num_parents = 1, 2240 .flags = CLK_SET_RATE_PARENT, 2241 .ops = &clk_branch2_ops, 2242 }, 2243 }, 2244 }; 2245 2246 static struct clk_branch gcc_camss_micro_ahb_clk = { 2247 .halt_reg = 0x560b0, 2248 .halt_check = BRANCH_HALT, 2249 .clkr = { 2250 .enable_reg = 0x560b0, 2251 .enable_mask = BIT(0), 2252 .hw.init = &(struct clk_init_data){ 2253 .name = "gcc_camss_micro_ahb_clk", 2254 .parent_hws = (const struct clk_hw*[]){ 2255 &gcc_camss_ahb_clk_src.clkr.hw, 2256 }, 2257 .num_parents = 1, 2258 .flags = CLK_SET_RATE_PARENT, 2259 .ops = &clk_branch2_ops, 2260 }, 2261 }, 2262 }; 2263 2264 static struct clk_branch gcc_camss_throttle_nrt_axi_clk = { 2265 .halt_reg = 0x560a4, 2266 .halt_check = BRANCH_HALT_VOTED, 2267 .clkr = { 2268 .enable_reg = 0x79004, 2269 .enable_mask = BIT(27), 2270 .hw.init = &(struct clk_init_data){ 2271 .name = "gcc_camss_throttle_nrt_axi_clk", 2272 .ops = &clk_branch2_ops, 2273 }, 2274 }, 2275 }; 2276 2277 static struct clk_branch gcc_camss_throttle_rt_axi_clk = { 2278 .halt_reg = 0x560a8, 2279 .halt_check = BRANCH_HALT_VOTED, 2280 .clkr = { 2281 .enable_reg = 0x79004, 2282 .enable_mask = BIT(26), 2283 .hw.init = &(struct clk_init_data){ 2284 .name = "gcc_camss_throttle_rt_axi_clk", 2285 .ops = &clk_branch2_ops, 2286 }, 2287 }, 2288 }; 2289 2290 static struct clk_branch gcc_camss_top_ahb_clk = { 2291 .halt_reg = 0x560a0, 2292 .halt_check = BRANCH_HALT, 2293 .clkr = { 2294 .enable_reg = 0x560a0, 2295 .enable_mask = BIT(0), 2296 .hw.init = &(struct clk_init_data){ 2297 .name = "gcc_camss_top_ahb_clk", 2298 .parent_hws = (const struct clk_hw*[]){ 2299 &gcc_camss_ahb_clk_src.clkr.hw, 2300 }, 2301 .num_parents = 1, 2302 .flags = CLK_SET_RATE_PARENT, 2303 .ops = &clk_branch2_ops, 2304 }, 2305 }, 2306 }; 2307 2308 static struct clk_branch gcc_camss_vfe0_ahb_clk = { 2309 .halt_reg = 0x54034, 2310 .halt_check = BRANCH_HALT, 2311 .clkr = { 2312 .enable_reg = 0x54034, 2313 .enable_mask = BIT(0), 2314 .hw.init = &(struct clk_init_data){ 2315 .name = "gcc_camss_vfe0_ahb_clk", 2316 .parent_hws = (const struct clk_hw*[]){ 2317 &gcc_camss_ahb_clk_src.clkr.hw, 2318 }, 2319 .num_parents = 1, 2320 .flags = CLK_SET_RATE_PARENT, 2321 .ops = &clk_branch2_ops, 2322 }, 2323 }, 2324 }; 2325 2326 static struct clk_branch gcc_camss_vfe0_clk = { 2327 .halt_reg = 0x54028, 2328 .halt_check = BRANCH_HALT, 2329 .clkr = { 2330 .enable_reg = 0x54028, 2331 .enable_mask = BIT(0), 2332 .hw.init = &(struct clk_init_data){ 2333 .name = "gcc_camss_vfe0_clk", 2334 .parent_hws = (const struct clk_hw*[]){ 2335 &gcc_camss_vfe0_clk_src.clkr.hw, 2336 }, 2337 .num_parents = 1, 2338 .flags = CLK_SET_RATE_PARENT, 2339 .ops = &clk_branch2_ops, 2340 }, 2341 }, 2342 }; 2343 2344 static struct clk_branch gcc_camss_vfe0_stream_clk = { 2345 .halt_reg = 0x54030, 2346 .halt_check = BRANCH_HALT, 2347 .clkr = { 2348 .enable_reg = 0x54030, 2349 .enable_mask = BIT(0), 2350 .hw.init = &(struct clk_init_data){ 2351 .name = "gcc_camss_vfe0_stream_clk", 2352 .parent_hws = (const struct clk_hw*[]){ 2353 &gcc_camss_vfe0_clk_src.clkr.hw, 2354 }, 2355 .num_parents = 1, 2356 .flags = CLK_SET_RATE_PARENT, 2357 .ops = &clk_branch2_ops, 2358 }, 2359 }, 2360 }; 2361 2362 static struct clk_branch gcc_camss_vfe1_ahb_clk = { 2363 .halt_reg = 0x5406c, 2364 .halt_check = BRANCH_HALT, 2365 .clkr = { 2366 .enable_reg = 0x5406c, 2367 .enable_mask = BIT(0), 2368 .hw.init = &(struct clk_init_data){ 2369 .name = "gcc_camss_vfe1_ahb_clk", 2370 .parent_hws = (const struct clk_hw*[]){ 2371 &gcc_camss_ahb_clk_src.clkr.hw, 2372 }, 2373 .num_parents = 1, 2374 .flags = CLK_SET_RATE_PARENT, 2375 .ops = &clk_branch2_ops, 2376 }, 2377 }, 2378 }; 2379 2380 static struct clk_branch gcc_camss_vfe1_clk = { 2381 .halt_reg = 0x54060, 2382 .halt_check = BRANCH_HALT, 2383 .clkr = { 2384 .enable_reg = 0x54060, 2385 .enable_mask = BIT(0), 2386 .hw.init = &(struct clk_init_data){ 2387 .name = "gcc_camss_vfe1_clk", 2388 .parent_hws = (const struct clk_hw*[]){ 2389 &gcc_camss_vfe1_clk_src.clkr.hw, 2390 }, 2391 .num_parents = 1, 2392 .flags = CLK_SET_RATE_PARENT, 2393 .ops = &clk_branch2_ops, 2394 }, 2395 }, 2396 }; 2397 2398 static struct clk_branch gcc_camss_vfe1_stream_clk = { 2399 .halt_reg = 0x54068, 2400 .halt_check = BRANCH_HALT, 2401 .clkr = { 2402 .enable_reg = 0x54068, 2403 .enable_mask = BIT(0), 2404 .hw.init = &(struct clk_init_data){ 2405 .name = "gcc_camss_vfe1_stream_clk", 2406 .parent_hws = (const struct clk_hw*[]){ 2407 &gcc_camss_vfe1_clk_src.clkr.hw, 2408 }, 2409 .num_parents = 1, 2410 .flags = CLK_SET_RATE_PARENT, 2411 .ops = &clk_branch2_ops, 2412 }, 2413 }, 2414 }; 2415 2416 static struct clk_branch gcc_camss_vfe_tsctr_clk = { 2417 .halt_reg = 0x5409c, 2418 .halt_check = BRANCH_HALT, 2419 .clkr = { 2420 .enable_reg = 0x5409c, 2421 .enable_mask = BIT(0), 2422 .hw.init = &(struct clk_init_data){ 2423 .name = "gcc_camss_vfe_tsctr_clk", 2424 .ops = &clk_branch2_ops, 2425 }, 2426 }, 2427 }; 2428 2429 static struct clk_branch gcc_camss_vfe_vbif_ahb_clk = { 2430 .halt_reg = 0x5408c, 2431 .halt_check = BRANCH_HALT, 2432 .clkr = { 2433 .enable_reg = 0x5408c, 2434 .enable_mask = BIT(0), 2435 .hw.init = &(struct clk_init_data){ 2436 .name = "gcc_camss_vfe_vbif_ahb_clk", 2437 .parent_hws = (const struct clk_hw*[]){ 2438 &gcc_camss_ahb_clk_src.clkr.hw, 2439 }, 2440 .num_parents = 1, 2441 .flags = CLK_SET_RATE_PARENT, 2442 .ops = &clk_branch2_ops, 2443 }, 2444 }, 2445 }; 2446 2447 static struct clk_branch gcc_camss_vfe_vbif_axi_clk = { 2448 .halt_reg = 0x54090, 2449 .halt_check = BRANCH_HALT, 2450 .clkr = { 2451 .enable_reg = 0x54090, 2452 .enable_mask = BIT(0), 2453 .hw.init = &(struct clk_init_data){ 2454 .name = "gcc_camss_vfe_vbif_axi_clk", 2455 .ops = &clk_branch2_ops, 2456 }, 2457 }, 2458 }; 2459 2460 static struct clk_branch gcc_ce1_ahb_clk = { 2461 .halt_reg = 0x2700c, 2462 .halt_check = BRANCH_HALT_VOTED, 2463 .hwcg_reg = 0x2700c, 2464 .hwcg_bit = 1, 2465 .clkr = { 2466 .enable_reg = 0x79004, 2467 .enable_mask = BIT(3), 2468 .hw.init = &(struct clk_init_data){ 2469 .name = "gcc_ce1_ahb_clk", 2470 .ops = &clk_branch2_ops, 2471 }, 2472 }, 2473 }; 2474 2475 static struct clk_branch gcc_ce1_axi_clk = { 2476 .halt_reg = 0x27008, 2477 .halt_check = BRANCH_HALT_VOTED, 2478 .clkr = { 2479 .enable_reg = 0x79004, 2480 .enable_mask = BIT(4), 2481 .hw.init = &(struct clk_init_data){ 2482 .name = "gcc_ce1_axi_clk", 2483 .ops = &clk_branch2_ops, 2484 }, 2485 }, 2486 }; 2487 2488 static struct clk_branch gcc_ce1_clk = { 2489 .halt_reg = 0x27004, 2490 .halt_check = BRANCH_HALT_VOTED, 2491 .clkr = { 2492 .enable_reg = 0x79004, 2493 .enable_mask = BIT(5), 2494 .hw.init = &(struct clk_init_data){ 2495 .name = "gcc_ce1_clk", 2496 .ops = &clk_branch2_ops, 2497 }, 2498 }, 2499 }; 2500 2501 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 2502 .halt_reg = 0x1a084, 2503 .halt_check = BRANCH_HALT, 2504 .clkr = { 2505 .enable_reg = 0x1a084, 2506 .enable_mask = BIT(0), 2507 .hw.init = &(struct clk_init_data){ 2508 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 2509 .parent_hws = (const struct clk_hw*[]){ 2510 &gcc_usb30_prim_master_clk_src.clkr.hw, 2511 }, 2512 .num_parents = 1, 2513 .flags = CLK_SET_RATE_PARENT, 2514 .ops = &clk_branch2_ops, 2515 }, 2516 }, 2517 }; 2518 2519 static struct clk_branch gcc_cpuss_gnoc_clk = { 2520 .halt_reg = 0x2b004, 2521 .halt_check = BRANCH_HALT_VOTED, 2522 .hwcg_reg = 0x2b004, 2523 .hwcg_bit = 1, 2524 .clkr = { 2525 .enable_reg = 0x79004, 2526 .enable_mask = BIT(22), 2527 .hw.init = &(struct clk_init_data){ 2528 .name = "gcc_cpuss_gnoc_clk", 2529 .flags = CLK_IS_CRITICAL, 2530 .ops = &clk_branch2_ops, 2531 }, 2532 }, 2533 }; 2534 2535 static struct clk_branch gcc_disp_ahb_clk = { 2536 .halt_reg = 0x1700c, 2537 .halt_check = BRANCH_HALT, 2538 .hwcg_reg = 0x1700c, 2539 .hwcg_bit = 1, 2540 .clkr = { 2541 .enable_reg = 0x1700c, 2542 .enable_mask = BIT(0), 2543 .hw.init = &(struct clk_init_data){ 2544 .name = "gcc_disp_ahb_clk", 2545 .flags = CLK_IS_CRITICAL, 2546 .ops = &clk_branch2_ops, 2547 }, 2548 }, 2549 }; 2550 2551 static struct clk_branch gcc_disp_gpll0_div_clk_src = { 2552 .halt_check = BRANCH_HALT_DELAY, 2553 .clkr = { 2554 .enable_reg = 0x79004, 2555 .enable_mask = BIT(20), 2556 .hw.init = &(struct clk_init_data){ 2557 .name = "gcc_disp_gpll0_div_clk_src", 2558 .parent_hws = (const struct clk_hw*[]){ 2559 &gpll0_out_early.clkr.hw, 2560 }, 2561 .num_parents = 1, 2562 .ops = &clk_branch2_ops, 2563 }, 2564 }, 2565 }; 2566 2567 static struct clk_branch gcc_disp_hf_axi_clk = { 2568 .halt_reg = 0x17020, 2569 .halt_check = BRANCH_HALT, 2570 .clkr = { 2571 .enable_reg = 0x17020, 2572 .enable_mask = BIT(0), 2573 .hw.init = &(struct clk_init_data){ 2574 .name = "gcc_disp_hf_axi_clk", 2575 .ops = &clk_branch2_ops, 2576 }, 2577 }, 2578 }; 2579 2580 static struct clk_branch gcc_disp_throttle_core_clk = { 2581 .halt_reg = 0x17064, 2582 .halt_check = BRANCH_HALT_VOTED, 2583 .clkr = { 2584 .enable_reg = 0x7900c, 2585 .enable_mask = BIT(5), 2586 .hw.init = &(struct clk_init_data){ 2587 .name = "gcc_disp_throttle_core_clk", 2588 .ops = &clk_branch2_ops, 2589 }, 2590 }, 2591 }; 2592 2593 static struct clk_branch gcc_disp_xo_clk = { 2594 .halt_reg = 0x1702c, 2595 .halt_check = BRANCH_HALT, 2596 .clkr = { 2597 .enable_reg = 0x1702c, 2598 .enable_mask = BIT(0), 2599 .hw.init = &(struct clk_init_data){ 2600 .name = "gcc_disp_xo_clk", 2601 .flags = CLK_IS_CRITICAL, 2602 .ops = &clk_branch2_ops, 2603 }, 2604 }, 2605 }; 2606 2607 static struct clk_branch gcc_gp1_clk = { 2608 .halt_reg = 0x4d000, 2609 .halt_check = BRANCH_HALT, 2610 .clkr = { 2611 .enable_reg = 0x4d000, 2612 .enable_mask = BIT(0), 2613 .hw.init = &(struct clk_init_data){ 2614 .name = "gcc_gp1_clk", 2615 .parent_hws = (const struct clk_hw*[]){ 2616 &gcc_gp1_clk_src.clkr.hw, 2617 }, 2618 .num_parents = 1, 2619 .flags = CLK_SET_RATE_PARENT, 2620 .ops = &clk_branch2_ops, 2621 }, 2622 }, 2623 }; 2624 2625 static struct clk_branch gcc_gp2_clk = { 2626 .halt_reg = 0x4e000, 2627 .halt_check = BRANCH_HALT, 2628 .clkr = { 2629 .enable_reg = 0x4e000, 2630 .enable_mask = BIT(0), 2631 .hw.init = &(struct clk_init_data){ 2632 .name = "gcc_gp2_clk", 2633 .parent_hws = (const struct clk_hw*[]){ 2634 &gcc_gp2_clk_src.clkr.hw, 2635 }, 2636 .num_parents = 1, 2637 .flags = CLK_SET_RATE_PARENT, 2638 .ops = &clk_branch2_ops, 2639 }, 2640 }, 2641 }; 2642 2643 static struct clk_branch gcc_gp3_clk = { 2644 .halt_reg = 0x4f000, 2645 .halt_check = BRANCH_HALT, 2646 .clkr = { 2647 .enable_reg = 0x4f000, 2648 .enable_mask = BIT(0), 2649 .hw.init = &(struct clk_init_data){ 2650 .name = "gcc_gp3_clk", 2651 .parent_hws = (const struct clk_hw*[]){ 2652 &gcc_gp3_clk_src.clkr.hw, 2653 }, 2654 .num_parents = 1, 2655 .flags = CLK_SET_RATE_PARENT, 2656 .ops = &clk_branch2_ops, 2657 }, 2658 }, 2659 }; 2660 2661 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 2662 .halt_reg = 0x36004, 2663 .halt_check = BRANCH_HALT, 2664 .hwcg_reg = 0x36004, 2665 .hwcg_bit = 1, 2666 .clkr = { 2667 .enable_reg = 0x36004, 2668 .enable_mask = BIT(0), 2669 .hw.init = &(struct clk_init_data){ 2670 .name = "gcc_gpu_cfg_ahb_clk", 2671 .flags = CLK_IS_CRITICAL, 2672 .ops = &clk_branch2_ops, 2673 }, 2674 }, 2675 }; 2676 2677 static struct clk_branch gcc_gpu_gpll0_clk_src = { 2678 .halt_check = BRANCH_HALT_DELAY, 2679 .clkr = { 2680 .enable_reg = 0x79004, 2681 .enable_mask = BIT(15), 2682 .hw.init = &(struct clk_init_data){ 2683 .name = "gcc_gpu_gpll0_clk_src", 2684 .parent_hws = (const struct clk_hw*[]){ 2685 &gpll0_out_early.clkr.hw, 2686 }, 2687 .num_parents = 1, 2688 .ops = &clk_branch2_ops, 2689 }, 2690 }, 2691 }; 2692 2693 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 2694 .halt_check = BRANCH_HALT_DELAY, 2695 .clkr = { 2696 .enable_reg = 0x79004, 2697 .enable_mask = BIT(16), 2698 .hw.init = &(struct clk_init_data){ 2699 .name = "gcc_gpu_gpll0_div_clk_src", 2700 .parent_hws = (const struct clk_hw*[]){ 2701 &gpll0_out_aux2.hw, 2702 }, 2703 .num_parents = 1, 2704 .ops = &clk_branch2_ops, 2705 }, 2706 }, 2707 }; 2708 2709 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 2710 .halt_reg = 0x3600c, 2711 .halt_check = BRANCH_VOTED, 2712 .clkr = { 2713 .enable_reg = 0x3600c, 2714 .enable_mask = BIT(0), 2715 .hw.init = &(struct clk_init_data){ 2716 .name = "gcc_gpu_memnoc_gfx_clk", 2717 .ops = &clk_branch2_ops, 2718 }, 2719 }, 2720 }; 2721 2722 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 2723 .halt_reg = 0x36018, 2724 .halt_check = BRANCH_HALT, 2725 .clkr = { 2726 .enable_reg = 0x36018, 2727 .enable_mask = BIT(0), 2728 .hw.init = &(struct clk_init_data){ 2729 .name = "gcc_gpu_snoc_dvm_gfx_clk", 2730 .ops = &clk_branch2_ops, 2731 }, 2732 }, 2733 }; 2734 2735 static struct clk_branch gcc_gpu_throttle_core_clk = { 2736 .halt_reg = 0x36048, 2737 .halt_check = BRANCH_HALT_VOTED, 2738 .clkr = { 2739 .enable_reg = 0x79004, 2740 .enable_mask = BIT(31), 2741 .hw.init = &(struct clk_init_data){ 2742 .name = "gcc_gpu_throttle_core_clk", 2743 .ops = &clk_branch2_ops, 2744 }, 2745 }, 2746 }; 2747 2748 static struct clk_branch gcc_gpu_throttle_xo_clk = { 2749 .halt_reg = 0x36044, 2750 .halt_check = BRANCH_HALT, 2751 .clkr = { 2752 .enable_reg = 0x36044, 2753 .enable_mask = BIT(0), 2754 .hw.init = &(struct clk_init_data){ 2755 .name = "gcc_gpu_throttle_xo_clk", 2756 .ops = &clk_branch2_ops, 2757 }, 2758 }, 2759 }; 2760 2761 static struct clk_branch gcc_mss_vs_clk = { 2762 .halt_reg = 0x42048, 2763 .halt_check = BRANCH_HALT, 2764 .clkr = { 2765 .enable_reg = 0x42048, 2766 .enable_mask = BIT(0), 2767 .hw.init = &(struct clk_init_data){ 2768 .name = "gcc_mss_vs_clk", 2769 .parent_hws = (const struct clk_hw*[]){ 2770 &gcc_vsensor_clk_src.clkr.hw, 2771 }, 2772 .num_parents = 1, 2773 .flags = CLK_SET_RATE_PARENT, 2774 .ops = &clk_branch2_ops, 2775 }, 2776 }, 2777 }; 2778 2779 static struct clk_branch gcc_pdm2_clk = { 2780 .halt_reg = 0x2000c, 2781 .halt_check = BRANCH_HALT, 2782 .clkr = { 2783 .enable_reg = 0x2000c, 2784 .enable_mask = BIT(0), 2785 .hw.init = &(struct clk_init_data){ 2786 .name = "gcc_pdm2_clk", 2787 .parent_hws = (const struct clk_hw*[]){ 2788 &gcc_pdm2_clk_src.clkr.hw, 2789 }, 2790 .num_parents = 1, 2791 .flags = CLK_SET_RATE_PARENT, 2792 .ops = &clk_branch2_ops, 2793 }, 2794 }, 2795 }; 2796 2797 static struct clk_branch gcc_pdm_ahb_clk = { 2798 .halt_reg = 0x20004, 2799 .halt_check = BRANCH_HALT, 2800 .hwcg_reg = 0x20004, 2801 .hwcg_bit = 1, 2802 .clkr = { 2803 .enable_reg = 0x20004, 2804 .enable_mask = BIT(0), 2805 .hw.init = &(struct clk_init_data){ 2806 .name = "gcc_pdm_ahb_clk", 2807 .ops = &clk_branch2_ops, 2808 }, 2809 }, 2810 }; 2811 2812 static struct clk_branch gcc_pdm_xo4_clk = { 2813 .halt_reg = 0x20008, 2814 .halt_check = BRANCH_HALT, 2815 .clkr = { 2816 .enable_reg = 0x20008, 2817 .enable_mask = BIT(0), 2818 .hw.init = &(struct clk_init_data){ 2819 .name = "gcc_pdm_xo4_clk", 2820 .ops = &clk_branch2_ops, 2821 }, 2822 }, 2823 }; 2824 2825 static struct clk_branch gcc_prng_ahb_clk = { 2826 .halt_reg = 0x21004, 2827 .halt_check = BRANCH_HALT_VOTED, 2828 .hwcg_reg = 0x21004, 2829 .hwcg_bit = 1, 2830 .clkr = { 2831 .enable_reg = 0x79004, 2832 .enable_mask = BIT(13), 2833 .hw.init = &(struct clk_init_data){ 2834 .name = "gcc_prng_ahb_clk", 2835 .ops = &clk_branch2_ops, 2836 }, 2837 }, 2838 }; 2839 2840 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2841 .halt_reg = 0x17014, 2842 .halt_check = BRANCH_HALT, 2843 .hwcg_reg = 0x17014, 2844 .hwcg_bit = 1, 2845 .clkr = { 2846 .enable_reg = 0x7900c, 2847 .enable_mask = BIT(0), 2848 .hw.init = &(struct clk_init_data){ 2849 .name = "gcc_qmip_camera_nrt_ahb_clk", 2850 .ops = &clk_branch2_ops, 2851 }, 2852 }, 2853 }; 2854 2855 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2856 .halt_reg = 0x17060, 2857 .halt_check = BRANCH_HALT_VOTED, 2858 .hwcg_reg = 0x17060, 2859 .hwcg_bit = 1, 2860 .clkr = { 2861 .enable_reg = 0x7900c, 2862 .enable_mask = BIT(2), 2863 .hw.init = &(struct clk_init_data){ 2864 .name = "gcc_qmip_camera_rt_ahb_clk", 2865 .ops = &clk_branch2_ops, 2866 }, 2867 }, 2868 }; 2869 2870 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2871 .halt_reg = 0x17018, 2872 .halt_check = BRANCH_HALT, 2873 .hwcg_reg = 0x17018, 2874 .hwcg_bit = 1, 2875 .clkr = { 2876 .enable_reg = 0x7900c, 2877 .enable_mask = BIT(1), 2878 .hw.init = &(struct clk_init_data){ 2879 .name = "gcc_qmip_disp_ahb_clk", 2880 .ops = &clk_branch2_ops, 2881 }, 2882 }, 2883 }; 2884 2885 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = { 2886 .halt_reg = 0x36040, 2887 .halt_check = BRANCH_HALT_VOTED, 2888 .hwcg_reg = 0x36040, 2889 .hwcg_bit = 1, 2890 .clkr = { 2891 .enable_reg = 0x7900c, 2892 .enable_mask = BIT(4), 2893 .hw.init = &(struct clk_init_data){ 2894 .name = "gcc_qmip_gpu_cfg_ahb_clk", 2895 .ops = &clk_branch2_ops, 2896 }, 2897 }, 2898 }; 2899 2900 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2901 .halt_reg = 0x17010, 2902 .halt_check = BRANCH_HALT, 2903 .hwcg_reg = 0x17010, 2904 .hwcg_bit = 1, 2905 .clkr = { 2906 .enable_reg = 0x79004, 2907 .enable_mask = BIT(25), 2908 .hw.init = &(struct clk_init_data){ 2909 .name = "gcc_qmip_video_vcodec_ahb_clk", 2910 .ops = &clk_branch2_ops, 2911 }, 2912 }, 2913 }; 2914 2915 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 2916 .halt_reg = 0x1f014, 2917 .halt_check = BRANCH_HALT_VOTED, 2918 .clkr = { 2919 .enable_reg = 0x7900c, 2920 .enable_mask = BIT(9), 2921 .hw.init = &(struct clk_init_data){ 2922 .name = "gcc_qupv3_wrap0_core_2x_clk", 2923 .ops = &clk_branch2_ops, 2924 }, 2925 }, 2926 }; 2927 2928 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 2929 .halt_reg = 0x1f00c, 2930 .halt_check = BRANCH_HALT_VOTED, 2931 .clkr = { 2932 .enable_reg = 0x7900c, 2933 .enable_mask = BIT(8), 2934 .hw.init = &(struct clk_init_data){ 2935 .name = "gcc_qupv3_wrap0_core_clk", 2936 .ops = &clk_branch2_ops, 2937 }, 2938 }, 2939 }; 2940 2941 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2942 .halt_reg = 0x1f144, 2943 .halt_check = BRANCH_HALT_VOTED, 2944 .clkr = { 2945 .enable_reg = 0x7900c, 2946 .enable_mask = BIT(10), 2947 .hw.init = &(struct clk_init_data){ 2948 .name = "gcc_qupv3_wrap0_s0_clk", 2949 .parent_hws = (const struct clk_hw*[]){ 2950 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 2951 }, 2952 .num_parents = 1, 2953 .flags = CLK_SET_RATE_PARENT, 2954 .ops = &clk_branch2_ops, 2955 }, 2956 }, 2957 }; 2958 2959 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2960 .halt_reg = 0x1f274, 2961 .halt_check = BRANCH_HALT_VOTED, 2962 .clkr = { 2963 .enable_reg = 0x7900c, 2964 .enable_mask = BIT(11), 2965 .hw.init = &(struct clk_init_data){ 2966 .name = "gcc_qupv3_wrap0_s1_clk", 2967 .parent_hws = (const struct clk_hw*[]){ 2968 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 2969 }, 2970 .num_parents = 1, 2971 .flags = CLK_SET_RATE_PARENT, 2972 .ops = &clk_branch2_ops, 2973 }, 2974 }, 2975 }; 2976 2977 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2978 .halt_reg = 0x1f3a4, 2979 .halt_check = BRANCH_HALT_VOTED, 2980 .clkr = { 2981 .enable_reg = 0x7900c, 2982 .enable_mask = BIT(12), 2983 .hw.init = &(struct clk_init_data){ 2984 .name = "gcc_qupv3_wrap0_s2_clk", 2985 .parent_hws = (const struct clk_hw*[]){ 2986 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 2987 }, 2988 .num_parents = 1, 2989 .flags = CLK_SET_RATE_PARENT, 2990 .ops = &clk_branch2_ops, 2991 }, 2992 }, 2993 }; 2994 2995 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2996 .halt_reg = 0x1f4d4, 2997 .halt_check = BRANCH_HALT_VOTED, 2998 .clkr = { 2999 .enable_reg = 0x7900c, 3000 .enable_mask = BIT(13), 3001 .hw.init = &(struct clk_init_data){ 3002 .name = "gcc_qupv3_wrap0_s3_clk", 3003 .parent_hws = (const struct clk_hw*[]){ 3004 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 3005 }, 3006 .num_parents = 1, 3007 .flags = CLK_SET_RATE_PARENT, 3008 .ops = &clk_branch2_ops, 3009 }, 3010 }, 3011 }; 3012 3013 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 3014 .halt_reg = 0x1f604, 3015 .halt_check = BRANCH_HALT_VOTED, 3016 .clkr = { 3017 .enable_reg = 0x7900c, 3018 .enable_mask = BIT(14), 3019 .hw.init = &(struct clk_init_data){ 3020 .name = "gcc_qupv3_wrap0_s4_clk", 3021 .parent_hws = (const struct clk_hw*[]){ 3022 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 3023 }, 3024 .num_parents = 1, 3025 .flags = CLK_SET_RATE_PARENT, 3026 .ops = &clk_branch2_ops, 3027 }, 3028 }, 3029 }; 3030 3031 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 3032 .halt_reg = 0x1f734, 3033 .halt_check = BRANCH_HALT_VOTED, 3034 .clkr = { 3035 .enable_reg = 0x7900c, 3036 .enable_mask = BIT(15), 3037 .hw.init = &(struct clk_init_data){ 3038 .name = "gcc_qupv3_wrap0_s5_clk", 3039 .parent_hws = (const struct clk_hw*[]){ 3040 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 3041 }, 3042 .num_parents = 1, 3043 .flags = CLK_SET_RATE_PARENT, 3044 .ops = &clk_branch2_ops, 3045 }, 3046 }, 3047 }; 3048 3049 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 3050 .halt_reg = 0x39014, 3051 .halt_check = BRANCH_HALT_VOTED, 3052 .clkr = { 3053 .enable_reg = 0x7900c, 3054 .enable_mask = BIT(18), 3055 .hw.init = &(struct clk_init_data){ 3056 .name = "gcc_qupv3_wrap1_core_2x_clk", 3057 .ops = &clk_branch2_ops, 3058 }, 3059 }, 3060 }; 3061 3062 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 3063 .halt_reg = 0x3900c, 3064 .halt_check = BRANCH_HALT_VOTED, 3065 .clkr = { 3066 .enable_reg = 0x7900c, 3067 .enable_mask = BIT(19), 3068 .hw.init = &(struct clk_init_data){ 3069 .name = "gcc_qupv3_wrap1_core_clk", 3070 .ops = &clk_branch2_ops, 3071 }, 3072 }, 3073 }; 3074 3075 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 3076 .halt_reg = 0x39144, 3077 .halt_check = BRANCH_HALT_VOTED, 3078 .clkr = { 3079 .enable_reg = 0x7900c, 3080 .enable_mask = BIT(22), 3081 .hw.init = &(struct clk_init_data){ 3082 .name = "gcc_qupv3_wrap1_s0_clk", 3083 .parent_hws = (const struct clk_hw*[]){ 3084 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 3085 }, 3086 .num_parents = 1, 3087 .flags = CLK_SET_RATE_PARENT, 3088 .ops = &clk_branch2_ops, 3089 }, 3090 }, 3091 }; 3092 3093 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 3094 .halt_reg = 0x39274, 3095 .halt_check = BRANCH_HALT_VOTED, 3096 .clkr = { 3097 .enable_reg = 0x7900c, 3098 .enable_mask = BIT(23), 3099 .hw.init = &(struct clk_init_data){ 3100 .name = "gcc_qupv3_wrap1_s1_clk", 3101 .parent_hws = (const struct clk_hw*[]){ 3102 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 3103 }, 3104 .num_parents = 1, 3105 .flags = CLK_SET_RATE_PARENT, 3106 .ops = &clk_branch2_ops, 3107 }, 3108 }, 3109 }; 3110 3111 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 3112 .halt_reg = 0x393a4, 3113 .halt_check = BRANCH_HALT_VOTED, 3114 .clkr = { 3115 .enable_reg = 0x7900c, 3116 .enable_mask = BIT(24), 3117 .hw.init = &(struct clk_init_data){ 3118 .name = "gcc_qupv3_wrap1_s2_clk", 3119 .parent_hws = (const struct clk_hw*[]){ 3120 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 3121 }, 3122 .num_parents = 1, 3123 .flags = CLK_SET_RATE_PARENT, 3124 .ops = &clk_branch2_ops, 3125 }, 3126 }, 3127 }; 3128 3129 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 3130 .halt_reg = 0x394d4, 3131 .halt_check = BRANCH_HALT_VOTED, 3132 .clkr = { 3133 .enable_reg = 0x7900c, 3134 .enable_mask = BIT(25), 3135 .hw.init = &(struct clk_init_data){ 3136 .name = "gcc_qupv3_wrap1_s3_clk", 3137 .parent_hws = (const struct clk_hw*[]){ 3138 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 3139 }, 3140 .num_parents = 1, 3141 .flags = CLK_SET_RATE_PARENT, 3142 .ops = &clk_branch2_ops, 3143 }, 3144 }, 3145 }; 3146 3147 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 3148 .halt_reg = 0x39604, 3149 .halt_check = BRANCH_HALT_VOTED, 3150 .clkr = { 3151 .enable_reg = 0x7900c, 3152 .enable_mask = BIT(26), 3153 .hw.init = &(struct clk_init_data){ 3154 .name = "gcc_qupv3_wrap1_s4_clk", 3155 .parent_hws = (const struct clk_hw*[]){ 3156 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 3157 }, 3158 .num_parents = 1, 3159 .flags = CLK_SET_RATE_PARENT, 3160 .ops = &clk_branch2_ops, 3161 }, 3162 }, 3163 }; 3164 3165 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 3166 .halt_reg = 0x39734, 3167 .halt_check = BRANCH_HALT_VOTED, 3168 .clkr = { 3169 .enable_reg = 0x7900c, 3170 .enable_mask = BIT(27), 3171 .hw.init = &(struct clk_init_data){ 3172 .name = "gcc_qupv3_wrap1_s5_clk", 3173 .parent_hws = (const struct clk_hw*[]){ 3174 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 3175 }, 3176 .num_parents = 1, 3177 .flags = CLK_SET_RATE_PARENT, 3178 .ops = &clk_branch2_ops, 3179 }, 3180 }, 3181 }; 3182 3183 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 3184 .halt_reg = 0x1f004, 3185 .halt_check = BRANCH_HALT_VOTED, 3186 .clkr = { 3187 .enable_reg = 0x7900c, 3188 .enable_mask = BIT(6), 3189 .hw.init = &(struct clk_init_data){ 3190 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 3191 .ops = &clk_branch2_ops, 3192 }, 3193 }, 3194 }; 3195 3196 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 3197 .halt_reg = 0x1f008, 3198 .halt_check = BRANCH_HALT_VOTED, 3199 .hwcg_reg = 0x1f008, 3200 .hwcg_bit = 1, 3201 .clkr = { 3202 .enable_reg = 0x7900c, 3203 .enable_mask = BIT(7), 3204 .hw.init = &(struct clk_init_data){ 3205 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 3206 .ops = &clk_branch2_ops, 3207 }, 3208 }, 3209 }; 3210 3211 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 3212 .halt_reg = 0x39004, 3213 .halt_check = BRANCH_HALT_VOTED, 3214 .clkr = { 3215 .enable_reg = 0x7900c, 3216 .enable_mask = BIT(20), 3217 .hw.init = &(struct clk_init_data){ 3218 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 3219 .ops = &clk_branch2_ops, 3220 }, 3221 }, 3222 }; 3223 3224 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 3225 .halt_reg = 0x39008, 3226 .halt_check = BRANCH_HALT_VOTED, 3227 .hwcg_reg = 0x39008, 3228 .hwcg_bit = 1, 3229 .clkr = { 3230 .enable_reg = 0x7900c, 3231 .enable_mask = BIT(21), 3232 .hw.init = &(struct clk_init_data){ 3233 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 3234 .ops = &clk_branch2_ops, 3235 }, 3236 }, 3237 }; 3238 3239 static struct clk_branch gcc_sdcc1_ahb_clk = { 3240 .halt_reg = 0x38008, 3241 .halt_check = BRANCH_HALT, 3242 .clkr = { 3243 .enable_reg = 0x38008, 3244 .enable_mask = BIT(0), 3245 .hw.init = &(struct clk_init_data){ 3246 .name = "gcc_sdcc1_ahb_clk", 3247 .ops = &clk_branch2_ops, 3248 }, 3249 }, 3250 }; 3251 3252 static struct clk_branch gcc_sdcc1_apps_clk = { 3253 .halt_reg = 0x38004, 3254 .halt_check = BRANCH_HALT, 3255 .clkr = { 3256 .enable_reg = 0x38004, 3257 .enable_mask = BIT(0), 3258 .hw.init = &(struct clk_init_data){ 3259 .name = "gcc_sdcc1_apps_clk", 3260 .parent_hws = (const struct clk_hw*[]){ 3261 &gcc_sdcc1_apps_clk_src.clkr.hw, 3262 }, 3263 .num_parents = 1, 3264 .flags = CLK_SET_RATE_PARENT, 3265 .ops = &clk_branch2_ops, 3266 }, 3267 }, 3268 }; 3269 3270 static struct clk_branch gcc_sdcc1_ice_core_clk = { 3271 .halt_reg = 0x3800c, 3272 .halt_check = BRANCH_HALT, 3273 .clkr = { 3274 .enable_reg = 0x3800c, 3275 .enable_mask = BIT(0), 3276 .hw.init = &(struct clk_init_data){ 3277 .name = "gcc_sdcc1_ice_core_clk", 3278 .parent_hws = (const struct clk_hw*[]){ 3279 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 3280 }, 3281 .num_parents = 1, 3282 .flags = CLK_SET_RATE_PARENT, 3283 .ops = &clk_branch2_ops, 3284 }, 3285 }, 3286 }; 3287 3288 static struct clk_branch gcc_sdcc2_ahb_clk = { 3289 .halt_reg = 0x1e008, 3290 .halt_check = BRANCH_HALT, 3291 .clkr = { 3292 .enable_reg = 0x1e008, 3293 .enable_mask = BIT(0), 3294 .hw.init = &(struct clk_init_data){ 3295 .name = "gcc_sdcc2_ahb_clk", 3296 .ops = &clk_branch2_ops, 3297 }, 3298 }, 3299 }; 3300 3301 static struct clk_branch gcc_sdcc2_apps_clk = { 3302 .halt_reg = 0x1e004, 3303 .halt_check = BRANCH_HALT, 3304 .clkr = { 3305 .enable_reg = 0x1e004, 3306 .enable_mask = BIT(0), 3307 .hw.init = &(struct clk_init_data){ 3308 .name = "gcc_sdcc2_apps_clk", 3309 .parent_hws = (const struct clk_hw*[]){ 3310 &gcc_sdcc2_apps_clk_src.clkr.hw, 3311 }, 3312 .num_parents = 1, 3313 .flags = CLK_SET_RATE_PARENT, 3314 .ops = &clk_branch2_ops, 3315 }, 3316 }, 3317 }; 3318 3319 static struct clk_branch gcc_sys_noc_compute_sf_axi_clk = { 3320 .halt_reg = 0x1050c, 3321 .halt_check = BRANCH_HALT, 3322 .clkr = { 3323 .enable_reg = 0x1050c, 3324 .enable_mask = BIT(0), 3325 .hw.init = &(struct clk_init_data){ 3326 .name = "gcc_sys_noc_compute_sf_axi_clk", 3327 .flags = CLK_IS_CRITICAL, 3328 .ops = &clk_branch2_ops, 3329 }, 3330 }, 3331 }; 3332 3333 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 3334 .halt_reg = 0x2b06c, 3335 .halt_check = BRANCH_HALT_VOTED, 3336 .clkr = { 3337 .enable_reg = 0x79004, 3338 .enable_mask = BIT(0), 3339 .hw.init = &(struct clk_init_data){ 3340 .name = "gcc_sys_noc_cpuss_ahb_clk", 3341 .flags = CLK_IS_CRITICAL, 3342 .ops = &clk_branch2_ops, 3343 }, 3344 }, 3345 }; 3346 3347 static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = { 3348 .halt_reg = 0x45098, 3349 .halt_check = BRANCH_HALT, 3350 .clkr = { 3351 .enable_reg = 0x45098, 3352 .enable_mask = BIT(0), 3353 .hw.init = &(struct clk_init_data){ 3354 .name = "gcc_sys_noc_ufs_phy_axi_clk", 3355 .parent_hws = (const struct clk_hw*[]){ 3356 &gcc_ufs_phy_axi_clk_src.clkr.hw, 3357 }, 3358 .num_parents = 1, 3359 .flags = CLK_SET_RATE_PARENT, 3360 .ops = &clk_branch2_ops, 3361 }, 3362 }, 3363 }; 3364 3365 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = { 3366 .halt_reg = 0x1a080, 3367 .halt_check = BRANCH_HALT, 3368 .clkr = { 3369 .enable_reg = 0x1a080, 3370 .enable_mask = BIT(0), 3371 .hw.init = &(struct clk_init_data){ 3372 .name = "gcc_sys_noc_usb3_prim_axi_clk", 3373 .parent_hws = (const struct clk_hw*[]){ 3374 &gcc_usb30_prim_master_clk_src.clkr.hw, 3375 }, 3376 .num_parents = 1, 3377 .flags = CLK_SET_RATE_PARENT, 3378 .ops = &clk_branch2_ops, 3379 }, 3380 }, 3381 }; 3382 3383 static struct clk_branch gcc_ufs_mem_clkref_clk = { 3384 .halt_reg = 0x8c000, 3385 .halt_check = BRANCH_HALT, 3386 .clkr = { 3387 .enable_reg = 0x8c000, 3388 .enable_mask = BIT(0), 3389 .hw.init = &(struct clk_init_data){ 3390 .name = "gcc_ufs_mem_clkref_clk", 3391 .ops = &clk_branch2_ops, 3392 }, 3393 }, 3394 }; 3395 3396 static struct clk_branch gcc_ufs_phy_ahb_clk = { 3397 .halt_reg = 0x45014, 3398 .halt_check = BRANCH_HALT, 3399 .hwcg_reg = 0x45014, 3400 .hwcg_bit = 1, 3401 .clkr = { 3402 .enable_reg = 0x45014, 3403 .enable_mask = BIT(0), 3404 .hw.init = &(struct clk_init_data){ 3405 .name = "gcc_ufs_phy_ahb_clk", 3406 .ops = &clk_branch2_ops, 3407 }, 3408 }, 3409 }; 3410 3411 static struct clk_branch gcc_ufs_phy_axi_clk = { 3412 .halt_reg = 0x45010, 3413 .halt_check = BRANCH_HALT, 3414 .hwcg_reg = 0x45010, 3415 .hwcg_bit = 1, 3416 .clkr = { 3417 .enable_reg = 0x45010, 3418 .enable_mask = BIT(0), 3419 .hw.init = &(struct clk_init_data){ 3420 .name = "gcc_ufs_phy_axi_clk", 3421 .parent_hws = (const struct clk_hw*[]){ 3422 &gcc_ufs_phy_axi_clk_src.clkr.hw, 3423 }, 3424 .num_parents = 1, 3425 .flags = CLK_SET_RATE_PARENT, 3426 .ops = &clk_branch2_ops, 3427 }, 3428 }, 3429 }; 3430 3431 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 3432 .halt_reg = 0x45044, 3433 .halt_check = BRANCH_HALT, 3434 .hwcg_reg = 0x45044, 3435 .hwcg_bit = 1, 3436 .clkr = { 3437 .enable_reg = 0x45044, 3438 .enable_mask = BIT(0), 3439 .hw.init = &(struct clk_init_data){ 3440 .name = "gcc_ufs_phy_ice_core_clk", 3441 .parent_hws = (const struct clk_hw*[]){ 3442 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 3443 }, 3444 .num_parents = 1, 3445 .flags = CLK_SET_RATE_PARENT, 3446 .ops = &clk_branch2_ops, 3447 }, 3448 }, 3449 }; 3450 3451 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 3452 .halt_reg = 0x45078, 3453 .halt_check = BRANCH_HALT, 3454 .hwcg_reg = 0x45078, 3455 .hwcg_bit = 1, 3456 .clkr = { 3457 .enable_reg = 0x45078, 3458 .enable_mask = BIT(0), 3459 .hw.init = &(struct clk_init_data){ 3460 .name = "gcc_ufs_phy_phy_aux_clk", 3461 .parent_hws = (const struct clk_hw*[]){ 3462 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 3463 }, 3464 .num_parents = 1, 3465 .flags = CLK_SET_RATE_PARENT, 3466 .ops = &clk_branch2_ops, 3467 }, 3468 }, 3469 }; 3470 3471 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 3472 .halt_reg = 0x4501c, 3473 .halt_check = BRANCH_HALT_SKIP, 3474 .clkr = { 3475 .enable_reg = 0x4501c, 3476 .enable_mask = BIT(0), 3477 .hw.init = &(struct clk_init_data){ 3478 .name = "gcc_ufs_phy_rx_symbol_0_clk", 3479 .ops = &clk_branch2_ops, 3480 }, 3481 }, 3482 }; 3483 3484 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 3485 .halt_reg = 0x45018, 3486 .halt_check = BRANCH_HALT_SKIP, 3487 .clkr = { 3488 .enable_reg = 0x45018, 3489 .enable_mask = BIT(0), 3490 .hw.init = &(struct clk_init_data){ 3491 .name = "gcc_ufs_phy_tx_symbol_0_clk", 3492 .ops = &clk_branch2_ops, 3493 }, 3494 }, 3495 }; 3496 3497 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 3498 .halt_reg = 0x45040, 3499 .halt_check = BRANCH_HALT, 3500 .hwcg_reg = 0x45040, 3501 .hwcg_bit = 1, 3502 .clkr = { 3503 .enable_reg = 0x45040, 3504 .enable_mask = BIT(0), 3505 .hw.init = &(struct clk_init_data){ 3506 .name = "gcc_ufs_phy_unipro_core_clk", 3507 .parent_hws = (const struct clk_hw*[]){ 3508 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 3509 }, 3510 .num_parents = 1, 3511 .flags = CLK_SET_RATE_PARENT, 3512 .ops = &clk_branch2_ops, 3513 }, 3514 }, 3515 }; 3516 3517 static struct clk_branch gcc_usb30_prim_master_clk = { 3518 .halt_reg = 0x1a010, 3519 .halt_check = BRANCH_HALT, 3520 .clkr = { 3521 .enable_reg = 0x1a010, 3522 .enable_mask = BIT(0), 3523 .hw.init = &(struct clk_init_data){ 3524 .name = "gcc_usb30_prim_master_clk", 3525 .parent_hws = (const struct clk_hw*[]){ 3526 &gcc_usb30_prim_master_clk_src.clkr.hw, 3527 }, 3528 .num_parents = 1, 3529 .flags = CLK_SET_RATE_PARENT, 3530 .ops = &clk_branch2_ops, 3531 }, 3532 }, 3533 }; 3534 3535 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3536 .halt_reg = 0x1a018, 3537 .halt_check = BRANCH_HALT, 3538 .clkr = { 3539 .enable_reg = 0x1a018, 3540 .enable_mask = BIT(0), 3541 .hw.init = &(struct clk_init_data){ 3542 .name = "gcc_usb30_prim_mock_utmi_clk", 3543 .parent_hws = (const struct clk_hw*[]){ 3544 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 3545 }, 3546 .num_parents = 1, 3547 .flags = CLK_SET_RATE_PARENT, 3548 .ops = &clk_branch2_ops, 3549 }, 3550 }, 3551 }; 3552 3553 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3554 .halt_reg = 0x1a014, 3555 .halt_check = BRANCH_HALT, 3556 .clkr = { 3557 .enable_reg = 0x1a014, 3558 .enable_mask = BIT(0), 3559 .hw.init = &(struct clk_init_data){ 3560 .name = "gcc_usb30_prim_sleep_clk", 3561 .ops = &clk_branch2_ops, 3562 }, 3563 }, 3564 }; 3565 3566 static struct clk_branch gcc_usb3_prim_clkref_clk = { 3567 .halt_reg = 0x80278, 3568 .halt_check = BRANCH_HALT, 3569 .clkr = { 3570 .enable_reg = 0x80278, 3571 .enable_mask = BIT(0), 3572 .hw.init = &(struct clk_init_data){ 3573 .name = "gcc_usb3_prim_clkref_clk", 3574 .ops = &clk_branch2_ops, 3575 }, 3576 }, 3577 }; 3578 3579 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3580 .halt_reg = 0x1a054, 3581 .halt_check = BRANCH_HALT, 3582 .clkr = { 3583 .enable_reg = 0x1a054, 3584 .enable_mask = BIT(0), 3585 .hw.init = &(struct clk_init_data){ 3586 .name = "gcc_usb3_prim_phy_com_aux_clk", 3587 .parent_hws = (const struct clk_hw*[]){ 3588 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 3589 }, 3590 .num_parents = 1, 3591 .flags = CLK_SET_RATE_PARENT, 3592 .ops = &clk_branch2_ops, 3593 }, 3594 }, 3595 }; 3596 3597 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3598 .halt_check = BRANCH_HALT_SKIP, 3599 .clkr = { 3600 .enable_reg = 0x1a058, 3601 .enable_mask = BIT(0), 3602 .hw.init = &(struct clk_init_data){ 3603 .name = "gcc_usb3_prim_phy_pipe_clk", 3604 .ops = &clk_branch2_ops, 3605 }, 3606 }, 3607 }; 3608 3609 static struct clk_branch gcc_vdda_vs_clk = { 3610 .halt_reg = 0x4200c, 3611 .halt_check = BRANCH_HALT, 3612 .clkr = { 3613 .enable_reg = 0x4200c, 3614 .enable_mask = BIT(0), 3615 .hw.init = &(struct clk_init_data){ 3616 .name = "gcc_vdda_vs_clk", 3617 .parent_hws = (const struct clk_hw*[]){ 3618 &gcc_vsensor_clk_src.clkr.hw, 3619 }, 3620 .num_parents = 1, 3621 .flags = CLK_SET_RATE_PARENT, 3622 .ops = &clk_branch2_ops, 3623 }, 3624 }, 3625 }; 3626 3627 static struct clk_branch gcc_vddcx_vs_clk = { 3628 .halt_reg = 0x42004, 3629 .halt_check = BRANCH_HALT, 3630 .clkr = { 3631 .enable_reg = 0x42004, 3632 .enable_mask = BIT(0), 3633 .hw.init = &(struct clk_init_data){ 3634 .name = "gcc_vddcx_vs_clk", 3635 .parent_hws = (const struct clk_hw*[]){ 3636 &gcc_vsensor_clk_src.clkr.hw, 3637 }, 3638 .num_parents = 1, 3639 .flags = CLK_SET_RATE_PARENT, 3640 .ops = &clk_branch2_ops, 3641 }, 3642 }, 3643 }; 3644 3645 static struct clk_branch gcc_vddmx_vs_clk = { 3646 .halt_reg = 0x42008, 3647 .halt_check = BRANCH_HALT, 3648 .clkr = { 3649 .enable_reg = 0x42008, 3650 .enable_mask = BIT(0), 3651 .hw.init = &(struct clk_init_data){ 3652 .name = "gcc_vddmx_vs_clk", 3653 .parent_hws = (const struct clk_hw*[]){ 3654 &gcc_vsensor_clk_src.clkr.hw, 3655 }, 3656 .num_parents = 1, 3657 .flags = CLK_SET_RATE_PARENT, 3658 .ops = &clk_branch2_ops, 3659 }, 3660 }, 3661 }; 3662 3663 static struct clk_branch gcc_video_ahb_clk = { 3664 .halt_reg = 0x17004, 3665 .halt_check = BRANCH_HALT, 3666 .hwcg_reg = 0x17004, 3667 .hwcg_bit = 1, 3668 .clkr = { 3669 .enable_reg = 0x17004, 3670 .enable_mask = BIT(0), 3671 .hw.init = &(struct clk_init_data){ 3672 .name = "gcc_video_ahb_clk", 3673 .flags = CLK_IS_CRITICAL, 3674 .ops = &clk_branch2_ops, 3675 }, 3676 }, 3677 }; 3678 3679 static struct clk_branch gcc_video_axi0_clk = { 3680 .halt_reg = 0x1701c, 3681 .halt_check = BRANCH_HALT, 3682 .clkr = { 3683 .enable_reg = 0x1701c, 3684 .enable_mask = BIT(0), 3685 .hw.init = &(struct clk_init_data){ 3686 .name = "gcc_video_axi0_clk", 3687 .ops = &clk_branch2_ops, 3688 }, 3689 }, 3690 }; 3691 3692 static struct clk_branch gcc_video_throttle_core_clk = { 3693 .halt_reg = 0x17068, 3694 .halt_check = BRANCH_HALT_VOTED, 3695 .clkr = { 3696 .enable_reg = 0x79004, 3697 .enable_mask = BIT(28), 3698 .hw.init = &(struct clk_init_data){ 3699 .name = "gcc_video_throttle_core_clk", 3700 .ops = &clk_branch2_ops, 3701 }, 3702 }, 3703 }; 3704 3705 static struct clk_branch gcc_video_xo_clk = { 3706 .halt_reg = 0x17024, 3707 .halt_check = BRANCH_HALT, 3708 .clkr = { 3709 .enable_reg = 0x17024, 3710 .enable_mask = BIT(0), 3711 .hw.init = &(struct clk_init_data){ 3712 .name = "gcc_video_xo_clk", 3713 .flags = CLK_IS_CRITICAL, 3714 .ops = &clk_branch2_ops, 3715 }, 3716 }, 3717 }; 3718 3719 static struct clk_branch gcc_vs_ctrl_ahb_clk = { 3720 .halt_reg = 0x42014, 3721 .halt_check = BRANCH_HALT, 3722 .hwcg_reg = 0x42014, 3723 .hwcg_bit = 1, 3724 .clkr = { 3725 .enable_reg = 0x42014, 3726 .enable_mask = BIT(0), 3727 .hw.init = &(struct clk_init_data){ 3728 .name = "gcc_vs_ctrl_ahb_clk", 3729 .ops = &clk_branch2_ops, 3730 }, 3731 }, 3732 }; 3733 3734 static struct clk_branch gcc_vs_ctrl_clk = { 3735 .halt_reg = 0x42010, 3736 .halt_check = BRANCH_HALT, 3737 .clkr = { 3738 .enable_reg = 0x42010, 3739 .enable_mask = BIT(0), 3740 .hw.init = &(struct clk_init_data){ 3741 .name = "gcc_vs_ctrl_clk", 3742 .parent_hws = (const struct clk_hw*[]){ 3743 &gcc_vs_ctrl_clk_src.clkr.hw, 3744 }, 3745 .num_parents = 1, 3746 .flags = CLK_SET_RATE_PARENT, 3747 .ops = &clk_branch2_ops, 3748 }, 3749 }, 3750 }; 3751 3752 static struct clk_branch gcc_wcss_vs_clk = { 3753 .halt_reg = 0x42050, 3754 .halt_check = BRANCH_HALT, 3755 .clkr = { 3756 .enable_reg = 0x42050, 3757 .enable_mask = BIT(0), 3758 .hw.init = &(struct clk_init_data){ 3759 .name = "gcc_wcss_vs_clk", 3760 .parent_hws = (const struct clk_hw*[]){ 3761 &gcc_vsensor_clk_src.clkr.hw, 3762 }, 3763 .num_parents = 1, 3764 .flags = CLK_SET_RATE_PARENT, 3765 .ops = &clk_branch2_ops, 3766 }, 3767 }, 3768 }; 3769 3770 static struct gdsc usb30_prim_gdsc = { 3771 .gdscr = 0x1a004, 3772 .pd = { 3773 .name = "usb30_prim_gdsc", 3774 }, 3775 .pwrsts = PWRSTS_OFF_ON, 3776 }; 3777 3778 static struct gdsc ufs_phy_gdsc = { 3779 .gdscr = 0x45004, 3780 .pd = { 3781 .name = "ufs_phy_gdsc", 3782 }, 3783 .pwrsts = PWRSTS_OFF_ON, 3784 }; 3785 3786 static struct gdsc camss_vfe0_gdsc = { 3787 .gdscr = 0x54004, 3788 .pd = { 3789 .name = "camss_vfe0_gdsc", 3790 }, 3791 .pwrsts = PWRSTS_OFF_ON, 3792 }; 3793 3794 static struct gdsc camss_vfe1_gdsc = { 3795 .gdscr = 0x5403c, 3796 .pd = { 3797 .name = "camss_vfe1_gdsc", 3798 }, 3799 .pwrsts = PWRSTS_OFF_ON, 3800 }; 3801 3802 static struct gdsc camss_top_gdsc = { 3803 .gdscr = 0x5607c, 3804 .pd = { 3805 .name = "camss_top_gdsc", 3806 }, 3807 .pwrsts = PWRSTS_OFF_ON, 3808 }; 3809 3810 static struct gdsc cam_cpp_gdsc = { 3811 .gdscr = 0x560bc, 3812 .pd = { 3813 .name = "cam_cpp_gdsc", 3814 }, 3815 .pwrsts = PWRSTS_OFF_ON, 3816 }; 3817 3818 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = { 3819 .gdscr = 0x7d060, 3820 .pd = { 3821 .name = "hlos1_vote_turing_mmu_tbu1_gdsc", 3822 }, 3823 .pwrsts = PWRSTS_OFF_ON, 3824 .flags = VOTABLE, 3825 }; 3826 3827 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = { 3828 .gdscr = 0x80074, 3829 .pd = { 3830 .name = "hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc", 3831 }, 3832 .pwrsts = PWRSTS_OFF_ON, 3833 .flags = VOTABLE, 3834 }; 3835 3836 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = { 3837 .gdscr = 0x80084, 3838 .pd = { 3839 .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc", 3840 }, 3841 .pwrsts = PWRSTS_OFF_ON, 3842 .flags = VOTABLE, 3843 }; 3844 3845 3846 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = { 3847 .gdscr = 0x80094, 3848 .pd = { 3849 .name = "hlos1_vote_turing_mmu_tbu0_gdsc", 3850 }, 3851 .pwrsts = PWRSTS_OFF_ON, 3852 .flags = VOTABLE, 3853 }; 3854 3855 static struct gdsc *gcc_sm6125_gdscs[] = { 3856 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 3857 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 3858 [CAMSS_VFE0_GDSC] = &camss_vfe0_gdsc, 3859 [CAMSS_VFE1_GDSC] = &camss_vfe1_gdsc, 3860 [CAMSS_TOP_GDSC] = &camss_top_gdsc, 3861 [CAM_CPP_GDSC] = &cam_cpp_gdsc, 3862 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc, 3863 [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc, 3864 [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc, 3865 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc, 3866 }; 3867 3868 static struct clk_hw *gcc_sm6125_hws[] = { 3869 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.hw, 3870 [GPLL0_OUT_MAIN] = &gpll0_out_main.hw, 3871 [GPLL6_OUT_MAIN] = &gpll6_out_main.hw, 3872 [GPLL7_OUT_MAIN] = &gpll7_out_main.hw, 3873 [GPLL8_OUT_MAIN] = &gpll8_out_main.hw, 3874 [GPLL9_OUT_MAIN] = &gpll9_out_main.hw, 3875 }; 3876 3877 static struct clk_regmap *gcc_sm6125_clocks[] = { 3878 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr, 3879 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr, 3880 [GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr, 3881 [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr, 3882 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3883 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 3884 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 3885 [GCC_CAMSS_AHB_CLK_SRC] = &gcc_camss_ahb_clk_src.clkr, 3886 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr, 3887 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr, 3888 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr, 3889 [GCC_CAMSS_CPHY_CSID0_CLK] = &gcc_camss_cphy_csid0_clk.clkr, 3890 [GCC_CAMSS_CPHY_CSID1_CLK] = &gcc_camss_cphy_csid1_clk.clkr, 3891 [GCC_CAMSS_CPHY_CSID2_CLK] = &gcc_camss_cphy_csid2_clk.clkr, 3892 [GCC_CAMSS_CPHY_CSID3_CLK] = &gcc_camss_cphy_csid3_clk.clkr, 3893 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr, 3894 [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr, 3895 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr, 3896 [GCC_CAMSS_CPP_CLK_SRC] = &gcc_camss_cpp_clk_src.clkr, 3897 [GCC_CAMSS_CPP_VBIF_AHB_CLK] = &gcc_camss_cpp_vbif_ahb_clk.clkr, 3898 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, 3899 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, 3900 [GCC_CAMSS_CSI0_CLK_SRC] = &gcc_camss_csi0_clk_src.clkr, 3901 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 3902 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr, 3903 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, 3904 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, 3905 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, 3906 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, 3907 [GCC_CAMSS_CSI1_CLK_SRC] = &gcc_camss_csi1_clk_src.clkr, 3908 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 3909 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr, 3910 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, 3911 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, 3912 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr, 3913 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr, 3914 [GCC_CAMSS_CSI2_CLK_SRC] = &gcc_camss_csi2_clk_src.clkr, 3915 [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr, 3916 [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr, 3917 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr, 3918 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr, 3919 [GCC_CAMSS_CSI3_AHB_CLK] = &gcc_camss_csi3_ahb_clk.clkr, 3920 [GCC_CAMSS_CSI3_CLK] = &gcc_camss_csi3_clk.clkr, 3921 [GCC_CAMSS_CSI3_CLK_SRC] = &gcc_camss_csi3_clk_src.clkr, 3922 [GCC_CAMSS_CSI3PIX_CLK] = &gcc_camss_csi3pix_clk.clkr, 3923 [GCC_CAMSS_CSI3RDI_CLK] = &gcc_camss_csi3rdi_clk.clkr, 3924 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, 3925 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr, 3926 [GCC_CAMSS_CSIPHY0_CLK] = &gcc_camss_csiphy0_clk.clkr, 3927 [GCC_CAMSS_CSIPHY1_CLK] = &gcc_camss_csiphy1_clk.clkr, 3928 [GCC_CAMSS_CSIPHY2_CLK] = &gcc_camss_csiphy2_clk.clkr, 3929 [GCC_CAMSS_CSIPHY_CLK_SRC] = &gcc_camss_csiphy_clk_src.clkr, 3930 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, 3931 [GCC_CAMSS_GP0_CLK_SRC] = &gcc_camss_gp0_clk_src.clkr, 3932 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, 3933 [GCC_CAMSS_GP1_CLK_SRC] = &gcc_camss_gp1_clk_src.clkr, 3934 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, 3935 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr, 3936 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr, 3937 [GCC_CAMSS_JPEG_CLK] = &gcc_camss_jpeg_clk.clkr, 3938 [GCC_CAMSS_JPEG_CLK_SRC] = &gcc_camss_jpeg_clk_src.clkr, 3939 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 3940 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr, 3941 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 3942 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr, 3943 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 3944 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr, 3945 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr, 3946 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr, 3947 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr, 3948 [GCC_CAMSS_THROTTLE_NRT_AXI_CLK] = &gcc_camss_throttle_nrt_axi_clk.clkr, 3949 [GCC_CAMSS_THROTTLE_RT_AXI_CLK] = &gcc_camss_throttle_rt_axi_clk.clkr, 3950 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 3951 [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr, 3952 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, 3953 [GCC_CAMSS_VFE0_CLK_SRC] = &gcc_camss_vfe0_clk_src.clkr, 3954 [GCC_CAMSS_VFE0_STREAM_CLK] = &gcc_camss_vfe0_stream_clk.clkr, 3955 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr, 3956 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr, 3957 [GCC_CAMSS_VFE1_CLK_SRC] = &gcc_camss_vfe1_clk_src.clkr, 3958 [GCC_CAMSS_VFE1_STREAM_CLK] = &gcc_camss_vfe1_stream_clk.clkr, 3959 [GCC_CAMSS_VFE_TSCTR_CLK] = &gcc_camss_vfe_tsctr_clk.clkr, 3960 [GCC_CAMSS_VFE_VBIF_AHB_CLK] = &gcc_camss_vfe_vbif_ahb_clk.clkr, 3961 [GCC_CAMSS_VFE_VBIF_AXI_CLK] = &gcc_camss_vfe_vbif_axi_clk.clkr, 3962 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr, 3963 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr, 3964 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr, 3965 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3966 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 3967 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 3968 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr, 3969 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3970 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr, 3971 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 3972 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3973 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3974 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3975 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3976 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3977 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3978 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 3979 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3980 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3981 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3982 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3983 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr, 3984 [GCC_GPU_THROTTLE_XO_CLK] = &gcc_gpu_throttle_xo_clk.clkr, 3985 [GCC_MSS_VS_CLK] = &gcc_mss_vs_clk.clkr, 3986 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3987 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3988 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3989 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3990 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3991 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3992 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3993 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3994 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr, 3995 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3996 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 3997 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 3998 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 3999 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 4000 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 4001 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 4002 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 4003 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 4004 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 4005 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 4006 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 4007 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 4008 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 4009 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 4010 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 4011 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 4012 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 4013 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 4014 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 4015 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 4016 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 4017 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 4018 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 4019 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 4020 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 4021 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 4022 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 4023 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 4024 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 4025 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 4026 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 4027 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 4028 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 4029 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 4030 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 4031 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 4032 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 4033 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 4034 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 4035 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 4036 [GCC_SYS_NOC_COMPUTE_SF_AXI_CLK] = &gcc_sys_noc_compute_sf_axi_clk.clkr, 4037 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 4038 [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr, 4039 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr, 4040 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 4041 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 4042 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 4043 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 4044 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 4045 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 4046 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 4047 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 4048 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 4049 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 4050 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 4051 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 4052 &gcc_ufs_phy_unipro_core_clk_src.clkr, 4053 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 4054 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 4055 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 4056 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 4057 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 4058 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 4059 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 4060 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 4061 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 4062 [GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr, 4063 [GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr, 4064 [GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr, 4065 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 4066 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 4067 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr, 4068 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 4069 [GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr, 4070 [GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr, 4071 [GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr, 4072 [GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr, 4073 [GCC_WCSS_VS_CLK] = &gcc_wcss_vs_clk.clkr, 4074 [GPLL0_OUT_EARLY] = &gpll0_out_early.clkr, 4075 [GPLL3_OUT_EARLY] = &gpll3_out_early.clkr, 4076 [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr, 4077 [GPLL5_OUT_MAIN] = &gpll5_out_main.clkr, 4078 [GPLL6_OUT_EARLY] = &gpll6_out_early.clkr, 4079 [GPLL7_OUT_EARLY] = &gpll7_out_early.clkr, 4080 [GPLL8_OUT_EARLY] = &gpll8_out_early.clkr, 4081 [GPLL9_OUT_EARLY] = &gpll9_out_early.clkr, 4082 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 4083 }; 4084 4085 static const struct qcom_reset_map gcc_sm6125_resets[] = { 4086 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 }, 4087 [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 }, 4088 [GCC_UFS_PHY_BCR] = { 0x45000 }, 4089 [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 4090 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 }, 4091 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 }, 4092 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 }, 4093 [GCC_CAMSS_MICRO_BCR] = { 0x560ac }, 4094 }; 4095 4096 static struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 4097 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 4098 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 4099 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 4100 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 4101 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 4102 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 4103 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 4104 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 4105 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 4106 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 4107 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 4108 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 4109 }; 4110 4111 static const struct regmap_config gcc_sm6125_regmap_config = { 4112 .reg_bits = 32, 4113 .reg_stride = 4, 4114 .val_bits = 32, 4115 .max_register = 0xc7000, 4116 .fast_io = true, 4117 }; 4118 4119 static const struct qcom_cc_desc gcc_sm6125_desc = { 4120 .config = &gcc_sm6125_regmap_config, 4121 .clks = gcc_sm6125_clocks, 4122 .num_clks = ARRAY_SIZE(gcc_sm6125_clocks), 4123 .clk_hws = gcc_sm6125_hws, 4124 .num_clk_hws = ARRAY_SIZE(gcc_sm6125_hws), 4125 .resets = gcc_sm6125_resets, 4126 .num_resets = ARRAY_SIZE(gcc_sm6125_resets), 4127 .gdscs = gcc_sm6125_gdscs, 4128 .num_gdscs = ARRAY_SIZE(gcc_sm6125_gdscs), 4129 }; 4130 4131 static const struct of_device_id gcc_sm6125_match_table[] = { 4132 { .compatible = "qcom,gcc-sm6125" }, 4133 { } 4134 }; 4135 MODULE_DEVICE_TABLE(of, gcc_sm6125_match_table); 4136 4137 static int gcc_sm6125_probe(struct platform_device *pdev) 4138 { 4139 struct regmap *regmap; 4140 int ret; 4141 4142 regmap = qcom_cc_map(pdev, &gcc_sm6125_desc); 4143 if (IS_ERR(regmap)) 4144 return PTR_ERR(regmap); 4145 4146 /* 4147 * Disable the GPLL0 active input to video block via 4148 * MISC registers. 4149 */ 4150 regmap_update_bits(regmap, 0x80258, 0x1, 0x1); 4151 4152 /* 4153 * Enable DUAL_EDGE mode for MCLK RCGs 4154 * This is requierd to enable MND divider mode 4155 */ 4156 regmap_update_bits(regmap, 0x51004, 0x3000, 0x2000); 4157 regmap_update_bits(regmap, 0x51020, 0x3000, 0x2000); 4158 regmap_update_bits(regmap, 0x5103c, 0x3000, 0x2000); 4159 regmap_update_bits(regmap, 0x51058, 0x3000, 0x2000); 4160 4161 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 4162 ARRAY_SIZE(gcc_dfs_clocks)); 4163 if (ret) 4164 return ret; 4165 4166 return qcom_cc_really_probe(pdev, &gcc_sm6125_desc, regmap); 4167 } 4168 4169 static struct platform_driver gcc_sm6125_driver = { 4170 .probe = gcc_sm6125_probe, 4171 .driver = { 4172 .name = "gcc-sm6125", 4173 .of_match_table = gcc_sm6125_match_table, 4174 }, 4175 }; 4176 4177 static int __init gcc_sm6125_init(void) 4178 { 4179 return platform_driver_register(&gcc_sm6125_driver); 4180 } 4181 subsys_initcall(gcc_sm6125_init); 4182 4183 static void __exit gcc_sm6125_exit(void) 4184 { 4185 platform_driver_unregister(&gcc_sm6125_driver); 4186 } 4187 module_exit(gcc_sm6125_exit); 4188 4189 MODULE_DESCRIPTION("QTI GCC SM6125 Driver"); 4190 MODULE_LICENSE("GPL v2"); 4191