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