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