1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/err.h> 7 #include <linux/kernel.h> 8 #include <linux/module.h> 9 #include <linux/of_device.h> 10 #include <linux/clk-provider.h> 11 #include <linux/regmap.h> 12 #include <linux/reset-controller.h> 13 14 #include <dt-bindings/clock/qcom,gcc-sm6115.h> 15 16 #include "clk-alpha-pll.h" 17 #include "clk-branch.h" 18 #include "clk-pll.h" 19 #include "clk-rcg.h" 20 #include "clk-regmap.h" 21 #include "clk-regmap-divider.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_GPLL10_OUT_MAIN, 31 P_GPLL11_OUT_MAIN, 32 P_GPLL3_OUT_EARLY, 33 P_GPLL4_OUT_MAIN, 34 P_GPLL6_OUT_EARLY, 35 P_GPLL6_OUT_MAIN, 36 P_GPLL7_OUT_MAIN, 37 P_GPLL8_OUT_EARLY, 38 P_GPLL8_OUT_MAIN, 39 P_GPLL9_OUT_EARLY, 40 P_GPLL9_OUT_MAIN, 41 P_SLEEP_CLK, 42 }; 43 44 static struct pll_vco default_vco[] = { 45 { 500000000, 1000000000, 2 }, 46 }; 47 48 static struct pll_vco gpll9_vco[] = { 49 { 500000000, 1250000000, 0 }, 50 }; 51 52 static struct pll_vco gpll10_vco[] = { 53 { 750000000, 1500000000, 1 }, 54 }; 55 56 static struct clk_alpha_pll gpll0 = { 57 .offset = 0x0, 58 .vco_table = default_vco, 59 .num_vco = ARRAY_SIZE(default_vco), 60 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 61 .clkr = { 62 .enable_reg = 0x79000, 63 .enable_mask = BIT(0), 64 .hw.init = &(struct clk_init_data){ 65 .name = "gpll0", 66 .parent_data = &(const struct clk_parent_data){ 67 .fw_name = "bi_tcxo", 68 }, 69 .num_parents = 1, 70 .ops = &clk_alpha_pll_ops, 71 }, 72 }, 73 }; 74 75 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = { 76 { 0x1, 2 }, 77 { } 78 }; 79 80 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = { 81 .offset = 0x0, 82 .post_div_shift = 8, 83 .post_div_table = post_div_table_gpll0_out_aux2, 84 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2), 85 .width = 4, 86 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 87 .clkr.hw.init = &(struct clk_init_data){ 88 .name = "gpll0_out_aux2", 89 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 90 .num_parents = 1, 91 .ops = &clk_alpha_pll_postdiv_ro_ops, 92 }, 93 }; 94 95 static const struct clk_div_table post_div_table_gpll0_out_main[] = { 96 { 0x0, 1 }, 97 { } 98 }; 99 100 static struct clk_alpha_pll_postdiv gpll0_out_main = { 101 .offset = 0x0, 102 .post_div_shift = 8, 103 .post_div_table = post_div_table_gpll0_out_main, 104 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main), 105 .width = 4, 106 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 107 .clkr.hw.init = &(struct clk_init_data){ 108 .name = "gpll0_out_main", 109 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 110 .num_parents = 1, 111 .ops = &clk_alpha_pll_postdiv_ro_ops, 112 }, 113 }; 114 115 /* 1152MHz configuration */ 116 static const struct alpha_pll_config gpll10_config = { 117 .l = 0x3c, 118 .vco_val = 0x1 << 20, 119 .vco_mask = GENMASK(21, 20), 120 .main_output_mask = BIT(0), 121 .config_ctl_val = 0x4001055b, 122 }; 123 124 static struct clk_alpha_pll gpll10 = { 125 .offset = 0xa000, 126 .vco_table = gpll10_vco, 127 .num_vco = ARRAY_SIZE(gpll10_vco), 128 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 129 .clkr = { 130 .enable_reg = 0x79000, 131 .enable_mask = BIT(10), 132 .hw.init = &(struct clk_init_data){ 133 .name = "gpll10", 134 .parent_data = &(const struct clk_parent_data){ 135 .fw_name = "bi_tcxo", 136 }, 137 .num_parents = 1, 138 .ops = &clk_alpha_pll_ops, 139 }, 140 }, 141 }; 142 143 static const struct clk_div_table post_div_table_gpll10_out_main[] = { 144 { 0x0, 1 }, 145 { } 146 }; 147 148 static struct clk_alpha_pll_postdiv gpll10_out_main = { 149 .offset = 0xa000, 150 .post_div_shift = 8, 151 .post_div_table = post_div_table_gpll10_out_main, 152 .num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main), 153 .width = 4, 154 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 155 .clkr.hw.init = &(struct clk_init_data){ 156 .name = "gpll10_out_main", 157 .parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw }, 158 .num_parents = 1, 159 .flags = CLK_SET_RATE_PARENT, 160 .ops = &clk_alpha_pll_postdiv_ops, 161 }, 162 }; 163 164 /* 600MHz configuration */ 165 static const struct alpha_pll_config gpll11_config = { 166 .l = 0x1F, 167 .alpha = 0x0, 168 .alpha_hi = 0x40, 169 .alpha_en_mask = BIT(24), 170 .vco_val = 0x2 << 20, 171 .vco_mask = GENMASK(21, 20), 172 .config_ctl_val = 0x4001055b, 173 }; 174 175 static struct clk_alpha_pll gpll11 = { 176 .offset = 0xb000, 177 .vco_table = default_vco, 178 .num_vco = ARRAY_SIZE(default_vco), 179 .flags = SUPPORTS_DYNAMIC_UPDATE, 180 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 181 .clkr = { 182 .enable_reg = 0x79000, 183 .enable_mask = BIT(11), 184 .hw.init = &(struct clk_init_data){ 185 .name = "gpll11", 186 .parent_data = &(const struct clk_parent_data){ 187 .fw_name = "bi_tcxo", 188 }, 189 .num_parents = 1, 190 .ops = &clk_alpha_pll_ops, 191 }, 192 }, 193 }; 194 195 static const struct clk_div_table post_div_table_gpll11_out_main[] = { 196 { 0x0, 1 }, 197 { } 198 }; 199 200 static struct clk_alpha_pll_postdiv gpll11_out_main = { 201 .offset = 0xb000, 202 .post_div_shift = 8, 203 .post_div_table = post_div_table_gpll11_out_main, 204 .num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main), 205 .width = 4, 206 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 207 .clkr.hw.init = &(struct clk_init_data){ 208 .name = "gpll11_out_main", 209 .parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw }, 210 .num_parents = 1, 211 .flags = CLK_SET_RATE_PARENT, 212 .ops = &clk_alpha_pll_postdiv_ops, 213 }, 214 }; 215 216 static struct clk_alpha_pll gpll3 = { 217 .offset = 0x3000, 218 .vco_table = default_vco, 219 .num_vco = ARRAY_SIZE(default_vco), 220 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 221 .clkr = { 222 .enable_reg = 0x79000, 223 .enable_mask = BIT(3), 224 .hw.init = &(struct clk_init_data){ 225 .name = "gpll3", 226 .parent_data = &(const struct clk_parent_data){ 227 .fw_name = "bi_tcxo", 228 }, 229 .num_parents = 1, 230 .ops = &clk_alpha_pll_ops, 231 }, 232 }, 233 }; 234 235 static struct clk_alpha_pll gpll4 = { 236 .offset = 0x4000, 237 .vco_table = default_vco, 238 .num_vco = ARRAY_SIZE(default_vco), 239 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 240 .clkr = { 241 .enable_reg = 0x79000, 242 .enable_mask = BIT(4), 243 .hw.init = &(struct clk_init_data){ 244 .name = "gpll4", 245 .parent_data = &(const struct clk_parent_data){ 246 .fw_name = "bi_tcxo", 247 }, 248 .num_parents = 1, 249 .ops = &clk_alpha_pll_ops, 250 }, 251 }, 252 }; 253 254 static const struct clk_div_table post_div_table_gpll4_out_main[] = { 255 { 0x0, 1 }, 256 { } 257 }; 258 259 static struct clk_alpha_pll_postdiv gpll4_out_main = { 260 .offset = 0x4000, 261 .post_div_shift = 8, 262 .post_div_table = post_div_table_gpll4_out_main, 263 .num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main), 264 .width = 4, 265 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 266 .clkr.hw.init = &(struct clk_init_data){ 267 .name = "gpll4_out_main", 268 .parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw }, 269 .num_parents = 1, 270 .ops = &clk_alpha_pll_postdiv_ro_ops, 271 }, 272 }; 273 274 static struct clk_alpha_pll gpll6 = { 275 .offset = 0x6000, 276 .vco_table = default_vco, 277 .num_vco = ARRAY_SIZE(default_vco), 278 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 279 .clkr = { 280 .enable_reg = 0x79000, 281 .enable_mask = BIT(6), 282 .hw.init = &(struct clk_init_data){ 283 .name = "gpll6", 284 .parent_data = &(const struct clk_parent_data){ 285 .fw_name = "bi_tcxo", 286 }, 287 .num_parents = 1, 288 .ops = &clk_alpha_pll_ops, 289 }, 290 }, 291 }; 292 293 static const struct clk_div_table post_div_table_gpll6_out_main[] = { 294 { 0x1, 2 }, 295 { } 296 }; 297 298 static struct clk_alpha_pll_postdiv gpll6_out_main = { 299 .offset = 0x6000, 300 .post_div_shift = 8, 301 .post_div_table = post_div_table_gpll6_out_main, 302 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main), 303 .width = 4, 304 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 305 .clkr.hw.init = &(struct clk_init_data){ 306 .name = "gpll6_out_main", 307 .parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw }, 308 .num_parents = 1, 309 .ops = &clk_alpha_pll_postdiv_ro_ops, 310 }, 311 }; 312 313 static struct clk_alpha_pll gpll7 = { 314 .offset = 0x7000, 315 .vco_table = default_vco, 316 .num_vco = ARRAY_SIZE(default_vco), 317 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 318 .clkr = { 319 .enable_reg = 0x79000, 320 .enable_mask = BIT(7), 321 .hw.init = &(struct clk_init_data){ 322 .name = "gpll7", 323 .parent_data = &(const struct clk_parent_data){ 324 .fw_name = "bi_tcxo", 325 }, 326 .num_parents = 1, 327 .ops = &clk_alpha_pll_ops, 328 }, 329 }, 330 }; 331 332 static const struct clk_div_table post_div_table_gpll7_out_main[] = { 333 { 0x0, 1 }, 334 { } 335 }; 336 337 static struct clk_alpha_pll_postdiv gpll7_out_main = { 338 .offset = 0x7000, 339 .post_div_shift = 8, 340 .post_div_table = post_div_table_gpll7_out_main, 341 .num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main), 342 .width = 4, 343 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 344 .clkr.hw.init = &(struct clk_init_data){ 345 .name = "gpll7_out_main", 346 .parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw }, 347 .num_parents = 1, 348 .ops = &clk_alpha_pll_postdiv_ro_ops, 349 }, 350 }; 351 352 /* 800MHz configuration */ 353 static const struct alpha_pll_config gpll8_config = { 354 .l = 0x29, 355 .alpha = 0xAAAAAAAA, 356 .alpha_hi = 0xAA, 357 .alpha_en_mask = BIT(24), 358 .vco_val = 0x2 << 20, 359 .vco_mask = GENMASK(21, 20), 360 .main_output_mask = BIT(0), 361 .early_output_mask = BIT(3), 362 .post_div_val = 0x1 << 8, 363 .post_div_mask = GENMASK(11, 8), 364 .config_ctl_val = 0x4001055b, 365 }; 366 367 static struct clk_alpha_pll gpll8 = { 368 .offset = 0x8000, 369 .vco_table = default_vco, 370 .num_vco = ARRAY_SIZE(default_vco), 371 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 372 .flags = SUPPORTS_DYNAMIC_UPDATE, 373 .clkr = { 374 .enable_reg = 0x79000, 375 .enable_mask = BIT(8), 376 .hw.init = &(struct clk_init_data){ 377 .name = "gpll8", 378 .parent_data = &(const struct clk_parent_data){ 379 .fw_name = "bi_tcxo", 380 }, 381 .num_parents = 1, 382 .ops = &clk_alpha_pll_ops, 383 }, 384 }, 385 }; 386 387 static const struct clk_div_table post_div_table_gpll8_out_main[] = { 388 { 0x1, 2 }, 389 { } 390 }; 391 392 static struct clk_alpha_pll_postdiv gpll8_out_main = { 393 .offset = 0x8000, 394 .post_div_shift = 8, 395 .post_div_table = post_div_table_gpll8_out_main, 396 .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main), 397 .width = 4, 398 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 399 .clkr.hw.init = &(struct clk_init_data){ 400 .name = "gpll8_out_main", 401 .parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw }, 402 .num_parents = 1, 403 .flags = CLK_SET_RATE_PARENT, 404 .ops = &clk_alpha_pll_postdiv_ro_ops, 405 }, 406 }; 407 408 /* 1152MHz configuration */ 409 static const struct alpha_pll_config gpll9_config = { 410 .l = 0x3C, 411 .alpha = 0x0, 412 .post_div_val = 0x1 << 8, 413 .post_div_mask = GENMASK(9, 8), 414 .main_output_mask = BIT(0), 415 .config_ctl_val = 0x00004289, 416 }; 417 418 static struct clk_alpha_pll gpll9 = { 419 .offset = 0x9000, 420 .vco_table = gpll9_vco, 421 .num_vco = ARRAY_SIZE(gpll9_vco), 422 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO], 423 .clkr = { 424 .enable_reg = 0x79000, 425 .enable_mask = BIT(9), 426 .hw.init = &(struct clk_init_data){ 427 .name = "gpll9", 428 .parent_data = &(const struct clk_parent_data){ 429 .fw_name = "bi_tcxo", 430 }, 431 .num_parents = 1, 432 .ops = &clk_alpha_pll_ops, 433 }, 434 }, 435 }; 436 437 static const struct clk_div_table post_div_table_gpll9_out_main[] = { 438 { 0x1, 2 }, 439 { } 440 }; 441 442 static struct clk_alpha_pll_postdiv gpll9_out_main = { 443 .offset = 0x9000, 444 .post_div_shift = 8, 445 .post_div_table = post_div_table_gpll9_out_main, 446 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main), 447 .width = 2, 448 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO], 449 .clkr.hw.init = &(struct clk_init_data){ 450 .name = "gpll9_out_main", 451 .parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw }, 452 .num_parents = 1, 453 .flags = CLK_SET_RATE_PARENT, 454 .ops = &clk_alpha_pll_postdiv_ops, 455 }, 456 }; 457 458 static const struct parent_map gcc_parent_map_0[] = { 459 { P_BI_TCXO, 0 }, 460 { P_GPLL0_OUT_EARLY, 1 }, 461 { P_GPLL0_OUT_AUX2, 2 }, 462 }; 463 464 static const struct clk_parent_data gcc_parents_0[] = { 465 { .fw_name = "bi_tcxo" }, 466 { .hw = &gpll0.clkr.hw }, 467 { .hw = &gpll0_out_aux2.clkr.hw }, 468 }; 469 470 static const struct parent_map gcc_parent_map_1[] = { 471 { P_BI_TCXO, 0 }, 472 { P_GPLL0_OUT_EARLY, 1 }, 473 { P_GPLL0_OUT_AUX2, 2 }, 474 { P_GPLL6_OUT_MAIN, 4 }, 475 }; 476 477 static const struct clk_parent_data gcc_parents_1[] = { 478 { .fw_name = "bi_tcxo" }, 479 { .hw = &gpll0.clkr.hw }, 480 { .hw = &gpll0_out_aux2.clkr.hw }, 481 { .hw = &gpll6_out_main.clkr.hw }, 482 }; 483 484 static const struct parent_map gcc_parent_map_2[] = { 485 { P_BI_TCXO, 0 }, 486 { P_GPLL0_OUT_EARLY, 1 }, 487 { P_GPLL0_OUT_AUX2, 2 }, 488 { P_SLEEP_CLK, 5 }, 489 }; 490 491 static const struct clk_parent_data gcc_parents_2[] = { 492 { .fw_name = "bi_tcxo" }, 493 { .hw = &gpll0.clkr.hw }, 494 { .hw = &gpll0_out_aux2.clkr.hw }, 495 { .fw_name = "sleep_clk" }, 496 }; 497 498 static const struct parent_map gcc_parent_map_3[] = { 499 { P_BI_TCXO, 0 }, 500 { P_GPLL0_OUT_EARLY, 1 }, 501 { P_GPLL9_OUT_EARLY, 2 }, 502 { P_GPLL10_OUT_MAIN, 3 }, 503 { P_GPLL9_OUT_MAIN, 5 }, 504 }; 505 506 static const struct clk_parent_data gcc_parents_3[] = { 507 { .fw_name = "bi_tcxo" }, 508 { .hw = &gpll0.clkr.hw }, 509 { .hw = &gpll9.clkr.hw }, 510 { .hw = &gpll10_out_main.clkr.hw }, 511 { .hw = &gpll9_out_main.clkr.hw }, 512 }; 513 514 static const struct parent_map gcc_parent_map_4[] = { 515 { P_BI_TCXO, 0 }, 516 { P_GPLL0_OUT_EARLY, 1 }, 517 { P_GPLL0_OUT_AUX2, 2 }, 518 { P_GPLL4_OUT_MAIN, 5 }, 519 }; 520 521 static const struct clk_parent_data gcc_parents_4[] = { 522 { .fw_name = "bi_tcxo" }, 523 { .hw = &gpll0.clkr.hw }, 524 { .hw = &gpll0_out_aux2.clkr.hw }, 525 { .hw = &gpll4_out_main.clkr.hw }, 526 }; 527 528 static const struct parent_map gcc_parent_map_5[] = { 529 { P_BI_TCXO, 0 }, 530 { P_GPLL0_OUT_EARLY, 1 }, 531 { P_GPLL8_OUT_EARLY, 2 }, 532 { P_GPLL10_OUT_MAIN, 3 }, 533 { P_GPLL8_OUT_MAIN, 4 }, 534 { P_GPLL9_OUT_MAIN, 5 }, 535 }; 536 537 static const struct clk_parent_data gcc_parents_5[] = { 538 { .fw_name = "bi_tcxo" }, 539 { .hw = &gpll0.clkr.hw }, 540 { .hw = &gpll8.clkr.hw }, 541 { .hw = &gpll10_out_main.clkr.hw }, 542 { .hw = &gpll8_out_main.clkr.hw }, 543 { .hw = &gpll9_out_main.clkr.hw }, 544 }; 545 546 static const struct parent_map gcc_parent_map_6[] = { 547 { P_BI_TCXO, 0 }, 548 { P_GPLL0_OUT_EARLY, 1 }, 549 { P_GPLL8_OUT_EARLY, 2 }, 550 { P_GPLL10_OUT_MAIN, 3 }, 551 { P_GPLL6_OUT_MAIN, 4 }, 552 { P_GPLL9_OUT_MAIN, 5 }, 553 { P_GPLL3_OUT_EARLY, 6 }, 554 }; 555 556 static const struct clk_parent_data gcc_parents_6[] = { 557 { .fw_name = "bi_tcxo" }, 558 { .hw = &gpll0.clkr.hw }, 559 { .hw = &gpll8.clkr.hw }, 560 { .hw = &gpll10_out_main.clkr.hw }, 561 { .hw = &gpll6_out_main.clkr.hw }, 562 { .hw = &gpll9_out_main.clkr.hw }, 563 { .hw = &gpll3.clkr.hw }, 564 }; 565 566 static const struct parent_map gcc_parent_map_7[] = { 567 { P_BI_TCXO, 0 }, 568 { P_GPLL0_OUT_EARLY, 1 }, 569 { P_GPLL0_OUT_AUX2, 2 }, 570 { P_GPLL10_OUT_MAIN, 3 }, 571 { P_GPLL4_OUT_MAIN, 5 }, 572 { P_GPLL3_OUT_EARLY, 6 }, 573 }; 574 575 static const struct clk_parent_data gcc_parents_7[] = { 576 { .fw_name = "bi_tcxo" }, 577 { .hw = &gpll0.clkr.hw }, 578 { .hw = &gpll0_out_aux2.clkr.hw }, 579 { .hw = &gpll10_out_main.clkr.hw }, 580 { .hw = &gpll4_out_main.clkr.hw }, 581 { .hw = &gpll3.clkr.hw }, 582 }; 583 584 static const struct parent_map gcc_parent_map_8[] = { 585 { P_BI_TCXO, 0 }, 586 { P_GPLL0_OUT_EARLY, 1 }, 587 { P_GPLL8_OUT_EARLY, 2 }, 588 { P_GPLL10_OUT_MAIN, 3 }, 589 { P_GPLL8_OUT_MAIN, 4 }, 590 { P_GPLL9_OUT_MAIN, 5 }, 591 { P_GPLL3_OUT_EARLY, 6 }, 592 }; 593 594 static const struct clk_parent_data gcc_parents_8[] = { 595 { .fw_name = "bi_tcxo" }, 596 { .hw = &gpll0.clkr.hw }, 597 { .hw = &gpll8.clkr.hw }, 598 { .hw = &gpll10_out_main.clkr.hw }, 599 { .hw = &gpll8_out_main.clkr.hw }, 600 { .hw = &gpll9_out_main.clkr.hw }, 601 { .hw = &gpll3.clkr.hw }, 602 }; 603 604 static const struct parent_map gcc_parent_map_9[] = { 605 { P_BI_TCXO, 0 }, 606 { P_GPLL0_OUT_EARLY, 1 }, 607 { P_GPLL0_OUT_AUX2, 2 }, 608 { P_GPLL10_OUT_MAIN, 3 }, 609 { P_GPLL8_OUT_MAIN, 4 }, 610 { P_GPLL9_OUT_MAIN, 5 }, 611 { P_GPLL3_OUT_EARLY, 6 }, 612 }; 613 614 static const struct clk_parent_data gcc_parents_9[] = { 615 { .fw_name = "bi_tcxo" }, 616 { .hw = &gpll0.clkr.hw }, 617 { .hw = &gpll0_out_aux2.clkr.hw }, 618 { .hw = &gpll10_out_main.clkr.hw }, 619 { .hw = &gpll8_out_main.clkr.hw }, 620 { .hw = &gpll9_out_main.clkr.hw }, 621 { .hw = &gpll3.clkr.hw }, 622 }; 623 624 static const struct parent_map gcc_parent_map_10[] = { 625 { P_BI_TCXO, 0 }, 626 { P_GPLL0_OUT_EARLY, 1 }, 627 { P_GPLL8_OUT_EARLY, 2 }, 628 { P_GPLL10_OUT_MAIN, 3 }, 629 { P_GPLL6_OUT_EARLY, 4 }, 630 { P_GPLL9_OUT_MAIN, 5 }, 631 }; 632 633 static const struct clk_parent_data gcc_parents_10[] = { 634 { .fw_name = "bi_tcxo" }, 635 { .hw = &gpll0.clkr.hw }, 636 { .hw = &gpll8.clkr.hw }, 637 { .hw = &gpll10_out_main.clkr.hw }, 638 { .hw = &gpll6.clkr.hw }, 639 { .hw = &gpll9_out_main.clkr.hw }, 640 }; 641 642 static const struct parent_map gcc_parent_map_11[] = { 643 { P_BI_TCXO, 0 }, 644 { P_GPLL0_OUT_EARLY, 1 }, 645 { P_GPLL0_OUT_AUX2, 2 }, 646 { P_GPLL7_OUT_MAIN, 3 }, 647 { P_GPLL4_OUT_MAIN, 5 }, 648 }; 649 650 static const struct clk_parent_data gcc_parents_11[] = { 651 { .fw_name = "bi_tcxo" }, 652 { .hw = &gpll0.clkr.hw }, 653 { .hw = &gpll0_out_aux2.clkr.hw }, 654 { .hw = &gpll7_out_main.clkr.hw }, 655 { .hw = &gpll4_out_main.clkr.hw }, 656 }; 657 658 static const struct parent_map gcc_parent_map_12[] = { 659 { P_BI_TCXO, 0 }, 660 { P_SLEEP_CLK, 5 }, 661 }; 662 663 static const struct clk_parent_data gcc_parents_12[] = { 664 { .fw_name = "bi_tcxo" }, 665 { .fw_name = "sleep_clk" }, 666 }; 667 668 static const struct parent_map gcc_parent_map_13[] = { 669 { P_BI_TCXO, 0 }, 670 { P_GPLL11_OUT_MAIN, 1 }, 671 }; 672 673 static const struct clk_parent_data gcc_parents_13[] = { 674 { .fw_name = "bi_tcxo" }, 675 { .hw = &gpll11_out_main.clkr.hw }, 676 }; 677 678 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = { 679 F(19200000, P_BI_TCXO, 1, 0, 0), 680 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 681 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 682 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 683 { } 684 }; 685 686 static struct clk_rcg2 gcc_camss_axi_clk_src = { 687 .cmd_rcgr = 0x5802c, 688 .mnd_width = 0, 689 .hid_width = 5, 690 .parent_map = gcc_parent_map_7, 691 .freq_tbl = ftbl_gcc_camss_axi_clk_src, 692 .clkr.hw.init = &(struct clk_init_data){ 693 .name = "gcc_camss_axi_clk_src", 694 .parent_data = gcc_parents_7, 695 .num_parents = ARRAY_SIZE(gcc_parents_7), 696 .flags = CLK_SET_RATE_PARENT, 697 .ops = &clk_rcg2_shared_ops, 698 }, 699 }; 700 701 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = { 702 F(19200000, P_BI_TCXO, 1, 0, 0), 703 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 704 { } 705 }; 706 707 static struct clk_rcg2 gcc_camss_cci_clk_src = { 708 .cmd_rcgr = 0x56000, 709 .mnd_width = 0, 710 .hid_width = 5, 711 .parent_map = gcc_parent_map_9, 712 .freq_tbl = ftbl_gcc_camss_cci_clk_src, 713 .clkr.hw.init = &(struct clk_init_data){ 714 .name = "gcc_camss_cci_clk_src", 715 .parent_data = gcc_parents_9, 716 .num_parents = ARRAY_SIZE(gcc_parents_9), 717 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 718 .ops = &clk_rcg2_shared_ops, 719 }, 720 }; 721 722 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = { 723 F(19200000, P_BI_TCXO, 1, 0, 0), 724 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 725 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 726 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0), 727 { } 728 }; 729 730 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = { 731 .cmd_rcgr = 0x59000, 732 .mnd_width = 0, 733 .hid_width = 5, 734 .parent_map = gcc_parent_map_4, 735 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 736 .clkr.hw.init = &(struct clk_init_data){ 737 .name = "gcc_camss_csi0phytimer_clk_src", 738 .parent_data = gcc_parents_4, 739 .num_parents = ARRAY_SIZE(gcc_parents_4), 740 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 741 .ops = &clk_rcg2_shared_ops, 742 }, 743 }; 744 745 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = { 746 .cmd_rcgr = 0x5901c, 747 .mnd_width = 0, 748 .hid_width = 5, 749 .parent_map = gcc_parent_map_4, 750 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 751 .clkr.hw.init = &(struct clk_init_data){ 752 .name = "gcc_camss_csi1phytimer_clk_src", 753 .parent_data = gcc_parents_4, 754 .num_parents = ARRAY_SIZE(gcc_parents_4), 755 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 756 .ops = &clk_rcg2_shared_ops, 757 }, 758 }; 759 760 static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = { 761 .cmd_rcgr = 0x59038, 762 .mnd_width = 0, 763 .hid_width = 5, 764 .parent_map = gcc_parent_map_4, 765 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 766 .clkr.hw.init = &(struct clk_init_data){ 767 .name = "gcc_camss_csi2phytimer_clk_src", 768 .parent_data = gcc_parents_4, 769 .num_parents = ARRAY_SIZE(gcc_parents_4), 770 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 771 .ops = &clk_rcg2_shared_ops, 772 }, 773 }; 774 775 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = { 776 F(19200000, P_BI_TCXO, 1, 0, 0), 777 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24), 778 F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9), 779 { } 780 }; 781 782 static struct clk_rcg2 gcc_camss_mclk0_clk_src = { 783 .cmd_rcgr = 0x51000, 784 .mnd_width = 8, 785 .hid_width = 5, 786 .parent_map = gcc_parent_map_3, 787 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 788 .clkr.hw.init = &(struct clk_init_data){ 789 .name = "gcc_camss_mclk0_clk_src", 790 .parent_data = gcc_parents_3, 791 .num_parents = ARRAY_SIZE(gcc_parents_3), 792 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 793 .ops = &clk_rcg2_shared_ops, 794 }, 795 }; 796 797 static struct clk_rcg2 gcc_camss_mclk1_clk_src = { 798 .cmd_rcgr = 0x5101c, 799 .mnd_width = 8, 800 .hid_width = 5, 801 .parent_map = gcc_parent_map_3, 802 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 803 .clkr.hw.init = &(struct clk_init_data){ 804 .name = "gcc_camss_mclk1_clk_src", 805 .parent_data = gcc_parents_3, 806 .num_parents = ARRAY_SIZE(gcc_parents_3), 807 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 808 .ops = &clk_rcg2_shared_ops, 809 }, 810 }; 811 812 static struct clk_rcg2 gcc_camss_mclk2_clk_src = { 813 .cmd_rcgr = 0x51038, 814 .mnd_width = 8, 815 .hid_width = 5, 816 .parent_map = gcc_parent_map_3, 817 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 818 .clkr.hw.init = &(struct clk_init_data){ 819 .name = "gcc_camss_mclk2_clk_src", 820 .parent_data = gcc_parents_3, 821 .num_parents = ARRAY_SIZE(gcc_parents_3), 822 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 823 .ops = &clk_rcg2_shared_ops, 824 }, 825 }; 826 827 static struct clk_rcg2 gcc_camss_mclk3_clk_src = { 828 .cmd_rcgr = 0x51054, 829 .mnd_width = 8, 830 .hid_width = 5, 831 .parent_map = gcc_parent_map_3, 832 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 833 .clkr.hw.init = &(struct clk_init_data){ 834 .name = "gcc_camss_mclk3_clk_src", 835 .parent_data = gcc_parents_3, 836 .num_parents = ARRAY_SIZE(gcc_parents_3), 837 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 838 .ops = &clk_rcg2_shared_ops, 839 }, 840 }; 841 842 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = { 843 F(19200000, P_BI_TCXO, 1, 0, 0), 844 F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0), 845 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 846 { } 847 }; 848 849 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = { 850 .cmd_rcgr = 0x55024, 851 .mnd_width = 0, 852 .hid_width = 5, 853 .parent_map = gcc_parent_map_8, 854 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src, 855 .clkr.hw.init = &(struct clk_init_data){ 856 .name = "gcc_camss_ope_ahb_clk_src", 857 .parent_data = gcc_parents_8, 858 .num_parents = ARRAY_SIZE(gcc_parents_8), 859 .flags = CLK_SET_RATE_PARENT, 860 .ops = &clk_rcg2_shared_ops, 861 }, 862 }; 863 864 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = { 865 F(19200000, P_BI_TCXO, 1, 0, 0), 866 F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0), 867 F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0), 868 F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0), 869 F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0), 870 { } 871 }; 872 873 static struct clk_rcg2 gcc_camss_ope_clk_src = { 874 .cmd_rcgr = 0x55004, 875 .mnd_width = 0, 876 .hid_width = 5, 877 .parent_map = gcc_parent_map_8, 878 .freq_tbl = ftbl_gcc_camss_ope_clk_src, 879 .clkr.hw.init = &(struct clk_init_data){ 880 .name = "gcc_camss_ope_clk_src", 881 .parent_data = gcc_parents_8, 882 .num_parents = ARRAY_SIZE(gcc_parents_8), 883 .flags = CLK_SET_RATE_PARENT, 884 .ops = &clk_rcg2_shared_ops, 885 }, 886 }; 887 888 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = { 889 F(19200000, P_BI_TCXO, 1, 0, 0), 890 F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0), 891 F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0), 892 F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0), 893 F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0), 894 F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0), 895 F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0), 896 F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0), 897 F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0), 898 F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0), 899 F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0), 900 F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0), 901 F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0), 902 F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0), 903 F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0), 904 F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0), 905 { } 906 }; 907 908 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = { 909 .cmd_rcgr = 0x52004, 910 .mnd_width = 8, 911 .hid_width = 5, 912 .parent_map = gcc_parent_map_5, 913 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 914 .clkr.hw.init = &(struct clk_init_data){ 915 .name = "gcc_camss_tfe_0_clk_src", 916 .parent_data = gcc_parents_5, 917 .num_parents = ARRAY_SIZE(gcc_parents_5), 918 .flags = CLK_SET_RATE_PARENT, 919 .ops = &clk_rcg2_shared_ops, 920 }, 921 }; 922 923 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = { 924 F(19200000, P_BI_TCXO, 1, 0, 0), 925 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0), 926 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 927 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 928 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 929 F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0), 930 { } 931 }; 932 933 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = { 934 .cmd_rcgr = 0x52094, 935 .mnd_width = 0, 936 .hid_width = 5, 937 .parent_map = gcc_parent_map_6, 938 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 939 .clkr.hw.init = &(struct clk_init_data){ 940 .name = "gcc_camss_tfe_0_csid_clk_src", 941 .parent_data = gcc_parents_6, 942 .num_parents = ARRAY_SIZE(gcc_parents_6), 943 .flags = CLK_SET_RATE_PARENT, 944 .ops = &clk_rcg2_shared_ops, 945 }, 946 }; 947 948 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = { 949 .cmd_rcgr = 0x52024, 950 .mnd_width = 8, 951 .hid_width = 5, 952 .parent_map = gcc_parent_map_5, 953 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 954 .clkr.hw.init = &(struct clk_init_data){ 955 .name = "gcc_camss_tfe_1_clk_src", 956 .parent_data = gcc_parents_5, 957 .num_parents = ARRAY_SIZE(gcc_parents_5), 958 .flags = CLK_SET_RATE_PARENT, 959 .ops = &clk_rcg2_shared_ops, 960 }, 961 }; 962 963 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = { 964 .cmd_rcgr = 0x520b4, 965 .mnd_width = 0, 966 .hid_width = 5, 967 .parent_map = gcc_parent_map_6, 968 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 969 .clkr.hw.init = &(struct clk_init_data){ 970 .name = "gcc_camss_tfe_1_csid_clk_src", 971 .parent_data = gcc_parents_6, 972 .num_parents = ARRAY_SIZE(gcc_parents_6), 973 .flags = CLK_SET_RATE_PARENT, 974 .ops = &clk_rcg2_shared_ops, 975 }, 976 }; 977 978 static struct clk_rcg2 gcc_camss_tfe_2_clk_src = { 979 .cmd_rcgr = 0x52044, 980 .mnd_width = 8, 981 .hid_width = 5, 982 .parent_map = gcc_parent_map_5, 983 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 984 .clkr.hw.init = &(struct clk_init_data){ 985 .name = "gcc_camss_tfe_2_clk_src", 986 .parent_data = gcc_parents_5, 987 .num_parents = ARRAY_SIZE(gcc_parents_5), 988 .flags = CLK_SET_RATE_PARENT, 989 .ops = &clk_rcg2_shared_ops, 990 }, 991 }; 992 993 static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = { 994 .cmd_rcgr = 0x520d4, 995 .mnd_width = 0, 996 .hid_width = 5, 997 .parent_map = gcc_parent_map_6, 998 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 999 .clkr.hw.init = &(struct clk_init_data){ 1000 .name = "gcc_camss_tfe_2_csid_clk_src", 1001 .parent_data = gcc_parents_6, 1002 .num_parents = ARRAY_SIZE(gcc_parents_6), 1003 .flags = CLK_SET_RATE_PARENT, 1004 .ops = &clk_rcg2_shared_ops, 1005 }, 1006 }; 1007 1008 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = { 1009 F(19200000, P_BI_TCXO, 1, 0, 0), 1010 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1011 F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9), 1012 F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0), 1013 { } 1014 }; 1015 1016 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = { 1017 .cmd_rcgr = 0x52064, 1018 .mnd_width = 16, 1019 .hid_width = 5, 1020 .parent_map = gcc_parent_map_10, 1021 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src, 1022 .clkr.hw.init = &(struct clk_init_data){ 1023 .name = "gcc_camss_tfe_cphy_rx_clk_src", 1024 .parent_data = gcc_parents_10, 1025 .num_parents = ARRAY_SIZE(gcc_parents_10), 1026 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 1027 .ops = &clk_rcg2_shared_ops, 1028 }, 1029 }; 1030 1031 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = { 1032 F(19200000, P_BI_TCXO, 1, 0, 0), 1033 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0), 1034 F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0), 1035 { } 1036 }; 1037 1038 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = { 1039 .cmd_rcgr = 0x58010, 1040 .mnd_width = 0, 1041 .hid_width = 5, 1042 .parent_map = gcc_parent_map_7, 1043 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src, 1044 .clkr.hw.init = &(struct clk_init_data){ 1045 .name = "gcc_camss_top_ahb_clk_src", 1046 .parent_data = gcc_parents_7, 1047 .num_parents = ARRAY_SIZE(gcc_parents_7), 1048 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE, 1049 .ops = &clk_rcg2_shared_ops, 1050 }, 1051 }; 1052 1053 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 1054 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1055 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1056 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1057 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 1058 { } 1059 }; 1060 1061 static struct clk_rcg2 gcc_gp1_clk_src = { 1062 .cmd_rcgr = 0x4d004, 1063 .mnd_width = 8, 1064 .hid_width = 5, 1065 .parent_map = gcc_parent_map_2, 1066 .freq_tbl = ftbl_gcc_gp1_clk_src, 1067 .clkr.hw.init = &(struct clk_init_data){ 1068 .name = "gcc_gp1_clk_src", 1069 .parent_data = gcc_parents_2, 1070 .num_parents = ARRAY_SIZE(gcc_parents_2), 1071 .ops = &clk_rcg2_ops, 1072 }, 1073 }; 1074 1075 static struct clk_rcg2 gcc_gp2_clk_src = { 1076 .cmd_rcgr = 0x4e004, 1077 .mnd_width = 8, 1078 .hid_width = 5, 1079 .parent_map = gcc_parent_map_2, 1080 .freq_tbl = ftbl_gcc_gp1_clk_src, 1081 .clkr.hw.init = &(struct clk_init_data){ 1082 .name = "gcc_gp2_clk_src", 1083 .parent_data = gcc_parents_2, 1084 .num_parents = ARRAY_SIZE(gcc_parents_2), 1085 .ops = &clk_rcg2_ops, 1086 }, 1087 }; 1088 1089 static struct clk_rcg2 gcc_gp3_clk_src = { 1090 .cmd_rcgr = 0x4f004, 1091 .mnd_width = 8, 1092 .hid_width = 5, 1093 .parent_map = gcc_parent_map_2, 1094 .freq_tbl = ftbl_gcc_gp1_clk_src, 1095 .clkr.hw.init = &(struct clk_init_data){ 1096 .name = "gcc_gp3_clk_src", 1097 .parent_data = gcc_parents_2, 1098 .num_parents = ARRAY_SIZE(gcc_parents_2), 1099 .ops = &clk_rcg2_ops, 1100 }, 1101 }; 1102 1103 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 1104 F(19200000, P_BI_TCXO, 1, 0, 0), 1105 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0), 1106 { } 1107 }; 1108 1109 static struct clk_rcg2 gcc_pdm2_clk_src = { 1110 .cmd_rcgr = 0x20010, 1111 .mnd_width = 0, 1112 .hid_width = 5, 1113 .parent_map = gcc_parent_map_0, 1114 .freq_tbl = ftbl_gcc_pdm2_clk_src, 1115 .clkr.hw.init = &(struct clk_init_data){ 1116 .name = "gcc_pdm2_clk_src", 1117 .parent_data = gcc_parents_0, 1118 .num_parents = ARRAY_SIZE(gcc_parents_0), 1119 .ops = &clk_rcg2_shared_ops, 1120 }, 1121 }; 1122 1123 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 1124 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625), 1125 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625), 1126 F(19200000, P_BI_TCXO, 1, 0, 0), 1127 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625), 1128 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75), 1129 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25), 1130 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75), 1131 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1132 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15), 1133 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25), 1134 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1135 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375), 1136 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75), 1137 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625), 1138 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0), 1139 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0), 1140 { } 1141 }; 1142 1143 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 1144 .name = "gcc_qupv3_wrap0_s0_clk_src", 1145 .parent_data = gcc_parents_1, 1146 .num_parents = ARRAY_SIZE(gcc_parents_1), 1147 .ops = &clk_rcg2_ops, 1148 }; 1149 1150 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 1151 .cmd_rcgr = 0x1f148, 1152 .mnd_width = 16, 1153 .hid_width = 5, 1154 .parent_map = gcc_parent_map_1, 1155 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1156 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 1157 }; 1158 1159 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 1160 .name = "gcc_qupv3_wrap0_s1_clk_src", 1161 .parent_data = gcc_parents_1, 1162 .num_parents = ARRAY_SIZE(gcc_parents_1), 1163 .ops = &clk_rcg2_ops, 1164 }; 1165 1166 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 1167 .cmd_rcgr = 0x1f278, 1168 .mnd_width = 16, 1169 .hid_width = 5, 1170 .parent_map = gcc_parent_map_1, 1171 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1172 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 1173 }; 1174 1175 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 1176 .name = "gcc_qupv3_wrap0_s2_clk_src", 1177 .parent_data = gcc_parents_1, 1178 .num_parents = ARRAY_SIZE(gcc_parents_1), 1179 .ops = &clk_rcg2_ops, 1180 }; 1181 1182 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 1183 .cmd_rcgr = 0x1f3a8, 1184 .mnd_width = 16, 1185 .hid_width = 5, 1186 .parent_map = gcc_parent_map_1, 1187 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1188 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 1189 }; 1190 1191 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 1192 .name = "gcc_qupv3_wrap0_s3_clk_src", 1193 .parent_data = gcc_parents_1, 1194 .num_parents = ARRAY_SIZE(gcc_parents_1), 1195 .ops = &clk_rcg2_ops, 1196 }; 1197 1198 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 1199 .cmd_rcgr = 0x1f4d8, 1200 .mnd_width = 16, 1201 .hid_width = 5, 1202 .parent_map = gcc_parent_map_1, 1203 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1204 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 1205 }; 1206 1207 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 1208 .name = "gcc_qupv3_wrap0_s4_clk_src", 1209 .parent_data = gcc_parents_1, 1210 .num_parents = ARRAY_SIZE(gcc_parents_1), 1211 .ops = &clk_rcg2_ops, 1212 }; 1213 1214 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 1215 .cmd_rcgr = 0x1f608, 1216 .mnd_width = 16, 1217 .hid_width = 5, 1218 .parent_map = gcc_parent_map_1, 1219 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1220 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 1221 }; 1222 1223 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 1224 .name = "gcc_qupv3_wrap0_s5_clk_src", 1225 .parent_data = gcc_parents_1, 1226 .num_parents = ARRAY_SIZE(gcc_parents_1), 1227 .ops = &clk_rcg2_ops, 1228 }; 1229 1230 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 1231 .cmd_rcgr = 0x1f738, 1232 .mnd_width = 16, 1233 .hid_width = 5, 1234 .parent_map = gcc_parent_map_1, 1235 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1236 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 1237 }; 1238 1239 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 1240 F(144000, P_BI_TCXO, 16, 3, 25), 1241 F(400000, P_BI_TCXO, 12, 1, 4), 1242 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3), 1243 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2), 1244 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1245 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1246 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 1247 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 1248 { } 1249 }; 1250 1251 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 1252 .cmd_rcgr = 0x38028, 1253 .mnd_width = 8, 1254 .hid_width = 5, 1255 .parent_map = gcc_parent_map_1, 1256 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 1257 .clkr.hw.init = &(struct clk_init_data){ 1258 .name = "gcc_sdcc1_apps_clk_src", 1259 .parent_data = gcc_parents_1, 1260 .num_parents = ARRAY_SIZE(gcc_parents_1), 1261 .ops = &clk_rcg2_floor_ops, 1262 }, 1263 }; 1264 1265 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 1266 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1267 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1268 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1269 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1270 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 1271 { } 1272 }; 1273 1274 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 1275 .cmd_rcgr = 0x38010, 1276 .mnd_width = 0, 1277 .hid_width = 5, 1278 .parent_map = gcc_parent_map_0, 1279 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 1280 .clkr.hw.init = &(struct clk_init_data){ 1281 .name = "gcc_sdcc1_ice_core_clk_src", 1282 .parent_data = gcc_parents_0, 1283 .num_parents = ARRAY_SIZE(gcc_parents_0), 1284 .ops = &clk_rcg2_ops, 1285 }, 1286 }; 1287 1288 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1289 F(400000, P_BI_TCXO, 12, 1, 4), 1290 F(19200000, P_BI_TCXO, 1, 0, 0), 1291 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1292 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1293 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1294 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1295 { } 1296 }; 1297 1298 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 1299 .cmd_rcgr = 0x1e00c, 1300 .mnd_width = 8, 1301 .hid_width = 5, 1302 .parent_map = gcc_parent_map_11, 1303 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 1304 .clkr.hw.init = &(struct clk_init_data){ 1305 .name = "gcc_sdcc2_apps_clk_src", 1306 .parent_data = gcc_parents_11, 1307 .num_parents = ARRAY_SIZE(gcc_parents_11), 1308 .ops = &clk_rcg2_floor_ops, 1309 .flags = CLK_OPS_PARENT_ENABLE, 1310 }, 1311 }; 1312 1313 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 1314 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1315 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1316 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1317 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1318 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1319 { } 1320 }; 1321 1322 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 1323 .cmd_rcgr = 0x45020, 1324 .mnd_width = 8, 1325 .hid_width = 5, 1326 .parent_map = gcc_parent_map_0, 1327 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 1328 .clkr.hw.init = &(struct clk_init_data){ 1329 .name = "gcc_ufs_phy_axi_clk_src", 1330 .parent_data = gcc_parents_0, 1331 .num_parents = ARRAY_SIZE(gcc_parents_0), 1332 .ops = &clk_rcg2_shared_ops, 1333 }, 1334 }; 1335 1336 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 1337 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 1338 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1339 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1340 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 1341 { } 1342 }; 1343 1344 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 1345 .cmd_rcgr = 0x45048, 1346 .mnd_width = 0, 1347 .hid_width = 5, 1348 .parent_map = gcc_parent_map_0, 1349 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 1350 .clkr.hw.init = &(struct clk_init_data){ 1351 .name = "gcc_ufs_phy_ice_core_clk_src", 1352 .parent_data = gcc_parents_0, 1353 .num_parents = ARRAY_SIZE(gcc_parents_0), 1354 .ops = &clk_rcg2_shared_ops, 1355 }, 1356 }; 1357 1358 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 1359 F(9600000, P_BI_TCXO, 2, 0, 0), 1360 F(19200000, P_BI_TCXO, 1, 0, 0), 1361 { } 1362 }; 1363 1364 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 1365 .cmd_rcgr = 0x4507c, 1366 .mnd_width = 0, 1367 .hid_width = 5, 1368 .parent_map = gcc_parent_map_0, 1369 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 1370 .clkr.hw.init = &(struct clk_init_data){ 1371 .name = "gcc_ufs_phy_phy_aux_clk_src", 1372 .parent_data = gcc_parents_0, 1373 .num_parents = ARRAY_SIZE(gcc_parents_0), 1374 .ops = &clk_rcg2_ops, 1375 }, 1376 }; 1377 1378 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 1379 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 1380 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1381 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1382 { } 1383 }; 1384 1385 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 1386 .cmd_rcgr = 0x45060, 1387 .mnd_width = 0, 1388 .hid_width = 5, 1389 .parent_map = gcc_parent_map_0, 1390 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 1391 .clkr.hw.init = &(struct clk_init_data){ 1392 .name = "gcc_ufs_phy_unipro_core_clk_src", 1393 .parent_data = gcc_parents_0, 1394 .num_parents = ARRAY_SIZE(gcc_parents_0), 1395 .ops = &clk_rcg2_shared_ops, 1396 }, 1397 }; 1398 1399 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1400 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0), 1401 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0), 1402 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1403 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1404 { } 1405 }; 1406 1407 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1408 .cmd_rcgr = 0x1a01c, 1409 .mnd_width = 8, 1410 .hid_width = 5, 1411 .parent_map = gcc_parent_map_0, 1412 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1413 .clkr.hw.init = &(struct clk_init_data){ 1414 .name = "gcc_usb30_prim_master_clk_src", 1415 .parent_data = gcc_parents_0, 1416 .num_parents = ARRAY_SIZE(gcc_parents_0), 1417 .ops = &clk_rcg2_shared_ops, 1418 }, 1419 }; 1420 1421 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 1422 F(19200000, P_BI_TCXO, 1, 0, 0), 1423 { } 1424 }; 1425 1426 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1427 .cmd_rcgr = 0x1a034, 1428 .mnd_width = 0, 1429 .hid_width = 5, 1430 .parent_map = gcc_parent_map_0, 1431 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1432 .clkr.hw.init = &(struct clk_init_data){ 1433 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1434 .parent_data = gcc_parents_0, 1435 .num_parents = ARRAY_SIZE(gcc_parents_0), 1436 .ops = &clk_rcg2_ops, 1437 }, 1438 }; 1439 1440 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1441 .reg = 0x1a04c, 1442 .shift = 0, 1443 .width = 2, 1444 .clkr.hw.init = &(struct clk_init_data) { 1445 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1446 .parent_hws = (const struct clk_hw *[]) { 1447 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw }, 1448 .num_parents = 1, 1449 .ops = &clk_regmap_div_ro_ops, 1450 }, 1451 }; 1452 1453 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1454 .cmd_rcgr = 0x1a060, 1455 .mnd_width = 0, 1456 .hid_width = 5, 1457 .parent_map = gcc_parent_map_12, 1458 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1459 .clkr.hw.init = &(struct clk_init_data){ 1460 .name = "gcc_usb3_prim_phy_aux_clk_src", 1461 .parent_data = gcc_parents_12, 1462 .num_parents = ARRAY_SIZE(gcc_parents_12), 1463 .ops = &clk_rcg2_ops, 1464 }, 1465 }; 1466 1467 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = { 1468 F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0), 1469 F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0), 1470 F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0), 1471 F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0), 1472 { } 1473 }; 1474 1475 static struct clk_rcg2 gcc_video_venus_clk_src = { 1476 .cmd_rcgr = 0x58060, 1477 .mnd_width = 0, 1478 .hid_width = 5, 1479 .parent_map = gcc_parent_map_13, 1480 .freq_tbl = ftbl_gcc_video_venus_clk_src, 1481 .clkr.hw.init = &(struct clk_init_data){ 1482 .name = "gcc_video_venus_clk_src", 1483 .parent_data = gcc_parents_13, 1484 .num_parents = ARRAY_SIZE(gcc_parents_13), 1485 .flags = CLK_SET_RATE_PARENT, 1486 .ops = &clk_rcg2_shared_ops, 1487 }, 1488 }; 1489 1490 static struct clk_branch gcc_ahb2phy_csi_clk = { 1491 .halt_reg = 0x1d004, 1492 .halt_check = BRANCH_HALT, 1493 .hwcg_reg = 0x1d004, 1494 .hwcg_bit = 1, 1495 .clkr = { 1496 .enable_reg = 0x1d004, 1497 .enable_mask = BIT(0), 1498 .hw.init = &(struct clk_init_data){ 1499 .name = "gcc_ahb2phy_csi_clk", 1500 .ops = &clk_branch2_ops, 1501 }, 1502 }, 1503 }; 1504 1505 static struct clk_branch gcc_ahb2phy_usb_clk = { 1506 .halt_reg = 0x1d008, 1507 .halt_check = BRANCH_HALT, 1508 .hwcg_reg = 0x1d008, 1509 .hwcg_bit = 1, 1510 .clkr = { 1511 .enable_reg = 0x1d008, 1512 .enable_mask = BIT(0), 1513 .hw.init = &(struct clk_init_data){ 1514 .name = "gcc_ahb2phy_usb_clk", 1515 .ops = &clk_branch2_ops, 1516 }, 1517 }, 1518 }; 1519 1520 static struct clk_branch gcc_bimc_gpu_axi_clk = { 1521 .halt_reg = 0x71154, 1522 .halt_check = BRANCH_HALT_DELAY, 1523 .hwcg_reg = 0x71154, 1524 .hwcg_bit = 1, 1525 .clkr = { 1526 .enable_reg = 0x71154, 1527 .enable_mask = BIT(0), 1528 .hw.init = &(struct clk_init_data){ 1529 .name = "gcc_bimc_gpu_axi_clk", 1530 .ops = &clk_branch2_ops, 1531 }, 1532 }, 1533 }; 1534 1535 static struct clk_branch gcc_boot_rom_ahb_clk = { 1536 .halt_reg = 0x23004, 1537 .halt_check = BRANCH_HALT_VOTED, 1538 .hwcg_reg = 0x23004, 1539 .hwcg_bit = 1, 1540 .clkr = { 1541 .enable_reg = 0x79004, 1542 .enable_mask = BIT(10), 1543 .hw.init = &(struct clk_init_data){ 1544 .name = "gcc_boot_rom_ahb_clk", 1545 .ops = &clk_branch2_ops, 1546 }, 1547 }, 1548 }; 1549 1550 static struct clk_branch gcc_cam_throttle_nrt_clk = { 1551 .halt_reg = 0x17070, 1552 .halt_check = BRANCH_HALT_VOTED, 1553 .hwcg_reg = 0x17070, 1554 .hwcg_bit = 1, 1555 .clkr = { 1556 .enable_reg = 0x79004, 1557 .enable_mask = BIT(27), 1558 .hw.init = &(struct clk_init_data){ 1559 .name = "gcc_cam_throttle_nrt_clk", 1560 .ops = &clk_branch2_ops, 1561 }, 1562 }, 1563 }; 1564 1565 static struct clk_branch gcc_cam_throttle_rt_clk = { 1566 .halt_reg = 0x1706c, 1567 .halt_check = BRANCH_HALT_VOTED, 1568 .hwcg_reg = 0x1706c, 1569 .hwcg_bit = 1, 1570 .clkr = { 1571 .enable_reg = 0x79004, 1572 .enable_mask = BIT(26), 1573 .hw.init = &(struct clk_init_data){ 1574 .name = "gcc_cam_throttle_rt_clk", 1575 .ops = &clk_branch2_ops, 1576 }, 1577 }, 1578 }; 1579 1580 static struct clk_branch gcc_camera_ahb_clk = { 1581 .halt_reg = 0x17008, 1582 .halt_check = BRANCH_HALT_DELAY, 1583 .hwcg_reg = 0x17008, 1584 .hwcg_bit = 1, 1585 .clkr = { 1586 .enable_reg = 0x17008, 1587 .enable_mask = BIT(0), 1588 .hw.init = &(struct clk_init_data){ 1589 .name = "gcc_camera_ahb_clk", 1590 .flags = CLK_IS_CRITICAL, 1591 .ops = &clk_branch2_ops, 1592 }, 1593 }, 1594 }; 1595 1596 static struct clk_branch gcc_camera_xo_clk = { 1597 .halt_reg = 0x17028, 1598 .halt_check = BRANCH_HALT, 1599 .clkr = { 1600 .enable_reg = 0x17028, 1601 .enable_mask = BIT(0), 1602 .hw.init = &(struct clk_init_data){ 1603 .name = "gcc_camera_xo_clk", 1604 .flags = CLK_IS_CRITICAL, 1605 .ops = &clk_branch2_ops, 1606 }, 1607 }, 1608 }; 1609 1610 static struct clk_branch gcc_camss_axi_clk = { 1611 .halt_reg = 0x58044, 1612 .halt_check = BRANCH_HALT, 1613 .clkr = { 1614 .enable_reg = 0x58044, 1615 .enable_mask = BIT(0), 1616 .hw.init = &(struct clk_init_data){ 1617 .name = "gcc_camss_axi_clk", 1618 .parent_hws = (const struct clk_hw *[]){ 1619 &gcc_camss_axi_clk_src.clkr.hw, 1620 }, 1621 .num_parents = 1, 1622 .flags = CLK_SET_RATE_PARENT, 1623 .ops = &clk_branch2_ops, 1624 }, 1625 }, 1626 }; 1627 1628 static struct clk_branch gcc_camss_camnoc_atb_clk = { 1629 .halt_reg = 0x5804c, 1630 .halt_check = BRANCH_HALT_DELAY, 1631 .hwcg_reg = 0x5804c, 1632 .hwcg_bit = 1, 1633 .clkr = { 1634 .enable_reg = 0x5804c, 1635 .enable_mask = BIT(0), 1636 .hw.init = &(struct clk_init_data){ 1637 .name = "gcc_camss_camnoc_atb_clk", 1638 .ops = &clk_branch2_ops, 1639 }, 1640 }, 1641 }; 1642 1643 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = { 1644 .halt_reg = 0x58050, 1645 .halt_check = BRANCH_HALT_DELAY, 1646 .hwcg_reg = 0x58050, 1647 .hwcg_bit = 1, 1648 .clkr = { 1649 .enable_reg = 0x58050, 1650 .enable_mask = BIT(0), 1651 .hw.init = &(struct clk_init_data){ 1652 .name = "gcc_camss_camnoc_nts_xo_clk", 1653 .ops = &clk_branch2_ops, 1654 }, 1655 }, 1656 }; 1657 1658 static struct clk_branch gcc_camss_cci_0_clk = { 1659 .halt_reg = 0x56018, 1660 .halt_check = BRANCH_HALT, 1661 .clkr = { 1662 .enable_reg = 0x56018, 1663 .enable_mask = BIT(0), 1664 .hw.init = &(struct clk_init_data){ 1665 .name = "gcc_camss_cci_0_clk", 1666 .parent_hws = (const struct clk_hw *[]){ 1667 &gcc_camss_cci_clk_src.clkr.hw, 1668 }, 1669 .num_parents = 1, 1670 .flags = CLK_SET_RATE_PARENT, 1671 .ops = &clk_branch2_ops, 1672 }, 1673 }, 1674 }; 1675 1676 static struct clk_branch gcc_camss_cphy_0_clk = { 1677 .halt_reg = 0x52088, 1678 .halt_check = BRANCH_HALT, 1679 .clkr = { 1680 .enable_reg = 0x52088, 1681 .enable_mask = BIT(0), 1682 .hw.init = &(struct clk_init_data){ 1683 .name = "gcc_camss_cphy_0_clk", 1684 .parent_hws = (const struct clk_hw *[]){ 1685 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1686 }, 1687 .num_parents = 1, 1688 .flags = CLK_SET_RATE_PARENT, 1689 .ops = &clk_branch2_ops, 1690 }, 1691 }, 1692 }; 1693 1694 static struct clk_branch gcc_camss_cphy_1_clk = { 1695 .halt_reg = 0x5208c, 1696 .halt_check = BRANCH_HALT, 1697 .clkr = { 1698 .enable_reg = 0x5208c, 1699 .enable_mask = BIT(0), 1700 .hw.init = &(struct clk_init_data){ 1701 .name = "gcc_camss_cphy_1_clk", 1702 .parent_hws = (const struct clk_hw *[]){ 1703 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1704 }, 1705 .num_parents = 1, 1706 .flags = CLK_SET_RATE_PARENT, 1707 .ops = &clk_branch2_ops, 1708 }, 1709 }, 1710 }; 1711 1712 static struct clk_branch gcc_camss_cphy_2_clk = { 1713 .halt_reg = 0x52090, 1714 .halt_check = BRANCH_HALT, 1715 .clkr = { 1716 .enable_reg = 0x52090, 1717 .enable_mask = BIT(0), 1718 .hw.init = &(struct clk_init_data){ 1719 .name = "gcc_camss_cphy_2_clk", 1720 .parent_hws = (const struct clk_hw *[]){ 1721 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1722 }, 1723 .num_parents = 1, 1724 .flags = CLK_SET_RATE_PARENT, 1725 .ops = &clk_branch2_ops, 1726 }, 1727 }, 1728 }; 1729 1730 static struct clk_branch gcc_camss_csi0phytimer_clk = { 1731 .halt_reg = 0x59018, 1732 .halt_check = BRANCH_HALT, 1733 .clkr = { 1734 .enable_reg = 0x59018, 1735 .enable_mask = BIT(0), 1736 .hw.init = &(struct clk_init_data){ 1737 .name = "gcc_camss_csi0phytimer_clk", 1738 .parent_hws = (const struct clk_hw *[]){ 1739 &gcc_camss_csi0phytimer_clk_src.clkr.hw, 1740 }, 1741 .num_parents = 1, 1742 .flags = CLK_SET_RATE_PARENT, 1743 .ops = &clk_branch2_ops, 1744 }, 1745 }, 1746 }; 1747 1748 static struct clk_branch gcc_camss_csi1phytimer_clk = { 1749 .halt_reg = 0x59034, 1750 .halt_check = BRANCH_HALT, 1751 .clkr = { 1752 .enable_reg = 0x59034, 1753 .enable_mask = BIT(0), 1754 .hw.init = &(struct clk_init_data){ 1755 .name = "gcc_camss_csi1phytimer_clk", 1756 .parent_hws = (const struct clk_hw *[]){ 1757 &gcc_camss_csi1phytimer_clk_src.clkr.hw, 1758 }, 1759 .num_parents = 1, 1760 .flags = CLK_SET_RATE_PARENT, 1761 .ops = &clk_branch2_ops, 1762 }, 1763 }, 1764 }; 1765 1766 static struct clk_branch gcc_camss_csi2phytimer_clk = { 1767 .halt_reg = 0x59050, 1768 .halt_check = BRANCH_HALT, 1769 .clkr = { 1770 .enable_reg = 0x59050, 1771 .enable_mask = BIT(0), 1772 .hw.init = &(struct clk_init_data){ 1773 .name = "gcc_camss_csi2phytimer_clk", 1774 .parent_hws = (const struct clk_hw *[]){ 1775 &gcc_camss_csi2phytimer_clk_src.clkr.hw, 1776 }, 1777 .num_parents = 1, 1778 .flags = CLK_SET_RATE_PARENT, 1779 .ops = &clk_branch2_ops, 1780 }, 1781 }, 1782 }; 1783 1784 static struct clk_branch gcc_camss_mclk0_clk = { 1785 .halt_reg = 0x51018, 1786 .halt_check = BRANCH_HALT, 1787 .clkr = { 1788 .enable_reg = 0x51018, 1789 .enable_mask = BIT(0), 1790 .hw.init = &(struct clk_init_data){ 1791 .name = "gcc_camss_mclk0_clk", 1792 .parent_hws = (const struct clk_hw *[]){ 1793 &gcc_camss_mclk0_clk_src.clkr.hw, 1794 }, 1795 .num_parents = 1, 1796 .flags = CLK_SET_RATE_PARENT, 1797 .ops = &clk_branch2_ops, 1798 }, 1799 }, 1800 }; 1801 1802 static struct clk_branch gcc_camss_mclk1_clk = { 1803 .halt_reg = 0x51034, 1804 .halt_check = BRANCH_HALT, 1805 .clkr = { 1806 .enable_reg = 0x51034, 1807 .enable_mask = BIT(0), 1808 .hw.init = &(struct clk_init_data){ 1809 .name = "gcc_camss_mclk1_clk", 1810 .parent_hws = (const struct clk_hw *[]){ 1811 &gcc_camss_mclk1_clk_src.clkr.hw, 1812 }, 1813 .num_parents = 1, 1814 .flags = CLK_SET_RATE_PARENT, 1815 .ops = &clk_branch2_ops, 1816 }, 1817 }, 1818 }; 1819 1820 static struct clk_branch gcc_camss_mclk2_clk = { 1821 .halt_reg = 0x51050, 1822 .halt_check = BRANCH_HALT, 1823 .clkr = { 1824 .enable_reg = 0x51050, 1825 .enable_mask = BIT(0), 1826 .hw.init = &(struct clk_init_data){ 1827 .name = "gcc_camss_mclk2_clk", 1828 .parent_hws = (const struct clk_hw *[]){ 1829 &gcc_camss_mclk2_clk_src.clkr.hw, 1830 }, 1831 .num_parents = 1, 1832 .flags = CLK_SET_RATE_PARENT, 1833 .ops = &clk_branch2_ops, 1834 }, 1835 }, 1836 }; 1837 1838 static struct clk_branch gcc_camss_mclk3_clk = { 1839 .halt_reg = 0x5106c, 1840 .halt_check = BRANCH_HALT, 1841 .clkr = { 1842 .enable_reg = 0x5106c, 1843 .enable_mask = BIT(0), 1844 .hw.init = &(struct clk_init_data){ 1845 .name = "gcc_camss_mclk3_clk", 1846 .parent_hws = (const struct clk_hw *[]){ 1847 &gcc_camss_mclk3_clk_src.clkr.hw, 1848 }, 1849 .num_parents = 1, 1850 .flags = CLK_SET_RATE_PARENT, 1851 .ops = &clk_branch2_ops, 1852 }, 1853 }, 1854 }; 1855 1856 static struct clk_branch gcc_camss_nrt_axi_clk = { 1857 .halt_reg = 0x58054, 1858 .halt_check = BRANCH_HALT, 1859 .clkr = { 1860 .enable_reg = 0x58054, 1861 .enable_mask = BIT(0), 1862 .hw.init = &(struct clk_init_data){ 1863 .name = "gcc_camss_nrt_axi_clk", 1864 .ops = &clk_branch2_ops, 1865 }, 1866 }, 1867 }; 1868 1869 static struct clk_branch gcc_camss_ope_ahb_clk = { 1870 .halt_reg = 0x5503c, 1871 .halt_check = BRANCH_HALT, 1872 .clkr = { 1873 .enable_reg = 0x5503c, 1874 .enable_mask = BIT(0), 1875 .hw.init = &(struct clk_init_data){ 1876 .name = "gcc_camss_ope_ahb_clk", 1877 .parent_hws = (const struct clk_hw *[]){ 1878 &gcc_camss_ope_ahb_clk_src.clkr.hw, 1879 }, 1880 .num_parents = 1, 1881 .flags = CLK_SET_RATE_PARENT, 1882 .ops = &clk_branch2_ops, 1883 }, 1884 }, 1885 }; 1886 1887 static struct clk_branch gcc_camss_ope_clk = { 1888 .halt_reg = 0x5501c, 1889 .halt_check = BRANCH_HALT, 1890 .clkr = { 1891 .enable_reg = 0x5501c, 1892 .enable_mask = BIT(0), 1893 .hw.init = &(struct clk_init_data){ 1894 .name = "gcc_camss_ope_clk", 1895 .parent_hws = (const struct clk_hw *[]){ 1896 &gcc_camss_ope_clk_src.clkr.hw, 1897 }, 1898 .num_parents = 1, 1899 .flags = CLK_SET_RATE_PARENT, 1900 .ops = &clk_branch2_ops, 1901 }, 1902 }, 1903 }; 1904 1905 static struct clk_branch gcc_camss_rt_axi_clk = { 1906 .halt_reg = 0x5805c, 1907 .halt_check = BRANCH_HALT, 1908 .clkr = { 1909 .enable_reg = 0x5805c, 1910 .enable_mask = BIT(0), 1911 .hw.init = &(struct clk_init_data){ 1912 .name = "gcc_camss_rt_axi_clk", 1913 .ops = &clk_branch2_ops, 1914 }, 1915 }, 1916 }; 1917 1918 static struct clk_branch gcc_camss_tfe_0_clk = { 1919 .halt_reg = 0x5201c, 1920 .halt_check = BRANCH_HALT, 1921 .clkr = { 1922 .enable_reg = 0x5201c, 1923 .enable_mask = BIT(0), 1924 .hw.init = &(struct clk_init_data){ 1925 .name = "gcc_camss_tfe_0_clk", 1926 .parent_hws = (const struct clk_hw *[]){ 1927 &gcc_camss_tfe_0_clk_src.clkr.hw, 1928 }, 1929 .num_parents = 1, 1930 .flags = CLK_SET_RATE_PARENT, 1931 .ops = &clk_branch2_ops, 1932 }, 1933 }, 1934 }; 1935 1936 static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = { 1937 .halt_reg = 0x5207c, 1938 .halt_check = BRANCH_HALT, 1939 .clkr = { 1940 .enable_reg = 0x5207c, 1941 .enable_mask = BIT(0), 1942 .hw.init = &(struct clk_init_data){ 1943 .name = "gcc_camss_tfe_0_cphy_rx_clk", 1944 .parent_hws = (const struct clk_hw *[]){ 1945 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 1946 }, 1947 .num_parents = 1, 1948 .flags = CLK_SET_RATE_PARENT, 1949 .ops = &clk_branch2_ops, 1950 }, 1951 }, 1952 }; 1953 1954 static struct clk_branch gcc_camss_tfe_0_csid_clk = { 1955 .halt_reg = 0x520ac, 1956 .halt_check = BRANCH_HALT, 1957 .clkr = { 1958 .enable_reg = 0x520ac, 1959 .enable_mask = BIT(0), 1960 .hw.init = &(struct clk_init_data){ 1961 .name = "gcc_camss_tfe_0_csid_clk", 1962 .parent_hws = (const struct clk_hw *[]){ 1963 &gcc_camss_tfe_0_csid_clk_src.clkr.hw, 1964 }, 1965 .num_parents = 1, 1966 .flags = CLK_SET_RATE_PARENT, 1967 .ops = &clk_branch2_ops, 1968 }, 1969 }, 1970 }; 1971 1972 static struct clk_branch gcc_camss_tfe_1_clk = { 1973 .halt_reg = 0x5203c, 1974 .halt_check = BRANCH_HALT, 1975 .clkr = { 1976 .enable_reg = 0x5203c, 1977 .enable_mask = BIT(0), 1978 .hw.init = &(struct clk_init_data){ 1979 .name = "gcc_camss_tfe_1_clk", 1980 .parent_hws = (const struct clk_hw *[]){ 1981 &gcc_camss_tfe_1_clk_src.clkr.hw, 1982 }, 1983 .num_parents = 1, 1984 .flags = CLK_SET_RATE_PARENT, 1985 .ops = &clk_branch2_ops, 1986 }, 1987 }, 1988 }; 1989 1990 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = { 1991 .halt_reg = 0x52080, 1992 .halt_check = BRANCH_HALT, 1993 .clkr = { 1994 .enable_reg = 0x52080, 1995 .enable_mask = BIT(0), 1996 .hw.init = &(struct clk_init_data){ 1997 .name = "gcc_camss_tfe_1_cphy_rx_clk", 1998 .parent_hws = (const struct clk_hw *[]){ 1999 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2000 }, 2001 .num_parents = 1, 2002 .flags = CLK_SET_RATE_PARENT, 2003 .ops = &clk_branch2_ops, 2004 }, 2005 }, 2006 }; 2007 2008 static struct clk_branch gcc_camss_tfe_1_csid_clk = { 2009 .halt_reg = 0x520cc, 2010 .halt_check = BRANCH_HALT, 2011 .clkr = { 2012 .enable_reg = 0x520cc, 2013 .enable_mask = BIT(0), 2014 .hw.init = &(struct clk_init_data){ 2015 .name = "gcc_camss_tfe_1_csid_clk", 2016 .parent_hws = (const struct clk_hw *[]){ 2017 &gcc_camss_tfe_1_csid_clk_src.clkr.hw, 2018 }, 2019 .num_parents = 1, 2020 .flags = CLK_SET_RATE_PARENT, 2021 .ops = &clk_branch2_ops, 2022 }, 2023 }, 2024 }; 2025 2026 static struct clk_branch gcc_camss_tfe_2_clk = { 2027 .halt_reg = 0x5205c, 2028 .halt_check = BRANCH_HALT, 2029 .clkr = { 2030 .enable_reg = 0x5205c, 2031 .enable_mask = BIT(0), 2032 .hw.init = &(struct clk_init_data){ 2033 .name = "gcc_camss_tfe_2_clk", 2034 .parent_hws = (const struct clk_hw *[]){ 2035 &gcc_camss_tfe_2_clk_src.clkr.hw, 2036 }, 2037 .num_parents = 1, 2038 .flags = CLK_SET_RATE_PARENT, 2039 .ops = &clk_branch2_ops, 2040 }, 2041 }, 2042 }; 2043 2044 static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = { 2045 .halt_reg = 0x52084, 2046 .halt_check = BRANCH_HALT, 2047 .clkr = { 2048 .enable_reg = 0x52084, 2049 .enable_mask = BIT(0), 2050 .hw.init = &(struct clk_init_data){ 2051 .name = "gcc_camss_tfe_2_cphy_rx_clk", 2052 .parent_hws = (const struct clk_hw *[]){ 2053 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2054 }, 2055 .num_parents = 1, 2056 .flags = CLK_SET_RATE_PARENT, 2057 .ops = &clk_branch2_ops, 2058 }, 2059 }, 2060 }; 2061 2062 static struct clk_branch gcc_camss_tfe_2_csid_clk = { 2063 .halt_reg = 0x520ec, 2064 .halt_check = BRANCH_HALT, 2065 .clkr = { 2066 .enable_reg = 0x520ec, 2067 .enable_mask = BIT(0), 2068 .hw.init = &(struct clk_init_data){ 2069 .name = "gcc_camss_tfe_2_csid_clk", 2070 .parent_hws = (const struct clk_hw *[]){ 2071 &gcc_camss_tfe_2_csid_clk_src.clkr.hw, 2072 }, 2073 .num_parents = 1, 2074 .flags = CLK_SET_RATE_PARENT, 2075 .ops = &clk_branch2_ops, 2076 }, 2077 }, 2078 }; 2079 2080 static struct clk_branch gcc_camss_top_ahb_clk = { 2081 .halt_reg = 0x58028, 2082 .halt_check = BRANCH_HALT, 2083 .clkr = { 2084 .enable_reg = 0x58028, 2085 .enable_mask = BIT(0), 2086 .hw.init = &(struct clk_init_data){ 2087 .name = "gcc_camss_top_ahb_clk", 2088 .parent_hws = (const struct clk_hw *[]){ 2089 &gcc_camss_top_ahb_clk_src.clkr.hw, 2090 }, 2091 .num_parents = 1, 2092 .flags = CLK_SET_RATE_PARENT, 2093 .ops = &clk_branch2_ops, 2094 }, 2095 }, 2096 }; 2097 2098 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 2099 .halt_reg = 0x1a084, 2100 .halt_check = BRANCH_HALT, 2101 .hwcg_reg = 0x1a084, 2102 .hwcg_bit = 1, 2103 .clkr = { 2104 .enable_reg = 0x1a084, 2105 .enable_mask = BIT(0), 2106 .hw.init = &(struct clk_init_data){ 2107 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 2108 .parent_hws = (const struct clk_hw *[]){ 2109 &gcc_usb30_prim_master_clk_src.clkr.hw, 2110 }, 2111 .num_parents = 1, 2112 .flags = CLK_SET_RATE_PARENT, 2113 .ops = &clk_branch2_ops, 2114 }, 2115 }, 2116 }; 2117 2118 static struct clk_branch gcc_cpuss_gnoc_clk = { 2119 .halt_reg = 0x2b004, 2120 .halt_check = BRANCH_HALT_VOTED, 2121 .hwcg_reg = 0x2b004, 2122 .hwcg_bit = 1, 2123 .clkr = { 2124 .enable_reg = 0x79004, 2125 .enable_mask = BIT(22), 2126 .hw.init = &(struct clk_init_data){ 2127 .name = "gcc_cpuss_gnoc_clk", 2128 .flags = CLK_IS_CRITICAL, 2129 .ops = &clk_branch2_ops, 2130 }, 2131 }, 2132 }; 2133 2134 static struct clk_branch gcc_disp_ahb_clk = { 2135 .halt_reg = 0x1700c, 2136 .halt_check = BRANCH_HALT, 2137 .hwcg_reg = 0x1700c, 2138 .hwcg_bit = 1, 2139 .clkr = { 2140 .enable_reg = 0x1700c, 2141 .enable_mask = BIT(0), 2142 .hw.init = &(struct clk_init_data){ 2143 .name = "gcc_disp_ahb_clk", 2144 .flags = CLK_IS_CRITICAL, 2145 .ops = &clk_branch2_ops, 2146 }, 2147 }, 2148 }; 2149 2150 static struct clk_regmap_div gcc_disp_gpll0_clk_src = { 2151 .reg = 0x17058, 2152 .shift = 0, 2153 .width = 2, 2154 .clkr.hw.init = &(struct clk_init_data) { 2155 .name = "gcc_disp_gpll0_clk_src", 2156 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 2157 .num_parents = 1, 2158 .ops = &clk_regmap_div_ops, 2159 }, 2160 }; 2161 2162 static struct clk_branch gcc_disp_gpll0_div_clk_src = { 2163 .halt_check = BRANCH_HALT_DELAY, 2164 .clkr = { 2165 .enable_reg = 0x79004, 2166 .enable_mask = BIT(20), 2167 .hw.init = &(struct clk_init_data){ 2168 .name = "gcc_disp_gpll0_div_clk_src", 2169 .parent_hws = (const struct clk_hw *[]){ 2170 &gcc_disp_gpll0_clk_src.clkr.hw, 2171 }, 2172 .num_parents = 1, 2173 .flags = CLK_SET_RATE_PARENT, 2174 .ops = &clk_branch2_ops, 2175 }, 2176 }, 2177 }; 2178 2179 static struct clk_branch gcc_disp_hf_axi_clk = { 2180 .halt_reg = 0x17020, 2181 .halt_check = BRANCH_HALT, 2182 .hwcg_reg = 0x17020, 2183 .hwcg_bit = 1, 2184 .clkr = { 2185 .enable_reg = 0x17020, 2186 .enable_mask = BIT(0), 2187 .hw.init = &(struct clk_init_data){ 2188 .name = "gcc_disp_hf_axi_clk", 2189 .ops = &clk_branch2_ops, 2190 }, 2191 }, 2192 }; 2193 2194 static struct clk_branch gcc_disp_throttle_core_clk = { 2195 .halt_reg = 0x17064, 2196 .halt_check = BRANCH_HALT_VOTED, 2197 .hwcg_reg = 0x17064, 2198 .hwcg_bit = 1, 2199 .clkr = { 2200 .enable_reg = 0x7900c, 2201 .enable_mask = BIT(5), 2202 .hw.init = &(struct clk_init_data){ 2203 .name = "gcc_disp_throttle_core_clk", 2204 .ops = &clk_branch2_ops, 2205 }, 2206 }, 2207 }; 2208 2209 static struct clk_branch gcc_disp_xo_clk = { 2210 .halt_reg = 0x1702c, 2211 .halt_check = BRANCH_HALT, 2212 .clkr = { 2213 .enable_reg = 0x1702c, 2214 .enable_mask = BIT(0), 2215 .hw.init = &(struct clk_init_data){ 2216 .name = "gcc_disp_xo_clk", 2217 .flags = CLK_IS_CRITICAL, 2218 .ops = &clk_branch2_ops, 2219 }, 2220 }, 2221 }; 2222 2223 static struct clk_branch gcc_gp1_clk = { 2224 .halt_reg = 0x4d000, 2225 .halt_check = BRANCH_HALT, 2226 .clkr = { 2227 .enable_reg = 0x4d000, 2228 .enable_mask = BIT(0), 2229 .hw.init = &(struct clk_init_data){ 2230 .name = "gcc_gp1_clk", 2231 .parent_hws = (const struct clk_hw *[]){ 2232 &gcc_gp1_clk_src.clkr.hw, 2233 }, 2234 .num_parents = 1, 2235 .flags = CLK_SET_RATE_PARENT, 2236 .ops = &clk_branch2_ops, 2237 }, 2238 }, 2239 }; 2240 2241 static struct clk_branch gcc_gp2_clk = { 2242 .halt_reg = 0x4e000, 2243 .halt_check = BRANCH_HALT, 2244 .clkr = { 2245 .enable_reg = 0x4e000, 2246 .enable_mask = BIT(0), 2247 .hw.init = &(struct clk_init_data){ 2248 .name = "gcc_gp2_clk", 2249 .parent_hws = (const struct clk_hw *[]){ 2250 &gcc_gp2_clk_src.clkr.hw, 2251 }, 2252 .num_parents = 1, 2253 .flags = CLK_SET_RATE_PARENT, 2254 .ops = &clk_branch2_ops, 2255 }, 2256 }, 2257 }; 2258 2259 static struct clk_branch gcc_gp3_clk = { 2260 .halt_reg = 0x4f000, 2261 .halt_check = BRANCH_HALT, 2262 .clkr = { 2263 .enable_reg = 0x4f000, 2264 .enable_mask = BIT(0), 2265 .hw.init = &(struct clk_init_data){ 2266 .name = "gcc_gp3_clk", 2267 .parent_hws = (const struct clk_hw *[]){ 2268 &gcc_gp3_clk_src.clkr.hw, 2269 }, 2270 .num_parents = 1, 2271 .flags = CLK_SET_RATE_PARENT, 2272 .ops = &clk_branch2_ops, 2273 }, 2274 }, 2275 }; 2276 2277 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 2278 .halt_reg = 0x36004, 2279 .halt_check = BRANCH_HALT, 2280 .hwcg_reg = 0x36004, 2281 .hwcg_bit = 1, 2282 .clkr = { 2283 .enable_reg = 0x36004, 2284 .enable_mask = BIT(0), 2285 .hw.init = &(struct clk_init_data){ 2286 .name = "gcc_gpu_cfg_ahb_clk", 2287 .flags = CLK_IS_CRITICAL, 2288 .ops = &clk_branch2_ops, 2289 }, 2290 }, 2291 }; 2292 2293 static struct clk_branch gcc_gpu_gpll0_clk_src = { 2294 .halt_check = BRANCH_HALT_DELAY, 2295 .clkr = { 2296 .enable_reg = 0x79004, 2297 .enable_mask = BIT(15), 2298 .hw.init = &(struct clk_init_data){ 2299 .name = "gcc_gpu_gpll0_clk_src", 2300 .parent_hws = (const struct clk_hw *[]){ 2301 &gpll0.clkr.hw, 2302 }, 2303 .num_parents = 1, 2304 .flags = CLK_SET_RATE_PARENT, 2305 .ops = &clk_branch2_ops, 2306 }, 2307 }, 2308 }; 2309 2310 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 2311 .halt_check = BRANCH_HALT_DELAY, 2312 .clkr = { 2313 .enable_reg = 0x79004, 2314 .enable_mask = BIT(16), 2315 .hw.init = &(struct clk_init_data){ 2316 .name = "gcc_gpu_gpll0_div_clk_src", 2317 .parent_hws = (const struct clk_hw *[]){ 2318 &gpll0_out_aux2.clkr.hw, 2319 }, 2320 .num_parents = 1, 2321 .flags = CLK_SET_RATE_PARENT, 2322 .ops = &clk_branch2_ops, 2323 }, 2324 }, 2325 }; 2326 2327 static struct clk_branch gcc_gpu_iref_clk = { 2328 .halt_reg = 0x36100, 2329 .halt_check = BRANCH_HALT_DELAY, 2330 .clkr = { 2331 .enable_reg = 0x36100, 2332 .enable_mask = BIT(0), 2333 .hw.init = &(struct clk_init_data){ 2334 .name = "gcc_gpu_iref_clk", 2335 .ops = &clk_branch2_ops, 2336 }, 2337 }, 2338 }; 2339 2340 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 2341 .halt_reg = 0x3600c, 2342 .halt_check = BRANCH_VOTED, 2343 .hwcg_reg = 0x3600c, 2344 .hwcg_bit = 1, 2345 .clkr = { 2346 .enable_reg = 0x3600c, 2347 .enable_mask = BIT(0), 2348 .hw.init = &(struct clk_init_data){ 2349 .name = "gcc_gpu_memnoc_gfx_clk", 2350 .ops = &clk_branch2_ops, 2351 }, 2352 }, 2353 }; 2354 2355 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 2356 .halt_reg = 0x36018, 2357 .halt_check = BRANCH_HALT, 2358 .clkr = { 2359 .enable_reg = 0x36018, 2360 .enable_mask = BIT(0), 2361 .hw.init = &(struct clk_init_data){ 2362 .name = "gcc_gpu_snoc_dvm_gfx_clk", 2363 .ops = &clk_branch2_ops, 2364 }, 2365 }, 2366 }; 2367 2368 static struct clk_branch gcc_gpu_throttle_core_clk = { 2369 .halt_reg = 0x36048, 2370 .halt_check = BRANCH_HALT_VOTED, 2371 .hwcg_reg = 0x36048, 2372 .hwcg_bit = 1, 2373 .clkr = { 2374 .enable_reg = 0x79004, 2375 .enable_mask = BIT(31), 2376 .hw.init = &(struct clk_init_data){ 2377 .name = "gcc_gpu_throttle_core_clk", 2378 .ops = &clk_branch2_ops, 2379 }, 2380 }, 2381 }; 2382 2383 static struct clk_branch gcc_pdm2_clk = { 2384 .halt_reg = 0x2000c, 2385 .halt_check = BRANCH_HALT, 2386 .clkr = { 2387 .enable_reg = 0x2000c, 2388 .enable_mask = BIT(0), 2389 .hw.init = &(struct clk_init_data){ 2390 .name = "gcc_pdm2_clk", 2391 .parent_hws = (const struct clk_hw *[]){ 2392 &gcc_pdm2_clk_src.clkr.hw, 2393 }, 2394 .num_parents = 1, 2395 .flags = CLK_SET_RATE_PARENT, 2396 .ops = &clk_branch2_ops, 2397 }, 2398 }, 2399 }; 2400 2401 static struct clk_branch gcc_pdm_ahb_clk = { 2402 .halt_reg = 0x20004, 2403 .halt_check = BRANCH_HALT, 2404 .hwcg_reg = 0x20004, 2405 .hwcg_bit = 1, 2406 .clkr = { 2407 .enable_reg = 0x20004, 2408 .enable_mask = BIT(0), 2409 .hw.init = &(struct clk_init_data){ 2410 .name = "gcc_pdm_ahb_clk", 2411 .ops = &clk_branch2_ops, 2412 }, 2413 }, 2414 }; 2415 2416 static struct clk_branch gcc_pdm_xo4_clk = { 2417 .halt_reg = 0x20008, 2418 .halt_check = BRANCH_HALT, 2419 .clkr = { 2420 .enable_reg = 0x20008, 2421 .enable_mask = BIT(0), 2422 .hw.init = &(struct clk_init_data){ 2423 .name = "gcc_pdm_xo4_clk", 2424 .ops = &clk_branch2_ops, 2425 }, 2426 }, 2427 }; 2428 2429 static struct clk_branch gcc_prng_ahb_clk = { 2430 .halt_reg = 0x21004, 2431 .halt_check = BRANCH_HALT_VOTED, 2432 .hwcg_reg = 0x21004, 2433 .hwcg_bit = 1, 2434 .clkr = { 2435 .enable_reg = 0x79004, 2436 .enable_mask = BIT(13), 2437 .hw.init = &(struct clk_init_data){ 2438 .name = "gcc_prng_ahb_clk", 2439 .ops = &clk_branch2_ops, 2440 }, 2441 }, 2442 }; 2443 2444 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2445 .halt_reg = 0x17014, 2446 .halt_check = BRANCH_HALT_VOTED, 2447 .hwcg_reg = 0x17014, 2448 .hwcg_bit = 1, 2449 .clkr = { 2450 .enable_reg = 0x7900c, 2451 .enable_mask = BIT(0), 2452 .hw.init = &(struct clk_init_data){ 2453 .name = "gcc_qmip_camera_nrt_ahb_clk", 2454 .ops = &clk_branch2_ops, 2455 }, 2456 }, 2457 }; 2458 2459 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2460 .halt_reg = 0x17060, 2461 .halt_check = BRANCH_HALT_VOTED, 2462 .hwcg_reg = 0x17060, 2463 .hwcg_bit = 1, 2464 .clkr = { 2465 .enable_reg = 0x7900c, 2466 .enable_mask = BIT(2), 2467 .hw.init = &(struct clk_init_data){ 2468 .name = "gcc_qmip_camera_rt_ahb_clk", 2469 .ops = &clk_branch2_ops, 2470 }, 2471 }, 2472 }; 2473 2474 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2475 .halt_reg = 0x17018, 2476 .halt_check = BRANCH_HALT_VOTED, 2477 .hwcg_reg = 0x17018, 2478 .hwcg_bit = 1, 2479 .clkr = { 2480 .enable_reg = 0x7900c, 2481 .enable_mask = BIT(1), 2482 .hw.init = &(struct clk_init_data){ 2483 .name = "gcc_qmip_disp_ahb_clk", 2484 .ops = &clk_branch2_ops, 2485 }, 2486 }, 2487 }; 2488 2489 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = { 2490 .halt_reg = 0x36040, 2491 .halt_check = BRANCH_HALT_VOTED, 2492 .hwcg_reg = 0x36040, 2493 .hwcg_bit = 1, 2494 .clkr = { 2495 .enable_reg = 0x7900c, 2496 .enable_mask = BIT(4), 2497 .hw.init = &(struct clk_init_data){ 2498 .name = "gcc_qmip_gpu_cfg_ahb_clk", 2499 .ops = &clk_branch2_ops, 2500 }, 2501 }, 2502 }; 2503 2504 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2505 .halt_reg = 0x17010, 2506 .halt_check = BRANCH_HALT_VOTED, 2507 .hwcg_reg = 0x17010, 2508 .hwcg_bit = 1, 2509 .clkr = { 2510 .enable_reg = 0x79004, 2511 .enable_mask = BIT(25), 2512 .hw.init = &(struct clk_init_data){ 2513 .name = "gcc_qmip_video_vcodec_ahb_clk", 2514 .ops = &clk_branch2_ops, 2515 }, 2516 }, 2517 }; 2518 2519 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 2520 .halt_reg = 0x1f014, 2521 .halt_check = BRANCH_HALT_VOTED, 2522 .clkr = { 2523 .enable_reg = 0x7900c, 2524 .enable_mask = BIT(9), 2525 .hw.init = &(struct clk_init_data){ 2526 .name = "gcc_qupv3_wrap0_core_2x_clk", 2527 .ops = &clk_branch2_ops, 2528 }, 2529 }, 2530 }; 2531 2532 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 2533 .halt_reg = 0x1f00c, 2534 .halt_check = BRANCH_HALT_VOTED, 2535 .clkr = { 2536 .enable_reg = 0x7900c, 2537 .enable_mask = BIT(8), 2538 .hw.init = &(struct clk_init_data){ 2539 .name = "gcc_qupv3_wrap0_core_clk", 2540 .ops = &clk_branch2_ops, 2541 }, 2542 }, 2543 }; 2544 2545 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2546 .halt_reg = 0x1f144, 2547 .halt_check = BRANCH_HALT_VOTED, 2548 .clkr = { 2549 .enable_reg = 0x7900c, 2550 .enable_mask = BIT(10), 2551 .hw.init = &(struct clk_init_data){ 2552 .name = "gcc_qupv3_wrap0_s0_clk", 2553 .parent_hws = (const struct clk_hw *[]){ 2554 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 2555 }, 2556 .num_parents = 1, 2557 .flags = CLK_SET_RATE_PARENT, 2558 .ops = &clk_branch2_ops, 2559 }, 2560 }, 2561 }; 2562 2563 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2564 .halt_reg = 0x1f274, 2565 .halt_check = BRANCH_HALT_VOTED, 2566 .clkr = { 2567 .enable_reg = 0x7900c, 2568 .enable_mask = BIT(11), 2569 .hw.init = &(struct clk_init_data){ 2570 .name = "gcc_qupv3_wrap0_s1_clk", 2571 .parent_hws = (const struct clk_hw *[]){ 2572 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 2573 }, 2574 .num_parents = 1, 2575 .flags = CLK_SET_RATE_PARENT, 2576 .ops = &clk_branch2_ops, 2577 }, 2578 }, 2579 }; 2580 2581 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2582 .halt_reg = 0x1f3a4, 2583 .halt_check = BRANCH_HALT_VOTED, 2584 .clkr = { 2585 .enable_reg = 0x7900c, 2586 .enable_mask = BIT(12), 2587 .hw.init = &(struct clk_init_data){ 2588 .name = "gcc_qupv3_wrap0_s2_clk", 2589 .parent_hws = (const struct clk_hw *[]){ 2590 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 2591 }, 2592 .num_parents = 1, 2593 .flags = CLK_SET_RATE_PARENT, 2594 .ops = &clk_branch2_ops, 2595 }, 2596 }, 2597 }; 2598 2599 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2600 .halt_reg = 0x1f4d4, 2601 .halt_check = BRANCH_HALT_VOTED, 2602 .clkr = { 2603 .enable_reg = 0x7900c, 2604 .enable_mask = BIT(13), 2605 .hw.init = &(struct clk_init_data){ 2606 .name = "gcc_qupv3_wrap0_s3_clk", 2607 .parent_hws = (const struct clk_hw *[]){ 2608 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 2609 }, 2610 .num_parents = 1, 2611 .flags = CLK_SET_RATE_PARENT, 2612 .ops = &clk_branch2_ops, 2613 }, 2614 }, 2615 }; 2616 2617 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 2618 .halt_reg = 0x1f604, 2619 .halt_check = BRANCH_HALT_VOTED, 2620 .clkr = { 2621 .enable_reg = 0x7900c, 2622 .enable_mask = BIT(14), 2623 .hw.init = &(struct clk_init_data){ 2624 .name = "gcc_qupv3_wrap0_s4_clk", 2625 .parent_hws = (const struct clk_hw *[]){ 2626 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 2627 }, 2628 .num_parents = 1, 2629 .flags = CLK_SET_RATE_PARENT, 2630 .ops = &clk_branch2_ops, 2631 }, 2632 }, 2633 }; 2634 2635 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 2636 .halt_reg = 0x1f734, 2637 .halt_check = BRANCH_HALT_VOTED, 2638 .clkr = { 2639 .enable_reg = 0x7900c, 2640 .enable_mask = BIT(15), 2641 .hw.init = &(struct clk_init_data){ 2642 .name = "gcc_qupv3_wrap0_s5_clk", 2643 .parent_hws = (const struct clk_hw *[]){ 2644 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 2645 }, 2646 .num_parents = 1, 2647 .flags = CLK_SET_RATE_PARENT, 2648 .ops = &clk_branch2_ops, 2649 }, 2650 }, 2651 }; 2652 2653 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2654 .halt_reg = 0x1f004, 2655 .halt_check = BRANCH_HALT_VOTED, 2656 .hwcg_reg = 0x1f004, 2657 .hwcg_bit = 1, 2658 .clkr = { 2659 .enable_reg = 0x7900c, 2660 .enable_mask = BIT(6), 2661 .hw.init = &(struct clk_init_data){ 2662 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2663 .ops = &clk_branch2_ops, 2664 }, 2665 }, 2666 }; 2667 2668 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2669 .halt_reg = 0x1f008, 2670 .halt_check = BRANCH_HALT_VOTED, 2671 .hwcg_reg = 0x1f008, 2672 .hwcg_bit = 1, 2673 .clkr = { 2674 .enable_reg = 0x7900c, 2675 .enable_mask = BIT(7), 2676 .hw.init = &(struct clk_init_data){ 2677 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2678 .ops = &clk_branch2_ops, 2679 }, 2680 }, 2681 }; 2682 2683 static struct clk_branch gcc_sdcc1_ahb_clk = { 2684 .halt_reg = 0x38008, 2685 .halt_check = BRANCH_HALT, 2686 .clkr = { 2687 .enable_reg = 0x38008, 2688 .enable_mask = BIT(0), 2689 .hw.init = &(struct clk_init_data){ 2690 .name = "gcc_sdcc1_ahb_clk", 2691 .ops = &clk_branch2_ops, 2692 }, 2693 }, 2694 }; 2695 2696 static struct clk_branch gcc_sdcc1_apps_clk = { 2697 .halt_reg = 0x38004, 2698 .halt_check = BRANCH_HALT, 2699 .clkr = { 2700 .enable_reg = 0x38004, 2701 .enable_mask = BIT(0), 2702 .hw.init = &(struct clk_init_data){ 2703 .name = "gcc_sdcc1_apps_clk", 2704 .parent_hws = (const struct clk_hw *[]){ 2705 &gcc_sdcc1_apps_clk_src.clkr.hw, 2706 }, 2707 .num_parents = 1, 2708 .flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */, 2709 .ops = &clk_branch2_ops, 2710 }, 2711 }, 2712 }; 2713 2714 static struct clk_branch gcc_sdcc1_ice_core_clk = { 2715 .halt_reg = 0x3800c, 2716 .halt_check = BRANCH_HALT, 2717 .hwcg_reg = 0x3800c, 2718 .hwcg_bit = 1, 2719 .clkr = { 2720 .enable_reg = 0x3800c, 2721 .enable_mask = BIT(0), 2722 .hw.init = &(struct clk_init_data){ 2723 .name = "gcc_sdcc1_ice_core_clk", 2724 .parent_hws = (const struct clk_hw *[]){ 2725 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 2726 }, 2727 .num_parents = 1, 2728 .flags = CLK_SET_RATE_PARENT, 2729 .ops = &clk_branch2_ops, 2730 }, 2731 }, 2732 }; 2733 2734 static struct clk_branch gcc_sdcc2_ahb_clk = { 2735 .halt_reg = 0x1e008, 2736 .halt_check = BRANCH_HALT, 2737 .clkr = { 2738 .enable_reg = 0x1e008, 2739 .enable_mask = BIT(0), 2740 .hw.init = &(struct clk_init_data){ 2741 .name = "gcc_sdcc2_ahb_clk", 2742 .ops = &clk_branch2_ops, 2743 }, 2744 }, 2745 }; 2746 2747 static struct clk_branch gcc_sdcc2_apps_clk = { 2748 .halt_reg = 0x1e004, 2749 .halt_check = BRANCH_HALT, 2750 .clkr = { 2751 .enable_reg = 0x1e004, 2752 .enable_mask = BIT(0), 2753 .hw.init = &(struct clk_init_data){ 2754 .name = "gcc_sdcc2_apps_clk", 2755 .parent_hws = (const struct clk_hw *[]){ 2756 &gcc_sdcc2_apps_clk_src.clkr.hw, 2757 }, 2758 .num_parents = 1, 2759 .flags = CLK_SET_RATE_PARENT, 2760 .ops = &clk_branch2_ops, 2761 }, 2762 }, 2763 }; 2764 2765 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 2766 .halt_reg = 0x2b06c, 2767 .halt_check = BRANCH_HALT_VOTED, 2768 .hwcg_reg = 0x2b06c, 2769 .hwcg_bit = 1, 2770 .clkr = { 2771 .enable_reg = 0x79004, 2772 .enable_mask = BIT(0), 2773 .hw.init = &(struct clk_init_data){ 2774 .name = "gcc_sys_noc_cpuss_ahb_clk", 2775 .flags = CLK_IS_CRITICAL, 2776 .ops = &clk_branch2_ops, 2777 }, 2778 }, 2779 }; 2780 2781 static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = { 2782 .halt_reg = 0x45098, 2783 .halt_check = BRANCH_HALT, 2784 .clkr = { 2785 .enable_reg = 0x45098, 2786 .enable_mask = BIT(0), 2787 .hw.init = &(struct clk_init_data){ 2788 .name = "gcc_sys_noc_ufs_phy_axi_clk", 2789 .parent_hws = (const struct clk_hw *[]){ 2790 &gcc_ufs_phy_axi_clk_src.clkr.hw, 2791 }, 2792 .num_parents = 1, 2793 .flags = CLK_SET_RATE_PARENT, 2794 .ops = &clk_branch2_ops, 2795 }, 2796 }, 2797 }; 2798 2799 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = { 2800 .halt_reg = 0x1a080, 2801 .halt_check = BRANCH_HALT, 2802 .hwcg_reg = 0x1a080, 2803 .hwcg_bit = 1, 2804 .clkr = { 2805 .enable_reg = 0x1a080, 2806 .enable_mask = BIT(0), 2807 .hw.init = &(struct clk_init_data){ 2808 .name = "gcc_sys_noc_usb3_prim_axi_clk", 2809 .parent_hws = (const struct clk_hw *[]){ 2810 &gcc_usb30_prim_master_clk_src.clkr.hw, 2811 }, 2812 .num_parents = 1, 2813 .flags = CLK_SET_RATE_PARENT, 2814 .ops = &clk_branch2_ops, 2815 }, 2816 }, 2817 }; 2818 2819 static struct clk_branch gcc_ufs_clkref_clk = { 2820 .halt_reg = 0x8c000, 2821 .halt_check = BRANCH_HALT, 2822 .clkr = { 2823 .enable_reg = 0x8c000, 2824 .enable_mask = BIT(0), 2825 .hw.init = &(struct clk_init_data){ 2826 .name = "gcc_ufs_clkref_clk", 2827 .ops = &clk_branch2_ops, 2828 }, 2829 }, 2830 }; 2831 2832 static struct clk_branch gcc_ufs_phy_ahb_clk = { 2833 .halt_reg = 0x45014, 2834 .halt_check = BRANCH_HALT, 2835 .hwcg_reg = 0x45014, 2836 .hwcg_bit = 1, 2837 .clkr = { 2838 .enable_reg = 0x45014, 2839 .enable_mask = BIT(0), 2840 .hw.init = &(struct clk_init_data){ 2841 .name = "gcc_ufs_phy_ahb_clk", 2842 .ops = &clk_branch2_ops, 2843 }, 2844 }, 2845 }; 2846 2847 static struct clk_branch gcc_ufs_phy_axi_clk = { 2848 .halt_reg = 0x45010, 2849 .halt_check = BRANCH_HALT, 2850 .hwcg_reg = 0x45010, 2851 .hwcg_bit = 1, 2852 .clkr = { 2853 .enable_reg = 0x45010, 2854 .enable_mask = BIT(0), 2855 .hw.init = &(struct clk_init_data){ 2856 .name = "gcc_ufs_phy_axi_clk", 2857 .parent_hws = (const struct clk_hw *[]){ 2858 &gcc_ufs_phy_axi_clk_src.clkr.hw, 2859 }, 2860 .num_parents = 1, 2861 .flags = CLK_SET_RATE_PARENT, 2862 .ops = &clk_branch2_ops, 2863 }, 2864 }, 2865 }; 2866 2867 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 2868 .halt_reg = 0x45044, 2869 .halt_check = BRANCH_HALT, 2870 .hwcg_reg = 0x45044, 2871 .hwcg_bit = 1, 2872 .clkr = { 2873 .enable_reg = 0x45044, 2874 .enable_mask = BIT(0), 2875 .hw.init = &(struct clk_init_data){ 2876 .name = "gcc_ufs_phy_ice_core_clk", 2877 .parent_hws = (const struct clk_hw *[]){ 2878 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2879 }, 2880 .num_parents = 1, 2881 .flags = CLK_SET_RATE_PARENT, 2882 .ops = &clk_branch2_ops, 2883 }, 2884 }, 2885 }; 2886 2887 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2888 .halt_reg = 0x45078, 2889 .halt_check = BRANCH_HALT, 2890 .hwcg_reg = 0x45078, 2891 .hwcg_bit = 1, 2892 .clkr = { 2893 .enable_reg = 0x45078, 2894 .enable_mask = BIT(0), 2895 .hw.init = &(struct clk_init_data){ 2896 .name = "gcc_ufs_phy_phy_aux_clk", 2897 .parent_hws = (const struct clk_hw *[]){ 2898 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2899 }, 2900 .num_parents = 1, 2901 .flags = CLK_SET_RATE_PARENT, 2902 .ops = &clk_branch2_ops, 2903 }, 2904 }, 2905 }; 2906 2907 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2908 .halt_reg = 0x4501c, 2909 .halt_check = BRANCH_HALT_SKIP, 2910 .clkr = { 2911 .enable_reg = 0x4501c, 2912 .enable_mask = BIT(0), 2913 .hw.init = &(struct clk_init_data){ 2914 .name = "gcc_ufs_phy_rx_symbol_0_clk", 2915 .ops = &clk_branch2_ops, 2916 }, 2917 }, 2918 }; 2919 2920 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2921 .halt_reg = 0x45018, 2922 .halt_check = BRANCH_HALT_SKIP, 2923 .clkr = { 2924 .enable_reg = 0x45018, 2925 .enable_mask = BIT(0), 2926 .hw.init = &(struct clk_init_data){ 2927 .name = "gcc_ufs_phy_tx_symbol_0_clk", 2928 .ops = &clk_branch2_ops, 2929 }, 2930 }, 2931 }; 2932 2933 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2934 .halt_reg = 0x45040, 2935 .halt_check = BRANCH_HALT, 2936 .hwcg_reg = 0x45040, 2937 .hwcg_bit = 1, 2938 .clkr = { 2939 .enable_reg = 0x45040, 2940 .enable_mask = BIT(0), 2941 .hw.init = &(struct clk_init_data){ 2942 .name = "gcc_ufs_phy_unipro_core_clk", 2943 .parent_hws = (const struct clk_hw *[]){ 2944 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2945 }, 2946 .num_parents = 1, 2947 .flags = CLK_SET_RATE_PARENT, 2948 .ops = &clk_branch2_ops, 2949 }, 2950 }, 2951 }; 2952 2953 static struct clk_branch gcc_usb30_prim_master_clk = { 2954 .halt_reg = 0x1a010, 2955 .halt_check = BRANCH_HALT, 2956 .clkr = { 2957 .enable_reg = 0x1a010, 2958 .enable_mask = BIT(0), 2959 .hw.init = &(struct clk_init_data){ 2960 .name = "gcc_usb30_prim_master_clk", 2961 .parent_hws = (const struct clk_hw *[]){ 2962 &gcc_usb30_prim_master_clk_src.clkr.hw, 2963 }, 2964 .num_parents = 1, 2965 .flags = CLK_SET_RATE_PARENT, 2966 .ops = &clk_branch2_ops, 2967 }, 2968 }, 2969 }; 2970 2971 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2972 .halt_reg = 0x1a018, 2973 .halt_check = BRANCH_HALT, 2974 .clkr = { 2975 .enable_reg = 0x1a018, 2976 .enable_mask = BIT(0), 2977 .hw.init = &(struct clk_init_data){ 2978 .name = "gcc_usb30_prim_mock_utmi_clk", 2979 .parent_hws = (const struct clk_hw *[]){ 2980 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 2981 }, 2982 .num_parents = 1, 2983 .flags = CLK_SET_RATE_PARENT, 2984 .ops = &clk_branch2_ops, 2985 }, 2986 }, 2987 }; 2988 2989 static struct clk_branch gcc_usb30_prim_sleep_clk = { 2990 .halt_reg = 0x1a014, 2991 .halt_check = BRANCH_HALT, 2992 .clkr = { 2993 .enable_reg = 0x1a014, 2994 .enable_mask = BIT(0), 2995 .hw.init = &(struct clk_init_data){ 2996 .name = "gcc_usb30_prim_sleep_clk", 2997 .ops = &clk_branch2_ops, 2998 }, 2999 }, 3000 }; 3001 3002 static struct clk_branch gcc_usb3_prim_clkref_clk = { 3003 .halt_reg = 0x9f000, 3004 .halt_check = BRANCH_HALT, 3005 .clkr = { 3006 .enable_reg = 0x9f000, 3007 .enable_mask = BIT(0), 3008 .hw.init = &(struct clk_init_data){ 3009 .name = "gcc_usb3_prim_clkref_clk", 3010 .ops = &clk_branch2_ops, 3011 }, 3012 }, 3013 }; 3014 3015 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3016 .halt_reg = 0x1a054, 3017 .halt_check = BRANCH_HALT, 3018 .clkr = { 3019 .enable_reg = 0x1a054, 3020 .enable_mask = BIT(0), 3021 .hw.init = &(struct clk_init_data){ 3022 .name = "gcc_usb3_prim_phy_com_aux_clk", 3023 .parent_hws = (const struct clk_hw *[]){ 3024 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 3025 }, 3026 .num_parents = 1, 3027 .flags = CLK_SET_RATE_PARENT, 3028 .ops = &clk_branch2_ops, 3029 }, 3030 }, 3031 }; 3032 3033 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3034 .halt_reg = 0x1a058, 3035 .halt_check = BRANCH_HALT_SKIP, 3036 .hwcg_reg = 0x1a058, 3037 .hwcg_bit = 1, 3038 .clkr = { 3039 .enable_reg = 0x1a058, 3040 .enable_mask = BIT(0), 3041 .hw.init = &(struct clk_init_data){ 3042 .name = "gcc_usb3_prim_phy_pipe_clk", 3043 .ops = &clk_branch2_ops, 3044 }, 3045 }, 3046 }; 3047 3048 static struct clk_branch gcc_vcodec0_axi_clk = { 3049 .halt_reg = 0x6e008, 3050 .halt_check = BRANCH_HALT, 3051 .clkr = { 3052 .enable_reg = 0x6e008, 3053 .enable_mask = BIT(0), 3054 .hw.init = &(struct clk_init_data){ 3055 .name = "gcc_vcodec0_axi_clk", 3056 .ops = &clk_branch2_ops, 3057 }, 3058 }, 3059 }; 3060 3061 static struct clk_branch gcc_venus_ahb_clk = { 3062 .halt_reg = 0x6e010, 3063 .halt_check = BRANCH_HALT, 3064 .clkr = { 3065 .enable_reg = 0x6e010, 3066 .enable_mask = BIT(0), 3067 .hw.init = &(struct clk_init_data){ 3068 .name = "gcc_venus_ahb_clk", 3069 .ops = &clk_branch2_ops, 3070 }, 3071 }, 3072 }; 3073 3074 static struct clk_branch gcc_venus_ctl_axi_clk = { 3075 .halt_reg = 0x6e004, 3076 .halt_check = BRANCH_HALT, 3077 .clkr = { 3078 .enable_reg = 0x6e004, 3079 .enable_mask = BIT(0), 3080 .hw.init = &(struct clk_init_data){ 3081 .name = "gcc_venus_ctl_axi_clk", 3082 .ops = &clk_branch2_ops, 3083 }, 3084 }, 3085 }; 3086 3087 static struct clk_branch gcc_video_ahb_clk = { 3088 .halt_reg = 0x17004, 3089 .halt_check = BRANCH_HALT, 3090 .hwcg_reg = 0x17004, 3091 .hwcg_bit = 1, 3092 .clkr = { 3093 .enable_reg = 0x17004, 3094 .enable_mask = BIT(0), 3095 .hw.init = &(struct clk_init_data){ 3096 .name = "gcc_video_ahb_clk", 3097 .ops = &clk_branch2_ops, 3098 }, 3099 }, 3100 }; 3101 3102 static struct clk_branch gcc_video_axi0_clk = { 3103 .halt_reg = 0x1701c, 3104 .halt_check = BRANCH_HALT, 3105 .hwcg_reg = 0x1701c, 3106 .hwcg_bit = 1, 3107 .clkr = { 3108 .enable_reg = 0x1701c, 3109 .enable_mask = BIT(0), 3110 .hw.init = &(struct clk_init_data){ 3111 .name = "gcc_video_axi0_clk", 3112 .ops = &clk_branch2_ops, 3113 }, 3114 }, 3115 }; 3116 3117 static struct clk_branch gcc_video_throttle_core_clk = { 3118 .halt_reg = 0x17068, 3119 .halt_check = BRANCH_HALT_VOTED, 3120 .hwcg_reg = 0x17068, 3121 .hwcg_bit = 1, 3122 .clkr = { 3123 .enable_reg = 0x79004, 3124 .enable_mask = BIT(28), 3125 .hw.init = &(struct clk_init_data){ 3126 .name = "gcc_video_throttle_core_clk", 3127 .ops = &clk_branch2_ops, 3128 }, 3129 }, 3130 }; 3131 3132 static struct clk_branch gcc_video_vcodec0_sys_clk = { 3133 .halt_reg = 0x580a4, 3134 .halt_check = BRANCH_HALT_DELAY, 3135 .hwcg_reg = 0x580a4, 3136 .hwcg_bit = 1, 3137 .clkr = { 3138 .enable_reg = 0x580a4, 3139 .enable_mask = BIT(0), 3140 .hw.init = &(struct clk_init_data){ 3141 .name = "gcc_video_vcodec0_sys_clk", 3142 .parent_hws = (const struct clk_hw *[]){ 3143 &gcc_video_venus_clk_src.clkr.hw, 3144 }, 3145 .num_parents = 1, 3146 .flags = CLK_SET_RATE_PARENT, 3147 .ops = &clk_branch2_ops, 3148 }, 3149 }, 3150 }; 3151 3152 static struct clk_branch gcc_video_venus_ctl_clk = { 3153 .halt_reg = 0x5808c, 3154 .halt_check = BRANCH_HALT, 3155 .clkr = { 3156 .enable_reg = 0x5808c, 3157 .enable_mask = BIT(0), 3158 .hw.init = &(struct clk_init_data){ 3159 .name = "gcc_video_venus_ctl_clk", 3160 .parent_hws = (const struct clk_hw *[]){ 3161 &gcc_video_venus_clk_src.clkr.hw, 3162 }, 3163 .num_parents = 1, 3164 .flags = CLK_SET_RATE_PARENT, 3165 .ops = &clk_branch2_ops, 3166 }, 3167 }, 3168 }; 3169 3170 static struct clk_branch gcc_video_xo_clk = { 3171 .halt_reg = 0x17024, 3172 .halt_check = BRANCH_HALT, 3173 .clkr = { 3174 .enable_reg = 0x17024, 3175 .enable_mask = BIT(0), 3176 .hw.init = &(struct clk_init_data){ 3177 .name = "gcc_video_xo_clk", 3178 .ops = &clk_branch2_ops, 3179 }, 3180 }, 3181 }; 3182 3183 static struct gdsc gcc_camss_top_gdsc = { 3184 .gdscr = 0x58004, 3185 .pd = { 3186 .name = "gcc_camss_top", 3187 }, 3188 .pwrsts = PWRSTS_OFF_ON, 3189 }; 3190 3191 static struct gdsc gcc_ufs_phy_gdsc = { 3192 .gdscr = 0x45004, 3193 .pd = { 3194 .name = "gcc_ufs_phy", 3195 }, 3196 .pwrsts = PWRSTS_OFF_ON, 3197 }; 3198 3199 static struct gdsc gcc_usb30_prim_gdsc = { 3200 .gdscr = 0x1a004, 3201 .pd = { 3202 .name = "gcc_usb30_prim", 3203 }, 3204 .pwrsts = PWRSTS_OFF_ON, 3205 }; 3206 3207 static struct gdsc gcc_vcodec0_gdsc = { 3208 .gdscr = 0x58098, 3209 .pd = { 3210 .name = "gcc_vcodec0", 3211 }, 3212 .pwrsts = PWRSTS_OFF_ON, 3213 }; 3214 3215 static struct gdsc gcc_venus_gdsc = { 3216 .gdscr = 0x5807c, 3217 .pd = { 3218 .name = "gcc_venus", 3219 }, 3220 .pwrsts = PWRSTS_OFF_ON, 3221 }; 3222 3223 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = { 3224 .gdscr = 0x7d060, 3225 .pd = { 3226 .name = "hlos1_vote_turing_mmu_tbu1", 3227 }, 3228 .pwrsts = PWRSTS_OFF_ON, 3229 .flags = VOTABLE, 3230 }; 3231 3232 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = { 3233 .gdscr = 0x7d07c, 3234 .pd = { 3235 .name = "hlos1_vote_turing_mmu_tbu0", 3236 }, 3237 .pwrsts = PWRSTS_OFF_ON, 3238 .flags = VOTABLE, 3239 }; 3240 3241 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = { 3242 .gdscr = 0x7d074, 3243 .pd = { 3244 .name = "hlos1_vote_mm_snoc_mmu_tbu_rt", 3245 }, 3246 .pwrsts = PWRSTS_OFF_ON, 3247 .flags = VOTABLE, 3248 }; 3249 3250 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = { 3251 .gdscr = 0x7d078, 3252 .pd = { 3253 .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt", 3254 }, 3255 .pwrsts = PWRSTS_OFF_ON, 3256 .flags = VOTABLE, 3257 }; 3258 3259 static struct clk_regmap *gcc_sm6115_clocks[] = { 3260 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr, 3261 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr, 3262 [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr, 3263 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3264 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr, 3265 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr, 3266 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 3267 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 3268 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr, 3269 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr, 3270 [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr, 3271 [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr, 3272 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr, 3273 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr, 3274 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr, 3275 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr, 3276 [GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr, 3277 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 3278 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr, 3279 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 3280 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr, 3281 [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr, 3282 [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr, 3283 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 3284 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr, 3285 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 3286 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr, 3287 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 3288 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr, 3289 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr, 3290 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr, 3291 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr, 3292 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr, 3293 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr, 3294 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr, 3295 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr, 3296 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr, 3297 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr, 3298 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr, 3299 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr, 3300 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr, 3301 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr, 3302 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr, 3303 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr, 3304 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr, 3305 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr, 3306 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr, 3307 [GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr, 3308 [GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr, 3309 [GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr, 3310 [GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr, 3311 [GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr, 3312 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr, 3313 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 3314 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr, 3315 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3316 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 3317 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 3318 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr, 3319 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr, 3320 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3321 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr, 3322 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 3323 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3324 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3325 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3326 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3327 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3328 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3329 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 3330 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3331 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3332 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr, 3333 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3334 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3335 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr, 3336 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3337 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3338 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3339 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3340 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3341 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3342 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3343 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3344 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr, 3345 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3346 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 3347 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 3348 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 3349 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 3350 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 3351 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 3352 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 3353 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 3354 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 3355 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 3356 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 3357 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 3358 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 3359 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 3360 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 3361 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 3362 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3363 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3364 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 3365 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 3366 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 3367 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3368 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3369 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3370 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 3371 [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr, 3372 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr, 3373 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr, 3374 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3375 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3376 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3377 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3378 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3379 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3380 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3381 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 3382 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 3383 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3384 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 3385 &gcc_ufs_phy_unipro_core_clk_src.clkr, 3386 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3387 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3388 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3389 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 3390 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3391 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = 3392 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 3393 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3394 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 3395 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3396 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3397 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3398 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr, 3399 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr, 3400 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr, 3401 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 3402 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3403 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr, 3404 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr, 3405 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr, 3406 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr, 3407 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 3408 [GPLL0] = &gpll0.clkr, 3409 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr, 3410 [GPLL0_OUT_MAIN] = &gpll0_out_main.clkr, 3411 [GPLL10] = &gpll10.clkr, 3412 [GPLL10_OUT_MAIN] = &gpll10_out_main.clkr, 3413 [GPLL11] = &gpll11.clkr, 3414 [GPLL11_OUT_MAIN] = &gpll11_out_main.clkr, 3415 [GPLL3] = &gpll3.clkr, 3416 [GPLL4] = &gpll4.clkr, 3417 [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr, 3418 [GPLL6] = &gpll6.clkr, 3419 [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr, 3420 [GPLL7] = &gpll7.clkr, 3421 [GPLL7_OUT_MAIN] = &gpll7_out_main.clkr, 3422 [GPLL8] = &gpll8.clkr, 3423 [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr, 3424 [GPLL9] = &gpll9.clkr, 3425 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr, 3426 }; 3427 3428 static const struct qcom_reset_map gcc_sm6115_resets[] = { 3429 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 }, 3430 [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 }, 3431 [GCC_SDCC1_BCR] = { 0x38000 }, 3432 [GCC_SDCC2_BCR] = { 0x1e000 }, 3433 [GCC_UFS_PHY_BCR] = { 0x45000 }, 3434 [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 3435 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 }, 3436 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 }, 3437 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 }, 3438 [GCC_VCODEC0_BCR] = { 0x58094 }, 3439 [GCC_VENUS_BCR] = { 0x58078 }, 3440 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 }, 3441 }; 3442 3443 static struct gdsc *gcc_sm6115_gdscs[] = { 3444 [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc, 3445 [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc, 3446 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc, 3447 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc, 3448 [GCC_VENUS_GDSC] = &gcc_venus_gdsc, 3449 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc, 3450 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc, 3451 [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc, 3452 [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc, 3453 }; 3454 3455 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 3456 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 3457 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 3458 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 3459 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 3460 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 3461 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 3462 }; 3463 3464 static const struct regmap_config gcc_sm6115_regmap_config = { 3465 .reg_bits = 32, 3466 .reg_stride = 4, 3467 .val_bits = 32, 3468 .max_register = 0xc7000, 3469 .fast_io = true, 3470 }; 3471 3472 static const struct qcom_cc_desc gcc_sm6115_desc = { 3473 .config = &gcc_sm6115_regmap_config, 3474 .clks = gcc_sm6115_clocks, 3475 .num_clks = ARRAY_SIZE(gcc_sm6115_clocks), 3476 .resets = gcc_sm6115_resets, 3477 .num_resets = ARRAY_SIZE(gcc_sm6115_resets), 3478 .gdscs = gcc_sm6115_gdscs, 3479 .num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs), 3480 }; 3481 3482 static const struct of_device_id gcc_sm6115_match_table[] = { 3483 { .compatible = "qcom,gcc-sm6115" }, 3484 { } 3485 }; 3486 MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table); 3487 3488 static int gcc_sm6115_probe(struct platform_device *pdev) 3489 { 3490 struct regmap *regmap; 3491 int ret; 3492 3493 regmap = qcom_cc_map(pdev, &gcc_sm6115_desc); 3494 if (IS_ERR(regmap)) 3495 return PTR_ERR(regmap); 3496 3497 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 3498 ARRAY_SIZE(gcc_dfs_clocks)); 3499 if (ret) 3500 return ret; 3501 3502 clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config); 3503 clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config); 3504 clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config); 3505 clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config); 3506 3507 return qcom_cc_really_probe(pdev, &gcc_sm6115_desc, regmap); 3508 } 3509 3510 static struct platform_driver gcc_sm6115_driver = { 3511 .probe = gcc_sm6115_probe, 3512 .driver = { 3513 .name = "gcc-sm6115", 3514 .of_match_table = gcc_sm6115_match_table, 3515 }, 3516 }; 3517 3518 static int __init gcc_sm6115_init(void) 3519 { 3520 return platform_driver_register(&gcc_sm6115_driver); 3521 } 3522 subsys_initcall(gcc_sm6115_init); 3523 3524 static void __exit gcc_sm6115_exit(void) 3525 { 3526 platform_driver_unregister(&gcc_sm6115_driver); 3527 } 3528 module_exit(gcc_sm6115_exit); 3529 3530 MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver"); 3531 MODULE_LICENSE("GPL v2"); 3532 MODULE_ALIAS("platform:gcc-sm6115"); 3533