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