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