1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright 2020 Linaro Limited 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/bitops.h> 8 #include <linux/err.h> 9 #include <linux/platform_device.h> 10 #include <linux/module.h> 11 #include <linux/of.h> 12 #include <linux/clk-provider.h> 13 #include <linux/regmap.h> 14 #include <linux/reset-controller.h> 15 16 #include <dt-bindings/clock/qcom,gcc-msm8939.h> 17 #include <dt-bindings/reset/qcom,gcc-msm8939.h> 18 19 #include "common.h" 20 #include "clk-regmap.h" 21 #include "clk-pll.h" 22 #include "clk-rcg.h" 23 #include "clk-branch.h" 24 #include "reset.h" 25 #include "gdsc.h" 26 27 enum { 28 P_XO, 29 P_GPLL0, 30 P_GPLL0_AUX, 31 P_BIMC, 32 P_GPLL1, 33 P_GPLL1_AUX, 34 P_GPLL2, 35 P_GPLL2_AUX, 36 P_GPLL3, 37 P_GPLL3_AUX, 38 P_GPLL4, 39 P_GPLL5, 40 P_GPLL5_AUX, 41 P_GPLL5_EARLY, 42 P_GPLL6, 43 P_GPLL6_AUX, 44 P_SLEEP_CLK, 45 P_DSI0_PHYPLL_BYTE, 46 P_DSI0_PHYPLL_DSI, 47 P_EXT_PRI_I2S, 48 P_EXT_SEC_I2S, 49 P_EXT_MCLK, 50 }; 51 52 static struct clk_pll gpll0 = { 53 .l_reg = 0x21004, 54 .m_reg = 0x21008, 55 .n_reg = 0x2100c, 56 .config_reg = 0x21010, 57 .mode_reg = 0x21000, 58 .status_reg = 0x2101c, 59 .status_bit = 17, 60 .clkr.hw.init = &(struct clk_init_data){ 61 .name = "gpll0", 62 .parent_data = &(const struct clk_parent_data) { 63 .fw_name = "xo", 64 }, 65 .num_parents = 1, 66 .ops = &clk_pll_ops, 67 }, 68 }; 69 70 static struct clk_regmap gpll0_vote = { 71 .enable_reg = 0x45000, 72 .enable_mask = BIT(0), 73 .hw.init = &(struct clk_init_data){ 74 .name = "gpll0_vote", 75 .parent_hws = (const struct clk_hw*[]) { 76 &gpll0.clkr.hw, 77 }, 78 .num_parents = 1, 79 .ops = &clk_pll_vote_ops, 80 }, 81 }; 82 83 static struct clk_pll gpll1 = { 84 .l_reg = 0x20004, 85 .m_reg = 0x20008, 86 .n_reg = 0x2000c, 87 .config_reg = 0x20010, 88 .mode_reg = 0x20000, 89 .status_reg = 0x2001c, 90 .status_bit = 17, 91 .clkr.hw.init = &(struct clk_init_data){ 92 .name = "gpll1", 93 .parent_data = &(const struct clk_parent_data) { 94 .fw_name = "xo", 95 }, 96 .num_parents = 1, 97 .ops = &clk_pll_ops, 98 }, 99 }; 100 101 static struct clk_regmap gpll1_vote = { 102 .enable_reg = 0x45000, 103 .enable_mask = BIT(1), 104 .hw.init = &(struct clk_init_data){ 105 .name = "gpll1_vote", 106 .parent_hws = (const struct clk_hw*[]) { 107 &gpll1.clkr.hw, 108 }, 109 .num_parents = 1, 110 .ops = &clk_pll_vote_ops, 111 }, 112 }; 113 114 static struct clk_pll gpll2 = { 115 .l_reg = 0x4a004, 116 .m_reg = 0x4a008, 117 .n_reg = 0x4a00c, 118 .config_reg = 0x4a010, 119 .mode_reg = 0x4a000, 120 .status_reg = 0x4a01c, 121 .status_bit = 17, 122 .clkr.hw.init = &(struct clk_init_data){ 123 .name = "gpll2", 124 .parent_data = &(const struct clk_parent_data) { 125 .fw_name = "xo", 126 }, 127 .num_parents = 1, 128 .ops = &clk_pll_ops, 129 }, 130 }; 131 132 static struct clk_regmap gpll2_vote = { 133 .enable_reg = 0x45000, 134 .enable_mask = BIT(2), 135 .hw.init = &(struct clk_init_data){ 136 .name = "gpll2_vote", 137 .parent_hws = (const struct clk_hw*[]) { 138 &gpll2.clkr.hw, 139 }, 140 .num_parents = 1, 141 .ops = &clk_pll_vote_ops, 142 }, 143 }; 144 145 static struct clk_pll bimc_pll = { 146 .l_reg = 0x23004, 147 .m_reg = 0x23008, 148 .n_reg = 0x2300c, 149 .config_reg = 0x23010, 150 .mode_reg = 0x23000, 151 .status_reg = 0x2301c, 152 .status_bit = 17, 153 .clkr.hw.init = &(struct clk_init_data){ 154 .name = "bimc_pll", 155 .parent_data = &(const struct clk_parent_data) { 156 .fw_name = "xo", 157 }, 158 .num_parents = 1, 159 .ops = &clk_pll_ops, 160 }, 161 }; 162 163 static struct clk_regmap bimc_pll_vote = { 164 .enable_reg = 0x45000, 165 .enable_mask = BIT(3), 166 .hw.init = &(struct clk_init_data){ 167 .name = "bimc_pll_vote", 168 .parent_hws = (const struct clk_hw*[]) { 169 &bimc_pll.clkr.hw, 170 }, 171 .num_parents = 1, 172 .ops = &clk_pll_vote_ops, 173 }, 174 }; 175 176 static struct clk_pll gpll3 = { 177 .l_reg = 0x22004, 178 .m_reg = 0x22008, 179 .n_reg = 0x2200c, 180 .config_reg = 0x22010, 181 .mode_reg = 0x22000, 182 .status_reg = 0x2201c, 183 .status_bit = 17, 184 .clkr.hw.init = &(struct clk_init_data){ 185 .name = "gpll3", 186 .parent_data = &(const struct clk_parent_data) { 187 .fw_name = "xo", 188 }, 189 .num_parents = 1, 190 .ops = &clk_pll_ops, 191 }, 192 }; 193 194 static struct clk_regmap gpll3_vote = { 195 .enable_reg = 0x45000, 196 .enable_mask = BIT(4), 197 .hw.init = &(struct clk_init_data){ 198 .name = "gpll3_vote", 199 .parent_hws = (const struct clk_hw*[]) { 200 &gpll3.clkr.hw, 201 }, 202 .num_parents = 1, 203 .ops = &clk_pll_vote_ops, 204 }, 205 }; 206 207 /* GPLL3 at 1100 MHz, main output enabled. */ 208 static const struct pll_config gpll3_config = { 209 .l = 57, 210 .m = 7, 211 .n = 24, 212 .vco_val = 0x0, 213 .vco_mask = BIT(20), 214 .pre_div_val = 0x0, 215 .pre_div_mask = BIT(12), 216 .post_div_val = 0x0, 217 .post_div_mask = BIT(9) | BIT(8), 218 .mn_ena_mask = BIT(24), 219 .main_output_mask = BIT(0), 220 .aux_output_mask = BIT(1), 221 }; 222 223 static struct clk_pll gpll4 = { 224 .l_reg = 0x24004, 225 .m_reg = 0x24008, 226 .n_reg = 0x2400c, 227 .config_reg = 0x24010, 228 .mode_reg = 0x24000, 229 .status_reg = 0x2401c, 230 .status_bit = 17, 231 .clkr.hw.init = &(struct clk_init_data){ 232 .name = "gpll4", 233 .parent_data = &(const struct clk_parent_data) { 234 .fw_name = "xo", 235 }, 236 .num_parents = 1, 237 .ops = &clk_pll_ops, 238 }, 239 }; 240 241 static struct clk_regmap gpll4_vote = { 242 .enable_reg = 0x45000, 243 .enable_mask = BIT(5), 244 .hw.init = &(struct clk_init_data){ 245 .name = "gpll4_vote", 246 .parent_hws = (const struct clk_hw*[]) { 247 &gpll4.clkr.hw, 248 }, 249 .num_parents = 1, 250 .ops = &clk_pll_vote_ops, 251 }, 252 }; 253 254 /* GPLL4 at 1200 MHz, main output enabled. */ 255 static struct pll_config gpll4_config = { 256 .l = 62, 257 .m = 1, 258 .n = 2, 259 .vco_val = 0x0, 260 .vco_mask = BIT(20), 261 .pre_div_val = 0x0, 262 .pre_div_mask = BIT(12), 263 .post_div_val = 0x0, 264 .post_div_mask = BIT(9) | BIT(8), 265 .mn_ena_mask = BIT(24), 266 .main_output_mask = BIT(0), 267 }; 268 269 static struct clk_pll gpll5 = { 270 .l_reg = 0x25004, 271 .m_reg = 0x25008, 272 .n_reg = 0x2500c, 273 .config_reg = 0x25010, 274 .mode_reg = 0x25000, 275 .status_reg = 0x2501c, 276 .status_bit = 17, 277 .clkr.hw.init = &(struct clk_init_data){ 278 .name = "gpll5", 279 .parent_data = &(const struct clk_parent_data) { 280 .fw_name = "xo", 281 }, 282 .num_parents = 1, 283 .ops = &clk_pll_ops, 284 }, 285 }; 286 287 static struct clk_regmap gpll5_vote = { 288 .enable_reg = 0x45000, 289 .enable_mask = BIT(6), 290 .hw.init = &(struct clk_init_data){ 291 .name = "gpll5_vote", 292 .parent_hws = (const struct clk_hw*[]) { 293 &gpll5.clkr.hw, 294 }, 295 .num_parents = 1, 296 .ops = &clk_pll_vote_ops, 297 }, 298 }; 299 300 static struct clk_pll gpll6 = { 301 .l_reg = 0x37004, 302 .m_reg = 0x37008, 303 .n_reg = 0x3700c, 304 .config_reg = 0x37010, 305 .mode_reg = 0x37000, 306 .status_reg = 0x3701c, 307 .status_bit = 17, 308 .clkr.hw.init = &(struct clk_init_data){ 309 .name = "gpll6", 310 .parent_data = &(const struct clk_parent_data) { 311 .fw_name = "xo", 312 }, 313 .num_parents = 1, 314 .ops = &clk_pll_ops, 315 }, 316 }; 317 318 static struct clk_regmap gpll6_vote = { 319 .enable_reg = 0x45000, 320 .enable_mask = BIT(7), 321 .hw.init = &(struct clk_init_data){ 322 .name = "gpll6_vote", 323 .parent_hws = (const struct clk_hw*[]) { 324 &gpll6.clkr.hw, 325 }, 326 .num_parents = 1, 327 .ops = &clk_pll_vote_ops, 328 }, 329 }; 330 331 static const struct parent_map gcc_xo_gpll0_map[] = { 332 { P_XO, 0 }, 333 { P_GPLL0, 1 }, 334 }; 335 336 static const struct clk_parent_data gcc_xo_gpll0_parent_data[] = { 337 { .fw_name = "xo" }, 338 { .hw = &gpll0_vote.hw }, 339 }; 340 341 static const struct parent_map gcc_xo_gpll0_bimc_map[] = { 342 { P_XO, 0 }, 343 { P_GPLL0, 1 }, 344 { P_BIMC, 2 }, 345 }; 346 347 static const struct clk_parent_data gcc_xo_gpll0_bimc_parent_data[] = { 348 { .fw_name = "xo" }, 349 { .hw = &gpll0_vote.hw }, 350 { .hw = &bimc_pll_vote.hw }, 351 }; 352 353 static const struct parent_map gcc_xo_gpll0_gpll6a_map[] = { 354 { P_XO, 0 }, 355 { P_GPLL0, 1 }, 356 { P_GPLL6_AUX, 2 }, 357 }; 358 359 static const struct clk_parent_data gcc_xo_gpll0_gpll6a_parent_data[] = { 360 { .fw_name = "xo" }, 361 { .hw = &gpll0_vote.hw }, 362 { .hw = &gpll6_vote.hw }, 363 }; 364 365 static const struct parent_map gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map[] = { 366 { P_XO, 0 }, 367 { P_GPLL0, 1 }, 368 { P_GPLL2_AUX, 4 }, 369 { P_GPLL3, 2 }, 370 { P_GPLL6_AUX, 3 }, 371 }; 372 373 static const struct clk_parent_data gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data[] = { 374 { .fw_name = "xo" }, 375 { .hw = &gpll0_vote.hw }, 376 { .hw = &gpll2_vote.hw }, 377 { .hw = &gpll3_vote.hw }, 378 { .hw = &gpll6_vote.hw }, 379 }; 380 381 static const struct parent_map gcc_xo_gpll0_gpll2_map[] = { 382 { P_XO, 0 }, 383 { P_GPLL0, 1 }, 384 { P_GPLL2, 2 }, 385 }; 386 387 static const struct clk_parent_data gcc_xo_gpll0_gpll2_parent_data[] = { 388 { .fw_name = "xo" }, 389 { .hw = &gpll0_vote.hw }, 390 { .hw = &gpll2_vote.hw }, 391 }; 392 393 static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = { 394 { P_XO, 0 }, 395 { P_GPLL0, 1 }, 396 { P_GPLL2, 3 }, 397 { P_GPLL4, 2 }, 398 }; 399 400 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_parent_data[] = { 401 { .fw_name = "xo" }, 402 { .hw = &gpll0_vote.hw }, 403 { .hw = &gpll2_vote.hw }, 404 { .hw = &gpll4_vote.hw }, 405 }; 406 407 static const struct parent_map gcc_xo_gpll0a_map[] = { 408 { P_XO, 0 }, 409 { P_GPLL0_AUX, 2 }, 410 }; 411 412 static const struct clk_parent_data gcc_xo_gpll0a_parent_data[] = { 413 { .fw_name = "xo" }, 414 { .hw = &gpll0_vote.hw }, 415 }; 416 417 static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = { 418 { P_XO, 0 }, 419 { P_GPLL0, 1 }, 420 { P_GPLL1_AUX, 2 }, 421 { P_SLEEP_CLK, 6 }, 422 }; 423 424 static const struct clk_parent_data gcc_xo_gpll0_gpll1a_sleep_parent_data[] = { 425 { .fw_name = "xo" }, 426 { .hw = &gpll0_vote.hw }, 427 { .hw = &gpll1_vote.hw }, 428 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 429 }; 430 431 static const struct parent_map gcc_xo_gpll0_gpll1a_gpll6_sleep_map[] = { 432 { P_XO, 0 }, 433 { P_GPLL0, 1 }, 434 { P_GPLL1_AUX, 2 }, 435 { P_GPLL6, 2 }, 436 { P_SLEEP_CLK, 6 }, 437 }; 438 439 static const struct clk_parent_data gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data[] = { 440 { .fw_name = "xo" }, 441 { .hw = &gpll0_vote.hw }, 442 { .hw = &gpll1_vote.hw }, 443 { .hw = &gpll6_vote.hw }, 444 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 445 }; 446 447 static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = { 448 { P_XO, 0 }, 449 { P_GPLL0, 1 }, 450 { P_GPLL1_AUX, 2 }, 451 }; 452 453 static const struct clk_parent_data gcc_xo_gpll0_gpll1a_parent_data[] = { 454 { .fw_name = "xo" }, 455 { .hw = &gpll0_vote.hw }, 456 { .hw = &gpll1_vote.hw }, 457 }; 458 459 static const struct parent_map gcc_xo_dsibyte_map[] = { 460 { P_XO, 0, }, 461 { P_DSI0_PHYPLL_BYTE, 2 }, 462 }; 463 464 static const struct clk_parent_data gcc_xo_dsibyte_parent_data[] = { 465 { .fw_name = "xo" }, 466 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" }, 467 }; 468 469 static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = { 470 { P_XO, 0 }, 471 { P_GPLL0_AUX, 2 }, 472 { P_DSI0_PHYPLL_BYTE, 1 }, 473 }; 474 475 static const struct clk_parent_data gcc_xo_gpll0a_dsibyte_parent_data[] = { 476 { .fw_name = "xo" }, 477 { .hw = &gpll0_vote.hw }, 478 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" }, 479 }; 480 481 static const struct parent_map gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map[] = { 482 { P_XO, 0 }, 483 { P_GPLL1, 1 }, 484 { P_DSI0_PHYPLL_DSI, 2 }, 485 { P_GPLL6, 3 }, 486 { P_GPLL3_AUX, 4 }, 487 { P_GPLL0_AUX, 5 }, 488 }; 489 490 static const struct clk_parent_data gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data[] = { 491 { .fw_name = "xo" }, 492 { .hw = &gpll1_vote.hw }, 493 { .fw_name = "dsi0pll", .name = "dsi0pll" }, 494 { .hw = &gpll6_vote.hw }, 495 { .hw = &gpll3_vote.hw }, 496 { .hw = &gpll0_vote.hw }, 497 }; 498 499 static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = { 500 { P_XO, 0 }, 501 { P_GPLL0_AUX, 2 }, 502 { P_DSI0_PHYPLL_DSI, 1 }, 503 }; 504 505 static const struct clk_parent_data gcc_xo_gpll0a_dsiphy_parent_data[] = { 506 { .fw_name = "xo" }, 507 { .hw = &gpll0_vote.hw }, 508 { .fw_name = "dsi0pll", .name = "dsi0pll" }, 509 }; 510 511 static const struct parent_map gcc_xo_gpll0_gpll5a_gpll6_bimc_map[] = { 512 { P_XO, 0 }, 513 { P_GPLL0, 1 }, 514 { P_GPLL5_AUX, 3 }, 515 { P_GPLL6, 2 }, 516 { P_BIMC, 4 }, 517 }; 518 519 static const struct clk_parent_data gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data[] = { 520 { .fw_name = "xo" }, 521 { .hw = &gpll0_vote.hw }, 522 { .hw = &gpll5_vote.hw }, 523 { .hw = &gpll6_vote.hw }, 524 { .hw = &bimc_pll_vote.hw }, 525 }; 526 527 static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = { 528 { P_XO, 0 }, 529 { P_GPLL0, 1 }, 530 { P_GPLL1, 2 }, 531 { P_SLEEP_CLK, 6 } 532 }; 533 534 static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep_parent_data[] = { 535 { .fw_name = "xo" }, 536 { .hw = &gpll0_vote.hw }, 537 { .hw = &gpll1_vote.hw }, 538 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 539 }; 540 541 static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = { 542 { P_XO, 0 }, 543 { P_GPLL1, 1 }, 544 { P_EXT_PRI_I2S, 2 }, 545 { P_EXT_MCLK, 3 }, 546 { P_SLEEP_CLK, 6 } 547 }; 548 549 static const struct clk_parent_data gcc_xo_gpll1_epi2s_emclk_sleep_parent_data[] = { 550 { .fw_name = "xo" }, 551 { .hw = &gpll0_vote.hw }, 552 { .fw_name = "ext_pri_i2s", .name = "ext_pri_i2s" }, 553 { .fw_name = "ext_mclk", .name = "ext_mclk" }, 554 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 555 }; 556 557 static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = { 558 { P_XO, 0 }, 559 { P_GPLL1, 1 }, 560 { P_EXT_SEC_I2S, 2 }, 561 { P_EXT_MCLK, 3 }, 562 { P_SLEEP_CLK, 6 } 563 }; 564 565 static const struct clk_parent_data gcc_xo_gpll1_esi2s_emclk_sleep_parent_data[] = { 566 { .fw_name = "xo" }, 567 { .hw = &gpll1_vote.hw }, 568 { .fw_name = "ext_sec_i2s", .name = "ext_sec_i2s" }, 569 { .fw_name = "ext_mclk", .name = "ext_mclk" }, 570 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 571 }; 572 573 static const struct parent_map gcc_xo_sleep_map[] = { 574 { P_XO, 0 }, 575 { P_SLEEP_CLK, 6 } 576 }; 577 578 static const struct clk_parent_data gcc_xo_sleep_parent_data[] = { 579 { .fw_name = "xo" }, 580 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 581 }; 582 583 static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = { 584 { P_XO, 0 }, 585 { P_GPLL1, 1 }, 586 { P_EXT_MCLK, 2 }, 587 { P_SLEEP_CLK, 6 } 588 }; 589 590 static const struct clk_parent_data gcc_xo_gpll1_emclk_sleep_parent_data[] = { 591 { .fw_name = "xo" }, 592 { .hw = &gpll1_vote.hw }, 593 { .fw_name = "ext_mclk", .name = "ext_mclk" }, 594 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 595 }; 596 597 static const struct clk_parent_data gcc_xo_gpll6_gpll0_parent_data[] = { 598 { .fw_name = "xo" }, 599 { .hw = &gpll6_vote.hw }, 600 { .hw = &gpll0_vote.hw }, 601 }; 602 603 static const struct clk_parent_data gcc_xo_gpll6_gpll0a_parent_data[] = { 604 { .fw_name = "xo" }, 605 { .hw = &gpll6_vote.hw }, 606 { .hw = &gpll0_vote.hw }, 607 }; 608 609 static struct clk_rcg2 pcnoc_bfdcd_clk_src = { 610 .cmd_rcgr = 0x27000, 611 .hid_width = 5, 612 .parent_map = gcc_xo_gpll0_map, 613 .clkr.hw.init = &(struct clk_init_data){ 614 .name = "pcnoc_bfdcd_clk_src", 615 .parent_data = gcc_xo_gpll0_parent_data, 616 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 617 .ops = &clk_rcg2_ops, 618 }, 619 }; 620 621 static struct clk_rcg2 system_noc_bfdcd_clk_src = { 622 .cmd_rcgr = 0x26004, 623 .hid_width = 5, 624 .parent_map = gcc_xo_gpll0_gpll6a_map, 625 .clkr.hw.init = &(struct clk_init_data){ 626 .name = "system_noc_bfdcd_clk_src", 627 .parent_data = gcc_xo_gpll0_gpll6a_parent_data, 628 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data), 629 .ops = &clk_rcg2_ops, 630 }, 631 }; 632 633 static struct clk_rcg2 bimc_ddr_clk_src = { 634 .cmd_rcgr = 0x32024, 635 .hid_width = 5, 636 .parent_map = gcc_xo_gpll0_bimc_map, 637 .clkr.hw.init = &(struct clk_init_data){ 638 .name = "bimc_ddr_clk_src", 639 .parent_data = gcc_xo_gpll0_bimc_parent_data, 640 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_parent_data), 641 .ops = &clk_rcg2_ops, 642 .flags = CLK_GET_RATE_NOCACHE, 643 }, 644 }; 645 646 static struct clk_rcg2 system_mm_noc_bfdcd_clk_src = { 647 .cmd_rcgr = 0x2600c, 648 .hid_width = 5, 649 .parent_map = gcc_xo_gpll0_gpll6a_map, 650 .clkr.hw.init = &(struct clk_init_data){ 651 .name = "system_mm_noc_bfdcd_clk_src", 652 .parent_data = gcc_xo_gpll0_gpll6a_parent_data, 653 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data), 654 .ops = &clk_rcg2_ops, 655 }, 656 }; 657 658 static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = { 659 F(40000000, P_GPLL0, 10, 1, 2), 660 F(80000000, P_GPLL0, 10, 0, 0), 661 { } 662 }; 663 664 static struct clk_rcg2 camss_ahb_clk_src = { 665 .cmd_rcgr = 0x5a000, 666 .mnd_width = 8, 667 .hid_width = 5, 668 .parent_map = gcc_xo_gpll0_map, 669 .freq_tbl = ftbl_gcc_camss_ahb_clk, 670 .clkr.hw.init = &(struct clk_init_data){ 671 .name = "camss_ahb_clk_src", 672 .parent_data = gcc_xo_gpll0_parent_data, 673 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 674 .ops = &clk_rcg2_ops, 675 }, 676 }; 677 678 static const struct freq_tbl ftbl_apss_ahb_clk[] = { 679 F(19200000, P_XO, 1, 0, 0), 680 F(50000000, P_GPLL0, 16, 0, 0), 681 F(100000000, P_GPLL0, 8, 0, 0), 682 F(133330000, P_GPLL0, 6, 0, 0), 683 { } 684 }; 685 686 static struct clk_rcg2 apss_ahb_clk_src = { 687 .cmd_rcgr = 0x46000, 688 .hid_width = 5, 689 .parent_map = gcc_xo_gpll0_map, 690 .freq_tbl = ftbl_apss_ahb_clk, 691 .clkr.hw.init = &(struct clk_init_data){ 692 .name = "apss_ahb_clk_src", 693 .parent_data = gcc_xo_gpll0_parent_data, 694 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 695 .ops = &clk_rcg2_ops, 696 }, 697 }; 698 699 static const struct freq_tbl ftbl_gcc_camss_csi0_1_clk[] = { 700 F(100000000, P_GPLL0, 8, 0, 0), 701 F(200000000, P_GPLL0, 4, 0, 0), 702 { } 703 }; 704 705 static struct clk_rcg2 csi0_clk_src = { 706 .cmd_rcgr = 0x4e020, 707 .hid_width = 5, 708 .parent_map = gcc_xo_gpll0_map, 709 .freq_tbl = ftbl_gcc_camss_csi0_1_clk, 710 .clkr.hw.init = &(struct clk_init_data){ 711 .name = "csi0_clk_src", 712 .parent_data = gcc_xo_gpll0_parent_data, 713 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 714 .ops = &clk_rcg2_ops, 715 }, 716 }; 717 718 static struct clk_rcg2 csi1_clk_src = { 719 .cmd_rcgr = 0x4f020, 720 .hid_width = 5, 721 .parent_map = gcc_xo_gpll0_map, 722 .freq_tbl = ftbl_gcc_camss_csi0_1_clk, 723 .clkr.hw.init = &(struct clk_init_data){ 724 .name = "csi1_clk_src", 725 .parent_data = gcc_xo_gpll0_parent_data, 726 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 727 .ops = &clk_rcg2_ops, 728 }, 729 }; 730 731 static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = { 732 F(19200000, P_XO, 1, 0, 0), 733 F(50000000, P_GPLL0, 16, 0, 0), 734 F(80000000, P_GPLL0, 10, 0, 0), 735 F(100000000, P_GPLL0, 8, 0, 0), 736 F(160000000, P_GPLL0, 5, 0, 0), 737 F(200000000, P_GPLL0, 4, 0, 0), 738 F(220000000, P_GPLL3, 5, 0, 0), 739 F(266670000, P_GPLL0, 3, 0, 0), 740 F(310000000, P_GPLL2_AUX, 3, 0, 0), 741 F(400000000, P_GPLL0, 2, 0, 0), 742 F(465000000, P_GPLL2_AUX, 2, 0, 0), 743 F(550000000, P_GPLL3, 2, 0, 0), 744 { } 745 }; 746 747 static struct clk_rcg2 gfx3d_clk_src = { 748 .cmd_rcgr = 0x59000, 749 .hid_width = 5, 750 .parent_map = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map, 751 .freq_tbl = ftbl_gcc_oxili_gfx3d_clk, 752 .clkr.hw.init = &(struct clk_init_data){ 753 .name = "gfx3d_clk_src", 754 .parent_data = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data, 755 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data), 756 .ops = &clk_rcg2_ops, 757 }, 758 }; 759 760 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = { 761 F(50000000, P_GPLL0, 16, 0, 0), 762 F(80000000, P_GPLL0, 10, 0, 0), 763 F(100000000, P_GPLL0, 8, 0, 0), 764 F(160000000, P_GPLL0, 5, 0, 0), 765 F(177780000, P_GPLL0, 4.5, 0, 0), 766 F(200000000, P_GPLL0, 4, 0, 0), 767 F(266670000, P_GPLL0, 3, 0, 0), 768 F(320000000, P_GPLL0, 2.5, 0, 0), 769 F(400000000, P_GPLL0, 2, 0, 0), 770 F(465000000, P_GPLL2, 2, 0, 0), 771 F(480000000, P_GPLL4, 2.5, 0, 0), 772 F(600000000, P_GPLL4, 2, 0, 0), 773 { } 774 }; 775 776 static struct clk_rcg2 vfe0_clk_src = { 777 .cmd_rcgr = 0x58000, 778 .hid_width = 5, 779 .parent_map = gcc_xo_gpll0_gpll2_gpll4_map, 780 .freq_tbl = ftbl_gcc_camss_vfe0_clk, 781 .clkr.hw.init = &(struct clk_init_data){ 782 .name = "vfe0_clk_src", 783 .parent_data = gcc_xo_gpll0_gpll2_gpll4_parent_data, 784 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4_parent_data), 785 .ops = &clk_rcg2_ops, 786 }, 787 }; 788 789 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = { 790 F(19200000, P_XO, 1, 0, 0), 791 F(50000000, P_GPLL0, 16, 0, 0), 792 { } 793 }; 794 795 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 796 .cmd_rcgr = 0x0200c, 797 .hid_width = 5, 798 .parent_map = gcc_xo_gpll0_map, 799 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk, 800 .clkr.hw.init = &(struct clk_init_data){ 801 .name = "blsp1_qup1_i2c_apps_clk_src", 802 .parent_data = gcc_xo_gpll0_parent_data, 803 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 804 .ops = &clk_rcg2_ops, 805 }, 806 }; 807 808 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = { 809 F(960000, P_XO, 10, 1, 2), 810 F(4800000, P_XO, 4, 0, 0), 811 F(9600000, P_XO, 2, 0, 0), 812 F(16000000, P_GPLL0, 10, 1, 5), 813 F(19200000, P_XO, 1, 0, 0), 814 F(25000000, P_GPLL0, 16, 1, 2), 815 F(50000000, P_GPLL0, 16, 0, 0), 816 { } 817 }; 818 819 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 820 .cmd_rcgr = 0x02024, 821 .mnd_width = 8, 822 .hid_width = 5, 823 .parent_map = gcc_xo_gpll0_map, 824 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk, 825 .clkr.hw.init = &(struct clk_init_data){ 826 .name = "blsp1_qup1_spi_apps_clk_src", 827 .parent_data = gcc_xo_gpll0_parent_data, 828 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 829 .ops = &clk_rcg2_ops, 830 }, 831 }; 832 833 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 834 .cmd_rcgr = 0x03000, 835 .hid_width = 5, 836 .parent_map = gcc_xo_gpll0_map, 837 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk, 838 .clkr.hw.init = &(struct clk_init_data){ 839 .name = "blsp1_qup2_i2c_apps_clk_src", 840 .parent_data = gcc_xo_gpll0_parent_data, 841 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 842 .ops = &clk_rcg2_ops, 843 }, 844 }; 845 846 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 847 .cmd_rcgr = 0x03014, 848 .mnd_width = 8, 849 .hid_width = 5, 850 .parent_map = gcc_xo_gpll0_map, 851 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk, 852 .clkr.hw.init = &(struct clk_init_data){ 853 .name = "blsp1_qup2_spi_apps_clk_src", 854 .parent_data = gcc_xo_gpll0_parent_data, 855 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 856 .ops = &clk_rcg2_ops, 857 }, 858 }; 859 860 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 861 .cmd_rcgr = 0x04000, 862 .hid_width = 5, 863 .parent_map = gcc_xo_gpll0_map, 864 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk, 865 .clkr.hw.init = &(struct clk_init_data){ 866 .name = "blsp1_qup3_i2c_apps_clk_src", 867 .parent_data = gcc_xo_gpll0_parent_data, 868 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 869 .ops = &clk_rcg2_ops, 870 }, 871 }; 872 873 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 874 .cmd_rcgr = 0x04024, 875 .mnd_width = 8, 876 .hid_width = 5, 877 .parent_map = gcc_xo_gpll0_map, 878 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk, 879 .clkr.hw.init = &(struct clk_init_data){ 880 .name = "blsp1_qup3_spi_apps_clk_src", 881 .parent_data = gcc_xo_gpll0_parent_data, 882 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 883 .ops = &clk_rcg2_ops, 884 }, 885 }; 886 887 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 888 .cmd_rcgr = 0x05000, 889 .hid_width = 5, 890 .parent_map = gcc_xo_gpll0_map, 891 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk, 892 .clkr.hw.init = &(struct clk_init_data){ 893 .name = "blsp1_qup4_i2c_apps_clk_src", 894 .parent_data = gcc_xo_gpll0_parent_data, 895 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 896 .ops = &clk_rcg2_ops, 897 }, 898 }; 899 900 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 901 .cmd_rcgr = 0x05024, 902 .mnd_width = 8, 903 .hid_width = 5, 904 .parent_map = gcc_xo_gpll0_map, 905 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk, 906 .clkr.hw.init = &(struct clk_init_data){ 907 .name = "blsp1_qup4_spi_apps_clk_src", 908 .parent_data = gcc_xo_gpll0_parent_data, 909 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 910 .ops = &clk_rcg2_ops, 911 }, 912 }; 913 914 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 915 .cmd_rcgr = 0x06000, 916 .hid_width = 5, 917 .parent_map = gcc_xo_gpll0_map, 918 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk, 919 .clkr.hw.init = &(struct clk_init_data){ 920 .name = "blsp1_qup5_i2c_apps_clk_src", 921 .parent_data = gcc_xo_gpll0_parent_data, 922 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 923 .ops = &clk_rcg2_ops, 924 }, 925 }; 926 927 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 928 .cmd_rcgr = 0x06024, 929 .mnd_width = 8, 930 .hid_width = 5, 931 .parent_map = gcc_xo_gpll0_map, 932 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk, 933 .clkr.hw.init = &(struct clk_init_data){ 934 .name = "blsp1_qup5_spi_apps_clk_src", 935 .parent_data = gcc_xo_gpll0_parent_data, 936 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 937 .ops = &clk_rcg2_ops, 938 }, 939 }; 940 941 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 942 .cmd_rcgr = 0x07000, 943 .hid_width = 5, 944 .parent_map = gcc_xo_gpll0_map, 945 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk, 946 .clkr.hw.init = &(struct clk_init_data){ 947 .name = "blsp1_qup6_i2c_apps_clk_src", 948 .parent_data = gcc_xo_gpll0_parent_data, 949 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 950 .ops = &clk_rcg2_ops, 951 }, 952 }; 953 954 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 955 .cmd_rcgr = 0x07024, 956 .mnd_width = 8, 957 .hid_width = 5, 958 .parent_map = gcc_xo_gpll0_map, 959 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk, 960 .clkr.hw.init = &(struct clk_init_data){ 961 .name = "blsp1_qup6_spi_apps_clk_src", 962 .parent_data = gcc_xo_gpll0_parent_data, 963 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 964 .ops = &clk_rcg2_ops, 965 }, 966 }; 967 968 static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = { 969 F(3686400, P_GPLL0, 1, 72, 15625), 970 F(7372800, P_GPLL0, 1, 144, 15625), 971 F(14745600, P_GPLL0, 1, 288, 15625), 972 F(16000000, P_GPLL0, 10, 1, 5), 973 F(19200000, P_XO, 1, 0, 0), 974 F(24000000, P_GPLL0, 1, 3, 100), 975 F(25000000, P_GPLL0, 16, 1, 2), 976 F(32000000, P_GPLL0, 1, 1, 25), 977 F(40000000, P_GPLL0, 1, 1, 20), 978 F(46400000, P_GPLL0, 1, 29, 500), 979 F(48000000, P_GPLL0, 1, 3, 50), 980 F(51200000, P_GPLL0, 1, 8, 125), 981 F(56000000, P_GPLL0, 1, 7, 100), 982 F(58982400, P_GPLL0, 1, 1152, 15625), 983 F(60000000, P_GPLL0, 1, 3, 40), 984 { } 985 }; 986 987 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 988 .cmd_rcgr = 0x02044, 989 .mnd_width = 16, 990 .hid_width = 5, 991 .parent_map = gcc_xo_gpll0_map, 992 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk, 993 .clkr.hw.init = &(struct clk_init_data){ 994 .name = "blsp1_uart1_apps_clk_src", 995 .parent_data = gcc_xo_gpll0_parent_data, 996 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 997 .ops = &clk_rcg2_ops, 998 }, 999 }; 1000 1001 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 1002 .cmd_rcgr = 0x03034, 1003 .mnd_width = 16, 1004 .hid_width = 5, 1005 .parent_map = gcc_xo_gpll0_map, 1006 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk, 1007 .clkr.hw.init = &(struct clk_init_data){ 1008 .name = "blsp1_uart2_apps_clk_src", 1009 .parent_data = gcc_xo_gpll0_parent_data, 1010 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1011 .ops = &clk_rcg2_ops, 1012 }, 1013 }; 1014 1015 static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = { 1016 F(19200000, P_XO, 1, 0, 0), 1017 F(37500000, P_GPLL0, 1, 3, 64), 1018 { } 1019 }; 1020 1021 static struct clk_rcg2 cci_clk_src = { 1022 .cmd_rcgr = 0x51000, 1023 .mnd_width = 8, 1024 .hid_width = 5, 1025 .parent_map = gcc_xo_gpll0a_map, 1026 .freq_tbl = ftbl_gcc_camss_cci_clk, 1027 .clkr.hw.init = &(struct clk_init_data){ 1028 .name = "cci_clk_src", 1029 .parent_data = gcc_xo_gpll0a_parent_data, 1030 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data), 1031 .ops = &clk_rcg2_ops, 1032 }, 1033 }; 1034 1035 /* 1036 * This is a frequency table for "General Purpose" clocks. 1037 * These clocks can be muxed to the SoC pins and may be used by 1038 * external devices. They're often used as PWM source. 1039 * 1040 * See comment at ftbl_gcc_gp1_3_clk. 1041 */ 1042 static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = { 1043 F(10000, P_XO, 16, 1, 120), 1044 F(100000, P_XO, 16, 1, 12), 1045 F(500000, P_GPLL0, 16, 1, 100), 1046 F(1000000, P_GPLL0, 16, 1, 50), 1047 F(2500000, P_GPLL0, 16, 1, 20), 1048 F(5000000, P_GPLL0, 16, 1, 10), 1049 F(100000000, P_GPLL0, 8, 0, 0), 1050 F(200000000, P_GPLL0, 4, 0, 0), 1051 { } 1052 }; 1053 1054 static struct clk_rcg2 camss_gp0_clk_src = { 1055 .cmd_rcgr = 0x54000, 1056 .mnd_width = 8, 1057 .hid_width = 5, 1058 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1059 .freq_tbl = ftbl_gcc_camss_gp0_1_clk, 1060 .clkr.hw.init = &(struct clk_init_data){ 1061 .name = "camss_gp0_clk_src", 1062 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1063 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1064 .ops = &clk_rcg2_ops, 1065 }, 1066 }; 1067 1068 static struct clk_rcg2 camss_gp1_clk_src = { 1069 .cmd_rcgr = 0x55000, 1070 .mnd_width = 8, 1071 .hid_width = 5, 1072 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1073 .freq_tbl = ftbl_gcc_camss_gp0_1_clk, 1074 .clkr.hw.init = &(struct clk_init_data){ 1075 .name = "camss_gp1_clk_src", 1076 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1077 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1078 .ops = &clk_rcg2_ops, 1079 }, 1080 }; 1081 1082 static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = { 1083 F(133330000, P_GPLL0, 6, 0, 0), 1084 F(266670000, P_GPLL0, 3, 0, 0), 1085 F(320000000, P_GPLL0, 2.5, 0, 0), 1086 { } 1087 }; 1088 1089 static struct clk_rcg2 jpeg0_clk_src = { 1090 .cmd_rcgr = 0x57000, 1091 .hid_width = 5, 1092 .parent_map = gcc_xo_gpll0_map, 1093 .freq_tbl = ftbl_gcc_camss_jpeg0_clk, 1094 .clkr.hw.init = &(struct clk_init_data){ 1095 .name = "jpeg0_clk_src", 1096 .parent_data = gcc_xo_gpll0_parent_data, 1097 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1098 .ops = &clk_rcg2_ops, 1099 }, 1100 }; 1101 1102 static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = { 1103 F(24000000, P_GPLL0, 1, 1, 45), 1104 F(66670000, P_GPLL0, 12, 0, 0), 1105 { } 1106 }; 1107 1108 static struct clk_rcg2 mclk0_clk_src = { 1109 .cmd_rcgr = 0x52000, 1110 .mnd_width = 8, 1111 .hid_width = 5, 1112 .parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map, 1113 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk, 1114 .clkr.hw.init = &(struct clk_init_data){ 1115 .name = "mclk0_clk_src", 1116 .parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data, 1117 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data), 1118 .ops = &clk_rcg2_ops, 1119 }, 1120 }; 1121 1122 static struct clk_rcg2 mclk1_clk_src = { 1123 .cmd_rcgr = 0x53000, 1124 .mnd_width = 8, 1125 .hid_width = 5, 1126 .parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map, 1127 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk, 1128 .clkr.hw.init = &(struct clk_init_data){ 1129 .name = "mclk1_clk_src", 1130 .parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data, 1131 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data), 1132 .ops = &clk_rcg2_ops, 1133 }, 1134 }; 1135 1136 static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = { 1137 F(100000000, P_GPLL0, 8, 0, 0), 1138 F(200000000, P_GPLL0, 4, 0, 0), 1139 { } 1140 }; 1141 1142 static struct clk_rcg2 csi0phytimer_clk_src = { 1143 .cmd_rcgr = 0x4e000, 1144 .hid_width = 5, 1145 .parent_map = gcc_xo_gpll0_gpll1a_map, 1146 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk, 1147 .clkr.hw.init = &(struct clk_init_data){ 1148 .name = "csi0phytimer_clk_src", 1149 .parent_data = gcc_xo_gpll0_gpll1a_parent_data, 1150 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data), 1151 .ops = &clk_rcg2_ops, 1152 }, 1153 }; 1154 1155 static struct clk_rcg2 csi1phytimer_clk_src = { 1156 .cmd_rcgr = 0x4f000, 1157 .hid_width = 5, 1158 .parent_map = gcc_xo_gpll0_gpll1a_map, 1159 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk, 1160 .clkr.hw.init = &(struct clk_init_data){ 1161 .name = "csi1phytimer_clk_src", 1162 .parent_data = gcc_xo_gpll0_gpll1a_parent_data, 1163 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data), 1164 .ops = &clk_rcg2_ops, 1165 }, 1166 }; 1167 1168 static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = { 1169 F(160000000, P_GPLL0, 5, 0, 0), 1170 F(200000000, P_GPLL0, 4, 0, 0), 1171 F(228570000, P_GPLL0, 3.5, 0, 0), 1172 F(266670000, P_GPLL0, 3, 0, 0), 1173 F(320000000, P_GPLL0, 2.5, 0, 0), 1174 F(465000000, P_GPLL2, 2, 0, 0), 1175 { } 1176 }; 1177 1178 static struct clk_rcg2 cpp_clk_src = { 1179 .cmd_rcgr = 0x58018, 1180 .hid_width = 5, 1181 .parent_map = gcc_xo_gpll0_gpll2_map, 1182 .freq_tbl = ftbl_gcc_camss_cpp_clk, 1183 .clkr.hw.init = &(struct clk_init_data){ 1184 .name = "cpp_clk_src", 1185 .parent_data = gcc_xo_gpll0_gpll2_parent_data, 1186 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_parent_data), 1187 .ops = &clk_rcg2_ops, 1188 }, 1189 }; 1190 1191 static const struct freq_tbl ftbl_gcc_crypto_clk[] = { 1192 F(50000000, P_GPLL0, 16, 0, 0), 1193 F(80000000, P_GPLL0, 10, 0, 0), 1194 F(100000000, P_GPLL0, 8, 0, 0), 1195 F(160000000, P_GPLL0, 5, 0, 0), 1196 { } 1197 }; 1198 1199 /* This is not in the documentation but is in the downstream driver */ 1200 static struct clk_rcg2 crypto_clk_src = { 1201 .cmd_rcgr = 0x16004, 1202 .hid_width = 5, 1203 .parent_map = gcc_xo_gpll0_map, 1204 .freq_tbl = ftbl_gcc_crypto_clk, 1205 .clkr.hw.init = &(struct clk_init_data){ 1206 .name = "crypto_clk_src", 1207 .parent_data = gcc_xo_gpll0_parent_data, 1208 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1209 .ops = &clk_rcg2_ops, 1210 }, 1211 }; 1212 1213 /* 1214 * This is a frequency table for "General Purpose" clocks. 1215 * These clocks can be muxed to the SoC pins and may be used by 1216 * external devices. They're often used as PWM source. 1217 * 1218 * Please note that MND divider must be enabled for duty-cycle 1219 * control to be possible. (M != N) Also since D register is configured 1220 * with a value multiplied by 2, and duty cycle is calculated as 1221 * (2 * D) % 2^W 1222 * DutyCycle = ---------------- 1223 * 2 * (N % 2^W) 1224 * (where W = .mnd_width) 1225 * N must be half or less than maximum value for the register. 1226 * Otherwise duty-cycle control would be limited. 1227 * (e.g. for 8-bit NMD N should be less than 128) 1228 */ 1229 static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = { 1230 F(10000, P_XO, 16, 1, 120), 1231 F(100000, P_XO, 16, 1, 12), 1232 F(500000, P_GPLL0, 16, 1, 100), 1233 F(1000000, P_GPLL0, 16, 1, 50), 1234 F(2500000, P_GPLL0, 16, 1, 20), 1235 F(5000000, P_GPLL0, 16, 1, 10), 1236 F(19200000, P_XO, 1, 0, 0), 1237 { } 1238 }; 1239 1240 static struct clk_rcg2 gp1_clk_src = { 1241 .cmd_rcgr = 0x08004, 1242 .mnd_width = 8, 1243 .hid_width = 5, 1244 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1245 .freq_tbl = ftbl_gcc_gp1_3_clk, 1246 .clkr.hw.init = &(struct clk_init_data){ 1247 .name = "gp1_clk_src", 1248 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1249 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1250 .ops = &clk_rcg2_ops, 1251 }, 1252 }; 1253 1254 static struct clk_rcg2 gp2_clk_src = { 1255 .cmd_rcgr = 0x09004, 1256 .mnd_width = 8, 1257 .hid_width = 5, 1258 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1259 .freq_tbl = ftbl_gcc_gp1_3_clk, 1260 .clkr.hw.init = &(struct clk_init_data){ 1261 .name = "gp2_clk_src", 1262 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1263 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1264 .ops = &clk_rcg2_ops, 1265 }, 1266 }; 1267 1268 static struct clk_rcg2 gp3_clk_src = { 1269 .cmd_rcgr = 0x0a004, 1270 .mnd_width = 8, 1271 .hid_width = 5, 1272 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1273 .freq_tbl = ftbl_gcc_gp1_3_clk, 1274 .clkr.hw.init = &(struct clk_init_data){ 1275 .name = "gp3_clk_src", 1276 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1277 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1278 .ops = &clk_rcg2_ops, 1279 }, 1280 }; 1281 1282 static struct clk_rcg2 byte0_clk_src = { 1283 .cmd_rcgr = 0x4d044, 1284 .hid_width = 5, 1285 .parent_map = gcc_xo_gpll0a_dsibyte_map, 1286 .clkr.hw.init = &(struct clk_init_data){ 1287 .name = "byte0_clk_src", 1288 .parent_data = gcc_xo_gpll0a_dsibyte_parent_data, 1289 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data), 1290 .ops = &clk_byte2_ops, 1291 .flags = CLK_SET_RATE_PARENT, 1292 }, 1293 }; 1294 1295 static struct clk_rcg2 byte1_clk_src = { 1296 .cmd_rcgr = 0x4d0b0, 1297 .hid_width = 5, 1298 .parent_map = gcc_xo_gpll0a_dsibyte_map, 1299 .clkr.hw.init = &(struct clk_init_data){ 1300 .name = "byte1_clk_src", 1301 .parent_data = gcc_xo_gpll0a_dsibyte_parent_data, 1302 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data), 1303 .ops = &clk_byte2_ops, 1304 .flags = CLK_SET_RATE_PARENT, 1305 }, 1306 }; 1307 1308 static const struct freq_tbl ftbl_gcc_mdss_esc_clk[] = { 1309 F(19200000, P_XO, 1, 0, 0), 1310 { } 1311 }; 1312 1313 static struct clk_rcg2 esc0_clk_src = { 1314 .cmd_rcgr = 0x4d060, 1315 .hid_width = 5, 1316 .parent_map = gcc_xo_dsibyte_map, 1317 .freq_tbl = ftbl_gcc_mdss_esc_clk, 1318 .clkr.hw.init = &(struct clk_init_data){ 1319 .name = "esc0_clk_src", 1320 .parent_data = gcc_xo_dsibyte_parent_data, 1321 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data), 1322 .ops = &clk_rcg2_ops, 1323 }, 1324 }; 1325 1326 static struct clk_rcg2 esc1_clk_src = { 1327 .cmd_rcgr = 0x4d0a8, 1328 .hid_width = 5, 1329 .parent_map = gcc_xo_dsibyte_map, 1330 .freq_tbl = ftbl_gcc_mdss_esc_clk, 1331 .clkr.hw.init = &(struct clk_init_data){ 1332 .name = "esc1_clk_src", 1333 .parent_data = gcc_xo_dsibyte_parent_data, 1334 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data), 1335 .ops = &clk_rcg2_ops, 1336 }, 1337 }; 1338 1339 static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = { 1340 F(50000000, P_GPLL0_AUX, 16, 0, 0), 1341 F(80000000, P_GPLL0_AUX, 10, 0, 0), 1342 F(100000000, P_GPLL0_AUX, 8, 0, 0), 1343 F(145500000, P_GPLL0_AUX, 5.5, 0, 0), 1344 F(153600000, P_GPLL0, 4, 0, 0), 1345 F(160000000, P_GPLL0_AUX, 5, 0, 0), 1346 F(177780000, P_GPLL0_AUX, 4.5, 0, 0), 1347 F(200000000, P_GPLL0_AUX, 4, 0, 0), 1348 F(266670000, P_GPLL0_AUX, 3, 0, 0), 1349 F(307200000, P_GPLL1, 2, 0, 0), 1350 F(366670000, P_GPLL3_AUX, 3, 0, 0), 1351 { } 1352 }; 1353 1354 static struct clk_rcg2 mdp_clk_src = { 1355 .cmd_rcgr = 0x4d014, 1356 .hid_width = 5, 1357 .parent_map = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map, 1358 .freq_tbl = ftbl_gcc_mdss_mdp_clk, 1359 .clkr.hw.init = &(struct clk_init_data){ 1360 .name = "mdp_clk_src", 1361 .parent_data = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data, 1362 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data), 1363 .ops = &clk_rcg2_ops, 1364 }, 1365 }; 1366 1367 static struct clk_rcg2 pclk0_clk_src = { 1368 .cmd_rcgr = 0x4d000, 1369 .mnd_width = 8, 1370 .hid_width = 5, 1371 .parent_map = gcc_xo_gpll0a_dsiphy_map, 1372 .clkr.hw.init = &(struct clk_init_data){ 1373 .name = "pclk0_clk_src", 1374 .parent_data = gcc_xo_gpll0a_dsiphy_parent_data, 1375 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data), 1376 .ops = &clk_pixel_ops, 1377 .flags = CLK_SET_RATE_PARENT, 1378 }, 1379 }; 1380 1381 static struct clk_rcg2 pclk1_clk_src = { 1382 .cmd_rcgr = 0x4d0b8, 1383 .mnd_width = 8, 1384 .hid_width = 5, 1385 .parent_map = gcc_xo_gpll0a_dsiphy_map, 1386 .clkr.hw.init = &(struct clk_init_data){ 1387 .name = "pclk1_clk_src", 1388 .parent_data = gcc_xo_gpll0a_dsiphy_parent_data, 1389 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data), 1390 .ops = &clk_pixel_ops, 1391 .flags = CLK_SET_RATE_PARENT, 1392 }, 1393 }; 1394 1395 static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = { 1396 F(19200000, P_XO, 1, 0, 0), 1397 { } 1398 }; 1399 1400 static struct clk_rcg2 vsync_clk_src = { 1401 .cmd_rcgr = 0x4d02c, 1402 .hid_width = 5, 1403 .parent_map = gcc_xo_gpll0a_map, 1404 .freq_tbl = ftbl_gcc_mdss_vsync_clk, 1405 .clkr.hw.init = &(struct clk_init_data){ 1406 .name = "vsync_clk_src", 1407 .parent_data = gcc_xo_gpll0a_parent_data, 1408 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data), 1409 .ops = &clk_rcg2_ops, 1410 }, 1411 }; 1412 1413 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = { 1414 F(64000000, P_GPLL0, 12.5, 0, 0), 1415 { } 1416 }; 1417 1418 /* This is not in the documentation but is in the downstream driver */ 1419 static struct clk_rcg2 pdm2_clk_src = { 1420 .cmd_rcgr = 0x44010, 1421 .hid_width = 5, 1422 .parent_map = gcc_xo_gpll0_map, 1423 .freq_tbl = ftbl_gcc_pdm2_clk, 1424 .clkr.hw.init = &(struct clk_init_data){ 1425 .name = "pdm2_clk_src", 1426 .parent_data = gcc_xo_gpll0_parent_data, 1427 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1428 .ops = &clk_rcg2_ops, 1429 }, 1430 }; 1431 1432 static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = { 1433 F(144000, P_XO, 16, 3, 25), 1434 F(400000, P_XO, 12, 1, 4), 1435 F(20000000, P_GPLL0, 10, 1, 4), 1436 F(25000000, P_GPLL0, 16, 1, 2), 1437 F(50000000, P_GPLL0, 16, 0, 0), 1438 F(100000000, P_GPLL0, 8, 0, 0), 1439 F(177770000, P_GPLL0, 4.5, 0, 0), 1440 F(200000000, P_GPLL0, 4, 0, 0), 1441 { } 1442 }; 1443 1444 static struct clk_rcg2 sdcc1_apps_clk_src = { 1445 .cmd_rcgr = 0x42004, 1446 .mnd_width = 8, 1447 .hid_width = 5, 1448 .parent_map = gcc_xo_gpll0_map, 1449 .freq_tbl = ftbl_gcc_sdcc_apps_clk, 1450 .clkr.hw.init = &(struct clk_init_data){ 1451 .name = "sdcc1_apps_clk_src", 1452 .parent_data = gcc_xo_gpll0_parent_data, 1453 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1454 .ops = &clk_rcg2_floor_ops, 1455 }, 1456 }; 1457 1458 static struct clk_rcg2 sdcc2_apps_clk_src = { 1459 .cmd_rcgr = 0x43004, 1460 .mnd_width = 8, 1461 .hid_width = 5, 1462 .parent_map = gcc_xo_gpll0_map, 1463 .freq_tbl = ftbl_gcc_sdcc_apps_clk, 1464 .clkr.hw.init = &(struct clk_init_data){ 1465 .name = "sdcc2_apps_clk_src", 1466 .parent_data = gcc_xo_gpll0_parent_data, 1467 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1468 .ops = &clk_rcg2_floor_ops, 1469 }, 1470 }; 1471 1472 static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = { 1473 F(154285000, P_GPLL6, 7, 0, 0), 1474 F(320000000, P_GPLL0, 2.5, 0, 0), 1475 F(400000000, P_GPLL0, 2, 0, 0), 1476 { } 1477 }; 1478 1479 static struct clk_rcg2 apss_tcu_clk_src = { 1480 .cmd_rcgr = 0x1207c, 1481 .hid_width = 5, 1482 .parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map, 1483 .freq_tbl = ftbl_gcc_apss_tcu_clk, 1484 .clkr.hw.init = &(struct clk_init_data){ 1485 .name = "apss_tcu_clk_src", 1486 .parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data, 1487 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data), 1488 .ops = &clk_rcg2_ops, 1489 }, 1490 }; 1491 1492 static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = { 1493 F(19200000, P_XO, 1, 0, 0), 1494 F(100000000, P_GPLL0, 8, 0, 0), 1495 F(200000000, P_GPLL0, 4, 0, 0), 1496 F(266500000, P_BIMC, 4, 0, 0), 1497 F(400000000, P_GPLL0, 2, 0, 0), 1498 F(533000000, P_BIMC, 2, 0, 0), 1499 { } 1500 }; 1501 1502 static struct clk_rcg2 bimc_gpu_clk_src = { 1503 .cmd_rcgr = 0x31028, 1504 .hid_width = 5, 1505 .parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map, 1506 .freq_tbl = ftbl_gcc_bimc_gpu_clk, 1507 .clkr.hw.init = &(struct clk_init_data){ 1508 .name = "bimc_gpu_clk_src", 1509 .parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data, 1510 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data), 1511 .flags = CLK_GET_RATE_NOCACHE, 1512 .ops = &clk_rcg2_ops, 1513 }, 1514 }; 1515 1516 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = { 1517 F(57140000, P_GPLL0, 14, 0, 0), 1518 F(80000000, P_GPLL0, 10, 0, 0), 1519 F(100000000, P_GPLL0, 8, 0, 0), 1520 { } 1521 }; 1522 1523 static struct clk_rcg2 usb_hs_system_clk_src = { 1524 .cmd_rcgr = 0x41010, 1525 .hid_width = 5, 1526 .parent_map = gcc_xo_gpll0_map, 1527 .freq_tbl = ftbl_gcc_usb_hs_system_clk, 1528 .clkr.hw.init = &(struct clk_init_data){ 1529 .name = "usb_hs_system_clk_src", 1530 .parent_data = gcc_xo_gpll0_parent_data, 1531 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1532 .ops = &clk_rcg2_ops, 1533 }, 1534 }; 1535 1536 static const struct freq_tbl ftbl_gcc_usb_fs_system_clk[] = { 1537 F(64000000, P_GPLL0, 12.5, 0, 0), 1538 { } 1539 }; 1540 1541 static struct clk_rcg2 usb_fs_system_clk_src = { 1542 .cmd_rcgr = 0x3f010, 1543 .hid_width = 5, 1544 .parent_map = gcc_xo_gpll0_map, 1545 .freq_tbl = ftbl_gcc_usb_fs_system_clk, 1546 .clkr.hw.init = &(struct clk_init_data){ 1547 .name = "usb_fs_system_clk_src", 1548 .parent_data = gcc_xo_gpll6_gpll0_parent_data, 1549 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_parent_data), 1550 .ops = &clk_rcg2_ops, 1551 }, 1552 }; 1553 1554 static const struct freq_tbl ftbl_gcc_usb_fs_ic_clk[] = { 1555 F(60000000, P_GPLL6, 1, 1, 18), 1556 { } 1557 }; 1558 1559 static struct clk_rcg2 usb_fs_ic_clk_src = { 1560 .cmd_rcgr = 0x3f034, 1561 .hid_width = 5, 1562 .parent_map = gcc_xo_gpll0_map, 1563 .freq_tbl = ftbl_gcc_usb_fs_ic_clk, 1564 .clkr.hw.init = &(struct clk_init_data){ 1565 .name = "usb_fs_ic_clk_src", 1566 .parent_data = gcc_xo_gpll6_gpll0a_parent_data, 1567 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0a_parent_data), 1568 .ops = &clk_rcg2_ops, 1569 }, 1570 }; 1571 1572 static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = { 1573 F(3200000, P_XO, 6, 0, 0), 1574 F(6400000, P_XO, 3, 0, 0), 1575 F(9600000, P_XO, 2, 0, 0), 1576 F(19200000, P_XO, 1, 0, 0), 1577 F(40000000, P_GPLL0, 10, 1, 2), 1578 F(66670000, P_GPLL0, 12, 0, 0), 1579 F(80000000, P_GPLL0, 10, 0, 0), 1580 F(100000000, P_GPLL0, 8, 0, 0), 1581 { } 1582 }; 1583 1584 static struct clk_rcg2 ultaudio_ahbfabric_clk_src = { 1585 .cmd_rcgr = 0x1c010, 1586 .hid_width = 5, 1587 .mnd_width = 8, 1588 .parent_map = gcc_xo_gpll0_gpll1_sleep_map, 1589 .freq_tbl = ftbl_gcc_ultaudio_ahb_clk, 1590 .clkr.hw.init = &(struct clk_init_data){ 1591 .name = "ultaudio_ahbfabric_clk_src", 1592 .parent_data = gcc_xo_gpll0_gpll1_sleep_parent_data, 1593 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep_parent_data), 1594 .ops = &clk_rcg2_ops, 1595 }, 1596 }; 1597 1598 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = { 1599 .halt_reg = 0x1c028, 1600 .clkr = { 1601 .enable_reg = 0x1c028, 1602 .enable_mask = BIT(0), 1603 .hw.init = &(struct clk_init_data){ 1604 .name = "gcc_ultaudio_ahbfabric_ixfabric_clk", 1605 .parent_hws = (const struct clk_hw*[]){ 1606 &ultaudio_ahbfabric_clk_src.clkr.hw, 1607 }, 1608 .num_parents = 1, 1609 .flags = CLK_SET_RATE_PARENT, 1610 .ops = &clk_branch2_ops, 1611 }, 1612 }, 1613 }; 1614 1615 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = { 1616 .halt_reg = 0x1c024, 1617 .clkr = { 1618 .enable_reg = 0x1c024, 1619 .enable_mask = BIT(0), 1620 .hw.init = &(struct clk_init_data){ 1621 .name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk", 1622 .parent_hws = (const struct clk_hw*[]){ 1623 &ultaudio_ahbfabric_clk_src.clkr.hw, 1624 }, 1625 .num_parents = 1, 1626 .flags = CLK_SET_RATE_PARENT, 1627 .ops = &clk_branch2_ops, 1628 }, 1629 }, 1630 }; 1631 1632 static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = { 1633 F(128000, P_XO, 10, 1, 15), 1634 F(256000, P_XO, 5, 1, 15), 1635 F(384000, P_XO, 5, 1, 10), 1636 F(512000, P_XO, 5, 2, 15), 1637 F(576000, P_XO, 5, 3, 20), 1638 F(705600, P_GPLL1, 16, 1, 80), 1639 F(768000, P_XO, 5, 1, 5), 1640 F(800000, P_XO, 5, 5, 24), 1641 F(1024000, P_XO, 5, 4, 15), 1642 F(1152000, P_XO, 1, 3, 50), 1643 F(1411200, P_GPLL1, 16, 1, 40), 1644 F(1536000, P_XO, 1, 2, 25), 1645 F(1600000, P_XO, 12, 0, 0), 1646 F(1728000, P_XO, 5, 9, 20), 1647 F(2048000, P_XO, 5, 8, 15), 1648 F(2304000, P_XO, 5, 3, 5), 1649 F(2400000, P_XO, 8, 0, 0), 1650 F(2822400, P_GPLL1, 16, 1, 20), 1651 F(3072000, P_XO, 5, 4, 5), 1652 F(4096000, P_GPLL1, 9, 2, 49), 1653 F(4800000, P_XO, 4, 0, 0), 1654 F(5644800, P_GPLL1, 16, 1, 10), 1655 F(6144000, P_GPLL1, 7, 1, 21), 1656 F(8192000, P_GPLL1, 9, 4, 49), 1657 F(9600000, P_XO, 2, 0, 0), 1658 F(11289600, P_GPLL1, 16, 1, 5), 1659 F(12288000, P_GPLL1, 7, 2, 21), 1660 { } 1661 }; 1662 1663 static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = { 1664 .cmd_rcgr = 0x1c054, 1665 .hid_width = 5, 1666 .mnd_width = 8, 1667 .parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map, 1668 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk, 1669 .clkr.hw.init = &(struct clk_init_data){ 1670 .name = "ultaudio_lpaif_pri_i2s_clk_src", 1671 .parent_data = gcc_xo_gpll1_epi2s_emclk_sleep_parent_data, 1672 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_epi2s_emclk_sleep_parent_data), 1673 .ops = &clk_rcg2_ops, 1674 }, 1675 }; 1676 1677 static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = { 1678 .halt_reg = 0x1c068, 1679 .clkr = { 1680 .enable_reg = 0x1c068, 1681 .enable_mask = BIT(0), 1682 .hw.init = &(struct clk_init_data){ 1683 .name = "gcc_ultaudio_lpaif_pri_i2s_clk", 1684 .parent_hws = (const struct clk_hw*[]){ 1685 &ultaudio_lpaif_pri_i2s_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_rcg2 ultaudio_lpaif_sec_i2s_clk_src = { 1695 .cmd_rcgr = 0x1c06c, 1696 .hid_width = 5, 1697 .mnd_width = 8, 1698 .parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map, 1699 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk, 1700 .clkr.hw.init = &(struct clk_init_data){ 1701 .name = "ultaudio_lpaif_sec_i2s_clk_src", 1702 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data, 1703 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data), 1704 .ops = &clk_rcg2_ops, 1705 }, 1706 }; 1707 1708 static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = { 1709 .halt_reg = 0x1c080, 1710 .clkr = { 1711 .enable_reg = 0x1c080, 1712 .enable_mask = BIT(0), 1713 .hw.init = &(struct clk_init_data){ 1714 .name = "gcc_ultaudio_lpaif_sec_i2s_clk", 1715 .parent_hws = (const struct clk_hw*[]){ 1716 &ultaudio_lpaif_sec_i2s_clk_src.clkr.hw, 1717 }, 1718 .num_parents = 1, 1719 .flags = CLK_SET_RATE_PARENT, 1720 .ops = &clk_branch2_ops, 1721 }, 1722 }, 1723 }; 1724 1725 static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = { 1726 .cmd_rcgr = 0x1c084, 1727 .hid_width = 5, 1728 .mnd_width = 8, 1729 .parent_map = gcc_xo_gpll1_emclk_sleep_map, 1730 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk, 1731 .clkr.hw.init = &(struct clk_init_data){ 1732 .name = "ultaudio_lpaif_aux_i2s_clk_src", 1733 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data, 1734 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data), 1735 .ops = &clk_rcg2_ops, 1736 }, 1737 }; 1738 1739 static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = { 1740 .halt_reg = 0x1c098, 1741 .clkr = { 1742 .enable_reg = 0x1c098, 1743 .enable_mask = BIT(0), 1744 .hw.init = &(struct clk_init_data){ 1745 .name = "gcc_ultaudio_lpaif_aux_i2s_clk", 1746 .parent_hws = (const struct clk_hw*[]){ 1747 &ultaudio_lpaif_aux_i2s_clk_src.clkr.hw, 1748 }, 1749 .num_parents = 1, 1750 .flags = CLK_SET_RATE_PARENT, 1751 .ops = &clk_branch2_ops, 1752 }, 1753 }, 1754 }; 1755 1756 static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = { 1757 F(19200000, P_XO, 1, 0, 0), 1758 { } 1759 }; 1760 1761 static struct clk_rcg2 ultaudio_xo_clk_src = { 1762 .cmd_rcgr = 0x1c034, 1763 .hid_width = 5, 1764 .parent_map = gcc_xo_sleep_map, 1765 .freq_tbl = ftbl_gcc_ultaudio_xo_clk, 1766 .clkr.hw.init = &(struct clk_init_data){ 1767 .name = "ultaudio_xo_clk_src", 1768 .parent_data = gcc_xo_sleep_parent_data, 1769 .num_parents = ARRAY_SIZE(gcc_xo_sleep_parent_data), 1770 .ops = &clk_rcg2_ops, 1771 }, 1772 }; 1773 1774 static struct clk_branch gcc_ultaudio_avsync_xo_clk = { 1775 .halt_reg = 0x1c04c, 1776 .clkr = { 1777 .enable_reg = 0x1c04c, 1778 .enable_mask = BIT(0), 1779 .hw.init = &(struct clk_init_data){ 1780 .name = "gcc_ultaudio_avsync_xo_clk", 1781 .parent_hws = (const struct clk_hw*[]){ 1782 &ultaudio_xo_clk_src.clkr.hw, 1783 }, 1784 .num_parents = 1, 1785 .flags = CLK_SET_RATE_PARENT, 1786 .ops = &clk_branch2_ops, 1787 }, 1788 }, 1789 }; 1790 1791 static struct clk_branch gcc_ultaudio_stc_xo_clk = { 1792 .halt_reg = 0x1c050, 1793 .clkr = { 1794 .enable_reg = 0x1c050, 1795 .enable_mask = BIT(0), 1796 .hw.init = &(struct clk_init_data){ 1797 .name = "gcc_ultaudio_stc_xo_clk", 1798 .parent_hws = (const struct clk_hw*[]){ 1799 &ultaudio_xo_clk_src.clkr.hw, 1800 }, 1801 .num_parents = 1, 1802 .flags = CLK_SET_RATE_PARENT, 1803 .ops = &clk_branch2_ops, 1804 }, 1805 }, 1806 }; 1807 1808 static const struct freq_tbl ftbl_codec_clk[] = { 1809 F(9600000, P_XO, 2, 0, 0), 1810 F(12288000, P_XO, 1, 16, 25), 1811 F(19200000, P_XO, 1, 0, 0), 1812 F(11289600, P_EXT_MCLK, 1, 0, 0), 1813 { } 1814 }; 1815 1816 static struct clk_rcg2 codec_digcodec_clk_src = { 1817 .cmd_rcgr = 0x1c09c, 1818 .mnd_width = 8, 1819 .hid_width = 5, 1820 .parent_map = gcc_xo_gpll1_emclk_sleep_map, 1821 .freq_tbl = ftbl_codec_clk, 1822 .clkr.hw.init = &(struct clk_init_data){ 1823 .name = "codec_digcodec_clk_src", 1824 .parent_data = gcc_xo_gpll1_emclk_sleep_parent_data, 1825 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_emclk_sleep_parent_data), 1826 .ops = &clk_rcg2_ops, 1827 }, 1828 }; 1829 1830 static struct clk_branch gcc_codec_digcodec_clk = { 1831 .halt_reg = 0x1c0b0, 1832 .clkr = { 1833 .enable_reg = 0x1c0b0, 1834 .enable_mask = BIT(0), 1835 .hw.init = &(struct clk_init_data){ 1836 .name = "gcc_ultaudio_codec_digcodec_clk", 1837 .parent_hws = (const struct clk_hw*[]){ 1838 &codec_digcodec_clk_src.clkr.hw, 1839 }, 1840 .num_parents = 1, 1841 .flags = CLK_SET_RATE_PARENT, 1842 .ops = &clk_branch2_ops, 1843 }, 1844 }, 1845 }; 1846 1847 static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = { 1848 .halt_reg = 0x1c000, 1849 .clkr = { 1850 .enable_reg = 0x1c000, 1851 .enable_mask = BIT(0), 1852 .hw.init = &(struct clk_init_data){ 1853 .name = "gcc_ultaudio_pcnoc_mport_clk", 1854 .parent_hws = (const struct clk_hw*[]){ 1855 &pcnoc_bfdcd_clk_src.clkr.hw, 1856 }, 1857 .num_parents = 1, 1858 .ops = &clk_branch2_ops, 1859 }, 1860 }, 1861 }; 1862 1863 static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = { 1864 .halt_reg = 0x1c004, 1865 .clkr = { 1866 .enable_reg = 0x1c004, 1867 .enable_mask = BIT(0), 1868 .hw.init = &(struct clk_init_data){ 1869 .name = "gcc_ultaudio_pcnoc_sway_clk", 1870 .parent_hws = (const struct clk_hw*[]){ 1871 &pcnoc_bfdcd_clk_src.clkr.hw, 1872 }, 1873 .num_parents = 1, 1874 .ops = &clk_branch2_ops, 1875 }, 1876 }, 1877 }; 1878 1879 static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = { 1880 F(133330000, P_GPLL0, 6, 0, 0), 1881 F(200000000, P_GPLL0, 4, 0, 0), 1882 F(266670000, P_GPLL0, 3, 0, 0), 1883 { } 1884 }; 1885 1886 static struct clk_rcg2 vcodec0_clk_src = { 1887 .cmd_rcgr = 0x4C000, 1888 .mnd_width = 8, 1889 .hid_width = 5, 1890 .parent_map = gcc_xo_gpll0_map, 1891 .freq_tbl = ftbl_gcc_venus0_vcodec0_clk, 1892 .clkr.hw.init = &(struct clk_init_data){ 1893 .name = "vcodec0_clk_src", 1894 .parent_data = gcc_xo_gpll0_parent_data, 1895 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1896 .ops = &clk_rcg2_ops, 1897 }, 1898 }; 1899 1900 static struct clk_branch gcc_blsp1_ahb_clk = { 1901 .halt_reg = 0x01008, 1902 .halt_check = BRANCH_HALT_VOTED, 1903 .clkr = { 1904 .enable_reg = 0x45004, 1905 .enable_mask = BIT(10), 1906 .hw.init = &(struct clk_init_data){ 1907 .name = "gcc_blsp1_ahb_clk", 1908 .parent_hws = (const struct clk_hw*[]){ 1909 &pcnoc_bfdcd_clk_src.clkr.hw, 1910 }, 1911 .num_parents = 1, 1912 .ops = &clk_branch2_ops, 1913 }, 1914 }, 1915 }; 1916 1917 static struct clk_branch gcc_blsp1_sleep_clk = { 1918 .halt_reg = 0x01004, 1919 .clkr = { 1920 .enable_reg = 0x01004, 1921 .enable_mask = BIT(0), 1922 .hw.init = &(struct clk_init_data){ 1923 .name = "gcc_blsp1_sleep_clk", 1924 .ops = &clk_branch2_ops, 1925 }, 1926 }, 1927 }; 1928 1929 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1930 .halt_reg = 0x02008, 1931 .clkr = { 1932 .enable_reg = 0x02008, 1933 .enable_mask = BIT(0), 1934 .hw.init = &(struct clk_init_data){ 1935 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1936 .parent_hws = (const struct clk_hw*[]){ 1937 &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1938 }, 1939 .num_parents = 1, 1940 .flags = CLK_SET_RATE_PARENT, 1941 .ops = &clk_branch2_ops, 1942 }, 1943 }, 1944 }; 1945 1946 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1947 .halt_reg = 0x02004, 1948 .clkr = { 1949 .enable_reg = 0x02004, 1950 .enable_mask = BIT(0), 1951 .hw.init = &(struct clk_init_data){ 1952 .name = "gcc_blsp1_qup1_spi_apps_clk", 1953 .parent_hws = (const struct clk_hw*[]){ 1954 &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1955 }, 1956 .num_parents = 1, 1957 .flags = CLK_SET_RATE_PARENT, 1958 .ops = &clk_branch2_ops, 1959 }, 1960 }, 1961 }; 1962 1963 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1964 .halt_reg = 0x03010, 1965 .clkr = { 1966 .enable_reg = 0x03010, 1967 .enable_mask = BIT(0), 1968 .hw.init = &(struct clk_init_data){ 1969 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1970 .parent_hws = (const struct clk_hw*[]){ 1971 &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1972 }, 1973 .num_parents = 1, 1974 .flags = CLK_SET_RATE_PARENT, 1975 .ops = &clk_branch2_ops, 1976 }, 1977 }, 1978 }; 1979 1980 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1981 .halt_reg = 0x0300c, 1982 .clkr = { 1983 .enable_reg = 0x0300c, 1984 .enable_mask = BIT(0), 1985 .hw.init = &(struct clk_init_data){ 1986 .name = "gcc_blsp1_qup2_spi_apps_clk", 1987 .parent_hws = (const struct clk_hw*[]){ 1988 &blsp1_qup2_spi_apps_clk_src.clkr.hw, 1989 }, 1990 .num_parents = 1, 1991 .flags = CLK_SET_RATE_PARENT, 1992 .ops = &clk_branch2_ops, 1993 }, 1994 }, 1995 }; 1996 1997 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1998 .halt_reg = 0x04020, 1999 .clkr = { 2000 .enable_reg = 0x04020, 2001 .enable_mask = BIT(0), 2002 .hw.init = &(struct clk_init_data){ 2003 .name = "gcc_blsp1_qup3_i2c_apps_clk", 2004 .parent_hws = (const struct clk_hw*[]){ 2005 &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 2006 }, 2007 .num_parents = 1, 2008 .flags = CLK_SET_RATE_PARENT, 2009 .ops = &clk_branch2_ops, 2010 }, 2011 }, 2012 }; 2013 2014 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 2015 .halt_reg = 0x0401c, 2016 .clkr = { 2017 .enable_reg = 0x0401c, 2018 .enable_mask = BIT(0), 2019 .hw.init = &(struct clk_init_data){ 2020 .name = "gcc_blsp1_qup3_spi_apps_clk", 2021 .parent_hws = (const struct clk_hw*[]){ 2022 &blsp1_qup3_spi_apps_clk_src.clkr.hw, 2023 }, 2024 .num_parents = 1, 2025 .flags = CLK_SET_RATE_PARENT, 2026 .ops = &clk_branch2_ops, 2027 }, 2028 }, 2029 }; 2030 2031 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 2032 .halt_reg = 0x05020, 2033 .clkr = { 2034 .enable_reg = 0x05020, 2035 .enable_mask = BIT(0), 2036 .hw.init = &(struct clk_init_data){ 2037 .name = "gcc_blsp1_qup4_i2c_apps_clk", 2038 .parent_hws = (const struct clk_hw*[]){ 2039 &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 2040 }, 2041 .num_parents = 1, 2042 .flags = CLK_SET_RATE_PARENT, 2043 .ops = &clk_branch2_ops, 2044 }, 2045 }, 2046 }; 2047 2048 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 2049 .halt_reg = 0x0501c, 2050 .clkr = { 2051 .enable_reg = 0x0501c, 2052 .enable_mask = BIT(0), 2053 .hw.init = &(struct clk_init_data){ 2054 .name = "gcc_blsp1_qup4_spi_apps_clk", 2055 .parent_hws = (const struct clk_hw*[]){ 2056 &blsp1_qup4_spi_apps_clk_src.clkr.hw, 2057 }, 2058 .num_parents = 1, 2059 .flags = CLK_SET_RATE_PARENT, 2060 .ops = &clk_branch2_ops, 2061 }, 2062 }, 2063 }; 2064 2065 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 2066 .halt_reg = 0x06020, 2067 .clkr = { 2068 .enable_reg = 0x06020, 2069 .enable_mask = BIT(0), 2070 .hw.init = &(struct clk_init_data){ 2071 .name = "gcc_blsp1_qup5_i2c_apps_clk", 2072 .parent_hws = (const struct clk_hw*[]){ 2073 &blsp1_qup5_i2c_apps_clk_src.clkr.hw, 2074 }, 2075 .num_parents = 1, 2076 .flags = CLK_SET_RATE_PARENT, 2077 .ops = &clk_branch2_ops, 2078 }, 2079 }, 2080 }; 2081 2082 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 2083 .halt_reg = 0x0601c, 2084 .clkr = { 2085 .enable_reg = 0x0601c, 2086 .enable_mask = BIT(0), 2087 .hw.init = &(struct clk_init_data){ 2088 .name = "gcc_blsp1_qup5_spi_apps_clk", 2089 .parent_hws = (const struct clk_hw*[]){ 2090 &blsp1_qup5_spi_apps_clk_src.clkr.hw, 2091 }, 2092 .num_parents = 1, 2093 .flags = CLK_SET_RATE_PARENT, 2094 .ops = &clk_branch2_ops, 2095 }, 2096 }, 2097 }; 2098 2099 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { 2100 .halt_reg = 0x07020, 2101 .clkr = { 2102 .enable_reg = 0x07020, 2103 .enable_mask = BIT(0), 2104 .hw.init = &(struct clk_init_data){ 2105 .name = "gcc_blsp1_qup6_i2c_apps_clk", 2106 .parent_hws = (const struct clk_hw*[]){ 2107 &blsp1_qup6_i2c_apps_clk_src.clkr.hw, 2108 }, 2109 .num_parents = 1, 2110 .flags = CLK_SET_RATE_PARENT, 2111 .ops = &clk_branch2_ops, 2112 }, 2113 }, 2114 }; 2115 2116 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 2117 .halt_reg = 0x0701c, 2118 .clkr = { 2119 .enable_reg = 0x0701c, 2120 .enable_mask = BIT(0), 2121 .hw.init = &(struct clk_init_data){ 2122 .name = "gcc_blsp1_qup6_spi_apps_clk", 2123 .parent_hws = (const struct clk_hw*[]){ 2124 &blsp1_qup6_spi_apps_clk_src.clkr.hw, 2125 }, 2126 .num_parents = 1, 2127 .flags = CLK_SET_RATE_PARENT, 2128 .ops = &clk_branch2_ops, 2129 }, 2130 }, 2131 }; 2132 2133 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 2134 .halt_reg = 0x0203c, 2135 .clkr = { 2136 .enable_reg = 0x0203c, 2137 .enable_mask = BIT(0), 2138 .hw.init = &(struct clk_init_data){ 2139 .name = "gcc_blsp1_uart1_apps_clk", 2140 .parent_hws = (const struct clk_hw*[]){ 2141 &blsp1_uart1_apps_clk_src.clkr.hw, 2142 }, 2143 .num_parents = 1, 2144 .flags = CLK_SET_RATE_PARENT, 2145 .ops = &clk_branch2_ops, 2146 }, 2147 }, 2148 }; 2149 2150 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 2151 .halt_reg = 0x0302c, 2152 .clkr = { 2153 .enable_reg = 0x0302c, 2154 .enable_mask = BIT(0), 2155 .hw.init = &(struct clk_init_data){ 2156 .name = "gcc_blsp1_uart2_apps_clk", 2157 .parent_hws = (const struct clk_hw*[]){ 2158 &blsp1_uart2_apps_clk_src.clkr.hw, 2159 }, 2160 .num_parents = 1, 2161 .flags = CLK_SET_RATE_PARENT, 2162 .ops = &clk_branch2_ops, 2163 }, 2164 }, 2165 }; 2166 2167 static struct clk_branch gcc_boot_rom_ahb_clk = { 2168 .halt_reg = 0x1300c, 2169 .halt_check = BRANCH_HALT_VOTED, 2170 .clkr = { 2171 .enable_reg = 0x45004, 2172 .enable_mask = BIT(7), 2173 .hw.init = &(struct clk_init_data){ 2174 .name = "gcc_boot_rom_ahb_clk", 2175 .parent_hws = (const struct clk_hw*[]){ 2176 &pcnoc_bfdcd_clk_src.clkr.hw, 2177 }, 2178 .num_parents = 1, 2179 .ops = &clk_branch2_ops, 2180 }, 2181 }, 2182 }; 2183 2184 static struct clk_branch gcc_camss_cci_ahb_clk = { 2185 .halt_reg = 0x5101c, 2186 .clkr = { 2187 .enable_reg = 0x5101c, 2188 .enable_mask = BIT(0), 2189 .hw.init = &(struct clk_init_data){ 2190 .name = "gcc_camss_cci_ahb_clk", 2191 .parent_hws = (const struct clk_hw*[]){ 2192 &camss_ahb_clk_src.clkr.hw, 2193 }, 2194 .num_parents = 1, 2195 .flags = CLK_SET_RATE_PARENT, 2196 .ops = &clk_branch2_ops, 2197 }, 2198 }, 2199 }; 2200 2201 static struct clk_branch gcc_camss_cci_clk = { 2202 .halt_reg = 0x51018, 2203 .clkr = { 2204 .enable_reg = 0x51018, 2205 .enable_mask = BIT(0), 2206 .hw.init = &(struct clk_init_data){ 2207 .name = "gcc_camss_cci_clk", 2208 .parent_hws = (const struct clk_hw*[]){ 2209 &cci_clk_src.clkr.hw, 2210 }, 2211 .num_parents = 1, 2212 .flags = CLK_SET_RATE_PARENT, 2213 .ops = &clk_branch2_ops, 2214 }, 2215 }, 2216 }; 2217 2218 static struct clk_branch gcc_camss_csi0_ahb_clk = { 2219 .halt_reg = 0x4e040, 2220 .clkr = { 2221 .enable_reg = 0x4e040, 2222 .enable_mask = BIT(0), 2223 .hw.init = &(struct clk_init_data){ 2224 .name = "gcc_camss_csi0_ahb_clk", 2225 .parent_hws = (const struct clk_hw*[]){ 2226 &camss_ahb_clk_src.clkr.hw, 2227 }, 2228 .num_parents = 1, 2229 .flags = CLK_SET_RATE_PARENT, 2230 .ops = &clk_branch2_ops, 2231 }, 2232 }, 2233 }; 2234 2235 static struct clk_branch gcc_camss_csi0_clk = { 2236 .halt_reg = 0x4e03c, 2237 .clkr = { 2238 .enable_reg = 0x4e03c, 2239 .enable_mask = BIT(0), 2240 .hw.init = &(struct clk_init_data){ 2241 .name = "gcc_camss_csi0_clk", 2242 .parent_hws = (const struct clk_hw*[]){ 2243 &csi0_clk_src.clkr.hw, 2244 }, 2245 .num_parents = 1, 2246 .flags = CLK_SET_RATE_PARENT, 2247 .ops = &clk_branch2_ops, 2248 }, 2249 }, 2250 }; 2251 2252 static struct clk_branch gcc_camss_csi0phy_clk = { 2253 .halt_reg = 0x4e048, 2254 .clkr = { 2255 .enable_reg = 0x4e048, 2256 .enable_mask = BIT(0), 2257 .hw.init = &(struct clk_init_data){ 2258 .name = "gcc_camss_csi0phy_clk", 2259 .parent_hws = (const struct clk_hw*[]){ 2260 &csi0_clk_src.clkr.hw, 2261 }, 2262 .num_parents = 1, 2263 .flags = CLK_SET_RATE_PARENT, 2264 .ops = &clk_branch2_ops, 2265 }, 2266 }, 2267 }; 2268 2269 static struct clk_branch gcc_camss_csi0pix_clk = { 2270 .halt_reg = 0x4e058, 2271 .clkr = { 2272 .enable_reg = 0x4e058, 2273 .enable_mask = BIT(0), 2274 .hw.init = &(struct clk_init_data){ 2275 .name = "gcc_camss_csi0pix_clk", 2276 .parent_hws = (const struct clk_hw*[]){ 2277 &csi0_clk_src.clkr.hw, 2278 }, 2279 .num_parents = 1, 2280 .flags = CLK_SET_RATE_PARENT, 2281 .ops = &clk_branch2_ops, 2282 }, 2283 }, 2284 }; 2285 2286 static struct clk_branch gcc_camss_csi0rdi_clk = { 2287 .halt_reg = 0x4e050, 2288 .clkr = { 2289 .enable_reg = 0x4e050, 2290 .enable_mask = BIT(0), 2291 .hw.init = &(struct clk_init_data){ 2292 .name = "gcc_camss_csi0rdi_clk", 2293 .parent_hws = (const struct clk_hw*[]){ 2294 &csi0_clk_src.clkr.hw, 2295 }, 2296 .num_parents = 1, 2297 .flags = CLK_SET_RATE_PARENT, 2298 .ops = &clk_branch2_ops, 2299 }, 2300 }, 2301 }; 2302 2303 static struct clk_branch gcc_camss_csi1_ahb_clk = { 2304 .halt_reg = 0x4f040, 2305 .clkr = { 2306 .enable_reg = 0x4f040, 2307 .enable_mask = BIT(0), 2308 .hw.init = &(struct clk_init_data){ 2309 .name = "gcc_camss_csi1_ahb_clk", 2310 .parent_hws = (const struct clk_hw*[]){ 2311 &camss_ahb_clk_src.clkr.hw, 2312 }, 2313 .num_parents = 1, 2314 .flags = CLK_SET_RATE_PARENT, 2315 .ops = &clk_branch2_ops, 2316 }, 2317 }, 2318 }; 2319 2320 static struct clk_branch gcc_camss_csi1_clk = { 2321 .halt_reg = 0x4f03c, 2322 .clkr = { 2323 .enable_reg = 0x4f03c, 2324 .enable_mask = BIT(0), 2325 .hw.init = &(struct clk_init_data){ 2326 .name = "gcc_camss_csi1_clk", 2327 .parent_hws = (const struct clk_hw*[]){ 2328 &csi1_clk_src.clkr.hw, 2329 }, 2330 .num_parents = 1, 2331 .flags = CLK_SET_RATE_PARENT, 2332 .ops = &clk_branch2_ops, 2333 }, 2334 }, 2335 }; 2336 2337 static struct clk_branch gcc_camss_csi1phy_clk = { 2338 .halt_reg = 0x4f048, 2339 .clkr = { 2340 .enable_reg = 0x4f048, 2341 .enable_mask = BIT(0), 2342 .hw.init = &(struct clk_init_data){ 2343 .name = "gcc_camss_csi1phy_clk", 2344 .parent_hws = (const struct clk_hw*[]){ 2345 &csi1_clk_src.clkr.hw, 2346 }, 2347 .num_parents = 1, 2348 .flags = CLK_SET_RATE_PARENT, 2349 .ops = &clk_branch2_ops, 2350 }, 2351 }, 2352 }; 2353 2354 static struct clk_branch gcc_camss_csi1pix_clk = { 2355 .halt_reg = 0x4f058, 2356 .clkr = { 2357 .enable_reg = 0x4f058, 2358 .enable_mask = BIT(0), 2359 .hw.init = &(struct clk_init_data){ 2360 .name = "gcc_camss_csi1pix_clk", 2361 .parent_hws = (const struct clk_hw*[]){ 2362 &csi1_clk_src.clkr.hw, 2363 }, 2364 .num_parents = 1, 2365 .flags = CLK_SET_RATE_PARENT, 2366 .ops = &clk_branch2_ops, 2367 }, 2368 }, 2369 }; 2370 2371 static struct clk_branch gcc_camss_csi1rdi_clk = { 2372 .halt_reg = 0x4f050, 2373 .clkr = { 2374 .enable_reg = 0x4f050, 2375 .enable_mask = BIT(0), 2376 .hw.init = &(struct clk_init_data){ 2377 .name = "gcc_camss_csi1rdi_clk", 2378 .parent_hws = (const struct clk_hw*[]){ 2379 &csi1_clk_src.clkr.hw, 2380 }, 2381 .num_parents = 1, 2382 .flags = CLK_SET_RATE_PARENT, 2383 .ops = &clk_branch2_ops, 2384 }, 2385 }, 2386 }; 2387 2388 static struct clk_branch gcc_camss_csi_vfe0_clk = { 2389 .halt_reg = 0x58050, 2390 .clkr = { 2391 .enable_reg = 0x58050, 2392 .enable_mask = BIT(0), 2393 .hw.init = &(struct clk_init_data){ 2394 .name = "gcc_camss_csi_vfe0_clk", 2395 .parent_hws = (const struct clk_hw*[]){ 2396 &vfe0_clk_src.clkr.hw, 2397 }, 2398 .num_parents = 1, 2399 .flags = CLK_SET_RATE_PARENT, 2400 .ops = &clk_branch2_ops, 2401 }, 2402 }, 2403 }; 2404 2405 static struct clk_branch gcc_camss_gp0_clk = { 2406 .halt_reg = 0x54018, 2407 .clkr = { 2408 .enable_reg = 0x54018, 2409 .enable_mask = BIT(0), 2410 .hw.init = &(struct clk_init_data){ 2411 .name = "gcc_camss_gp0_clk", 2412 .parent_hws = (const struct clk_hw*[]){ 2413 &camss_gp0_clk_src.clkr.hw, 2414 }, 2415 .num_parents = 1, 2416 .flags = CLK_SET_RATE_PARENT, 2417 .ops = &clk_branch2_ops, 2418 }, 2419 }, 2420 }; 2421 2422 static struct clk_branch gcc_camss_gp1_clk = { 2423 .halt_reg = 0x55018, 2424 .clkr = { 2425 .enable_reg = 0x55018, 2426 .enable_mask = BIT(0), 2427 .hw.init = &(struct clk_init_data){ 2428 .name = "gcc_camss_gp1_clk", 2429 .parent_hws = (const struct clk_hw*[]){ 2430 &camss_gp1_clk_src.clkr.hw, 2431 }, 2432 .num_parents = 1, 2433 .flags = CLK_SET_RATE_PARENT, 2434 .ops = &clk_branch2_ops, 2435 }, 2436 }, 2437 }; 2438 2439 static struct clk_branch gcc_camss_ispif_ahb_clk = { 2440 .halt_reg = 0x50004, 2441 .clkr = { 2442 .enable_reg = 0x50004, 2443 .enable_mask = BIT(0), 2444 .hw.init = &(struct clk_init_data){ 2445 .name = "gcc_camss_ispif_ahb_clk", 2446 .parent_hws = (const struct clk_hw*[]){ 2447 &camss_ahb_clk_src.clkr.hw, 2448 }, 2449 .num_parents = 1, 2450 .flags = CLK_SET_RATE_PARENT, 2451 .ops = &clk_branch2_ops, 2452 }, 2453 }, 2454 }; 2455 2456 static struct clk_branch gcc_camss_jpeg0_clk = { 2457 .halt_reg = 0x57020, 2458 .clkr = { 2459 .enable_reg = 0x57020, 2460 .enable_mask = BIT(0), 2461 .hw.init = &(struct clk_init_data){ 2462 .name = "gcc_camss_jpeg0_clk", 2463 .parent_hws = (const struct clk_hw*[]){ 2464 &jpeg0_clk_src.clkr.hw, 2465 }, 2466 .num_parents = 1, 2467 .flags = CLK_SET_RATE_PARENT, 2468 .ops = &clk_branch2_ops, 2469 }, 2470 }, 2471 }; 2472 2473 static struct clk_branch gcc_camss_jpeg_ahb_clk = { 2474 .halt_reg = 0x57024, 2475 .clkr = { 2476 .enable_reg = 0x57024, 2477 .enable_mask = BIT(0), 2478 .hw.init = &(struct clk_init_data){ 2479 .name = "gcc_camss_jpeg_ahb_clk", 2480 .parent_hws = (const struct clk_hw*[]){ 2481 &camss_ahb_clk_src.clkr.hw, 2482 }, 2483 .num_parents = 1, 2484 .flags = CLK_SET_RATE_PARENT, 2485 .ops = &clk_branch2_ops, 2486 }, 2487 }, 2488 }; 2489 2490 static struct clk_branch gcc_camss_jpeg_axi_clk = { 2491 .halt_reg = 0x57028, 2492 .clkr = { 2493 .enable_reg = 0x57028, 2494 .enable_mask = BIT(0), 2495 .hw.init = &(struct clk_init_data){ 2496 .name = "gcc_camss_jpeg_axi_clk", 2497 .parent_hws = (const struct clk_hw*[]){ 2498 &system_mm_noc_bfdcd_clk_src.clkr.hw, 2499 }, 2500 .num_parents = 1, 2501 .flags = CLK_SET_RATE_PARENT, 2502 .ops = &clk_branch2_ops, 2503 }, 2504 }, 2505 }; 2506 2507 static struct clk_branch gcc_camss_mclk0_clk = { 2508 .halt_reg = 0x52018, 2509 .clkr = { 2510 .enable_reg = 0x52018, 2511 .enable_mask = BIT(0), 2512 .hw.init = &(struct clk_init_data){ 2513 .name = "gcc_camss_mclk0_clk", 2514 .parent_hws = (const struct clk_hw*[]){ 2515 &mclk0_clk_src.clkr.hw, 2516 }, 2517 .num_parents = 1, 2518 .flags = CLK_SET_RATE_PARENT, 2519 .ops = &clk_branch2_ops, 2520 }, 2521 }, 2522 }; 2523 2524 static struct clk_branch gcc_camss_mclk1_clk = { 2525 .halt_reg = 0x53018, 2526 .clkr = { 2527 .enable_reg = 0x53018, 2528 .enable_mask = BIT(0), 2529 .hw.init = &(struct clk_init_data){ 2530 .name = "gcc_camss_mclk1_clk", 2531 .parent_hws = (const struct clk_hw*[]){ 2532 &mclk1_clk_src.clkr.hw, 2533 }, 2534 .num_parents = 1, 2535 .flags = CLK_SET_RATE_PARENT, 2536 .ops = &clk_branch2_ops, 2537 }, 2538 }, 2539 }; 2540 2541 static struct clk_branch gcc_camss_micro_ahb_clk = { 2542 .halt_reg = 0x5600c, 2543 .clkr = { 2544 .enable_reg = 0x5600c, 2545 .enable_mask = BIT(0), 2546 .hw.init = &(struct clk_init_data){ 2547 .name = "gcc_camss_micro_ahb_clk", 2548 .parent_hws = (const struct clk_hw*[]){ 2549 &camss_ahb_clk_src.clkr.hw, 2550 }, 2551 .num_parents = 1, 2552 .flags = CLK_SET_RATE_PARENT, 2553 .ops = &clk_branch2_ops, 2554 }, 2555 }, 2556 }; 2557 2558 static struct clk_branch gcc_camss_csi0phytimer_clk = { 2559 .halt_reg = 0x4e01c, 2560 .clkr = { 2561 .enable_reg = 0x4e01c, 2562 .enable_mask = BIT(0), 2563 .hw.init = &(struct clk_init_data){ 2564 .name = "gcc_camss_csi0phytimer_clk", 2565 .parent_hws = (const struct clk_hw*[]){ 2566 &csi0phytimer_clk_src.clkr.hw, 2567 }, 2568 .num_parents = 1, 2569 .flags = CLK_SET_RATE_PARENT, 2570 .ops = &clk_branch2_ops, 2571 }, 2572 }, 2573 }; 2574 2575 static struct clk_branch gcc_camss_csi1phytimer_clk = { 2576 .halt_reg = 0x4f01c, 2577 .clkr = { 2578 .enable_reg = 0x4f01c, 2579 .enable_mask = BIT(0), 2580 .hw.init = &(struct clk_init_data){ 2581 .name = "gcc_camss_csi1phytimer_clk", 2582 .parent_hws = (const struct clk_hw*[]){ 2583 &csi1phytimer_clk_src.clkr.hw, 2584 }, 2585 .num_parents = 1, 2586 .flags = CLK_SET_RATE_PARENT, 2587 .ops = &clk_branch2_ops, 2588 }, 2589 }, 2590 }; 2591 2592 static struct clk_branch gcc_camss_ahb_clk = { 2593 .halt_reg = 0x5a014, 2594 .clkr = { 2595 .enable_reg = 0x5a014, 2596 .enable_mask = BIT(0), 2597 .hw.init = &(struct clk_init_data){ 2598 .name = "gcc_camss_ahb_clk", 2599 .parent_hws = (const struct clk_hw*[]){ 2600 &camss_ahb_clk_src.clkr.hw, 2601 }, 2602 .num_parents = 1, 2603 .flags = CLK_SET_RATE_PARENT, 2604 .ops = &clk_branch2_ops, 2605 }, 2606 }, 2607 }; 2608 2609 static struct clk_branch gcc_camss_top_ahb_clk = { 2610 .halt_reg = 0x56004, 2611 .clkr = { 2612 .enable_reg = 0x56004, 2613 .enable_mask = BIT(0), 2614 .hw.init = &(struct clk_init_data){ 2615 .name = "gcc_camss_top_ahb_clk", 2616 .parent_hws = (const struct clk_hw*[]){ 2617 &pcnoc_bfdcd_clk_src.clkr.hw, 2618 }, 2619 .num_parents = 1, 2620 .flags = CLK_SET_RATE_PARENT, 2621 .ops = &clk_branch2_ops, 2622 }, 2623 }, 2624 }; 2625 2626 static struct clk_branch gcc_camss_cpp_ahb_clk = { 2627 .halt_reg = 0x58040, 2628 .clkr = { 2629 .enable_reg = 0x58040, 2630 .enable_mask = BIT(0), 2631 .hw.init = &(struct clk_init_data){ 2632 .name = "gcc_camss_cpp_ahb_clk", 2633 .parent_hws = (const struct clk_hw*[]){ 2634 &camss_ahb_clk_src.clkr.hw, 2635 }, 2636 .num_parents = 1, 2637 .flags = CLK_SET_RATE_PARENT, 2638 .ops = &clk_branch2_ops, 2639 }, 2640 }, 2641 }; 2642 2643 static struct clk_branch gcc_camss_cpp_clk = { 2644 .halt_reg = 0x5803c, 2645 .clkr = { 2646 .enable_reg = 0x5803c, 2647 .enable_mask = BIT(0), 2648 .hw.init = &(struct clk_init_data){ 2649 .name = "gcc_camss_cpp_clk", 2650 .parent_hws = (const struct clk_hw*[]){ 2651 &cpp_clk_src.clkr.hw, 2652 }, 2653 .num_parents = 1, 2654 .flags = CLK_SET_RATE_PARENT, 2655 .ops = &clk_branch2_ops, 2656 }, 2657 }, 2658 }; 2659 2660 static struct clk_branch gcc_camss_vfe0_clk = { 2661 .halt_reg = 0x58038, 2662 .clkr = { 2663 .enable_reg = 0x58038, 2664 .enable_mask = BIT(0), 2665 .hw.init = &(struct clk_init_data){ 2666 .name = "gcc_camss_vfe0_clk", 2667 .parent_hws = (const struct clk_hw*[]){ 2668 &vfe0_clk_src.clkr.hw, 2669 }, 2670 .num_parents = 1, 2671 .flags = CLK_SET_RATE_PARENT, 2672 .ops = &clk_branch2_ops, 2673 }, 2674 }, 2675 }; 2676 2677 static struct clk_branch gcc_camss_vfe_ahb_clk = { 2678 .halt_reg = 0x58044, 2679 .clkr = { 2680 .enable_reg = 0x58044, 2681 .enable_mask = BIT(0), 2682 .hw.init = &(struct clk_init_data){ 2683 .name = "gcc_camss_vfe_ahb_clk", 2684 .parent_hws = (const struct clk_hw*[]){ 2685 &camss_ahb_clk_src.clkr.hw, 2686 }, 2687 .num_parents = 1, 2688 .flags = CLK_SET_RATE_PARENT, 2689 .ops = &clk_branch2_ops, 2690 }, 2691 }, 2692 }; 2693 2694 static struct clk_branch gcc_camss_vfe_axi_clk = { 2695 .halt_reg = 0x58048, 2696 .clkr = { 2697 .enable_reg = 0x58048, 2698 .enable_mask = BIT(0), 2699 .hw.init = &(struct clk_init_data){ 2700 .name = "gcc_camss_vfe_axi_clk", 2701 .parent_hws = (const struct clk_hw*[]){ 2702 &system_mm_noc_bfdcd_clk_src.clkr.hw, 2703 }, 2704 .num_parents = 1, 2705 .flags = CLK_SET_RATE_PARENT, 2706 .ops = &clk_branch2_ops, 2707 }, 2708 }, 2709 }; 2710 2711 static struct clk_branch gcc_crypto_ahb_clk = { 2712 .halt_reg = 0x16024, 2713 .halt_check = BRANCH_HALT_VOTED, 2714 .clkr = { 2715 .enable_reg = 0x45004, 2716 .enable_mask = BIT(0), 2717 .hw.init = &(struct clk_init_data){ 2718 .name = "gcc_crypto_ahb_clk", 2719 .parent_hws = (const struct clk_hw*[]){ 2720 &pcnoc_bfdcd_clk_src.clkr.hw, 2721 }, 2722 .num_parents = 1, 2723 .flags = CLK_SET_RATE_PARENT, 2724 .ops = &clk_branch2_ops, 2725 }, 2726 }, 2727 }; 2728 2729 static struct clk_branch gcc_crypto_axi_clk = { 2730 .halt_reg = 0x16020, 2731 .halt_check = BRANCH_HALT_VOTED, 2732 .clkr = { 2733 .enable_reg = 0x45004, 2734 .enable_mask = BIT(1), 2735 .hw.init = &(struct clk_init_data){ 2736 .name = "gcc_crypto_axi_clk", 2737 .parent_hws = (const struct clk_hw*[]){ 2738 &pcnoc_bfdcd_clk_src.clkr.hw, 2739 }, 2740 .num_parents = 1, 2741 .flags = CLK_SET_RATE_PARENT, 2742 .ops = &clk_branch2_ops, 2743 }, 2744 }, 2745 }; 2746 2747 static struct clk_branch gcc_crypto_clk = { 2748 .halt_reg = 0x1601c, 2749 .halt_check = BRANCH_HALT_VOTED, 2750 .clkr = { 2751 .enable_reg = 0x45004, 2752 .enable_mask = BIT(2), 2753 .hw.init = &(struct clk_init_data){ 2754 .name = "gcc_crypto_clk", 2755 .parent_hws = (const struct clk_hw*[]){ 2756 &crypto_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_oxili_gmem_clk = { 2766 .halt_reg = 0x59024, 2767 .clkr = { 2768 .enable_reg = 0x59024, 2769 .enable_mask = BIT(0), 2770 .hw.init = &(struct clk_init_data){ 2771 .name = "gcc_oxili_gmem_clk", 2772 .parent_hws = (const struct clk_hw*[]){ 2773 &gfx3d_clk_src.clkr.hw, 2774 }, 2775 .num_parents = 1, 2776 .flags = CLK_SET_RATE_PARENT, 2777 .ops = &clk_branch2_ops, 2778 }, 2779 }, 2780 }; 2781 2782 static struct clk_branch gcc_gp1_clk = { 2783 .halt_reg = 0x08000, 2784 .clkr = { 2785 .enable_reg = 0x08000, 2786 .enable_mask = BIT(0), 2787 .hw.init = &(struct clk_init_data){ 2788 .name = "gcc_gp1_clk", 2789 .parent_hws = (const struct clk_hw*[]){ 2790 &gp1_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_gp2_clk = { 2800 .halt_reg = 0x09000, 2801 .clkr = { 2802 .enable_reg = 0x09000, 2803 .enable_mask = BIT(0), 2804 .hw.init = &(struct clk_init_data){ 2805 .name = "gcc_gp2_clk", 2806 .parent_hws = (const struct clk_hw*[]){ 2807 &gp2_clk_src.clkr.hw, 2808 }, 2809 .num_parents = 1, 2810 .flags = CLK_SET_RATE_PARENT, 2811 .ops = &clk_branch2_ops, 2812 }, 2813 }, 2814 }; 2815 2816 static struct clk_branch gcc_gp3_clk = { 2817 .halt_reg = 0x0a000, 2818 .clkr = { 2819 .enable_reg = 0x0a000, 2820 .enable_mask = BIT(0), 2821 .hw.init = &(struct clk_init_data){ 2822 .name = "gcc_gp3_clk", 2823 .parent_hws = (const struct clk_hw*[]){ 2824 &gp3_clk_src.clkr.hw, 2825 }, 2826 .num_parents = 1, 2827 .flags = CLK_SET_RATE_PARENT, 2828 .ops = &clk_branch2_ops, 2829 }, 2830 }, 2831 }; 2832 2833 static struct clk_branch gcc_mdss_ahb_clk = { 2834 .halt_reg = 0x4d07c, 2835 .clkr = { 2836 .enable_reg = 0x4d07c, 2837 .enable_mask = BIT(0), 2838 .hw.init = &(struct clk_init_data){ 2839 .name = "gcc_mdss_ahb_clk", 2840 .parent_hws = (const struct clk_hw*[]){ 2841 &pcnoc_bfdcd_clk_src.clkr.hw, 2842 }, 2843 .num_parents = 1, 2844 .flags = CLK_SET_RATE_PARENT, 2845 .ops = &clk_branch2_ops, 2846 }, 2847 }, 2848 }; 2849 2850 static struct clk_branch gcc_mdss_axi_clk = { 2851 .halt_reg = 0x4d080, 2852 .clkr = { 2853 .enable_reg = 0x4d080, 2854 .enable_mask = BIT(0), 2855 .hw.init = &(struct clk_init_data){ 2856 .name = "gcc_mdss_axi_clk", 2857 .parent_hws = (const struct clk_hw*[]){ 2858 &system_mm_noc_bfdcd_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_mdss_byte0_clk = { 2868 .halt_reg = 0x4d094, 2869 .clkr = { 2870 .enable_reg = 0x4d094, 2871 .enable_mask = BIT(0), 2872 .hw.init = &(struct clk_init_data){ 2873 .name = "gcc_mdss_byte0_clk", 2874 .parent_hws = (const struct clk_hw*[]){ 2875 &byte0_clk_src.clkr.hw, 2876 }, 2877 .num_parents = 1, 2878 .flags = CLK_SET_RATE_PARENT, 2879 .ops = &clk_branch2_ops, 2880 }, 2881 }, 2882 }; 2883 2884 static struct clk_branch gcc_mdss_byte1_clk = { 2885 .halt_reg = 0x4d0a0, 2886 .clkr = { 2887 .enable_reg = 0x4d0a0, 2888 .enable_mask = BIT(0), 2889 .hw.init = &(struct clk_init_data){ 2890 .name = "gcc_mdss_byte1_clk", 2891 .parent_hws = (const struct clk_hw*[]){ 2892 &byte1_clk_src.clkr.hw, 2893 }, 2894 .num_parents = 1, 2895 .flags = CLK_SET_RATE_PARENT, 2896 .ops = &clk_branch2_ops, 2897 }, 2898 }, 2899 }; 2900 2901 static struct clk_branch gcc_mdss_esc0_clk = { 2902 .halt_reg = 0x4d098, 2903 .clkr = { 2904 .enable_reg = 0x4d098, 2905 .enable_mask = BIT(0), 2906 .hw.init = &(struct clk_init_data){ 2907 .name = "gcc_mdss_esc0_clk", 2908 .parent_hws = (const struct clk_hw*[]){ 2909 &esc0_clk_src.clkr.hw, 2910 }, 2911 .num_parents = 1, 2912 .flags = CLK_SET_RATE_PARENT, 2913 .ops = &clk_branch2_ops, 2914 }, 2915 }, 2916 }; 2917 2918 static struct clk_branch gcc_mdss_esc1_clk = { 2919 .halt_reg = 0x4d09c, 2920 .clkr = { 2921 .enable_reg = 0x4d09c, 2922 .enable_mask = BIT(0), 2923 .hw.init = &(struct clk_init_data){ 2924 .name = "gcc_mdss_esc1_clk", 2925 .parent_hws = (const struct clk_hw*[]){ 2926 &esc1_clk_src.clkr.hw, 2927 }, 2928 .num_parents = 1, 2929 .flags = CLK_SET_RATE_PARENT, 2930 .ops = &clk_branch2_ops, 2931 }, 2932 }, 2933 }; 2934 2935 static struct clk_branch gcc_mdss_mdp_clk = { 2936 .halt_reg = 0x4D088, 2937 .clkr = { 2938 .enable_reg = 0x4D088, 2939 .enable_mask = BIT(0), 2940 .hw.init = &(struct clk_init_data){ 2941 .name = "gcc_mdss_mdp_clk", 2942 .parent_hws = (const struct clk_hw*[]){ 2943 &mdp_clk_src.clkr.hw, 2944 }, 2945 .num_parents = 1, 2946 .flags = CLK_SET_RATE_PARENT, 2947 .ops = &clk_branch2_ops, 2948 }, 2949 }, 2950 }; 2951 2952 static struct clk_branch gcc_mdss_pclk0_clk = { 2953 .halt_reg = 0x4d084, 2954 .clkr = { 2955 .enable_reg = 0x4d084, 2956 .enable_mask = BIT(0), 2957 .hw.init = &(struct clk_init_data){ 2958 .name = "gcc_mdss_pclk0_clk", 2959 .parent_hws = (const struct clk_hw*[]){ 2960 &pclk0_clk_src.clkr.hw, 2961 }, 2962 .num_parents = 1, 2963 .flags = CLK_SET_RATE_PARENT, 2964 .ops = &clk_branch2_ops, 2965 }, 2966 }, 2967 }; 2968 2969 static struct clk_branch gcc_mdss_pclk1_clk = { 2970 .halt_reg = 0x4d0a4, 2971 .clkr = { 2972 .enable_reg = 0x4d0a4, 2973 .enable_mask = BIT(0), 2974 .hw.init = &(struct clk_init_data){ 2975 .name = "gcc_mdss_pclk1_clk", 2976 .parent_hws = (const struct clk_hw*[]){ 2977 &pclk1_clk_src.clkr.hw, 2978 }, 2979 .num_parents = 1, 2980 .flags = CLK_SET_RATE_PARENT, 2981 .ops = &clk_branch2_ops, 2982 }, 2983 }, 2984 }; 2985 2986 static struct clk_branch gcc_mdss_vsync_clk = { 2987 .halt_reg = 0x4d090, 2988 .clkr = { 2989 .enable_reg = 0x4d090, 2990 .enable_mask = BIT(0), 2991 .hw.init = &(struct clk_init_data){ 2992 .name = "gcc_mdss_vsync_clk", 2993 .parent_hws = (const struct clk_hw*[]){ 2994 &vsync_clk_src.clkr.hw, 2995 }, 2996 .num_parents = 1, 2997 .flags = CLK_SET_RATE_PARENT, 2998 .ops = &clk_branch2_ops, 2999 }, 3000 }, 3001 }; 3002 3003 static struct clk_branch gcc_mss_cfg_ahb_clk = { 3004 .halt_reg = 0x49000, 3005 .clkr = { 3006 .enable_reg = 0x49000, 3007 .enable_mask = BIT(0), 3008 .hw.init = &(struct clk_init_data){ 3009 .name = "gcc_mss_cfg_ahb_clk", 3010 .parent_hws = (const struct clk_hw*[]){ 3011 &pcnoc_bfdcd_clk_src.clkr.hw, 3012 }, 3013 .num_parents = 1, 3014 .flags = CLK_SET_RATE_PARENT, 3015 .ops = &clk_branch2_ops, 3016 }, 3017 }, 3018 }; 3019 3020 static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 3021 .halt_reg = 0x49004, 3022 .clkr = { 3023 .enable_reg = 0x49004, 3024 .enable_mask = BIT(0), 3025 .hw.init = &(struct clk_init_data){ 3026 .name = "gcc_mss_q6_bimc_axi_clk", 3027 .parent_hws = (const struct clk_hw*[]){ 3028 &bimc_ddr_clk_src.clkr.hw, 3029 }, 3030 .num_parents = 1, 3031 .flags = CLK_SET_RATE_PARENT, 3032 .ops = &clk_branch2_ops, 3033 }, 3034 }, 3035 }; 3036 3037 static struct clk_branch gcc_oxili_ahb_clk = { 3038 .halt_reg = 0x59028, 3039 .clkr = { 3040 .enable_reg = 0x59028, 3041 .enable_mask = BIT(0), 3042 .hw.init = &(struct clk_init_data){ 3043 .name = "gcc_oxili_ahb_clk", 3044 .parent_hws = (const struct clk_hw*[]){ 3045 &pcnoc_bfdcd_clk_src.clkr.hw, 3046 }, 3047 .num_parents = 1, 3048 .flags = CLK_SET_RATE_PARENT, 3049 .ops = &clk_branch2_ops, 3050 }, 3051 }, 3052 }; 3053 3054 static struct clk_branch gcc_oxili_gfx3d_clk = { 3055 .halt_reg = 0x59020, 3056 .clkr = { 3057 .enable_reg = 0x59020, 3058 .enable_mask = BIT(0), 3059 .hw.init = &(struct clk_init_data){ 3060 .name = "gcc_oxili_gfx3d_clk", 3061 .parent_hws = (const struct clk_hw*[]){ 3062 &gfx3d_clk_src.clkr.hw, 3063 }, 3064 .num_parents = 1, 3065 .flags = CLK_SET_RATE_PARENT, 3066 .ops = &clk_branch2_ops, 3067 }, 3068 }, 3069 }; 3070 3071 static struct clk_branch gcc_pdm2_clk = { 3072 .halt_reg = 0x4400c, 3073 .clkr = { 3074 .enable_reg = 0x4400c, 3075 .enable_mask = BIT(0), 3076 .hw.init = &(struct clk_init_data){ 3077 .name = "gcc_pdm2_clk", 3078 .parent_hws = (const struct clk_hw*[]){ 3079 &pdm2_clk_src.clkr.hw, 3080 }, 3081 .num_parents = 1, 3082 .flags = CLK_SET_RATE_PARENT, 3083 .ops = &clk_branch2_ops, 3084 }, 3085 }, 3086 }; 3087 3088 static struct clk_branch gcc_pdm_ahb_clk = { 3089 .halt_reg = 0x44004, 3090 .clkr = { 3091 .enable_reg = 0x44004, 3092 .enable_mask = BIT(0), 3093 .hw.init = &(struct clk_init_data){ 3094 .name = "gcc_pdm_ahb_clk", 3095 .parent_hws = (const struct clk_hw*[]){ 3096 &pcnoc_bfdcd_clk_src.clkr.hw, 3097 }, 3098 .num_parents = 1, 3099 .flags = CLK_SET_RATE_PARENT, 3100 .ops = &clk_branch2_ops, 3101 }, 3102 }, 3103 }; 3104 3105 static struct clk_branch gcc_prng_ahb_clk = { 3106 .halt_reg = 0x13004, 3107 .halt_check = BRANCH_HALT_VOTED, 3108 .clkr = { 3109 .enable_reg = 0x45004, 3110 .enable_mask = BIT(8), 3111 .hw.init = &(struct clk_init_data){ 3112 .name = "gcc_prng_ahb_clk", 3113 .parent_hws = (const struct clk_hw*[]){ 3114 &pcnoc_bfdcd_clk_src.clkr.hw, 3115 }, 3116 .num_parents = 1, 3117 .ops = &clk_branch2_ops, 3118 }, 3119 }, 3120 }; 3121 3122 static struct clk_branch gcc_sdcc1_ahb_clk = { 3123 .halt_reg = 0x4201c, 3124 .clkr = { 3125 .enable_reg = 0x4201c, 3126 .enable_mask = BIT(0), 3127 .hw.init = &(struct clk_init_data){ 3128 .name = "gcc_sdcc1_ahb_clk", 3129 .parent_hws = (const struct clk_hw*[]){ 3130 &pcnoc_bfdcd_clk_src.clkr.hw, 3131 }, 3132 .num_parents = 1, 3133 .flags = CLK_SET_RATE_PARENT, 3134 .ops = &clk_branch2_ops, 3135 }, 3136 }, 3137 }; 3138 3139 static struct clk_branch gcc_sdcc1_apps_clk = { 3140 .halt_reg = 0x42018, 3141 .clkr = { 3142 .enable_reg = 0x42018, 3143 .enable_mask = BIT(0), 3144 .hw.init = &(struct clk_init_data){ 3145 .name = "gcc_sdcc1_apps_clk", 3146 .parent_hws = (const struct clk_hw*[]){ 3147 &sdcc1_apps_clk_src.clkr.hw, 3148 }, 3149 .num_parents = 1, 3150 .flags = CLK_SET_RATE_PARENT, 3151 .ops = &clk_branch2_ops, 3152 }, 3153 }, 3154 }; 3155 3156 static struct clk_branch gcc_sdcc2_ahb_clk = { 3157 .halt_reg = 0x4301c, 3158 .clkr = { 3159 .enable_reg = 0x4301c, 3160 .enable_mask = BIT(0), 3161 .hw.init = &(struct clk_init_data){ 3162 .name = "gcc_sdcc2_ahb_clk", 3163 .parent_hws = (const struct clk_hw*[]){ 3164 &pcnoc_bfdcd_clk_src.clkr.hw, 3165 }, 3166 .num_parents = 1, 3167 .flags = CLK_SET_RATE_PARENT, 3168 .ops = &clk_branch2_ops, 3169 }, 3170 }, 3171 }; 3172 3173 static struct clk_branch gcc_sdcc2_apps_clk = { 3174 .halt_reg = 0x43018, 3175 .clkr = { 3176 .enable_reg = 0x43018, 3177 .enable_mask = BIT(0), 3178 .hw.init = &(struct clk_init_data){ 3179 .name = "gcc_sdcc2_apps_clk", 3180 .parent_hws = (const struct clk_hw*[]){ 3181 &sdcc2_apps_clk_src.clkr.hw, 3182 }, 3183 .num_parents = 1, 3184 .flags = CLK_SET_RATE_PARENT, 3185 .ops = &clk_branch2_ops, 3186 }, 3187 }, 3188 }; 3189 3190 static struct clk_branch gcc_apss_tcu_clk = { 3191 .halt_reg = 0x12018, 3192 .halt_check = BRANCH_HALT_VOTED, 3193 .clkr = { 3194 .enable_reg = 0x4500c, 3195 .enable_mask = BIT(1), 3196 .hw.init = &(struct clk_init_data){ 3197 .name = "gcc_apss_tcu_clk", 3198 .parent_hws = (const struct clk_hw*[]){ 3199 &bimc_ddr_clk_src.clkr.hw, 3200 }, 3201 .num_parents = 1, 3202 .ops = &clk_branch2_ops, 3203 }, 3204 }, 3205 }; 3206 3207 static struct clk_branch gcc_gfx_tcu_clk = { 3208 .halt_reg = 0x12020, 3209 .halt_check = BRANCH_HALT_VOTED, 3210 .clkr = { 3211 .enable_reg = 0x4500c, 3212 .enable_mask = BIT(2), 3213 .hw.init = &(struct clk_init_data){ 3214 .name = "gcc_gfx_tcu_clk", 3215 .parent_hws = (const struct clk_hw*[]){ 3216 &bimc_ddr_clk_src.clkr.hw, 3217 }, 3218 .num_parents = 1, 3219 .ops = &clk_branch2_ops, 3220 }, 3221 }, 3222 }; 3223 3224 static struct clk_branch gcc_gfx_tbu_clk = { 3225 .halt_reg = 0x12010, 3226 .halt_check = BRANCH_HALT_VOTED, 3227 .clkr = { 3228 .enable_reg = 0x4500c, 3229 .enable_mask = BIT(3), 3230 .hw.init = &(struct clk_init_data){ 3231 .name = "gcc_gfx_tbu_clk", 3232 .parent_hws = (const struct clk_hw*[]){ 3233 &bimc_ddr_clk_src.clkr.hw, 3234 }, 3235 .num_parents = 1, 3236 .ops = &clk_branch2_ops, 3237 }, 3238 }, 3239 }; 3240 3241 static struct clk_branch gcc_mdp_tbu_clk = { 3242 .halt_reg = 0x1201c, 3243 .halt_check = BRANCH_HALT_VOTED, 3244 .clkr = { 3245 .enable_reg = 0x4500c, 3246 .enable_mask = BIT(4), 3247 .hw.init = &(struct clk_init_data){ 3248 .name = "gcc_mdp_tbu_clk", 3249 .parent_hws = (const struct clk_hw*[]){ 3250 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3251 }, 3252 .num_parents = 1, 3253 .flags = CLK_SET_RATE_PARENT, 3254 .ops = &clk_branch2_ops, 3255 }, 3256 }, 3257 }; 3258 3259 static struct clk_branch gcc_venus_tbu_clk = { 3260 .halt_reg = 0x12014, 3261 .halt_check = BRANCH_HALT_VOTED, 3262 .clkr = { 3263 .enable_reg = 0x4500c, 3264 .enable_mask = BIT(5), 3265 .hw.init = &(struct clk_init_data){ 3266 .name = "gcc_venus_tbu_clk", 3267 .parent_hws = (const struct clk_hw*[]){ 3268 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3269 }, 3270 .num_parents = 1, 3271 .flags = CLK_SET_RATE_PARENT, 3272 .ops = &clk_branch2_ops, 3273 }, 3274 }, 3275 }; 3276 3277 static struct clk_branch gcc_vfe_tbu_clk = { 3278 .halt_reg = 0x1203c, 3279 .halt_check = BRANCH_HALT_VOTED, 3280 .clkr = { 3281 .enable_reg = 0x4500c, 3282 .enable_mask = BIT(9), 3283 .hw.init = &(struct clk_init_data){ 3284 .name = "gcc_vfe_tbu_clk", 3285 .parent_hws = (const struct clk_hw*[]){ 3286 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3287 }, 3288 .num_parents = 1, 3289 .flags = CLK_SET_RATE_PARENT, 3290 .ops = &clk_branch2_ops, 3291 }, 3292 }, 3293 }; 3294 3295 static struct clk_branch gcc_jpeg_tbu_clk = { 3296 .halt_reg = 0x12034, 3297 .halt_check = BRANCH_HALT_VOTED, 3298 .clkr = { 3299 .enable_reg = 0x4500c, 3300 .enable_mask = BIT(10), 3301 .hw.init = &(struct clk_init_data){ 3302 .name = "gcc_jpeg_tbu_clk", 3303 .parent_hws = (const struct clk_hw*[]){ 3304 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3305 }, 3306 .num_parents = 1, 3307 .flags = CLK_SET_RATE_PARENT, 3308 .ops = &clk_branch2_ops, 3309 }, 3310 }, 3311 }; 3312 3313 static struct clk_branch gcc_smmu_cfg_clk = { 3314 .halt_reg = 0x12038, 3315 .halt_check = BRANCH_HALT_VOTED, 3316 .clkr = { 3317 .enable_reg = 0x4500c, 3318 .enable_mask = BIT(12), 3319 .hw.init = &(struct clk_init_data){ 3320 .name = "gcc_smmu_cfg_clk", 3321 .parent_hws = (const struct clk_hw*[]){ 3322 &pcnoc_bfdcd_clk_src.clkr.hw, 3323 }, 3324 .num_parents = 1, 3325 .flags = CLK_SET_RATE_PARENT, 3326 .ops = &clk_branch2_ops, 3327 }, 3328 }, 3329 }; 3330 3331 static struct clk_branch gcc_gtcu_ahb_clk = { 3332 .halt_reg = 0x12044, 3333 .halt_check = BRANCH_HALT_VOTED, 3334 .clkr = { 3335 .enable_reg = 0x4500c, 3336 .enable_mask = BIT(13), 3337 .hw.init = &(struct clk_init_data){ 3338 .name = "gcc_gtcu_ahb_clk", 3339 .parent_hws = (const struct clk_hw*[]){ 3340 &pcnoc_bfdcd_clk_src.clkr.hw, 3341 }, 3342 .num_parents = 1, 3343 .flags = CLK_SET_RATE_PARENT, 3344 .ops = &clk_branch2_ops, 3345 }, 3346 }, 3347 }; 3348 3349 static struct clk_branch gcc_cpp_tbu_clk = { 3350 .halt_reg = 0x12040, 3351 .halt_check = BRANCH_HALT_VOTED, 3352 .clkr = { 3353 .enable_reg = 0x4500c, 3354 .enable_mask = BIT(14), 3355 .hw.init = &(struct clk_init_data){ 3356 .name = "gcc_cpp_tbu_clk", 3357 .parent_hws = (const struct clk_hw*[]){ 3358 &pcnoc_bfdcd_clk_src.clkr.hw, 3359 }, 3360 .num_parents = 1, 3361 .flags = CLK_SET_RATE_PARENT, 3362 .ops = &clk_branch2_ops, 3363 }, 3364 }, 3365 }; 3366 3367 static struct clk_branch gcc_mdp_rt_tbu_clk = { 3368 .halt_reg = 0x1201c, 3369 .halt_check = BRANCH_HALT_VOTED, 3370 .clkr = { 3371 .enable_reg = 0x4500c, 3372 .enable_mask = BIT(15), 3373 .hw.init = &(struct clk_init_data){ 3374 .name = "gcc_mdp_rt_tbu_clk", 3375 .parent_hws = (const struct clk_hw*[]){ 3376 &pcnoc_bfdcd_clk_src.clkr.hw, 3377 }, 3378 .num_parents = 1, 3379 .flags = CLK_SET_RATE_PARENT, 3380 .ops = &clk_branch2_ops, 3381 }, 3382 }, 3383 }; 3384 3385 static struct clk_branch gcc_bimc_gfx_clk = { 3386 .halt_reg = 0x31024, 3387 .clkr = { 3388 .enable_reg = 0x31024, 3389 .enable_mask = BIT(0), 3390 .hw.init = &(struct clk_init_data){ 3391 .name = "gcc_bimc_gfx_clk", 3392 .parent_hws = (const struct clk_hw*[]){ 3393 &bimc_gpu_clk_src.clkr.hw, 3394 }, 3395 .num_parents = 1, 3396 .flags = CLK_SET_RATE_PARENT, 3397 .ops = &clk_branch2_ops, 3398 }, 3399 }, 3400 }; 3401 3402 static struct clk_branch gcc_bimc_gpu_clk = { 3403 .halt_reg = 0x31040, 3404 .clkr = { 3405 .enable_reg = 0x31040, 3406 .enable_mask = BIT(0), 3407 .hw.init = &(struct clk_init_data){ 3408 .name = "gcc_bimc_gpu_clk", 3409 .parent_hws = (const struct clk_hw*[]){ 3410 &bimc_gpu_clk_src.clkr.hw, 3411 }, 3412 .num_parents = 1, 3413 .flags = CLK_SET_RATE_PARENT, 3414 .ops = &clk_branch2_ops, 3415 }, 3416 }, 3417 }; 3418 3419 static struct clk_branch gcc_usb2a_phy_sleep_clk = { 3420 .halt_reg = 0x4102c, 3421 .clkr = { 3422 .enable_reg = 0x4102c, 3423 .enable_mask = BIT(0), 3424 .hw.init = &(struct clk_init_data){ 3425 .name = "gcc_usb2a_phy_sleep_clk", 3426 .ops = &clk_branch2_ops, 3427 }, 3428 }, 3429 }; 3430 3431 static struct clk_branch gcc_usb_fs_ahb_clk = { 3432 .halt_reg = 0x3f008, 3433 .clkr = { 3434 .enable_reg = 0x3f008, 3435 .enable_mask = BIT(0), 3436 .hw.init = &(struct clk_init_data){ 3437 .name = "gcc_usb_fs_ahb_clk", 3438 .parent_hws = (const struct clk_hw*[]){ 3439 &pcnoc_bfdcd_clk_src.clkr.hw, 3440 }, 3441 .num_parents = 1, 3442 .flags = CLK_SET_RATE_PARENT, 3443 .ops = &clk_branch2_ops, 3444 }, 3445 }, 3446 }; 3447 3448 static struct clk_branch gcc_usb_fs_ic_clk = { 3449 .halt_reg = 0x3f030, 3450 .clkr = { 3451 .enable_reg = 0x3f030, 3452 .enable_mask = BIT(0), 3453 .hw.init = &(struct clk_init_data){ 3454 .name = "gcc_usb_fs_ic_clk", 3455 .parent_hws = (const struct clk_hw*[]){ 3456 &usb_fs_ic_clk_src.clkr.hw, 3457 }, 3458 .num_parents = 1, 3459 .flags = CLK_SET_RATE_PARENT, 3460 .ops = &clk_branch2_ops, 3461 }, 3462 }, 3463 }; 3464 3465 static struct clk_branch gcc_usb_fs_system_clk = { 3466 .halt_reg = 0x3f004, 3467 .clkr = { 3468 .enable_reg = 0x3f004, 3469 .enable_mask = BIT(0), 3470 .hw.init = &(struct clk_init_data){ 3471 .name = "gcc_usb_fs_system_clk", 3472 .parent_hws = (const struct clk_hw*[]){ 3473 &usb_fs_system_clk_src.clkr.hw, 3474 }, 3475 .num_parents = 1, 3476 .flags = CLK_SET_RATE_PARENT, 3477 .ops = &clk_branch2_ops, 3478 }, 3479 }, 3480 }; 3481 3482 static struct clk_branch gcc_usb_hs_ahb_clk = { 3483 .halt_reg = 0x41008, 3484 .clkr = { 3485 .enable_reg = 0x41008, 3486 .enable_mask = BIT(0), 3487 .hw.init = &(struct clk_init_data){ 3488 .name = "gcc_usb_hs_ahb_clk", 3489 .parent_hws = (const struct clk_hw*[]){ 3490 &pcnoc_bfdcd_clk_src.clkr.hw, 3491 }, 3492 .num_parents = 1, 3493 .flags = CLK_SET_RATE_PARENT, 3494 .ops = &clk_branch2_ops, 3495 }, 3496 }, 3497 }; 3498 3499 static struct clk_branch gcc_usb_hs_system_clk = { 3500 .halt_reg = 0x41004, 3501 .clkr = { 3502 .enable_reg = 0x41004, 3503 .enable_mask = BIT(0), 3504 .hw.init = &(struct clk_init_data){ 3505 .name = "gcc_usb_hs_system_clk", 3506 .parent_hws = (const struct clk_hw*[]){ 3507 &usb_hs_system_clk_src.clkr.hw, 3508 }, 3509 .num_parents = 1, 3510 .flags = CLK_SET_RATE_PARENT, 3511 .ops = &clk_branch2_ops, 3512 }, 3513 }, 3514 }; 3515 3516 static struct clk_branch gcc_venus0_ahb_clk = { 3517 .halt_reg = 0x4c020, 3518 .clkr = { 3519 .enable_reg = 0x4c020, 3520 .enable_mask = BIT(0), 3521 .hw.init = &(struct clk_init_data){ 3522 .name = "gcc_venus0_ahb_clk", 3523 .parent_hws = (const struct clk_hw*[]){ 3524 &pcnoc_bfdcd_clk_src.clkr.hw, 3525 }, 3526 .num_parents = 1, 3527 .flags = CLK_SET_RATE_PARENT, 3528 .ops = &clk_branch2_ops, 3529 }, 3530 }, 3531 }; 3532 3533 static struct clk_branch gcc_venus0_axi_clk = { 3534 .halt_reg = 0x4c024, 3535 .clkr = { 3536 .enable_reg = 0x4c024, 3537 .enable_mask = BIT(0), 3538 .hw.init = &(struct clk_init_data){ 3539 .name = "gcc_venus0_axi_clk", 3540 .parent_hws = (const struct clk_hw*[]){ 3541 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3542 }, 3543 .num_parents = 1, 3544 .flags = CLK_SET_RATE_PARENT, 3545 .ops = &clk_branch2_ops, 3546 }, 3547 }, 3548 }; 3549 3550 static struct clk_branch gcc_venus0_vcodec0_clk = { 3551 .halt_reg = 0x4c01c, 3552 .clkr = { 3553 .enable_reg = 0x4c01c, 3554 .enable_mask = BIT(0), 3555 .hw.init = &(struct clk_init_data){ 3556 .name = "gcc_venus0_vcodec0_clk", 3557 .parent_hws = (const struct clk_hw*[]){ 3558 &vcodec0_clk_src.clkr.hw, 3559 }, 3560 .num_parents = 1, 3561 .flags = CLK_SET_RATE_PARENT, 3562 .ops = &clk_branch2_ops, 3563 }, 3564 }, 3565 }; 3566 3567 static struct clk_branch gcc_venus0_core0_vcodec0_clk = { 3568 .halt_reg = 0x4c02c, 3569 .clkr = { 3570 .enable_reg = 0x4c02c, 3571 .enable_mask = BIT(0), 3572 .hw.init = &(struct clk_init_data){ 3573 .name = "gcc_venus0_core0_vcodec0_clk", 3574 .parent_hws = (const struct clk_hw*[]){ 3575 &vcodec0_clk_src.clkr.hw, 3576 }, 3577 .num_parents = 1, 3578 .flags = CLK_SET_RATE_PARENT, 3579 .ops = &clk_branch2_ops, 3580 }, 3581 }, 3582 }; 3583 3584 static struct clk_branch gcc_venus0_core1_vcodec0_clk = { 3585 .halt_reg = 0x4c034, 3586 .clkr = { 3587 .enable_reg = 0x4c034, 3588 .enable_mask = BIT(0), 3589 .hw.init = &(struct clk_init_data){ 3590 .name = "gcc_venus0_core1_vcodec0_clk", 3591 .parent_hws = (const struct clk_hw*[]){ 3592 &vcodec0_clk_src.clkr.hw, 3593 }, 3594 .num_parents = 1, 3595 .flags = CLK_SET_RATE_PARENT, 3596 .ops = &clk_branch2_ops, 3597 }, 3598 }, 3599 }; 3600 3601 static struct clk_branch gcc_oxili_timer_clk = { 3602 .halt_reg = 0x59040, 3603 .clkr = { 3604 .enable_reg = 0x59040, 3605 .enable_mask = BIT(0), 3606 .hw.init = &(struct clk_init_data){ 3607 .name = "gcc_oxili_timer_clk", 3608 .ops = &clk_branch2_ops, 3609 }, 3610 }, 3611 }; 3612 3613 static struct gdsc venus_gdsc = { 3614 .gdscr = 0x4c018, 3615 .pd = { 3616 .name = "venus", 3617 }, 3618 .pwrsts = PWRSTS_OFF_ON, 3619 }; 3620 3621 static struct gdsc mdss_gdsc = { 3622 .gdscr = 0x4d078, 3623 .pd = { 3624 .name = "mdss", 3625 }, 3626 .pwrsts = PWRSTS_OFF_ON, 3627 }; 3628 3629 static struct gdsc jpeg_gdsc = { 3630 .gdscr = 0x5701c, 3631 .pd = { 3632 .name = "jpeg", 3633 }, 3634 .pwrsts = PWRSTS_OFF_ON, 3635 }; 3636 3637 static struct gdsc vfe_gdsc = { 3638 .gdscr = 0x58034, 3639 .pd = { 3640 .name = "vfe", 3641 }, 3642 .pwrsts = PWRSTS_OFF_ON, 3643 }; 3644 3645 static struct gdsc oxili_gdsc = { 3646 .gdscr = 0x5901c, 3647 .pd = { 3648 .name = "oxili", 3649 }, 3650 .pwrsts = PWRSTS_OFF_ON, 3651 }; 3652 3653 static struct gdsc venus_core0_gdsc = { 3654 .gdscr = 0x4c028, 3655 .pd = { 3656 .name = "venus_core0", 3657 }, 3658 .pwrsts = PWRSTS_OFF_ON, 3659 }; 3660 3661 static struct gdsc venus_core1_gdsc = { 3662 .gdscr = 0x4c030, 3663 .pd = { 3664 .name = "venus_core1", 3665 }, 3666 .pwrsts = PWRSTS_OFF_ON, 3667 }; 3668 3669 static struct clk_regmap *gcc_msm8939_clocks[] = { 3670 [GPLL0] = &gpll0.clkr, 3671 [GPLL0_VOTE] = &gpll0_vote, 3672 [BIMC_PLL] = &bimc_pll.clkr, 3673 [BIMC_PLL_VOTE] = &bimc_pll_vote, 3674 [GPLL1] = &gpll1.clkr, 3675 [GPLL1_VOTE] = &gpll1_vote, 3676 [GPLL2] = &gpll2.clkr, 3677 [GPLL2_VOTE] = &gpll2_vote, 3678 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr, 3679 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr, 3680 [SYSTEM_MM_NOC_BFDCD_CLK_SRC] = &system_mm_noc_bfdcd_clk_src.clkr, 3681 [CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr, 3682 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 3683 [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3684 [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3685 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 3686 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3687 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3688 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3689 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3690 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3691 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3692 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3693 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3694 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3695 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 3696 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 3697 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 3698 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 3699 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3700 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3701 [CCI_CLK_SRC] = &cci_clk_src.clkr, 3702 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 3703 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 3704 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3705 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 3706 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 3707 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 3708 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 3709 [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3710 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 3711 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3712 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3713 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3714 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 3715 [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 3716 [MDP_CLK_SRC] = &mdp_clk_src.clkr, 3717 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 3718 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 3719 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3720 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3721 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3722 [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr, 3723 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, 3724 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3725 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3726 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, 3727 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3728 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3729 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3730 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3731 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3732 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3733 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3734 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3735 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 3736 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 3737 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 3738 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 3739 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3740 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3741 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3742 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr, 3743 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr, 3744 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, 3745 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, 3746 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr, 3747 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, 3748 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, 3749 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, 3750 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, 3751 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr, 3752 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, 3753 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, 3754 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, 3755 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, 3756 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, 3757 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, 3758 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr, 3759 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr, 3760 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr, 3761 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 3762 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 3763 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr, 3764 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 3765 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 3766 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr, 3767 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 3768 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr, 3769 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr, 3770 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, 3771 [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr, 3772 [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr, 3773 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 3774 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 3775 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 3776 [GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr, 3777 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3778 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3779 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3780 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, 3781 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, 3782 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, 3783 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, 3784 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, 3785 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, 3786 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, 3787 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 3788 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, 3789 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, 3790 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3791 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3792 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3793 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3794 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3795 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3796 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3797 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr, 3798 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr, 3799 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, 3800 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, 3801 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr, 3802 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, 3803 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr, 3804 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr, 3805 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, 3806 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr, 3807 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr, 3808 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr, 3809 [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr, 3810 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr, 3811 [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr, 3812 [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr, 3813 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 3814 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, 3815 [ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr, 3816 [ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr, 3817 [ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr, 3818 [ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr, 3819 [ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr, 3820 [CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr, 3821 [GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr, 3822 [GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr, 3823 [GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr, 3824 [GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr, 3825 [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr, 3826 [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr, 3827 [GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr, 3828 [GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr, 3829 [GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr, 3830 [GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr, 3831 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 3832 [GPLL3] = &gpll3.clkr, 3833 [GPLL3_VOTE] = &gpll3_vote, 3834 [GPLL4] = &gpll4.clkr, 3835 [GPLL4_VOTE] = &gpll4_vote, 3836 [GPLL5] = &gpll5.clkr, 3837 [GPLL5_VOTE] = &gpll5_vote, 3838 [GPLL6] = &gpll6.clkr, 3839 [GPLL6_VOTE] = &gpll6_vote, 3840 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 3841 [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr, 3842 [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 3843 [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr, 3844 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 3845 [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr, 3846 [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr, 3847 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr, 3848 [GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr, 3849 [USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr, 3850 [USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr, 3851 [GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr, 3852 [GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr, 3853 [GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr, 3854 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr, 3855 [GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr, 3856 [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr, 3857 }; 3858 3859 static struct gdsc *gcc_msm8939_gdscs[] = { 3860 [VENUS_GDSC] = &venus_gdsc, 3861 [MDSS_GDSC] = &mdss_gdsc, 3862 [JPEG_GDSC] = &jpeg_gdsc, 3863 [VFE_GDSC] = &vfe_gdsc, 3864 [OXILI_GDSC] = &oxili_gdsc, 3865 [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 3866 [VENUS_CORE1_GDSC] = &venus_core1_gdsc, 3867 }; 3868 3869 static const struct qcom_reset_map gcc_msm8939_resets[] = { 3870 [GCC_BLSP1_BCR] = { 0x01000 }, 3871 [GCC_BLSP1_QUP1_BCR] = { 0x02000 }, 3872 [GCC_BLSP1_UART1_BCR] = { 0x02038 }, 3873 [GCC_BLSP1_QUP2_BCR] = { 0x03008 }, 3874 [GCC_BLSP1_UART2_BCR] = { 0x03028 }, 3875 [GCC_BLSP1_QUP3_BCR] = { 0x04018 }, 3876 [GCC_BLSP1_UART3_BCR] = { 0x04038 }, 3877 [GCC_BLSP1_QUP4_BCR] = { 0x05018 }, 3878 [GCC_BLSP1_QUP5_BCR] = { 0x06018 }, 3879 [GCC_BLSP1_QUP6_BCR] = { 0x07018 }, 3880 [GCC_IMEM_BCR] = { 0x0e000 }, 3881 [GCC_SMMU_BCR] = { 0x12000 }, 3882 [GCC_APSS_TCU_BCR] = { 0x12050 }, 3883 [GCC_SMMU_XPU_BCR] = { 0x12054 }, 3884 [GCC_PCNOC_TBU_BCR] = { 0x12058 }, 3885 [GCC_PRNG_BCR] = { 0x13000 }, 3886 [GCC_BOOT_ROM_BCR] = { 0x13008 }, 3887 [GCC_CRYPTO_BCR] = { 0x16000 }, 3888 [GCC_SEC_CTRL_BCR] = { 0x1a000 }, 3889 [GCC_AUDIO_CORE_BCR] = { 0x1c008 }, 3890 [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 }, 3891 [GCC_DEHR_BCR] = { 0x1f000 }, 3892 [GCC_SYSTEM_NOC_BCR] = { 0x26000 }, 3893 [GCC_PCNOC_BCR] = { 0x27018 }, 3894 [GCC_TCSR_BCR] = { 0x28000 }, 3895 [GCC_QDSS_BCR] = { 0x29000 }, 3896 [GCC_DCD_BCR] = { 0x2a000 }, 3897 [GCC_MSG_RAM_BCR] = { 0x2b000 }, 3898 [GCC_MPM_BCR] = { 0x2c000 }, 3899 [GCC_SPMI_BCR] = { 0x2e000 }, 3900 [GCC_SPDM_BCR] = { 0x2f000 }, 3901 [GCC_MM_SPDM_BCR] = { 0x2f024 }, 3902 [GCC_BIMC_BCR] = { 0x31000 }, 3903 [GCC_RBCPR_BCR] = { 0x33000 }, 3904 [GCC_TLMM_BCR] = { 0x34000 }, 3905 [GCC_CAMSS_CSI2_BCR] = { 0x3c038 }, 3906 [GCC_CAMSS_CSI2PHY_BCR] = { 0x3c044 }, 3907 [GCC_CAMSS_CSI2RDI_BCR] = { 0x3c04c }, 3908 [GCC_CAMSS_CSI2PIX_BCR] = { 0x3c054 }, 3909 [GCC_USB_FS_BCR] = { 0x3f000 }, 3910 [GCC_USB_HS_BCR] = { 0x41000 }, 3911 [GCC_USB2A_PHY_BCR] = { 0x41028 }, 3912 [GCC_SDCC1_BCR] = { 0x42000 }, 3913 [GCC_SDCC2_BCR] = { 0x43000 }, 3914 [GCC_PDM_BCR] = { 0x44000 }, 3915 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 }, 3916 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 }, 3917 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 }, 3918 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 }, 3919 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 }, 3920 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 }, 3921 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 }, 3922 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 }, 3923 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 }, 3924 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 }, 3925 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 }, 3926 [GCC_MMSS_BCR] = { 0x4b000 }, 3927 [GCC_VENUS0_BCR] = { 0x4c014 }, 3928 [GCC_MDSS_BCR] = { 0x4d074 }, 3929 [GCC_CAMSS_PHY0_BCR] = { 0x4e018 }, 3930 [GCC_CAMSS_CSI0_BCR] = { 0x4e038 }, 3931 [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 }, 3932 [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c }, 3933 [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 }, 3934 [GCC_CAMSS_PHY1_BCR] = { 0x4f018 }, 3935 [GCC_CAMSS_CSI1_BCR] = { 0x4f038 }, 3936 [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 }, 3937 [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c }, 3938 [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 }, 3939 [GCC_CAMSS_ISPIF_BCR] = { 0x50000 }, 3940 [GCC_BLSP1_QUP4_SPI_APPS_CBCR] = { 0x0501c }, 3941 [GCC_CAMSS_CCI_BCR] = { 0x51014 }, 3942 [GCC_CAMSS_MCLK0_BCR] = { 0x52014 }, 3943 [GCC_CAMSS_MCLK1_BCR] = { 0x53014 }, 3944 [GCC_CAMSS_GP0_BCR] = { 0x54014 }, 3945 [GCC_CAMSS_GP1_BCR] = { 0x55014 }, 3946 [GCC_CAMSS_TOP_BCR] = { 0x56000 }, 3947 [GCC_CAMSS_MICRO_BCR] = { 0x56008 }, 3948 [GCC_CAMSS_JPEG_BCR] = { 0x57018 }, 3949 [GCC_CAMSS_VFE_BCR] = { 0x58030 }, 3950 [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c }, 3951 [GCC_OXILI_BCR] = { 0x59018 }, 3952 [GCC_GMEM_BCR] = { 0x5902c }, 3953 [GCC_CAMSS_AHB_BCR] = { 0x5a018 }, 3954 [GCC_CAMSS_MCLK2_BCR] = { 0x5c014 }, 3955 [GCC_MDP_TBU_BCR] = { 0x62000 }, 3956 [GCC_GFX_TBU_BCR] = { 0x63000 }, 3957 [GCC_GFX_TCU_BCR] = { 0x64000 }, 3958 [GCC_MSS_TBU_AXI_BCR] = { 0x65000 }, 3959 [GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 }, 3960 [GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 }, 3961 [GCC_GTCU_AHB_BCR] = { 0x68000 }, 3962 [GCC_SMMU_CFG_BCR] = { 0x69000 }, 3963 [GCC_VFE_TBU_BCR] = { 0x6a000 }, 3964 [GCC_VENUS_TBU_BCR] = { 0x6b000 }, 3965 [GCC_JPEG_TBU_BCR] = { 0x6c000 }, 3966 [GCC_PRONTO_TBU_BCR] = { 0x6d000 }, 3967 [GCC_CPP_TBU_BCR] = { 0x6e000 }, 3968 [GCC_MDP_RT_TBU_BCR] = { 0x6f000 }, 3969 [GCC_SMMU_CATS_BCR] = { 0x7c000 }, 3970 }; 3971 3972 static const struct regmap_config gcc_msm8939_regmap_config = { 3973 .reg_bits = 32, 3974 .reg_stride = 4, 3975 .val_bits = 32, 3976 .max_register = 0x80000, 3977 .fast_io = true, 3978 }; 3979 3980 static const struct qcom_cc_desc gcc_msm8939_desc = { 3981 .config = &gcc_msm8939_regmap_config, 3982 .clks = gcc_msm8939_clocks, 3983 .num_clks = ARRAY_SIZE(gcc_msm8939_clocks), 3984 .resets = gcc_msm8939_resets, 3985 .num_resets = ARRAY_SIZE(gcc_msm8939_resets), 3986 .gdscs = gcc_msm8939_gdscs, 3987 .num_gdscs = ARRAY_SIZE(gcc_msm8939_gdscs), 3988 }; 3989 3990 static const struct of_device_id gcc_msm8939_match_table[] = { 3991 { .compatible = "qcom,gcc-msm8939" }, 3992 { } 3993 }; 3994 MODULE_DEVICE_TABLE(of, gcc_msm8939_match_table); 3995 3996 static int gcc_msm8939_probe(struct platform_device *pdev) 3997 { 3998 struct regmap *regmap; 3999 4000 regmap = qcom_cc_map(pdev, &gcc_msm8939_desc); 4001 if (IS_ERR(regmap)) 4002 return PTR_ERR(regmap); 4003 4004 clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true); 4005 clk_pll_configure_sr_hpm_lp(&gpll4, regmap, &gpll4_config, true); 4006 4007 return qcom_cc_really_probe(pdev, &gcc_msm8939_desc, regmap); 4008 } 4009 4010 static struct platform_driver gcc_msm8939_driver = { 4011 .probe = gcc_msm8939_probe, 4012 .driver = { 4013 .name = "gcc-msm8939", 4014 .of_match_table = gcc_msm8939_match_table, 4015 }, 4016 }; 4017 4018 static int __init gcc_msm8939_init(void) 4019 { 4020 return platform_driver_register(&gcc_msm8939_driver); 4021 } 4022 core_initcall(gcc_msm8939_init); 4023 4024 static void __exit gcc_msm8939_exit(void) 4025 { 4026 platform_driver_unregister(&gcc_msm8939_driver); 4027 } 4028 module_exit(gcc_msm8939_exit); 4029 4030 MODULE_DESCRIPTION("Qualcomm GCC MSM8939 Driver"); 4031 MODULE_LICENSE("GPL v2"); 4032