linux/drivers/clk/qcom/mmcc-msm8996.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*x
   3 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
   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#include <linux/clk.h>
  17
  18#include <dt-bindings/clock/qcom,mmcc-msm8996.h>
  19
  20#include "common.h"
  21#include "clk-regmap.h"
  22#include "clk-regmap-divider.h"
  23#include "clk-alpha-pll.h"
  24#include "clk-rcg.h"
  25#include "clk-branch.h"
  26#include "reset.h"
  27#include "gdsc.h"
  28
  29enum {
  30        P_XO,
  31        P_MMPLL0,
  32        P_GPLL0,
  33        P_GPLL0_DIV,
  34        P_MMPLL1,
  35        P_MMPLL9,
  36        P_MMPLL2,
  37        P_MMPLL8,
  38        P_MMPLL3,
  39        P_DSI0PLL,
  40        P_DSI1PLL,
  41        P_MMPLL5,
  42        P_HDMIPLL,
  43        P_DSI0PLL_BYTE,
  44        P_DSI1PLL_BYTE,
  45        P_MMPLL4,
  46};
  47
  48static const struct parent_map mmss_xo_hdmi_map[] = {
  49        { P_XO, 0 },
  50        { P_HDMIPLL, 1 }
  51};
  52
  53static const char * const mmss_xo_hdmi[] = {
  54        "xo",
  55        "hdmipll"
  56};
  57
  58static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = {
  59        { P_XO, 0 },
  60        { P_DSI0PLL, 1 },
  61        { P_DSI1PLL, 2 }
  62};
  63
  64static const char * const mmss_xo_dsi0pll_dsi1pll[] = {
  65        "xo",
  66        "dsi0pll",
  67        "dsi1pll"
  68};
  69
  70static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = {
  71        { P_XO, 0 },
  72        { P_GPLL0, 5 },
  73        { P_GPLL0_DIV, 6 }
  74};
  75
  76static const char * const mmss_xo_gpll0_gpll0_div[] = {
  77        "xo",
  78        "gpll0",
  79        "gpll0_div"
  80};
  81
  82static const struct parent_map mmss_xo_dsibyte_map[] = {
  83        { P_XO, 0 },
  84        { P_DSI0PLL_BYTE, 1 },
  85        { P_DSI1PLL_BYTE, 2 }
  86};
  87
  88static const char * const mmss_xo_dsibyte[] = {
  89        "xo",
  90        "dsi0pllbyte",
  91        "dsi1pllbyte"
  92};
  93
  94static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
  95        { P_XO, 0 },
  96        { P_MMPLL0, 1 },
  97        { P_GPLL0, 5 },
  98        { P_GPLL0_DIV, 6 }
  99};
 100
 101static const char * const mmss_xo_mmpll0_gpll0_gpll0_div[] = {
 102        "xo",
 103        "mmpll0",
 104        "gpll0",
 105        "gpll0_div"
 106};
 107
 108static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
 109        { P_XO, 0 },
 110        { P_MMPLL0, 1 },
 111        { P_MMPLL1, 2 },
 112        { P_GPLL0, 5 },
 113        { P_GPLL0_DIV, 6 }
 114};
 115
 116static const char * const mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = {
 117        "xo",
 118        "mmpll0",
 119        "mmpll1",
 120        "gpll0",
 121        "gpll0_div"
 122};
 123
 124static const struct parent_map mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map[] = {
 125        { P_XO, 0 },
 126        { P_MMPLL0, 1 },
 127        { P_MMPLL3, 3 },
 128        { P_GPLL0, 5 },
 129        { P_GPLL0_DIV, 6 }
 130};
 131
 132static const char * const mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div[] = {
 133        "xo",
 134        "mmpll0",
 135        "mmpll3",
 136        "gpll0",
 137        "gpll0_div"
 138};
 139
 140static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
 141        { P_XO, 0 },
 142        { P_MMPLL0, 1 },
 143        { P_MMPLL5, 2 },
 144        { P_GPLL0, 5 },
 145        { P_GPLL0_DIV, 6 }
 146};
 147
 148static const char * const mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = {
 149        "xo",
 150        "mmpll0",
 151        "mmpll5",
 152        "gpll0",
 153        "gpll0_div"
 154};
 155
 156static const struct parent_map mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map[] = {
 157        { P_XO, 0 },
 158        { P_MMPLL0, 1 },
 159        { P_MMPLL4, 3 },
 160        { P_GPLL0, 5 },
 161        { P_GPLL0_DIV, 6 }
 162};
 163
 164static const char * const mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div[] = {
 165        "xo",
 166        "mmpll0",
 167        "mmpll4",
 168        "gpll0",
 169        "gpll0_div"
 170};
 171
 172static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map[] = {
 173        { P_XO, 0 },
 174        { P_MMPLL0, 1 },
 175        { P_MMPLL9, 2 },
 176        { P_MMPLL2, 3 },
 177        { P_MMPLL8, 4 },
 178        { P_GPLL0, 5 }
 179};
 180
 181static const char * const mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0[] = {
 182        "xo",
 183        "mmpll0",
 184        "mmpll9",
 185        "mmpll2",
 186        "mmpll8",
 187        "gpll0"
 188};
 189
 190static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map[] = {
 191        { P_XO, 0 },
 192        { P_MMPLL0, 1 },
 193        { P_MMPLL9, 2 },
 194        { P_MMPLL2, 3 },
 195        { P_MMPLL8, 4 },
 196        { P_GPLL0, 5 },
 197        { P_GPLL0_DIV, 6 }
 198};
 199
 200static const char * const mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div[] = {
 201        "xo",
 202        "mmpll0",
 203        "mmpll9",
 204        "mmpll2",
 205        "mmpll8",
 206        "gpll0",
 207        "gpll0_div"
 208};
 209
 210static const struct parent_map mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map[] = {
 211        { P_XO, 0 },
 212        { P_MMPLL0, 1 },
 213        { P_MMPLL1, 2 },
 214        { P_MMPLL4, 3 },
 215        { P_MMPLL3, 4 },
 216        { P_GPLL0, 5 },
 217        { P_GPLL0_DIV, 6 }
 218};
 219
 220static const char * const mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div[] = {
 221        "xo",
 222        "mmpll0",
 223        "mmpll1",
 224        "mmpll4",
 225        "mmpll3",
 226        "gpll0",
 227        "gpll0_div"
 228};
 229
 230static struct clk_fixed_factor gpll0_div = {
 231        .mult = 1,
 232        .div = 2,
 233        .hw.init = &(struct clk_init_data){
 234                .name = "gpll0_div",
 235                .parent_names = (const char *[]){ "gpll0" },
 236                .num_parents = 1,
 237                .ops = &clk_fixed_factor_ops,
 238        },
 239};
 240
 241static struct pll_vco mmpll_p_vco[] = {
 242        { 250000000, 500000000, 3 },
 243        { 500000000, 1000000000, 2 },
 244        { 1000000000, 1500000000, 1 },
 245        { 1500000000, 2000000000, 0 },
 246};
 247
 248static struct pll_vco mmpll_gfx_vco[] = {
 249        { 400000000, 1000000000, 2 },
 250        { 1000000000, 1500000000, 1 },
 251        { 1500000000, 2000000000, 0 },
 252};
 253
 254static struct pll_vco mmpll_t_vco[] = {
 255        { 500000000, 1500000000, 0 },
 256};
 257
 258static struct clk_alpha_pll mmpll0_early = {
 259        .offset = 0x0,
 260        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 261        .vco_table = mmpll_p_vco,
 262        .num_vco = ARRAY_SIZE(mmpll_p_vco),
 263        .clkr = {
 264                .enable_reg = 0x100,
 265                .enable_mask = BIT(0),
 266                .hw.init = &(struct clk_init_data){
 267                        .name = "mmpll0_early",
 268                        .parent_names = (const char *[]){ "xo" },
 269                        .num_parents = 1,
 270                        .ops = &clk_alpha_pll_ops,
 271                },
 272        },
 273};
 274
 275static struct clk_alpha_pll_postdiv mmpll0 = {
 276        .offset = 0x0,
 277        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 278        .width = 4,
 279        .clkr.hw.init = &(struct clk_init_data){
 280                .name = "mmpll0",
 281                .parent_names = (const char *[]){ "mmpll0_early" },
 282                .num_parents = 1,
 283                .ops = &clk_alpha_pll_postdiv_ops,
 284                .flags = CLK_SET_RATE_PARENT,
 285        },
 286};
 287
 288static struct clk_alpha_pll mmpll1_early = {
 289        .offset = 0x30,
 290        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 291        .vco_table = mmpll_p_vco,
 292        .num_vco = ARRAY_SIZE(mmpll_p_vco),
 293        .clkr = {
 294                .enable_reg = 0x100,
 295                .enable_mask = BIT(1),
 296                .hw.init = &(struct clk_init_data){
 297                        .name = "mmpll1_early",
 298                        .parent_names = (const char *[]){ "xo" },
 299                        .num_parents = 1,
 300                        .ops = &clk_alpha_pll_ops,
 301                }
 302        },
 303};
 304
 305static struct clk_alpha_pll_postdiv mmpll1 = {
 306        .offset = 0x30,
 307        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 308        .width = 4,
 309        .clkr.hw.init = &(struct clk_init_data){
 310                .name = "mmpll1",
 311                .parent_names = (const char *[]){ "mmpll1_early" },
 312                .num_parents = 1,
 313                .ops = &clk_alpha_pll_postdiv_ops,
 314                .flags = CLK_SET_RATE_PARENT,
 315        },
 316};
 317
 318static struct clk_alpha_pll mmpll2_early = {
 319        .offset = 0x4100,
 320        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 321        .vco_table = mmpll_gfx_vco,
 322        .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
 323        .clkr.hw.init = &(struct clk_init_data){
 324                .name = "mmpll2_early",
 325                .parent_names = (const char *[]){ "xo" },
 326                .num_parents = 1,
 327                .ops = &clk_alpha_pll_ops,
 328        },
 329};
 330
 331static struct clk_alpha_pll_postdiv mmpll2 = {
 332        .offset = 0x4100,
 333        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 334        .width = 4,
 335        .clkr.hw.init = &(struct clk_init_data){
 336                .name = "mmpll2",
 337                .parent_names = (const char *[]){ "mmpll2_early" },
 338                .num_parents = 1,
 339                .ops = &clk_alpha_pll_postdiv_ops,
 340                .flags = CLK_SET_RATE_PARENT,
 341        },
 342};
 343
 344static struct clk_alpha_pll mmpll3_early = {
 345        .offset = 0x60,
 346        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 347        .vco_table = mmpll_p_vco,
 348        .num_vco = ARRAY_SIZE(mmpll_p_vco),
 349        .clkr.hw.init = &(struct clk_init_data){
 350                .name = "mmpll3_early",
 351                .parent_names = (const char *[]){ "xo" },
 352                .num_parents = 1,
 353                .ops = &clk_alpha_pll_ops,
 354        },
 355};
 356
 357static struct clk_alpha_pll_postdiv mmpll3 = {
 358        .offset = 0x60,
 359        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 360        .width = 4,
 361        .clkr.hw.init = &(struct clk_init_data){
 362                .name = "mmpll3",
 363                .parent_names = (const char *[]){ "mmpll3_early" },
 364                .num_parents = 1,
 365                .ops = &clk_alpha_pll_postdiv_ops,
 366                .flags = CLK_SET_RATE_PARENT,
 367        },
 368};
 369
 370static struct clk_alpha_pll mmpll4_early = {
 371        .offset = 0x90,
 372        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 373        .vco_table = mmpll_t_vco,
 374        .num_vco = ARRAY_SIZE(mmpll_t_vco),
 375        .clkr.hw.init = &(struct clk_init_data){
 376                .name = "mmpll4_early",
 377                .parent_names = (const char *[]){ "xo" },
 378                .num_parents = 1,
 379                .ops = &clk_alpha_pll_ops,
 380        },
 381};
 382
 383static struct clk_alpha_pll_postdiv mmpll4 = {
 384        .offset = 0x90,
 385        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 386        .width = 2,
 387        .clkr.hw.init = &(struct clk_init_data){
 388                .name = "mmpll4",
 389                .parent_names = (const char *[]){ "mmpll4_early" },
 390                .num_parents = 1,
 391                .ops = &clk_alpha_pll_postdiv_ops,
 392                .flags = CLK_SET_RATE_PARENT,
 393        },
 394};
 395
 396static struct clk_alpha_pll mmpll5_early = {
 397        .offset = 0xc0,
 398        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 399        .vco_table = mmpll_p_vco,
 400        .num_vco = ARRAY_SIZE(mmpll_p_vco),
 401        .clkr.hw.init = &(struct clk_init_data){
 402                .name = "mmpll5_early",
 403                .parent_names = (const char *[]){ "xo" },
 404                .num_parents = 1,
 405                .ops = &clk_alpha_pll_ops,
 406        },
 407};
 408
 409static struct clk_alpha_pll_postdiv mmpll5 = {
 410        .offset = 0xc0,
 411        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 412        .width = 4,
 413        .clkr.hw.init = &(struct clk_init_data){
 414                .name = "mmpll5",
 415                .parent_names = (const char *[]){ "mmpll5_early" },
 416                .num_parents = 1,
 417                .ops = &clk_alpha_pll_postdiv_ops,
 418                .flags = CLK_SET_RATE_PARENT,
 419        },
 420};
 421
 422static struct clk_alpha_pll mmpll8_early = {
 423        .offset = 0x4130,
 424        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 425        .vco_table = mmpll_gfx_vco,
 426        .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
 427        .clkr.hw.init = &(struct clk_init_data){
 428                .name = "mmpll8_early",
 429                .parent_names = (const char *[]){ "xo" },
 430                .num_parents = 1,
 431                .ops = &clk_alpha_pll_ops,
 432        },
 433};
 434
 435static struct clk_alpha_pll_postdiv mmpll8 = {
 436        .offset = 0x4130,
 437        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 438        .width = 4,
 439        .clkr.hw.init = &(struct clk_init_data){
 440                .name = "mmpll8",
 441                .parent_names = (const char *[]){ "mmpll8_early" },
 442                .num_parents = 1,
 443                .ops = &clk_alpha_pll_postdiv_ops,
 444                .flags = CLK_SET_RATE_PARENT,
 445        },
 446};
 447
 448static struct clk_alpha_pll mmpll9_early = {
 449        .offset = 0x4200,
 450        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 451        .vco_table = mmpll_t_vco,
 452        .num_vco = ARRAY_SIZE(mmpll_t_vco),
 453        .clkr.hw.init = &(struct clk_init_data){
 454                .name = "mmpll9_early",
 455                .parent_names = (const char *[]){ "xo" },
 456                .num_parents = 1,
 457                .ops = &clk_alpha_pll_ops,
 458        },
 459};
 460
 461static struct clk_alpha_pll_postdiv mmpll9 = {
 462        .offset = 0x4200,
 463        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 464        .width = 2,
 465        .clkr.hw.init = &(struct clk_init_data){
 466                .name = "mmpll9",
 467                .parent_names = (const char *[]){ "mmpll9_early" },
 468                .num_parents = 1,
 469                .ops = &clk_alpha_pll_postdiv_ops,
 470                .flags = CLK_SET_RATE_PARENT,
 471        },
 472};
 473
 474static const struct freq_tbl ftbl_ahb_clk_src[] = {
 475        F(19200000, P_XO, 1, 0, 0),
 476        F(40000000, P_GPLL0_DIV, 7.5, 0, 0),
 477        F(80000000, P_MMPLL0, 10, 0, 0),
 478        { }
 479};
 480
 481static struct clk_rcg2 ahb_clk_src = {
 482        .cmd_rcgr = 0x5000,
 483        .hid_width = 5,
 484        .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
 485        .freq_tbl = ftbl_ahb_clk_src,
 486        .clkr.hw.init = &(struct clk_init_data){
 487                .name = "ahb_clk_src",
 488                .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div,
 489                .num_parents = 4,
 490                .ops = &clk_rcg2_ops,
 491        },
 492};
 493
 494static const struct freq_tbl ftbl_axi_clk_src[] = {
 495        F(19200000, P_XO, 1, 0, 0),
 496        F(75000000, P_GPLL0_DIV, 4, 0, 0),
 497        F(100000000, P_GPLL0, 6, 0, 0),
 498        F(171430000, P_GPLL0, 3.5, 0, 0),
 499        F(200000000, P_GPLL0, 3, 0, 0),
 500        F(320000000, P_MMPLL0, 2.5, 0, 0),
 501        F(400000000, P_MMPLL0, 2, 0, 0),
 502        { }
 503};
 504
 505static struct clk_rcg2 axi_clk_src = {
 506        .cmd_rcgr = 0x5040,
 507        .hid_width = 5,
 508        .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
 509        .freq_tbl = ftbl_axi_clk_src,
 510        .clkr.hw.init = &(struct clk_init_data){
 511                .name = "axi_clk_src",
 512                .parent_names = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
 513                .num_parents = 5,
 514                .ops = &clk_rcg2_ops,
 515        },
 516};
 517
 518static struct clk_rcg2 maxi_clk_src = {
 519        .cmd_rcgr = 0x5090,
 520        .hid_width = 5,
 521        .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
 522        .freq_tbl = ftbl_axi_clk_src,
 523        .clkr.hw.init = &(struct clk_init_data){
 524                .name = "maxi_clk_src",
 525                .parent_names = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
 526                .num_parents = 5,
 527                .ops = &clk_rcg2_ops,
 528        },
 529};
 530
 531static struct clk_rcg2 gfx3d_clk_src = {
 532        .cmd_rcgr = 0x4000,
 533        .hid_width = 5,
 534        .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map,
 535        .clkr.hw.init = &(struct clk_init_data){
 536                .name = "gfx3d_clk_src",
 537                .parent_names = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0,
 538                .num_parents = 6,
 539                .ops = &clk_gfx3d_ops,
 540                .flags = CLK_SET_RATE_PARENT,
 541        },
 542};
 543
 544static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = {
 545        F(19200000, P_XO, 1, 0, 0),
 546        { }
 547};
 548
 549static struct clk_rcg2 rbbmtimer_clk_src = {
 550        .cmd_rcgr = 0x4090,
 551        .hid_width = 5,
 552        .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
 553        .freq_tbl = ftbl_rbbmtimer_clk_src,
 554        .clkr.hw.init = &(struct clk_init_data){
 555                .name = "rbbmtimer_clk_src",
 556                .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div,
 557                .num_parents = 4,
 558                .ops = &clk_rcg2_ops,
 559        },
 560};
 561
 562static struct clk_rcg2 isense_clk_src = {
 563        .cmd_rcgr = 0x4010,
 564        .hid_width = 5,
 565        .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map,
 566        .clkr.hw.init = &(struct clk_init_data){
 567                .name = "isense_clk_src",
 568                .parent_names = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div,
 569                .num_parents = 7,
 570                .ops = &clk_rcg2_ops,
 571        },
 572};
 573
 574static const struct freq_tbl ftbl_rbcpr_clk_src[] = {
 575        F(19200000, P_XO, 1, 0, 0),
 576        F(50000000, P_GPLL0, 12, 0, 0),
 577        { }
 578};
 579
 580static struct clk_rcg2 rbcpr_clk_src = {
 581        .cmd_rcgr = 0x4060,
 582        .hid_width = 5,
 583        .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
 584        .freq_tbl = ftbl_rbcpr_clk_src,
 585        .clkr.hw.init = &(struct clk_init_data){
 586                .name = "rbcpr_clk_src",
 587                .parent_names = mmss_xo_mmpll0_gpll0_gpll0_div,
 588                .num_parents = 4,
 589                .ops = &clk_rcg2_ops,
 590        },
 591};
 592
 593static const struct freq_tbl ftbl_video_core_clk_src[] = {
 594        F(75000000, P_GPLL0_DIV, 4, 0, 0),
 595        F(150000000, P_GPLL0, 4, 0, 0),
 596        F(346666667, P_MMPLL3, 3, 0, 0),
 597        F(520000000, P_MMPLL3, 2, 0, 0),
 598        { }
 599};
 600
 601static struct clk_rcg2 video_core_clk_src = {
 602        .cmd_rcgr = 0x1000,
 603        .mnd_width = 8,
 604        .hid_width = 5,
 605        .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
 606        .freq_tbl = ftbl_video_core_clk_src,
 607        .clkr.hw.init = &(struct clk_init_data){
 608                .name = "video_core_clk_src",
 609                .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
 610                .num_parents = 5,
 611                .ops = &clk_rcg2_ops,
 612        },
 613};
 614
 615static struct clk_rcg2 video_subcore0_clk_src = {
 616        .cmd_rcgr = 0x1060,
 617        .mnd_width = 8,
 618        .hid_width = 5,
 619        .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
 620        .freq_tbl = ftbl_video_core_clk_src,
 621        .clkr.hw.init = &(struct clk_init_data){
 622                .name = "video_subcore0_clk_src",
 623                .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
 624                .num_parents = 5,
 625                .ops = &clk_rcg2_ops,
 626        },
 627};
 628
 629static struct clk_rcg2 video_subcore1_clk_src = {
 630        .cmd_rcgr = 0x1080,
 631        .mnd_width = 8,
 632        .hid_width = 5,
 633        .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
 634        .freq_tbl = ftbl_video_core_clk_src,
 635        .clkr.hw.init = &(struct clk_init_data){
 636                .name = "video_subcore1_clk_src",
 637                .parent_names = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
 638                .num_parents = 5,
 639                .ops = &clk_rcg2_ops,
 640        },
 641};
 642
 643static struct clk_rcg2 pclk0_clk_src = {
 644        .cmd_rcgr = 0x2000,
 645        .mnd_width = 8,
 646        .hid_width = 5,
 647        .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
 648        .clkr.hw.init = &(struct clk_init_data){
 649                .name = "pclk0_clk_src",
 650                .parent_names = mmss_xo_dsi0pll_dsi1pll,
 651                .num_parents = 3,
 652                .ops = &clk_pixel_ops,
 653                .flags = CLK_SET_RATE_PARENT,
 654        },
 655};
 656
 657static struct clk_rcg2 pclk1_clk_src = {
 658        .cmd_rcgr = 0x2020,
 659        .mnd_width = 8,
 660        .hid_width = 5,
 661        .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
 662        .clkr.hw.init = &(struct clk_init_data){
 663                .name = "pclk1_clk_src",
 664                .parent_names = mmss_xo_dsi0pll_dsi1pll,
 665                .num_parents = 3,
 666                .ops = &clk_pixel_ops,
 667                .flags = CLK_SET_RATE_PARENT,
 668        },
 669};
 670
 671static const struct freq_tbl ftbl_mdp_clk_src[] = {
 672        F(85714286, P_GPLL0, 7, 0, 0),
 673        F(100000000, P_GPLL0, 6, 0, 0),
 674        F(150000000, P_GPLL0, 4, 0, 0),
 675        F(171428571, P_GPLL0, 3.5, 0, 0),
 676        F(200000000, P_GPLL0, 3, 0, 0),
 677        F(275000000, P_MMPLL5, 3, 0, 0),
 678        F(300000000, P_GPLL0, 2, 0, 0),
 679        F(330000000, P_MMPLL5, 2.5, 0, 0),
 680        F(412500000, P_MMPLL5, 2, 0, 0),
 681        { }
 682};
 683
 684static struct clk_rcg2 mdp_clk_src = {
 685        .cmd_rcgr = 0x2040,
 686        .hid_width = 5,
 687        .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
 688        .freq_tbl = ftbl_mdp_clk_src,
 689        .clkr.hw.init = &(struct clk_init_data){
 690                .name = "mdp_clk_src",
 691                .parent_names = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
 692                .num_parents = 5,
 693                .ops = &clk_rcg2_ops,
 694        },
 695};
 696
 697static struct freq_tbl extpclk_freq_tbl[] = {
 698        { .src = P_HDMIPLL },
 699        { }
 700};
 701
 702static struct clk_rcg2 extpclk_clk_src = {
 703        .cmd_rcgr = 0x2060,
 704        .hid_width = 5,
 705        .parent_map = mmss_xo_hdmi_map,
 706        .freq_tbl = extpclk_freq_tbl,
 707        .clkr.hw.init = &(struct clk_init_data){
 708                .name = "extpclk_clk_src",
 709                .parent_names = mmss_xo_hdmi,
 710                .num_parents = 2,
 711                .ops = &clk_byte_ops,
 712                .flags = CLK_SET_RATE_PARENT,
 713        },
 714};
 715
 716static struct freq_tbl ftbl_mdss_vsync_clk[] = {
 717        F(19200000, P_XO, 1, 0, 0),
 718        { }
 719};
 720
 721static struct clk_rcg2 vsync_clk_src = {
 722        .cmd_rcgr = 0x2080,
 723        .hid_width = 5,
 724        .parent_map = mmss_xo_gpll0_gpll0_div_map,
 725        .freq_tbl = ftbl_mdss_vsync_clk,
 726        .clkr.hw.init = &(struct clk_init_data){
 727                .name = "vsync_clk_src",
 728                .parent_names = mmss_xo_gpll0_gpll0_div,
 729                .num_parents = 3,
 730                .ops = &clk_rcg2_ops,
 731        },
 732};
 733
 734static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
 735        F(19200000, P_XO, 1, 0, 0),
 736        { }
 737};
 738
 739static struct clk_rcg2 hdmi_clk_src = {
 740        .cmd_rcgr = 0x2100,
 741        .hid_width = 5,
 742        .parent_map = mmss_xo_gpll0_gpll0_div_map,
 743        .freq_tbl = ftbl_mdss_hdmi_clk,
 744        .clkr.hw.init = &(struct clk_init_data){
 745                .name = "hdmi_clk_src",
 746                .parent_names = mmss_xo_gpll0_gpll0_div,
 747                .num_parents = 3,
 748                .ops = &clk_rcg2_ops,
 749        },
 750};
 751
 752static struct clk_rcg2 byte0_clk_src = {
 753        .cmd_rcgr = 0x2120,
 754        .hid_width = 5,
 755        .parent_map = mmss_xo_dsibyte_map,
 756        .clkr.hw.init = &(struct clk_init_data){
 757                .name = "byte0_clk_src",
 758                .parent_names = mmss_xo_dsibyte,
 759                .num_parents = 3,
 760                .ops = &clk_byte2_ops,
 761                .flags = CLK_SET_RATE_PARENT,
 762        },
 763};
 764
 765static struct clk_rcg2 byte1_clk_src = {
 766        .cmd_rcgr = 0x2140,
 767        .hid_width = 5,
 768        .parent_map = mmss_xo_dsibyte_map,
 769        .clkr.hw.init = &(struct clk_init_data){
 770                .name = "byte1_clk_src",
 771                .parent_names = mmss_xo_dsibyte,
 772                .num_parents = 3,
 773                .ops = &clk_byte2_ops,
 774                .flags = CLK_SET_RATE_PARENT,
 775        },
 776};
 777
 778static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
 779        F(19200000, P_XO, 1, 0, 0),
 780        { }
 781};
 782
 783static struct clk_rcg2 esc0_clk_src = {
 784        .cmd_rcgr = 0x2160,
 785        .hid_width = 5,
 786        .parent_map = mmss_xo_dsibyte_map,
 787        .freq_tbl = ftbl_mdss_esc0_1_clk,
 788        .clkr.hw.init = &(struct clk_init_data){
 789                .name = "esc0_clk_src",
 790                .parent_names = mmss_xo_dsibyte,
 791                .num_parents = 3,
 792                .ops = &clk_rcg2_ops,
 793        },
 794};
 795
 796static struct clk_rcg2 esc1_clk_src = {
 797        .cmd_rcgr = 0x2180,
 798        .hid_width = 5,
 799        .parent_map = mmss_xo_dsibyte_map,
 800        .freq_tbl = ftbl_mdss_esc0_1_clk,
 801        .clkr.hw.init = &(struct clk_init_data){
 802                .name = "esc1_clk_src",
 803                .parent_names = mmss_xo_dsibyte,
 804                .num_parents = 3,
 805                .ops = &clk_rcg2_ops,
 806        },
 807};
 808
 809static const struct freq_tbl ftbl_camss_gp0_clk_src[] = {
 810        F(10000, P_XO, 16, 1, 120),
 811        F(24000, P_XO, 16, 1, 50),
 812        F(6000000, P_GPLL0_DIV, 10, 1, 5),
 813        F(12000000, P_GPLL0_DIV, 1, 1, 25),
 814        F(13000000, P_GPLL0_DIV, 2, 13, 150),
 815        F(24000000, P_GPLL0_DIV, 1, 2, 25),
 816        { }
 817};
 818
 819static struct clk_rcg2 camss_gp0_clk_src = {
 820        .cmd_rcgr = 0x3420,
 821        .mnd_width = 8,
 822        .hid_width = 5,
 823        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 824        .freq_tbl = ftbl_camss_gp0_clk_src,
 825        .clkr.hw.init = &(struct clk_init_data){
 826                .name = "camss_gp0_clk_src",
 827                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 828                .num_parents = 5,
 829                .ops = &clk_rcg2_ops,
 830        },
 831};
 832
 833static struct clk_rcg2 camss_gp1_clk_src = {
 834        .cmd_rcgr = 0x3450,
 835        .mnd_width = 8,
 836        .hid_width = 5,
 837        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 838        .freq_tbl = ftbl_camss_gp0_clk_src,
 839        .clkr.hw.init = &(struct clk_init_data){
 840                .name = "camss_gp1_clk_src",
 841                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 842                .num_parents = 5,
 843                .ops = &clk_rcg2_ops,
 844        },
 845};
 846
 847static const struct freq_tbl ftbl_mclk0_clk_src[] = {
 848        F(4800000, P_XO, 4, 0, 0),
 849        F(6000000, P_GPLL0_DIV, 10, 1, 5),
 850        F(8000000, P_GPLL0_DIV, 1, 2, 75),
 851        F(9600000, P_XO, 2, 0, 0),
 852        F(16666667, P_GPLL0_DIV, 2, 1, 9),
 853        F(19200000, P_XO, 1, 0, 0),
 854        F(24000000, P_GPLL0_DIV, 1, 2, 25),
 855        F(33333333, P_GPLL0_DIV, 1, 1, 9),
 856        F(48000000, P_GPLL0, 1, 2, 25),
 857        F(66666667, P_GPLL0, 1, 1, 9),
 858        { }
 859};
 860
 861static struct clk_rcg2 mclk0_clk_src = {
 862        .cmd_rcgr = 0x3360,
 863        .mnd_width = 8,
 864        .hid_width = 5,
 865        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 866        .freq_tbl = ftbl_mclk0_clk_src,
 867        .clkr.hw.init = &(struct clk_init_data){
 868                .name = "mclk0_clk_src",
 869                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 870                .num_parents = 5,
 871                .ops = &clk_rcg2_ops,
 872        },
 873};
 874
 875static struct clk_rcg2 mclk1_clk_src = {
 876        .cmd_rcgr = 0x3390,
 877        .mnd_width = 8,
 878        .hid_width = 5,
 879        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 880        .freq_tbl = ftbl_mclk0_clk_src,
 881        .clkr.hw.init = &(struct clk_init_data){
 882                .name = "mclk1_clk_src",
 883                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 884                .num_parents = 5,
 885                .ops = &clk_rcg2_ops,
 886        },
 887};
 888
 889static struct clk_rcg2 mclk2_clk_src = {
 890        .cmd_rcgr = 0x33c0,
 891        .mnd_width = 8,
 892        .hid_width = 5,
 893        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 894        .freq_tbl = ftbl_mclk0_clk_src,
 895        .clkr.hw.init = &(struct clk_init_data){
 896                .name = "mclk2_clk_src",
 897                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 898                .num_parents = 5,
 899                .ops = &clk_rcg2_ops,
 900        },
 901};
 902
 903static struct clk_rcg2 mclk3_clk_src = {
 904        .cmd_rcgr = 0x33f0,
 905        .mnd_width = 8,
 906        .hid_width = 5,
 907        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 908        .freq_tbl = ftbl_mclk0_clk_src,
 909        .clkr.hw.init = &(struct clk_init_data){
 910                .name = "mclk3_clk_src",
 911                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 912                .num_parents = 5,
 913                .ops = &clk_rcg2_ops,
 914        },
 915};
 916
 917static const struct freq_tbl ftbl_cci_clk_src[] = {
 918        F(19200000, P_XO, 1, 0, 0),
 919        F(37500000, P_GPLL0, 16, 0, 0),
 920        F(50000000, P_GPLL0, 12, 0, 0),
 921        F(100000000, P_GPLL0, 6, 0, 0),
 922        { }
 923};
 924
 925static struct clk_rcg2 cci_clk_src = {
 926        .cmd_rcgr = 0x3300,
 927        .mnd_width = 8,
 928        .hid_width = 5,
 929        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
 930        .freq_tbl = ftbl_cci_clk_src,
 931        .clkr.hw.init = &(struct clk_init_data){
 932                .name = "cci_clk_src",
 933                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
 934                .num_parents = 5,
 935                .ops = &clk_rcg2_ops,
 936        },
 937};
 938
 939static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = {
 940        F(100000000, P_GPLL0_DIV, 3, 0, 0),
 941        F(200000000, P_GPLL0, 3, 0, 0),
 942        F(266666667, P_MMPLL0, 3, 0, 0),
 943        { }
 944};
 945
 946static struct clk_rcg2 csi0phytimer_clk_src = {
 947        .cmd_rcgr = 0x3000,
 948        .hid_width = 5,
 949        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
 950        .freq_tbl = ftbl_csi0phytimer_clk_src,
 951        .clkr.hw.init = &(struct clk_init_data){
 952                .name = "csi0phytimer_clk_src",
 953                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
 954                .num_parents = 7,
 955                .ops = &clk_rcg2_ops,
 956        },
 957};
 958
 959static struct clk_rcg2 csi1phytimer_clk_src = {
 960        .cmd_rcgr = 0x3030,
 961        .hid_width = 5,
 962        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
 963        .freq_tbl = ftbl_csi0phytimer_clk_src,
 964        .clkr.hw.init = &(struct clk_init_data){
 965                .name = "csi1phytimer_clk_src",
 966                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
 967                .num_parents = 7,
 968                .ops = &clk_rcg2_ops,
 969        },
 970};
 971
 972static struct clk_rcg2 csi2phytimer_clk_src = {
 973        .cmd_rcgr = 0x3060,
 974        .hid_width = 5,
 975        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
 976        .freq_tbl = ftbl_csi0phytimer_clk_src,
 977        .clkr.hw.init = &(struct clk_init_data){
 978                .name = "csi2phytimer_clk_src",
 979                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
 980                .num_parents = 7,
 981                .ops = &clk_rcg2_ops,
 982        },
 983};
 984
 985static const struct freq_tbl ftbl_csiphy0_3p_clk_src[] = {
 986        F(100000000, P_GPLL0_DIV, 3, 0, 0),
 987        F(200000000, P_GPLL0, 3, 0, 0),
 988        F(320000000, P_MMPLL4, 3, 0, 0),
 989        F(384000000, P_MMPLL4, 2.5, 0, 0),
 990        { }
 991};
 992
 993static struct clk_rcg2 csiphy0_3p_clk_src = {
 994        .cmd_rcgr = 0x3240,
 995        .hid_width = 5,
 996        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
 997        .freq_tbl = ftbl_csiphy0_3p_clk_src,
 998        .clkr.hw.init = &(struct clk_init_data){
 999                .name = "csiphy0_3p_clk_src",
1000                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1001                .num_parents = 7,
1002                .ops = &clk_rcg2_ops,
1003        },
1004};
1005
1006static struct clk_rcg2 csiphy1_3p_clk_src = {
1007        .cmd_rcgr = 0x3260,
1008        .hid_width = 5,
1009        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1010        .freq_tbl = ftbl_csiphy0_3p_clk_src,
1011        .clkr.hw.init = &(struct clk_init_data){
1012                .name = "csiphy1_3p_clk_src",
1013                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1014                .num_parents = 7,
1015                .ops = &clk_rcg2_ops,
1016        },
1017};
1018
1019static struct clk_rcg2 csiphy2_3p_clk_src = {
1020        .cmd_rcgr = 0x3280,
1021        .hid_width = 5,
1022        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1023        .freq_tbl = ftbl_csiphy0_3p_clk_src,
1024        .clkr.hw.init = &(struct clk_init_data){
1025                .name = "csiphy2_3p_clk_src",
1026                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1027                .num_parents = 7,
1028                .ops = &clk_rcg2_ops,
1029        },
1030};
1031
1032static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1033        F(75000000, P_GPLL0_DIV, 4, 0, 0),
1034        F(150000000, P_GPLL0, 4, 0, 0),
1035        F(228571429, P_MMPLL0, 3.5, 0, 0),
1036        F(266666667, P_MMPLL0, 3, 0, 0),
1037        F(320000000, P_MMPLL0, 2.5, 0, 0),
1038        F(480000000, P_MMPLL4, 2, 0, 0),
1039        { }
1040};
1041
1042static struct clk_rcg2 jpeg0_clk_src = {
1043        .cmd_rcgr = 0x3500,
1044        .hid_width = 5,
1045        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1046        .freq_tbl = ftbl_jpeg0_clk_src,
1047        .clkr.hw.init = &(struct clk_init_data){
1048                .name = "jpeg0_clk_src",
1049                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1050                .num_parents = 7,
1051                .ops = &clk_rcg2_ops,
1052        },
1053};
1054
1055static const struct freq_tbl ftbl_jpeg2_clk_src[] = {
1056        F(75000000, P_GPLL0_DIV, 4, 0, 0),
1057        F(150000000, P_GPLL0, 4, 0, 0),
1058        F(228571429, P_MMPLL0, 3.5, 0, 0),
1059        F(266666667, P_MMPLL0, 3, 0, 0),
1060        F(320000000, P_MMPLL0, 2.5, 0, 0),
1061        { }
1062};
1063
1064static struct clk_rcg2 jpeg2_clk_src = {
1065        .cmd_rcgr = 0x3540,
1066        .hid_width = 5,
1067        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1068        .freq_tbl = ftbl_jpeg2_clk_src,
1069        .clkr.hw.init = &(struct clk_init_data){
1070                .name = "jpeg2_clk_src",
1071                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1072                .num_parents = 7,
1073                .ops = &clk_rcg2_ops,
1074        },
1075};
1076
1077static struct clk_rcg2 jpeg_dma_clk_src = {
1078        .cmd_rcgr = 0x3560,
1079        .hid_width = 5,
1080        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1081        .freq_tbl = ftbl_jpeg0_clk_src,
1082        .clkr.hw.init = &(struct clk_init_data){
1083                .name = "jpeg_dma_clk_src",
1084                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1085                .num_parents = 7,
1086                .ops = &clk_rcg2_ops,
1087        },
1088};
1089
1090static const struct freq_tbl ftbl_vfe0_clk_src[] = {
1091        F(75000000, P_GPLL0_DIV, 4, 0, 0),
1092        F(100000000, P_GPLL0_DIV, 3, 0, 0),
1093        F(300000000, P_GPLL0, 2, 0, 0),
1094        F(320000000, P_MMPLL0, 2.5, 0, 0),
1095        F(480000000, P_MMPLL4, 2, 0, 0),
1096        F(600000000, P_GPLL0, 1, 0, 0),
1097        { }
1098};
1099
1100static struct clk_rcg2 vfe0_clk_src = {
1101        .cmd_rcgr = 0x3600,
1102        .hid_width = 5,
1103        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1104        .freq_tbl = ftbl_vfe0_clk_src,
1105        .clkr.hw.init = &(struct clk_init_data){
1106                .name = "vfe0_clk_src",
1107                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1108                .num_parents = 7,
1109                .ops = &clk_rcg2_ops,
1110        },
1111};
1112
1113static struct clk_rcg2 vfe1_clk_src = {
1114        .cmd_rcgr = 0x3620,
1115        .hid_width = 5,
1116        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1117        .freq_tbl = ftbl_vfe0_clk_src,
1118        .clkr.hw.init = &(struct clk_init_data){
1119                .name = "vfe1_clk_src",
1120                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1121                .num_parents = 7,
1122                .ops = &clk_rcg2_ops,
1123        },
1124};
1125
1126static const struct freq_tbl ftbl_cpp_clk_src[] = {
1127        F(100000000, P_GPLL0_DIV, 3, 0, 0),
1128        F(200000000, P_GPLL0, 3, 0, 0),
1129        F(320000000, P_MMPLL0, 2.5, 0, 0),
1130        F(480000000, P_MMPLL4, 2, 0, 0),
1131        F(640000000, P_MMPLL4, 1.5, 0, 0),
1132        { }
1133};
1134
1135static struct clk_rcg2 cpp_clk_src = {
1136        .cmd_rcgr = 0x3640,
1137        .hid_width = 5,
1138        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1139        .freq_tbl = ftbl_cpp_clk_src,
1140        .clkr.hw.init = &(struct clk_init_data){
1141                .name = "cpp_clk_src",
1142                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1143                .num_parents = 7,
1144                .ops = &clk_rcg2_ops,
1145        },
1146};
1147
1148static const struct freq_tbl ftbl_csi0_clk_src[] = {
1149        F(100000000, P_GPLL0_DIV, 3, 0, 0),
1150        F(200000000, P_GPLL0, 3, 0, 0),
1151        F(266666667, P_MMPLL0, 3, 0, 0),
1152        F(480000000, P_MMPLL4, 2, 0, 0),
1153        F(600000000, P_GPLL0, 1, 0, 0),
1154        { }
1155};
1156
1157static struct clk_rcg2 csi0_clk_src = {
1158        .cmd_rcgr = 0x3090,
1159        .hid_width = 5,
1160        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1161        .freq_tbl = ftbl_csi0_clk_src,
1162        .clkr.hw.init = &(struct clk_init_data){
1163                .name = "csi0_clk_src",
1164                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1165                .num_parents = 7,
1166                .ops = &clk_rcg2_ops,
1167        },
1168};
1169
1170static struct clk_rcg2 csi1_clk_src = {
1171        .cmd_rcgr = 0x3100,
1172        .hid_width = 5,
1173        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1174        .freq_tbl = ftbl_csi0_clk_src,
1175        .clkr.hw.init = &(struct clk_init_data){
1176                .name = "csi1_clk_src",
1177                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1178                .num_parents = 7,
1179                .ops = &clk_rcg2_ops,
1180        },
1181};
1182
1183static struct clk_rcg2 csi2_clk_src = {
1184        .cmd_rcgr = 0x3160,
1185        .hid_width = 5,
1186        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1187        .freq_tbl = ftbl_csi0_clk_src,
1188        .clkr.hw.init = &(struct clk_init_data){
1189                .name = "csi2_clk_src",
1190                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1191                .num_parents = 7,
1192                .ops = &clk_rcg2_ops,
1193        },
1194};
1195
1196static struct clk_rcg2 csi3_clk_src = {
1197        .cmd_rcgr = 0x31c0,
1198        .hid_width = 5,
1199        .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1200        .freq_tbl = ftbl_csi0_clk_src,
1201        .clkr.hw.init = &(struct clk_init_data){
1202                .name = "csi3_clk_src",
1203                .parent_names = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1204                .num_parents = 7,
1205                .ops = &clk_rcg2_ops,
1206        },
1207};
1208
1209static const struct freq_tbl ftbl_fd_core_clk_src[] = {
1210        F(100000000, P_GPLL0_DIV, 3, 0, 0),
1211        F(200000000, P_GPLL0, 3, 0, 0),
1212        F(400000000, P_MMPLL0, 2, 0, 0),
1213        { }
1214};
1215
1216static struct clk_rcg2 fd_core_clk_src = {
1217        .cmd_rcgr = 0x3b00,
1218        .hid_width = 5,
1219        .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
1220        .freq_tbl = ftbl_fd_core_clk_src,
1221        .clkr.hw.init = &(struct clk_init_data){
1222                .name = "fd_core_clk_src",
1223                .parent_names = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
1224                .num_parents = 5,
1225                .ops = &clk_rcg2_ops,
1226        },
1227};
1228
1229static struct clk_branch mmss_mmagic_ahb_clk = {
1230        .halt_reg = 0x5024,
1231        .clkr = {
1232                .enable_reg = 0x5024,
1233                .enable_mask = BIT(0),
1234                .hw.init = &(struct clk_init_data){
1235                        .name = "mmss_mmagic_ahb_clk",
1236                        .parent_names = (const char *[]){ "ahb_clk_src" },
1237                        .num_parents = 1,
1238                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1239                        .ops = &clk_branch2_ops,
1240                },
1241        },
1242};
1243
1244static struct clk_branch mmss_mmagic_cfg_ahb_clk = {
1245        .halt_reg = 0x5054,
1246        .clkr = {
1247                .enable_reg = 0x5054,
1248                .enable_mask = BIT(0),
1249                .hw.init = &(struct clk_init_data){
1250                        .name = "mmss_mmagic_cfg_ahb_clk",
1251                        .parent_names = (const char *[]){ "ahb_clk_src" },
1252                        .num_parents = 1,
1253                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1254                        .ops = &clk_branch2_ops,
1255                },
1256        },
1257};
1258
1259static struct clk_branch mmss_misc_ahb_clk = {
1260        .halt_reg = 0x5018,
1261        .clkr = {
1262                .enable_reg = 0x5018,
1263                .enable_mask = BIT(0),
1264                .hw.init = &(struct clk_init_data){
1265                        .name = "mmss_misc_ahb_clk",
1266                        .parent_names = (const char *[]){ "ahb_clk_src" },
1267                        .num_parents = 1,
1268                        .flags = CLK_SET_RATE_PARENT,
1269                        .ops = &clk_branch2_ops,
1270                },
1271        },
1272};
1273
1274static struct clk_branch mmss_misc_cxo_clk = {
1275        .halt_reg = 0x5014,
1276        .clkr = {
1277                .enable_reg = 0x5014,
1278                .enable_mask = BIT(0),
1279                .hw.init = &(struct clk_init_data){
1280                        .name = "mmss_misc_cxo_clk",
1281                        .parent_names = (const char *[]){ "xo" },
1282                        .num_parents = 1,
1283                        .ops = &clk_branch2_ops,
1284                },
1285        },
1286};
1287
1288static struct clk_branch mmss_mmagic_maxi_clk = {
1289        .halt_reg = 0x5074,
1290        .clkr = {
1291                .enable_reg = 0x5074,
1292                .enable_mask = BIT(0),
1293                .hw.init = &(struct clk_init_data){
1294                        .name = "mmss_mmagic_maxi_clk",
1295                        .parent_names = (const char *[]){ "maxi_clk_src" },
1296                        .num_parents = 1,
1297                        .flags = CLK_SET_RATE_PARENT,
1298                        .ops = &clk_branch2_ops,
1299                },
1300        },
1301};
1302
1303static struct clk_branch mmagic_camss_axi_clk = {
1304        .halt_reg = 0x3c44,
1305        .clkr = {
1306                .enable_reg = 0x3c44,
1307                .enable_mask = BIT(0),
1308                .hw.init = &(struct clk_init_data){
1309                        .name = "mmagic_camss_axi_clk",
1310                        .parent_names = (const char *[]){ "axi_clk_src" },
1311                        .num_parents = 1,
1312                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1313                        .ops = &clk_branch2_ops,
1314                },
1315        },
1316};
1317
1318static struct clk_branch mmagic_camss_noc_cfg_ahb_clk = {
1319        .halt_reg = 0x3c48,
1320        .clkr = {
1321                .enable_reg = 0x3c48,
1322                .enable_mask = BIT(0),
1323                .hw.init = &(struct clk_init_data){
1324                        .name = "mmagic_camss_noc_cfg_ahb_clk",
1325                        .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1326                        .num_parents = 1,
1327                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1328                        .ops = &clk_branch2_ops,
1329                },
1330        },
1331};
1332
1333static struct clk_branch smmu_vfe_ahb_clk = {
1334        .halt_reg = 0x3c04,
1335        .clkr = {
1336                .enable_reg = 0x3c04,
1337                .enable_mask = BIT(0),
1338                .hw.init = &(struct clk_init_data){
1339                        .name = "smmu_vfe_ahb_clk",
1340                        .parent_names = (const char *[]){ "ahb_clk_src" },
1341                        .num_parents = 1,
1342                        .flags = CLK_SET_RATE_PARENT,
1343                        .ops = &clk_branch2_ops,
1344                },
1345        },
1346};
1347
1348static struct clk_branch smmu_vfe_axi_clk = {
1349        .halt_reg = 0x3c08,
1350        .clkr = {
1351                .enable_reg = 0x3c08,
1352                .enable_mask = BIT(0),
1353                .hw.init = &(struct clk_init_data){
1354                        .name = "smmu_vfe_axi_clk",
1355                        .parent_names = (const char *[]){ "axi_clk_src" },
1356                        .num_parents = 1,
1357                        .flags = CLK_SET_RATE_PARENT,
1358                        .ops = &clk_branch2_ops,
1359                },
1360        },
1361};
1362
1363static struct clk_branch smmu_cpp_ahb_clk = {
1364        .halt_reg = 0x3c14,
1365        .clkr = {
1366                .enable_reg = 0x3c14,
1367                .enable_mask = BIT(0),
1368                .hw.init = &(struct clk_init_data){
1369                        .name = "smmu_cpp_ahb_clk",
1370                        .parent_names = (const char *[]){ "ahb_clk_src" },
1371                        .num_parents = 1,
1372                        .flags = CLK_SET_RATE_PARENT,
1373                        .ops = &clk_branch2_ops,
1374                },
1375        },
1376};
1377
1378static struct clk_branch smmu_cpp_axi_clk = {
1379        .halt_reg = 0x3c18,
1380        .clkr = {
1381                .enable_reg = 0x3c18,
1382                .enable_mask = BIT(0),
1383                .hw.init = &(struct clk_init_data){
1384                        .name = "smmu_cpp_axi_clk",
1385                        .parent_names = (const char *[]){ "axi_clk_src" },
1386                        .num_parents = 1,
1387                        .flags = CLK_SET_RATE_PARENT,
1388                        .ops = &clk_branch2_ops,
1389                },
1390        },
1391};
1392
1393static struct clk_branch smmu_jpeg_ahb_clk = {
1394        .halt_reg = 0x3c24,
1395        .clkr = {
1396                .enable_reg = 0x3c24,
1397                .enable_mask = BIT(0),
1398                .hw.init = &(struct clk_init_data){
1399                        .name = "smmu_jpeg_ahb_clk",
1400                        .parent_names = (const char *[]){ "ahb_clk_src" },
1401                        .num_parents = 1,
1402                        .flags = CLK_SET_RATE_PARENT,
1403                        .ops = &clk_branch2_ops,
1404                },
1405        },
1406};
1407
1408static struct clk_branch smmu_jpeg_axi_clk = {
1409        .halt_reg = 0x3c28,
1410        .clkr = {
1411                .enable_reg = 0x3c28,
1412                .enable_mask = BIT(0),
1413                .hw.init = &(struct clk_init_data){
1414                        .name = "smmu_jpeg_axi_clk",
1415                        .parent_names = (const char *[]){ "axi_clk_src" },
1416                        .num_parents = 1,
1417                        .flags = CLK_SET_RATE_PARENT,
1418                        .ops = &clk_branch2_ops,
1419                },
1420        },
1421};
1422
1423static struct clk_branch mmagic_mdss_axi_clk = {
1424        .halt_reg = 0x2474,
1425        .clkr = {
1426                .enable_reg = 0x2474,
1427                .enable_mask = BIT(0),
1428                .hw.init = &(struct clk_init_data){
1429                        .name = "mmagic_mdss_axi_clk",
1430                        .parent_names = (const char *[]){ "axi_clk_src" },
1431                        .num_parents = 1,
1432                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1433                        .ops = &clk_branch2_ops,
1434                },
1435        },
1436};
1437
1438static struct clk_branch mmagic_mdss_noc_cfg_ahb_clk = {
1439        .halt_reg = 0x2478,
1440        .clkr = {
1441                .enable_reg = 0x2478,
1442                .enable_mask = BIT(0),
1443                .hw.init = &(struct clk_init_data){
1444                        .name = "mmagic_mdss_noc_cfg_ahb_clk",
1445                        .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1446                        .num_parents = 1,
1447                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1448                        .ops = &clk_branch2_ops,
1449                },
1450        },
1451};
1452
1453static struct clk_branch smmu_rot_ahb_clk = {
1454        .halt_reg = 0x2444,
1455        .clkr = {
1456                .enable_reg = 0x2444,
1457                .enable_mask = BIT(0),
1458                .hw.init = &(struct clk_init_data){
1459                        .name = "smmu_rot_ahb_clk",
1460                        .parent_names = (const char *[]){ "ahb_clk_src" },
1461                        .num_parents = 1,
1462                        .flags = CLK_SET_RATE_PARENT,
1463                        .ops = &clk_branch2_ops,
1464                },
1465        },
1466};
1467
1468static struct clk_branch smmu_rot_axi_clk = {
1469        .halt_reg = 0x2448,
1470        .clkr = {
1471                .enable_reg = 0x2448,
1472                .enable_mask = BIT(0),
1473                .hw.init = &(struct clk_init_data){
1474                        .name = "smmu_rot_axi_clk",
1475                        .parent_names = (const char *[]){ "axi_clk_src" },
1476                        .num_parents = 1,
1477                        .flags = CLK_SET_RATE_PARENT,
1478                        .ops = &clk_branch2_ops,
1479                },
1480        },
1481};
1482
1483static struct clk_branch smmu_mdp_ahb_clk = {
1484        .halt_reg = 0x2454,
1485        .clkr = {
1486                .enable_reg = 0x2454,
1487                .enable_mask = BIT(0),
1488                .hw.init = &(struct clk_init_data){
1489                        .name = "smmu_mdp_ahb_clk",
1490                        .parent_names = (const char *[]){ "ahb_clk_src" },
1491                        .num_parents = 1,
1492                        .flags = CLK_SET_RATE_PARENT,
1493                        .ops = &clk_branch2_ops,
1494                },
1495        },
1496};
1497
1498static struct clk_branch smmu_mdp_axi_clk = {
1499        .halt_reg = 0x2458,
1500        .clkr = {
1501                .enable_reg = 0x2458,
1502                .enable_mask = BIT(0),
1503                .hw.init = &(struct clk_init_data){
1504                        .name = "smmu_mdp_axi_clk",
1505                        .parent_names = (const char *[]){ "axi_clk_src" },
1506                        .num_parents = 1,
1507                        .flags = CLK_SET_RATE_PARENT,
1508                        .ops = &clk_branch2_ops,
1509                },
1510        },
1511};
1512
1513static struct clk_branch mmagic_video_axi_clk = {
1514        .halt_reg = 0x1194,
1515        .clkr = {
1516                .enable_reg = 0x1194,
1517                .enable_mask = BIT(0),
1518                .hw.init = &(struct clk_init_data){
1519                        .name = "mmagic_video_axi_clk",
1520                        .parent_names = (const char *[]){ "axi_clk_src" },
1521                        .num_parents = 1,
1522                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1523                        .ops = &clk_branch2_ops,
1524                },
1525        },
1526};
1527
1528static struct clk_branch mmagic_video_noc_cfg_ahb_clk = {
1529        .halt_reg = 0x1198,
1530        .clkr = {
1531                .enable_reg = 0x1198,
1532                .enable_mask = BIT(0),
1533                .hw.init = &(struct clk_init_data){
1534                        .name = "mmagic_video_noc_cfg_ahb_clk",
1535                        .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1536                        .num_parents = 1,
1537                        .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1538                        .ops = &clk_branch2_ops,
1539                },
1540        },
1541};
1542
1543static struct clk_branch smmu_video_ahb_clk = {
1544        .halt_reg = 0x1174,
1545        .clkr = {
1546                .enable_reg = 0x1174,
1547                .enable_mask = BIT(0),
1548                .hw.init = &(struct clk_init_data){
1549                        .name = "smmu_video_ahb_clk",
1550                        .parent_names = (const char *[]){ "ahb_clk_src" },
1551                        .num_parents = 1,
1552                        .flags = CLK_SET_RATE_PARENT,
1553                        .ops = &clk_branch2_ops,
1554                },
1555        },
1556};
1557
1558static struct clk_branch smmu_video_axi_clk = {
1559        .halt_reg = 0x1178,
1560        .clkr = {
1561                .enable_reg = 0x1178,
1562                .enable_mask = BIT(0),
1563                .hw.init = &(struct clk_init_data){
1564                        .name = "smmu_video_axi_clk",
1565                        .parent_names = (const char *[]){ "axi_clk_src" },
1566                        .num_parents = 1,
1567                        .flags = CLK_SET_RATE_PARENT,
1568                        .ops = &clk_branch2_ops,
1569                },
1570        },
1571};
1572
1573static struct clk_branch mmagic_bimc_noc_cfg_ahb_clk = {
1574        .halt_reg = 0x5298,
1575        .clkr = {
1576                .enable_reg = 0x5298,
1577                .enable_mask = BIT(0),
1578                .hw.init = &(struct clk_init_data){
1579                        .name = "mmagic_bimc_noc_cfg_ahb_clk",
1580                        .parent_names = (const char *[]){ "gcc_mmss_noc_cfg_ahb_clk" },
1581                        .num_parents = 1,
1582                        .flags = CLK_SET_RATE_PARENT,
1583                        .ops = &clk_branch2_ops,
1584                },
1585        },
1586};
1587
1588static struct clk_branch gpu_gx_gfx3d_clk = {
1589        .halt_reg = 0x4028,
1590        .clkr = {
1591                .enable_reg = 0x4028,
1592                .enable_mask = BIT(0),
1593                .hw.init = &(struct clk_init_data){
1594                        .name = "gpu_gx_gfx3d_clk",
1595                        .parent_names = (const char *[]){ "gfx3d_clk_src" },
1596                        .num_parents = 1,
1597                        .flags = CLK_SET_RATE_PARENT,
1598                        .ops = &clk_branch2_ops,
1599                },
1600        },
1601};
1602
1603static struct clk_branch gpu_gx_rbbmtimer_clk = {
1604        .halt_reg = 0x40b0,
1605        .clkr = {
1606                .enable_reg = 0x40b0,
1607                .enable_mask = BIT(0),
1608                .hw.init = &(struct clk_init_data){
1609                        .name = "gpu_gx_rbbmtimer_clk",
1610                        .parent_names = (const char *[]){ "rbbmtimer_clk_src" },
1611                        .num_parents = 1,
1612                        .flags = CLK_SET_RATE_PARENT,
1613                        .ops = &clk_branch2_ops,
1614                },
1615        },
1616};
1617
1618static struct clk_branch gpu_ahb_clk = {
1619        .halt_reg = 0x403c,
1620        .clkr = {
1621                .enable_reg = 0x403c,
1622                .enable_mask = BIT(0),
1623                .hw.init = &(struct clk_init_data){
1624                        .name = "gpu_ahb_clk",
1625                        .parent_names = (const char *[]){ "ahb_clk_src" },
1626                        .num_parents = 1,
1627                        .flags = CLK_SET_RATE_PARENT,
1628                        .ops = &clk_branch2_ops,
1629                },
1630        },
1631};
1632
1633static struct clk_branch gpu_aon_isense_clk = {
1634        .halt_reg = 0x4044,
1635        .clkr = {
1636                .enable_reg = 0x4044,
1637                .enable_mask = BIT(0),
1638                .hw.init = &(struct clk_init_data){
1639                        .name = "gpu_aon_isense_clk",
1640                        .parent_names = (const char *[]){ "isense_clk_src" },
1641                        .num_parents = 1,
1642                        .flags = CLK_SET_RATE_PARENT,
1643                        .ops = &clk_branch2_ops,
1644                },
1645        },
1646};
1647
1648static struct clk_branch vmem_maxi_clk = {
1649        .halt_reg = 0x1204,
1650        .clkr = {
1651                .enable_reg = 0x1204,
1652                .enable_mask = BIT(0),
1653                .hw.init = &(struct clk_init_data){
1654                        .name = "vmem_maxi_clk",
1655                        .parent_names = (const char *[]){ "maxi_clk_src" },
1656                        .num_parents = 1,
1657                        .flags = CLK_SET_RATE_PARENT,
1658                        .ops = &clk_branch2_ops,
1659                },
1660        },
1661};
1662
1663static struct clk_branch vmem_ahb_clk = {
1664        .halt_reg = 0x1208,
1665        .clkr = {
1666                .enable_reg = 0x1208,
1667                .enable_mask = BIT(0),
1668                .hw.init = &(struct clk_init_data){
1669                        .name = "vmem_ahb_clk",
1670                        .parent_names = (const char *[]){ "ahb_clk_src" },
1671                        .num_parents = 1,
1672                        .flags = CLK_SET_RATE_PARENT,
1673                        .ops = &clk_branch2_ops,
1674                },
1675        },
1676};
1677
1678static struct clk_branch mmss_rbcpr_clk = {
1679        .halt_reg = 0x4084,
1680        .clkr = {
1681                .enable_reg = 0x4084,
1682                .enable_mask = BIT(0),
1683                .hw.init = &(struct clk_init_data){
1684                        .name = "mmss_rbcpr_clk",
1685                        .parent_names = (const char *[]){ "rbcpr_clk_src" },
1686                        .num_parents = 1,
1687                        .flags = CLK_SET_RATE_PARENT,
1688                        .ops = &clk_branch2_ops,
1689                },
1690        },
1691};
1692
1693static struct clk_branch mmss_rbcpr_ahb_clk = {
1694        .halt_reg = 0x4088,
1695        .clkr = {
1696                .enable_reg = 0x4088,
1697                .enable_mask = BIT(0),
1698                .hw.init = &(struct clk_init_data){
1699                        .name = "mmss_rbcpr_ahb_clk",
1700                        .parent_names = (const char *[]){ "ahb_clk_src" },
1701                        .num_parents = 1,
1702                        .flags = CLK_SET_RATE_PARENT,
1703                        .ops = &clk_branch2_ops,
1704                },
1705        },
1706};
1707
1708static struct clk_branch video_core_clk = {
1709        .halt_reg = 0x1028,
1710        .clkr = {
1711                .enable_reg = 0x1028,
1712                .enable_mask = BIT(0),
1713                .hw.init = &(struct clk_init_data){
1714                        .name = "video_core_clk",
1715                        .parent_names = (const char *[]){ "video_core_clk_src" },
1716                        .num_parents = 1,
1717                        .flags = CLK_SET_RATE_PARENT,
1718                        .ops = &clk_branch2_ops,
1719                },
1720        },
1721};
1722
1723static struct clk_branch video_axi_clk = {
1724        .halt_reg = 0x1034,
1725        .clkr = {
1726                .enable_reg = 0x1034,
1727                .enable_mask = BIT(0),
1728                .hw.init = &(struct clk_init_data){
1729                        .name = "video_axi_clk",
1730                        .parent_names = (const char *[]){ "axi_clk_src" },
1731                        .num_parents = 1,
1732                        .flags = CLK_SET_RATE_PARENT,
1733                        .ops = &clk_branch2_ops,
1734                },
1735        },
1736};
1737
1738static struct clk_branch video_maxi_clk = {
1739        .halt_reg = 0x1038,
1740        .clkr = {
1741                .enable_reg = 0x1038,
1742                .enable_mask = BIT(0),
1743                .hw.init = &(struct clk_init_data){
1744                        .name = "video_maxi_clk",
1745                        .parent_names = (const char *[]){ "maxi_clk_src" },
1746                        .num_parents = 1,
1747                        .flags = CLK_SET_RATE_PARENT,
1748                        .ops = &clk_branch2_ops,
1749                },
1750        },
1751};
1752
1753static struct clk_branch video_ahb_clk = {
1754        .halt_reg = 0x1030,
1755        .clkr = {
1756                .enable_reg = 0x1030,
1757                .enable_mask = BIT(0),
1758                .hw.init = &(struct clk_init_data){
1759                        .name = "video_ahb_clk",
1760                        .parent_names = (const char *[]){ "ahb_clk_src" },
1761                        .num_parents = 1,
1762                        .flags = CLK_SET_RATE_PARENT,
1763                        .ops = &clk_branch2_ops,
1764                },
1765        },
1766};
1767
1768static struct clk_branch video_subcore0_clk = {
1769        .halt_reg = 0x1048,
1770        .clkr = {
1771                .enable_reg = 0x1048,
1772                .enable_mask = BIT(0),
1773                .hw.init = &(struct clk_init_data){
1774                        .name = "video_subcore0_clk",
1775                        .parent_names = (const char *[]){ "video_subcore0_clk_src" },
1776                        .num_parents = 1,
1777                        .flags = CLK_SET_RATE_PARENT,
1778                        .ops = &clk_branch2_ops,
1779                },
1780        },
1781};
1782
1783static struct clk_branch video_subcore1_clk = {
1784        .halt_reg = 0x104c,
1785        .clkr = {
1786                .enable_reg = 0x104c,
1787                .enable_mask = BIT(0),
1788                .hw.init = &(struct clk_init_data){
1789                        .name = "video_subcore1_clk",
1790                        .parent_names = (const char *[]){ "video_subcore1_clk_src" },
1791                        .num_parents = 1,
1792                        .flags = CLK_SET_RATE_PARENT,
1793                        .ops = &clk_branch2_ops,
1794                },
1795        },
1796};
1797
1798static struct clk_branch mdss_ahb_clk = {
1799        .halt_reg = 0x2308,
1800        .clkr = {
1801                .enable_reg = 0x2308,
1802                .enable_mask = BIT(0),
1803                .hw.init = &(struct clk_init_data){
1804                        .name = "mdss_ahb_clk",
1805                        .parent_names = (const char *[]){ "ahb_clk_src" },
1806                        .num_parents = 1,
1807                        .flags = CLK_SET_RATE_PARENT,
1808                        .ops = &clk_branch2_ops,
1809                },
1810        },
1811};
1812
1813static struct clk_branch mdss_hdmi_ahb_clk = {
1814        .halt_reg = 0x230c,
1815        .clkr = {
1816                .enable_reg = 0x230c,
1817                .enable_mask = BIT(0),
1818                .hw.init = &(struct clk_init_data){
1819                        .name = "mdss_hdmi_ahb_clk",
1820                        .parent_names = (const char *[]){ "ahb_clk_src" },
1821                        .num_parents = 1,
1822                        .flags = CLK_SET_RATE_PARENT,
1823                        .ops = &clk_branch2_ops,
1824                },
1825        },
1826};
1827
1828static struct clk_branch mdss_axi_clk = {
1829        .halt_reg = 0x2310,
1830        .clkr = {
1831                .enable_reg = 0x2310,
1832                .enable_mask = BIT(0),
1833                .hw.init = &(struct clk_init_data){
1834                        .name = "mdss_axi_clk",
1835                        .parent_names = (const char *[]){ "axi_clk_src" },
1836                        .num_parents = 1,
1837                        .flags = CLK_SET_RATE_PARENT,
1838                        .ops = &clk_branch2_ops,
1839                },
1840        },
1841};
1842
1843static struct clk_branch mdss_pclk0_clk = {
1844        .halt_reg = 0x2314,
1845        .clkr = {
1846                .enable_reg = 0x2314,
1847                .enable_mask = BIT(0),
1848                .hw.init = &(struct clk_init_data){
1849                        .name = "mdss_pclk0_clk",
1850                        .parent_names = (const char *[]){ "pclk0_clk_src" },
1851                        .num_parents = 1,
1852                        .flags = CLK_SET_RATE_PARENT,
1853                        .ops = &clk_branch2_ops,
1854                },
1855        },
1856};
1857
1858static struct clk_branch mdss_pclk1_clk = {
1859        .halt_reg = 0x2318,
1860        .clkr = {
1861                .enable_reg = 0x2318,
1862                .enable_mask = BIT(0),
1863                .hw.init = &(struct clk_init_data){
1864                        .name = "mdss_pclk1_clk",
1865                        .parent_names = (const char *[]){ "pclk1_clk_src" },
1866                        .num_parents = 1,
1867                        .flags = CLK_SET_RATE_PARENT,
1868                        .ops = &clk_branch2_ops,
1869                },
1870        },
1871};
1872
1873static struct clk_branch mdss_mdp_clk = {
1874        .halt_reg = 0x231c,
1875        .clkr = {
1876                .enable_reg = 0x231c,
1877                .enable_mask = BIT(0),
1878                .hw.init = &(struct clk_init_data){
1879                        .name = "mdss_mdp_clk",
1880                        .parent_names = (const char *[]){ "mdp_clk_src" },
1881                        .num_parents = 1,
1882                        .flags = CLK_SET_RATE_PARENT,
1883                        .ops = &clk_branch2_ops,
1884                },
1885        },
1886};
1887
1888static struct clk_branch mdss_extpclk_clk = {
1889        .halt_reg = 0x2324,
1890        .clkr = {
1891                .enable_reg = 0x2324,
1892                .enable_mask = BIT(0),
1893                .hw.init = &(struct clk_init_data){
1894                        .name = "mdss_extpclk_clk",
1895                        .parent_names = (const char *[]){ "extpclk_clk_src" },
1896                        .num_parents = 1,
1897                        .flags = CLK_SET_RATE_PARENT,
1898                        .ops = &clk_branch2_ops,
1899                },
1900        },
1901};
1902
1903static struct clk_branch mdss_vsync_clk = {
1904        .halt_reg = 0x2328,
1905        .clkr = {
1906                .enable_reg = 0x2328,
1907                .enable_mask = BIT(0),
1908                .hw.init = &(struct clk_init_data){
1909                        .name = "mdss_vsync_clk",
1910                        .parent_names = (const char *[]){ "vsync_clk_src" },
1911                        .num_parents = 1,
1912                        .flags = CLK_SET_RATE_PARENT,
1913                        .ops = &clk_branch2_ops,
1914                },
1915        },
1916};
1917
1918static struct clk_branch mdss_hdmi_clk = {
1919        .halt_reg = 0x2338,
1920        .clkr = {
1921                .enable_reg = 0x2338,
1922                .enable_mask = BIT(0),
1923                .hw.init = &(struct clk_init_data){
1924                        .name = "mdss_hdmi_clk",
1925                        .parent_names = (const char *[]){ "hdmi_clk_src" },
1926                        .num_parents = 1,
1927                        .flags = CLK_SET_RATE_PARENT,
1928                        .ops = &clk_branch2_ops,
1929                },
1930        },
1931};
1932
1933static struct clk_branch mdss_byte0_clk = {
1934        .halt_reg = 0x233c,
1935        .clkr = {
1936                .enable_reg = 0x233c,
1937                .enable_mask = BIT(0),
1938                .hw.init = &(struct clk_init_data){
1939                        .name = "mdss_byte0_clk",
1940                        .parent_names = (const char *[]){ "byte0_clk_src" },
1941                        .num_parents = 1,
1942                        .flags = CLK_SET_RATE_PARENT,
1943                        .ops = &clk_branch2_ops,
1944                },
1945        },
1946};
1947
1948static struct clk_branch mdss_byte1_clk = {
1949        .halt_reg = 0x2340,
1950        .clkr = {
1951                .enable_reg = 0x2340,
1952                .enable_mask = BIT(0),
1953                .hw.init = &(struct clk_init_data){
1954                        .name = "mdss_byte1_clk",
1955                        .parent_names = (const char *[]){ "byte1_clk_src" },
1956                        .num_parents = 1,
1957                        .flags = CLK_SET_RATE_PARENT,
1958                        .ops = &clk_branch2_ops,
1959                },
1960        },
1961};
1962
1963static struct clk_branch mdss_esc0_clk = {
1964        .halt_reg = 0x2344,
1965        .clkr = {
1966                .enable_reg = 0x2344,
1967                .enable_mask = BIT(0),
1968                .hw.init = &(struct clk_init_data){
1969                        .name = "mdss_esc0_clk",
1970                        .parent_names = (const char *[]){ "esc0_clk_src" },
1971                        .num_parents = 1,
1972                        .flags = CLK_SET_RATE_PARENT,
1973                        .ops = &clk_branch2_ops,
1974                },
1975        },
1976};
1977
1978static struct clk_branch mdss_esc1_clk = {
1979        .halt_reg = 0x2348,
1980        .clkr = {
1981                .enable_reg = 0x2348,
1982                .enable_mask = BIT(0),
1983                .hw.init = &(struct clk_init_data){
1984                        .name = "mdss_esc1_clk",
1985                        .parent_names = (const char *[]){ "esc1_clk_src" },
1986                        .num_parents = 1,
1987                        .flags = CLK_SET_RATE_PARENT,
1988                        .ops = &clk_branch2_ops,
1989                },
1990        },
1991};
1992
1993static struct clk_branch camss_top_ahb_clk = {
1994        .halt_reg = 0x3484,
1995        .clkr = {
1996                .enable_reg = 0x3484,
1997                .enable_mask = BIT(0),
1998                .hw.init = &(struct clk_init_data){
1999                        .name = "camss_top_ahb_clk",
2000                        .parent_names = (const char *[]){ "ahb_clk_src" },
2001                        .num_parents = 1,
2002                        .flags = CLK_SET_RATE_PARENT,
2003                        .ops = &clk_branch2_ops,
2004                },
2005        },
2006};
2007
2008static struct clk_branch camss_ahb_clk = {
2009        .halt_reg = 0x348c,
2010        .clkr = {
2011                .enable_reg = 0x348c,
2012                .enable_mask = BIT(0),
2013                .hw.init = &(struct clk_init_data){
2014                        .name = "camss_ahb_clk",
2015                        .parent_names = (const char *[]){ "ahb_clk_src" },
2016                        .num_parents = 1,
2017                        .flags = CLK_SET_RATE_PARENT,
2018                        .ops = &clk_branch2_ops,
2019                },
2020        },
2021};
2022
2023static struct clk_branch camss_micro_ahb_clk = {
2024        .halt_reg = 0x3494,
2025        .clkr = {
2026                .enable_reg = 0x3494,
2027                .enable_mask = BIT(0),
2028                .hw.init = &(struct clk_init_data){
2029                        .name = "camss_micro_ahb_clk",
2030                        .parent_names = (const char *[]){ "ahb_clk_src" },
2031                        .num_parents = 1,
2032                        .flags = CLK_SET_RATE_PARENT,
2033                        .ops = &clk_branch2_ops,
2034                },
2035        },
2036};
2037
2038static struct clk_branch camss_gp0_clk = {
2039        .halt_reg = 0x3444,
2040        .clkr = {
2041                .enable_reg = 0x3444,
2042                .enable_mask = BIT(0),
2043                .hw.init = &(struct clk_init_data){
2044                        .name = "camss_gp0_clk",
2045                        .parent_names = (const char *[]){ "camss_gp0_clk_src" },
2046                        .num_parents = 1,
2047                        .flags = CLK_SET_RATE_PARENT,
2048                        .ops = &clk_branch2_ops,
2049                },
2050        },
2051};
2052
2053static struct clk_branch camss_gp1_clk = {
2054        .halt_reg = 0x3474,
2055        .clkr = {
2056                .enable_reg = 0x3474,
2057                .enable_mask = BIT(0),
2058                .hw.init = &(struct clk_init_data){
2059                        .name = "camss_gp1_clk",
2060                        .parent_names = (const char *[]){ "camss_gp1_clk_src" },
2061                        .num_parents = 1,
2062                        .flags = CLK_SET_RATE_PARENT,
2063                        .ops = &clk_branch2_ops,
2064                },
2065        },
2066};
2067
2068static struct clk_branch camss_mclk0_clk = {
2069        .halt_reg = 0x3384,
2070        .clkr = {
2071                .enable_reg = 0x3384,
2072                .enable_mask = BIT(0),
2073                .hw.init = &(struct clk_init_data){
2074                        .name = "camss_mclk0_clk",
2075                        .parent_names = (const char *[]){ "mclk0_clk_src" },
2076                        .num_parents = 1,
2077                        .flags = CLK_SET_RATE_PARENT,
2078                        .ops = &clk_branch2_ops,
2079                },
2080        },
2081};
2082
2083static struct clk_branch camss_mclk1_clk = {
2084        .halt_reg = 0x33b4,
2085        .clkr = {
2086                .enable_reg = 0x33b4,
2087                .enable_mask = BIT(0),
2088                .hw.init = &(struct clk_init_data){
2089                        .name = "camss_mclk1_clk",
2090                        .parent_names = (const char *[]){ "mclk1_clk_src" },
2091                        .num_parents = 1,
2092                        .flags = CLK_SET_RATE_PARENT,
2093                        .ops = &clk_branch2_ops,
2094                },
2095        },
2096};
2097
2098static struct clk_branch camss_mclk2_clk = {
2099        .halt_reg = 0x33e4,
2100        .clkr = {
2101                .enable_reg = 0x33e4,
2102                .enable_mask = BIT(0),
2103                .hw.init = &(struct clk_init_data){
2104                        .name = "camss_mclk2_clk",
2105                        .parent_names = (const char *[]){ "mclk2_clk_src" },
2106                        .num_parents = 1,
2107                        .flags = CLK_SET_RATE_PARENT,
2108                        .ops = &clk_branch2_ops,
2109                },
2110        },
2111};
2112
2113static struct clk_branch camss_mclk3_clk = {
2114        .halt_reg = 0x3414,
2115        .clkr = {
2116                .enable_reg = 0x3414,
2117                .enable_mask = BIT(0),
2118                .hw.init = &(struct clk_init_data){
2119                        .name = "camss_mclk3_clk",
2120                        .parent_names = (const char *[]){ "mclk3_clk_src" },
2121                        .num_parents = 1,
2122                        .flags = CLK_SET_RATE_PARENT,
2123                        .ops = &clk_branch2_ops,
2124                },
2125        },
2126};
2127
2128static struct clk_branch camss_cci_clk = {
2129        .halt_reg = 0x3344,
2130        .clkr = {
2131                .enable_reg = 0x3344,
2132                .enable_mask = BIT(0),
2133                .hw.init = &(struct clk_init_data){
2134                        .name = "camss_cci_clk",
2135                        .parent_names = (const char *[]){ "cci_clk_src" },
2136                        .num_parents = 1,
2137                        .flags = CLK_SET_RATE_PARENT,
2138                        .ops = &clk_branch2_ops,
2139                },
2140        },
2141};
2142
2143static struct clk_branch camss_cci_ahb_clk = {
2144        .halt_reg = 0x3348,
2145        .clkr = {
2146                .enable_reg = 0x3348,
2147                .enable_mask = BIT(0),
2148                .hw.init = &(struct clk_init_data){
2149                        .name = "camss_cci_ahb_clk",
2150                        .parent_names = (const char *[]){ "ahb_clk_src" },
2151                        .num_parents = 1,
2152                        .flags = CLK_SET_RATE_PARENT,
2153                        .ops = &clk_branch2_ops,
2154                },
2155        },
2156};
2157
2158static struct clk_branch camss_csi0phytimer_clk = {
2159        .halt_reg = 0x3024,
2160        .clkr = {
2161                .enable_reg = 0x3024,
2162                .enable_mask = BIT(0),
2163                .hw.init = &(struct clk_init_data){
2164                        .name = "camss_csi0phytimer_clk",
2165                        .parent_names = (const char *[]){ "csi0phytimer_clk_src" },
2166                        .num_parents = 1,
2167                        .flags = CLK_SET_RATE_PARENT,
2168                        .ops = &clk_branch2_ops,
2169                },
2170        },
2171};
2172
2173static struct clk_branch camss_csi1phytimer_clk = {
2174        .halt_reg = 0x3054,
2175        .clkr = {
2176                .enable_reg = 0x3054,
2177                .enable_mask = BIT(0),
2178                .hw.init = &(struct clk_init_data){
2179                        .name = "camss_csi1phytimer_clk",
2180                        .parent_names = (const char *[]){ "csi1phytimer_clk_src" },
2181                        .num_parents = 1,
2182                        .flags = CLK_SET_RATE_PARENT,
2183                        .ops = &clk_branch2_ops,
2184                },
2185        },
2186};
2187
2188static struct clk_branch camss_csi2phytimer_clk = {
2189        .halt_reg = 0x3084,
2190        .clkr = {
2191                .enable_reg = 0x3084,
2192                .enable_mask = BIT(0),
2193                .hw.init = &(struct clk_init_data){
2194                        .name = "camss_csi2phytimer_clk",
2195                        .parent_names = (const char *[]){ "csi2phytimer_clk_src" },
2196                        .num_parents = 1,
2197                        .flags = CLK_SET_RATE_PARENT,
2198                        .ops = &clk_branch2_ops,
2199                },
2200        },
2201};
2202
2203static struct clk_branch camss_csiphy0_3p_clk = {
2204        .halt_reg = 0x3234,
2205        .clkr = {
2206                .enable_reg = 0x3234,
2207                .enable_mask = BIT(0),
2208                .hw.init = &(struct clk_init_data){
2209                        .name = "camss_csiphy0_3p_clk",
2210                        .parent_names = (const char *[]){ "csiphy0_3p_clk_src" },
2211                        .num_parents = 1,
2212                        .flags = CLK_SET_RATE_PARENT,
2213                        .ops = &clk_branch2_ops,
2214                },
2215        },
2216};
2217
2218static struct clk_branch camss_csiphy1_3p_clk = {
2219        .halt_reg = 0x3254,
2220        .clkr = {
2221                .enable_reg = 0x3254,
2222                .enable_mask = BIT(0),
2223                .hw.init = &(struct clk_init_data){
2224                        .name = "camss_csiphy1_3p_clk",
2225                        .parent_names = (const char *[]){ "csiphy1_3p_clk_src" },
2226                        .num_parents = 1,
2227                        .flags = CLK_SET_RATE_PARENT,
2228                        .ops = &clk_branch2_ops,
2229                },
2230        },
2231};
2232
2233static struct clk_branch camss_csiphy2_3p_clk = {
2234        .halt_reg = 0x3274,
2235        .clkr = {
2236                .enable_reg = 0x3274,
2237                .enable_mask = BIT(0),
2238                .hw.init = &(struct clk_init_data){
2239                        .name = "camss_csiphy2_3p_clk",
2240                        .parent_names = (const char *[]){ "csiphy2_3p_clk_src" },
2241                        .num_parents = 1,
2242                        .flags = CLK_SET_RATE_PARENT,
2243                        .ops = &clk_branch2_ops,
2244                },
2245        },
2246};
2247
2248static struct clk_branch camss_jpeg0_clk = {
2249        .halt_reg = 0x35a8,
2250        .clkr = {
2251                .enable_reg = 0x35a8,
2252                .enable_mask = BIT(0),
2253                .hw.init = &(struct clk_init_data){
2254                        .name = "camss_jpeg0_clk",
2255                        .parent_names = (const char *[]){ "jpeg0_clk_src" },
2256                        .num_parents = 1,
2257                        .flags = CLK_SET_RATE_PARENT,
2258                        .ops = &clk_branch2_ops,
2259                },
2260        },
2261};
2262
2263static struct clk_branch camss_jpeg2_clk = {
2264        .halt_reg = 0x35b0,
2265        .clkr = {
2266                .enable_reg = 0x35b0,
2267                .enable_mask = BIT(0),
2268                .hw.init = &(struct clk_init_data){
2269                        .name = "camss_jpeg2_clk",
2270                        .parent_names = (const char *[]){ "jpeg2_clk_src" },
2271                        .num_parents = 1,
2272                        .flags = CLK_SET_RATE_PARENT,
2273                        .ops = &clk_branch2_ops,
2274                },
2275        },
2276};
2277
2278static struct clk_branch camss_jpeg_dma_clk = {
2279        .halt_reg = 0x35c0,
2280        .clkr = {
2281                .enable_reg = 0x35c0,
2282                .enable_mask = BIT(0),
2283                .hw.init = &(struct clk_init_data){
2284                        .name = "camss_jpeg_dma_clk",
2285                        .parent_names = (const char *[]){ "jpeg_dma_clk_src" },
2286                        .num_parents = 1,
2287                        .flags = CLK_SET_RATE_PARENT,
2288                        .ops = &clk_branch2_ops,
2289                },
2290        },
2291};
2292
2293static struct clk_branch camss_jpeg_ahb_clk = {
2294        .halt_reg = 0x35b4,
2295        .clkr = {
2296                .enable_reg = 0x35b4,
2297                .enable_mask = BIT(0),
2298                .hw.init = &(struct clk_init_data){
2299                        .name = "camss_jpeg_ahb_clk",
2300                        .parent_names = (const char *[]){ "ahb_clk_src" },
2301                        .num_parents = 1,
2302                        .flags = CLK_SET_RATE_PARENT,
2303                        .ops = &clk_branch2_ops,
2304                },
2305        },
2306};
2307
2308static struct clk_branch camss_jpeg_axi_clk = {
2309        .halt_reg = 0x35b8,
2310        .clkr = {
2311                .enable_reg = 0x35b8,
2312                .enable_mask = BIT(0),
2313                .hw.init = &(struct clk_init_data){
2314                        .name = "camss_jpeg_axi_clk",
2315                        .parent_names = (const char *[]){ "axi_clk_src" },
2316                        .num_parents = 1,
2317                        .flags = CLK_SET_RATE_PARENT,
2318                        .ops = &clk_branch2_ops,
2319                },
2320        },
2321};
2322
2323static struct clk_branch camss_vfe_ahb_clk = {
2324        .halt_reg = 0x36b8,
2325        .clkr = {
2326                .enable_reg = 0x36b8,
2327                .enable_mask = BIT(0),
2328                .hw.init = &(struct clk_init_data){
2329                        .name = "camss_vfe_ahb_clk",
2330                        .parent_names = (const char *[]){ "ahb_clk_src" },
2331                        .num_parents = 1,
2332                        .flags = CLK_SET_RATE_PARENT,
2333                        .ops = &clk_branch2_ops,
2334                },
2335        },
2336};
2337
2338static struct clk_branch camss_vfe_axi_clk = {
2339        .halt_reg = 0x36bc,
2340        .clkr = {
2341                .enable_reg = 0x36bc,
2342                .enable_mask = BIT(0),
2343                .hw.init = &(struct clk_init_data){
2344                        .name = "camss_vfe_axi_clk",
2345                        .parent_names = (const char *[]){ "axi_clk_src" },
2346                        .num_parents = 1,
2347                        .flags = CLK_SET_RATE_PARENT,
2348                        .ops = &clk_branch2_ops,
2349                },
2350        },
2351};
2352
2353static struct clk_branch camss_vfe0_clk = {
2354        .halt_reg = 0x36a8,
2355        .clkr = {
2356                .enable_reg = 0x36a8,
2357                .enable_mask = BIT(0),
2358                .hw.init = &(struct clk_init_data){
2359                        .name = "camss_vfe0_clk",
2360                        .parent_names = (const char *[]){ "vfe0_clk_src" },
2361                        .num_parents = 1,
2362                        .flags = CLK_SET_RATE_PARENT,
2363                        .ops = &clk_branch2_ops,
2364                },
2365        },
2366};
2367
2368static struct clk_branch camss_vfe0_stream_clk = {
2369        .halt_reg = 0x3720,
2370        .clkr = {
2371                .enable_reg = 0x3720,
2372                .enable_mask = BIT(0),
2373                .hw.init = &(struct clk_init_data){
2374                        .name = "camss_vfe0_stream_clk",
2375                        .parent_names = (const char *[]){ "vfe0_clk_src" },
2376                        .num_parents = 1,
2377                        .flags = CLK_SET_RATE_PARENT,
2378                        .ops = &clk_branch2_ops,
2379                },
2380        },
2381};
2382
2383static struct clk_branch camss_vfe0_ahb_clk = {
2384        .halt_reg = 0x3668,
2385        .clkr = {
2386                .enable_reg = 0x3668,
2387                .enable_mask = BIT(0),
2388                .hw.init = &(struct clk_init_data){
2389                        .name = "camss_vfe0_ahb_clk",
2390                        .parent_names = (const char *[]){ "ahb_clk_src" },
2391                        .num_parents = 1,
2392                        .flags = CLK_SET_RATE_PARENT,
2393                        .ops = &clk_branch2_ops,
2394                },
2395        },
2396};
2397
2398static struct clk_branch camss_vfe1_clk = {
2399        .halt_reg = 0x36ac,
2400        .clkr = {
2401                .enable_reg = 0x36ac,
2402                .enable_mask = BIT(0),
2403                .hw.init = &(struct clk_init_data){
2404                        .name = "camss_vfe1_clk",
2405                        .parent_names = (const char *[]){ "vfe1_clk_src" },
2406                        .num_parents = 1,
2407                        .flags = CLK_SET_RATE_PARENT,
2408                        .ops = &clk_branch2_ops,
2409                },
2410        },
2411};
2412
2413static struct clk_branch camss_vfe1_stream_clk = {
2414        .halt_reg = 0x3724,
2415        .clkr = {
2416                .enable_reg = 0x3724,
2417                .enable_mask = BIT(0),
2418                .hw.init = &(struct clk_init_data){
2419                        .name = "camss_vfe1_stream_clk",
2420                        .parent_names = (const char *[]){ "vfe1_clk_src" },
2421                        .num_parents = 1,
2422                        .flags = CLK_SET_RATE_PARENT,
2423                        .ops = &clk_branch2_ops,
2424                },
2425        },
2426};
2427
2428static struct clk_branch camss_vfe1_ahb_clk = {
2429        .halt_reg = 0x3678,
2430        .clkr = {
2431                .enable_reg = 0x3678,
2432                .enable_mask = BIT(0),
2433                .hw.init = &(struct clk_init_data){
2434                        .name = "camss_vfe1_ahb_clk",
2435                        .parent_names = (const char *[]){ "ahb_clk_src" },
2436                        .num_parents = 1,
2437                        .flags = CLK_SET_RATE_PARENT,
2438                        .ops = &clk_branch2_ops,
2439                },
2440        },
2441};
2442
2443static struct clk_branch camss_csi_vfe0_clk = {
2444        .halt_reg = 0x3704,
2445        .clkr = {
2446                .enable_reg = 0x3704,
2447                .enable_mask = BIT(0),
2448                .hw.init = &(struct clk_init_data){
2449                        .name = "camss_csi_vfe0_clk",
2450                        .parent_names = (const char *[]){ "vfe0_clk_src" },
2451                        .num_parents = 1,
2452                        .flags = CLK_SET_RATE_PARENT,
2453                        .ops = &clk_branch2_ops,
2454                },
2455        },
2456};
2457
2458static struct clk_branch camss_csi_vfe1_clk = {
2459        .halt_reg = 0x3714,
2460        .clkr = {
2461                .enable_reg = 0x3714,
2462                .enable_mask = BIT(0),
2463                .hw.init = &(struct clk_init_data){
2464                        .name = "camss_csi_vfe1_clk",
2465                        .parent_names = (const char *[]){ "vfe1_clk_src" },
2466                        .num_parents = 1,
2467                        .flags = CLK_SET_RATE_PARENT,
2468                        .ops = &clk_branch2_ops,
2469                },
2470        },
2471};
2472
2473static struct clk_branch camss_cpp_vbif_ahb_clk = {
2474        .halt_reg = 0x36c8,
2475        .clkr = {
2476                .enable_reg = 0x36c8,
2477                .enable_mask = BIT(0),
2478                .hw.init = &(struct clk_init_data){
2479                        .name = "camss_cpp_vbif_ahb_clk",
2480                        .parent_names = (const char *[]){ "ahb_clk_src" },
2481                        .num_parents = 1,
2482                        .flags = CLK_SET_RATE_PARENT,
2483                        .ops = &clk_branch2_ops,
2484                },
2485        },
2486};
2487
2488static struct clk_branch camss_cpp_axi_clk = {
2489        .halt_reg = 0x36c4,
2490        .clkr = {
2491                .enable_reg = 0x36c4,
2492                .enable_mask = BIT(0),
2493                .hw.init = &(struct clk_init_data){
2494                        .name = "camss_cpp_axi_clk",
2495                        .parent_names = (const char *[]){ "axi_clk_src" },
2496                        .num_parents = 1,
2497                        .flags = CLK_SET_RATE_PARENT,
2498                        .ops = &clk_branch2_ops,
2499                },
2500        },
2501};
2502
2503static struct clk_branch camss_cpp_clk = {
2504        .halt_reg = 0x36b0,
2505        .clkr = {
2506                .enable_reg = 0x36b0,
2507                .enable_mask = BIT(0),
2508                .hw.init = &(struct clk_init_data){
2509                        .name = "camss_cpp_clk",
2510                        .parent_names = (const char *[]){ "cpp_clk_src" },
2511                        .num_parents = 1,
2512                        .flags = CLK_SET_RATE_PARENT,
2513                        .ops = &clk_branch2_ops,
2514                },
2515        },
2516};
2517
2518static struct clk_branch camss_cpp_ahb_clk = {
2519        .halt_reg = 0x36b4,
2520        .clkr = {
2521                .enable_reg = 0x36b4,
2522                .enable_mask = BIT(0),
2523                .hw.init = &(struct clk_init_data){
2524                        .name = "camss_cpp_ahb_clk",
2525                        .parent_names = (const char *[]){ "ahb_clk_src" },
2526                        .num_parents = 1,
2527                        .flags = CLK_SET_RATE_PARENT,
2528                        .ops = &clk_branch2_ops,
2529                },
2530        },
2531};
2532
2533static struct clk_branch camss_csi0_clk = {
2534        .halt_reg = 0x30b4,
2535        .clkr = {
2536                .enable_reg = 0x30b4,
2537                .enable_mask = BIT(0),
2538                .hw.init = &(struct clk_init_data){
2539                        .name = "camss_csi0_clk",
2540                        .parent_names = (const char *[]){ "csi0_clk_src" },
2541                        .num_parents = 1,
2542                        .flags = CLK_SET_RATE_PARENT,
2543                        .ops = &clk_branch2_ops,
2544                },
2545        },
2546};
2547
2548static struct clk_branch camss_csi0_ahb_clk = {
2549        .halt_reg = 0x30bc,
2550        .clkr = {
2551                .enable_reg = 0x30bc,
2552                .enable_mask = BIT(0),
2553                .hw.init = &(struct clk_init_data){
2554                        .name = "camss_csi0_ahb_clk",
2555                        .parent_names = (const char *[]){ "ahb_clk_src" },
2556                        .num_parents = 1,
2557                        .flags = CLK_SET_RATE_PARENT,
2558                        .ops = &clk_branch2_ops,
2559                },
2560        },
2561};
2562
2563static struct clk_branch camss_csi0phy_clk = {
2564        .halt_reg = 0x30c4,
2565        .clkr = {
2566                .enable_reg = 0x30c4,
2567                .enable_mask = BIT(0),
2568                .hw.init = &(struct clk_init_data){
2569                        .name = "camss_csi0phy_clk",
2570                        .parent_names = (const char *[]){ "csi0_clk_src" },
2571                        .num_parents = 1,
2572                        .flags = CLK_SET_RATE_PARENT,
2573                        .ops = &clk_branch2_ops,
2574                },
2575        },
2576};
2577
2578static struct clk_branch camss_csi0rdi_clk = {
2579        .halt_reg = 0x30d4,
2580        .clkr = {
2581                .enable_reg = 0x30d4,
2582                .enable_mask = BIT(0),
2583                .hw.init = &(struct clk_init_data){
2584                        .name = "camss_csi0rdi_clk",
2585                        .parent_names = (const char *[]){ "csi0_clk_src" },
2586                        .num_parents = 1,
2587                        .flags = CLK_SET_RATE_PARENT,
2588                        .ops = &clk_branch2_ops,
2589                },
2590        },
2591};
2592
2593static struct clk_branch camss_csi0pix_clk = {
2594        .halt_reg = 0x30e4,
2595        .clkr = {
2596                .enable_reg = 0x30e4,
2597                .enable_mask = BIT(0),
2598                .hw.init = &(struct clk_init_data){
2599                        .name = "camss_csi0pix_clk",
2600                        .parent_names = (const char *[]){ "csi0_clk_src" },
2601                        .num_parents = 1,
2602                        .flags = CLK_SET_RATE_PARENT,
2603                        .ops = &clk_branch2_ops,
2604                },
2605        },
2606};
2607
2608static struct clk_branch camss_csi1_clk = {
2609        .halt_reg = 0x3124,
2610        .clkr = {
2611                .enable_reg = 0x3124,
2612                .enable_mask = BIT(0),
2613                .hw.init = &(struct clk_init_data){
2614                        .name = "camss_csi1_clk",
2615                        .parent_names = (const char *[]){ "csi1_clk_src" },
2616                        .num_parents = 1,
2617                        .flags = CLK_SET_RATE_PARENT,
2618                        .ops = &clk_branch2_ops,
2619                },
2620        },
2621};
2622
2623static struct clk_branch camss_csi1_ahb_clk = {
2624        .halt_reg = 0x3128,
2625        .clkr = {
2626                .enable_reg = 0x3128,
2627                .enable_mask = BIT(0),
2628                .hw.init = &(struct clk_init_data){
2629                        .name = "camss_csi1_ahb_clk",
2630                        .parent_names = (const char *[]){ "ahb_clk_src" },
2631                        .num_parents = 1,
2632                        .flags = CLK_SET_RATE_PARENT,
2633                        .ops = &clk_branch2_ops,
2634                },
2635        },
2636};
2637
2638static struct clk_branch camss_csi1phy_clk = {
2639        .halt_reg = 0x3134,
2640        .clkr = {
2641                .enable_reg = 0x3134,
2642                .enable_mask = BIT(0),
2643                .hw.init = &(struct clk_init_data){
2644                        .name = "camss_csi1phy_clk",
2645                        .parent_names = (const char *[]){ "csi1_clk_src" },
2646                        .num_parents = 1,
2647                        .flags = CLK_SET_RATE_PARENT,
2648                        .ops = &clk_branch2_ops,
2649                },
2650        },
2651};
2652
2653static struct clk_branch camss_csi1rdi_clk = {
2654        .halt_reg = 0x3144,
2655        .clkr = {
2656                .enable_reg = 0x3144,
2657                .enable_mask = BIT(0),
2658                .hw.init = &(struct clk_init_data){
2659                        .name = "camss_csi1rdi_clk",
2660                        .parent_names = (const char *[]){ "csi1_clk_src" },
2661                        .num_parents = 1,
2662                        .flags = CLK_SET_RATE_PARENT,
2663                        .ops = &clk_branch2_ops,
2664                },
2665        },
2666};
2667
2668static struct clk_branch camss_csi1pix_clk = {
2669        .halt_reg = 0x3154,
2670        .clkr = {
2671                .enable_reg = 0x3154,
2672                .enable_mask = BIT(0),
2673                .hw.init = &(struct clk_init_data){
2674                        .name = "camss_csi1pix_clk",
2675                        .parent_names = (const char *[]){ "csi1_clk_src" },
2676                        .num_parents = 1,
2677                        .flags = CLK_SET_RATE_PARENT,
2678                        .ops = &clk_branch2_ops,
2679                },
2680        },
2681};
2682
2683static struct clk_branch camss_csi2_clk = {
2684        .halt_reg = 0x3184,
2685        .clkr = {
2686                .enable_reg = 0x3184,
2687                .enable_mask = BIT(0),
2688                .hw.init = &(struct clk_init_data){
2689                        .name = "camss_csi2_clk",
2690                        .parent_names = (const char *[]){ "csi2_clk_src" },
2691                        .num_parents = 1,
2692                        .flags = CLK_SET_RATE_PARENT,
2693                        .ops = &clk_branch2_ops,
2694                },
2695        },
2696};
2697
2698static struct clk_branch camss_csi2_ahb_clk = {
2699        .halt_reg = 0x3188,
2700        .clkr = {
2701                .enable_reg = 0x3188,
2702                .enable_mask = BIT(0),
2703                .hw.init = &(struct clk_init_data){
2704                        .name = "camss_csi2_ahb_clk",
2705                        .parent_names = (const char *[]){ "ahb_clk_src" },
2706                        .num_parents = 1,
2707                        .flags = CLK_SET_RATE_PARENT,
2708                        .ops = &clk_branch2_ops,
2709                },
2710        },
2711};
2712
2713static struct clk_branch camss_csi2phy_clk = {
2714        .halt_reg = 0x3194,
2715        .clkr = {
2716                .enable_reg = 0x3194,
2717                .enable_mask = BIT(0),
2718                .hw.init = &(struct clk_init_data){
2719                        .name = "camss_csi2phy_clk",
2720                        .parent_names = (const char *[]){ "csi2_clk_src" },
2721                        .num_parents = 1,
2722                        .flags = CLK_SET_RATE_PARENT,
2723                        .ops = &clk_branch2_ops,
2724                },
2725        },
2726};
2727
2728static struct clk_branch camss_csi2rdi_clk = {
2729        .halt_reg = 0x31a4,
2730        .clkr = {
2731                .enable_reg = 0x31a4,
2732                .enable_mask = BIT(0),
2733                .hw.init = &(struct clk_init_data){
2734                        .name = "camss_csi2rdi_clk",
2735                        .parent_names = (const char *[]){ "csi2_clk_src" },
2736                        .num_parents = 1,
2737                        .flags = CLK_SET_RATE_PARENT,
2738                        .ops = &clk_branch2_ops,
2739                },
2740        },
2741};
2742
2743static struct clk_branch camss_csi2pix_clk = {
2744        .halt_reg = 0x31b4,
2745        .clkr = {
2746                .enable_reg = 0x31b4,
2747                .enable_mask = BIT(0),
2748                .hw.init = &(struct clk_init_data){
2749                        .name = "camss_csi2pix_clk",
2750                        .parent_names = (const char *[]){ "csi2_clk_src" },
2751                        .num_parents = 1,
2752                        .flags = CLK_SET_RATE_PARENT,
2753                        .ops = &clk_branch2_ops,
2754                },
2755        },
2756};
2757
2758static struct clk_branch camss_csi3_clk = {
2759        .halt_reg = 0x31e4,
2760        .clkr = {
2761                .enable_reg = 0x31e4,
2762                .enable_mask = BIT(0),
2763                .hw.init = &(struct clk_init_data){
2764                        .name = "camss_csi3_clk",
2765                        .parent_names = (const char *[]){ "csi3_clk_src" },
2766                        .num_parents = 1,
2767                        .flags = CLK_SET_RATE_PARENT,
2768                        .ops = &clk_branch2_ops,
2769                },
2770        },
2771};
2772
2773static struct clk_branch camss_csi3_ahb_clk = {
2774        .halt_reg = 0x31e8,
2775        .clkr = {
2776                .enable_reg = 0x31e8,
2777                .enable_mask = BIT(0),
2778                .hw.init = &(struct clk_init_data){
2779                        .name = "camss_csi3_ahb_clk",
2780                        .parent_names = (const char *[]){ "ahb_clk_src" },
2781                        .num_parents = 1,
2782                        .flags = CLK_SET_RATE_PARENT,
2783                        .ops = &clk_branch2_ops,
2784                },
2785        },
2786};
2787
2788static struct clk_branch camss_csi3phy_clk = {
2789        .halt_reg = 0x31f4,
2790        .clkr = {
2791                .enable_reg = 0x31f4,
2792                .enable_mask = BIT(0),
2793                .hw.init = &(struct clk_init_data){
2794                        .name = "camss_csi3phy_clk",
2795                        .parent_names = (const char *[]){ "csi3_clk_src" },
2796                        .num_parents = 1,
2797                        .flags = CLK_SET_RATE_PARENT,
2798                        .ops = &clk_branch2_ops,
2799                },
2800        },
2801};
2802
2803static struct clk_branch camss_csi3rdi_clk = {
2804        .halt_reg = 0x3204,
2805        .clkr = {
2806                .enable_reg = 0x3204,
2807                .enable_mask = BIT(0),
2808                .hw.init = &(struct clk_init_data){
2809                        .name = "camss_csi3rdi_clk",
2810                        .parent_names = (const char *[]){ "csi3_clk_src" },
2811                        .num_parents = 1,
2812                        .flags = CLK_SET_RATE_PARENT,
2813                        .ops = &clk_branch2_ops,
2814                },
2815        },
2816};
2817
2818static struct clk_branch camss_csi3pix_clk = {
2819        .halt_reg = 0x3214,
2820        .clkr = {
2821                .enable_reg = 0x3214,
2822                .enable_mask = BIT(0),
2823                .hw.init = &(struct clk_init_data){
2824                        .name = "camss_csi3pix_clk",
2825                        .parent_names = (const char *[]){ "csi3_clk_src" },
2826                        .num_parents = 1,
2827                        .flags = CLK_SET_RATE_PARENT,
2828                        .ops = &clk_branch2_ops,
2829                },
2830        },
2831};
2832
2833static struct clk_branch camss_ispif_ahb_clk = {
2834        .halt_reg = 0x3224,
2835        .clkr = {
2836                .enable_reg = 0x3224,
2837                .enable_mask = BIT(0),
2838                .hw.init = &(struct clk_init_data){
2839                        .name = "camss_ispif_ahb_clk",
2840                        .parent_names = (const char *[]){ "ahb_clk_src" },
2841                        .num_parents = 1,
2842                        .flags = CLK_SET_RATE_PARENT,
2843                        .ops = &clk_branch2_ops,
2844                },
2845        },
2846};
2847
2848static struct clk_branch fd_core_clk = {
2849        .halt_reg = 0x3b68,
2850        .clkr = {
2851                .enable_reg = 0x3b68,
2852                .enable_mask = BIT(0),
2853                .hw.init = &(struct clk_init_data){
2854                        .name = "fd_core_clk",
2855                        .parent_names = (const char *[]){ "fd_core_clk_src" },
2856                        .num_parents = 1,
2857                        .flags = CLK_SET_RATE_PARENT,
2858                        .ops = &clk_branch2_ops,
2859                },
2860        },
2861};
2862
2863static struct clk_branch fd_core_uar_clk = {
2864        .halt_reg = 0x3b6c,
2865        .clkr = {
2866                .enable_reg = 0x3b6c,
2867                .enable_mask = BIT(0),
2868                .hw.init = &(struct clk_init_data){
2869                        .name = "fd_core_uar_clk",
2870                        .parent_names = (const char *[]){ "fd_core_clk_src" },
2871                        .num_parents = 1,
2872                        .flags = CLK_SET_RATE_PARENT,
2873                        .ops = &clk_branch2_ops,
2874                },
2875        },
2876};
2877
2878static struct clk_branch fd_ahb_clk = {
2879        .halt_reg = 0x3ba74,
2880        .clkr = {
2881                .enable_reg = 0x3ba74,
2882                .enable_mask = BIT(0),
2883                .hw.init = &(struct clk_init_data){
2884                        .name = "fd_ahb_clk",
2885                        .parent_names = (const char *[]){ "ahb_clk_src" },
2886                        .num_parents = 1,
2887                        .flags = CLK_SET_RATE_PARENT,
2888                        .ops = &clk_branch2_ops,
2889                },
2890        },
2891};
2892
2893static struct clk_hw *mmcc_msm8996_hws[] = {
2894        &gpll0_div.hw,
2895};
2896
2897static struct gdsc mmagic_bimc_gdsc = {
2898        .gdscr = 0x529c,
2899        .pd = {
2900                .name = "mmagic_bimc",
2901        },
2902        .pwrsts = PWRSTS_OFF_ON,
2903        .flags = ALWAYS_ON,
2904};
2905
2906static struct gdsc mmagic_video_gdsc = {
2907        .gdscr = 0x119c,
2908        .gds_hw_ctrl = 0x120c,
2909        .pd = {
2910                .name = "mmagic_video",
2911        },
2912        .pwrsts = PWRSTS_OFF_ON,
2913        .flags = VOTABLE | ALWAYS_ON,
2914};
2915
2916static struct gdsc mmagic_mdss_gdsc = {
2917        .gdscr = 0x247c,
2918        .gds_hw_ctrl = 0x2480,
2919        .pd = {
2920                .name = "mmagic_mdss",
2921        },
2922        .pwrsts = PWRSTS_OFF_ON,
2923        .flags = VOTABLE | ALWAYS_ON,
2924};
2925
2926static struct gdsc mmagic_camss_gdsc = {
2927        .gdscr = 0x3c4c,
2928        .gds_hw_ctrl = 0x3c50,
2929        .pd = {
2930                .name = "mmagic_camss",
2931        },
2932        .pwrsts = PWRSTS_OFF_ON,
2933        .flags = VOTABLE | ALWAYS_ON,
2934};
2935
2936static struct gdsc venus_gdsc = {
2937        .gdscr = 0x1024,
2938        .cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 },
2939        .cxc_count = 3,
2940        .pd = {
2941                .name = "venus",
2942        },
2943        .parent = &mmagic_video_gdsc.pd,
2944        .pwrsts = PWRSTS_OFF_ON,
2945};
2946
2947static struct gdsc venus_core0_gdsc = {
2948        .gdscr = 0x1040,
2949        .cxcs = (unsigned int []){ 0x1048 },
2950        .cxc_count = 1,
2951        .pd = {
2952                .name = "venus_core0",
2953        },
2954        .parent = &venus_gdsc.pd,
2955        .pwrsts = PWRSTS_OFF_ON,
2956        .flags = HW_CTRL,
2957};
2958
2959static struct gdsc venus_core1_gdsc = {
2960        .gdscr = 0x1044,
2961        .cxcs = (unsigned int []){ 0x104c },
2962        .cxc_count = 1,
2963        .pd = {
2964                .name = "venus_core1",
2965        },
2966        .parent = &venus_gdsc.pd,
2967        .pwrsts = PWRSTS_OFF_ON,
2968        .flags = HW_CTRL,
2969};
2970
2971static struct gdsc camss_gdsc = {
2972        .gdscr = 0x34a0,
2973        .cxcs = (unsigned int []){ 0x36bc, 0x36c4 },
2974        .cxc_count = 2,
2975        .pd = {
2976                .name = "camss",
2977        },
2978        .parent = &mmagic_camss_gdsc.pd,
2979        .pwrsts = PWRSTS_OFF_ON,
2980};
2981
2982static struct gdsc vfe0_gdsc = {
2983        .gdscr = 0x3664,
2984        .cxcs = (unsigned int []){ 0x36a8 },
2985        .cxc_count = 1,
2986        .pd = {
2987                .name = "vfe0",
2988        },
2989        .parent = &camss_gdsc.pd,
2990        .pwrsts = PWRSTS_OFF_ON,
2991};
2992
2993static struct gdsc vfe1_gdsc = {
2994        .gdscr = 0x3674,
2995        .cxcs = (unsigned int []){ 0x36ac },
2996        .cxc_count = 1,
2997        .pd = {
2998                .name = "vfe1",
2999        },
3000        .parent = &camss_gdsc.pd,
3001        .pwrsts = PWRSTS_OFF_ON,
3002};
3003
3004static struct gdsc jpeg_gdsc = {
3005        .gdscr = 0x35a4,
3006        .cxcs = (unsigned int []){ 0x35a8, 0x35b0, 0x35c0, 0x35b8 },
3007        .cxc_count = 4,
3008        .pd = {
3009                .name = "jpeg",
3010        },
3011        .parent = &camss_gdsc.pd,
3012        .pwrsts = PWRSTS_OFF_ON,
3013};
3014
3015static struct gdsc cpp_gdsc = {
3016        .gdscr = 0x36d4,
3017        .cxcs = (unsigned int []){ 0x36b0 },
3018        .cxc_count = 1,
3019        .pd = {
3020                .name = "cpp",
3021        },
3022        .parent = &camss_gdsc.pd,
3023        .pwrsts = PWRSTS_OFF_ON,
3024};
3025
3026static struct gdsc fd_gdsc = {
3027        .gdscr = 0x3b64,
3028        .cxcs = (unsigned int []){ 0x3b68, 0x3b6c },
3029        .cxc_count = 2,
3030        .pd = {
3031                .name = "fd",
3032        },
3033        .parent = &camss_gdsc.pd,
3034        .pwrsts = PWRSTS_OFF_ON,
3035};
3036
3037static struct gdsc mdss_gdsc = {
3038        .gdscr = 0x2304,
3039        .cxcs = (unsigned int []){ 0x2310, 0x231c },
3040        .cxc_count = 2,
3041        .pd = {
3042                .name = "mdss",
3043        },
3044        .parent = &mmagic_mdss_gdsc.pd,
3045        .pwrsts = PWRSTS_OFF_ON,
3046};
3047
3048static struct gdsc gpu_gdsc = {
3049        .gdscr = 0x4034,
3050        .gds_hw_ctrl = 0x4038,
3051        .pd = {
3052                .name = "gpu",
3053        },
3054        .pwrsts = PWRSTS_OFF_ON,
3055        .flags = VOTABLE,
3056};
3057
3058static struct gdsc gpu_gx_gdsc = {
3059        .gdscr = 0x4024,
3060        .clamp_io_ctrl = 0x4300,
3061        .cxcs = (unsigned int []){ 0x4028 },
3062        .cxc_count = 1,
3063        .pd = {
3064                .name = "gpu_gx",
3065        },
3066        .pwrsts = PWRSTS_OFF_ON,
3067        .parent = &gpu_gdsc.pd,
3068        .flags = CLAMP_IO,
3069        .supply = "vdd-gfx",
3070};
3071
3072static struct clk_regmap *mmcc_msm8996_clocks[] = {
3073        [MMPLL0_EARLY] = &mmpll0_early.clkr,
3074        [MMPLL0_PLL] = &mmpll0.clkr,
3075        [MMPLL1_EARLY] = &mmpll1_early.clkr,
3076        [MMPLL1_PLL] = &mmpll1.clkr,
3077        [MMPLL2_EARLY] = &mmpll2_early.clkr,
3078        [MMPLL2_PLL] = &mmpll2.clkr,
3079        [MMPLL3_EARLY] = &mmpll3_early.clkr,
3080        [MMPLL3_PLL] = &mmpll3.clkr,
3081        [MMPLL4_EARLY] = &mmpll4_early.clkr,
3082        [MMPLL4_PLL] = &mmpll4.clkr,
3083        [MMPLL5_EARLY] = &mmpll5_early.clkr,
3084        [MMPLL5_PLL] = &mmpll5.clkr,
3085        [MMPLL8_EARLY] = &mmpll8_early.clkr,
3086        [MMPLL8_PLL] = &mmpll8.clkr,
3087        [MMPLL9_EARLY] = &mmpll9_early.clkr,
3088        [MMPLL9_PLL] = &mmpll9.clkr,
3089        [AHB_CLK_SRC] = &ahb_clk_src.clkr,
3090        [AXI_CLK_SRC] = &axi_clk_src.clkr,
3091        [MAXI_CLK_SRC] = &maxi_clk_src.clkr,
3092        [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3093        [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3094        [ISENSE_CLK_SRC] = &isense_clk_src.clkr,
3095        [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3096        [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr,
3097        [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr,
3098        [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr,
3099        [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3100        [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3101        [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3102        [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3103        [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3104        [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3105        [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3106        [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3107        [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3108        [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3109        [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3110        [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3111        [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3112        [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3113        [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3114        [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3115        [CCI_CLK_SRC] = &cci_clk_src.clkr,
3116        [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3117        [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3118        [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3119        [CSIPHY0_3P_CLK_SRC] = &csiphy0_3p_clk_src.clkr,
3120        [CSIPHY1_3P_CLK_SRC] = &csiphy1_3p_clk_src.clkr,
3121        [CSIPHY2_3P_CLK_SRC] = &csiphy2_3p_clk_src.clkr,
3122        [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3123        [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3124        [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr,
3125        [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3126        [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3127        [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3128        [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3129        [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3130        [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3131        [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3132        [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
3133        [MMSS_MMAGIC_AHB_CLK] = &mmss_mmagic_ahb_clk.clkr,
3134        [MMSS_MMAGIC_CFG_AHB_CLK] = &mmss_mmagic_cfg_ahb_clk.clkr,
3135        [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3136        [MMSS_MISC_CXO_CLK] = &mmss_misc_cxo_clk.clkr,
3137        [MMSS_MMAGIC_MAXI_CLK] = &mmss_mmagic_maxi_clk.clkr,
3138        [MMAGIC_CAMSS_AXI_CLK] = &mmagic_camss_axi_clk.clkr,
3139        [MMAGIC_CAMSS_NOC_CFG_AHB_CLK] = &mmagic_camss_noc_cfg_ahb_clk.clkr,
3140        [SMMU_VFE_AHB_CLK] = &smmu_vfe_ahb_clk.clkr,
3141        [SMMU_VFE_AXI_CLK] = &smmu_vfe_axi_clk.clkr,
3142        [SMMU_CPP_AHB_CLK] = &smmu_cpp_ahb_clk.clkr,
3143        [SMMU_CPP_AXI_CLK] = &smmu_cpp_axi_clk.clkr,
3144        [SMMU_JPEG_AHB_CLK] = &smmu_jpeg_ahb_clk.clkr,
3145        [SMMU_JPEG_AXI_CLK] = &smmu_jpeg_axi_clk.clkr,
3146        [MMAGIC_MDSS_AXI_CLK] = &mmagic_mdss_axi_clk.clkr,
3147        [MMAGIC_MDSS_NOC_CFG_AHB_CLK] = &mmagic_mdss_noc_cfg_ahb_clk.clkr,
3148        [SMMU_ROT_AHB_CLK] = &smmu_rot_ahb_clk.clkr,
3149        [SMMU_ROT_AXI_CLK] = &smmu_rot_axi_clk.clkr,
3150        [SMMU_MDP_AHB_CLK] = &smmu_mdp_ahb_clk.clkr,
3151        [SMMU_MDP_AXI_CLK] = &smmu_mdp_axi_clk.clkr,
3152        [MMAGIC_VIDEO_AXI_CLK] = &mmagic_video_axi_clk.clkr,
3153        [MMAGIC_VIDEO_NOC_CFG_AHB_CLK] = &mmagic_video_noc_cfg_ahb_clk.clkr,
3154        [SMMU_VIDEO_AHB_CLK] = &smmu_video_ahb_clk.clkr,
3155        [SMMU_VIDEO_AXI_CLK] = &smmu_video_axi_clk.clkr,
3156        [MMAGIC_BIMC_NOC_CFG_AHB_CLK] = &mmagic_bimc_noc_cfg_ahb_clk.clkr,
3157        [GPU_GX_GFX3D_CLK] = &gpu_gx_gfx3d_clk.clkr,
3158        [GPU_GX_RBBMTIMER_CLK] = &gpu_gx_rbbmtimer_clk.clkr,
3159        [GPU_AHB_CLK] = &gpu_ahb_clk.clkr,
3160        [GPU_AON_ISENSE_CLK] = &gpu_aon_isense_clk.clkr,
3161        [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr,
3162        [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr,
3163        [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3164        [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3165        [VIDEO_CORE_CLK] = &video_core_clk.clkr,
3166        [VIDEO_AXI_CLK] = &video_axi_clk.clkr,
3167        [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr,
3168        [VIDEO_AHB_CLK] = &video_ahb_clk.clkr,
3169        [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr,
3170        [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr,
3171        [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3172        [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3173        [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3174        [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3175        [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3176        [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3177        [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3178        [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3179        [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3180        [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3181        [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3182        [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3183        [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3184        [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3185        [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3186        [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3187        [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3188        [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3189        [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3190        [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3191        [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3192        [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3193        [CAMSS_CCI_CLK] = &camss_cci_clk.clkr,
3194        [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr,
3195        [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr,
3196        [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr,
3197        [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr,
3198        [CAMSS_CSIPHY0_3P_CLK] = &camss_csiphy0_3p_clk.clkr,
3199        [CAMSS_CSIPHY1_3P_CLK] = &camss_csiphy1_3p_clk.clkr,
3200        [CAMSS_CSIPHY2_3P_CLK] = &camss_csiphy2_3p_clk.clkr,
3201        [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr,
3202        [CAMSS_JPEG2_CLK] = &camss_jpeg2_clk.clkr,
3203        [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr,
3204        [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr,
3205        [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr,
3206        [CAMSS_VFE_AHB_CLK] = &camss_vfe_ahb_clk.clkr,
3207        [CAMSS_VFE_AXI_CLK] = &camss_vfe_axi_clk.clkr,
3208        [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr,
3209        [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr,
3210        [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr,
3211        [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr,
3212        [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr,
3213        [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr,
3214        [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3215        [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3216        [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr,
3217        [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr,
3218        [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr,
3219        [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr,
3220        [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3221        [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3222        [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3223        [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3224        [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3225        [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3226        [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3227        [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3228        [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3229        [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3230        [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3231        [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3232        [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3233        [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3234        [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3235        [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3236        [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3237        [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3238        [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3239        [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3240        [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3241        [FD_CORE_CLK] = &fd_core_clk.clkr,
3242        [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
3243        [FD_AHB_CLK] = &fd_ahb_clk.clkr,
3244};
3245
3246static struct gdsc *mmcc_msm8996_gdscs[] = {
3247        [MMAGIC_BIMC_GDSC] = &mmagic_bimc_gdsc,
3248        [MMAGIC_VIDEO_GDSC] = &mmagic_video_gdsc,
3249        [MMAGIC_MDSS_GDSC] = &mmagic_mdss_gdsc,
3250        [MMAGIC_CAMSS_GDSC] = &mmagic_camss_gdsc,
3251        [VENUS_GDSC] = &venus_gdsc,
3252        [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3253        [VENUS_CORE1_GDSC] = &venus_core1_gdsc,
3254        [CAMSS_GDSC] = &camss_gdsc,
3255        [VFE0_GDSC] = &vfe0_gdsc,
3256        [VFE1_GDSC] = &vfe1_gdsc,
3257        [JPEG_GDSC] = &jpeg_gdsc,
3258        [CPP_GDSC] = &cpp_gdsc,
3259        [FD_GDSC] = &fd_gdsc,
3260        [MDSS_GDSC] = &mdss_gdsc,
3261        [GPU_GDSC] = &gpu_gdsc,
3262        [GPU_GX_GDSC] = &gpu_gx_gdsc,
3263};
3264
3265static const struct qcom_reset_map mmcc_msm8996_resets[] = {
3266        [MMAGICAHB_BCR] = { 0x5020 },
3267        [MMAGIC_CFG_BCR] = { 0x5050 },
3268        [MISC_BCR] = { 0x5010 },
3269        [BTO_BCR] = { 0x5030 },
3270        [MMAGICAXI_BCR] = { 0x5060 },
3271        [MMAGICMAXI_BCR] = { 0x5070 },
3272        [DSA_BCR] = { 0x50a0 },
3273        [MMAGIC_CAMSS_BCR] = { 0x3c40 },
3274        [THROTTLE_CAMSS_BCR] = { 0x3c30 },
3275        [SMMU_VFE_BCR] = { 0x3c00 },
3276        [SMMU_CPP_BCR] = { 0x3c10 },
3277        [SMMU_JPEG_BCR] = { 0x3c20 },
3278        [MMAGIC_MDSS_BCR] = { 0x2470 },
3279        [THROTTLE_MDSS_BCR] = { 0x2460 },
3280        [SMMU_ROT_BCR] = { 0x2440 },
3281        [SMMU_MDP_BCR] = { 0x2450 },
3282        [MMAGIC_VIDEO_BCR] = { 0x1190 },
3283        [THROTTLE_VIDEO_BCR] = { 0x1180 },
3284        [SMMU_VIDEO_BCR] = { 0x1170 },
3285        [MMAGIC_BIMC_BCR] = { 0x5290 },
3286        [GPU_GX_BCR] = { 0x4020 },
3287        [GPU_BCR] = { 0x4030 },
3288        [GPU_AON_BCR] = { 0x4040 },
3289        [VMEM_BCR] = { 0x1200 },
3290        [MMSS_RBCPR_BCR] = { 0x4080 },
3291        [VIDEO_BCR] = { 0x1020 },
3292        [MDSS_BCR] = { 0x2300 },
3293        [CAMSS_TOP_BCR] = { 0x3480 },
3294        [CAMSS_AHB_BCR] = { 0x3488 },
3295        [CAMSS_MICRO_BCR] = { 0x3490 },
3296        [CAMSS_CCI_BCR] = { 0x3340 },
3297        [CAMSS_PHY0_BCR] = { 0x3020 },
3298        [CAMSS_PHY1_BCR] = { 0x3050 },
3299        [CAMSS_PHY2_BCR] = { 0x3080 },
3300        [CAMSS_CSIPHY0_3P_BCR] = { 0x3230 },
3301        [CAMSS_CSIPHY1_3P_BCR] = { 0x3250 },
3302        [CAMSS_CSIPHY2_3P_BCR] = { 0x3270 },
3303        [CAMSS_JPEG_BCR] = { 0x35a0 },
3304        [CAMSS_VFE_BCR] = { 0x36a0 },
3305        [CAMSS_VFE0_BCR] = { 0x3660 },
3306        [CAMSS_VFE1_BCR] = { 0x3670 },
3307        [CAMSS_CSI_VFE0_BCR] = { 0x3700 },
3308        [CAMSS_CSI_VFE1_BCR] = { 0x3710 },
3309        [CAMSS_CPP_TOP_BCR] = { 0x36c0 },
3310        [CAMSS_CPP_BCR] = { 0x36d0 },
3311        [CAMSS_CSI0_BCR] = { 0x30b0 },
3312        [CAMSS_CSI0RDI_BCR] = { 0x30d0 },
3313        [CAMSS_CSI0PIX_BCR] = { 0x30e0 },
3314        [CAMSS_CSI1_BCR] = { 0x3120 },
3315        [CAMSS_CSI1RDI_BCR] = { 0x3140 },
3316        [CAMSS_CSI1PIX_BCR] = { 0x3150 },
3317        [CAMSS_CSI2_BCR] = { 0x3180 },
3318        [CAMSS_CSI2RDI_BCR] = { 0x31a0 },
3319        [CAMSS_CSI2PIX_BCR] = { 0x31b0 },
3320        [CAMSS_CSI3_BCR] = { 0x31e0 },
3321        [CAMSS_CSI3RDI_BCR] = { 0x3200 },
3322        [CAMSS_CSI3PIX_BCR] = { 0x3210 },
3323        [CAMSS_ISPIF_BCR] = { 0x3220 },
3324        [FD_BCR] = { 0x3b60 },
3325        [MMSS_SPDM_RM_BCR] = { 0x300 },
3326};
3327
3328static const struct regmap_config mmcc_msm8996_regmap_config = {
3329        .reg_bits       = 32,
3330        .reg_stride     = 4,
3331        .val_bits       = 32,
3332        .max_register   = 0xb008,
3333        .fast_io        = true,
3334};
3335
3336static const struct qcom_cc_desc mmcc_msm8996_desc = {
3337        .config = &mmcc_msm8996_regmap_config,
3338        .clks = mmcc_msm8996_clocks,
3339        .num_clks = ARRAY_SIZE(mmcc_msm8996_clocks),
3340        .resets = mmcc_msm8996_resets,
3341        .num_resets = ARRAY_SIZE(mmcc_msm8996_resets),
3342        .gdscs = mmcc_msm8996_gdscs,
3343        .num_gdscs = ARRAY_SIZE(mmcc_msm8996_gdscs),
3344        .clk_hws = mmcc_msm8996_hws,
3345        .num_clk_hws = ARRAY_SIZE(mmcc_msm8996_hws),
3346};
3347
3348static const struct of_device_id mmcc_msm8996_match_table[] = {
3349        { .compatible = "qcom,mmcc-msm8996" },
3350        { }
3351};
3352MODULE_DEVICE_TABLE(of, mmcc_msm8996_match_table);
3353
3354static int mmcc_msm8996_probe(struct platform_device *pdev)
3355{
3356        struct regmap *regmap;
3357
3358        regmap = qcom_cc_map(pdev, &mmcc_msm8996_desc);
3359        if (IS_ERR(regmap))
3360                return PTR_ERR(regmap);
3361
3362        /* Disable the AHB DCD */
3363        regmap_update_bits(regmap, 0x50d8, BIT(31), 0);
3364        /* Disable the NoC FSM for mmss_mmagic_cfg_ahb_clk */
3365        regmap_update_bits(regmap, 0x5054, BIT(15), 0);
3366
3367        return qcom_cc_really_probe(pdev, &mmcc_msm8996_desc, regmap);
3368}
3369
3370static struct platform_driver mmcc_msm8996_driver = {
3371        .probe          = mmcc_msm8996_probe,
3372        .driver         = {
3373                .name   = "mmcc-msm8996",
3374                .of_match_table = mmcc_msm8996_match_table,
3375        },
3376};
3377module_platform_driver(mmcc_msm8996_driver);
3378
3379MODULE_DESCRIPTION("QCOM MMCC MSM8996 Driver");
3380MODULE_LICENSE("GPL v2");
3381MODULE_ALIAS("platform:mmcc-msm8996");
3382