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