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