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_data = &(const struct clk_parent_data) { 77 .hw = &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_data = &(const struct clk_parent_data) { 108 .hw = &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_data = &(const struct clk_parent_data) { 139 .hw = &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_data = &(const struct clk_parent_data) { 170 .hw = &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_data = &(const struct clk_parent_data) { 201 .hw = &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_data = &(const struct clk_parent_data) { 248 .hw = &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_data = &(const struct clk_parent_data) { 294 .hw = &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_data = &(const struct clk_parent_data) { 325 .hw = &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 static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = { 1037 F(100000000, P_GPLL0, 8, 0, 0), 1038 F(200000000, P_GPLL0, 4, 0, 0), 1039 { } 1040 }; 1041 1042 static struct clk_rcg2 camss_gp0_clk_src = { 1043 .cmd_rcgr = 0x54000, 1044 .mnd_width = 8, 1045 .hid_width = 5, 1046 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1047 .freq_tbl = ftbl_gcc_camss_gp0_1_clk, 1048 .clkr.hw.init = &(struct clk_init_data){ 1049 .name = "camss_gp0_clk_src", 1050 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1051 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1052 .ops = &clk_rcg2_ops, 1053 }, 1054 }; 1055 1056 static struct clk_rcg2 camss_gp1_clk_src = { 1057 .cmd_rcgr = 0x55000, 1058 .mnd_width = 8, 1059 .hid_width = 5, 1060 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1061 .freq_tbl = ftbl_gcc_camss_gp0_1_clk, 1062 .clkr.hw.init = &(struct clk_init_data){ 1063 .name = "camss_gp1_clk_src", 1064 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1065 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1066 .ops = &clk_rcg2_ops, 1067 }, 1068 }; 1069 1070 static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = { 1071 F(133330000, P_GPLL0, 6, 0, 0), 1072 F(266670000, P_GPLL0, 3, 0, 0), 1073 F(320000000, P_GPLL0, 2.5, 0, 0), 1074 { } 1075 }; 1076 1077 static struct clk_rcg2 jpeg0_clk_src = { 1078 .cmd_rcgr = 0x57000, 1079 .hid_width = 5, 1080 .parent_map = gcc_xo_gpll0_map, 1081 .freq_tbl = ftbl_gcc_camss_jpeg0_clk, 1082 .clkr.hw.init = &(struct clk_init_data){ 1083 .name = "jpeg0_clk_src", 1084 .parent_data = gcc_xo_gpll0_parent_data, 1085 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1086 .ops = &clk_rcg2_ops, 1087 }, 1088 }; 1089 1090 static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = { 1091 F(24000000, P_GPLL0, 1, 1, 45), 1092 F(66670000, P_GPLL0, 12, 0, 0), 1093 { } 1094 }; 1095 1096 static struct clk_rcg2 mclk0_clk_src = { 1097 .cmd_rcgr = 0x52000, 1098 .mnd_width = 8, 1099 .hid_width = 5, 1100 .parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map, 1101 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk, 1102 .clkr.hw.init = &(struct clk_init_data){ 1103 .name = "mclk0_clk_src", 1104 .parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data, 1105 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data), 1106 .ops = &clk_rcg2_ops, 1107 }, 1108 }; 1109 1110 static struct clk_rcg2 mclk1_clk_src = { 1111 .cmd_rcgr = 0x53000, 1112 .mnd_width = 8, 1113 .hid_width = 5, 1114 .parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map, 1115 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk, 1116 .clkr.hw.init = &(struct clk_init_data){ 1117 .name = "mclk1_clk_src", 1118 .parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data, 1119 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data), 1120 .ops = &clk_rcg2_ops, 1121 }, 1122 }; 1123 1124 static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = { 1125 F(100000000, P_GPLL0, 8, 0, 0), 1126 F(200000000, P_GPLL0, 4, 0, 0), 1127 { } 1128 }; 1129 1130 static struct clk_rcg2 csi0phytimer_clk_src = { 1131 .cmd_rcgr = 0x4e000, 1132 .hid_width = 5, 1133 .parent_map = gcc_xo_gpll0_gpll1a_map, 1134 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk, 1135 .clkr.hw.init = &(struct clk_init_data){ 1136 .name = "csi0phytimer_clk_src", 1137 .parent_data = gcc_xo_gpll0_gpll1a_parent_data, 1138 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data), 1139 .ops = &clk_rcg2_ops, 1140 }, 1141 }; 1142 1143 static struct clk_rcg2 csi1phytimer_clk_src = { 1144 .cmd_rcgr = 0x4f000, 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 = "csi1phytimer_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 const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = { 1157 F(160000000, P_GPLL0, 5, 0, 0), 1158 F(200000000, P_GPLL0, 4, 0, 0), 1159 F(228570000, P_GPLL0, 3.5, 0, 0), 1160 F(266670000, P_GPLL0, 3, 0, 0), 1161 F(320000000, P_GPLL0, 2.5, 0, 0), 1162 F(465000000, P_GPLL2, 2, 0, 0), 1163 { } 1164 }; 1165 1166 static struct clk_rcg2 cpp_clk_src = { 1167 .cmd_rcgr = 0x58018, 1168 .hid_width = 5, 1169 .parent_map = gcc_xo_gpll0_gpll2_map, 1170 .freq_tbl = ftbl_gcc_camss_cpp_clk, 1171 .clkr.hw.init = &(struct clk_init_data){ 1172 .name = "cpp_clk_src", 1173 .parent_data = gcc_xo_gpll0_gpll2_parent_data, 1174 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_parent_data), 1175 .ops = &clk_rcg2_ops, 1176 }, 1177 }; 1178 1179 static const struct freq_tbl ftbl_gcc_crypto_clk[] = { 1180 F(50000000, P_GPLL0, 16, 0, 0), 1181 F(80000000, P_GPLL0, 10, 0, 0), 1182 F(100000000, P_GPLL0, 8, 0, 0), 1183 F(160000000, P_GPLL0, 5, 0, 0), 1184 { } 1185 }; 1186 1187 /* This is not in the documentation but is in the downstream driver */ 1188 static struct clk_rcg2 crypto_clk_src = { 1189 .cmd_rcgr = 0x16004, 1190 .hid_width = 5, 1191 .parent_map = gcc_xo_gpll0_map, 1192 .freq_tbl = ftbl_gcc_crypto_clk, 1193 .clkr.hw.init = &(struct clk_init_data){ 1194 .name = "crypto_clk_src", 1195 .parent_data = gcc_xo_gpll0_parent_data, 1196 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1197 .ops = &clk_rcg2_ops, 1198 }, 1199 }; 1200 1201 static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = { 1202 F(19200000, P_XO, 1, 0, 0), 1203 { } 1204 }; 1205 1206 static struct clk_rcg2 gp1_clk_src = { 1207 .cmd_rcgr = 0x08004, 1208 .mnd_width = 8, 1209 .hid_width = 5, 1210 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1211 .freq_tbl = ftbl_gcc_gp1_3_clk, 1212 .clkr.hw.init = &(struct clk_init_data){ 1213 .name = "gp1_clk_src", 1214 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1215 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1216 .ops = &clk_rcg2_ops, 1217 }, 1218 }; 1219 1220 static struct clk_rcg2 gp2_clk_src = { 1221 .cmd_rcgr = 0x09004, 1222 .mnd_width = 8, 1223 .hid_width = 5, 1224 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1225 .freq_tbl = ftbl_gcc_gp1_3_clk, 1226 .clkr.hw.init = &(struct clk_init_data){ 1227 .name = "gp2_clk_src", 1228 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1229 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1230 .ops = &clk_rcg2_ops, 1231 }, 1232 }; 1233 1234 static struct clk_rcg2 gp3_clk_src = { 1235 .cmd_rcgr = 0x0a004, 1236 .mnd_width = 8, 1237 .hid_width = 5, 1238 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map, 1239 .freq_tbl = ftbl_gcc_gp1_3_clk, 1240 .clkr.hw.init = &(struct clk_init_data){ 1241 .name = "gp3_clk_src", 1242 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data, 1243 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data), 1244 .ops = &clk_rcg2_ops, 1245 }, 1246 }; 1247 1248 static struct clk_rcg2 byte0_clk_src = { 1249 .cmd_rcgr = 0x4d044, 1250 .hid_width = 5, 1251 .parent_map = gcc_xo_gpll0a_dsibyte_map, 1252 .clkr.hw.init = &(struct clk_init_data){ 1253 .name = "byte0_clk_src", 1254 .parent_data = gcc_xo_gpll0a_dsibyte_parent_data, 1255 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data), 1256 .ops = &clk_byte2_ops, 1257 .flags = CLK_SET_RATE_PARENT, 1258 }, 1259 }; 1260 1261 static struct clk_rcg2 byte1_clk_src = { 1262 .cmd_rcgr = 0x4d0b0, 1263 .hid_width = 5, 1264 .parent_map = gcc_xo_gpll0a_dsibyte_map, 1265 .clkr.hw.init = &(struct clk_init_data){ 1266 .name = "byte1_clk_src", 1267 .parent_data = gcc_xo_gpll0a_dsibyte_parent_data, 1268 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data), 1269 .ops = &clk_byte2_ops, 1270 .flags = CLK_SET_RATE_PARENT, 1271 }, 1272 }; 1273 1274 static const struct freq_tbl ftbl_gcc_mdss_esc_clk[] = { 1275 F(19200000, P_XO, 1, 0, 0), 1276 { } 1277 }; 1278 1279 static struct clk_rcg2 esc0_clk_src = { 1280 .cmd_rcgr = 0x4d060, 1281 .hid_width = 5, 1282 .parent_map = gcc_xo_dsibyte_map, 1283 .freq_tbl = ftbl_gcc_mdss_esc_clk, 1284 .clkr.hw.init = &(struct clk_init_data){ 1285 .name = "esc0_clk_src", 1286 .parent_data = gcc_xo_dsibyte_parent_data, 1287 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data), 1288 .ops = &clk_rcg2_ops, 1289 }, 1290 }; 1291 1292 static struct clk_rcg2 esc1_clk_src = { 1293 .cmd_rcgr = 0x4d0a8, 1294 .hid_width = 5, 1295 .parent_map = gcc_xo_dsibyte_map, 1296 .freq_tbl = ftbl_gcc_mdss_esc_clk, 1297 .clkr.hw.init = &(struct clk_init_data){ 1298 .name = "esc1_clk_src", 1299 .parent_data = gcc_xo_dsibyte_parent_data, 1300 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data), 1301 .ops = &clk_rcg2_ops, 1302 }, 1303 }; 1304 1305 static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = { 1306 F(50000000, P_GPLL0_AUX, 16, 0, 0), 1307 F(80000000, P_GPLL0_AUX, 10, 0, 0), 1308 F(100000000, P_GPLL0_AUX, 8, 0, 0), 1309 F(145500000, P_GPLL0_AUX, 5.5, 0, 0), 1310 F(153600000, P_GPLL0, 4, 0, 0), 1311 F(160000000, P_GPLL0_AUX, 5, 0, 0), 1312 F(177780000, P_GPLL0_AUX, 4.5, 0, 0), 1313 F(200000000, P_GPLL0_AUX, 4, 0, 0), 1314 F(266670000, P_GPLL0_AUX, 3, 0, 0), 1315 F(307200000, P_GPLL1, 2, 0, 0), 1316 F(366670000, P_GPLL3_AUX, 3, 0, 0), 1317 { } 1318 }; 1319 1320 static struct clk_rcg2 mdp_clk_src = { 1321 .cmd_rcgr = 0x4d014, 1322 .hid_width = 5, 1323 .parent_map = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map, 1324 .freq_tbl = ftbl_gcc_mdss_mdp_clk, 1325 .clkr.hw.init = &(struct clk_init_data){ 1326 .name = "mdp_clk_src", 1327 .parent_data = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data, 1328 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data), 1329 .ops = &clk_rcg2_ops, 1330 }, 1331 }; 1332 1333 static struct clk_rcg2 pclk0_clk_src = { 1334 .cmd_rcgr = 0x4d000, 1335 .mnd_width = 8, 1336 .hid_width = 5, 1337 .parent_map = gcc_xo_gpll0a_dsiphy_map, 1338 .clkr.hw.init = &(struct clk_init_data){ 1339 .name = "pclk0_clk_src", 1340 .parent_data = gcc_xo_gpll0a_dsiphy_parent_data, 1341 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data), 1342 .ops = &clk_pixel_ops, 1343 .flags = CLK_SET_RATE_PARENT, 1344 }, 1345 }; 1346 1347 static struct clk_rcg2 pclk1_clk_src = { 1348 .cmd_rcgr = 0x4d0b8, 1349 .mnd_width = 8, 1350 .hid_width = 5, 1351 .parent_map = gcc_xo_gpll0a_dsiphy_map, 1352 .clkr.hw.init = &(struct clk_init_data){ 1353 .name = "pclk1_clk_src", 1354 .parent_data = gcc_xo_gpll0a_dsiphy_parent_data, 1355 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data), 1356 .ops = &clk_pixel_ops, 1357 .flags = CLK_SET_RATE_PARENT, 1358 }, 1359 }; 1360 1361 static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = { 1362 F(19200000, P_XO, 1, 0, 0), 1363 { } 1364 }; 1365 1366 static struct clk_rcg2 vsync_clk_src = { 1367 .cmd_rcgr = 0x4d02c, 1368 .hid_width = 5, 1369 .parent_map = gcc_xo_gpll0a_map, 1370 .freq_tbl = ftbl_gcc_mdss_vsync_clk, 1371 .clkr.hw.init = &(struct clk_init_data){ 1372 .name = "vsync_clk_src", 1373 .parent_data = gcc_xo_gpll0a_parent_data, 1374 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data), 1375 .ops = &clk_rcg2_ops, 1376 }, 1377 }; 1378 1379 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = { 1380 F(64000000, P_GPLL0, 12.5, 0, 0), 1381 { } 1382 }; 1383 1384 /* This is not in the documentation but is in the downstream driver */ 1385 static struct clk_rcg2 pdm2_clk_src = { 1386 .cmd_rcgr = 0x44010, 1387 .hid_width = 5, 1388 .parent_map = gcc_xo_gpll0_map, 1389 .freq_tbl = ftbl_gcc_pdm2_clk, 1390 .clkr.hw.init = &(struct clk_init_data){ 1391 .name = "pdm2_clk_src", 1392 .parent_data = gcc_xo_gpll0_parent_data, 1393 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1394 .ops = &clk_rcg2_ops, 1395 }, 1396 }; 1397 1398 static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = { 1399 F(144000, P_XO, 16, 3, 25), 1400 F(400000, P_XO, 12, 1, 4), 1401 F(20000000, P_GPLL0, 10, 1, 4), 1402 F(25000000, P_GPLL0, 16, 1, 2), 1403 F(50000000, P_GPLL0, 16, 0, 0), 1404 F(100000000, P_GPLL0, 8, 0, 0), 1405 F(177770000, P_GPLL0, 4.5, 0, 0), 1406 F(200000000, P_GPLL0, 4, 0, 0), 1407 { } 1408 }; 1409 1410 static struct clk_rcg2 sdcc1_apps_clk_src = { 1411 .cmd_rcgr = 0x42004, 1412 .mnd_width = 8, 1413 .hid_width = 5, 1414 .parent_map = gcc_xo_gpll0_map, 1415 .freq_tbl = ftbl_gcc_sdcc_apps_clk, 1416 .clkr.hw.init = &(struct clk_init_data){ 1417 .name = "sdcc1_apps_clk_src", 1418 .parent_data = gcc_xo_gpll0_parent_data, 1419 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1420 .ops = &clk_rcg2_floor_ops, 1421 }, 1422 }; 1423 1424 static struct clk_rcg2 sdcc2_apps_clk_src = { 1425 .cmd_rcgr = 0x43004, 1426 .mnd_width = 8, 1427 .hid_width = 5, 1428 .parent_map = gcc_xo_gpll0_map, 1429 .freq_tbl = ftbl_gcc_sdcc_apps_clk, 1430 .clkr.hw.init = &(struct clk_init_data){ 1431 .name = "sdcc2_apps_clk_src", 1432 .parent_data = gcc_xo_gpll0_parent_data, 1433 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1434 .ops = &clk_rcg2_floor_ops, 1435 }, 1436 }; 1437 1438 static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = { 1439 F(154285000, P_GPLL6, 7, 0, 0), 1440 F(320000000, P_GPLL0, 2.5, 0, 0), 1441 F(400000000, P_GPLL0, 2, 0, 0), 1442 { } 1443 }; 1444 1445 static struct clk_rcg2 apss_tcu_clk_src = { 1446 .cmd_rcgr = 0x1207c, 1447 .hid_width = 5, 1448 .parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map, 1449 .freq_tbl = ftbl_gcc_apss_tcu_clk, 1450 .clkr.hw.init = &(struct clk_init_data){ 1451 .name = "apss_tcu_clk_src", 1452 .parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data, 1453 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data), 1454 .ops = &clk_rcg2_ops, 1455 }, 1456 }; 1457 1458 static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = { 1459 F(19200000, P_XO, 1, 0, 0), 1460 F(100000000, P_GPLL0, 8, 0, 0), 1461 F(200000000, P_GPLL0, 4, 0, 0), 1462 F(266500000, P_BIMC, 4, 0, 0), 1463 F(400000000, P_GPLL0, 2, 0, 0), 1464 F(533000000, P_BIMC, 2, 0, 0), 1465 { } 1466 }; 1467 1468 static struct clk_rcg2 bimc_gpu_clk_src = { 1469 .cmd_rcgr = 0x31028, 1470 .hid_width = 5, 1471 .parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map, 1472 .freq_tbl = ftbl_gcc_bimc_gpu_clk, 1473 .clkr.hw.init = &(struct clk_init_data){ 1474 .name = "bimc_gpu_clk_src", 1475 .parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data, 1476 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data), 1477 .flags = CLK_GET_RATE_NOCACHE, 1478 .ops = &clk_rcg2_ops, 1479 }, 1480 }; 1481 1482 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = { 1483 F(57140000, P_GPLL0, 14, 0, 0), 1484 F(80000000, P_GPLL0, 10, 0, 0), 1485 F(100000000, P_GPLL0, 8, 0, 0), 1486 { } 1487 }; 1488 1489 static struct clk_rcg2 usb_hs_system_clk_src = { 1490 .cmd_rcgr = 0x41010, 1491 .hid_width = 5, 1492 .parent_map = gcc_xo_gpll0_map, 1493 .freq_tbl = ftbl_gcc_usb_hs_system_clk, 1494 .clkr.hw.init = &(struct clk_init_data){ 1495 .name = "usb_hs_system_clk_src", 1496 .parent_data = gcc_xo_gpll0_parent_data, 1497 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1498 .ops = &clk_rcg2_ops, 1499 }, 1500 }; 1501 1502 static const struct freq_tbl ftbl_gcc_usb_fs_system_clk[] = { 1503 F(64000000, P_GPLL0, 12.5, 0, 0), 1504 { } 1505 }; 1506 1507 static struct clk_rcg2 usb_fs_system_clk_src = { 1508 .cmd_rcgr = 0x3f010, 1509 .hid_width = 5, 1510 .parent_map = gcc_xo_gpll0_map, 1511 .freq_tbl = ftbl_gcc_usb_fs_system_clk, 1512 .clkr.hw.init = &(struct clk_init_data){ 1513 .name = "usb_fs_system_clk_src", 1514 .parent_data = gcc_xo_gpll6_gpll0_parent_data, 1515 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_parent_data), 1516 .ops = &clk_rcg2_ops, 1517 }, 1518 }; 1519 1520 static const struct freq_tbl ftbl_gcc_usb_fs_ic_clk[] = { 1521 F(60000000, P_GPLL6, 1, 1, 18), 1522 { } 1523 }; 1524 1525 static struct clk_rcg2 usb_fs_ic_clk_src = { 1526 .cmd_rcgr = 0x3f034, 1527 .hid_width = 5, 1528 .parent_map = gcc_xo_gpll0_map, 1529 .freq_tbl = ftbl_gcc_usb_fs_ic_clk, 1530 .clkr.hw.init = &(struct clk_init_data){ 1531 .name = "usb_fs_ic_clk_src", 1532 .parent_data = gcc_xo_gpll6_gpll0a_parent_data, 1533 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0a_parent_data), 1534 .ops = &clk_rcg2_ops, 1535 }, 1536 }; 1537 1538 static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = { 1539 F(3200000, P_XO, 6, 0, 0), 1540 F(6400000, P_XO, 3, 0, 0), 1541 F(9600000, P_XO, 2, 0, 0), 1542 F(19200000, P_XO, 1, 0, 0), 1543 F(40000000, P_GPLL0, 10, 1, 2), 1544 F(66670000, P_GPLL0, 12, 0, 0), 1545 F(80000000, P_GPLL0, 10, 0, 0), 1546 F(100000000, P_GPLL0, 8, 0, 0), 1547 { } 1548 }; 1549 1550 static struct clk_rcg2 ultaudio_ahbfabric_clk_src = { 1551 .cmd_rcgr = 0x1c010, 1552 .hid_width = 5, 1553 .mnd_width = 8, 1554 .parent_map = gcc_xo_gpll0_gpll1_sleep_map, 1555 .freq_tbl = ftbl_gcc_ultaudio_ahb_clk, 1556 .clkr.hw.init = &(struct clk_init_data){ 1557 .name = "ultaudio_ahbfabric_clk_src", 1558 .parent_data = gcc_xo_gpll0_gpll1_sleep_parent_data, 1559 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep_parent_data), 1560 .ops = &clk_rcg2_ops, 1561 }, 1562 }; 1563 1564 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = { 1565 .halt_reg = 0x1c028, 1566 .clkr = { 1567 .enable_reg = 0x1c028, 1568 .enable_mask = BIT(0), 1569 .hw.init = &(struct clk_init_data){ 1570 .name = "gcc_ultaudio_ahbfabric_ixfabric_clk", 1571 .parent_hws = (const struct clk_hw*[]){ 1572 &ultaudio_ahbfabric_clk_src.clkr.hw, 1573 }, 1574 .num_parents = 1, 1575 .flags = CLK_SET_RATE_PARENT, 1576 .ops = &clk_branch2_ops, 1577 }, 1578 }, 1579 }; 1580 1581 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = { 1582 .halt_reg = 0x1c024, 1583 .clkr = { 1584 .enable_reg = 0x1c024, 1585 .enable_mask = BIT(0), 1586 .hw.init = &(struct clk_init_data){ 1587 .name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk", 1588 .parent_hws = (const struct clk_hw*[]){ 1589 &ultaudio_ahbfabric_clk_src.clkr.hw, 1590 }, 1591 .num_parents = 1, 1592 .flags = CLK_SET_RATE_PARENT, 1593 .ops = &clk_branch2_ops, 1594 }, 1595 }, 1596 }; 1597 1598 static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = { 1599 F(128000, P_XO, 10, 1, 15), 1600 F(256000, P_XO, 5, 1, 15), 1601 F(384000, P_XO, 5, 1, 10), 1602 F(512000, P_XO, 5, 2, 15), 1603 F(576000, P_XO, 5, 3, 20), 1604 F(705600, P_GPLL1, 16, 1, 80), 1605 F(768000, P_XO, 5, 1, 5), 1606 F(800000, P_XO, 5, 5, 24), 1607 F(1024000, P_XO, 5, 4, 15), 1608 F(1152000, P_XO, 1, 3, 50), 1609 F(1411200, P_GPLL1, 16, 1, 40), 1610 F(1536000, P_XO, 1, 2, 25), 1611 F(1600000, P_XO, 12, 0, 0), 1612 F(1728000, P_XO, 5, 9, 20), 1613 F(2048000, P_XO, 5, 8, 15), 1614 F(2304000, P_XO, 5, 3, 5), 1615 F(2400000, P_XO, 8, 0, 0), 1616 F(2822400, P_GPLL1, 16, 1, 20), 1617 F(3072000, P_XO, 5, 4, 5), 1618 F(4096000, P_GPLL1, 9, 2, 49), 1619 F(4800000, P_XO, 4, 0, 0), 1620 F(5644800, P_GPLL1, 16, 1, 10), 1621 F(6144000, P_GPLL1, 7, 1, 21), 1622 F(8192000, P_GPLL1, 9, 4, 49), 1623 F(9600000, P_XO, 2, 0, 0), 1624 F(11289600, P_GPLL1, 16, 1, 5), 1625 F(12288000, P_GPLL1, 7, 2, 21), 1626 { } 1627 }; 1628 1629 static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = { 1630 .cmd_rcgr = 0x1c054, 1631 .hid_width = 5, 1632 .mnd_width = 8, 1633 .parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map, 1634 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk, 1635 .clkr.hw.init = &(struct clk_init_data){ 1636 .name = "ultaudio_lpaif_pri_i2s_clk_src", 1637 .parent_data = gcc_xo_gpll1_epi2s_emclk_sleep_parent_data, 1638 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_epi2s_emclk_sleep_parent_data), 1639 .ops = &clk_rcg2_ops, 1640 }, 1641 }; 1642 1643 static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = { 1644 .halt_reg = 0x1c068, 1645 .clkr = { 1646 .enable_reg = 0x1c068, 1647 .enable_mask = BIT(0), 1648 .hw.init = &(struct clk_init_data){ 1649 .name = "gcc_ultaudio_lpaif_pri_i2s_clk", 1650 .parent_hws = (const struct clk_hw*[]){ 1651 &ultaudio_lpaif_pri_i2s_clk_src.clkr.hw, 1652 }, 1653 .num_parents = 1, 1654 .flags = CLK_SET_RATE_PARENT, 1655 .ops = &clk_branch2_ops, 1656 }, 1657 }, 1658 }; 1659 1660 static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = { 1661 .cmd_rcgr = 0x1c06c, 1662 .hid_width = 5, 1663 .mnd_width = 8, 1664 .parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map, 1665 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk, 1666 .clkr.hw.init = &(struct clk_init_data){ 1667 .name = "ultaudio_lpaif_sec_i2s_clk_src", 1668 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data, 1669 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data), 1670 .ops = &clk_rcg2_ops, 1671 }, 1672 }; 1673 1674 static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = { 1675 .halt_reg = 0x1c080, 1676 .clkr = { 1677 .enable_reg = 0x1c080, 1678 .enable_mask = BIT(0), 1679 .hw.init = &(struct clk_init_data){ 1680 .name = "gcc_ultaudio_lpaif_sec_i2s_clk", 1681 .parent_hws = (const struct clk_hw*[]){ 1682 &ultaudio_lpaif_sec_i2s_clk_src.clkr.hw, 1683 }, 1684 .num_parents = 1, 1685 .flags = CLK_SET_RATE_PARENT, 1686 .ops = &clk_branch2_ops, 1687 }, 1688 }, 1689 }; 1690 1691 static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = { 1692 .cmd_rcgr = 0x1c084, 1693 .hid_width = 5, 1694 .mnd_width = 8, 1695 .parent_map = gcc_xo_gpll1_emclk_sleep_map, 1696 .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk, 1697 .clkr.hw.init = &(struct clk_init_data){ 1698 .name = "ultaudio_lpaif_aux_i2s_clk_src", 1699 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data, 1700 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data), 1701 .ops = &clk_rcg2_ops, 1702 }, 1703 }; 1704 1705 static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = { 1706 .halt_reg = 0x1c098, 1707 .clkr = { 1708 .enable_reg = 0x1c098, 1709 .enable_mask = BIT(0), 1710 .hw.init = &(struct clk_init_data){ 1711 .name = "gcc_ultaudio_lpaif_aux_i2s_clk", 1712 .parent_hws = (const struct clk_hw*[]){ 1713 &ultaudio_lpaif_aux_i2s_clk_src.clkr.hw, 1714 }, 1715 .num_parents = 1, 1716 .flags = CLK_SET_RATE_PARENT, 1717 .ops = &clk_branch2_ops, 1718 }, 1719 }, 1720 }; 1721 1722 static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = { 1723 F(19200000, P_XO, 1, 0, 0), 1724 { } 1725 }; 1726 1727 static struct clk_rcg2 ultaudio_xo_clk_src = { 1728 .cmd_rcgr = 0x1c034, 1729 .hid_width = 5, 1730 .parent_map = gcc_xo_sleep_map, 1731 .freq_tbl = ftbl_gcc_ultaudio_xo_clk, 1732 .clkr.hw.init = &(struct clk_init_data){ 1733 .name = "ultaudio_xo_clk_src", 1734 .parent_data = gcc_xo_sleep_parent_data, 1735 .num_parents = ARRAY_SIZE(gcc_xo_sleep_parent_data), 1736 .ops = &clk_rcg2_ops, 1737 }, 1738 }; 1739 1740 static struct clk_branch gcc_ultaudio_avsync_xo_clk = { 1741 .halt_reg = 0x1c04c, 1742 .clkr = { 1743 .enable_reg = 0x1c04c, 1744 .enable_mask = BIT(0), 1745 .hw.init = &(struct clk_init_data){ 1746 .name = "gcc_ultaudio_avsync_xo_clk", 1747 .parent_hws = (const struct clk_hw*[]){ 1748 &ultaudio_xo_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 struct clk_branch gcc_ultaudio_stc_xo_clk = { 1758 .halt_reg = 0x1c050, 1759 .clkr = { 1760 .enable_reg = 0x1c050, 1761 .enable_mask = BIT(0), 1762 .hw.init = &(struct clk_init_data){ 1763 .name = "gcc_ultaudio_stc_xo_clk", 1764 .parent_hws = (const struct clk_hw*[]){ 1765 &ultaudio_xo_clk_src.clkr.hw, 1766 }, 1767 .num_parents = 1, 1768 .flags = CLK_SET_RATE_PARENT, 1769 .ops = &clk_branch2_ops, 1770 }, 1771 }, 1772 }; 1773 1774 static const struct freq_tbl ftbl_codec_clk[] = { 1775 F(9600000, P_XO, 2, 0, 0), 1776 F(12288000, P_XO, 1, 16, 25), 1777 F(19200000, P_XO, 1, 0, 0), 1778 F(11289600, P_EXT_MCLK, 1, 0, 0), 1779 { } 1780 }; 1781 1782 static struct clk_rcg2 codec_digcodec_clk_src = { 1783 .cmd_rcgr = 0x1c09c, 1784 .mnd_width = 8, 1785 .hid_width = 5, 1786 .parent_map = gcc_xo_gpll1_emclk_sleep_map, 1787 .freq_tbl = ftbl_codec_clk, 1788 .clkr.hw.init = &(struct clk_init_data){ 1789 .name = "codec_digcodec_clk_src", 1790 .parent_data = gcc_xo_gpll1_emclk_sleep_parent_data, 1791 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_emclk_sleep_parent_data), 1792 .ops = &clk_rcg2_ops, 1793 }, 1794 }; 1795 1796 static struct clk_branch gcc_codec_digcodec_clk = { 1797 .halt_reg = 0x1c0b0, 1798 .clkr = { 1799 .enable_reg = 0x1c0b0, 1800 .enable_mask = BIT(0), 1801 .hw.init = &(struct clk_init_data){ 1802 .name = "gcc_ultaudio_codec_digcodec_clk", 1803 .parent_hws = (const struct clk_hw*[]){ 1804 &codec_digcodec_clk_src.clkr.hw, 1805 }, 1806 .num_parents = 1, 1807 .flags = CLK_SET_RATE_PARENT, 1808 .ops = &clk_branch2_ops, 1809 }, 1810 }, 1811 }; 1812 1813 static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = { 1814 .halt_reg = 0x1c000, 1815 .clkr = { 1816 .enable_reg = 0x1c000, 1817 .enable_mask = BIT(0), 1818 .hw.init = &(struct clk_init_data){ 1819 .name = "gcc_ultaudio_pcnoc_mport_clk", 1820 .parent_hws = (const struct clk_hw*[]){ 1821 &pcnoc_bfdcd_clk_src.clkr.hw, 1822 }, 1823 .num_parents = 1, 1824 .ops = &clk_branch2_ops, 1825 }, 1826 }, 1827 }; 1828 1829 static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = { 1830 .halt_reg = 0x1c004, 1831 .clkr = { 1832 .enable_reg = 0x1c004, 1833 .enable_mask = BIT(0), 1834 .hw.init = &(struct clk_init_data){ 1835 .name = "gcc_ultaudio_pcnoc_sway_clk", 1836 .parent_hws = (const struct clk_hw*[]){ 1837 &pcnoc_bfdcd_clk_src.clkr.hw, 1838 }, 1839 .num_parents = 1, 1840 .ops = &clk_branch2_ops, 1841 }, 1842 }, 1843 }; 1844 1845 static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = { 1846 F(133330000, P_GPLL0, 6, 0, 0), 1847 F(200000000, P_GPLL0, 4, 0, 0), 1848 F(266670000, P_GPLL0, 3, 0, 0), 1849 { } 1850 }; 1851 1852 static struct clk_rcg2 vcodec0_clk_src = { 1853 .cmd_rcgr = 0x4C000, 1854 .mnd_width = 8, 1855 .hid_width = 5, 1856 .parent_map = gcc_xo_gpll0_map, 1857 .freq_tbl = ftbl_gcc_venus0_vcodec0_clk, 1858 .clkr.hw.init = &(struct clk_init_data){ 1859 .name = "vcodec0_clk_src", 1860 .parent_data = gcc_xo_gpll0_parent_data, 1861 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data), 1862 .ops = &clk_rcg2_ops, 1863 }, 1864 }; 1865 1866 static struct clk_branch gcc_blsp1_ahb_clk = { 1867 .halt_reg = 0x01008, 1868 .halt_check = BRANCH_HALT_VOTED, 1869 .clkr = { 1870 .enable_reg = 0x45004, 1871 .enable_mask = BIT(10), 1872 .hw.init = &(struct clk_init_data){ 1873 .name = "gcc_blsp1_ahb_clk", 1874 .parent_hws = (const struct clk_hw*[]){ 1875 &pcnoc_bfdcd_clk_src.clkr.hw, 1876 }, 1877 .num_parents = 1, 1878 .ops = &clk_branch2_ops, 1879 }, 1880 }, 1881 }; 1882 1883 static struct clk_branch gcc_blsp1_sleep_clk = { 1884 .halt_reg = 0x01004, 1885 .clkr = { 1886 .enable_reg = 0x01004, 1887 .enable_mask = BIT(0), 1888 .hw.init = &(struct clk_init_data){ 1889 .name = "gcc_blsp1_sleep_clk", 1890 .ops = &clk_branch2_ops, 1891 }, 1892 }, 1893 }; 1894 1895 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1896 .halt_reg = 0x02008, 1897 .clkr = { 1898 .enable_reg = 0x02008, 1899 .enable_mask = BIT(0), 1900 .hw.init = &(struct clk_init_data){ 1901 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1902 .parent_hws = (const struct clk_hw*[]){ 1903 &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1904 }, 1905 .num_parents = 1, 1906 .flags = CLK_SET_RATE_PARENT, 1907 .ops = &clk_branch2_ops, 1908 }, 1909 }, 1910 }; 1911 1912 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1913 .halt_reg = 0x02004, 1914 .clkr = { 1915 .enable_reg = 0x02004, 1916 .enable_mask = BIT(0), 1917 .hw.init = &(struct clk_init_data){ 1918 .name = "gcc_blsp1_qup1_spi_apps_clk", 1919 .parent_hws = (const struct clk_hw*[]){ 1920 &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1921 }, 1922 .num_parents = 1, 1923 .flags = CLK_SET_RATE_PARENT, 1924 .ops = &clk_branch2_ops, 1925 }, 1926 }, 1927 }; 1928 1929 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1930 .halt_reg = 0x03010, 1931 .clkr = { 1932 .enable_reg = 0x03010, 1933 .enable_mask = BIT(0), 1934 .hw.init = &(struct clk_init_data){ 1935 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1936 .parent_hws = (const struct clk_hw*[]){ 1937 &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1938 }, 1939 .num_parents = 1, 1940 .flags = CLK_SET_RATE_PARENT, 1941 .ops = &clk_branch2_ops, 1942 }, 1943 }, 1944 }; 1945 1946 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1947 .halt_reg = 0x0300c, 1948 .clkr = { 1949 .enable_reg = 0x0300c, 1950 .enable_mask = BIT(0), 1951 .hw.init = &(struct clk_init_data){ 1952 .name = "gcc_blsp1_qup2_spi_apps_clk", 1953 .parent_hws = (const struct clk_hw*[]){ 1954 &blsp1_qup2_spi_apps_clk_src.clkr.hw, 1955 }, 1956 .num_parents = 1, 1957 .flags = CLK_SET_RATE_PARENT, 1958 .ops = &clk_branch2_ops, 1959 }, 1960 }, 1961 }; 1962 1963 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1964 .halt_reg = 0x04020, 1965 .clkr = { 1966 .enable_reg = 0x04020, 1967 .enable_mask = BIT(0), 1968 .hw.init = &(struct clk_init_data){ 1969 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1970 .parent_hws = (const struct clk_hw*[]){ 1971 &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1972 }, 1973 .num_parents = 1, 1974 .flags = CLK_SET_RATE_PARENT, 1975 .ops = &clk_branch2_ops, 1976 }, 1977 }, 1978 }; 1979 1980 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1981 .halt_reg = 0x0401c, 1982 .clkr = { 1983 .enable_reg = 0x0401c, 1984 .enable_mask = BIT(0), 1985 .hw.init = &(struct clk_init_data){ 1986 .name = "gcc_blsp1_qup3_spi_apps_clk", 1987 .parent_hws = (const struct clk_hw*[]){ 1988 &blsp1_qup3_spi_apps_clk_src.clkr.hw, 1989 }, 1990 .num_parents = 1, 1991 .flags = CLK_SET_RATE_PARENT, 1992 .ops = &clk_branch2_ops, 1993 }, 1994 }, 1995 }; 1996 1997 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1998 .halt_reg = 0x05020, 1999 .clkr = { 2000 .enable_reg = 0x05020, 2001 .enable_mask = BIT(0), 2002 .hw.init = &(struct clk_init_data){ 2003 .name = "gcc_blsp1_qup4_i2c_apps_clk", 2004 .parent_hws = (const struct clk_hw*[]){ 2005 &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 2006 }, 2007 .num_parents = 1, 2008 .flags = CLK_SET_RATE_PARENT, 2009 .ops = &clk_branch2_ops, 2010 }, 2011 }, 2012 }; 2013 2014 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 2015 .halt_reg = 0x0501c, 2016 .clkr = { 2017 .enable_reg = 0x0501c, 2018 .enable_mask = BIT(0), 2019 .hw.init = &(struct clk_init_data){ 2020 .name = "gcc_blsp1_qup4_spi_apps_clk", 2021 .parent_hws = (const struct clk_hw*[]){ 2022 &blsp1_qup4_spi_apps_clk_src.clkr.hw, 2023 }, 2024 .num_parents = 1, 2025 .flags = CLK_SET_RATE_PARENT, 2026 .ops = &clk_branch2_ops, 2027 }, 2028 }, 2029 }; 2030 2031 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 2032 .halt_reg = 0x06020, 2033 .clkr = { 2034 .enable_reg = 0x06020, 2035 .enable_mask = BIT(0), 2036 .hw.init = &(struct clk_init_data){ 2037 .name = "gcc_blsp1_qup5_i2c_apps_clk", 2038 .parent_hws = (const struct clk_hw*[]){ 2039 &blsp1_qup5_i2c_apps_clk_src.clkr.hw, 2040 }, 2041 .num_parents = 1, 2042 .flags = CLK_SET_RATE_PARENT, 2043 .ops = &clk_branch2_ops, 2044 }, 2045 }, 2046 }; 2047 2048 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 2049 .halt_reg = 0x0601c, 2050 .clkr = { 2051 .enable_reg = 0x0601c, 2052 .enable_mask = BIT(0), 2053 .hw.init = &(struct clk_init_data){ 2054 .name = "gcc_blsp1_qup5_spi_apps_clk", 2055 .parent_hws = (const struct clk_hw*[]){ 2056 &blsp1_qup5_spi_apps_clk_src.clkr.hw, 2057 }, 2058 .num_parents = 1, 2059 .flags = CLK_SET_RATE_PARENT, 2060 .ops = &clk_branch2_ops, 2061 }, 2062 }, 2063 }; 2064 2065 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { 2066 .halt_reg = 0x07020, 2067 .clkr = { 2068 .enable_reg = 0x07020, 2069 .enable_mask = BIT(0), 2070 .hw.init = &(struct clk_init_data){ 2071 .name = "gcc_blsp1_qup6_i2c_apps_clk", 2072 .parent_hws = (const struct clk_hw*[]){ 2073 &blsp1_qup6_i2c_apps_clk_src.clkr.hw, 2074 }, 2075 .num_parents = 1, 2076 .flags = CLK_SET_RATE_PARENT, 2077 .ops = &clk_branch2_ops, 2078 }, 2079 }, 2080 }; 2081 2082 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 2083 .halt_reg = 0x0701c, 2084 .clkr = { 2085 .enable_reg = 0x0701c, 2086 .enable_mask = BIT(0), 2087 .hw.init = &(struct clk_init_data){ 2088 .name = "gcc_blsp1_qup6_spi_apps_clk", 2089 .parent_hws = (const struct clk_hw*[]){ 2090 &blsp1_qup6_spi_apps_clk_src.clkr.hw, 2091 }, 2092 .num_parents = 1, 2093 .flags = CLK_SET_RATE_PARENT, 2094 .ops = &clk_branch2_ops, 2095 }, 2096 }, 2097 }; 2098 2099 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 2100 .halt_reg = 0x0203c, 2101 .clkr = { 2102 .enable_reg = 0x0203c, 2103 .enable_mask = BIT(0), 2104 .hw.init = &(struct clk_init_data){ 2105 .name = "gcc_blsp1_uart1_apps_clk", 2106 .parent_hws = (const struct clk_hw*[]){ 2107 &blsp1_uart1_apps_clk_src.clkr.hw, 2108 }, 2109 .num_parents = 1, 2110 .flags = CLK_SET_RATE_PARENT, 2111 .ops = &clk_branch2_ops, 2112 }, 2113 }, 2114 }; 2115 2116 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 2117 .halt_reg = 0x0302c, 2118 .clkr = { 2119 .enable_reg = 0x0302c, 2120 .enable_mask = BIT(0), 2121 .hw.init = &(struct clk_init_data){ 2122 .name = "gcc_blsp1_uart2_apps_clk", 2123 .parent_hws = (const struct clk_hw*[]){ 2124 &blsp1_uart2_apps_clk_src.clkr.hw, 2125 }, 2126 .num_parents = 1, 2127 .flags = CLK_SET_RATE_PARENT, 2128 .ops = &clk_branch2_ops, 2129 }, 2130 }, 2131 }; 2132 2133 static struct clk_branch gcc_boot_rom_ahb_clk = { 2134 .halt_reg = 0x1300c, 2135 .halt_check = BRANCH_HALT_VOTED, 2136 .clkr = { 2137 .enable_reg = 0x45004, 2138 .enable_mask = BIT(7), 2139 .hw.init = &(struct clk_init_data){ 2140 .name = "gcc_boot_rom_ahb_clk", 2141 .parent_hws = (const struct clk_hw*[]){ 2142 &pcnoc_bfdcd_clk_src.clkr.hw, 2143 }, 2144 .num_parents = 1, 2145 .ops = &clk_branch2_ops, 2146 }, 2147 }, 2148 }; 2149 2150 static struct clk_branch gcc_camss_cci_ahb_clk = { 2151 .halt_reg = 0x5101c, 2152 .clkr = { 2153 .enable_reg = 0x5101c, 2154 .enable_mask = BIT(0), 2155 .hw.init = &(struct clk_init_data){ 2156 .name = "gcc_camss_cci_ahb_clk", 2157 .parent_hws = (const struct clk_hw*[]){ 2158 &camss_ahb_clk_src.clkr.hw, 2159 }, 2160 .num_parents = 1, 2161 .flags = CLK_SET_RATE_PARENT, 2162 .ops = &clk_branch2_ops, 2163 }, 2164 }, 2165 }; 2166 2167 static struct clk_branch gcc_camss_cci_clk = { 2168 .halt_reg = 0x51018, 2169 .clkr = { 2170 .enable_reg = 0x51018, 2171 .enable_mask = BIT(0), 2172 .hw.init = &(struct clk_init_data){ 2173 .name = "gcc_camss_cci_clk", 2174 .parent_hws = (const struct clk_hw*[]){ 2175 &cci_clk_src.clkr.hw, 2176 }, 2177 .num_parents = 1, 2178 .flags = CLK_SET_RATE_PARENT, 2179 .ops = &clk_branch2_ops, 2180 }, 2181 }, 2182 }; 2183 2184 static struct clk_branch gcc_camss_csi0_ahb_clk = { 2185 .halt_reg = 0x4e040, 2186 .clkr = { 2187 .enable_reg = 0x4e040, 2188 .enable_mask = BIT(0), 2189 .hw.init = &(struct clk_init_data){ 2190 .name = "gcc_camss_csi0_ahb_clk", 2191 .parent_hws = (const struct clk_hw*[]){ 2192 &camss_ahb_clk_src.clkr.hw, 2193 }, 2194 .num_parents = 1, 2195 .flags = CLK_SET_RATE_PARENT, 2196 .ops = &clk_branch2_ops, 2197 }, 2198 }, 2199 }; 2200 2201 static struct clk_branch gcc_camss_csi0_clk = { 2202 .halt_reg = 0x4e03c, 2203 .clkr = { 2204 .enable_reg = 0x4e03c, 2205 .enable_mask = BIT(0), 2206 .hw.init = &(struct clk_init_data){ 2207 .name = "gcc_camss_csi0_clk", 2208 .parent_hws = (const struct clk_hw*[]){ 2209 &csi0_clk_src.clkr.hw, 2210 }, 2211 .num_parents = 1, 2212 .flags = CLK_SET_RATE_PARENT, 2213 .ops = &clk_branch2_ops, 2214 }, 2215 }, 2216 }; 2217 2218 static struct clk_branch gcc_camss_csi0phy_clk = { 2219 .halt_reg = 0x4e048, 2220 .clkr = { 2221 .enable_reg = 0x4e048, 2222 .enable_mask = BIT(0), 2223 .hw.init = &(struct clk_init_data){ 2224 .name = "gcc_camss_csi0phy_clk", 2225 .parent_hws = (const struct clk_hw*[]){ 2226 &csi0_clk_src.clkr.hw, 2227 }, 2228 .num_parents = 1, 2229 .flags = CLK_SET_RATE_PARENT, 2230 .ops = &clk_branch2_ops, 2231 }, 2232 }, 2233 }; 2234 2235 static struct clk_branch gcc_camss_csi0pix_clk = { 2236 .halt_reg = 0x4e058, 2237 .clkr = { 2238 .enable_reg = 0x4e058, 2239 .enable_mask = BIT(0), 2240 .hw.init = &(struct clk_init_data){ 2241 .name = "gcc_camss_csi0pix_clk", 2242 .parent_hws = (const struct clk_hw*[]){ 2243 &csi0_clk_src.clkr.hw, 2244 }, 2245 .num_parents = 1, 2246 .flags = CLK_SET_RATE_PARENT, 2247 .ops = &clk_branch2_ops, 2248 }, 2249 }, 2250 }; 2251 2252 static struct clk_branch gcc_camss_csi0rdi_clk = { 2253 .halt_reg = 0x4e050, 2254 .clkr = { 2255 .enable_reg = 0x4e050, 2256 .enable_mask = BIT(0), 2257 .hw.init = &(struct clk_init_data){ 2258 .name = "gcc_camss_csi0rdi_clk", 2259 .parent_hws = (const struct clk_hw*[]){ 2260 &csi0_clk_src.clkr.hw, 2261 }, 2262 .num_parents = 1, 2263 .flags = CLK_SET_RATE_PARENT, 2264 .ops = &clk_branch2_ops, 2265 }, 2266 }, 2267 }; 2268 2269 static struct clk_branch gcc_camss_csi1_ahb_clk = { 2270 .halt_reg = 0x4f040, 2271 .clkr = { 2272 .enable_reg = 0x4f040, 2273 .enable_mask = BIT(0), 2274 .hw.init = &(struct clk_init_data){ 2275 .name = "gcc_camss_csi1_ahb_clk", 2276 .parent_hws = (const struct clk_hw*[]){ 2277 &camss_ahb_clk_src.clkr.hw, 2278 }, 2279 .num_parents = 1, 2280 .flags = CLK_SET_RATE_PARENT, 2281 .ops = &clk_branch2_ops, 2282 }, 2283 }, 2284 }; 2285 2286 static struct clk_branch gcc_camss_csi1_clk = { 2287 .halt_reg = 0x4f03c, 2288 .clkr = { 2289 .enable_reg = 0x4f03c, 2290 .enable_mask = BIT(0), 2291 .hw.init = &(struct clk_init_data){ 2292 .name = "gcc_camss_csi1_clk", 2293 .parent_hws = (const struct clk_hw*[]){ 2294 &csi1_clk_src.clkr.hw, 2295 }, 2296 .num_parents = 1, 2297 .flags = CLK_SET_RATE_PARENT, 2298 .ops = &clk_branch2_ops, 2299 }, 2300 }, 2301 }; 2302 2303 static struct clk_branch gcc_camss_csi1phy_clk = { 2304 .halt_reg = 0x4f048, 2305 .clkr = { 2306 .enable_reg = 0x4f048, 2307 .enable_mask = BIT(0), 2308 .hw.init = &(struct clk_init_data){ 2309 .name = "gcc_camss_csi1phy_clk", 2310 .parent_hws = (const struct clk_hw*[]){ 2311 &csi1_clk_src.clkr.hw, 2312 }, 2313 .num_parents = 1, 2314 .flags = CLK_SET_RATE_PARENT, 2315 .ops = &clk_branch2_ops, 2316 }, 2317 }, 2318 }; 2319 2320 static struct clk_branch gcc_camss_csi1pix_clk = { 2321 .halt_reg = 0x4f058, 2322 .clkr = { 2323 .enable_reg = 0x4f058, 2324 .enable_mask = BIT(0), 2325 .hw.init = &(struct clk_init_data){ 2326 .name = "gcc_camss_csi1pix_clk", 2327 .parent_hws = (const struct clk_hw*[]){ 2328 &csi1_clk_src.clkr.hw, 2329 }, 2330 .num_parents = 1, 2331 .flags = CLK_SET_RATE_PARENT, 2332 .ops = &clk_branch2_ops, 2333 }, 2334 }, 2335 }; 2336 2337 static struct clk_branch gcc_camss_csi1rdi_clk = { 2338 .halt_reg = 0x4f050, 2339 .clkr = { 2340 .enable_reg = 0x4f050, 2341 .enable_mask = BIT(0), 2342 .hw.init = &(struct clk_init_data){ 2343 .name = "gcc_camss_csi1rdi_clk", 2344 .parent_hws = (const struct clk_hw*[]){ 2345 &csi1_clk_src.clkr.hw, 2346 }, 2347 .num_parents = 1, 2348 .flags = CLK_SET_RATE_PARENT, 2349 .ops = &clk_branch2_ops, 2350 }, 2351 }, 2352 }; 2353 2354 static struct clk_branch gcc_camss_csi_vfe0_clk = { 2355 .halt_reg = 0x58050, 2356 .clkr = { 2357 .enable_reg = 0x58050, 2358 .enable_mask = BIT(0), 2359 .hw.init = &(struct clk_init_data){ 2360 .name = "gcc_camss_csi_vfe0_clk", 2361 .parent_hws = (const struct clk_hw*[]){ 2362 &vfe0_clk_src.clkr.hw, 2363 }, 2364 .num_parents = 1, 2365 .flags = CLK_SET_RATE_PARENT, 2366 .ops = &clk_branch2_ops, 2367 }, 2368 }, 2369 }; 2370 2371 static struct clk_branch gcc_camss_gp0_clk = { 2372 .halt_reg = 0x54018, 2373 .clkr = { 2374 .enable_reg = 0x54018, 2375 .enable_mask = BIT(0), 2376 .hw.init = &(struct clk_init_data){ 2377 .name = "gcc_camss_gp0_clk", 2378 .parent_hws = (const struct clk_hw*[]){ 2379 &camss_gp0_clk_src.clkr.hw, 2380 }, 2381 .num_parents = 1, 2382 .flags = CLK_SET_RATE_PARENT, 2383 .ops = &clk_branch2_ops, 2384 }, 2385 }, 2386 }; 2387 2388 static struct clk_branch gcc_camss_gp1_clk = { 2389 .halt_reg = 0x55018, 2390 .clkr = { 2391 .enable_reg = 0x55018, 2392 .enable_mask = BIT(0), 2393 .hw.init = &(struct clk_init_data){ 2394 .name = "gcc_camss_gp1_clk", 2395 .parent_hws = (const struct clk_hw*[]){ 2396 &camss_gp1_clk_src.clkr.hw, 2397 }, 2398 .num_parents = 1, 2399 .flags = CLK_SET_RATE_PARENT, 2400 .ops = &clk_branch2_ops, 2401 }, 2402 }, 2403 }; 2404 2405 static struct clk_branch gcc_camss_ispif_ahb_clk = { 2406 .halt_reg = 0x50004, 2407 .clkr = { 2408 .enable_reg = 0x50004, 2409 .enable_mask = BIT(0), 2410 .hw.init = &(struct clk_init_data){ 2411 .name = "gcc_camss_ispif_ahb_clk", 2412 .parent_hws = (const struct clk_hw*[]){ 2413 &camss_ahb_clk_src.clkr.hw, 2414 }, 2415 .num_parents = 1, 2416 .flags = CLK_SET_RATE_PARENT, 2417 .ops = &clk_branch2_ops, 2418 }, 2419 }, 2420 }; 2421 2422 static struct clk_branch gcc_camss_jpeg0_clk = { 2423 .halt_reg = 0x57020, 2424 .clkr = { 2425 .enable_reg = 0x57020, 2426 .enable_mask = BIT(0), 2427 .hw.init = &(struct clk_init_data){ 2428 .name = "gcc_camss_jpeg0_clk", 2429 .parent_hws = (const struct clk_hw*[]){ 2430 &jpeg0_clk_src.clkr.hw, 2431 }, 2432 .num_parents = 1, 2433 .flags = CLK_SET_RATE_PARENT, 2434 .ops = &clk_branch2_ops, 2435 }, 2436 }, 2437 }; 2438 2439 static struct clk_branch gcc_camss_jpeg_ahb_clk = { 2440 .halt_reg = 0x57024, 2441 .clkr = { 2442 .enable_reg = 0x57024, 2443 .enable_mask = BIT(0), 2444 .hw.init = &(struct clk_init_data){ 2445 .name = "gcc_camss_jpeg_ahb_clk", 2446 .parent_hws = (const struct clk_hw*[]){ 2447 &camss_ahb_clk_src.clkr.hw, 2448 }, 2449 .num_parents = 1, 2450 .flags = CLK_SET_RATE_PARENT, 2451 .ops = &clk_branch2_ops, 2452 }, 2453 }, 2454 }; 2455 2456 static struct clk_branch gcc_camss_jpeg_axi_clk = { 2457 .halt_reg = 0x57028, 2458 .clkr = { 2459 .enable_reg = 0x57028, 2460 .enable_mask = BIT(0), 2461 .hw.init = &(struct clk_init_data){ 2462 .name = "gcc_camss_jpeg_axi_clk", 2463 .parent_hws = (const struct clk_hw*[]){ 2464 &system_mm_noc_bfdcd_clk_src.clkr.hw, 2465 }, 2466 .num_parents = 1, 2467 .flags = CLK_SET_RATE_PARENT, 2468 .ops = &clk_branch2_ops, 2469 }, 2470 }, 2471 }; 2472 2473 static struct clk_branch gcc_camss_mclk0_clk = { 2474 .halt_reg = 0x52018, 2475 .clkr = { 2476 .enable_reg = 0x52018, 2477 .enable_mask = BIT(0), 2478 .hw.init = &(struct clk_init_data){ 2479 .name = "gcc_camss_mclk0_clk", 2480 .parent_hws = (const struct clk_hw*[]){ 2481 &mclk0_clk_src.clkr.hw, 2482 }, 2483 .num_parents = 1, 2484 .flags = CLK_SET_RATE_PARENT, 2485 .ops = &clk_branch2_ops, 2486 }, 2487 }, 2488 }; 2489 2490 static struct clk_branch gcc_camss_mclk1_clk = { 2491 .halt_reg = 0x53018, 2492 .clkr = { 2493 .enable_reg = 0x53018, 2494 .enable_mask = BIT(0), 2495 .hw.init = &(struct clk_init_data){ 2496 .name = "gcc_camss_mclk1_clk", 2497 .parent_hws = (const struct clk_hw*[]){ 2498 &mclk1_clk_src.clkr.hw, 2499 }, 2500 .num_parents = 1, 2501 .flags = CLK_SET_RATE_PARENT, 2502 .ops = &clk_branch2_ops, 2503 }, 2504 }, 2505 }; 2506 2507 static struct clk_branch gcc_camss_micro_ahb_clk = { 2508 .halt_reg = 0x5600c, 2509 .clkr = { 2510 .enable_reg = 0x5600c, 2511 .enable_mask = BIT(0), 2512 .hw.init = &(struct clk_init_data){ 2513 .name = "gcc_camss_micro_ahb_clk", 2514 .parent_hws = (const struct clk_hw*[]){ 2515 &camss_ahb_clk_src.clkr.hw, 2516 }, 2517 .num_parents = 1, 2518 .flags = CLK_SET_RATE_PARENT, 2519 .ops = &clk_branch2_ops, 2520 }, 2521 }, 2522 }; 2523 2524 static struct clk_branch gcc_camss_csi0phytimer_clk = { 2525 .halt_reg = 0x4e01c, 2526 .clkr = { 2527 .enable_reg = 0x4e01c, 2528 .enable_mask = BIT(0), 2529 .hw.init = &(struct clk_init_data){ 2530 .name = "gcc_camss_csi0phytimer_clk", 2531 .parent_hws = (const struct clk_hw*[]){ 2532 &csi0phytimer_clk_src.clkr.hw, 2533 }, 2534 .num_parents = 1, 2535 .flags = CLK_SET_RATE_PARENT, 2536 .ops = &clk_branch2_ops, 2537 }, 2538 }, 2539 }; 2540 2541 static struct clk_branch gcc_camss_csi1phytimer_clk = { 2542 .halt_reg = 0x4f01c, 2543 .clkr = { 2544 .enable_reg = 0x4f01c, 2545 .enable_mask = BIT(0), 2546 .hw.init = &(struct clk_init_data){ 2547 .name = "gcc_camss_csi1phytimer_clk", 2548 .parent_hws = (const struct clk_hw*[]){ 2549 &csi1phytimer_clk_src.clkr.hw, 2550 }, 2551 .num_parents = 1, 2552 .flags = CLK_SET_RATE_PARENT, 2553 .ops = &clk_branch2_ops, 2554 }, 2555 }, 2556 }; 2557 2558 static struct clk_branch gcc_camss_ahb_clk = { 2559 .halt_reg = 0x5a014, 2560 .clkr = { 2561 .enable_reg = 0x5a014, 2562 .enable_mask = BIT(0), 2563 .hw.init = &(struct clk_init_data){ 2564 .name = "gcc_camss_ahb_clk", 2565 .parent_hws = (const struct clk_hw*[]){ 2566 &camss_ahb_clk_src.clkr.hw, 2567 }, 2568 .num_parents = 1, 2569 .flags = CLK_SET_RATE_PARENT, 2570 .ops = &clk_branch2_ops, 2571 }, 2572 }, 2573 }; 2574 2575 static struct clk_branch gcc_camss_top_ahb_clk = { 2576 .halt_reg = 0x56004, 2577 .clkr = { 2578 .enable_reg = 0x56004, 2579 .enable_mask = BIT(0), 2580 .hw.init = &(struct clk_init_data){ 2581 .name = "gcc_camss_top_ahb_clk", 2582 .parent_hws = (const struct clk_hw*[]){ 2583 &pcnoc_bfdcd_clk_src.clkr.hw, 2584 }, 2585 .num_parents = 1, 2586 .flags = CLK_SET_RATE_PARENT, 2587 .ops = &clk_branch2_ops, 2588 }, 2589 }, 2590 }; 2591 2592 static struct clk_branch gcc_camss_cpp_ahb_clk = { 2593 .halt_reg = 0x58040, 2594 .clkr = { 2595 .enable_reg = 0x58040, 2596 .enable_mask = BIT(0), 2597 .hw.init = &(struct clk_init_data){ 2598 .name = "gcc_camss_cpp_ahb_clk", 2599 .parent_hws = (const struct clk_hw*[]){ 2600 &camss_ahb_clk_src.clkr.hw, 2601 }, 2602 .num_parents = 1, 2603 .flags = CLK_SET_RATE_PARENT, 2604 .ops = &clk_branch2_ops, 2605 }, 2606 }, 2607 }; 2608 2609 static struct clk_branch gcc_camss_cpp_clk = { 2610 .halt_reg = 0x5803c, 2611 .clkr = { 2612 .enable_reg = 0x5803c, 2613 .enable_mask = BIT(0), 2614 .hw.init = &(struct clk_init_data){ 2615 .name = "gcc_camss_cpp_clk", 2616 .parent_hws = (const struct clk_hw*[]){ 2617 &cpp_clk_src.clkr.hw, 2618 }, 2619 .num_parents = 1, 2620 .flags = CLK_SET_RATE_PARENT, 2621 .ops = &clk_branch2_ops, 2622 }, 2623 }, 2624 }; 2625 2626 static struct clk_branch gcc_camss_vfe0_clk = { 2627 .halt_reg = 0x58038, 2628 .clkr = { 2629 .enable_reg = 0x58038, 2630 .enable_mask = BIT(0), 2631 .hw.init = &(struct clk_init_data){ 2632 .name = "gcc_camss_vfe0_clk", 2633 .parent_hws = (const struct clk_hw*[]){ 2634 &vfe0_clk_src.clkr.hw, 2635 }, 2636 .num_parents = 1, 2637 .flags = CLK_SET_RATE_PARENT, 2638 .ops = &clk_branch2_ops, 2639 }, 2640 }, 2641 }; 2642 2643 static struct clk_branch gcc_camss_vfe_ahb_clk = { 2644 .halt_reg = 0x58044, 2645 .clkr = { 2646 .enable_reg = 0x58044, 2647 .enable_mask = BIT(0), 2648 .hw.init = &(struct clk_init_data){ 2649 .name = "gcc_camss_vfe_ahb_clk", 2650 .parent_hws = (const struct clk_hw*[]){ 2651 &camss_ahb_clk_src.clkr.hw, 2652 }, 2653 .num_parents = 1, 2654 .flags = CLK_SET_RATE_PARENT, 2655 .ops = &clk_branch2_ops, 2656 }, 2657 }, 2658 }; 2659 2660 static struct clk_branch gcc_camss_vfe_axi_clk = { 2661 .halt_reg = 0x58048, 2662 .clkr = { 2663 .enable_reg = 0x58048, 2664 .enable_mask = BIT(0), 2665 .hw.init = &(struct clk_init_data){ 2666 .name = "gcc_camss_vfe_axi_clk", 2667 .parent_hws = (const struct clk_hw*[]){ 2668 &system_mm_noc_bfdcd_clk_src.clkr.hw, 2669 }, 2670 .num_parents = 1, 2671 .flags = CLK_SET_RATE_PARENT, 2672 .ops = &clk_branch2_ops, 2673 }, 2674 }, 2675 }; 2676 2677 static struct clk_branch gcc_crypto_ahb_clk = { 2678 .halt_reg = 0x16024, 2679 .halt_check = BRANCH_HALT_VOTED, 2680 .clkr = { 2681 .enable_reg = 0x45004, 2682 .enable_mask = BIT(0), 2683 .hw.init = &(struct clk_init_data){ 2684 .name = "gcc_crypto_ahb_clk", 2685 .parent_hws = (const struct clk_hw*[]){ 2686 &pcnoc_bfdcd_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_crypto_axi_clk = { 2696 .halt_reg = 0x16020, 2697 .halt_check = BRANCH_HALT_VOTED, 2698 .clkr = { 2699 .enable_reg = 0x45004, 2700 .enable_mask = BIT(1), 2701 .hw.init = &(struct clk_init_data){ 2702 .name = "gcc_crypto_axi_clk", 2703 .parent_hws = (const struct clk_hw*[]){ 2704 &pcnoc_bfdcd_clk_src.clkr.hw, 2705 }, 2706 .num_parents = 1, 2707 .flags = CLK_SET_RATE_PARENT, 2708 .ops = &clk_branch2_ops, 2709 }, 2710 }, 2711 }; 2712 2713 static struct clk_branch gcc_crypto_clk = { 2714 .halt_reg = 0x1601c, 2715 .halt_check = BRANCH_HALT_VOTED, 2716 .clkr = { 2717 .enable_reg = 0x45004, 2718 .enable_mask = BIT(2), 2719 .hw.init = &(struct clk_init_data){ 2720 .name = "gcc_crypto_clk", 2721 .parent_hws = (const struct clk_hw*[]){ 2722 &crypto_clk_src.clkr.hw, 2723 }, 2724 .num_parents = 1, 2725 .flags = CLK_SET_RATE_PARENT, 2726 .ops = &clk_branch2_ops, 2727 }, 2728 }, 2729 }; 2730 2731 static struct clk_branch gcc_oxili_gmem_clk = { 2732 .halt_reg = 0x59024, 2733 .clkr = { 2734 .enable_reg = 0x59024, 2735 .enable_mask = BIT(0), 2736 .hw.init = &(struct clk_init_data){ 2737 .name = "gcc_oxili_gmem_clk", 2738 .parent_hws = (const struct clk_hw*[]){ 2739 &gfx3d_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_gp1_clk = { 2749 .halt_reg = 0x08000, 2750 .clkr = { 2751 .enable_reg = 0x08000, 2752 .enable_mask = BIT(0), 2753 .hw.init = &(struct clk_init_data){ 2754 .name = "gcc_gp1_clk", 2755 .parent_hws = (const struct clk_hw*[]){ 2756 &gp1_clk_src.clkr.hw, 2757 }, 2758 .num_parents = 1, 2759 .flags = CLK_SET_RATE_PARENT, 2760 .ops = &clk_branch2_ops, 2761 }, 2762 }, 2763 }; 2764 2765 static struct clk_branch gcc_gp2_clk = { 2766 .halt_reg = 0x09000, 2767 .clkr = { 2768 .enable_reg = 0x09000, 2769 .enable_mask = BIT(0), 2770 .hw.init = &(struct clk_init_data){ 2771 .name = "gcc_gp2_clk", 2772 .parent_hws = (const struct clk_hw*[]){ 2773 &gp2_clk_src.clkr.hw, 2774 }, 2775 .num_parents = 1, 2776 .flags = CLK_SET_RATE_PARENT, 2777 .ops = &clk_branch2_ops, 2778 }, 2779 }, 2780 }; 2781 2782 static struct clk_branch gcc_gp3_clk = { 2783 .halt_reg = 0x0a000, 2784 .clkr = { 2785 .enable_reg = 0x0a000, 2786 .enable_mask = BIT(0), 2787 .hw.init = &(struct clk_init_data){ 2788 .name = "gcc_gp3_clk", 2789 .parent_hws = (const struct clk_hw*[]){ 2790 &gp3_clk_src.clkr.hw, 2791 }, 2792 .num_parents = 1, 2793 .flags = CLK_SET_RATE_PARENT, 2794 .ops = &clk_branch2_ops, 2795 }, 2796 }, 2797 }; 2798 2799 static struct clk_branch gcc_mdss_ahb_clk = { 2800 .halt_reg = 0x4d07c, 2801 .clkr = { 2802 .enable_reg = 0x4d07c, 2803 .enable_mask = BIT(0), 2804 .hw.init = &(struct clk_init_data){ 2805 .name = "gcc_mdss_ahb_clk", 2806 .parent_hws = (const struct clk_hw*[]){ 2807 &pcnoc_bfdcd_clk_src.clkr.hw, 2808 }, 2809 .num_parents = 1, 2810 .flags = CLK_SET_RATE_PARENT, 2811 .ops = &clk_branch2_ops, 2812 }, 2813 }, 2814 }; 2815 2816 static struct clk_branch gcc_mdss_axi_clk = { 2817 .halt_reg = 0x4d080, 2818 .clkr = { 2819 .enable_reg = 0x4d080, 2820 .enable_mask = BIT(0), 2821 .hw.init = &(struct clk_init_data){ 2822 .name = "gcc_mdss_axi_clk", 2823 .parent_hws = (const struct clk_hw*[]){ 2824 &system_mm_noc_bfdcd_clk_src.clkr.hw, 2825 }, 2826 .num_parents = 1, 2827 .flags = CLK_SET_RATE_PARENT, 2828 .ops = &clk_branch2_ops, 2829 }, 2830 }, 2831 }; 2832 2833 static struct clk_branch gcc_mdss_byte0_clk = { 2834 .halt_reg = 0x4d094, 2835 .clkr = { 2836 .enable_reg = 0x4d094, 2837 .enable_mask = BIT(0), 2838 .hw.init = &(struct clk_init_data){ 2839 .name = "gcc_mdss_byte0_clk", 2840 .parent_hws = (const struct clk_hw*[]){ 2841 &byte0_clk_src.clkr.hw, 2842 }, 2843 .num_parents = 1, 2844 .flags = CLK_SET_RATE_PARENT, 2845 .ops = &clk_branch2_ops, 2846 }, 2847 }, 2848 }; 2849 2850 static struct clk_branch gcc_mdss_byte1_clk = { 2851 .halt_reg = 0x4d0a0, 2852 .clkr = { 2853 .enable_reg = 0x4d0a0, 2854 .enable_mask = BIT(0), 2855 .hw.init = &(struct clk_init_data){ 2856 .name = "gcc_mdss_byte1_clk", 2857 .parent_hws = (const struct clk_hw*[]){ 2858 &byte1_clk_src.clkr.hw, 2859 }, 2860 .num_parents = 1, 2861 .flags = CLK_SET_RATE_PARENT, 2862 .ops = &clk_branch2_ops, 2863 }, 2864 }, 2865 }; 2866 2867 static struct clk_branch gcc_mdss_esc0_clk = { 2868 .halt_reg = 0x4d098, 2869 .clkr = { 2870 .enable_reg = 0x4d098, 2871 .enable_mask = BIT(0), 2872 .hw.init = &(struct clk_init_data){ 2873 .name = "gcc_mdss_esc0_clk", 2874 .parent_hws = (const struct clk_hw*[]){ 2875 &esc0_clk_src.clkr.hw, 2876 }, 2877 .num_parents = 1, 2878 .flags = CLK_SET_RATE_PARENT, 2879 .ops = &clk_branch2_ops, 2880 }, 2881 }, 2882 }; 2883 2884 static struct clk_branch gcc_mdss_esc1_clk = { 2885 .halt_reg = 0x4d09c, 2886 .clkr = { 2887 .enable_reg = 0x4d09c, 2888 .enable_mask = BIT(0), 2889 .hw.init = &(struct clk_init_data){ 2890 .name = "gcc_mdss_esc1_clk", 2891 .parent_hws = (const struct clk_hw*[]){ 2892 &esc1_clk_src.clkr.hw, 2893 }, 2894 .num_parents = 1, 2895 .flags = CLK_SET_RATE_PARENT, 2896 .ops = &clk_branch2_ops, 2897 }, 2898 }, 2899 }; 2900 2901 static struct clk_branch gcc_mdss_mdp_clk = { 2902 .halt_reg = 0x4D088, 2903 .clkr = { 2904 .enable_reg = 0x4D088, 2905 .enable_mask = BIT(0), 2906 .hw.init = &(struct clk_init_data){ 2907 .name = "gcc_mdss_mdp_clk", 2908 .parent_hws = (const struct clk_hw*[]){ 2909 &mdp_clk_src.clkr.hw, 2910 }, 2911 .num_parents = 1, 2912 .flags = CLK_SET_RATE_PARENT, 2913 .ops = &clk_branch2_ops, 2914 }, 2915 }, 2916 }; 2917 2918 static struct clk_branch gcc_mdss_pclk0_clk = { 2919 .halt_reg = 0x4d084, 2920 .clkr = { 2921 .enable_reg = 0x4d084, 2922 .enable_mask = BIT(0), 2923 .hw.init = &(struct clk_init_data){ 2924 .name = "gcc_mdss_pclk0_clk", 2925 .parent_hws = (const struct clk_hw*[]){ 2926 &pclk0_clk_src.clkr.hw, 2927 }, 2928 .num_parents = 1, 2929 .flags = CLK_SET_RATE_PARENT, 2930 .ops = &clk_branch2_ops, 2931 }, 2932 }, 2933 }; 2934 2935 static struct clk_branch gcc_mdss_pclk1_clk = { 2936 .halt_reg = 0x4d0a4, 2937 .clkr = { 2938 .enable_reg = 0x4d0a4, 2939 .enable_mask = BIT(0), 2940 .hw.init = &(struct clk_init_data){ 2941 .name = "gcc_mdss_pclk1_clk", 2942 .parent_hws = (const struct clk_hw*[]){ 2943 &pclk1_clk_src.clkr.hw, 2944 }, 2945 .num_parents = 1, 2946 .flags = CLK_SET_RATE_PARENT, 2947 .ops = &clk_branch2_ops, 2948 }, 2949 }, 2950 }; 2951 2952 static struct clk_branch gcc_mdss_vsync_clk = { 2953 .halt_reg = 0x4d090, 2954 .clkr = { 2955 .enable_reg = 0x4d090, 2956 .enable_mask = BIT(0), 2957 .hw.init = &(struct clk_init_data){ 2958 .name = "gcc_mdss_vsync_clk", 2959 .parent_hws = (const struct clk_hw*[]){ 2960 &vsync_clk_src.clkr.hw, 2961 }, 2962 .num_parents = 1, 2963 .flags = CLK_SET_RATE_PARENT, 2964 .ops = &clk_branch2_ops, 2965 }, 2966 }, 2967 }; 2968 2969 static struct clk_branch gcc_mss_cfg_ahb_clk = { 2970 .halt_reg = 0x49000, 2971 .clkr = { 2972 .enable_reg = 0x49000, 2973 .enable_mask = BIT(0), 2974 .hw.init = &(struct clk_init_data){ 2975 .name = "gcc_mss_cfg_ahb_clk", 2976 .parent_hws = (const struct clk_hw*[]){ 2977 &pcnoc_bfdcd_clk_src.clkr.hw, 2978 }, 2979 .num_parents = 1, 2980 .flags = CLK_SET_RATE_PARENT, 2981 .ops = &clk_branch2_ops, 2982 }, 2983 }, 2984 }; 2985 2986 static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 2987 .halt_reg = 0x49004, 2988 .clkr = { 2989 .enable_reg = 0x49004, 2990 .enable_mask = BIT(0), 2991 .hw.init = &(struct clk_init_data){ 2992 .name = "gcc_mss_q6_bimc_axi_clk", 2993 .parent_hws = (const struct clk_hw*[]){ 2994 &bimc_ddr_clk_src.clkr.hw, 2995 }, 2996 .num_parents = 1, 2997 .flags = CLK_SET_RATE_PARENT, 2998 .ops = &clk_branch2_ops, 2999 }, 3000 }, 3001 }; 3002 3003 static struct clk_branch gcc_oxili_ahb_clk = { 3004 .halt_reg = 0x59028, 3005 .clkr = { 3006 .enable_reg = 0x59028, 3007 .enable_mask = BIT(0), 3008 .hw.init = &(struct clk_init_data){ 3009 .name = "gcc_oxili_ahb_clk", 3010 .parent_hws = (const struct clk_hw*[]){ 3011 &pcnoc_bfdcd_clk_src.clkr.hw, 3012 }, 3013 .num_parents = 1, 3014 .flags = CLK_SET_RATE_PARENT, 3015 .ops = &clk_branch2_ops, 3016 }, 3017 }, 3018 }; 3019 3020 static struct clk_branch gcc_oxili_gfx3d_clk = { 3021 .halt_reg = 0x59020, 3022 .clkr = { 3023 .enable_reg = 0x59020, 3024 .enable_mask = BIT(0), 3025 .hw.init = &(struct clk_init_data){ 3026 .name = "gcc_oxili_gfx3d_clk", 3027 .parent_hws = (const struct clk_hw*[]){ 3028 &gfx3d_clk_src.clkr.hw, 3029 }, 3030 .num_parents = 1, 3031 .flags = CLK_SET_RATE_PARENT, 3032 .ops = &clk_branch2_ops, 3033 }, 3034 }, 3035 }; 3036 3037 static struct clk_branch gcc_pdm2_clk = { 3038 .halt_reg = 0x4400c, 3039 .clkr = { 3040 .enable_reg = 0x4400c, 3041 .enable_mask = BIT(0), 3042 .hw.init = &(struct clk_init_data){ 3043 .name = "gcc_pdm2_clk", 3044 .parent_hws = (const struct clk_hw*[]){ 3045 &pdm2_clk_src.clkr.hw, 3046 }, 3047 .num_parents = 1, 3048 .flags = CLK_SET_RATE_PARENT, 3049 .ops = &clk_branch2_ops, 3050 }, 3051 }, 3052 }; 3053 3054 static struct clk_branch gcc_pdm_ahb_clk = { 3055 .halt_reg = 0x44004, 3056 .clkr = { 3057 .enable_reg = 0x44004, 3058 .enable_mask = BIT(0), 3059 .hw.init = &(struct clk_init_data){ 3060 .name = "gcc_pdm_ahb_clk", 3061 .parent_hws = (const struct clk_hw*[]){ 3062 &pcnoc_bfdcd_clk_src.clkr.hw, 3063 }, 3064 .num_parents = 1, 3065 .flags = CLK_SET_RATE_PARENT, 3066 .ops = &clk_branch2_ops, 3067 }, 3068 }, 3069 }; 3070 3071 static struct clk_branch gcc_prng_ahb_clk = { 3072 .halt_reg = 0x13004, 3073 .halt_check = BRANCH_HALT_VOTED, 3074 .clkr = { 3075 .enable_reg = 0x45004, 3076 .enable_mask = BIT(8), 3077 .hw.init = &(struct clk_init_data){ 3078 .name = "gcc_prng_ahb_clk", 3079 .parent_hws = (const struct clk_hw*[]){ 3080 &pcnoc_bfdcd_clk_src.clkr.hw, 3081 }, 3082 .num_parents = 1, 3083 .ops = &clk_branch2_ops, 3084 }, 3085 }, 3086 }; 3087 3088 static struct clk_branch gcc_sdcc1_ahb_clk = { 3089 .halt_reg = 0x4201c, 3090 .clkr = { 3091 .enable_reg = 0x4201c, 3092 .enable_mask = BIT(0), 3093 .hw.init = &(struct clk_init_data){ 3094 .name = "gcc_sdcc1_ahb_clk", 3095 .parent_hws = (const struct clk_hw*[]){ 3096 &pcnoc_bfdcd_clk_src.clkr.hw, 3097 }, 3098 .num_parents = 1, 3099 .flags = CLK_SET_RATE_PARENT, 3100 .ops = &clk_branch2_ops, 3101 }, 3102 }, 3103 }; 3104 3105 static struct clk_branch gcc_sdcc1_apps_clk = { 3106 .halt_reg = 0x42018, 3107 .clkr = { 3108 .enable_reg = 0x42018, 3109 .enable_mask = BIT(0), 3110 .hw.init = &(struct clk_init_data){ 3111 .name = "gcc_sdcc1_apps_clk", 3112 .parent_hws = (const struct clk_hw*[]){ 3113 &sdcc1_apps_clk_src.clkr.hw, 3114 }, 3115 .num_parents = 1, 3116 .flags = CLK_SET_RATE_PARENT, 3117 .ops = &clk_branch2_ops, 3118 }, 3119 }, 3120 }; 3121 3122 static struct clk_branch gcc_sdcc2_ahb_clk = { 3123 .halt_reg = 0x4301c, 3124 .clkr = { 3125 .enable_reg = 0x4301c, 3126 .enable_mask = BIT(0), 3127 .hw.init = &(struct clk_init_data){ 3128 .name = "gcc_sdcc2_ahb_clk", 3129 .parent_hws = (const struct clk_hw*[]){ 3130 &pcnoc_bfdcd_clk_src.clkr.hw, 3131 }, 3132 .num_parents = 1, 3133 .flags = CLK_SET_RATE_PARENT, 3134 .ops = &clk_branch2_ops, 3135 }, 3136 }, 3137 }; 3138 3139 static struct clk_branch gcc_sdcc2_apps_clk = { 3140 .halt_reg = 0x43018, 3141 .clkr = { 3142 .enable_reg = 0x43018, 3143 .enable_mask = BIT(0), 3144 .hw.init = &(struct clk_init_data){ 3145 .name = "gcc_sdcc2_apps_clk", 3146 .parent_hws = (const struct clk_hw*[]){ 3147 &sdcc2_apps_clk_src.clkr.hw, 3148 }, 3149 .num_parents = 1, 3150 .flags = CLK_SET_RATE_PARENT, 3151 .ops = &clk_branch2_ops, 3152 }, 3153 }, 3154 }; 3155 3156 static struct clk_branch gcc_apss_tcu_clk = { 3157 .halt_reg = 0x12018, 3158 .halt_check = BRANCH_HALT_VOTED, 3159 .clkr = { 3160 .enable_reg = 0x4500c, 3161 .enable_mask = BIT(1), 3162 .hw.init = &(struct clk_init_data){ 3163 .name = "gcc_apss_tcu_clk", 3164 .parent_hws = (const struct clk_hw*[]){ 3165 &bimc_ddr_clk_src.clkr.hw, 3166 }, 3167 .num_parents = 1, 3168 .ops = &clk_branch2_ops, 3169 }, 3170 }, 3171 }; 3172 3173 static struct clk_branch gcc_gfx_tcu_clk = { 3174 .halt_reg = 0x12020, 3175 .halt_check = BRANCH_HALT_VOTED, 3176 .clkr = { 3177 .enable_reg = 0x4500c, 3178 .enable_mask = BIT(2), 3179 .hw.init = &(struct clk_init_data){ 3180 .name = "gcc_gfx_tcu_clk", 3181 .parent_hws = (const struct clk_hw*[]){ 3182 &bimc_ddr_clk_src.clkr.hw, 3183 }, 3184 .num_parents = 1, 3185 .ops = &clk_branch2_ops, 3186 }, 3187 }, 3188 }; 3189 3190 static struct clk_branch gcc_gfx_tbu_clk = { 3191 .halt_reg = 0x12010, 3192 .halt_check = BRANCH_HALT_VOTED, 3193 .clkr = { 3194 .enable_reg = 0x4500c, 3195 .enable_mask = BIT(3), 3196 .hw.init = &(struct clk_init_data){ 3197 .name = "gcc_gfx_tbu_clk", 3198 .parent_hws = (const struct clk_hw*[]){ 3199 &bimc_ddr_clk_src.clkr.hw, 3200 }, 3201 .num_parents = 1, 3202 .ops = &clk_branch2_ops, 3203 }, 3204 }, 3205 }; 3206 3207 static struct clk_branch gcc_mdp_tbu_clk = { 3208 .halt_reg = 0x1201c, 3209 .halt_check = BRANCH_HALT_VOTED, 3210 .clkr = { 3211 .enable_reg = 0x4500c, 3212 .enable_mask = BIT(4), 3213 .hw.init = &(struct clk_init_data){ 3214 .name = "gcc_mdp_tbu_clk", 3215 .parent_hws = (const struct clk_hw*[]){ 3216 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3217 }, 3218 .num_parents = 1, 3219 .flags = CLK_SET_RATE_PARENT, 3220 .ops = &clk_branch2_ops, 3221 }, 3222 }, 3223 }; 3224 3225 static struct clk_branch gcc_venus_tbu_clk = { 3226 .halt_reg = 0x12014, 3227 .halt_check = BRANCH_HALT_VOTED, 3228 .clkr = { 3229 .enable_reg = 0x4500c, 3230 .enable_mask = BIT(5), 3231 .hw.init = &(struct clk_init_data){ 3232 .name = "gcc_venus_tbu_clk", 3233 .parent_hws = (const struct clk_hw*[]){ 3234 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3235 }, 3236 .num_parents = 1, 3237 .flags = CLK_SET_RATE_PARENT, 3238 .ops = &clk_branch2_ops, 3239 }, 3240 }, 3241 }; 3242 3243 static struct clk_branch gcc_vfe_tbu_clk = { 3244 .halt_reg = 0x1203c, 3245 .halt_check = BRANCH_HALT_VOTED, 3246 .clkr = { 3247 .enable_reg = 0x4500c, 3248 .enable_mask = BIT(9), 3249 .hw.init = &(struct clk_init_data){ 3250 .name = "gcc_vfe_tbu_clk", 3251 .parent_hws = (const struct clk_hw*[]){ 3252 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3253 }, 3254 .num_parents = 1, 3255 .flags = CLK_SET_RATE_PARENT, 3256 .ops = &clk_branch2_ops, 3257 }, 3258 }, 3259 }; 3260 3261 static struct clk_branch gcc_jpeg_tbu_clk = { 3262 .halt_reg = 0x12034, 3263 .halt_check = BRANCH_HALT_VOTED, 3264 .clkr = { 3265 .enable_reg = 0x4500c, 3266 .enable_mask = BIT(10), 3267 .hw.init = &(struct clk_init_data){ 3268 .name = "gcc_jpeg_tbu_clk", 3269 .parent_hws = (const struct clk_hw*[]){ 3270 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3271 }, 3272 .num_parents = 1, 3273 .flags = CLK_SET_RATE_PARENT, 3274 .ops = &clk_branch2_ops, 3275 }, 3276 }, 3277 }; 3278 3279 static struct clk_branch gcc_smmu_cfg_clk = { 3280 .halt_reg = 0x12038, 3281 .halt_check = BRANCH_HALT_VOTED, 3282 .clkr = { 3283 .enable_reg = 0x4500c, 3284 .enable_mask = BIT(12), 3285 .hw.init = &(struct clk_init_data){ 3286 .name = "gcc_smmu_cfg_clk", 3287 .parent_hws = (const struct clk_hw*[]){ 3288 &pcnoc_bfdcd_clk_src.clkr.hw, 3289 }, 3290 .num_parents = 1, 3291 .flags = CLK_SET_RATE_PARENT, 3292 .ops = &clk_branch2_ops, 3293 }, 3294 }, 3295 }; 3296 3297 static struct clk_branch gcc_gtcu_ahb_clk = { 3298 .halt_reg = 0x12044, 3299 .halt_check = BRANCH_HALT_VOTED, 3300 .clkr = { 3301 .enable_reg = 0x4500c, 3302 .enable_mask = BIT(13), 3303 .hw.init = &(struct clk_init_data){ 3304 .name = "gcc_gtcu_ahb_clk", 3305 .parent_hws = (const struct clk_hw*[]){ 3306 &pcnoc_bfdcd_clk_src.clkr.hw, 3307 }, 3308 .num_parents = 1, 3309 .flags = CLK_SET_RATE_PARENT, 3310 .ops = &clk_branch2_ops, 3311 }, 3312 }, 3313 }; 3314 3315 static struct clk_branch gcc_cpp_tbu_clk = { 3316 .halt_reg = 0x12040, 3317 .halt_check = BRANCH_HALT_VOTED, 3318 .clkr = { 3319 .enable_reg = 0x4500c, 3320 .enable_mask = BIT(14), 3321 .hw.init = &(struct clk_init_data){ 3322 .name = "gcc_cpp_tbu_clk", 3323 .parent_hws = (const struct clk_hw*[]){ 3324 &pcnoc_bfdcd_clk_src.clkr.hw, 3325 }, 3326 .num_parents = 1, 3327 .flags = CLK_SET_RATE_PARENT, 3328 .ops = &clk_branch2_ops, 3329 }, 3330 }, 3331 }; 3332 3333 static struct clk_branch gcc_mdp_rt_tbu_clk = { 3334 .halt_reg = 0x1201c, 3335 .halt_check = BRANCH_HALT_VOTED, 3336 .clkr = { 3337 .enable_reg = 0x4500c, 3338 .enable_mask = BIT(15), 3339 .hw.init = &(struct clk_init_data){ 3340 .name = "gcc_mdp_rt_tbu_clk", 3341 .parent_hws = (const struct clk_hw*[]){ 3342 &pcnoc_bfdcd_clk_src.clkr.hw, 3343 }, 3344 .num_parents = 1, 3345 .flags = CLK_SET_RATE_PARENT, 3346 .ops = &clk_branch2_ops, 3347 }, 3348 }, 3349 }; 3350 3351 static struct clk_branch gcc_bimc_gfx_clk = { 3352 .halt_reg = 0x31024, 3353 .clkr = { 3354 .enable_reg = 0x31024, 3355 .enable_mask = BIT(0), 3356 .hw.init = &(struct clk_init_data){ 3357 .name = "gcc_bimc_gfx_clk", 3358 .parent_hws = (const struct clk_hw*[]){ 3359 &bimc_gpu_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_bimc_gpu_clk = { 3369 .halt_reg = 0x31040, 3370 .clkr = { 3371 .enable_reg = 0x31040, 3372 .enable_mask = BIT(0), 3373 .hw.init = &(struct clk_init_data){ 3374 .name = "gcc_bimc_gpu_clk", 3375 .parent_hws = (const struct clk_hw*[]){ 3376 &bimc_gpu_clk_src.clkr.hw, 3377 }, 3378 .num_parents = 1, 3379 .flags = CLK_SET_RATE_PARENT, 3380 .ops = &clk_branch2_ops, 3381 }, 3382 }, 3383 }; 3384 3385 static struct clk_branch gcc_usb2a_phy_sleep_clk = { 3386 .halt_reg = 0x4102c, 3387 .clkr = { 3388 .enable_reg = 0x4102c, 3389 .enable_mask = BIT(0), 3390 .hw.init = &(struct clk_init_data){ 3391 .name = "gcc_usb2a_phy_sleep_clk", 3392 .ops = &clk_branch2_ops, 3393 }, 3394 }, 3395 }; 3396 3397 static struct clk_branch gcc_usb_fs_ahb_clk = { 3398 .halt_reg = 0x3f008, 3399 .clkr = { 3400 .enable_reg = 0x3f008, 3401 .enable_mask = BIT(0), 3402 .hw.init = &(struct clk_init_data){ 3403 .name = "gcc_usb_fs_ahb_clk", 3404 .parent_hws = (const struct clk_hw*[]){ 3405 &pcnoc_bfdcd_clk_src.clkr.hw, 3406 }, 3407 .num_parents = 1, 3408 .flags = CLK_SET_RATE_PARENT, 3409 .ops = &clk_branch2_ops, 3410 }, 3411 }, 3412 }; 3413 3414 static struct clk_branch gcc_usb_fs_ic_clk = { 3415 .halt_reg = 0x3f030, 3416 .clkr = { 3417 .enable_reg = 0x3f030, 3418 .enable_mask = BIT(0), 3419 .hw.init = &(struct clk_init_data){ 3420 .name = "gcc_usb_fs_ic_clk", 3421 .parent_hws = (const struct clk_hw*[]){ 3422 &usb_fs_ic_clk_src.clkr.hw, 3423 }, 3424 .num_parents = 1, 3425 .flags = CLK_SET_RATE_PARENT, 3426 .ops = &clk_branch2_ops, 3427 }, 3428 }, 3429 }; 3430 3431 static struct clk_branch gcc_usb_fs_system_clk = { 3432 .halt_reg = 0x3f004, 3433 .clkr = { 3434 .enable_reg = 0x3f004, 3435 .enable_mask = BIT(0), 3436 .hw.init = &(struct clk_init_data){ 3437 .name = "gcc_usb_fs_system_clk", 3438 .parent_hws = (const struct clk_hw*[]){ 3439 &usb_fs_system_clk_src.clkr.hw, 3440 }, 3441 .num_parents = 1, 3442 .flags = CLK_SET_RATE_PARENT, 3443 .ops = &clk_branch2_ops, 3444 }, 3445 }, 3446 }; 3447 3448 static struct clk_branch gcc_usb_hs_ahb_clk = { 3449 .halt_reg = 0x41008, 3450 .clkr = { 3451 .enable_reg = 0x41008, 3452 .enable_mask = BIT(0), 3453 .hw.init = &(struct clk_init_data){ 3454 .name = "gcc_usb_hs_ahb_clk", 3455 .parent_hws = (const struct clk_hw*[]){ 3456 &pcnoc_bfdcd_clk_src.clkr.hw, 3457 }, 3458 .num_parents = 1, 3459 .flags = CLK_SET_RATE_PARENT, 3460 .ops = &clk_branch2_ops, 3461 }, 3462 }, 3463 }; 3464 3465 static struct clk_branch gcc_usb_hs_system_clk = { 3466 .halt_reg = 0x41004, 3467 .clkr = { 3468 .enable_reg = 0x41004, 3469 .enable_mask = BIT(0), 3470 .hw.init = &(struct clk_init_data){ 3471 .name = "gcc_usb_hs_system_clk", 3472 .parent_hws = (const struct clk_hw*[]){ 3473 &usb_hs_system_clk_src.clkr.hw, 3474 }, 3475 .num_parents = 1, 3476 .flags = CLK_SET_RATE_PARENT, 3477 .ops = &clk_branch2_ops, 3478 }, 3479 }, 3480 }; 3481 3482 static struct clk_branch gcc_venus0_ahb_clk = { 3483 .halt_reg = 0x4c020, 3484 .clkr = { 3485 .enable_reg = 0x4c020, 3486 .enable_mask = BIT(0), 3487 .hw.init = &(struct clk_init_data){ 3488 .name = "gcc_venus0_ahb_clk", 3489 .parent_hws = (const struct clk_hw*[]){ 3490 &pcnoc_bfdcd_clk_src.clkr.hw, 3491 }, 3492 .num_parents = 1, 3493 .flags = CLK_SET_RATE_PARENT, 3494 .ops = &clk_branch2_ops, 3495 }, 3496 }, 3497 }; 3498 3499 static struct clk_branch gcc_venus0_axi_clk = { 3500 .halt_reg = 0x4c024, 3501 .clkr = { 3502 .enable_reg = 0x4c024, 3503 .enable_mask = BIT(0), 3504 .hw.init = &(struct clk_init_data){ 3505 .name = "gcc_venus0_axi_clk", 3506 .parent_hws = (const struct clk_hw*[]){ 3507 &system_mm_noc_bfdcd_clk_src.clkr.hw, 3508 }, 3509 .num_parents = 1, 3510 .flags = CLK_SET_RATE_PARENT, 3511 .ops = &clk_branch2_ops, 3512 }, 3513 }, 3514 }; 3515 3516 static struct clk_branch gcc_venus0_vcodec0_clk = { 3517 .halt_reg = 0x4c01c, 3518 .clkr = { 3519 .enable_reg = 0x4c01c, 3520 .enable_mask = BIT(0), 3521 .hw.init = &(struct clk_init_data){ 3522 .name = "gcc_venus0_vcodec0_clk", 3523 .parent_hws = (const struct clk_hw*[]){ 3524 &vcodec0_clk_src.clkr.hw, 3525 }, 3526 .num_parents = 1, 3527 .flags = CLK_SET_RATE_PARENT, 3528 .ops = &clk_branch2_ops, 3529 }, 3530 }, 3531 }; 3532 3533 static struct clk_branch gcc_venus0_core0_vcodec0_clk = { 3534 .halt_reg = 0x4c02c, 3535 .clkr = { 3536 .enable_reg = 0x4c02c, 3537 .enable_mask = BIT(0), 3538 .hw.init = &(struct clk_init_data){ 3539 .name = "gcc_venus0_core0_vcodec0_clk", 3540 .parent_hws = (const struct clk_hw*[]){ 3541 &vcodec0_clk_src.clkr.hw, 3542 }, 3543 .num_parents = 1, 3544 .flags = CLK_SET_RATE_PARENT, 3545 .ops = &clk_branch2_ops, 3546 }, 3547 }, 3548 }; 3549 3550 static struct clk_branch gcc_venus0_core1_vcodec0_clk = { 3551 .halt_reg = 0x4c034, 3552 .clkr = { 3553 .enable_reg = 0x4c034, 3554 .enable_mask = BIT(0), 3555 .hw.init = &(struct clk_init_data){ 3556 .name = "gcc_venus0_core1_vcodec0_clk", 3557 .parent_hws = (const struct clk_hw*[]){ 3558 &vcodec0_clk_src.clkr.hw, 3559 }, 3560 .num_parents = 1, 3561 .flags = CLK_SET_RATE_PARENT, 3562 .ops = &clk_branch2_ops, 3563 }, 3564 }, 3565 }; 3566 3567 static struct clk_branch gcc_oxili_timer_clk = { 3568 .halt_reg = 0x59040, 3569 .clkr = { 3570 .enable_reg = 0x59040, 3571 .enable_mask = BIT(0), 3572 .hw.init = &(struct clk_init_data){ 3573 .name = "gcc_oxili_timer_clk", 3574 .ops = &clk_branch2_ops, 3575 }, 3576 }, 3577 }; 3578 3579 static struct gdsc venus_gdsc = { 3580 .gdscr = 0x4c018, 3581 .pd = { 3582 .name = "venus", 3583 }, 3584 .pwrsts = PWRSTS_OFF_ON, 3585 }; 3586 3587 static struct gdsc mdss_gdsc = { 3588 .gdscr = 0x4d078, 3589 .pd = { 3590 .name = "mdss", 3591 }, 3592 .pwrsts = PWRSTS_OFF_ON, 3593 }; 3594 3595 static struct gdsc jpeg_gdsc = { 3596 .gdscr = 0x5701c, 3597 .pd = { 3598 .name = "jpeg", 3599 }, 3600 .pwrsts = PWRSTS_OFF_ON, 3601 }; 3602 3603 static struct gdsc vfe_gdsc = { 3604 .gdscr = 0x58034, 3605 .pd = { 3606 .name = "vfe", 3607 }, 3608 .pwrsts = PWRSTS_OFF_ON, 3609 }; 3610 3611 static struct gdsc oxili_gdsc = { 3612 .gdscr = 0x5901c, 3613 .pd = { 3614 .name = "oxili", 3615 }, 3616 .pwrsts = PWRSTS_OFF_ON, 3617 }; 3618 3619 static struct gdsc venus_core0_gdsc = { 3620 .gdscr = 0x4c028, 3621 .pd = { 3622 .name = "venus_core0", 3623 }, 3624 .pwrsts = PWRSTS_OFF_ON, 3625 }; 3626 3627 static struct gdsc venus_core1_gdsc = { 3628 .gdscr = 0x4c030, 3629 .pd = { 3630 .name = "venus_core1", 3631 }, 3632 .pwrsts = PWRSTS_OFF_ON, 3633 }; 3634 3635 static struct clk_regmap *gcc_msm8939_clocks[] = { 3636 [GPLL0] = &gpll0.clkr, 3637 [GPLL0_VOTE] = &gpll0_vote, 3638 [BIMC_PLL] = &bimc_pll.clkr, 3639 [BIMC_PLL_VOTE] = &bimc_pll_vote, 3640 [GPLL1] = &gpll1.clkr, 3641 [GPLL1_VOTE] = &gpll1_vote, 3642 [GPLL2] = &gpll2.clkr, 3643 [GPLL2_VOTE] = &gpll2_vote, 3644 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr, 3645 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr, 3646 [SYSTEM_MM_NOC_BFDCD_CLK_SRC] = &system_mm_noc_bfdcd_clk_src.clkr, 3647 [CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr, 3648 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 3649 [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3650 [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3651 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 3652 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3653 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3654 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3655 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3656 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3657 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3658 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3659 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3660 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3661 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 3662 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 3663 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 3664 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 3665 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3666 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3667 [CCI_CLK_SRC] = &cci_clk_src.clkr, 3668 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 3669 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 3670 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3671 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 3672 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 3673 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 3674 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 3675 [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3676 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 3677 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3678 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3679 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3680 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 3681 [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 3682 [MDP_CLK_SRC] = &mdp_clk_src.clkr, 3683 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 3684 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 3685 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3686 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3687 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3688 [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr, 3689 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, 3690 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3691 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3692 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, 3693 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3694 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3695 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3696 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3697 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3698 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3699 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3700 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3701 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 3702 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 3703 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 3704 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 3705 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3706 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3707 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3708 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr, 3709 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr, 3710 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, 3711 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, 3712 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr, 3713 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, 3714 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, 3715 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, 3716 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, 3717 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr, 3718 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, 3719 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, 3720 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, 3721 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, 3722 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, 3723 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, 3724 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr, 3725 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr, 3726 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr, 3727 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 3728 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 3729 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr, 3730 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 3731 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 3732 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr, 3733 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 3734 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr, 3735 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr, 3736 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, 3737 [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr, 3738 [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr, 3739 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 3740 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 3741 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 3742 [GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr, 3743 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3744 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3745 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3746 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, 3747 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, 3748 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, 3749 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, 3750 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, 3751 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, 3752 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, 3753 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 3754 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, 3755 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, 3756 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3757 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3758 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3759 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3760 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3761 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3762 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3763 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr, 3764 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr, 3765 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, 3766 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, 3767 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr, 3768 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, 3769 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr, 3770 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr, 3771 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, 3772 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr, 3773 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr, 3774 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr, 3775 [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr, 3776 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr, 3777 [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr, 3778 [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr, 3779 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 3780 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, 3781 [ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr, 3782 [ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr, 3783 [ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr, 3784 [ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr, 3785 [ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr, 3786 [CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr, 3787 [GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr, 3788 [GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr, 3789 [GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr, 3790 [GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr, 3791 [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr, 3792 [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr, 3793 [GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr, 3794 [GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr, 3795 [GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr, 3796 [GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr, 3797 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 3798 [GPLL3] = &gpll3.clkr, 3799 [GPLL3_VOTE] = &gpll3_vote, 3800 [GPLL4] = &gpll4.clkr, 3801 [GPLL4_VOTE] = &gpll4_vote, 3802 [GPLL5] = &gpll5.clkr, 3803 [GPLL5_VOTE] = &gpll5_vote, 3804 [GPLL6] = &gpll6.clkr, 3805 [GPLL6_VOTE] = &gpll6_vote, 3806 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 3807 [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr, 3808 [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 3809 [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr, 3810 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 3811 [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr, 3812 [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr, 3813 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr, 3814 [GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr, 3815 [USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr, 3816 [USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr, 3817 [GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr, 3818 [GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr, 3819 [GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr, 3820 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr, 3821 [GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr, 3822 [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr, 3823 }; 3824 3825 static struct gdsc *gcc_msm8939_gdscs[] = { 3826 [VENUS_GDSC] = &venus_gdsc, 3827 [MDSS_GDSC] = &mdss_gdsc, 3828 [JPEG_GDSC] = &jpeg_gdsc, 3829 [VFE_GDSC] = &vfe_gdsc, 3830 [OXILI_GDSC] = &oxili_gdsc, 3831 [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 3832 [VENUS_CORE1_GDSC] = &venus_core1_gdsc, 3833 }; 3834 3835 static const struct qcom_reset_map gcc_msm8939_resets[] = { 3836 [GCC_BLSP1_BCR] = { 0x01000 }, 3837 [GCC_BLSP1_QUP1_BCR] = { 0x02000 }, 3838 [GCC_BLSP1_UART1_BCR] = { 0x02038 }, 3839 [GCC_BLSP1_QUP2_BCR] = { 0x03008 }, 3840 [GCC_BLSP1_UART2_BCR] = { 0x03028 }, 3841 [GCC_BLSP1_QUP3_BCR] = { 0x04018 }, 3842 [GCC_BLSP1_UART3_BCR] = { 0x04038 }, 3843 [GCC_BLSP1_QUP4_BCR] = { 0x05018 }, 3844 [GCC_BLSP1_QUP5_BCR] = { 0x06018 }, 3845 [GCC_BLSP1_QUP6_BCR] = { 0x07018 }, 3846 [GCC_IMEM_BCR] = { 0x0e000 }, 3847 [GCC_SMMU_BCR] = { 0x12000 }, 3848 [GCC_APSS_TCU_BCR] = { 0x12050 }, 3849 [GCC_SMMU_XPU_BCR] = { 0x12054 }, 3850 [GCC_PCNOC_TBU_BCR] = { 0x12058 }, 3851 [GCC_PRNG_BCR] = { 0x13000 }, 3852 [GCC_BOOT_ROM_BCR] = { 0x13008 }, 3853 [GCC_CRYPTO_BCR] = { 0x16000 }, 3854 [GCC_SEC_CTRL_BCR] = { 0x1a000 }, 3855 [GCC_AUDIO_CORE_BCR] = { 0x1c008 }, 3856 [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 }, 3857 [GCC_DEHR_BCR] = { 0x1f000 }, 3858 [GCC_SYSTEM_NOC_BCR] = { 0x26000 }, 3859 [GCC_PCNOC_BCR] = { 0x27018 }, 3860 [GCC_TCSR_BCR] = { 0x28000 }, 3861 [GCC_QDSS_BCR] = { 0x29000 }, 3862 [GCC_DCD_BCR] = { 0x2a000 }, 3863 [GCC_MSG_RAM_BCR] = { 0x2b000 }, 3864 [GCC_MPM_BCR] = { 0x2c000 }, 3865 [GCC_SPMI_BCR] = { 0x2e000 }, 3866 [GCC_SPDM_BCR] = { 0x2f000 }, 3867 [GCC_MM_SPDM_BCR] = { 0x2f024 }, 3868 [GCC_BIMC_BCR] = { 0x31000 }, 3869 [GCC_RBCPR_BCR] = { 0x33000 }, 3870 [GCC_TLMM_BCR] = { 0x34000 }, 3871 [GCC_CAMSS_CSI2_BCR] = { 0x3c038 }, 3872 [GCC_CAMSS_CSI2PHY_BCR] = { 0x3c044 }, 3873 [GCC_CAMSS_CSI2RDI_BCR] = { 0x3c04c }, 3874 [GCC_CAMSS_CSI2PIX_BCR] = { 0x3c054 }, 3875 [GCC_USB_FS_BCR] = { 0x3f000 }, 3876 [GCC_USB_HS_BCR] = { 0x41000 }, 3877 [GCC_USB2A_PHY_BCR] = { 0x41028 }, 3878 [GCC_SDCC1_BCR] = { 0x42000 }, 3879 [GCC_SDCC2_BCR] = { 0x43000 }, 3880 [GCC_PDM_BCR] = { 0x44000 }, 3881 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 }, 3882 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 }, 3883 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 }, 3884 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 }, 3885 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 }, 3886 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 }, 3887 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 }, 3888 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 }, 3889 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 }, 3890 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 }, 3891 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 }, 3892 [GCC_MMSS_BCR] = { 0x4b000 }, 3893 [GCC_VENUS0_BCR] = { 0x4c014 }, 3894 [GCC_MDSS_BCR] = { 0x4d074 }, 3895 [GCC_CAMSS_PHY0_BCR] = { 0x4e018 }, 3896 [GCC_CAMSS_CSI0_BCR] = { 0x4e038 }, 3897 [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 }, 3898 [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c }, 3899 [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 }, 3900 [GCC_CAMSS_PHY1_BCR] = { 0x4f018 }, 3901 [GCC_CAMSS_CSI1_BCR] = { 0x4f038 }, 3902 [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 }, 3903 [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c }, 3904 [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 }, 3905 [GCC_CAMSS_ISPIF_BCR] = { 0x50000 }, 3906 [GCC_BLSP1_QUP4_SPI_APPS_CBCR] = { 0x0501c }, 3907 [GCC_CAMSS_CCI_BCR] = { 0x51014 }, 3908 [GCC_CAMSS_MCLK0_BCR] = { 0x52014 }, 3909 [GCC_CAMSS_MCLK1_BCR] = { 0x53014 }, 3910 [GCC_CAMSS_GP0_BCR] = { 0x54014 }, 3911 [GCC_CAMSS_GP1_BCR] = { 0x55014 }, 3912 [GCC_CAMSS_TOP_BCR] = { 0x56000 }, 3913 [GCC_CAMSS_MICRO_BCR] = { 0x56008 }, 3914 [GCC_CAMSS_JPEG_BCR] = { 0x57018 }, 3915 [GCC_CAMSS_VFE_BCR] = { 0x58030 }, 3916 [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c }, 3917 [GCC_OXILI_BCR] = { 0x59018 }, 3918 [GCC_GMEM_BCR] = { 0x5902c }, 3919 [GCC_CAMSS_AHB_BCR] = { 0x5a018 }, 3920 [GCC_CAMSS_MCLK2_BCR] = { 0x5c014 }, 3921 [GCC_MDP_TBU_BCR] = { 0x62000 }, 3922 [GCC_GFX_TBU_BCR] = { 0x63000 }, 3923 [GCC_GFX_TCU_BCR] = { 0x64000 }, 3924 [GCC_MSS_TBU_AXI_BCR] = { 0x65000 }, 3925 [GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 }, 3926 [GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 }, 3927 [GCC_GTCU_AHB_BCR] = { 0x68000 }, 3928 [GCC_SMMU_CFG_BCR] = { 0x69000 }, 3929 [GCC_VFE_TBU_BCR] = { 0x6a000 }, 3930 [GCC_VENUS_TBU_BCR] = { 0x6b000 }, 3931 [GCC_JPEG_TBU_BCR] = { 0x6c000 }, 3932 [GCC_PRONTO_TBU_BCR] = { 0x6d000 }, 3933 [GCC_CPP_TBU_BCR] = { 0x6e000 }, 3934 [GCC_MDP_RT_TBU_BCR] = { 0x6f000 }, 3935 [GCC_SMMU_CATS_BCR] = { 0x7c000 }, 3936 }; 3937 3938 static const struct regmap_config gcc_msm8939_regmap_config = { 3939 .reg_bits = 32, 3940 .reg_stride = 4, 3941 .val_bits = 32, 3942 .max_register = 0x80000, 3943 .fast_io = true, 3944 }; 3945 3946 static const struct qcom_cc_desc gcc_msm8939_desc = { 3947 .config = &gcc_msm8939_regmap_config, 3948 .clks = gcc_msm8939_clocks, 3949 .num_clks = ARRAY_SIZE(gcc_msm8939_clocks), 3950 .resets = gcc_msm8939_resets, 3951 .num_resets = ARRAY_SIZE(gcc_msm8939_resets), 3952 .gdscs = gcc_msm8939_gdscs, 3953 .num_gdscs = ARRAY_SIZE(gcc_msm8939_gdscs), 3954 }; 3955 3956 static const struct of_device_id gcc_msm8939_match_table[] = { 3957 { .compatible = "qcom,gcc-msm8939" }, 3958 { } 3959 }; 3960 MODULE_DEVICE_TABLE(of, gcc_msm8939_match_table); 3961 3962 static int gcc_msm8939_probe(struct platform_device *pdev) 3963 { 3964 struct regmap *regmap; 3965 3966 regmap = qcom_cc_map(pdev, &gcc_msm8939_desc); 3967 if (IS_ERR(regmap)) 3968 return PTR_ERR(regmap); 3969 3970 clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true); 3971 clk_pll_configure_sr_hpm_lp(&gpll4, regmap, &gpll4_config, true); 3972 3973 return qcom_cc_really_probe(pdev, &gcc_msm8939_desc, regmap); 3974 } 3975 3976 static struct platform_driver gcc_msm8939_driver = { 3977 .probe = gcc_msm8939_probe, 3978 .driver = { 3979 .name = "gcc-msm8939", 3980 .of_match_table = gcc_msm8939_match_table, 3981 }, 3982 }; 3983 3984 static int __init gcc_msm8939_init(void) 3985 { 3986 return platform_driver_register(&gcc_msm8939_driver); 3987 } 3988 core_initcall(gcc_msm8939_init); 3989 3990 static void __exit gcc_msm8939_exit(void) 3991 { 3992 platform_driver_unregister(&gcc_msm8939_driver); 3993 } 3994 module_exit(gcc_msm8939_exit); 3995 3996 MODULE_DESCRIPTION("Qualcomm GCC MSM8939 Driver"); 3997 MODULE_LICENSE("GPL v2"); 3998