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