linux/drivers/clk/qcom/gcc-sm8150.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2// Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
   3
   4#include <linux/kernel.h>
   5#include <linux/bitops.h>
   6#include <linux/err.h>
   7#include <linux/platform_device.h>
   8#include <linux/module.h>
   9#include <linux/of.h>
  10#include <linux/of_device.h>
  11#include <linux/clk-provider.h>
  12#include <linux/regmap.h>
  13#include <linux/reset-controller.h>
  14
  15#include <dt-bindings/clock/qcom,gcc-sm8150.h>
  16
  17#include "common.h"
  18#include "clk-alpha-pll.h"
  19#include "clk-branch.h"
  20#include "clk-pll.h"
  21#include "clk-rcg.h"
  22#include "clk-regmap.h"
  23#include "reset.h"
  24#include "gdsc.h"
  25
  26enum {
  27        P_BI_TCXO,
  28        P_AUD_REF_CLK,
  29        P_CORE_BI_PLL_TEST_SE,
  30        P_GPLL0_OUT_EVEN,
  31        P_GPLL0_OUT_MAIN,
  32        P_GPLL7_OUT_MAIN,
  33        P_GPLL9_OUT_MAIN,
  34        P_SLEEP_CLK,
  35};
  36
  37static struct clk_alpha_pll gpll0 = {
  38        .offset = 0x0,
  39        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
  40        .clkr = {
  41                .enable_reg = 0x52000,
  42                .enable_mask = BIT(0),
  43                .hw.init = &(struct clk_init_data){
  44                        .name = "gpll0",
  45                        .parent_data = &(const struct clk_parent_data){
  46                                .fw_name = "bi_tcxo",
  47                                .name = "bi_tcxo",
  48                        },
  49                        .num_parents = 1,
  50                        .ops = &clk_alpha_pll_fixed_trion_ops,
  51                },
  52        },
  53};
  54
  55static const struct clk_div_table post_div_table_trion_even[] = {
  56        { 0x0, 1 },
  57        { 0x1, 2 },
  58        { 0x3, 4 },
  59        { 0x7, 8 },
  60        { }
  61};
  62
  63static struct clk_alpha_pll_postdiv gpll0_out_even = {
  64        .offset = 0x0,
  65        .post_div_shift = 8,
  66        .post_div_table = post_div_table_trion_even,
  67        .num_post_div = ARRAY_SIZE(post_div_table_trion_even),
  68        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
  69        .width = 4,
  70        .clkr.hw.init = &(struct clk_init_data){
  71                .name = "gpll0_out_even",
  72                .parent_hws = (const struct clk_hw*[]){
  73                        &gpll0.clkr.hw,
  74                },
  75                .num_parents = 1,
  76                .ops = &clk_alpha_pll_postdiv_trion_ops,
  77        },
  78};
  79
  80static struct clk_alpha_pll gpll7 = {
  81        .offset = 0x1a000,
  82        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
  83        .clkr = {
  84                .enable_reg = 0x52000,
  85                .enable_mask = BIT(7),
  86                .hw.init = &(struct clk_init_data){
  87                        .name = "gpll7",
  88                        .parent_data = &(const struct clk_parent_data){
  89                                .fw_name = "bi_tcxo",
  90                                .name = "bi_tcxo",
  91                        },
  92                        .num_parents = 1,
  93                        .ops = &clk_alpha_pll_fixed_trion_ops,
  94                },
  95        },
  96};
  97
  98static struct clk_alpha_pll gpll9 = {
  99        .offset = 0x1c000,
 100        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
 101        .clkr = {
 102                .enable_reg = 0x52000,
 103                .enable_mask = BIT(9),
 104                .hw.init = &(struct clk_init_data){
 105                        .name = "gpll9",
 106                        .parent_data = &(const struct clk_parent_data){
 107                                .fw_name = "bi_tcxo",
 108                                .name = "bi_tcxo",
 109                        },
 110                        .num_parents = 1,
 111                        .ops = &clk_alpha_pll_fixed_trion_ops,
 112                },
 113        },
 114};
 115
 116static const struct parent_map gcc_parent_map_0[] = {
 117        { P_BI_TCXO, 0 },
 118        { P_GPLL0_OUT_MAIN, 1 },
 119        { P_GPLL0_OUT_EVEN, 6 },
 120        { P_CORE_BI_PLL_TEST_SE, 7 },
 121};
 122
 123static const struct clk_parent_data gcc_parents_0[] = {
 124        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 125        { .hw = &gpll0.clkr.hw },
 126        { .hw = &gpll0_out_even.clkr.hw },
 127        { .fw_name = "core_bi_pll_test_se" },
 128};
 129
 130static const struct parent_map gcc_parent_map_1[] = {
 131        { P_BI_TCXO, 0 },
 132        { P_GPLL0_OUT_MAIN, 1 },
 133        { P_SLEEP_CLK, 5 },
 134        { P_GPLL0_OUT_EVEN, 6 },
 135        { P_CORE_BI_PLL_TEST_SE, 7 },
 136};
 137
 138static const struct clk_parent_data gcc_parents_1[] = {
 139        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 140        { .hw = &gpll0.clkr.hw },
 141        { .fw_name = "sleep_clk", .name = "sleep_clk" },
 142        { .hw = &gpll0_out_even.clkr.hw },
 143        { .fw_name = "core_bi_pll_test_se" },
 144};
 145
 146static const struct parent_map gcc_parent_map_2[] = {
 147        { P_BI_TCXO, 0 },
 148        { P_SLEEP_CLK, 5 },
 149        { P_CORE_BI_PLL_TEST_SE, 7 },
 150};
 151
 152static const struct clk_parent_data gcc_parents_2[] = {
 153        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 154        { .fw_name = "sleep_clk", .name = "sleep_clk" },
 155        { .fw_name = "core_bi_pll_test_se" },
 156};
 157
 158static const struct parent_map gcc_parent_map_3[] = {
 159        { P_BI_TCXO, 0 },
 160        { P_GPLL0_OUT_MAIN, 1 },
 161        { P_CORE_BI_PLL_TEST_SE, 7 },
 162};
 163
 164static const struct clk_parent_data gcc_parents_3[] = {
 165        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 166        { .hw = &gpll0.clkr.hw },
 167        { .fw_name = "core_bi_pll_test_se"},
 168};
 169
 170static const struct parent_map gcc_parent_map_4[] = {
 171        { P_BI_TCXO, 0 },
 172        { P_CORE_BI_PLL_TEST_SE, 7 },
 173};
 174
 175static const struct clk_parent_data gcc_parents_4[] = {
 176        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 177        { .fw_name = "core_bi_pll_test_se" },
 178};
 179
 180static const struct parent_map gcc_parent_map_5[] = {
 181        { P_BI_TCXO, 0 },
 182        { P_GPLL0_OUT_MAIN, 1 },
 183        { P_GPLL7_OUT_MAIN, 3 },
 184        { P_GPLL0_OUT_EVEN, 6 },
 185        { P_CORE_BI_PLL_TEST_SE, 7 },
 186};
 187
 188static const struct clk_parent_data gcc_parents_5[] = {
 189        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 190        { .hw = &gpll0.clkr.hw },
 191        { .hw = &gpll7.clkr.hw },
 192        { .hw = &gpll0_out_even.clkr.hw },
 193        { .fw_name = "core_bi_pll_test_se" },
 194};
 195
 196static const struct parent_map gcc_parent_map_6[] = {
 197        { P_BI_TCXO, 0 },
 198        { P_GPLL0_OUT_MAIN, 1 },
 199        { P_GPLL9_OUT_MAIN, 2 },
 200        { P_GPLL0_OUT_EVEN, 6 },
 201        { P_CORE_BI_PLL_TEST_SE, 7 },
 202};
 203
 204static const struct clk_parent_data gcc_parents_6[] = {
 205        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 206        { .hw = &gpll0.clkr.hw },
 207        { .hw = &gpll9.clkr.hw },
 208        { .hw = &gpll0_out_even.clkr.hw },
 209        { .fw_name = "core_bi_pll_test_se" },
 210};
 211
 212static const struct parent_map gcc_parent_map_7[] = {
 213        { P_BI_TCXO, 0 },
 214        { P_GPLL0_OUT_MAIN, 1 },
 215        { P_AUD_REF_CLK, 2 },
 216        { P_GPLL0_OUT_EVEN, 6 },
 217        { P_CORE_BI_PLL_TEST_SE, 7 },
 218};
 219
 220static const struct clk_parent_data gcc_parents_7[] = {
 221        { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
 222        { .hw = &gpll0.clkr.hw },
 223        { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" },
 224        { .hw = &gpll0_out_even.clkr.hw },
 225        { .fw_name = "core_bi_pll_test_se" },
 226};
 227
 228static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
 229        F(19200000, P_BI_TCXO, 1, 0, 0),
 230        F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
 231        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 232        { }
 233};
 234
 235static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
 236        .cmd_rcgr = 0x48014,
 237        .mnd_width = 0,
 238        .hid_width = 5,
 239        .parent_map = gcc_parent_map_0,
 240        .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
 241        .clkr.hw.init = &(struct clk_init_data){
 242                .name = "gcc_cpuss_ahb_clk_src",
 243                .parent_data = gcc_parents_0,
 244                .num_parents = ARRAY_SIZE(gcc_parents_0),
 245                .flags = CLK_SET_RATE_PARENT,
 246                .ops = &clk_rcg2_ops,
 247        },
 248};
 249
 250static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
 251        F(19200000, P_BI_TCXO, 1, 0, 0),
 252        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 253        F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
 254        F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
 255        { }
 256};
 257
 258static struct clk_rcg2 gcc_emac_ptp_clk_src = {
 259        .cmd_rcgr = 0x6038,
 260        .mnd_width = 0,
 261        .hid_width = 5,
 262        .parent_map = gcc_parent_map_5,
 263        .freq_tbl = ftbl_gcc_emac_ptp_clk_src,
 264        .clkr.hw.init = &(struct clk_init_data){
 265                .name = "gcc_emac_ptp_clk_src",
 266                .parent_data = gcc_parents_5,
 267                .num_parents = ARRAY_SIZE(gcc_parents_5),
 268                .flags = CLK_SET_RATE_PARENT,
 269                .ops = &clk_rcg2_ops,
 270        },
 271};
 272
 273static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
 274        F(2500000, P_BI_TCXO, 1, 25, 192),
 275        F(5000000, P_BI_TCXO, 1, 25, 96),
 276        F(19200000, P_BI_TCXO, 1, 0, 0),
 277        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 278        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 279        F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
 280        F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
 281        { }
 282};
 283
 284static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
 285        .cmd_rcgr = 0x601c,
 286        .mnd_width = 8,
 287        .hid_width = 5,
 288        .parent_map = gcc_parent_map_5,
 289        .freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
 290        .clkr.hw.init = &(struct clk_init_data){
 291                .name = "gcc_emac_rgmii_clk_src",
 292                .parent_data = gcc_parents_5,
 293                .num_parents = ARRAY_SIZE(gcc_parents_5),
 294                .flags = CLK_SET_RATE_PARENT,
 295                .ops = &clk_rcg2_ops,
 296        },
 297};
 298
 299static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
 300        F(19200000, P_BI_TCXO, 1, 0, 0),
 301        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 302        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 303        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 304        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
 305        { }
 306};
 307
 308static struct clk_rcg2 gcc_gp1_clk_src = {
 309        .cmd_rcgr = 0x64004,
 310        .mnd_width = 8,
 311        .hid_width = 5,
 312        .parent_map = gcc_parent_map_1,
 313        .freq_tbl = ftbl_gcc_gp1_clk_src,
 314        .clkr.hw.init = &(struct clk_init_data){
 315                .name = "gcc_gp1_clk_src",
 316                .parent_data = gcc_parents_1,
 317                .num_parents = ARRAY_SIZE(gcc_parents_1),
 318                .flags = CLK_SET_RATE_PARENT,
 319                .ops = &clk_rcg2_ops,
 320        },
 321};
 322
 323static struct clk_rcg2 gcc_gp2_clk_src = {
 324        .cmd_rcgr = 0x65004,
 325        .mnd_width = 8,
 326        .hid_width = 5,
 327        .parent_map = gcc_parent_map_1,
 328        .freq_tbl = ftbl_gcc_gp1_clk_src,
 329        .clkr.hw.init = &(struct clk_init_data){
 330                .name = "gcc_gp2_clk_src",
 331                .parent_data = gcc_parents_1,
 332                .num_parents = ARRAY_SIZE(gcc_parents_1),
 333                .flags = CLK_SET_RATE_PARENT,
 334                .ops = &clk_rcg2_ops,
 335        },
 336};
 337
 338static struct clk_rcg2 gcc_gp3_clk_src = {
 339        .cmd_rcgr = 0x66004,
 340        .mnd_width = 8,
 341        .hid_width = 5,
 342        .parent_map = gcc_parent_map_1,
 343        .freq_tbl = ftbl_gcc_gp1_clk_src,
 344        .clkr.hw.init = &(struct clk_init_data){
 345                .name = "gcc_gp3_clk_src",
 346                .parent_data = gcc_parents_1,
 347                .num_parents = ARRAY_SIZE(gcc_parents_1),
 348                .flags = CLK_SET_RATE_PARENT,
 349                .ops = &clk_rcg2_ops,
 350        },
 351};
 352
 353static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
 354        F(9600000, P_BI_TCXO, 2, 0, 0),
 355        F(19200000, P_BI_TCXO, 1, 0, 0),
 356        { }
 357};
 358
 359static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
 360        .cmd_rcgr = 0x6b02c,
 361        .mnd_width = 16,
 362        .hid_width = 5,
 363        .parent_map = gcc_parent_map_2,
 364        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 365        .clkr.hw.init = &(struct clk_init_data){
 366                .name = "gcc_pcie_0_aux_clk_src",
 367                .parent_data = gcc_parents_2,
 368                .num_parents = ARRAY_SIZE(gcc_parents_2),
 369                .flags = CLK_SET_RATE_PARENT,
 370                .ops = &clk_rcg2_ops,
 371        },
 372};
 373
 374static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
 375        .cmd_rcgr = 0x8d02c,
 376        .mnd_width = 16,
 377        .hid_width = 5,
 378        .parent_map = gcc_parent_map_2,
 379        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 380        .clkr.hw.init = &(struct clk_init_data){
 381                .name = "gcc_pcie_1_aux_clk_src",
 382                .parent_data = gcc_parents_2,
 383                .num_parents = ARRAY_SIZE(gcc_parents_2),
 384                .flags = CLK_SET_RATE_PARENT,
 385                .ops = &clk_rcg2_ops,
 386        },
 387};
 388
 389static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
 390        F(19200000, P_BI_TCXO, 1, 0, 0),
 391        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 392        { }
 393};
 394
 395static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
 396        .cmd_rcgr = 0x6f014,
 397        .mnd_width = 0,
 398        .hid_width = 5,
 399        .parent_map = gcc_parent_map_0,
 400        .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
 401        .clkr.hw.init = &(struct clk_init_data){
 402                .name = "gcc_pcie_phy_refgen_clk_src",
 403                .parent_data = gcc_parents_0,
 404                .num_parents = ARRAY_SIZE(gcc_parents_0),
 405                .flags = CLK_SET_RATE_PARENT,
 406                .ops = &clk_rcg2_ops,
 407        },
 408};
 409
 410static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
 411        F(9600000, P_BI_TCXO, 2, 0, 0),
 412        F(19200000, P_BI_TCXO, 1, 0, 0),
 413        F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
 414        { }
 415};
 416
 417static struct clk_rcg2 gcc_pdm2_clk_src = {
 418        .cmd_rcgr = 0x33010,
 419        .mnd_width = 0,
 420        .hid_width = 5,
 421        .parent_map = gcc_parent_map_0,
 422        .freq_tbl = ftbl_gcc_pdm2_clk_src,
 423        .clkr.hw.init = &(struct clk_init_data){
 424                .name = "gcc_pdm2_clk_src",
 425                .parent_data = gcc_parents_0,
 426                .num_parents = ARRAY_SIZE(gcc_parents_0),
 427                .flags = CLK_SET_RATE_PARENT,
 428                .ops = &clk_rcg2_ops,
 429        },
 430};
 431
 432static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
 433        F(19200000, P_BI_TCXO, 1, 0, 0),
 434        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 435        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 436        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 437        { }
 438};
 439
 440static struct clk_rcg2 gcc_qspi_core_clk_src = {
 441        .cmd_rcgr = 0x4b008,
 442        .mnd_width = 0,
 443        .hid_width = 5,
 444        .parent_map = gcc_parent_map_0,
 445        .freq_tbl = ftbl_gcc_qspi_core_clk_src,
 446        .clkr.hw.init = &(struct clk_init_data){
 447                .name = "gcc_qspi_core_clk_src",
 448                .parent_data = gcc_parents_0,
 449                .num_parents = ARRAY_SIZE(gcc_parents_0),
 450                .flags = CLK_SET_RATE_PARENT,
 451                .ops = &clk_rcg2_ops,
 452        },
 453};
 454
 455static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
 456        F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
 457        F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
 458        F(19200000, P_BI_TCXO, 1, 0, 0),
 459        F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
 460        F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
 461        F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
 462        F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
 463        F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
 464        F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
 465        F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
 466        F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
 467        F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
 468        F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
 469        F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
 470        F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
 471        { }
 472};
 473
 474static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
 475        .cmd_rcgr = 0x17148,
 476        .mnd_width = 16,
 477        .hid_width = 5,
 478        .parent_map = gcc_parent_map_0,
 479        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 480        .clkr.hw.init = &(struct clk_init_data){
 481                .name = "gcc_qupv3_wrap0_s0_clk_src",
 482                .parent_data = gcc_parents_0,
 483                .num_parents = ARRAY_SIZE(gcc_parents_0),
 484                .flags = CLK_SET_RATE_PARENT,
 485                .ops = &clk_rcg2_ops,
 486        },
 487};
 488
 489static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
 490        .cmd_rcgr = 0x17278,
 491        .mnd_width = 16,
 492        .hid_width = 5,
 493        .parent_map = gcc_parent_map_0,
 494        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 495        .clkr.hw.init = &(struct clk_init_data){
 496                .name = "gcc_qupv3_wrap0_s1_clk_src",
 497                .parent_data = gcc_parents_0,
 498                .num_parents = ARRAY_SIZE(gcc_parents_0),
 499                .flags = CLK_SET_RATE_PARENT,
 500                .ops = &clk_rcg2_ops,
 501        },
 502};
 503
 504static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
 505        .cmd_rcgr = 0x173a8,
 506        .mnd_width = 16,
 507        .hid_width = 5,
 508        .parent_map = gcc_parent_map_0,
 509        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 510        .clkr.hw.init = &(struct clk_init_data){
 511                .name = "gcc_qupv3_wrap0_s2_clk_src",
 512                .parent_data = gcc_parents_0,
 513                .num_parents = ARRAY_SIZE(gcc_parents_0),
 514                .flags = CLK_SET_RATE_PARENT,
 515                .ops = &clk_rcg2_ops,
 516        },
 517};
 518
 519static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
 520        .cmd_rcgr = 0x174d8,
 521        .mnd_width = 16,
 522        .hid_width = 5,
 523        .parent_map = gcc_parent_map_0,
 524        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 525        .clkr.hw.init = &(struct clk_init_data){
 526                .name = "gcc_qupv3_wrap0_s3_clk_src",
 527                .parent_data = gcc_parents_0,
 528                .num_parents = ARRAY_SIZE(gcc_parents_0),
 529                .flags = CLK_SET_RATE_PARENT,
 530                .ops = &clk_rcg2_ops,
 531        },
 532};
 533
 534static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
 535        .cmd_rcgr = 0x17608,
 536        .mnd_width = 16,
 537        .hid_width = 5,
 538        .parent_map = gcc_parent_map_0,
 539        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 540        .clkr.hw.init = &(struct clk_init_data){
 541                .name = "gcc_qupv3_wrap0_s4_clk_src",
 542                .parent_data = gcc_parents_0,
 543                .num_parents = ARRAY_SIZE(gcc_parents_0),
 544                .flags = CLK_SET_RATE_PARENT,
 545                .ops = &clk_rcg2_ops,
 546        },
 547};
 548
 549static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
 550        .cmd_rcgr = 0x17738,
 551        .mnd_width = 16,
 552        .hid_width = 5,
 553        .parent_map = gcc_parent_map_0,
 554        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 555        .clkr.hw.init = &(struct clk_init_data){
 556                .name = "gcc_qupv3_wrap0_s5_clk_src",
 557                .parent_data = gcc_parents_0,
 558                .num_parents = ARRAY_SIZE(gcc_parents_0),
 559                .flags = CLK_SET_RATE_PARENT,
 560                .ops = &clk_rcg2_ops,
 561        },
 562};
 563
 564static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
 565        .cmd_rcgr = 0x17868,
 566        .mnd_width = 16,
 567        .hid_width = 5,
 568        .parent_map = gcc_parent_map_0,
 569        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 570        .clkr.hw.init = &(struct clk_init_data){
 571                .name = "gcc_qupv3_wrap0_s6_clk_src",
 572                .parent_data = gcc_parents_0,
 573                .num_parents = ARRAY_SIZE(gcc_parents_0),
 574                .flags = CLK_SET_RATE_PARENT,
 575                .ops = &clk_rcg2_ops,
 576        },
 577};
 578
 579static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
 580        .cmd_rcgr = 0x17998,
 581        .mnd_width = 16,
 582        .hid_width = 5,
 583        .parent_map = gcc_parent_map_0,
 584        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 585        .clkr.hw.init = &(struct clk_init_data){
 586                .name = "gcc_qupv3_wrap0_s7_clk_src",
 587                .parent_data = gcc_parents_0,
 588                .num_parents = ARRAY_SIZE(gcc_parents_0),
 589                .flags = CLK_SET_RATE_PARENT,
 590                .ops = &clk_rcg2_ops,
 591        },
 592};
 593
 594static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
 595        .cmd_rcgr = 0x18148,
 596        .mnd_width = 16,
 597        .hid_width = 5,
 598        .parent_map = gcc_parent_map_0,
 599        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 600        .clkr.hw.init = &(struct clk_init_data){
 601                .name = "gcc_qupv3_wrap1_s0_clk_src",
 602                .parent_data = gcc_parents_0,
 603                .num_parents = ARRAY_SIZE(gcc_parents_0),
 604                .flags = CLK_SET_RATE_PARENT,
 605                .ops = &clk_rcg2_ops,
 606        },
 607};
 608
 609static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
 610        .cmd_rcgr = 0x18278,
 611        .mnd_width = 16,
 612        .hid_width = 5,
 613        .parent_map = gcc_parent_map_0,
 614        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 615        .clkr.hw.init = &(struct clk_init_data){
 616                .name = "gcc_qupv3_wrap1_s1_clk_src",
 617                .parent_data = gcc_parents_0,
 618                .num_parents = ARRAY_SIZE(gcc_parents_0),
 619                .flags = CLK_SET_RATE_PARENT,
 620                .ops = &clk_rcg2_ops,
 621        },
 622};
 623
 624static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
 625        .cmd_rcgr = 0x183a8,
 626        .mnd_width = 16,
 627        .hid_width = 5,
 628        .parent_map = gcc_parent_map_0,
 629        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 630        .clkr.hw.init = &(struct clk_init_data){
 631                .name = "gcc_qupv3_wrap1_s2_clk_src",
 632                .parent_data = gcc_parents_0,
 633                .num_parents = ARRAY_SIZE(gcc_parents_0),
 634                .flags = CLK_SET_RATE_PARENT,
 635                .ops = &clk_rcg2_ops,
 636        },
 637};
 638
 639static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
 640        .cmd_rcgr = 0x184d8,
 641        .mnd_width = 16,
 642        .hid_width = 5,
 643        .parent_map = gcc_parent_map_0,
 644        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 645        .clkr.hw.init = &(struct clk_init_data){
 646                .name = "gcc_qupv3_wrap1_s3_clk_src",
 647                .parent_data = gcc_parents_0,
 648                .num_parents = ARRAY_SIZE(gcc_parents_0),
 649                .flags = CLK_SET_RATE_PARENT,
 650                .ops = &clk_rcg2_ops,
 651        },
 652};
 653
 654static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
 655        .cmd_rcgr = 0x18608,
 656        .mnd_width = 16,
 657        .hid_width = 5,
 658        .parent_map = gcc_parent_map_0,
 659        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 660        .clkr.hw.init = &(struct clk_init_data){
 661                .name = "gcc_qupv3_wrap1_s4_clk_src",
 662                .parent_data = gcc_parents_0,
 663                .num_parents = ARRAY_SIZE(gcc_parents_0),
 664                .flags = CLK_SET_RATE_PARENT,
 665                .ops = &clk_rcg2_ops,
 666        },
 667};
 668
 669static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
 670        .cmd_rcgr = 0x18738,
 671        .mnd_width = 16,
 672        .hid_width = 5,
 673        .parent_map = gcc_parent_map_0,
 674        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 675        .clkr.hw.init = &(struct clk_init_data){
 676                .name = "gcc_qupv3_wrap1_s5_clk_src",
 677                .parent_data = gcc_parents_0,
 678                .num_parents = ARRAY_SIZE(gcc_parents_0),
 679                .flags = CLK_SET_RATE_PARENT,
 680                .ops = &clk_rcg2_ops,
 681        },
 682};
 683
 684static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
 685        .cmd_rcgr = 0x1e148,
 686        .mnd_width = 16,
 687        .hid_width = 5,
 688        .parent_map = gcc_parent_map_0,
 689        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 690        .clkr.hw.init = &(struct clk_init_data){
 691                .name = "gcc_qupv3_wrap2_s0_clk_src",
 692                .parent_data = gcc_parents_0,
 693                .num_parents = ARRAY_SIZE(gcc_parents_0),
 694                .flags = CLK_SET_RATE_PARENT,
 695                .ops = &clk_rcg2_ops,
 696        },
 697};
 698
 699static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
 700        .cmd_rcgr = 0x1e278,
 701        .mnd_width = 16,
 702        .hid_width = 5,
 703        .parent_map = gcc_parent_map_0,
 704        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 705        .clkr.hw.init = &(struct clk_init_data){
 706                .name = "gcc_qupv3_wrap2_s1_clk_src",
 707                .parent_data = gcc_parents_0,
 708                .num_parents = ARRAY_SIZE(gcc_parents_0),
 709                .flags = CLK_SET_RATE_PARENT,
 710                .ops = &clk_rcg2_ops,
 711        },
 712};
 713
 714static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
 715        .cmd_rcgr = 0x1e3a8,
 716        .mnd_width = 16,
 717        .hid_width = 5,
 718        .parent_map = gcc_parent_map_0,
 719        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 720        .clkr.hw.init = &(struct clk_init_data){
 721                .name = "gcc_qupv3_wrap2_s2_clk_src",
 722                .parent_data = gcc_parents_0,
 723                .num_parents = ARRAY_SIZE(gcc_parents_0),
 724                .flags = CLK_SET_RATE_PARENT,
 725                .ops = &clk_rcg2_ops,
 726        },
 727};
 728
 729static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
 730        .cmd_rcgr = 0x1e4d8,
 731        .mnd_width = 16,
 732        .hid_width = 5,
 733        .parent_map = gcc_parent_map_0,
 734        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 735        .clkr.hw.init = &(struct clk_init_data){
 736                .name = "gcc_qupv3_wrap2_s3_clk_src",
 737                .parent_data = gcc_parents_0,
 738                .num_parents = ARRAY_SIZE(gcc_parents_0),
 739                .flags = CLK_SET_RATE_PARENT,
 740                .ops = &clk_rcg2_ops,
 741        },
 742};
 743
 744static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
 745        .cmd_rcgr = 0x1e608,
 746        .mnd_width = 16,
 747        .hid_width = 5,
 748        .parent_map = gcc_parent_map_0,
 749        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 750        .clkr.hw.init = &(struct clk_init_data){
 751                .name = "gcc_qupv3_wrap2_s4_clk_src",
 752                .parent_data = gcc_parents_0,
 753                .num_parents = ARRAY_SIZE(gcc_parents_0),
 754                .flags = CLK_SET_RATE_PARENT,
 755                .ops = &clk_rcg2_ops,
 756        },
 757};
 758
 759static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
 760        .cmd_rcgr = 0x1e738,
 761        .mnd_width = 16,
 762        .hid_width = 5,
 763        .parent_map = gcc_parent_map_0,
 764        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 765        .clkr.hw.init = &(struct clk_init_data){
 766                .name = "gcc_qupv3_wrap2_s5_clk_src",
 767                .parent_data = gcc_parents_0,
 768                .num_parents = ARRAY_SIZE(gcc_parents_0),
 769                .flags = CLK_SET_RATE_PARENT,
 770                .ops = &clk_rcg2_ops,
 771        },
 772};
 773
 774static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
 775        F(400000, P_BI_TCXO, 12, 1, 4),
 776        F(9600000, P_BI_TCXO, 2, 0, 0),
 777        F(19200000, P_BI_TCXO, 1, 0, 0),
 778        F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
 779        F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
 780        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 781        F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0),
 782        { }
 783};
 784
 785static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
 786        .cmd_rcgr = 0x1400c,
 787        .mnd_width = 8,
 788        .hid_width = 5,
 789        .parent_map = gcc_parent_map_6,
 790        .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
 791        .clkr.hw.init = &(struct clk_init_data){
 792                .name = "gcc_sdcc2_apps_clk_src",
 793                .parent_data = gcc_parents_6,
 794                .num_parents = ARRAY_SIZE(gcc_parents_6),
 795                .flags = CLK_SET_RATE_PARENT,
 796                .ops = &clk_rcg2_floor_ops,
 797        },
 798};
 799
 800static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
 801        F(400000, P_BI_TCXO, 12, 1, 4),
 802        F(9600000, P_BI_TCXO, 2, 0, 0),
 803        F(19200000, P_BI_TCXO, 1, 0, 0),
 804        F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
 805        F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
 806        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 807        { }
 808};
 809
 810static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
 811        .cmd_rcgr = 0x1600c,
 812        .mnd_width = 8,
 813        .hid_width = 5,
 814        .parent_map = gcc_parent_map_3,
 815        .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
 816        .clkr.hw.init = &(struct clk_init_data){
 817                .name = "gcc_sdcc4_apps_clk_src",
 818                .parent_data = gcc_parents_3,
 819                .num_parents = ARRAY_SIZE(gcc_parents_3),
 820                .flags = CLK_SET_RATE_PARENT,
 821                .ops = &clk_rcg2_floor_ops,
 822        },
 823};
 824
 825static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
 826        F(105495, P_BI_TCXO, 2, 1, 91),
 827        { }
 828};
 829
 830static struct clk_rcg2 gcc_tsif_ref_clk_src = {
 831        .cmd_rcgr = 0x36010,
 832        .mnd_width = 8,
 833        .hid_width = 5,
 834        .parent_map = gcc_parent_map_7,
 835        .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
 836        .clkr.hw.init = &(struct clk_init_data){
 837                .name = "gcc_tsif_ref_clk_src",
 838                .parent_data = gcc_parents_7,
 839                .num_parents = ARRAY_SIZE(gcc_parents_7),
 840                .flags = CLK_SET_RATE_PARENT,
 841                .ops = &clk_rcg2_ops,
 842        },
 843};
 844
 845static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
 846        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 847        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 848        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 849        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
 850        F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
 851        { }
 852};
 853
 854static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
 855        .cmd_rcgr = 0x75020,
 856        .mnd_width = 8,
 857        .hid_width = 5,
 858        .parent_map = gcc_parent_map_0,
 859        .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
 860        .clkr.hw.init = &(struct clk_init_data){
 861                .name = "gcc_ufs_card_axi_clk_src",
 862                .parent_data = gcc_parents_0,
 863                .num_parents = ARRAY_SIZE(gcc_parents_0),
 864                .flags = CLK_SET_RATE_PARENT,
 865                .ops = &clk_rcg2_ops,
 866        },
 867};
 868
 869static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
 870        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
 871        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 872        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 873        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 874        { }
 875};
 876
 877static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
 878        .cmd_rcgr = 0x75060,
 879        .mnd_width = 0,
 880        .hid_width = 5,
 881        .parent_map = gcc_parent_map_0,
 882        .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
 883        .clkr.hw.init = &(struct clk_init_data){
 884                .name = "gcc_ufs_card_ice_core_clk_src",
 885                .parent_data = gcc_parents_0,
 886                .num_parents = ARRAY_SIZE(gcc_parents_0),
 887                .flags = CLK_SET_RATE_PARENT,
 888                .ops = &clk_rcg2_ops,
 889        },
 890};
 891
 892static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = {
 893        F(19200000, P_BI_TCXO, 1, 0, 0),
 894        { }
 895};
 896
 897static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
 898        .cmd_rcgr = 0x75094,
 899        .mnd_width = 0,
 900        .hid_width = 5,
 901        .parent_map = gcc_parent_map_4,
 902        .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
 903        .clkr.hw.init = &(struct clk_init_data){
 904                .name = "gcc_ufs_card_phy_aux_clk_src",
 905                .parent_data = gcc_parents_4,
 906                .num_parents = ARRAY_SIZE(gcc_parents_4),
 907                .flags = CLK_SET_RATE_PARENT,
 908                .ops = &clk_rcg2_ops,
 909        },
 910};
 911
 912static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
 913        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
 914        F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
 915        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 916        { }
 917};
 918
 919static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
 920        .cmd_rcgr = 0x75078,
 921        .mnd_width = 0,
 922        .hid_width = 5,
 923        .parent_map = gcc_parent_map_0,
 924        .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
 925        .clkr.hw.init = &(struct clk_init_data){
 926                .name = "gcc_ufs_card_unipro_core_clk_src",
 927                .parent_data = gcc_parents_0,
 928                .num_parents = ARRAY_SIZE(gcc_parents_0),
 929                .flags = CLK_SET_RATE_PARENT,
 930                .ops = &clk_rcg2_ops,
 931        },
 932};
 933
 934static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
 935        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 936        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
 937        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 938        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 939        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 940        { }
 941};
 942
 943static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
 944        .cmd_rcgr = 0x77020,
 945        .mnd_width = 8,
 946        .hid_width = 5,
 947        .parent_map = gcc_parent_map_0,
 948        .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
 949        .clkr.hw.init = &(struct clk_init_data){
 950                .name = "gcc_ufs_phy_axi_clk_src",
 951                .parent_data = gcc_parents_0,
 952                .num_parents = ARRAY_SIZE(gcc_parents_0),
 953                .flags = CLK_SET_RATE_PARENT,
 954                .ops = &clk_rcg2_ops,
 955        },
 956};
 957
 958static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
 959        .cmd_rcgr = 0x77060,
 960        .mnd_width = 0,
 961        .hid_width = 5,
 962        .parent_map = gcc_parent_map_0,
 963        .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
 964        .clkr.hw.init = &(struct clk_init_data){
 965                .name = "gcc_ufs_phy_ice_core_clk_src",
 966                .parent_data = gcc_parents_0,
 967                .num_parents = ARRAY_SIZE(gcc_parents_0),
 968                .flags = CLK_SET_RATE_PARENT,
 969                .ops = &clk_rcg2_ops,
 970        },
 971};
 972
 973static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
 974        .cmd_rcgr = 0x77094,
 975        .mnd_width = 0,
 976        .hid_width = 5,
 977        .parent_map = gcc_parent_map_4,
 978        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 979        .clkr.hw.init = &(struct clk_init_data){
 980                .name = "gcc_ufs_phy_phy_aux_clk_src",
 981                .parent_data = gcc_parents_4,
 982                .num_parents = ARRAY_SIZE(gcc_parents_4),
 983                .flags = CLK_SET_RATE_PARENT,
 984                .ops = &clk_rcg2_ops,
 985        },
 986};
 987
 988static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
 989        .cmd_rcgr = 0x77078,
 990        .mnd_width = 0,
 991        .hid_width = 5,
 992        .parent_map = gcc_parent_map_0,
 993        .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
 994        .clkr.hw.init = &(struct clk_init_data){
 995                .name = "gcc_ufs_phy_unipro_core_clk_src",
 996                .parent_data = gcc_parents_0,
 997                .num_parents = ARRAY_SIZE(gcc_parents_0),
 998                .flags = CLK_SET_RATE_PARENT,
 999                .ops = &clk_rcg2_ops,
1000        },
1001};
1002
1003static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1004        F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1005        F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1006        F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1007        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1008        F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1009        { }
1010};
1011
1012static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1013        .cmd_rcgr = 0xf01c,
1014        .mnd_width = 8,
1015        .hid_width = 5,
1016        .parent_map = gcc_parent_map_0,
1017        .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1018        .clkr.hw.init = &(struct clk_init_data){
1019                .name = "gcc_usb30_prim_master_clk_src",
1020                .parent_data = gcc_parents_0,
1021                .num_parents = ARRAY_SIZE(gcc_parents_0),
1022                .flags = CLK_SET_RATE_PARENT,
1023                .ops = &clk_rcg2_ops,
1024        },
1025};
1026
1027static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1028        F(19200000, P_BI_TCXO, 1, 0, 0),
1029        F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1030        F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
1031        { }
1032};
1033
1034static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1035        .cmd_rcgr = 0xf034,
1036        .mnd_width = 0,
1037        .hid_width = 5,
1038        .parent_map = gcc_parent_map_0,
1039        .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1040        .clkr.hw.init = &(struct clk_init_data){
1041                .name = "gcc_usb30_prim_mock_utmi_clk_src",
1042                .parent_data = gcc_parents_0,
1043                .num_parents = ARRAY_SIZE(gcc_parents_0),
1044                .flags = CLK_SET_RATE_PARENT,
1045                .ops = &clk_rcg2_ops,
1046        },
1047};
1048
1049static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1050        .cmd_rcgr = 0x1001c,
1051        .mnd_width = 8,
1052        .hid_width = 5,
1053        .parent_map = gcc_parent_map_0,
1054        .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1055        .clkr.hw.init = &(struct clk_init_data){
1056                .name = "gcc_usb30_sec_master_clk_src",
1057                .parent_data = gcc_parents_0,
1058                .num_parents = ARRAY_SIZE(gcc_parents_0),
1059                .flags = CLK_SET_RATE_PARENT,
1060                .ops = &clk_rcg2_ops,
1061        },
1062};
1063
1064static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1065        .cmd_rcgr = 0x10034,
1066        .mnd_width = 0,
1067        .hid_width = 5,
1068        .parent_map = gcc_parent_map_0,
1069        .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1070        .clkr.hw.init = &(struct clk_init_data){
1071                .name = "gcc_usb30_sec_mock_utmi_clk_src",
1072                .parent_data = gcc_parents_0,
1073                .num_parents = ARRAY_SIZE(gcc_parents_0),
1074                .flags = CLK_SET_RATE_PARENT,
1075                .ops = &clk_rcg2_ops,
1076        },
1077};
1078
1079static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1080        .cmd_rcgr = 0xf060,
1081        .mnd_width = 0,
1082        .hid_width = 5,
1083        .parent_map = gcc_parent_map_2,
1084        .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1085        .clkr.hw.init = &(struct clk_init_data){
1086                .name = "gcc_usb3_prim_phy_aux_clk_src",
1087                .parent_data = gcc_parents_2,
1088                .num_parents = ARRAY_SIZE(gcc_parents_2),
1089                .flags = CLK_SET_RATE_PARENT,
1090                .ops = &clk_rcg2_ops,
1091        },
1092};
1093
1094static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1095        .cmd_rcgr = 0x10060,
1096        .mnd_width = 0,
1097        .hid_width = 5,
1098        .parent_map = gcc_parent_map_2,
1099        .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1100        .clkr.hw.init = &(struct clk_init_data){
1101                .name = "gcc_usb3_sec_phy_aux_clk_src",
1102                .parent_data = gcc_parents_2,
1103                .num_parents = ARRAY_SIZE(gcc_parents_2),
1104                .flags = CLK_SET_RATE_PARENT,
1105                .ops = &clk_rcg2_ops,
1106        },
1107};
1108
1109static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1110        .halt_reg = 0x90018,
1111        .halt_check = BRANCH_HALT,
1112        .clkr = {
1113                .enable_reg = 0x90018,
1114                .enable_mask = BIT(0),
1115                .hw.init = &(struct clk_init_data){
1116                        .name = "gcc_aggre_noc_pcie_tbu_clk",
1117                        .ops = &clk_branch2_ops,
1118                },
1119        },
1120};
1121
1122static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1123        .halt_reg = 0x750c0,
1124        .halt_check = BRANCH_HALT,
1125        .hwcg_reg = 0x750c0,
1126        .hwcg_bit = 1,
1127        .clkr = {
1128                .enable_reg = 0x750c0,
1129                .enable_mask = BIT(0),
1130                .hw.init = &(struct clk_init_data){
1131                        .name = "gcc_aggre_ufs_card_axi_clk",
1132                        .parent_hws = (const struct clk_hw *[]){
1133                                      &gcc_ufs_card_axi_clk_src.clkr.hw },
1134                        .num_parents = 1,
1135                        .flags = CLK_SET_RATE_PARENT,
1136                        .ops = &clk_branch2_ops,
1137                },
1138        },
1139};
1140
1141static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1142        .halt_reg = 0x750c0,
1143        .halt_check = BRANCH_HALT,
1144        .hwcg_reg = 0x750c0,
1145        .hwcg_bit = 1,
1146        .clkr = {
1147                .enable_reg = 0x750c0,
1148                .enable_mask = BIT(1),
1149                .hw.init = &(struct clk_init_data){
1150                        .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1151                        .parent_hws = (const struct clk_hw *[]){
1152                                      &gcc_aggre_ufs_card_axi_clk.clkr.hw },
1153                        .num_parents = 1,
1154                        .flags = CLK_SET_RATE_PARENT,
1155                        .ops = &clk_branch_simple_ops,
1156                },
1157        },
1158};
1159
1160static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1161        .halt_reg = 0x770c0,
1162        .halt_check = BRANCH_HALT,
1163        .hwcg_reg = 0x770c0,
1164        .hwcg_bit = 1,
1165        .clkr = {
1166                .enable_reg = 0x770c0,
1167                .enable_mask = BIT(0),
1168                .hw.init = &(struct clk_init_data){
1169                        .name = "gcc_aggre_ufs_phy_axi_clk",
1170                        .parent_hws = (const struct clk_hw *[]){
1171                                      &gcc_ufs_phy_axi_clk_src.clkr.hw },
1172                        .num_parents = 1,
1173                        .flags = CLK_SET_RATE_PARENT,
1174                        .ops = &clk_branch2_ops,
1175                },
1176        },
1177};
1178
1179static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1180        .halt_reg = 0x770c0,
1181        .halt_check = BRANCH_HALT,
1182        .hwcg_reg = 0x770c0,
1183        .hwcg_bit = 1,
1184        .clkr = {
1185                .enable_reg = 0x770c0,
1186                .enable_mask = BIT(1),
1187                .hw.init = &(struct clk_init_data){
1188                        .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1189                        .parent_hws = (const struct clk_hw *[]){
1190                                      &gcc_aggre_ufs_phy_axi_clk.clkr.hw },
1191                        .num_parents = 1,
1192                        .flags = CLK_SET_RATE_PARENT,
1193                        .ops = &clk_branch_simple_ops,
1194                },
1195        },
1196};
1197
1198static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1199        .halt_reg = 0xf07c,
1200        .halt_check = BRANCH_HALT,
1201        .clkr = {
1202                .enable_reg = 0xf07c,
1203                .enable_mask = BIT(0),
1204                .hw.init = &(struct clk_init_data){
1205                        .name = "gcc_aggre_usb3_prim_axi_clk",
1206                        .parent_hws = (const struct clk_hw *[]){
1207                                      &gcc_usb30_prim_master_clk_src.clkr.hw },
1208                        .num_parents = 1,
1209                        .flags = CLK_SET_RATE_PARENT,
1210                        .ops = &clk_branch2_ops,
1211                },
1212        },
1213};
1214
1215static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1216        .halt_reg = 0x1007c,
1217        .halt_check = BRANCH_HALT,
1218        .clkr = {
1219                .enable_reg = 0x1007c,
1220                .enable_mask = BIT(0),
1221                .hw.init = &(struct clk_init_data){
1222                        .name = "gcc_aggre_usb3_sec_axi_clk",
1223                        .parent_hws = (const struct clk_hw *[]){
1224                                      &gcc_usb30_sec_master_clk_src.clkr.hw },
1225                        .num_parents = 1,
1226                        .flags = CLK_SET_RATE_PARENT,
1227                        .ops = &clk_branch2_ops,
1228                },
1229        },
1230};
1231
1232static struct clk_branch gcc_boot_rom_ahb_clk = {
1233        .halt_reg = 0x38004,
1234        .halt_check = BRANCH_HALT_VOTED,
1235        .hwcg_reg = 0x38004,
1236        .hwcg_bit = 1,
1237        .clkr = {
1238                .enable_reg = 0x52004,
1239                .enable_mask = BIT(10),
1240                .hw.init = &(struct clk_init_data){
1241                        .name = "gcc_boot_rom_ahb_clk",
1242                        .ops = &clk_branch2_ops,
1243                },
1244        },
1245};
1246
1247/*
1248 * Clock ON depends on external parent 'config noc', so cant poll
1249 * delay and also mark as crtitical for camss boot
1250 */
1251static struct clk_branch gcc_camera_ahb_clk = {
1252        .halt_reg = 0xb008,
1253        .halt_check = BRANCH_HALT_DELAY,
1254        .hwcg_reg = 0xb008,
1255        .hwcg_bit = 1,
1256        .clkr = {
1257                .enable_reg = 0xb008,
1258                .enable_mask = BIT(0),
1259                .hw.init = &(struct clk_init_data){
1260                        .name = "gcc_camera_ahb_clk",
1261                        .flags = CLK_IS_CRITICAL,
1262                        .ops = &clk_branch2_ops,
1263                },
1264        },
1265};
1266
1267static struct clk_branch gcc_camera_hf_axi_clk = {
1268        .halt_reg = 0xb030,
1269        .halt_check = BRANCH_HALT,
1270        .clkr = {
1271                .enable_reg = 0xb030,
1272                .enable_mask = BIT(0),
1273                .hw.init = &(struct clk_init_data){
1274                        .name = "gcc_camera_hf_axi_clk",
1275                        .ops = &clk_branch2_ops,
1276                },
1277        },
1278};
1279
1280static struct clk_branch gcc_camera_sf_axi_clk = {
1281        .halt_reg = 0xb034,
1282        .halt_check = BRANCH_HALT,
1283        .clkr = {
1284                .enable_reg = 0xb034,
1285                .enable_mask = BIT(0),
1286                .hw.init = &(struct clk_init_data){
1287                        .name = "gcc_camera_sf_axi_clk",
1288                        .ops = &clk_branch2_ops,
1289                },
1290        },
1291};
1292
1293/* XO critical input to camss, so no need to poll */
1294static struct clk_branch gcc_camera_xo_clk = {
1295        .halt_reg = 0xb044,
1296        .halt_check = BRANCH_HALT_DELAY,
1297        .clkr = {
1298                .enable_reg = 0xb044,
1299                .enable_mask = BIT(0),
1300                .hw.init = &(struct clk_init_data){
1301                        .name = "gcc_camera_xo_clk",
1302                        .flags = CLK_IS_CRITICAL,
1303                        .ops = &clk_branch2_ops,
1304                },
1305        },
1306};
1307
1308static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1309        .halt_reg = 0xf078,
1310        .halt_check = BRANCH_HALT,
1311        .clkr = {
1312                .enable_reg = 0xf078,
1313                .enable_mask = BIT(0),
1314                .hw.init = &(struct clk_init_data){
1315                        .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1316                        .parent_hws = (const struct clk_hw *[]){
1317                                      &gcc_usb30_prim_master_clk_src.clkr.hw },
1318                        .num_parents = 1,
1319                        .flags = CLK_SET_RATE_PARENT,
1320                        .ops = &clk_branch2_ops,
1321                },
1322        },
1323};
1324
1325static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1326        .halt_reg = 0x10078,
1327        .halt_check = BRANCH_HALT,
1328        .clkr = {
1329                .enable_reg = 0x10078,
1330                .enable_mask = BIT(0),
1331                .hw.init = &(struct clk_init_data){
1332                        .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1333                        .parent_hws = (const struct clk_hw *[]){
1334                                      &gcc_usb30_sec_master_clk_src.clkr.hw },
1335                        .num_parents = 1,
1336                        .flags = CLK_SET_RATE_PARENT,
1337                        .ops = &clk_branch2_ops,
1338                },
1339        },
1340};
1341
1342static struct clk_branch gcc_cpuss_ahb_clk = {
1343        .halt_reg = 0x48000,
1344        .halt_check = BRANCH_HALT_VOTED,
1345        .clkr = {
1346                .enable_reg = 0x52004,
1347                .enable_mask = BIT(21),
1348                .hw.init = &(struct clk_init_data){
1349                        .name = "gcc_cpuss_ahb_clk",
1350                        .parent_hws = (const struct clk_hw *[]){
1351                                      &gcc_cpuss_ahb_clk_src.clkr.hw },
1352                        .num_parents = 1,
1353                         /* required for cpuss */
1354                        .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1355                        .ops = &clk_branch2_ops,
1356                },
1357        },
1358};
1359
1360static struct clk_branch gcc_cpuss_dvm_bus_clk = {
1361        .halt_reg = 0x48190,
1362        .halt_check = BRANCH_HALT,
1363        .clkr = {
1364                .enable_reg = 0x48190,
1365                .enable_mask = BIT(0),
1366                .hw.init = &(struct clk_init_data){
1367                        .name = "gcc_cpuss_dvm_bus_clk",
1368                         /* required for cpuss */
1369                        .flags = CLK_IS_CRITICAL,
1370                        .ops = &clk_branch2_ops,
1371                },
1372        },
1373};
1374
1375static struct clk_branch gcc_cpuss_gnoc_clk = {
1376        .halt_reg = 0x48004,
1377        .halt_check = BRANCH_HALT_VOTED,
1378        .hwcg_reg = 0x48004,
1379        .hwcg_bit = 1,
1380        .clkr = {
1381                .enable_reg = 0x52004,
1382                .enable_mask = BIT(22),
1383                .hw.init = &(struct clk_init_data){
1384                        .name = "gcc_cpuss_gnoc_clk",
1385                         /* required for cpuss */
1386                        .flags = CLK_IS_CRITICAL,
1387                        .ops = &clk_branch2_ops,
1388                },
1389        },
1390};
1391
1392static struct clk_branch gcc_cpuss_rbcpr_clk = {
1393        .halt_reg = 0x48008,
1394        .halt_check = BRANCH_HALT,
1395        .clkr = {
1396                .enable_reg = 0x48008,
1397                .enable_mask = BIT(0),
1398                .hw.init = &(struct clk_init_data){
1399                        .name = "gcc_cpuss_rbcpr_clk",
1400                        .ops = &clk_branch2_ops,
1401                },
1402        },
1403};
1404
1405static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1406        .halt_reg = 0x71154,
1407        .halt_check = BRANCH_VOTED,
1408        .clkr = {
1409                .enable_reg = 0x71154,
1410                .enable_mask = BIT(0),
1411                .hw.init = &(struct clk_init_data){
1412                        .name = "gcc_ddrss_gpu_axi_clk",
1413                        .ops = &clk_branch2_ops,
1414                },
1415        },
1416};
1417
1418/*
1419 * Clock ON depends on external parent 'config noc', so cant poll
1420 * delay and also mark as crtitical for disp boot
1421 */
1422static struct clk_branch gcc_disp_ahb_clk = {
1423        .halt_reg = 0xb00c,
1424        .halt_check = BRANCH_HALT_DELAY,
1425        .hwcg_reg = 0xb00c,
1426        .hwcg_bit = 1,
1427        .clkr = {
1428                .enable_reg = 0xb00c,
1429                .enable_mask = BIT(0),
1430                .hw.init = &(struct clk_init_data){
1431                        .name = "gcc_disp_ahb_clk",
1432                        .flags = CLK_IS_CRITICAL,
1433                        .ops = &clk_branch2_ops,
1434                },
1435        },
1436};
1437
1438static struct clk_branch gcc_disp_hf_axi_clk = {
1439        .halt_reg = 0xb038,
1440        .halt_check = BRANCH_HALT,
1441        .clkr = {
1442                .enable_reg = 0xb038,
1443                .enable_mask = BIT(0),
1444                .hw.init = &(struct clk_init_data){
1445                        .name = "gcc_disp_hf_axi_clk",
1446                        .ops = &clk_branch2_ops,
1447                },
1448        },
1449};
1450
1451static struct clk_branch gcc_disp_sf_axi_clk = {
1452        .halt_reg = 0xb03c,
1453        .halt_check = BRANCH_HALT,
1454        .clkr = {
1455                .enable_reg = 0xb03c,
1456                .enable_mask = BIT(0),
1457                .hw.init = &(struct clk_init_data){
1458                        .name = "gcc_disp_sf_axi_clk",
1459                        .ops = &clk_branch2_ops,
1460                },
1461        },
1462};
1463
1464/* XO critical input to disp, so no need to poll */
1465static struct clk_branch gcc_disp_xo_clk = {
1466        .halt_reg = 0xb048,
1467        .halt_check = BRANCH_HALT_DELAY,
1468        .clkr = {
1469                .enable_reg = 0xb048,
1470                .enable_mask = BIT(0),
1471                .hw.init = &(struct clk_init_data){
1472                        .name = "gcc_disp_xo_clk",
1473                        .flags = CLK_IS_CRITICAL,
1474                        .ops = &clk_branch2_ops,
1475                },
1476        },
1477};
1478
1479static struct clk_branch gcc_emac_axi_clk = {
1480        .halt_reg = 0x6010,
1481        .halt_check = BRANCH_HALT,
1482        .clkr = {
1483                .enable_reg = 0x6010,
1484                .enable_mask = BIT(0),
1485                .hw.init = &(struct clk_init_data){
1486                        .name = "gcc_emac_axi_clk",
1487                        .ops = &clk_branch2_ops,
1488                },
1489        },
1490};
1491
1492static struct clk_branch gcc_emac_ptp_clk = {
1493        .halt_reg = 0x6034,
1494        .halt_check = BRANCH_HALT,
1495        .clkr = {
1496                .enable_reg = 0x6034,
1497                .enable_mask = BIT(0),
1498                .hw.init = &(struct clk_init_data){
1499                        .name = "gcc_emac_ptp_clk",
1500                        .parent_hws = (const struct clk_hw *[]){
1501                                      &gcc_emac_ptp_clk_src.clkr.hw },
1502                        .num_parents = 1,
1503                        .flags = CLK_SET_RATE_PARENT,
1504                        .ops = &clk_branch2_ops,
1505                },
1506        },
1507};
1508
1509static struct clk_branch gcc_emac_rgmii_clk = {
1510        .halt_reg = 0x6018,
1511        .halt_check = BRANCH_HALT,
1512        .clkr = {
1513                .enable_reg = 0x6018,
1514                .enable_mask = BIT(0),
1515                .hw.init = &(struct clk_init_data){
1516                        .name = "gcc_emac_rgmii_clk",
1517                        .parent_hws = (const struct clk_hw *[]){
1518                                      &gcc_emac_rgmii_clk_src.clkr.hw },
1519                        .num_parents = 1,
1520                        .flags = CLK_SET_RATE_PARENT,
1521                        .ops = &clk_branch2_ops,
1522                },
1523        },
1524};
1525
1526static struct clk_branch gcc_emac_slv_ahb_clk = {
1527        .halt_reg = 0x6014,
1528        .halt_check = BRANCH_HALT,
1529        .hwcg_reg = 0x6014,
1530        .hwcg_bit = 1,
1531        .clkr = {
1532                .enable_reg = 0x6014,
1533                .enable_mask = BIT(0),
1534                .hw.init = &(struct clk_init_data){
1535                        .name = "gcc_emac_slv_ahb_clk",
1536                        .ops = &clk_branch2_ops,
1537                },
1538        },
1539};
1540
1541static struct clk_branch gcc_gp1_clk = {
1542        .halt_reg = 0x64000,
1543        .halt_check = BRANCH_HALT,
1544        .clkr = {
1545                .enable_reg = 0x64000,
1546                .enable_mask = BIT(0),
1547                .hw.init = &(struct clk_init_data){
1548                        .name = "gcc_gp1_clk",
1549                        .parent_hws = (const struct clk_hw *[]){
1550                                      &gcc_gp1_clk_src.clkr.hw },
1551                        .num_parents = 1,
1552                        .flags = CLK_SET_RATE_PARENT,
1553                        .ops = &clk_branch2_ops,
1554                },
1555        },
1556};
1557
1558static struct clk_branch gcc_gp2_clk = {
1559        .halt_reg = 0x65000,
1560        .halt_check = BRANCH_HALT,
1561        .clkr = {
1562                .enable_reg = 0x65000,
1563                .enable_mask = BIT(0),
1564                .hw.init = &(struct clk_init_data){
1565                        .name = "gcc_gp2_clk",
1566                        .parent_hws = (const struct clk_hw *[]){
1567                                      &gcc_gp2_clk_src.clkr.hw },
1568                        .num_parents = 1,
1569                        .flags = CLK_SET_RATE_PARENT,
1570                        .ops = &clk_branch2_ops,
1571                },
1572        },
1573};
1574
1575static struct clk_branch gcc_gp3_clk = {
1576        .halt_reg = 0x66000,
1577        .halt_check = BRANCH_HALT,
1578        .clkr = {
1579                .enable_reg = 0x66000,
1580                .enable_mask = BIT(0),
1581                .hw.init = &(struct clk_init_data){
1582                        .name = "gcc_gp3_clk",
1583                        .parent_hws = (const struct clk_hw *[]){
1584                                      &gcc_gp3_clk_src.clkr.hw },
1585                        .num_parents = 1,
1586                        .flags = CLK_SET_RATE_PARENT,
1587                        .ops = &clk_branch2_ops,
1588                },
1589        },
1590};
1591
1592static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1593        .halt_reg = 0x71004,
1594        .halt_check = BRANCH_HALT,
1595        .hwcg_reg = 0x71004,
1596        .hwcg_bit = 1,
1597        .clkr = {
1598                .enable_reg = 0x71004,
1599                .enable_mask = BIT(0),
1600                .hw.init = &(struct clk_init_data){
1601                        .name = "gcc_gpu_cfg_ahb_clk",
1602                         /* required for gpu */
1603                        .flags = CLK_IS_CRITICAL,
1604                        .ops = &clk_branch2_ops,
1605                },
1606        },
1607};
1608
1609static struct clk_branch gcc_gpu_gpll0_clk_src = {
1610        .halt_check = BRANCH_HALT_SKIP,
1611        .clkr = {
1612                .enable_reg = 0x52004,
1613                .enable_mask = BIT(15),
1614                .hw.init = &(struct clk_init_data){
1615                        .name = "gcc_gpu_gpll0_clk_src",
1616                        .parent_hws = (const struct clk_hw *[]){
1617                                &gpll0.clkr.hw },
1618                        .num_parents = 1,
1619                        .flags = CLK_SET_RATE_PARENT,
1620                        .ops = &clk_branch2_ops,
1621                },
1622        },
1623};
1624
1625static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1626        .halt_check = BRANCH_HALT_SKIP,
1627        .clkr = {
1628                .enable_reg = 0x52004,
1629                .enable_mask = BIT(16),
1630                .hw.init = &(struct clk_init_data){
1631                        .name = "gcc_gpu_gpll0_div_clk_src",
1632                        .parent_hws = (const struct clk_hw *[]){
1633                                &gpll0_out_even.clkr.hw },
1634                        .num_parents = 1,
1635                        .flags = CLK_SET_RATE_PARENT,
1636                        .ops = &clk_branch2_ops,
1637                },
1638        },
1639};
1640
1641static struct clk_branch gcc_gpu_iref_clk = {
1642        .halt_reg = 0x8c010,
1643        .halt_check = BRANCH_HALT,
1644        .clkr = {
1645                .enable_reg = 0x8c010,
1646                .enable_mask = BIT(0),
1647                .hw.init = &(struct clk_init_data){
1648                        .name = "gcc_gpu_iref_clk",
1649                        .ops = &clk_branch2_ops,
1650                },
1651        },
1652};
1653
1654static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1655        .halt_reg = 0x7100c,
1656        .halt_check = BRANCH_VOTED,
1657        .clkr = {
1658                .enable_reg = 0x7100c,
1659                .enable_mask = BIT(0),
1660                .hw.init = &(struct clk_init_data){
1661                        .name = "gcc_gpu_memnoc_gfx_clk",
1662                        .ops = &clk_branch2_ops,
1663                },
1664        },
1665};
1666
1667static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1668        .halt_reg = 0x71018,
1669        .halt_check = BRANCH_HALT,
1670        .clkr = {
1671                .enable_reg = 0x71018,
1672                .enable_mask = BIT(0),
1673                .hw.init = &(struct clk_init_data){
1674                        .name = "gcc_gpu_snoc_dvm_gfx_clk",
1675                        .ops = &clk_branch2_ops,
1676                },
1677        },
1678};
1679
1680static struct clk_branch gcc_npu_at_clk = {
1681        .halt_reg = 0x4d010,
1682        .halt_check = BRANCH_VOTED,
1683        .clkr = {
1684                .enable_reg = 0x4d010,
1685                .enable_mask = BIT(0),
1686                .hw.init = &(struct clk_init_data){
1687                        .name = "gcc_npu_at_clk",
1688                        .ops = &clk_branch2_ops,
1689                },
1690        },
1691};
1692
1693static struct clk_branch gcc_npu_axi_clk = {
1694        .halt_reg = 0x4d008,
1695        .halt_check = BRANCH_VOTED,
1696        .clkr = {
1697                .enable_reg = 0x4d008,
1698                .enable_mask = BIT(0),
1699                .hw.init = &(struct clk_init_data){
1700                        .name = "gcc_npu_axi_clk",
1701                        .ops = &clk_branch2_ops,
1702                },
1703        },
1704};
1705
1706static struct clk_branch gcc_npu_cfg_ahb_clk = {
1707        .halt_reg = 0x4d004,
1708        .halt_check = BRANCH_HALT,
1709        .hwcg_reg = 0x4d004,
1710        .hwcg_bit = 1,
1711        .clkr = {
1712                .enable_reg = 0x4d004,
1713                .enable_mask = BIT(0),
1714                .hw.init = &(struct clk_init_data){
1715                        .name = "gcc_npu_cfg_ahb_clk",
1716                         /* required for npu */
1717                        .flags = CLK_IS_CRITICAL,
1718                        .ops = &clk_branch2_ops,
1719                },
1720        },
1721};
1722
1723static struct clk_branch gcc_npu_gpll0_clk_src = {
1724        .halt_check = BRANCH_HALT_SKIP,
1725        .clkr = {
1726                .enable_reg = 0x52004,
1727                .enable_mask = BIT(18),
1728                .hw.init = &(struct clk_init_data){
1729                        .name = "gcc_npu_gpll0_clk_src",
1730                        .parent_hws = (const struct clk_hw *[]){
1731                                &gpll0.clkr.hw },
1732                        .num_parents = 1,
1733                        .flags = CLK_SET_RATE_PARENT,
1734                        .ops = &clk_branch2_ops,
1735                },
1736        },
1737};
1738
1739static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1740        .halt_check = BRANCH_HALT_SKIP,
1741        .clkr = {
1742                .enable_reg = 0x52004,
1743                .enable_mask = BIT(19),
1744                .hw.init = &(struct clk_init_data){
1745                        .name = "gcc_npu_gpll0_div_clk_src",
1746                        .parent_hws = (const struct clk_hw *[]){
1747                                &gpll0_out_even.clkr.hw },
1748                        .num_parents = 1,
1749                        .flags = CLK_SET_RATE_PARENT,
1750                        .ops = &clk_branch2_ops,
1751                },
1752        },
1753};
1754
1755static struct clk_branch gcc_npu_trig_clk = {
1756        .halt_reg = 0x4d00c,
1757        .halt_check = BRANCH_VOTED,
1758        .clkr = {
1759                .enable_reg = 0x4d00c,
1760                .enable_mask = BIT(0),
1761                .hw.init = &(struct clk_init_data){
1762                        .name = "gcc_npu_trig_clk",
1763                        .ops = &clk_branch2_ops,
1764                },
1765        },
1766};
1767
1768static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1769        .halt_reg = 0x6f02c,
1770        .halt_check = BRANCH_HALT,
1771        .clkr = {
1772                .enable_reg = 0x6f02c,
1773                .enable_mask = BIT(0),
1774                .hw.init = &(struct clk_init_data){
1775                        .name = "gcc_pcie0_phy_refgen_clk",
1776                        .parent_hws = (const struct clk_hw *[]){
1777                                      &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1778                        .num_parents = 1,
1779                        .flags = CLK_SET_RATE_PARENT,
1780                        .ops = &clk_branch2_ops,
1781                },
1782        },
1783};
1784
1785static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1786        .halt_reg = 0x6f030,
1787        .halt_check = BRANCH_HALT,
1788        .clkr = {
1789                .enable_reg = 0x6f030,
1790                .enable_mask = BIT(0),
1791                .hw.init = &(struct clk_init_data){
1792                        .name = "gcc_pcie1_phy_refgen_clk",
1793                        .parent_hws = (const struct clk_hw *[]){
1794                                      &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1795                        .num_parents = 1,
1796                        .flags = CLK_SET_RATE_PARENT,
1797                        .ops = &clk_branch2_ops,
1798                },
1799        },
1800};
1801
1802static struct clk_branch gcc_pcie_0_aux_clk = {
1803        .halt_reg = 0x6b020,
1804        .halt_check = BRANCH_HALT_VOTED,
1805        .clkr = {
1806                .enable_reg = 0x5200c,
1807                .enable_mask = BIT(3),
1808                .hw.init = &(struct clk_init_data){
1809                        .name = "gcc_pcie_0_aux_clk",
1810                        .parent_hws = (const struct clk_hw *[]){
1811                                      &gcc_pcie_0_aux_clk_src.clkr.hw },
1812                        .num_parents = 1,
1813                        .flags = CLK_SET_RATE_PARENT,
1814                        .ops = &clk_branch2_ops,
1815                },
1816        },
1817};
1818
1819static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1820        .halt_reg = 0x6b01c,
1821        .halt_check = BRANCH_HALT_VOTED,
1822        .hwcg_reg = 0x6b01c,
1823        .hwcg_bit = 1,
1824        .clkr = {
1825                .enable_reg = 0x5200c,
1826                .enable_mask = BIT(2),
1827                .hw.init = &(struct clk_init_data){
1828                        .name = "gcc_pcie_0_cfg_ahb_clk",
1829                        .ops = &clk_branch2_ops,
1830                },
1831        },
1832};
1833
1834static struct clk_branch gcc_pcie_0_clkref_clk = {
1835        .halt_reg = 0x8c00c,
1836        .halt_check = BRANCH_HALT,
1837        .clkr = {
1838                .enable_reg = 0x8c00c,
1839                .enable_mask = BIT(0),
1840                .hw.init = &(struct clk_init_data){
1841                        .name = "gcc_pcie_0_clkref_clk",
1842                        .ops = &clk_branch2_ops,
1843                },
1844        },
1845};
1846
1847static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1848        .halt_reg = 0x6b018,
1849        .halt_check = BRANCH_HALT_VOTED,
1850        .clkr = {
1851                .enable_reg = 0x5200c,
1852                .enable_mask = BIT(1),
1853                .hw.init = &(struct clk_init_data){
1854                        .name = "gcc_pcie_0_mstr_axi_clk",
1855                        .ops = &clk_branch2_ops,
1856                },
1857        },
1858};
1859
1860/* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1861static struct clk_branch gcc_pcie_0_pipe_clk = {
1862        .halt_reg = 0x6b024,
1863        .halt_check = BRANCH_HALT_DELAY,
1864        .clkr = {
1865                .enable_reg = 0x5200c,
1866                .enable_mask = BIT(4),
1867                .hw.init = &(struct clk_init_data){
1868                        .name = "gcc_pcie_0_pipe_clk",
1869                        .ops = &clk_branch2_ops,
1870                },
1871        },
1872};
1873
1874static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1875        .halt_reg = 0x6b014,
1876        .halt_check = BRANCH_HALT_VOTED,
1877        .hwcg_reg = 0x6b014,
1878        .hwcg_bit = 1,
1879        .clkr = {
1880                .enable_reg = 0x5200c,
1881                .enable_mask = BIT(0),
1882                .hw.init = &(struct clk_init_data){
1883                        .name = "gcc_pcie_0_slv_axi_clk",
1884                        .ops = &clk_branch2_ops,
1885                },
1886        },
1887};
1888
1889static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1890        .halt_reg = 0x6b010,
1891        .halt_check = BRANCH_HALT_VOTED,
1892        .clkr = {
1893                .enable_reg = 0x5200c,
1894                .enable_mask = BIT(5),
1895                .hw.init = &(struct clk_init_data){
1896                        .name = "gcc_pcie_0_slv_q2a_axi_clk",
1897                        .ops = &clk_branch2_ops,
1898                },
1899        },
1900};
1901
1902static struct clk_branch gcc_pcie_1_aux_clk = {
1903        .halt_reg = 0x8d020,
1904        .halt_check = BRANCH_HALT_VOTED,
1905        .clkr = {
1906                .enable_reg = 0x52004,
1907                .enable_mask = BIT(29),
1908                .hw.init = &(struct clk_init_data){
1909                        .name = "gcc_pcie_1_aux_clk",
1910                        .parent_hws = (const struct clk_hw *[]){
1911                                      &gcc_pcie_1_aux_clk_src.clkr.hw },
1912                        .num_parents = 1,
1913                        .flags = CLK_SET_RATE_PARENT,
1914                        .ops = &clk_branch2_ops,
1915                },
1916        },
1917};
1918
1919static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1920        .halt_reg = 0x8d01c,
1921        .halt_check = BRANCH_HALT_VOTED,
1922        .hwcg_reg = 0x8d01c,
1923        .hwcg_bit = 1,
1924        .clkr = {
1925                .enable_reg = 0x52004,
1926                .enable_mask = BIT(28),
1927                .hw.init = &(struct clk_init_data){
1928                        .name = "gcc_pcie_1_cfg_ahb_clk",
1929                        .ops = &clk_branch2_ops,
1930                },
1931        },
1932};
1933
1934static struct clk_branch gcc_pcie_1_clkref_clk = {
1935        .halt_reg = 0x8c02c,
1936        .halt_check = BRANCH_HALT,
1937        .clkr = {
1938                .enable_reg = 0x8c02c,
1939                .enable_mask = BIT(0),
1940                .hw.init = &(struct clk_init_data){
1941                        .name = "gcc_pcie_1_clkref_clk",
1942                        .ops = &clk_branch2_ops,
1943                },
1944        },
1945};
1946
1947static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1948        .halt_reg = 0x8d018,
1949        .halt_check = BRANCH_HALT_VOTED,
1950        .clkr = {
1951                .enable_reg = 0x52004,
1952                .enable_mask = BIT(27),
1953                .hw.init = &(struct clk_init_data){
1954                        .name = "gcc_pcie_1_mstr_axi_clk",
1955                        .ops = &clk_branch2_ops,
1956                },
1957        },
1958};
1959
1960/* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1961static struct clk_branch gcc_pcie_1_pipe_clk = {
1962        .halt_reg = 0x8d024,
1963        .halt_check = BRANCH_HALT_DELAY,
1964        .clkr = {
1965                .enable_reg = 0x52004,
1966                .enable_mask = BIT(30),
1967                .hw.init = &(struct clk_init_data){
1968                        .name = "gcc_pcie_1_pipe_clk",
1969                        .ops = &clk_branch2_ops,
1970                },
1971        },
1972};
1973
1974static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1975        .halt_reg = 0x8d014,
1976        .halt_check = BRANCH_HALT_VOTED,
1977        .hwcg_reg = 0x8d014,
1978        .hwcg_bit = 1,
1979        .clkr = {
1980                .enable_reg = 0x52004,
1981                .enable_mask = BIT(26),
1982                .hw.init = &(struct clk_init_data){
1983                        .name = "gcc_pcie_1_slv_axi_clk",
1984                        .ops = &clk_branch2_ops,
1985                },
1986        },
1987};
1988
1989static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1990        .halt_reg = 0x8d010,
1991        .halt_check = BRANCH_HALT_VOTED,
1992        .clkr = {
1993                .enable_reg = 0x52004,
1994                .enable_mask = BIT(25),
1995                .hw.init = &(struct clk_init_data){
1996                        .name = "gcc_pcie_1_slv_q2a_axi_clk",
1997                        .ops = &clk_branch2_ops,
1998                },
1999        },
2000};
2001
2002static struct clk_branch gcc_pcie_phy_aux_clk = {
2003        .halt_reg = 0x6f004,
2004        .halt_check = BRANCH_HALT,
2005        .clkr = {
2006                .enable_reg = 0x6f004,
2007                .enable_mask = BIT(0),
2008                .hw.init = &(struct clk_init_data){
2009                        .name = "gcc_pcie_phy_aux_clk",
2010                        .parent_hws = (const struct clk_hw *[]){
2011                                      &gcc_pcie_0_aux_clk_src.clkr.hw },
2012                        .num_parents = 1,
2013                        .flags = CLK_SET_RATE_PARENT,
2014                        .ops = &clk_branch2_ops,
2015                },
2016        },
2017};
2018
2019static struct clk_branch gcc_pdm2_clk = {
2020        .halt_reg = 0x3300c,
2021        .halt_check = BRANCH_HALT,
2022        .clkr = {
2023                .enable_reg = 0x3300c,
2024                .enable_mask = BIT(0),
2025                .hw.init = &(struct clk_init_data){
2026                        .name = "gcc_pdm2_clk",
2027                        .parent_hws = (const struct clk_hw *[]){
2028                                      &gcc_pdm2_clk_src.clkr.hw },
2029                        .num_parents = 1,
2030                        .flags = CLK_SET_RATE_PARENT,
2031                        .ops = &clk_branch2_ops,
2032                },
2033        },
2034};
2035
2036static struct clk_branch gcc_pdm_ahb_clk = {
2037        .halt_reg = 0x33004,
2038        .halt_check = BRANCH_HALT,
2039        .hwcg_reg = 0x33004,
2040        .hwcg_bit = 1,
2041        .clkr = {
2042                .enable_reg = 0x33004,
2043                .enable_mask = BIT(0),
2044                .hw.init = &(struct clk_init_data){
2045                        .name = "gcc_pdm_ahb_clk",
2046                        .ops = &clk_branch2_ops,
2047                },
2048        },
2049};
2050
2051static struct clk_branch gcc_pdm_xo4_clk = {
2052        .halt_reg = 0x33008,
2053        .halt_check = BRANCH_HALT,
2054        .clkr = {
2055                .enable_reg = 0x33008,
2056                .enable_mask = BIT(0),
2057                .hw.init = &(struct clk_init_data){
2058                        .name = "gcc_pdm_xo4_clk",
2059                        .ops = &clk_branch2_ops,
2060                },
2061        },
2062};
2063
2064static struct clk_branch gcc_prng_ahb_clk = {
2065        .halt_reg = 0x34004,
2066        .halt_check = BRANCH_HALT_VOTED,
2067        .clkr = {
2068                .enable_reg = 0x52004,
2069                .enable_mask = BIT(13),
2070                .hw.init = &(struct clk_init_data){
2071                        .name = "gcc_prng_ahb_clk",
2072                        .ops = &clk_branch2_ops,
2073                },
2074        },
2075};
2076
2077static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2078        .halt_reg = 0xb018,
2079        .halt_check = BRANCH_HALT,
2080        .hwcg_reg = 0xb018,
2081        .hwcg_bit = 1,
2082        .clkr = {
2083                .enable_reg = 0xb018,
2084                .enable_mask = BIT(0),
2085                .hw.init = &(struct clk_init_data){
2086                        .name = "gcc_qmip_camera_nrt_ahb_clk",
2087                        .ops = &clk_branch2_ops,
2088                },
2089        },
2090};
2091
2092static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2093        .halt_reg = 0xb01c,
2094        .halt_check = BRANCH_HALT,
2095        .hwcg_reg = 0xb01c,
2096        .hwcg_bit = 1,
2097        .clkr = {
2098                .enable_reg = 0xb01c,
2099                .enable_mask = BIT(0),
2100                .hw.init = &(struct clk_init_data){
2101                        .name = "gcc_qmip_camera_rt_ahb_clk",
2102                        .ops = &clk_branch2_ops,
2103                },
2104        },
2105};
2106
2107static struct clk_branch gcc_qmip_disp_ahb_clk = {
2108        .halt_reg = 0xb020,
2109        .halt_check = BRANCH_HALT,
2110        .hwcg_reg = 0xb020,
2111        .hwcg_bit = 1,
2112        .clkr = {
2113                .enable_reg = 0xb020,
2114                .enable_mask = BIT(0),
2115                .hw.init = &(struct clk_init_data){
2116                        .name = "gcc_qmip_disp_ahb_clk",
2117                        .ops = &clk_branch2_ops,
2118                },
2119        },
2120};
2121
2122static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2123        .halt_reg = 0xb010,
2124        .halt_check = BRANCH_HALT,
2125        .hwcg_reg = 0xb010,
2126        .hwcg_bit = 1,
2127        .clkr = {
2128                .enable_reg = 0xb010,
2129                .enable_mask = BIT(0),
2130                .hw.init = &(struct clk_init_data){
2131                        .name = "gcc_qmip_video_cvp_ahb_clk",
2132                        .ops = &clk_branch2_ops,
2133                },
2134        },
2135};
2136
2137static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2138        .halt_reg = 0xb014,
2139        .halt_check = BRANCH_HALT,
2140        .hwcg_reg = 0xb014,
2141        .hwcg_bit = 1,
2142        .clkr = {
2143                .enable_reg = 0xb014,
2144                .enable_mask = BIT(0),
2145                .hw.init = &(struct clk_init_data){
2146                        .name = "gcc_qmip_video_vcodec_ahb_clk",
2147                        .ops = &clk_branch2_ops,
2148                },
2149        },
2150};
2151
2152static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2153        .halt_reg = 0x4b000,
2154        .halt_check = BRANCH_HALT,
2155        .clkr = {
2156                .enable_reg = 0x4b000,
2157                .enable_mask = BIT(0),
2158                .hw.init = &(struct clk_init_data){
2159                        .name = "gcc_qspi_cnoc_periph_ahb_clk",
2160                        .ops = &clk_branch2_ops,
2161                },
2162        },
2163};
2164
2165static struct clk_branch gcc_qspi_core_clk = {
2166        .halt_reg = 0x4b004,
2167        .halt_check = BRANCH_HALT,
2168        .clkr = {
2169                .enable_reg = 0x4b004,
2170                .enable_mask = BIT(0),
2171                .hw.init = &(struct clk_init_data){
2172                        .name = "gcc_qspi_core_clk",
2173                        .parent_hws = (const struct clk_hw *[]){
2174                                      &gcc_qspi_core_clk_src.clkr.hw },
2175                        .num_parents = 1,
2176                        .flags = CLK_SET_RATE_PARENT,
2177                        .ops = &clk_branch2_ops,
2178                },
2179        },
2180};
2181
2182static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2183        .halt_reg = 0x17144,
2184        .halt_check = BRANCH_HALT_VOTED,
2185        .clkr = {
2186                .enable_reg = 0x5200c,
2187                .enable_mask = BIT(10),
2188                .hw.init = &(struct clk_init_data){
2189                        .name = "gcc_qupv3_wrap0_s0_clk",
2190                        .parent_hws = (const struct clk_hw *[]){
2191                                      &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
2192                        .num_parents = 1,
2193                        .flags = CLK_SET_RATE_PARENT,
2194                        .ops = &clk_branch2_ops,
2195                },
2196        },
2197};
2198
2199static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2200        .halt_reg = 0x17274,
2201        .halt_check = BRANCH_HALT_VOTED,
2202        .clkr = {
2203                .enable_reg = 0x5200c,
2204                .enable_mask = BIT(11),
2205                .hw.init = &(struct clk_init_data){
2206                        .name = "gcc_qupv3_wrap0_s1_clk",
2207                        .parent_hws = (const struct clk_hw *[]){
2208                                      &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
2209                        .num_parents = 1,
2210                        .flags = CLK_SET_RATE_PARENT,
2211                        .ops = &clk_branch2_ops,
2212                },
2213        },
2214};
2215
2216static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2217        .halt_reg = 0x173a4,
2218        .halt_check = BRANCH_HALT_VOTED,
2219        .clkr = {
2220                .enable_reg = 0x5200c,
2221                .enable_mask = BIT(12),
2222                .hw.init = &(struct clk_init_data){
2223                        .name = "gcc_qupv3_wrap0_s2_clk",
2224                        .parent_hws = (const struct clk_hw *[]){
2225                                      &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
2226                        .num_parents = 1,
2227                        .flags = CLK_SET_RATE_PARENT,
2228                        .ops = &clk_branch2_ops,
2229                },
2230        },
2231};
2232
2233static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2234        .halt_reg = 0x174d4,
2235        .halt_check = BRANCH_HALT_VOTED,
2236        .clkr = {
2237                .enable_reg = 0x5200c,
2238                .enable_mask = BIT(13),
2239                .hw.init = &(struct clk_init_data){
2240                        .name = "gcc_qupv3_wrap0_s3_clk",
2241                        .parent_hws = (const struct clk_hw *[]){
2242                                      &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
2243                        .num_parents = 1,
2244                        .flags = CLK_SET_RATE_PARENT,
2245                        .ops = &clk_branch2_ops,
2246                },
2247        },
2248};
2249
2250static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2251        .halt_reg = 0x17604,
2252        .halt_check = BRANCH_HALT_VOTED,
2253        .clkr = {
2254                .enable_reg = 0x5200c,
2255                .enable_mask = BIT(14),
2256                .hw.init = &(struct clk_init_data){
2257                        .name = "gcc_qupv3_wrap0_s4_clk",
2258                        .parent_hws = (const struct clk_hw *[]){
2259                                      &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
2260                        .num_parents = 1,
2261                        .flags = CLK_SET_RATE_PARENT,
2262                        .ops = &clk_branch2_ops,
2263                },
2264        },
2265};
2266
2267static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2268        .halt_reg = 0x17734,
2269        .halt_check = BRANCH_HALT_VOTED,
2270        .clkr = {
2271                .enable_reg = 0x5200c,
2272                .enable_mask = BIT(15),
2273                .hw.init = &(struct clk_init_data){
2274                        .name = "gcc_qupv3_wrap0_s5_clk",
2275                        .parent_hws = (const struct clk_hw *[]){
2276                                      &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
2277                        .num_parents = 1,
2278                        .flags = CLK_SET_RATE_PARENT,
2279                        .ops = &clk_branch2_ops,
2280                },
2281        },
2282};
2283
2284static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2285        .halt_reg = 0x17864,
2286        .halt_check = BRANCH_HALT_VOTED,
2287        .clkr = {
2288                .enable_reg = 0x5200c,
2289                .enable_mask = BIT(16),
2290                .hw.init = &(struct clk_init_data){
2291                        .name = "gcc_qupv3_wrap0_s6_clk",
2292                        .parent_hws = (const struct clk_hw *[]){
2293                                      &gcc_qupv3_wrap0_s6_clk_src.clkr.hw },
2294                        .num_parents = 1,
2295                        .flags = CLK_SET_RATE_PARENT,
2296                        .ops = &clk_branch2_ops,
2297                },
2298        },
2299};
2300
2301static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2302        .halt_reg = 0x17994,
2303        .halt_check = BRANCH_HALT_VOTED,
2304        .clkr = {
2305                .enable_reg = 0x5200c,
2306                .enable_mask = BIT(17),
2307                .hw.init = &(struct clk_init_data){
2308                        .name = "gcc_qupv3_wrap0_s7_clk",
2309                        .parent_hws = (const struct clk_hw *[]){
2310                                      &gcc_qupv3_wrap0_s7_clk_src.clkr.hw },
2311                        .num_parents = 1,
2312                        .flags = CLK_SET_RATE_PARENT,
2313                        .ops = &clk_branch2_ops,
2314                },
2315        },
2316};
2317
2318static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2319        .halt_reg = 0x18144,
2320        .halt_check = BRANCH_HALT_VOTED,
2321        .clkr = {
2322                .enable_reg = 0x5200c,
2323                .enable_mask = BIT(22),
2324                .hw.init = &(struct clk_init_data){
2325                        .name = "gcc_qupv3_wrap1_s0_clk",
2326                        .parent_hws = (const struct clk_hw *[]){
2327                                      &gcc_qupv3_wrap1_s0_clk_src.clkr.hw },
2328                        .num_parents = 1,
2329                        .flags = CLK_SET_RATE_PARENT,
2330                        .ops = &clk_branch2_ops,
2331                },
2332        },
2333};
2334
2335static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2336        .halt_reg = 0x18274,
2337        .halt_check = BRANCH_HALT_VOTED,
2338        .clkr = {
2339                .enable_reg = 0x5200c,
2340                .enable_mask = BIT(23),
2341                .hw.init = &(struct clk_init_data){
2342                        .name = "gcc_qupv3_wrap1_s1_clk",
2343                        .parent_hws = (const struct clk_hw *[]){
2344                                      &gcc_qupv3_wrap1_s1_clk_src.clkr.hw },
2345                        .num_parents = 1,
2346                        .flags = CLK_SET_RATE_PARENT,
2347                        .ops = &clk_branch2_ops,
2348                },
2349        },
2350};
2351
2352static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2353        .halt_reg = 0x183a4,
2354        .halt_check = BRANCH_HALT_VOTED,
2355        .clkr = {
2356                .enable_reg = 0x5200c,
2357                .enable_mask = BIT(24),
2358                .hw.init = &(struct clk_init_data){
2359                        .name = "gcc_qupv3_wrap1_s2_clk",
2360                        .parent_hws = (const struct clk_hw *[]){
2361                                      &gcc_qupv3_wrap1_s2_clk_src.clkr.hw },
2362                        .num_parents = 1,
2363                        .flags = CLK_SET_RATE_PARENT,
2364                        .ops = &clk_branch2_ops,
2365                },
2366        },
2367};
2368
2369static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2370        .halt_reg = 0x184d4,
2371        .halt_check = BRANCH_HALT_VOTED,
2372        .clkr = {
2373                .enable_reg = 0x5200c,
2374                .enable_mask = BIT(25),
2375                .hw.init = &(struct clk_init_data){
2376                        .name = "gcc_qupv3_wrap1_s3_clk",
2377                        .parent_hws = (const struct clk_hw *[]){
2378                                      &gcc_qupv3_wrap1_s3_clk_src.clkr.hw },
2379                        .num_parents = 1,
2380                        .flags = CLK_SET_RATE_PARENT,
2381                        .ops = &clk_branch2_ops,
2382                },
2383        },
2384};
2385
2386static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2387        .halt_reg = 0x18604,
2388        .halt_check = BRANCH_HALT_VOTED,
2389        .clkr = {
2390                .enable_reg = 0x5200c,
2391                .enable_mask = BIT(26),
2392                .hw.init = &(struct clk_init_data){
2393                        .name = "gcc_qupv3_wrap1_s4_clk",
2394                        .parent_hws = (const struct clk_hw *[]){
2395                                      &gcc_qupv3_wrap1_s4_clk_src.clkr.hw },
2396                        .num_parents = 1,
2397                        .flags = CLK_SET_RATE_PARENT,
2398                        .ops = &clk_branch2_ops,
2399                },
2400        },
2401};
2402
2403static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2404        .halt_reg = 0x18734,
2405        .halt_check = BRANCH_HALT_VOTED,
2406        .clkr = {
2407                .enable_reg = 0x5200c,
2408                .enable_mask = BIT(27),
2409                .hw.init = &(struct clk_init_data){
2410                        .name = "gcc_qupv3_wrap1_s5_clk",
2411                        .parent_hws = (const struct clk_hw *[]){
2412                                      &gcc_qupv3_wrap1_s5_clk_src.clkr.hw },
2413                        .num_parents = 1,
2414                        .flags = CLK_SET_RATE_PARENT,
2415                        .ops = &clk_branch2_ops,
2416                },
2417        },
2418};
2419
2420static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2421        .halt_reg = 0x1e144,
2422        .halt_check = BRANCH_HALT_VOTED,
2423        .clkr = {
2424                .enable_reg = 0x52014,
2425                .enable_mask = BIT(4),
2426                .hw.init = &(struct clk_init_data){
2427                        .name = "gcc_qupv3_wrap2_s0_clk",
2428                        .parent_hws = (const struct clk_hw *[]){
2429                                      &gcc_qupv3_wrap2_s0_clk_src.clkr.hw },
2430                        .num_parents = 1,
2431                        .flags = CLK_SET_RATE_PARENT,
2432                        .ops = &clk_branch2_ops,
2433                },
2434        },
2435};
2436
2437static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2438        .halt_reg = 0x1e274,
2439        .halt_check = BRANCH_HALT_VOTED,
2440        .clkr = {
2441                .enable_reg = 0x52014,
2442                .enable_mask = BIT(5),
2443                .hw.init = &(struct clk_init_data){
2444                        .name = "gcc_qupv3_wrap2_s1_clk",
2445                        .parent_hws = (const struct clk_hw *[]){
2446                                      &gcc_qupv3_wrap2_s1_clk_src.clkr.hw },
2447                        .num_parents = 1,
2448                        .flags = CLK_SET_RATE_PARENT,
2449                        .ops = &clk_branch2_ops,
2450                },
2451        },
2452};
2453
2454static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2455        .halt_reg = 0x1e3a4,
2456        .halt_check = BRANCH_HALT_VOTED,
2457        .clkr = {
2458                .enable_reg = 0x52014,
2459                .enable_mask = BIT(6),
2460                .hw.init = &(struct clk_init_data){
2461                        .name = "gcc_qupv3_wrap2_s2_clk",
2462                        .parent_hws = (const struct clk_hw *[]){
2463                                      &gcc_qupv3_wrap2_s2_clk_src.clkr.hw },
2464                        .num_parents = 1,
2465                        .flags = CLK_SET_RATE_PARENT,
2466                        .ops = &clk_branch2_ops,
2467                },
2468        },
2469};
2470
2471static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2472        .halt_reg = 0x1e4d4,
2473        .halt_check = BRANCH_HALT_VOTED,
2474        .clkr = {
2475                .enable_reg = 0x52014,
2476                .enable_mask = BIT(7),
2477                .hw.init = &(struct clk_init_data){
2478                        .name = "gcc_qupv3_wrap2_s3_clk",
2479                        .parent_hws = (const struct clk_hw *[]){
2480                                      &gcc_qupv3_wrap2_s3_clk_src.clkr.hw },
2481                        .num_parents = 1,
2482                        .flags = CLK_SET_RATE_PARENT,
2483                        .ops = &clk_branch2_ops,
2484                },
2485        },
2486};
2487
2488static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2489        .halt_reg = 0x1e604,
2490        .halt_check = BRANCH_HALT_VOTED,
2491        .clkr = {
2492                .enable_reg = 0x52014,
2493                .enable_mask = BIT(8),
2494                .hw.init = &(struct clk_init_data){
2495                        .name = "gcc_qupv3_wrap2_s4_clk",
2496                        .parent_hws = (const struct clk_hw *[]){
2497                                      &gcc_qupv3_wrap2_s4_clk_src.clkr.hw },
2498                        .num_parents = 1,
2499                        .flags = CLK_SET_RATE_PARENT,
2500                        .ops = &clk_branch2_ops,
2501                },
2502        },
2503};
2504
2505static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2506        .halt_reg = 0x1e734,
2507        .halt_check = BRANCH_HALT_VOTED,
2508        .clkr = {
2509                .enable_reg = 0x52014,
2510                .enable_mask = BIT(9),
2511                .hw.init = &(struct clk_init_data){
2512                        .name = "gcc_qupv3_wrap2_s5_clk",
2513                        .parent_hws = (const struct clk_hw *[]){
2514                                      &gcc_qupv3_wrap2_s5_clk_src.clkr.hw },
2515                        .num_parents = 1,
2516                        .flags = CLK_SET_RATE_PARENT,
2517                        .ops = &clk_branch2_ops,
2518                },
2519        },
2520};
2521
2522static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2523        .halt_reg = 0x17004,
2524        .halt_check = BRANCH_HALT_VOTED,
2525        .clkr = {
2526                .enable_reg = 0x5200c,
2527                .enable_mask = BIT(6),
2528                .hw.init = &(struct clk_init_data){
2529                        .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2530                        .ops = &clk_branch2_ops,
2531                },
2532        },
2533};
2534
2535static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2536        .halt_reg = 0x17008,
2537        .halt_check = BRANCH_HALT_VOTED,
2538        .hwcg_reg = 0x17008,
2539        .hwcg_bit = 1,
2540        .clkr = {
2541                .enable_reg = 0x5200c,
2542                .enable_mask = BIT(7),
2543                .hw.init = &(struct clk_init_data){
2544                        .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2545                        .ops = &clk_branch2_ops,
2546                },
2547        },
2548};
2549
2550static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2551        .halt_reg = 0x18004,
2552        .halt_check = BRANCH_HALT_VOTED,
2553        .clkr = {
2554                .enable_reg = 0x5200c,
2555                .enable_mask = BIT(20),
2556                .hw.init = &(struct clk_init_data){
2557                        .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2558                        .ops = &clk_branch2_ops,
2559                },
2560        },
2561};
2562
2563static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2564        .halt_reg = 0x18008,
2565        .halt_check = BRANCH_HALT_VOTED,
2566        .hwcg_reg = 0x18008,
2567        .hwcg_bit = 1,
2568        .clkr = {
2569                .enable_reg = 0x5200c,
2570                .enable_mask = BIT(21),
2571                .hw.init = &(struct clk_init_data){
2572                        .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2573                        .ops = &clk_branch2_ops,
2574                },
2575        },
2576};
2577
2578static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2579        .halt_reg = 0x1e004,
2580        .halt_check = BRANCH_HALT_VOTED,
2581        .clkr = {
2582                .enable_reg = 0x52014,
2583                .enable_mask = BIT(2),
2584                .hw.init = &(struct clk_init_data){
2585                        .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2586                        .ops = &clk_branch2_ops,
2587                },
2588        },
2589};
2590
2591static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2592        .halt_reg = 0x1e008,
2593        .halt_check = BRANCH_HALT_VOTED,
2594        .hwcg_reg = 0x1e008,
2595        .hwcg_bit = 1,
2596        .clkr = {
2597                .enable_reg = 0x52014,
2598                .enable_mask = BIT(1),
2599                .hw.init = &(struct clk_init_data){
2600                        .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2601                        .ops = &clk_branch2_ops,
2602                },
2603        },
2604};
2605
2606static struct clk_branch gcc_sdcc2_ahb_clk = {
2607        .halt_reg = 0x14008,
2608        .halt_check = BRANCH_HALT,
2609        .clkr = {
2610                .enable_reg = 0x14008,
2611                .enable_mask = BIT(0),
2612                .hw.init = &(struct clk_init_data){
2613                        .name = "gcc_sdcc2_ahb_clk",
2614                        .ops = &clk_branch2_ops,
2615                },
2616        },
2617};
2618
2619static struct clk_branch gcc_sdcc2_apps_clk = {
2620        .halt_reg = 0x14004,
2621        .halt_check = BRANCH_HALT,
2622        .clkr = {
2623                .enable_reg = 0x14004,
2624                .enable_mask = BIT(0),
2625                .hw.init = &(struct clk_init_data){
2626                        .name = "gcc_sdcc2_apps_clk",
2627                        .parent_hws = (const struct clk_hw *[]){
2628                                      &gcc_sdcc2_apps_clk_src.clkr.hw },
2629                        .num_parents = 1,
2630                        .flags = CLK_SET_RATE_PARENT,
2631                        .ops = &clk_branch2_ops,
2632                },
2633        },
2634};
2635
2636static struct clk_branch gcc_sdcc4_ahb_clk = {
2637        .halt_reg = 0x16008,
2638        .halt_check = BRANCH_HALT,
2639        .clkr = {
2640                .enable_reg = 0x16008,
2641                .enable_mask = BIT(0),
2642                .hw.init = &(struct clk_init_data){
2643                        .name = "gcc_sdcc4_ahb_clk",
2644                        .ops = &clk_branch2_ops,
2645                },
2646        },
2647};
2648
2649static struct clk_branch gcc_sdcc4_apps_clk = {
2650        .halt_reg = 0x16004,
2651        .halt_check = BRANCH_HALT,
2652        .clkr = {
2653                .enable_reg = 0x16004,
2654                .enable_mask = BIT(0),
2655                .hw.init = &(struct clk_init_data){
2656                        .name = "gcc_sdcc4_apps_clk",
2657                        .parent_hws = (const struct clk_hw *[]){
2658                                      &gcc_sdcc4_apps_clk_src.clkr.hw },
2659                        .num_parents = 1,
2660                        .flags = CLK_SET_RATE_PARENT,
2661                        .ops = &clk_branch2_ops,
2662                },
2663        },
2664};
2665
2666static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2667        .halt_reg = 0x4819c,
2668        .halt_check = BRANCH_HALT_VOTED,
2669        .clkr = {
2670                .enable_reg = 0x52004,
2671                .enable_mask = BIT(0),
2672                .hw.init = &(struct clk_init_data){
2673                        .name = "gcc_sys_noc_cpuss_ahb_clk",
2674                        .parent_hws = (const struct clk_hw *[]){
2675                                      &gcc_cpuss_ahb_clk_src.clkr.hw },
2676                        .num_parents = 1,
2677                        /* required for cpuss */
2678                        .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2679                        .ops = &clk_branch2_ops,
2680                },
2681        },
2682};
2683
2684static struct clk_branch gcc_tsif_ahb_clk = {
2685        .halt_reg = 0x36004,
2686        .halt_check = BRANCH_HALT,
2687        .clkr = {
2688                .enable_reg = 0x36004,
2689                .enable_mask = BIT(0),
2690                .hw.init = &(struct clk_init_data){
2691                        .name = "gcc_tsif_ahb_clk",
2692                        .ops = &clk_branch2_ops,
2693                },
2694        },
2695};
2696
2697static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2698        .halt_reg = 0x3600c,
2699        .halt_check = BRANCH_HALT,
2700        .clkr = {
2701                .enable_reg = 0x3600c,
2702                .enable_mask = BIT(0),
2703                .hw.init = &(struct clk_init_data){
2704                        .name = "gcc_tsif_inactivity_timers_clk",
2705                        .ops = &clk_branch2_ops,
2706                },
2707        },
2708};
2709
2710static struct clk_branch gcc_tsif_ref_clk = {
2711        .halt_reg = 0x36008,
2712        .halt_check = BRANCH_HALT,
2713        .clkr = {
2714                .enable_reg = 0x36008,
2715                .enable_mask = BIT(0),
2716                .hw.init = &(struct clk_init_data){
2717                        .name = "gcc_tsif_ref_clk",
2718                        .parent_hws = (const struct clk_hw *[]){
2719                                      &gcc_tsif_ref_clk_src.clkr.hw },
2720                        .num_parents = 1,
2721                        .flags = CLK_SET_RATE_PARENT,
2722                        .ops = &clk_branch2_ops,
2723                },
2724        },
2725};
2726
2727static struct clk_branch gcc_ufs_card_ahb_clk = {
2728        .halt_reg = 0x75014,
2729        .halt_check = BRANCH_HALT,
2730        .hwcg_reg = 0x75014,
2731        .hwcg_bit = 1,
2732        .clkr = {
2733                .enable_reg = 0x75014,
2734                .enable_mask = BIT(0),
2735                .hw.init = &(struct clk_init_data){
2736                        .name = "gcc_ufs_card_ahb_clk",
2737                        .ops = &clk_branch2_ops,
2738                },
2739        },
2740};
2741
2742static struct clk_branch gcc_ufs_card_axi_clk = {
2743        .halt_reg = 0x75010,
2744        .halt_check = BRANCH_HALT,
2745        .hwcg_reg = 0x75010,
2746        .hwcg_bit = 1,
2747        .clkr = {
2748                .enable_reg = 0x75010,
2749                .enable_mask = BIT(0),
2750                .hw.init = &(struct clk_init_data){
2751                        .name = "gcc_ufs_card_axi_clk",
2752                        .parent_hws = (const struct clk_hw *[]){
2753                                      &gcc_ufs_card_axi_clk_src.clkr.hw },
2754                        .num_parents = 1,
2755                        .flags = CLK_SET_RATE_PARENT,
2756                        .ops = &clk_branch2_ops,
2757                },
2758        },
2759};
2760
2761static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
2762        .halt_reg = 0x75010,
2763        .halt_check = BRANCH_HALT,
2764        .hwcg_reg = 0x75010,
2765        .hwcg_bit = 1,
2766        .clkr = {
2767                .enable_reg = 0x75010,
2768                .enable_mask = BIT(1),
2769                .hw.init = &(struct clk_init_data){
2770                        .name = "gcc_ufs_card_axi_hw_ctl_clk",
2771                        .parent_hws = (const struct clk_hw *[]){
2772                                      &gcc_ufs_card_axi_clk.clkr.hw },
2773                        .num_parents = 1,
2774                        .flags = CLK_SET_RATE_PARENT,
2775                        .ops = &clk_branch_simple_ops,
2776                },
2777        },
2778};
2779
2780static struct clk_branch gcc_ufs_card_clkref_clk = {
2781        .halt_reg = 0x8c004,
2782        .halt_check = BRANCH_HALT,
2783        .clkr = {
2784                .enable_reg = 0x8c004,
2785                .enable_mask = BIT(0),
2786                .hw.init = &(struct clk_init_data){
2787                        .name = "gcc_ufs_card_clkref_clk",
2788                        .ops = &clk_branch2_ops,
2789                },
2790        },
2791};
2792
2793static struct clk_branch gcc_ufs_card_ice_core_clk = {
2794        .halt_reg = 0x7505c,
2795        .halt_check = BRANCH_HALT,
2796        .hwcg_reg = 0x7505c,
2797        .hwcg_bit = 1,
2798        .clkr = {
2799                .enable_reg = 0x7505c,
2800                .enable_mask = BIT(0),
2801                .hw.init = &(struct clk_init_data){
2802                        .name = "gcc_ufs_card_ice_core_clk",
2803                        .parent_hws = (const struct clk_hw *[]){
2804                                      &gcc_ufs_card_ice_core_clk_src.clkr.hw },
2805                        .num_parents = 1,
2806                        .flags = CLK_SET_RATE_PARENT,
2807                        .ops = &clk_branch2_ops,
2808                },
2809        },
2810};
2811
2812static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
2813        .halt_reg = 0x7505c,
2814        .halt_check = BRANCH_HALT,
2815        .hwcg_reg = 0x7505c,
2816        .hwcg_bit = 1,
2817        .clkr = {
2818                .enable_reg = 0x7505c,
2819                .enable_mask = BIT(1),
2820                .hw.init = &(struct clk_init_data){
2821                        .name = "gcc_ufs_card_ice_core_hw_ctl_clk",
2822                        .parent_hws = (const struct clk_hw *[]){
2823                                      &gcc_ufs_card_ice_core_clk.clkr.hw },
2824                        .num_parents = 1,
2825                        .flags = CLK_SET_RATE_PARENT,
2826                        .ops = &clk_branch_simple_ops,
2827                },
2828        },
2829};
2830
2831static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2832        .halt_reg = 0x75090,
2833        .halt_check = BRANCH_HALT,
2834        .hwcg_reg = 0x75090,
2835        .hwcg_bit = 1,
2836        .clkr = {
2837                .enable_reg = 0x75090,
2838                .enable_mask = BIT(0),
2839                .hw.init = &(struct clk_init_data){
2840                        .name = "gcc_ufs_card_phy_aux_clk",
2841                        .parent_hws = (const struct clk_hw *[]){
2842                                      &gcc_ufs_card_phy_aux_clk_src.clkr.hw },
2843                        .num_parents = 1,
2844                        .flags = CLK_SET_RATE_PARENT,
2845                        .ops = &clk_branch2_ops,
2846                },
2847        },
2848};
2849
2850static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
2851        .halt_reg = 0x75090,
2852        .halt_check = BRANCH_HALT,
2853        .hwcg_reg = 0x75090,
2854        .hwcg_bit = 1,
2855        .clkr = {
2856                .enable_reg = 0x75090,
2857                .enable_mask = BIT(1),
2858                .hw.init = &(struct clk_init_data){
2859                        .name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
2860                        .parent_hws = (const struct clk_hw *[]){
2861                                      &gcc_ufs_card_phy_aux_clk.clkr.hw },
2862                        .num_parents = 1,
2863                        .flags = CLK_SET_RATE_PARENT,
2864                        .ops = &clk_branch_simple_ops,
2865                },
2866        },
2867};
2868
2869/* external clocks so add BRANCH_HALT_SKIP */
2870static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2871        .halt_check = BRANCH_HALT_SKIP,
2872        .clkr = {
2873                .enable_reg = 0x7501c,
2874                .enable_mask = BIT(0),
2875                .hw.init = &(struct clk_init_data){
2876                        .name = "gcc_ufs_card_rx_symbol_0_clk",
2877                        .ops = &clk_branch2_ops,
2878                },
2879        },
2880};
2881
2882/* external clocks so add BRANCH_HALT_SKIP */
2883static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2884        .halt_check = BRANCH_HALT_SKIP,
2885        .clkr = {
2886                .enable_reg = 0x750ac,
2887                .enable_mask = BIT(0),
2888                .hw.init = &(struct clk_init_data){
2889                        .name = "gcc_ufs_card_rx_symbol_1_clk",
2890                        .ops = &clk_branch2_ops,
2891                },
2892        },
2893};
2894
2895/* external clocks so add BRANCH_HALT_SKIP */
2896static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2897        .halt_check = BRANCH_HALT_SKIP,
2898        .clkr = {
2899                .enable_reg = 0x75018,
2900                .enable_mask = BIT(0),
2901                .hw.init = &(struct clk_init_data){
2902                        .name = "gcc_ufs_card_tx_symbol_0_clk",
2903                        .ops = &clk_branch2_ops,
2904                },
2905        },
2906};
2907
2908static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2909        .halt_reg = 0x75058,
2910        .halt_check = BRANCH_HALT,
2911        .hwcg_reg = 0x75058,
2912        .hwcg_bit = 1,
2913        .clkr = {
2914                .enable_reg = 0x75058,
2915                .enable_mask = BIT(0),
2916                .hw.init = &(struct clk_init_data){
2917                        .name = "gcc_ufs_card_unipro_core_clk",
2918                        .parent_hws = (const struct clk_hw *[]){
2919                                &gcc_ufs_card_unipro_core_clk_src.clkr.hw },
2920                        .num_parents = 1,
2921                        .flags = CLK_SET_RATE_PARENT,
2922                        .ops = &clk_branch2_ops,
2923                },
2924        },
2925};
2926
2927static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
2928        .halt_reg = 0x75058,
2929        .halt_check = BRANCH_HALT,
2930        .hwcg_reg = 0x75058,
2931        .hwcg_bit = 1,
2932        .clkr = {
2933                .enable_reg = 0x75058,
2934                .enable_mask = BIT(1),
2935                .hw.init = &(struct clk_init_data){
2936                        .name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
2937                        .parent_hws = (const struct clk_hw *[]){
2938                                      &gcc_ufs_card_unipro_core_clk.clkr.hw },
2939                        .num_parents = 1,
2940                        .flags = CLK_SET_RATE_PARENT,
2941                        .ops = &clk_branch_simple_ops,
2942                },
2943        },
2944};
2945
2946static struct clk_branch gcc_ufs_mem_clkref_clk = {
2947        .halt_reg = 0x8c000,
2948        .halt_check = BRANCH_HALT,
2949        .clkr = {
2950                .enable_reg = 0x8c000,
2951                .enable_mask = BIT(0),
2952                .hw.init = &(struct clk_init_data){
2953                        .name = "gcc_ufs_mem_clkref_clk",
2954                        .ops = &clk_branch2_ops,
2955                },
2956        },
2957};
2958
2959static struct clk_branch gcc_ufs_phy_ahb_clk = {
2960        .halt_reg = 0x77014,
2961        .halt_check = BRANCH_HALT,
2962        .hwcg_reg = 0x77014,
2963        .hwcg_bit = 1,
2964        .clkr = {
2965                .enable_reg = 0x77014,
2966                .enable_mask = BIT(0),
2967                .hw.init = &(struct clk_init_data){
2968                        .name = "gcc_ufs_phy_ahb_clk",
2969                        .ops = &clk_branch2_ops,
2970                },
2971        },
2972};
2973
2974static struct clk_branch gcc_ufs_phy_axi_clk = {
2975        .halt_reg = 0x77010,
2976        .halt_check = BRANCH_HALT,
2977        .hwcg_reg = 0x77010,
2978        .hwcg_bit = 1,
2979        .clkr = {
2980                .enable_reg = 0x77010,
2981                .enable_mask = BIT(0),
2982                .hw.init = &(struct clk_init_data){
2983                        .name = "gcc_ufs_phy_axi_clk",
2984                        .parent_hws = (const struct clk_hw *[]){
2985                                &gcc_ufs_phy_axi_clk_src.clkr.hw },
2986                        .num_parents = 1,
2987                        .flags = CLK_SET_RATE_PARENT,
2988                        .ops = &clk_branch2_ops,
2989                },
2990        },
2991};
2992
2993static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2994        .halt_reg = 0x77010,
2995        .halt_check = BRANCH_HALT,
2996        .hwcg_reg = 0x77010,
2997        .hwcg_bit = 1,
2998        .clkr = {
2999                .enable_reg = 0x77010,
3000                .enable_mask = BIT(1),
3001                .hw.init = &(struct clk_init_data){
3002                        .name = "gcc_ufs_phy_axi_hw_ctl_clk",
3003                        .parent_hws = (const struct clk_hw *[]){
3004                                      &gcc_ufs_phy_axi_clk.clkr.hw },
3005                        .num_parents = 1,
3006                        .flags = CLK_SET_RATE_PARENT,
3007                        .ops = &clk_branch_simple_ops,
3008                },
3009        },
3010};
3011
3012static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3013        .halt_reg = 0x7705c,
3014        .halt_check = BRANCH_HALT,
3015        .hwcg_reg = 0x7705c,
3016        .hwcg_bit = 1,
3017        .clkr = {
3018                .enable_reg = 0x7705c,
3019                .enable_mask = BIT(0),
3020                .hw.init = &(struct clk_init_data){
3021                        .name = "gcc_ufs_phy_ice_core_clk",
3022                        .parent_hws = (const struct clk_hw *[]){
3023                                      &gcc_ufs_phy_ice_core_clk_src.clkr.hw },
3024                        .num_parents = 1,
3025                        .flags = CLK_SET_RATE_PARENT,
3026                        .ops = &clk_branch2_ops,
3027                },
3028        },
3029};
3030
3031static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3032        .halt_reg = 0x7705c,
3033        .halt_check = BRANCH_HALT,
3034        .hwcg_reg = 0x7705c,
3035        .hwcg_bit = 1,
3036        .clkr = {
3037                .enable_reg = 0x7705c,
3038                .enable_mask = BIT(1),
3039                .hw.init = &(struct clk_init_data){
3040                        .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3041                        .parent_hws = (const struct clk_hw *[]){
3042                                      &gcc_ufs_phy_ice_core_clk.clkr.hw },
3043                        .num_parents = 1,
3044                        .flags = CLK_SET_RATE_PARENT,
3045                        .ops = &clk_branch_simple_ops,
3046                },
3047        },
3048};
3049
3050static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3051        .halt_reg = 0x77090,
3052        .halt_check = BRANCH_HALT,
3053        .hwcg_reg = 0x77090,
3054        .hwcg_bit = 1,
3055        .clkr = {
3056                .enable_reg = 0x77090,
3057                .enable_mask = BIT(0),
3058                .hw.init = &(struct clk_init_data){
3059                        .name = "gcc_ufs_phy_phy_aux_clk",
3060                        .parent_hws = (const struct clk_hw *[]){
3061                                      &gcc_ufs_phy_phy_aux_clk_src.clkr.hw },
3062                        .num_parents = 1,
3063                        .flags = CLK_SET_RATE_PARENT,
3064                        .ops = &clk_branch2_ops,
3065                },
3066        },
3067};
3068
3069static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3070        .halt_reg = 0x77090,
3071        .halt_check = BRANCH_HALT,
3072        .hwcg_reg = 0x77090,
3073        .hwcg_bit = 1,
3074        .clkr = {
3075                .enable_reg = 0x77090,
3076                .enable_mask = BIT(1),
3077                .hw.init = &(struct clk_init_data){
3078                        .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3079                        .parent_hws = (const struct clk_hw *[]){
3080                                      &gcc_ufs_phy_phy_aux_clk.clkr.hw },
3081                        .num_parents = 1,
3082                        .flags = CLK_SET_RATE_PARENT,
3083                        .ops = &clk_branch_simple_ops,
3084                },
3085        },
3086};
3087
3088/* external clocks so add BRANCH_HALT_SKIP */
3089static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3090        .halt_check = BRANCH_HALT_SKIP,
3091        .clkr = {
3092                .enable_reg = 0x7701c,
3093                .enable_mask = BIT(0),
3094                .hw.init = &(struct clk_init_data){
3095                        .name = "gcc_ufs_phy_rx_symbol_0_clk",
3096                        .ops = &clk_branch2_ops,
3097                },
3098        },
3099};
3100
3101/* external clocks so add BRANCH_HALT_SKIP */
3102static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3103        .halt_check = BRANCH_HALT_SKIP,
3104        .clkr = {
3105                .enable_reg = 0x770ac,
3106                .enable_mask = BIT(0),
3107                .hw.init = &(struct clk_init_data){
3108                        .name = "gcc_ufs_phy_rx_symbol_1_clk",
3109                        .ops = &clk_branch2_ops,
3110                },
3111        },
3112};
3113
3114/* external clocks so add BRANCH_HALT_SKIP */
3115static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3116        .halt_check = BRANCH_HALT_SKIP,
3117        .clkr = {
3118                .enable_reg = 0x77018,
3119                .enable_mask = BIT(0),
3120                .hw.init = &(struct clk_init_data){
3121                        .name = "gcc_ufs_phy_tx_symbol_0_clk",
3122                        .ops = &clk_branch2_ops,
3123                },
3124        },
3125};
3126
3127static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3128        .halt_reg = 0x77058,
3129        .halt_check = BRANCH_HALT,
3130        .hwcg_reg = 0x77058,
3131        .hwcg_bit = 1,
3132        .clkr = {
3133                .enable_reg = 0x77058,
3134                .enable_mask = BIT(0),
3135                .hw.init = &(struct clk_init_data){
3136                        .name = "gcc_ufs_phy_unipro_core_clk",
3137                        .parent_hws = (const struct clk_hw *[]){
3138                                &gcc_ufs_phy_unipro_core_clk_src.clkr.hw },
3139                        .num_parents = 1,
3140                        .flags = CLK_SET_RATE_PARENT,
3141                        .ops = &clk_branch2_ops,
3142                },
3143        },
3144};
3145
3146static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3147        .halt_reg = 0x77058,
3148        .halt_check = BRANCH_HALT,
3149        .hwcg_reg = 0x77058,
3150        .hwcg_bit = 1,
3151        .clkr = {
3152                .enable_reg = 0x77058,
3153                .enable_mask = BIT(1),
3154                .hw.init = &(struct clk_init_data){
3155                        .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3156                        .parent_hws = (const struct clk_hw *[]){
3157                                      &gcc_ufs_phy_unipro_core_clk.clkr.hw },
3158                        .num_parents = 1,
3159                        .flags = CLK_SET_RATE_PARENT,
3160                        .ops = &clk_branch_simple_ops,
3161                },
3162        },
3163};
3164
3165static struct clk_branch gcc_usb30_prim_master_clk = {
3166        .halt_reg = 0xf010,
3167        .halt_check = BRANCH_HALT,
3168        .clkr = {
3169                .enable_reg = 0xf010,
3170                .enable_mask = BIT(0),
3171                .hw.init = &(struct clk_init_data){
3172                        .name = "gcc_usb30_prim_master_clk",
3173                        .parent_hws = (const struct clk_hw *[]){
3174                                      &gcc_usb30_prim_master_clk_src.clkr.hw },
3175                        .num_parents = 1,
3176                        .flags = CLK_SET_RATE_PARENT,
3177                        .ops = &clk_branch2_ops,
3178                },
3179        },
3180};
3181
3182static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3183        .halt_reg = 0xf018,
3184        .halt_check = BRANCH_HALT,
3185        .clkr = {
3186                .enable_reg = 0xf018,
3187                .enable_mask = BIT(0),
3188                .hw.init = &(struct clk_init_data){
3189                        .name = "gcc_usb30_prim_mock_utmi_clk",
3190                        .parent_hws = (const struct clk_hw *[]){
3191                                &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
3192                        .num_parents = 1,
3193                        .flags = CLK_SET_RATE_PARENT,
3194                        .ops = &clk_branch2_ops,
3195                },
3196        },
3197};
3198
3199static struct clk_branch gcc_usb30_prim_sleep_clk = {
3200        .halt_reg = 0xf014,
3201        .halt_check = BRANCH_HALT,
3202        .clkr = {
3203                .enable_reg = 0xf014,
3204                .enable_mask = BIT(0),
3205                .hw.init = &(struct clk_init_data){
3206                        .name = "gcc_usb30_prim_sleep_clk",
3207                        .ops = &clk_branch2_ops,
3208                },
3209        },
3210};
3211
3212static struct clk_branch gcc_usb30_sec_master_clk = {
3213        .halt_reg = 0x10010,
3214        .halt_check = BRANCH_HALT,
3215        .clkr = {
3216                .enable_reg = 0x10010,
3217                .enable_mask = BIT(0),
3218                .hw.init = &(struct clk_init_data){
3219                        .name = "gcc_usb30_sec_master_clk",
3220                        .parent_hws = (const struct clk_hw *[]){
3221                                      &gcc_usb30_sec_master_clk_src.clkr.hw },
3222                        .num_parents = 1,
3223                        .flags = CLK_SET_RATE_PARENT,
3224                        .ops = &clk_branch2_ops,
3225                },
3226        },
3227};
3228
3229static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3230        .halt_reg = 0x10018,
3231        .halt_check = BRANCH_HALT,
3232        .clkr = {
3233                .enable_reg = 0x10018,
3234                .enable_mask = BIT(0),
3235                .hw.init = &(struct clk_init_data){
3236                        .name = "gcc_usb30_sec_mock_utmi_clk",
3237                        .parent_hws = (const struct clk_hw *[]){
3238                                &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw },
3239                        .num_parents = 1,
3240                        .flags = CLK_SET_RATE_PARENT,
3241                        .ops = &clk_branch2_ops,
3242                },
3243        },
3244};
3245
3246static struct clk_branch gcc_usb30_sec_sleep_clk = {
3247        .halt_reg = 0x10014,
3248        .halt_check = BRANCH_HALT,
3249        .clkr = {
3250                .enable_reg = 0x10014,
3251                .enable_mask = BIT(0),
3252                .hw.init = &(struct clk_init_data){
3253                        .name = "gcc_usb30_sec_sleep_clk",
3254                        .ops = &clk_branch2_ops,
3255                },
3256        },
3257};
3258
3259static struct clk_branch gcc_usb3_prim_clkref_clk = {
3260        .halt_reg = 0x8c008,
3261        .halt_check = BRANCH_HALT,
3262        .clkr = {
3263                .enable_reg = 0x8c008,
3264                .enable_mask = BIT(0),
3265                .hw.init = &(struct clk_init_data){
3266                        .name = "gcc_usb3_prim_clkref_clk",
3267                        .ops = &clk_branch2_ops,
3268                },
3269        },
3270};
3271
3272static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3273        .halt_reg = 0xf050,
3274        .halt_check = BRANCH_HALT,
3275        .clkr = {
3276                .enable_reg = 0xf050,
3277                .enable_mask = BIT(0),
3278                .hw.init = &(struct clk_init_data){
3279                        .name = "gcc_usb3_prim_phy_aux_clk",
3280                        .parent_hws = (const struct clk_hw *[]){
3281                                      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3282                        .num_parents = 1,
3283                        .flags = CLK_SET_RATE_PARENT,
3284                        .ops = &clk_branch2_ops,
3285                },
3286        },
3287};
3288
3289static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3290        .halt_reg = 0xf054,
3291        .halt_check = BRANCH_HALT,
3292        .clkr = {
3293                .enable_reg = 0xf054,
3294                .enable_mask = BIT(0),
3295                .hw.init = &(struct clk_init_data){
3296                        .name = "gcc_usb3_prim_phy_com_aux_clk",
3297                        .parent_hws = (const struct clk_hw *[]){
3298                                      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3299                        .num_parents = 1,
3300                        .flags = CLK_SET_RATE_PARENT,
3301                        .ops = &clk_branch2_ops,
3302                },
3303        },
3304};
3305
3306static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3307        .halt_check = BRANCH_HALT_SKIP,
3308        .clkr = {
3309                .enable_reg = 0xf058,
3310                .enable_mask = BIT(0),
3311                .hw.init = &(struct clk_init_data){
3312                        .name = "gcc_usb3_prim_phy_pipe_clk",
3313                        .ops = &clk_branch2_ops,
3314                },
3315        },
3316};
3317
3318static struct clk_branch gcc_usb3_sec_clkref_clk = {
3319        .halt_reg = 0x8c028,
3320        .halt_check = BRANCH_HALT,
3321        .clkr = {
3322                .enable_reg = 0x8c028,
3323                .enable_mask = BIT(0),
3324                .hw.init = &(struct clk_init_data){
3325                        .name = "gcc_usb3_sec_clkref_clk",
3326                        .ops = &clk_branch2_ops,
3327                },
3328        },
3329};
3330
3331static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
3332        .halt_reg = 0x10050,
3333        .halt_check = BRANCH_HALT,
3334        .clkr = {
3335                .enable_reg = 0x10050,
3336                .enable_mask = BIT(0),
3337                .hw.init = &(struct clk_init_data){
3338                        .name = "gcc_usb3_sec_phy_aux_clk",
3339                        .parent_hws = (const struct clk_hw *[]){
3340                                      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3341                        .num_parents = 1,
3342                        .flags = CLK_SET_RATE_PARENT,
3343                        .ops = &clk_branch2_ops,
3344                },
3345        },
3346};
3347
3348static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3349        .halt_reg = 0x10054,
3350        .halt_check = BRANCH_HALT,
3351        .clkr = {
3352                .enable_reg = 0x10054,
3353                .enable_mask = BIT(0),
3354                .hw.init = &(struct clk_init_data){
3355                        .name = "gcc_usb3_sec_phy_com_aux_clk",
3356                        .parent_hws = (const struct clk_hw *[]){
3357                                      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3358                        .num_parents = 1,
3359                        .flags = CLK_SET_RATE_PARENT,
3360                        .ops = &clk_branch2_ops,
3361                },
3362        },
3363};
3364
3365static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3366        .halt_check = BRANCH_HALT_SKIP,
3367        .clkr = {
3368                .enable_reg = 0x10058,
3369                .enable_mask = BIT(0),
3370                .hw.init = &(struct clk_init_data){
3371                        .name = "gcc_usb3_sec_phy_pipe_clk",
3372                        .ops = &clk_branch2_ops,
3373                },
3374        },
3375};
3376
3377/*
3378 * Clock ON depends on external parent 'config noc', so cant poll
3379 * delay and also mark as crtitical for video boot
3380 */
3381static struct clk_branch gcc_video_ahb_clk = {
3382        .halt_reg = 0xb004,
3383        .halt_check = BRANCH_HALT_DELAY,
3384        .hwcg_reg = 0xb004,
3385        .hwcg_bit = 1,
3386        .clkr = {
3387                .enable_reg = 0xb004,
3388                .enable_mask = BIT(0),
3389                .hw.init = &(struct clk_init_data){
3390                        .name = "gcc_video_ahb_clk",
3391                        .flags = CLK_IS_CRITICAL,
3392                        .ops = &clk_branch2_ops,
3393                },
3394        },
3395};
3396
3397static struct clk_branch gcc_video_axi0_clk = {
3398        .halt_reg = 0xb024,
3399        .halt_check = BRANCH_HALT,
3400        .clkr = {
3401                .enable_reg = 0xb024,
3402                .enable_mask = BIT(0),
3403                .hw.init = &(struct clk_init_data){
3404                        .name = "gcc_video_axi0_clk",
3405                        .ops = &clk_branch2_ops,
3406                },
3407        },
3408};
3409
3410static struct clk_branch gcc_video_axi1_clk = {
3411        .halt_reg = 0xb028,
3412        .halt_check = BRANCH_HALT,
3413        .clkr = {
3414                .enable_reg = 0xb028,
3415                .enable_mask = BIT(0),
3416                .hw.init = &(struct clk_init_data){
3417                        .name = "gcc_video_axi1_clk",
3418                        .ops = &clk_branch2_ops,
3419                },
3420        },
3421};
3422
3423static struct clk_branch gcc_video_axic_clk = {
3424        .halt_reg = 0xb02c,
3425        .halt_check = BRANCH_HALT,
3426        .clkr = {
3427                .enable_reg = 0xb02c,
3428                .enable_mask = BIT(0),
3429                .hw.init = &(struct clk_init_data){
3430                        .name = "gcc_video_axic_clk",
3431                        .ops = &clk_branch2_ops,
3432                },
3433        },
3434};
3435
3436/* XO critical input to video, so no need to poll */
3437static struct clk_branch gcc_video_xo_clk = {
3438        .halt_reg = 0xb040,
3439        .halt_check = BRANCH_HALT_DELAY,
3440        .clkr = {
3441                .enable_reg = 0xb040,
3442                .enable_mask = BIT(0),
3443                .hw.init = &(struct clk_init_data){
3444                        .name = "gcc_video_xo_clk",
3445                        .flags = CLK_IS_CRITICAL,
3446                        .ops = &clk_branch2_ops,
3447                },
3448        },
3449};
3450
3451static struct gdsc usb30_prim_gdsc = {
3452                .gdscr = 0xf004,
3453                .pd = {
3454                        .name = "usb30_prim_gdsc",
3455                },
3456                .pwrsts = PWRSTS_OFF_ON,
3457                .flags = POLL_CFG_GDSCR,
3458};
3459
3460static struct gdsc usb30_sec_gdsc = {
3461                .gdscr = 0x10004,
3462                .pd = {
3463                        .name = "usb30_sec_gdsc",
3464                },
3465                .pwrsts = PWRSTS_OFF_ON,
3466                .flags = POLL_CFG_GDSCR,
3467};
3468
3469static struct clk_regmap *gcc_sm8150_clocks[] = {
3470        [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3471        [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3472        [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] =
3473                &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
3474        [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3475        [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
3476                &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3477        [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3478        [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3479        [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3480        [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3481        [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3482        [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3483        [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3484        [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3485        [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3486        [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
3487        [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3488        [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
3489        [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3490        [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
3491        [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3492        [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3493        [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3494        [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3495        [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3496        [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
3497        [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
3498        [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
3499        [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
3500        [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
3501        [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
3502        [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3503        [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3504        [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3505        [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3506        [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3507        [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3508        [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3509        [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3510        [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3511        [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3512        [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3513        [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3514        [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
3515        [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
3516        [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
3517        [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
3518        [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
3519        [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
3520        [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
3521        [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
3522        [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3523        [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3524        [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3525        [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
3526        [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3527        [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3528        [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3529        [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3530        [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3531        [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3532        [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3533        [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
3534        [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3535        [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3536        [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3537        [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3538        [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3539        [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
3540        [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3541        [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3542        [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3543        [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3544        [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3545        [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3546        [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3547        [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3548        [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3549        [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3550        [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
3551        [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
3552        [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
3553        [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3554        [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3555        [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3556        [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3557        [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3558        [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3559        [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3560        [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3561        [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3562        [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3563        [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3564        [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3565        [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3566        [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3567        [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3568        [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3569        [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3570        [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3571        [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3572        [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3573        [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3574        [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3575        [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3576        [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3577        [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3578        [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3579        [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3580        [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3581        [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3582        [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3583        [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3584        [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3585        [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3586        [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3587        [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3588        [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3589        [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3590        [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3591        [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3592        [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3593        [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3594        [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3595        [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3596        [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3597        [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3598        [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3599        [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3600        [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3601        [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3602        [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3603        [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3604        [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3605        [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3606        [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3607        [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3608        [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3609        [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
3610        [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3611        [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3612        [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3613        [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
3614        [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
3615        [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3616        [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3617        [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] =
3618                &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
3619        [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3620        [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3621        [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] =
3622                &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
3623        [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3624        [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3625        [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3626        [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3627        [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
3628                &gcc_ufs_card_unipro_core_clk_src.clkr,
3629        [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] =
3630                &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
3631        [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3632        [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3633        [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3634        [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3635        [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3636        [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3637        [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3638        [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
3639                &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3640        [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3641        [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3642        [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3643        [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3644        [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3645        [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3646        [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3647        [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3648                &gcc_ufs_phy_unipro_core_clk_src.clkr,
3649        [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
3650                &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3651        [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3652        [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3653        [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3654        [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3655                &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3656        [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3657        [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3658        [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3659        [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3660        [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3661                &gcc_usb30_sec_mock_utmi_clk_src.clkr,
3662        [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3663        [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3664        [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3665        [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3666        [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3667        [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3668        [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
3669        [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3670        [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3671        [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3672        [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3673        [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3674        [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3675        [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3676        [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
3677        [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3678        [GPLL0] = &gpll0.clkr,
3679        [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3680        [GPLL7] = &gpll7.clkr,
3681        [GPLL9] = &gpll9.clkr,
3682};
3683
3684static const struct qcom_reset_map gcc_sm8150_resets[] = {
3685        [GCC_EMAC_BCR] = { 0x6000 },
3686        [GCC_GPU_BCR] = { 0x71000 },
3687        [GCC_MMSS_BCR] = { 0xb000 },
3688        [GCC_NPU_BCR] = { 0x4d000 },
3689        [GCC_PCIE_0_BCR] = { 0x6b000 },
3690        [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3691        [GCC_PCIE_1_BCR] = { 0x8d000 },
3692        [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3693        [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3694        [GCC_PDM_BCR] = { 0x33000 },
3695        [GCC_PRNG_BCR] = { 0x34000 },
3696        [GCC_QSPI_BCR] = { 0x24008 },
3697        [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3698        [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3699        [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3700        [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3701        [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3702        [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3703        [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3704        [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3705        [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3706        [GCC_SDCC2_BCR] = { 0x14000 },
3707        [GCC_SDCC4_BCR] = { 0x16000 },
3708        [GCC_TSIF_BCR] = { 0x36000 },
3709        [GCC_UFS_CARD_BCR] = { 0x75000 },
3710        [GCC_UFS_PHY_BCR] = { 0x77000 },
3711        [GCC_USB30_PRIM_BCR] = { 0xf000 },
3712        [GCC_USB30_SEC_BCR] = { 0x10000 },
3713        [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3714};
3715
3716static struct gdsc *gcc_sm8150_gdscs[] = {
3717        [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3718        [USB30_SEC_GDSC] = &usb30_sec_gdsc,
3719};
3720
3721static const struct regmap_config gcc_sm8150_regmap_config = {
3722        .reg_bits       = 32,
3723        .reg_stride     = 4,
3724        .val_bits       = 32,
3725        .max_register   = 0x9c040,
3726        .fast_io        = true,
3727};
3728
3729static const struct qcom_cc_desc gcc_sm8150_desc = {
3730        .config = &gcc_sm8150_regmap_config,
3731        .clks = gcc_sm8150_clocks,
3732        .num_clks = ARRAY_SIZE(gcc_sm8150_clocks),
3733        .resets = gcc_sm8150_resets,
3734        .num_resets = ARRAY_SIZE(gcc_sm8150_resets),
3735        .gdscs = gcc_sm8150_gdscs,
3736        .num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs),
3737};
3738
3739static const struct of_device_id gcc_sm8150_match_table[] = {
3740        { .compatible = "qcom,gcc-sm8150" },
3741        { }
3742};
3743MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table);
3744
3745static int gcc_sm8150_probe(struct platform_device *pdev)
3746{
3747        struct regmap *regmap;
3748
3749        regmap = qcom_cc_map(pdev, &gcc_sm8150_desc);
3750        if (IS_ERR(regmap))
3751                return PTR_ERR(regmap);
3752
3753        /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
3754        regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3755        regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3756
3757        return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap);
3758}
3759
3760static struct platform_driver gcc_sm8150_driver = {
3761        .probe          = gcc_sm8150_probe,
3762        .driver         = {
3763                .name   = "gcc-sm8150",
3764                .of_match_table = gcc_sm8150_match_table,
3765        },
3766};
3767
3768static int __init gcc_sm8150_init(void)
3769{
3770        return platform_driver_register(&gcc_sm8150_driver);
3771}
3772subsys_initcall(gcc_sm8150_init);
3773
3774static void __exit gcc_sm8150_exit(void)
3775{
3776        platform_driver_unregister(&gcc_sm8150_driver);
3777}
3778module_exit(gcc_sm8150_exit);
3779
3780MODULE_DESCRIPTION("QTI GCC SM8150 Driver");
3781MODULE_LICENSE("GPL v2");
3782