linux/drivers/clk/qcom/gcc-sc8180x.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
   4 * Copyright (c) 2020-2021, Linaro Ltd.
   5 */
   6
   7#include <linux/bitops.h>
   8#include <linux/clk-provider.h>
   9#include <linux/err.h>
  10#include <linux/kernel.h>
  11#include <linux/module.h>
  12#include <linux/of.h>
  13#include <linux/of_device.h>
  14#include <linux/platform_device.h>
  15#include <linux/regmap.h>
  16#include <linux/reset-controller.h>
  17
  18#include <dt-bindings/clock/qcom,gcc-sc8180x.h>
  19
  20#include "common.h"
  21#include "clk-alpha-pll.h"
  22#include "clk-branch.h"
  23#include "clk-pll.h"
  24#include "clk-rcg.h"
  25#include "clk-regmap.h"
  26#include "gdsc.h"
  27#include "reset.h"
  28
  29enum {
  30        P_AUD_REF_CLK,
  31        P_BI_TCXO,
  32        P_GPLL0_OUT_EVEN,
  33        P_GPLL0_OUT_MAIN,
  34        P_GPLL1_OUT_MAIN,
  35        P_GPLL2_OUT_MAIN,
  36        P_GPLL4_OUT_MAIN,
  37        P_GPLL5_OUT_MAIN,
  38        P_GPLL7_OUT_MAIN,
  39        P_GPLL9_OUT_MAIN,
  40        P_SLEEP_CLK,
  41};
  42
  43static struct pll_vco trion_vco[] = {
  44        { 249600000, 2000000000, 0 },
  45};
  46
  47static struct clk_alpha_pll gpll0 = {
  48        .offset = 0x0,
  49        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
  50        .vco_table = trion_vco,
  51        .num_vco = ARRAY_SIZE(trion_vco),
  52        .clkr = {
  53                .enable_reg = 0x52000,
  54                .enable_mask = BIT(0),
  55                .hw.init = &(struct clk_init_data){
  56                        .name = "gpll0",
  57                        .parent_data = &(const struct clk_parent_data){
  58                                .fw_name = "bi_tcxo",
  59                        },
  60                        .num_parents = 1,
  61                        .ops = &clk_alpha_pll_fixed_trion_ops,
  62                },
  63        },
  64};
  65
  66static const struct clk_div_table post_div_table_trion_even[] = {
  67        { 0x0, 1 },
  68        { 0x1, 2 },
  69        { 0x3, 4 },
  70        { 0x7, 8 },
  71        { }
  72};
  73
  74static struct clk_alpha_pll_postdiv gpll0_out_even = {
  75        .offset = 0x0,
  76        .post_div_shift = 8,
  77        .post_div_table = post_div_table_trion_even,
  78        .num_post_div = ARRAY_SIZE(post_div_table_trion_even),
  79        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
  80        .width = 4,
  81        .clkr.hw.init = &(struct clk_init_data){
  82                .name = "gpll0_out_even",
  83                .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
  84                .num_parents = 1,
  85                .ops = &clk_alpha_pll_postdiv_trion_ops,
  86        },
  87};
  88
  89static struct clk_alpha_pll gpll1 = {
  90        .offset = 0x1000,
  91        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
  92        .vco_table = trion_vco,
  93        .num_vco = ARRAY_SIZE(trion_vco),
  94        .clkr = {
  95                .enable_reg = 0x52000,
  96                .enable_mask = BIT(1),
  97                .hw.init = &(struct clk_init_data){
  98                        .name = "gpll1",
  99                        .parent_data = &(const struct clk_parent_data){
 100                                .fw_name = "bi_tcxo",
 101                        },
 102                        .num_parents = 1,
 103                        .ops = &clk_alpha_pll_fixed_trion_ops,
 104                },
 105        },
 106};
 107
 108static struct clk_alpha_pll gpll4 = {
 109        .offset = 0x76000,
 110        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
 111        .vco_table = trion_vco,
 112        .num_vco = ARRAY_SIZE(trion_vco),
 113        .clkr = {
 114                .enable_reg = 0x52000,
 115                .enable_mask = BIT(4),
 116                .hw.init = &(struct clk_init_data){
 117                        .name = "gpll4",
 118                        .parent_data = &(const struct clk_parent_data){
 119                                .fw_name = "bi_tcxo",
 120                        },
 121                        .num_parents = 1,
 122                        .ops = &clk_alpha_pll_fixed_trion_ops,
 123                },
 124        },
 125};
 126
 127static struct clk_alpha_pll gpll7 = {
 128        .offset = 0x1a000,
 129        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
 130        .vco_table = trion_vco,
 131        .num_vco = ARRAY_SIZE(trion_vco),
 132        .clkr = {
 133                .enable_reg = 0x52000,
 134                .enable_mask = BIT(7),
 135                .hw.init = &(struct clk_init_data){
 136                        .name = "gpll7",
 137                        .parent_data = &(const struct clk_parent_data){
 138                                .fw_name = "bi_tcxo",
 139                        },
 140                        .num_parents = 1,
 141                        .ops = &clk_alpha_pll_fixed_trion_ops,
 142                },
 143        },
 144};
 145
 146static const struct parent_map gcc_parent_map_0[] = {
 147        { P_BI_TCXO, 0 },
 148        { P_GPLL0_OUT_MAIN, 1 },
 149        { P_GPLL0_OUT_EVEN, 6 },
 150};
 151
 152static const struct clk_parent_data gcc_parents_0[] = {
 153        { .fw_name = "bi_tcxo" },
 154        { .hw = &gpll0.clkr.hw },
 155        { .hw = &gpll0_out_even.clkr.hw },
 156};
 157
 158static const struct parent_map gcc_parent_map_1[] = {
 159        { P_BI_TCXO, 0 },
 160        { P_GPLL0_OUT_MAIN, 1 },
 161        { P_SLEEP_CLK, 5 },
 162        { P_GPLL0_OUT_EVEN, 6 },
 163};
 164
 165static const struct clk_parent_data gcc_parents_1[] = {
 166        { .fw_name = "bi_tcxo", },
 167        { .hw = &gpll0.clkr.hw },
 168        { .fw_name = "sleep_clk", },
 169        { .hw = &gpll0_out_even.clkr.hw },
 170};
 171
 172static const struct parent_map gcc_parent_map_2[] = {
 173        { P_BI_TCXO, 0 },
 174        { P_SLEEP_CLK, 5 },
 175};
 176
 177static const struct clk_parent_data gcc_parents_2[] = {
 178        { .fw_name = "bi_tcxo", },
 179        { .fw_name = "sleep_clk", },
 180};
 181
 182static const struct parent_map gcc_parent_map_3[] = {
 183        { P_BI_TCXO, 0 },
 184        { P_GPLL0_OUT_MAIN, 1 },
 185        { P_GPLL2_OUT_MAIN, 2 },
 186        { P_GPLL5_OUT_MAIN, 3 },
 187        { P_GPLL1_OUT_MAIN, 4 },
 188        { P_GPLL4_OUT_MAIN, 5 },
 189        { P_GPLL0_OUT_EVEN, 6 },
 190};
 191
 192static const struct clk_parent_data gcc_parents_3[] = {
 193        { .fw_name = "bi_tcxo", },
 194        { .hw = &gpll0.clkr.hw },
 195        { .name = "gpll2" },
 196        { .name = "gpll5" },
 197        { .hw = &gpll1.clkr.hw },
 198        { .hw = &gpll4.clkr.hw },
 199        { .hw = &gpll0_out_even.clkr.hw },
 200};
 201
 202static const struct parent_map gcc_parent_map_4[] = {
 203        { P_BI_TCXO, 0 },
 204};
 205
 206static const struct clk_parent_data gcc_parents_4[] = {
 207        { .fw_name = "bi_tcxo", },
 208};
 209
 210static const struct parent_map gcc_parent_map_5[] = {
 211        { P_BI_TCXO, 0 },
 212        { P_GPLL0_OUT_MAIN, 1 },
 213};
 214
 215static const struct clk_parent_data gcc_parents_5[] = {
 216        { .fw_name = "bi_tcxo", },
 217        { .hw = &gpll0.clkr.hw },
 218};
 219
 220static const struct parent_map gcc_parent_map_6[] = {
 221        { P_BI_TCXO, 0 },
 222        { P_GPLL0_OUT_MAIN, 1 },
 223        { P_GPLL7_OUT_MAIN, 3 },
 224        { P_GPLL0_OUT_EVEN, 6 },
 225};
 226
 227static const struct clk_parent_data gcc_parents_6[] = {
 228        { .fw_name = "bi_tcxo", },
 229        { .hw = &gpll0.clkr.hw },
 230        { .hw = &gpll7.clkr.hw },
 231        { .hw = &gpll0_out_even.clkr.hw },
 232};
 233
 234static const struct parent_map gcc_parent_map_7[] = {
 235        { P_BI_TCXO, 0 },
 236        { P_GPLL0_OUT_MAIN, 1 },
 237        { P_GPLL9_OUT_MAIN, 2 },
 238        { P_GPLL4_OUT_MAIN, 5 },
 239        { P_GPLL0_OUT_EVEN, 6 },
 240};
 241
 242static const struct clk_parent_data gcc_parents_7[] = {
 243        { .fw_name = "bi_tcxo", },
 244        { .hw = &gpll0.clkr.hw },
 245        { .name = "gppl9" },
 246        { .hw = &gpll4.clkr.hw },
 247        { .hw = &gpll0_out_even.clkr.hw },
 248};
 249
 250static const struct parent_map gcc_parent_map_8[] = {
 251        { P_BI_TCXO, 0 },
 252        { P_GPLL0_OUT_MAIN, 1 },
 253        { P_AUD_REF_CLK, 2 },
 254        { P_GPLL0_OUT_EVEN, 6 },
 255};
 256
 257static const struct clk_parent_data gcc_parents_8[] = {
 258        { .fw_name = "bi_tcxo", },
 259        { .hw = &gpll0.clkr.hw },
 260        { .name = "aud_ref_clk" },
 261        { .hw = &gpll0_out_even.clkr.hw },
 262};
 263
 264static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
 265        F(19200000, P_BI_TCXO, 1, 0, 0),
 266        F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
 267        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 268        { }
 269};
 270
 271static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
 272        .cmd_rcgr = 0x48014,
 273        .mnd_width = 0,
 274        .hid_width = 5,
 275        .parent_map = gcc_parent_map_0,
 276        .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
 277        .clkr.hw.init = &(struct clk_init_data){
 278                .name = "gcc_cpuss_ahb_clk_src",
 279                .parent_data = gcc_parents_0,
 280                .num_parents = ARRAY_SIZE(gcc_parents_0),
 281                .flags = CLK_SET_RATE_PARENT,
 282                .ops = &clk_rcg2_ops,
 283        },
 284};
 285
 286static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
 287        F(19200000, P_BI_TCXO, 1, 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_ptp_clk_src = {
 295        .cmd_rcgr = 0x6038,
 296        .mnd_width = 0,
 297        .hid_width = 5,
 298        .parent_map = gcc_parent_map_6,
 299        .freq_tbl = ftbl_gcc_emac_ptp_clk_src,
 300        .clkr.hw.init = &(struct clk_init_data){
 301                .name = "gcc_emac_ptp_clk_src",
 302                .parent_data = gcc_parents_6,
 303                .num_parents = ARRAY_SIZE(gcc_parents_6),
 304                .flags = CLK_SET_RATE_PARENT,
 305                .ops = &clk_rcg2_ops,
 306        },
 307};
 308
 309static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
 310        F(2500000, P_BI_TCXO, 1, 25, 192),
 311        F(5000000, P_BI_TCXO, 1, 25, 96),
 312        F(19200000, P_BI_TCXO, 1, 0, 0),
 313        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 314        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 315        F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
 316        F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
 317        { }
 318};
 319
 320static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
 321        .cmd_rcgr = 0x601c,
 322        .mnd_width = 8,
 323        .hid_width = 5,
 324        .parent_map = gcc_parent_map_6,
 325        .freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
 326        .clkr.hw.init = &(struct clk_init_data){
 327                .name = "gcc_emac_rgmii_clk_src",
 328                .parent_data = gcc_parents_6,
 329                .num_parents = ARRAY_SIZE(gcc_parents_6),
 330                .flags = CLK_SET_RATE_PARENT,
 331                .ops = &clk_rcg2_ops,
 332        },
 333};
 334
 335static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
 336        F(19200000, P_BI_TCXO, 1, 0, 0),
 337        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 338        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 339        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 340        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
 341        { }
 342};
 343
 344static struct clk_rcg2 gcc_gp1_clk_src = {
 345        .cmd_rcgr = 0x64004,
 346        .mnd_width = 8,
 347        .hid_width = 5,
 348        .parent_map = gcc_parent_map_1,
 349        .freq_tbl = ftbl_gcc_gp1_clk_src,
 350        .clkr.hw.init = &(struct clk_init_data){
 351                .name = "gcc_gp1_clk_src",
 352                .parent_data = gcc_parents_1,
 353                .num_parents = ARRAY_SIZE(gcc_parents_1),
 354                .flags = CLK_SET_RATE_PARENT,
 355                .ops = &clk_rcg2_ops,
 356        },
 357};
 358
 359static struct clk_rcg2 gcc_gp2_clk_src = {
 360        .cmd_rcgr = 0x65004,
 361        .mnd_width = 8,
 362        .hid_width = 5,
 363        .parent_map = gcc_parent_map_1,
 364        .freq_tbl = ftbl_gcc_gp1_clk_src,
 365        .clkr.hw.init = &(struct clk_init_data){
 366                .name = "gcc_gp2_clk_src",
 367                .parent_data = gcc_parents_1,
 368                .num_parents = ARRAY_SIZE(gcc_parents_1),
 369                .flags = CLK_SET_RATE_PARENT,
 370                .ops = &clk_rcg2_ops,
 371        },
 372};
 373
 374static struct clk_rcg2 gcc_gp3_clk_src = {
 375        .cmd_rcgr = 0x66004,
 376        .mnd_width = 8,
 377        .hid_width = 5,
 378        .parent_map = gcc_parent_map_1,
 379        .freq_tbl = ftbl_gcc_gp1_clk_src,
 380        .clkr.hw.init = &(struct clk_init_data){
 381                .name = "gcc_gp3_clk_src",
 382                .parent_data = gcc_parents_1,
 383                .num_parents = ARRAY_SIZE(gcc_parents_1),
 384                .flags = CLK_SET_RATE_PARENT,
 385                .ops = &clk_rcg2_ops,
 386        },
 387};
 388
 389static struct clk_rcg2 gcc_gp4_clk_src = {
 390        .cmd_rcgr = 0xbe004,
 391        .mnd_width = 8,
 392        .hid_width = 5,
 393        .parent_map = gcc_parent_map_1,
 394        .freq_tbl = ftbl_gcc_gp1_clk_src,
 395        .clkr.hw.init = &(struct clk_init_data){
 396                .name = "gcc_gp4_clk_src",
 397                .parent_data = gcc_parents_1,
 398                .num_parents = ARRAY_SIZE(gcc_parents_1),
 399                .flags = CLK_SET_RATE_PARENT,
 400                .ops = &clk_rcg2_ops,
 401        },
 402};
 403
 404static struct clk_rcg2 gcc_gp5_clk_src = {
 405        .cmd_rcgr = 0xbf004,
 406        .mnd_width = 8,
 407        .hid_width = 5,
 408        .parent_map = gcc_parent_map_1,
 409        .freq_tbl = ftbl_gcc_gp1_clk_src,
 410        .clkr.hw.init = &(struct clk_init_data){
 411                .name = "gcc_gp5_clk_src",
 412                .parent_data = gcc_parents_1,
 413                .num_parents = ARRAY_SIZE(gcc_parents_1),
 414                .flags = CLK_SET_RATE_PARENT,
 415                .ops = &clk_rcg2_ops,
 416        },
 417};
 418
 419static const struct freq_tbl ftbl_gcc_npu_axi_clk_src[] = {
 420        F(19200000, P_BI_TCXO, 1, 0, 0),
 421        F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
 422        F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
 423        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
 424        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 425        F(403000000, P_GPLL4_OUT_MAIN, 2, 0, 0),
 426        F(533000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
 427        { }
 428};
 429
 430static struct clk_rcg2 gcc_npu_axi_clk_src = {
 431        .cmd_rcgr = 0x4d014,
 432        .mnd_width = 0,
 433        .hid_width = 5,
 434        .parent_map = gcc_parent_map_3,
 435        .freq_tbl = ftbl_gcc_npu_axi_clk_src,
 436        .clkr.hw.init = &(struct clk_init_data){
 437                .name = "gcc_npu_axi_clk_src",
 438                .parent_data = gcc_parents_3,
 439                .num_parents = ARRAY_SIZE(gcc_parents_3),
 440                .flags = CLK_SET_RATE_PARENT,
 441                .ops = &clk_rcg2_ops,
 442        },
 443};
 444
 445static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
 446        F(9600000, P_BI_TCXO, 2, 0, 0),
 447        F(19200000, P_BI_TCXO, 1, 0, 0),
 448        { }
 449};
 450
 451static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
 452        .cmd_rcgr = 0x6b02c,
 453        .mnd_width = 16,
 454        .hid_width = 5,
 455        .parent_map = gcc_parent_map_2,
 456        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 457        .clkr.hw.init = &(struct clk_init_data){
 458                .name = "gcc_pcie_0_aux_clk_src",
 459                .parent_data = gcc_parents_2,
 460                .num_parents = ARRAY_SIZE(gcc_parents_2),
 461                .flags = CLK_SET_RATE_PARENT,
 462                .ops = &clk_rcg2_ops,
 463        },
 464};
 465
 466static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
 467        .cmd_rcgr = 0x8d02c,
 468        .mnd_width = 16,
 469        .hid_width = 5,
 470        .parent_map = gcc_parent_map_2,
 471        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 472        .clkr.hw.init = &(struct clk_init_data){
 473                .name = "gcc_pcie_1_aux_clk_src",
 474                .parent_data = gcc_parents_2,
 475                .num_parents = ARRAY_SIZE(gcc_parents_2),
 476                .flags = CLK_SET_RATE_PARENT,
 477                .ops = &clk_rcg2_ops,
 478        },
 479};
 480
 481static struct clk_rcg2 gcc_pcie_2_aux_clk_src = {
 482        .cmd_rcgr = 0x9d02c,
 483        .mnd_width = 16,
 484        .hid_width = 5,
 485        .parent_map = gcc_parent_map_2,
 486        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 487        .clkr.hw.init = &(struct clk_init_data){
 488                .name = "gcc_pcie_2_aux_clk_src",
 489                .parent_data = gcc_parents_2,
 490                .num_parents = ARRAY_SIZE(gcc_parents_2),
 491                .flags = CLK_SET_RATE_PARENT,
 492                .ops = &clk_rcg2_ops,
 493        },
 494};
 495
 496static struct clk_rcg2 gcc_pcie_3_aux_clk_src = {
 497        .cmd_rcgr = 0xa302c,
 498        .mnd_width = 16,
 499        .hid_width = 5,
 500        .parent_map = gcc_parent_map_2,
 501        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 502        .clkr.hw.init = &(struct clk_init_data){
 503                .name = "gcc_pcie_3_aux_clk_src",
 504                .parent_data = gcc_parents_2,
 505                .num_parents = ARRAY_SIZE(gcc_parents_2),
 506                .flags = CLK_SET_RATE_PARENT,
 507                .ops = &clk_rcg2_ops,
 508        },
 509};
 510
 511static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
 512        F(19200000, P_BI_TCXO, 1, 0, 0),
 513        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 514        { }
 515};
 516
 517static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
 518        .cmd_rcgr = 0x6f014,
 519        .mnd_width = 0,
 520        .hid_width = 5,
 521        .parent_map = gcc_parent_map_0,
 522        .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
 523        .clkr.hw.init = &(struct clk_init_data){
 524                .name = "gcc_pcie_phy_refgen_clk_src",
 525                .parent_data = gcc_parents_0,
 526                .num_parents = ARRAY_SIZE(gcc_parents_0),
 527                .flags = CLK_SET_RATE_PARENT,
 528                .ops = &clk_rcg2_ops,
 529        },
 530};
 531
 532static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
 533        F(9600000, P_BI_TCXO, 2, 0, 0),
 534        F(19200000, P_BI_TCXO, 1, 0, 0),
 535        F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
 536        { }
 537};
 538
 539static struct clk_rcg2 gcc_pdm2_clk_src = {
 540        .cmd_rcgr = 0x33010,
 541        .mnd_width = 0,
 542        .hid_width = 5,
 543        .parent_map = gcc_parent_map_0,
 544        .freq_tbl = ftbl_gcc_pdm2_clk_src,
 545        .clkr.hw.init = &(struct clk_init_data){
 546                .name = "gcc_pdm2_clk_src",
 547                .parent_data = gcc_parents_0,
 548                .num_parents = ARRAY_SIZE(gcc_parents_0),
 549                .flags = CLK_SET_RATE_PARENT,
 550                .ops = &clk_rcg2_ops,
 551        },
 552};
 553
 554static const struct freq_tbl ftbl_gcc_qspi_1_core_clk_src[] = {
 555        F(19200000, P_BI_TCXO, 1, 0, 0),
 556        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 557        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 558        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 559        { }
 560};
 561
 562static struct clk_rcg2 gcc_qspi_1_core_clk_src = {
 563        .cmd_rcgr = 0x4a00c,
 564        .mnd_width = 0,
 565        .hid_width = 5,
 566        .parent_map = gcc_parent_map_0,
 567        .freq_tbl = ftbl_gcc_qspi_1_core_clk_src,
 568        .clkr.hw.init = &(struct clk_init_data){
 569                .name = "gcc_qspi_1_core_clk_src",
 570                .parent_data = gcc_parents_0,
 571                .num_parents = ARRAY_SIZE(gcc_parents_0),
 572                .flags = CLK_SET_RATE_PARENT,
 573                .ops = &clk_rcg2_ops,
 574        },
 575};
 576
 577static struct clk_rcg2 gcc_qspi_core_clk_src = {
 578        .cmd_rcgr = 0x4b008,
 579        .mnd_width = 0,
 580        .hid_width = 5,
 581        .parent_map = gcc_parent_map_0,
 582        .freq_tbl = ftbl_gcc_qspi_1_core_clk_src,
 583        .clkr.hw.init = &(struct clk_init_data){
 584                .name = "gcc_qspi_core_clk_src",
 585                .parent_data = gcc_parents_0,
 586                .num_parents = ARRAY_SIZE(gcc_parents_0),
 587                .flags = CLK_SET_RATE_PARENT,
 588                .ops = &clk_rcg2_ops,
 589        },
 590};
 591
 592static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
 593        F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
 594        F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
 595        F(19200000, P_BI_TCXO, 1, 0, 0),
 596        F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
 597        F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
 598        F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
 599        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 600        F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
 601        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 602        F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
 603        F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
 604        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 605        F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
 606        F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
 607        F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
 608        F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
 609        F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
 610        { }
 611};
 612
 613static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
 614        .cmd_rcgr = 0x17148,
 615        .mnd_width = 16,
 616        .hid_width = 5,
 617        .parent_map = gcc_parent_map_0,
 618        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 619        .clkr.hw.init = &(struct clk_init_data){
 620                .name = "gcc_qupv3_wrap0_s0_clk_src",
 621                .parent_data = gcc_parents_0,
 622                .num_parents = ARRAY_SIZE(gcc_parents_0),
 623                .flags = CLK_SET_RATE_PARENT,
 624                .ops = &clk_rcg2_ops,
 625        },
 626};
 627
 628static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
 629        .cmd_rcgr = 0x17278,
 630        .mnd_width = 16,
 631        .hid_width = 5,
 632        .parent_map = gcc_parent_map_0,
 633        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 634        .clkr.hw.init = &(struct clk_init_data){
 635                .name = "gcc_qupv3_wrap0_s1_clk_src",
 636                .parent_data = gcc_parents_0,
 637                .num_parents = ARRAY_SIZE(gcc_parents_0),
 638                .flags = CLK_SET_RATE_PARENT,
 639                .ops = &clk_rcg2_ops,
 640        },
 641};
 642
 643static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
 644        .cmd_rcgr = 0x173a8,
 645        .mnd_width = 16,
 646        .hid_width = 5,
 647        .parent_map = gcc_parent_map_0,
 648        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 649        .clkr.hw.init = &(struct clk_init_data){
 650                .name = "gcc_qupv3_wrap0_s2_clk_src",
 651                .parent_data = gcc_parents_0,
 652                .num_parents = ARRAY_SIZE(gcc_parents_0),
 653                .flags = CLK_SET_RATE_PARENT,
 654                .ops = &clk_rcg2_ops,
 655        },
 656};
 657
 658static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
 659        .cmd_rcgr = 0x174d8,
 660        .mnd_width = 16,
 661        .hid_width = 5,
 662        .parent_map = gcc_parent_map_0,
 663        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 664        .clkr.hw.init = &(struct clk_init_data){
 665                .name = "gcc_qupv3_wrap0_s3_clk_src",
 666                .parent_data = gcc_parents_0,
 667                .num_parents = ARRAY_SIZE(gcc_parents_0),
 668                .flags = CLK_SET_RATE_PARENT,
 669                .ops = &clk_rcg2_ops,
 670        },
 671};
 672
 673static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
 674        .cmd_rcgr = 0x17608,
 675        .mnd_width = 16,
 676        .hid_width = 5,
 677        .parent_map = gcc_parent_map_0,
 678        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 679        .clkr.hw.init = &(struct clk_init_data){
 680                .name = "gcc_qupv3_wrap0_s4_clk_src",
 681                .parent_data = gcc_parents_0,
 682                .num_parents = ARRAY_SIZE(gcc_parents_0),
 683                .flags = CLK_SET_RATE_PARENT,
 684                .ops = &clk_rcg2_ops,
 685        },
 686};
 687
 688static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
 689        .cmd_rcgr = 0x17738,
 690        .mnd_width = 16,
 691        .hid_width = 5,
 692        .parent_map = gcc_parent_map_0,
 693        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 694        .clkr.hw.init = &(struct clk_init_data){
 695                .name = "gcc_qupv3_wrap0_s5_clk_src",
 696                .parent_data = gcc_parents_0,
 697                .num_parents = ARRAY_SIZE(gcc_parents_0),
 698                .flags = CLK_SET_RATE_PARENT,
 699                .ops = &clk_rcg2_ops,
 700        },
 701};
 702
 703static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
 704        .cmd_rcgr = 0x17868,
 705        .mnd_width = 16,
 706        .hid_width = 5,
 707        .parent_map = gcc_parent_map_0,
 708        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 709        .clkr.hw.init = &(struct clk_init_data){
 710                .name = "gcc_qupv3_wrap0_s6_clk_src",
 711                .parent_data = gcc_parents_0,
 712                .num_parents = ARRAY_SIZE(gcc_parents_0),
 713                .flags = CLK_SET_RATE_PARENT,
 714                .ops = &clk_rcg2_ops,
 715        },
 716};
 717
 718static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
 719        .cmd_rcgr = 0x17998,
 720        .mnd_width = 16,
 721        .hid_width = 5,
 722        .parent_map = gcc_parent_map_0,
 723        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 724        .clkr.hw.init = &(struct clk_init_data){
 725                .name = "gcc_qupv3_wrap0_s7_clk_src",
 726                .parent_data = gcc_parents_0,
 727                .num_parents = ARRAY_SIZE(gcc_parents_0),
 728                .flags = CLK_SET_RATE_PARENT,
 729                .ops = &clk_rcg2_ops,
 730        },
 731};
 732
 733static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
 734        .cmd_rcgr = 0x18148,
 735        .mnd_width = 16,
 736        .hid_width = 5,
 737        .parent_map = gcc_parent_map_0,
 738        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 739        .clkr.hw.init = &(struct clk_init_data){
 740                .name = "gcc_qupv3_wrap1_s0_clk_src",
 741                .parent_data = gcc_parents_0,
 742                .num_parents = ARRAY_SIZE(gcc_parents_0),
 743                .flags = CLK_SET_RATE_PARENT,
 744                .ops = &clk_rcg2_ops,
 745        },
 746};
 747
 748static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
 749        .cmd_rcgr = 0x18278,
 750        .mnd_width = 16,
 751        .hid_width = 5,
 752        .parent_map = gcc_parent_map_0,
 753        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 754        .clkr.hw.init = &(struct clk_init_data){
 755                .name = "gcc_qupv3_wrap1_s1_clk_src",
 756                .parent_data = gcc_parents_0,
 757                .num_parents = ARRAY_SIZE(gcc_parents_0),
 758                .flags = CLK_SET_RATE_PARENT,
 759                .ops = &clk_rcg2_ops,
 760        },
 761};
 762
 763static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
 764        .cmd_rcgr = 0x183a8,
 765        .mnd_width = 16,
 766        .hid_width = 5,
 767        .parent_map = gcc_parent_map_0,
 768        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 769        .clkr.hw.init = &(struct clk_init_data){
 770                .name = "gcc_qupv3_wrap1_s2_clk_src",
 771                .parent_data = gcc_parents_0,
 772                .num_parents = ARRAY_SIZE(gcc_parents_0),
 773                .flags = CLK_SET_RATE_PARENT,
 774                .ops = &clk_rcg2_ops,
 775        },
 776};
 777
 778static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
 779        .cmd_rcgr = 0x184d8,
 780        .mnd_width = 16,
 781        .hid_width = 5,
 782        .parent_map = gcc_parent_map_0,
 783        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 784        .clkr.hw.init = &(struct clk_init_data){
 785                .name = "gcc_qupv3_wrap1_s3_clk_src",
 786                .parent_data = gcc_parents_0,
 787                .num_parents = ARRAY_SIZE(gcc_parents_0),
 788                .flags = CLK_SET_RATE_PARENT,
 789                .ops = &clk_rcg2_ops,
 790        },
 791};
 792
 793static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
 794        .cmd_rcgr = 0x18608,
 795        .mnd_width = 16,
 796        .hid_width = 5,
 797        .parent_map = gcc_parent_map_0,
 798        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 799        .clkr.hw.init = &(struct clk_init_data){
 800                .name = "gcc_qupv3_wrap1_s4_clk_src",
 801                .parent_data = gcc_parents_0,
 802                .num_parents = ARRAY_SIZE(gcc_parents_0),
 803                .flags = CLK_SET_RATE_PARENT,
 804                .ops = &clk_rcg2_ops,
 805        },
 806};
 807
 808static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
 809        .cmd_rcgr = 0x18738,
 810        .mnd_width = 16,
 811        .hid_width = 5,
 812        .parent_map = gcc_parent_map_0,
 813        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 814        .clkr.hw.init = &(struct clk_init_data){
 815                .name = "gcc_qupv3_wrap1_s5_clk_src",
 816                .parent_data = gcc_parents_0,
 817                .num_parents = ARRAY_SIZE(gcc_parents_0),
 818                .flags = CLK_SET_RATE_PARENT,
 819                .ops = &clk_rcg2_ops,
 820        },
 821};
 822
 823static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
 824        .cmd_rcgr = 0x1e148,
 825        .mnd_width = 16,
 826        .hid_width = 5,
 827        .parent_map = gcc_parent_map_0,
 828        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 829        .clkr.hw.init = &(struct clk_init_data){
 830                .name = "gcc_qupv3_wrap2_s0_clk_src",
 831                .parent_data = gcc_parents_0,
 832                .num_parents = ARRAY_SIZE(gcc_parents_0),
 833                .flags = CLK_SET_RATE_PARENT,
 834                .ops = &clk_rcg2_ops,
 835        },
 836};
 837
 838static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
 839        .cmd_rcgr = 0x1e278,
 840        .mnd_width = 16,
 841        .hid_width = 5,
 842        .parent_map = gcc_parent_map_0,
 843        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 844        .clkr.hw.init = &(struct clk_init_data){
 845                .name = "gcc_qupv3_wrap2_s1_clk_src",
 846                .parent_data = gcc_parents_0,
 847                .num_parents = ARRAY_SIZE(gcc_parents_0),
 848                .flags = CLK_SET_RATE_PARENT,
 849                .ops = &clk_rcg2_ops,
 850        },
 851};
 852
 853static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
 854        .cmd_rcgr = 0x1e3a8,
 855        .mnd_width = 16,
 856        .hid_width = 5,
 857        .parent_map = gcc_parent_map_0,
 858        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 859        .clkr.hw.init = &(struct clk_init_data){
 860                .name = "gcc_qupv3_wrap2_s2_clk_src",
 861                .parent_data = gcc_parents_0,
 862                .num_parents = ARRAY_SIZE(gcc_parents_0),
 863                .flags = CLK_SET_RATE_PARENT,
 864                .ops = &clk_rcg2_ops,
 865        },
 866};
 867
 868static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
 869        .cmd_rcgr = 0x1e4d8,
 870        .mnd_width = 16,
 871        .hid_width = 5,
 872        .parent_map = gcc_parent_map_0,
 873        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 874        .clkr.hw.init = &(struct clk_init_data){
 875                .name = "gcc_qupv3_wrap2_s3_clk_src",
 876                .parent_data = gcc_parents_0,
 877                .num_parents = ARRAY_SIZE(gcc_parents_0),
 878                .flags = CLK_SET_RATE_PARENT,
 879                .ops = &clk_rcg2_ops,
 880        },
 881};
 882
 883static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
 884        .cmd_rcgr = 0x1e608,
 885        .mnd_width = 16,
 886        .hid_width = 5,
 887        .parent_map = gcc_parent_map_0,
 888        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 889        .clkr.hw.init = &(struct clk_init_data){
 890                .name = "gcc_qupv3_wrap2_s4_clk_src",
 891                .parent_data = gcc_parents_0,
 892                .num_parents = ARRAY_SIZE(gcc_parents_0),
 893                .flags = CLK_SET_RATE_PARENT,
 894                .ops = &clk_rcg2_ops,
 895        },
 896};
 897
 898static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
 899        .cmd_rcgr = 0x1e738,
 900        .mnd_width = 16,
 901        .hid_width = 5,
 902        .parent_map = gcc_parent_map_0,
 903        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 904        .clkr.hw.init = &(struct clk_init_data){
 905                .name = "gcc_qupv3_wrap2_s5_clk_src",
 906                .parent_data = gcc_parents_0,
 907                .num_parents = ARRAY_SIZE(gcc_parents_0),
 908                .flags = CLK_SET_RATE_PARENT,
 909                .ops = &clk_rcg2_ops,
 910        },
 911};
 912
 913static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
 914        F(400000, P_BI_TCXO, 12, 1, 4),
 915        F(9600000, P_BI_TCXO, 2, 0, 0),
 916        F(19200000, P_BI_TCXO, 1, 0, 0),
 917        F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
 918        F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
 919        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
 920        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
 921        { }
 922};
 923
 924static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
 925        .cmd_rcgr = 0x1400c,
 926        .mnd_width = 8,
 927        .hid_width = 5,
 928        .parent_map = gcc_parent_map_7,
 929        .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
 930        .clkr.hw.init = &(struct clk_init_data){
 931                .name = "gcc_sdcc2_apps_clk_src",
 932                .parent_data = gcc_parents_7,
 933                .num_parents = ARRAY_SIZE(gcc_parents_7),
 934                .flags = CLK_SET_RATE_PARENT,
 935                .ops = &clk_rcg2_floor_ops,
 936        },
 937};
 938
 939static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
 940        F(400000, P_BI_TCXO, 12, 1, 4),
 941        F(9600000, P_BI_TCXO, 2, 0, 0),
 942        F(19200000, P_BI_TCXO, 1, 0, 0),
 943        F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0),
 944        F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
 945        F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
 946        { }
 947};
 948
 949static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
 950        .cmd_rcgr = 0x1600c,
 951        .mnd_width = 8,
 952        .hid_width = 5,
 953        .parent_map = gcc_parent_map_5,
 954        .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
 955        .clkr.hw.init = &(struct clk_init_data){
 956                .name = "gcc_sdcc4_apps_clk_src",
 957                .parent_data = gcc_parents_5,
 958                .num_parents = ARRAY_SIZE(gcc_parents_5),
 959                .flags = CLK_SET_RATE_PARENT,
 960                .ops = &clk_rcg2_floor_ops,
 961        },
 962};
 963
 964static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
 965        F(105495, P_BI_TCXO, 2, 1, 91),
 966        { }
 967};
 968
 969static struct clk_rcg2 gcc_tsif_ref_clk_src = {
 970        .cmd_rcgr = 0x36010,
 971        .mnd_width = 8,
 972        .hid_width = 5,
 973        .parent_map = gcc_parent_map_8,
 974        .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
 975        .clkr.hw.init = &(struct clk_init_data){
 976                .name = "gcc_tsif_ref_clk_src",
 977                .parent_data = gcc_parents_8,
 978                .num_parents = ARRAY_SIZE(gcc_parents_8),
 979                .flags = CLK_SET_RATE_PARENT,
 980                .ops = &clk_rcg2_ops,
 981        },
 982};
 983
 984static const struct freq_tbl ftbl_gcc_ufs_card_2_axi_clk_src[] = {
 985        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
 986        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 987        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 988        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 989        { }
 990};
 991
 992static struct clk_rcg2 gcc_ufs_card_2_axi_clk_src = {
 993        .cmd_rcgr = 0xa2020,
 994        .mnd_width = 8,
 995        .hid_width = 5,
 996        .parent_map = gcc_parent_map_0,
 997        .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
 998        .clkr.hw.init = &(struct clk_init_data){
 999                .name = "gcc_ufs_card_2_axi_clk_src",
1000                .parent_data = gcc_parents_0,
1001                .num_parents = ARRAY_SIZE(gcc_parents_0),
1002                .flags = CLK_SET_RATE_PARENT,
1003                .ops = &clk_rcg2_ops,
1004        },
1005};
1006
1007static struct clk_rcg2 gcc_ufs_card_2_ice_core_clk_src = {
1008        .cmd_rcgr = 0xa2060,
1009        .mnd_width = 0,
1010        .hid_width = 5,
1011        .parent_map = gcc_parent_map_0,
1012        .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1013        .clkr.hw.init = &(struct clk_init_data){
1014                .name = "gcc_ufs_card_2_ice_core_clk_src",
1015                .parent_data = gcc_parents_0,
1016                .num_parents = ARRAY_SIZE(gcc_parents_0),
1017                .flags = CLK_SET_RATE_PARENT,
1018                .ops = &clk_rcg2_ops,
1019        },
1020};
1021
1022static const struct freq_tbl ftbl_gcc_ufs_card_2_phy_aux_clk_src[] = {
1023        F(19200000, P_BI_TCXO, 1, 0, 0),
1024        { }
1025};
1026
1027static struct clk_rcg2 gcc_ufs_card_2_phy_aux_clk_src = {
1028        .cmd_rcgr = 0xa2094,
1029        .mnd_width = 0,
1030        .hid_width = 5,
1031        .parent_map = gcc_parent_map_4,
1032        .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1033        .clkr.hw.init = &(struct clk_init_data){
1034                .name = "gcc_ufs_card_2_phy_aux_clk_src",
1035                .parent_data = gcc_parents_4,
1036                .num_parents = ARRAY_SIZE(gcc_parents_4),
1037                .flags = CLK_SET_RATE_PARENT,
1038                .ops = &clk_rcg2_ops,
1039        },
1040};
1041
1042static struct clk_rcg2 gcc_ufs_card_2_unipro_core_clk_src = {
1043        .cmd_rcgr = 0xa2078,
1044        .mnd_width = 0,
1045        .hid_width = 5,
1046        .parent_map = gcc_parent_map_0,
1047        .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1048        .clkr.hw.init = &(struct clk_init_data){
1049                .name = "gcc_ufs_card_2_unipro_core_clk_src",
1050                .parent_data = gcc_parents_0,
1051                .num_parents = ARRAY_SIZE(gcc_parents_0),
1052                .flags = CLK_SET_RATE_PARENT,
1053                .ops = &clk_rcg2_ops,
1054        },
1055};
1056
1057static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
1058        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1059        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
1060        F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
1061        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1062        F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1063        { }
1064};
1065
1066static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
1067        .cmd_rcgr = 0x75020,
1068        .mnd_width = 8,
1069        .hid_width = 5,
1070        .parent_map = gcc_parent_map_0,
1071        .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1072        .clkr.hw.init = &(struct clk_init_data){
1073                .name = "gcc_ufs_card_axi_clk_src",
1074                .parent_data = gcc_parents_0,
1075                .num_parents = ARRAY_SIZE(gcc_parents_0),
1076                .flags = CLK_SET_RATE_PARENT,
1077                .ops = &clk_rcg2_ops,
1078        },
1079};
1080
1081static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
1082        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1083        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1084        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1085        { }
1086};
1087
1088static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
1089        .cmd_rcgr = 0x75060,
1090        .mnd_width = 0,
1091        .hid_width = 5,
1092        .parent_map = gcc_parent_map_0,
1093        .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1094        .clkr.hw.init = &(struct clk_init_data){
1095                .name = "gcc_ufs_card_ice_core_clk_src",
1096                .parent_data = gcc_parents_0,
1097                .num_parents = ARRAY_SIZE(gcc_parents_0),
1098                .flags = CLK_SET_RATE_PARENT,
1099                .ops = &clk_rcg2_ops,
1100        },
1101};
1102
1103static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
1104        .cmd_rcgr = 0x75094,
1105        .mnd_width = 0,
1106        .hid_width = 5,
1107        .parent_map = gcc_parent_map_4,
1108        .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1109        .clkr.hw.init = &(struct clk_init_data){
1110                .name = "gcc_ufs_card_phy_aux_clk_src",
1111                .parent_data = gcc_parents_4,
1112                .num_parents = ARRAY_SIZE(gcc_parents_4),
1113                .flags = CLK_SET_RATE_PARENT,
1114                .ops = &clk_rcg2_ops,
1115        },
1116};
1117
1118static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
1119        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1120        F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1121        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1122        { }
1123};
1124
1125static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
1126        .cmd_rcgr = 0x75078,
1127        .mnd_width = 0,
1128        .hid_width = 5,
1129        .parent_map = gcc_parent_map_0,
1130        .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
1131        .clkr.hw.init = &(struct clk_init_data){
1132                .name = "gcc_ufs_card_unipro_core_clk_src",
1133                .parent_data = gcc_parents_0,
1134                .num_parents = ARRAY_SIZE(gcc_parents_0),
1135                .flags = CLK_SET_RATE_PARENT,
1136                .ops = &clk_rcg2_ops,
1137        },
1138};
1139
1140static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1141        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1142        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1143        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1144        F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1145        F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1146        { }
1147};
1148
1149static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1150        .cmd_rcgr = 0x77020,
1151        .mnd_width = 8,
1152        .hid_width = 5,
1153        .parent_map = gcc_parent_map_0,
1154        .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1155        .clkr.hw.init = &(struct clk_init_data){
1156                .name = "gcc_ufs_phy_axi_clk_src",
1157                .parent_data = gcc_parents_0,
1158                .num_parents = ARRAY_SIZE(gcc_parents_0),
1159                .flags = CLK_SET_RATE_PARENT,
1160                .ops = &clk_rcg2_ops,
1161        },
1162};
1163
1164static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1165        .cmd_rcgr = 0x77060,
1166        .mnd_width = 0,
1167        .hid_width = 5,
1168        .parent_map = gcc_parent_map_0,
1169        .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1170        .clkr.hw.init = &(struct clk_init_data){
1171                .name = "gcc_ufs_phy_ice_core_clk_src",
1172                .parent_data = gcc_parents_0,
1173                .num_parents = ARRAY_SIZE(gcc_parents_0),
1174                .flags = CLK_SET_RATE_PARENT,
1175                .ops = &clk_rcg2_ops,
1176        },
1177};
1178
1179static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1180        .cmd_rcgr = 0x77094,
1181        .mnd_width = 0,
1182        .hid_width = 5,
1183        .parent_map = gcc_parent_map_4,
1184        .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1185        .clkr.hw.init = &(struct clk_init_data){
1186                .name = "gcc_ufs_phy_phy_aux_clk_src",
1187                .parent_data = gcc_parents_4,
1188                .num_parents = ARRAY_SIZE(gcc_parents_4),
1189                .flags = CLK_SET_RATE_PARENT,
1190                .ops = &clk_rcg2_ops,
1191        },
1192};
1193
1194static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1195        .cmd_rcgr = 0x77078,
1196        .mnd_width = 0,
1197        .hid_width = 5,
1198        .parent_map = gcc_parent_map_0,
1199        .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1200        .clkr.hw.init = &(struct clk_init_data){
1201                .name = "gcc_ufs_phy_unipro_core_clk_src",
1202                .parent_data = gcc_parents_0,
1203                .num_parents = ARRAY_SIZE(gcc_parents_0),
1204                .flags = CLK_SET_RATE_PARENT,
1205                .ops = &clk_rcg2_ops,
1206        },
1207};
1208
1209static const struct freq_tbl ftbl_gcc_usb30_mp_master_clk_src[] = {
1210        F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1211        F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1212        F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1213        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1214        F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1215        { }
1216};
1217
1218static struct clk_rcg2 gcc_usb30_mp_master_clk_src = {
1219        .cmd_rcgr = 0xa601c,
1220        .mnd_width = 8,
1221        .hid_width = 5,
1222        .parent_map = gcc_parent_map_0,
1223        .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1224        .clkr.hw.init = &(struct clk_init_data){
1225                .name = "gcc_usb30_mp_master_clk_src",
1226                .parent_data = gcc_parents_0,
1227                .num_parents = ARRAY_SIZE(gcc_parents_0),
1228                .flags = CLK_SET_RATE_PARENT,
1229                .ops = &clk_rcg2_ops,
1230        },
1231};
1232
1233static const struct freq_tbl ftbl_gcc_usb30_mp_mock_utmi_clk_src[] = {
1234        F(19200000, P_BI_TCXO, 1, 0, 0),
1235        F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1236        F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
1237        F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1238        { }
1239};
1240
1241static struct clk_rcg2 gcc_usb30_mp_mock_utmi_clk_src = {
1242        .cmd_rcgr = 0xa6034,
1243        .mnd_width = 0,
1244        .hid_width = 5,
1245        .parent_map = gcc_parent_map_0,
1246        .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1247        .clkr.hw.init = &(struct clk_init_data){
1248                .name = "gcc_usb30_mp_mock_utmi_clk_src",
1249                .parent_data = gcc_parents_0,
1250                .num_parents = ARRAY_SIZE(gcc_parents_0),
1251                .flags = CLK_SET_RATE_PARENT,
1252                .ops = &clk_rcg2_ops,
1253        },
1254};
1255
1256static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1257        .cmd_rcgr = 0xf01c,
1258        .mnd_width = 8,
1259        .hid_width = 5,
1260        .parent_map = gcc_parent_map_0,
1261        .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1262        .clkr.hw.init = &(struct clk_init_data){
1263                .name = "gcc_usb30_prim_master_clk_src",
1264                .parent_data = gcc_parents_0,
1265                .num_parents = ARRAY_SIZE(gcc_parents_0),
1266                .flags = CLK_SET_RATE_PARENT,
1267                .ops = &clk_rcg2_ops,
1268        },
1269};
1270
1271static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1272        .cmd_rcgr = 0xf034,
1273        .mnd_width = 0,
1274        .hid_width = 5,
1275        .parent_map = gcc_parent_map_0,
1276        .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1277        .clkr.hw.init = &(struct clk_init_data){
1278                .name = "gcc_usb30_prim_mock_utmi_clk_src",
1279                .parent_data = gcc_parents_0,
1280                .num_parents = ARRAY_SIZE(gcc_parents_0),
1281                .flags = CLK_SET_RATE_PARENT,
1282                .ops = &clk_rcg2_ops,
1283        },
1284};
1285
1286static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1287        .cmd_rcgr = 0x1001c,
1288        .mnd_width = 8,
1289        .hid_width = 5,
1290        .parent_map = gcc_parent_map_0,
1291        .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1292        .clkr.hw.init = &(struct clk_init_data){
1293                .name = "gcc_usb30_sec_master_clk_src",
1294                .parent_data = gcc_parents_0,
1295                .num_parents = ARRAY_SIZE(gcc_parents_0),
1296                .flags = CLK_SET_RATE_PARENT,
1297                .ops = &clk_rcg2_ops,
1298        },
1299};
1300
1301static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1302        .cmd_rcgr = 0x10034,
1303        .mnd_width = 0,
1304        .hid_width = 5,
1305        .parent_map = gcc_parent_map_0,
1306        .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1307        .clkr.hw.init = &(struct clk_init_data){
1308                .name = "gcc_usb30_sec_mock_utmi_clk_src",
1309                .parent_data = gcc_parents_0,
1310                .num_parents = ARRAY_SIZE(gcc_parents_0),
1311                .flags = CLK_SET_RATE_PARENT,
1312                .ops = &clk_rcg2_ops,
1313        },
1314};
1315
1316static struct clk_rcg2 gcc_usb3_mp_phy_aux_clk_src = {
1317        .cmd_rcgr = 0xa6068,
1318        .mnd_width = 0,
1319        .hid_width = 5,
1320        .parent_map = gcc_parent_map_2,
1321        .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1322        .clkr.hw.init = &(struct clk_init_data){
1323                .name = "gcc_usb3_mp_phy_aux_clk_src",
1324                .parent_data = gcc_parents_2,
1325                .num_parents = ARRAY_SIZE(gcc_parents_2),
1326                .flags = CLK_SET_RATE_PARENT,
1327                .ops = &clk_rcg2_ops,
1328        },
1329};
1330
1331static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1332        .cmd_rcgr = 0xf060,
1333        .mnd_width = 0,
1334        .hid_width = 5,
1335        .parent_map = gcc_parent_map_2,
1336        .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1337        .clkr.hw.init = &(struct clk_init_data){
1338                .name = "gcc_usb3_prim_phy_aux_clk_src",
1339                .parent_data = gcc_parents_2,
1340                .num_parents = ARRAY_SIZE(gcc_parents_2),
1341                .flags = CLK_SET_RATE_PARENT,
1342                .ops = &clk_rcg2_ops,
1343        },
1344};
1345
1346static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1347        .cmd_rcgr = 0x10060,
1348        .mnd_width = 0,
1349        .hid_width = 5,
1350        .parent_map = gcc_parent_map_2,
1351        .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1352        .clkr.hw.init = &(struct clk_init_data){
1353                .name = "gcc_usb3_sec_phy_aux_clk_src",
1354                .parent_data = gcc_parents_2,
1355                .num_parents = ARRAY_SIZE(gcc_parents_2),
1356                .flags = CLK_SET_RATE_PARENT,
1357                .ops = &clk_rcg2_ops,
1358        },
1359};
1360
1361static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1362        .halt_reg = 0x90018,
1363        .halt_check = BRANCH_HALT,
1364        .clkr = {
1365                .enable_reg = 0x90018,
1366                .enable_mask = BIT(0),
1367                .hw.init = &(struct clk_init_data){
1368                        .name = "gcc_aggre_noc_pcie_tbu_clk",
1369                        .ops = &clk_branch2_ops,
1370                },
1371        },
1372};
1373
1374static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1375        .halt_reg = 0x750c0,
1376        .halt_check = BRANCH_HALT,
1377        .hwcg_reg = 0x750c0,
1378        .hwcg_bit = 1,
1379        .clkr = {
1380                .enable_reg = 0x750c0,
1381                .enable_mask = BIT(0),
1382                .hw.init = &(struct clk_init_data){
1383                        .name = "gcc_aggre_ufs_card_axi_clk",
1384                        .parent_hws = (const struct clk_hw *[]){
1385                                      &gcc_ufs_card_axi_clk_src.clkr.hw
1386                        },
1387                        .num_parents = 1,
1388                        .flags = CLK_SET_RATE_PARENT,
1389                        .ops = &clk_branch2_ops,
1390                },
1391        },
1392};
1393
1394static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1395        .halt_reg = 0x750c0,
1396        .halt_check = BRANCH_HALT,
1397        .hwcg_reg = 0x750c0,
1398        .hwcg_bit = 1,
1399        .clkr = {
1400                .enable_reg = 0x750c0,
1401                .enable_mask = BIT(1),
1402                .hw.init = &(struct clk_init_data){
1403                        .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1404                        .parent_hws = (const struct clk_hw *[]){
1405                                      &gcc_aggre_ufs_card_axi_clk.clkr.hw
1406                        },
1407                        .num_parents = 1,
1408                        .flags = CLK_SET_RATE_PARENT,
1409                        .ops = &clk_branch_simple_ops,
1410                },
1411        },
1412};
1413
1414static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1415        .halt_reg = 0x770c0,
1416        .halt_check = BRANCH_HALT,
1417        .hwcg_reg = 0x770c0,
1418        .hwcg_bit = 1,
1419        .clkr = {
1420                .enable_reg = 0x770c0,
1421                .enable_mask = BIT(0),
1422                .hw.init = &(struct clk_init_data){
1423                        .name = "gcc_aggre_ufs_phy_axi_clk",
1424                        .parent_hws = (const struct clk_hw *[]){
1425                                      &gcc_ufs_phy_axi_clk_src.clkr.hw
1426                        },
1427                        .num_parents = 1,
1428                        .flags = CLK_SET_RATE_PARENT,
1429                        .ops = &clk_branch2_ops,
1430                },
1431        },
1432};
1433
1434static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1435        .halt_reg = 0x770c0,
1436        .halt_check = BRANCH_HALT,
1437        .hwcg_reg = 0x770c0,
1438        .hwcg_bit = 1,
1439        .clkr = {
1440                .enable_reg = 0x770c0,
1441                .enable_mask = BIT(1),
1442                .hw.init = &(struct clk_init_data){
1443                        .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1444                        .parent_hws = (const struct clk_hw *[]){
1445                                      &gcc_aggre_ufs_phy_axi_clk.clkr.hw
1446                        },
1447                        .num_parents = 1,
1448                        .flags = CLK_SET_RATE_PARENT,
1449                        .ops = &clk_branch_simple_ops,
1450                },
1451        },
1452};
1453
1454static struct clk_branch gcc_aggre_usb3_mp_axi_clk = {
1455        .halt_reg = 0xa6084,
1456        .halt_check = BRANCH_HALT,
1457        .clkr = {
1458                .enable_reg = 0xa6084,
1459                .enable_mask = BIT(0),
1460                .hw.init = &(struct clk_init_data){
1461                        .name = "gcc_aggre_usb3_mp_axi_clk",
1462                        .parent_hws = (const struct clk_hw *[]){
1463                                      &gcc_usb30_mp_master_clk_src.clkr.hw
1464                        },
1465                        .num_parents = 1,
1466                        .flags = CLK_SET_RATE_PARENT,
1467                        .ops = &clk_branch2_ops,
1468                },
1469        },
1470};
1471
1472static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1473        .halt_reg = 0xf07c,
1474        .halt_check = BRANCH_HALT,
1475        .clkr = {
1476                .enable_reg = 0xf07c,
1477                .enable_mask = BIT(0),
1478                .hw.init = &(struct clk_init_data){
1479                        .name = "gcc_aggre_usb3_prim_axi_clk",
1480                        .parent_hws = (const struct clk_hw *[]){
1481                                      &gcc_usb30_prim_master_clk_src.clkr.hw
1482                        },
1483                        .num_parents = 1,
1484                        .flags = CLK_SET_RATE_PARENT,
1485                        .ops = &clk_branch2_ops,
1486                },
1487        },
1488};
1489
1490static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1491        .halt_reg = 0x1007c,
1492        .halt_check = BRANCH_HALT,
1493        .clkr = {
1494                .enable_reg = 0x1007c,
1495                .enable_mask = BIT(0),
1496                .hw.init = &(struct clk_init_data){
1497                        .name = "gcc_aggre_usb3_sec_axi_clk",
1498                        .parent_hws = (const struct clk_hw *[]){
1499                                      &gcc_usb30_sec_master_clk_src.clkr.hw
1500                        },
1501                        .num_parents = 1,
1502                        .flags = CLK_SET_RATE_PARENT,
1503                        .ops = &clk_branch2_ops,
1504                },
1505        },
1506};
1507
1508static struct clk_branch gcc_boot_rom_ahb_clk = {
1509        .halt_reg = 0x38004,
1510        .halt_check = BRANCH_HALT_VOTED,
1511        .hwcg_reg = 0x38004,
1512        .hwcg_bit = 1,
1513        .clkr = {
1514                .enable_reg = 0x52004,
1515                .enable_mask = BIT(10),
1516                .hw.init = &(struct clk_init_data){
1517                        .name = "gcc_boot_rom_ahb_clk",
1518                        .ops = &clk_branch2_ops,
1519                },
1520        },
1521};
1522
1523static struct clk_branch gcc_camera_hf_axi_clk = {
1524        .halt_reg = 0xb030,
1525        .halt_check = BRANCH_HALT,
1526        .clkr = {
1527                .enable_reg = 0xb030,
1528                .enable_mask = BIT(0),
1529                .hw.init = &(struct clk_init_data){
1530                        .name = "gcc_camera_hf_axi_clk",
1531                        .ops = &clk_branch2_ops,
1532                },
1533        },
1534};
1535
1536static struct clk_branch gcc_camera_sf_axi_clk = {
1537        .halt_reg = 0xb034,
1538        .halt_check = BRANCH_HALT,
1539        .clkr = {
1540                .enable_reg = 0xb034,
1541                .enable_mask = BIT(0),
1542                .hw.init = &(struct clk_init_data){
1543                        .name = "gcc_camera_sf_axi_clk",
1544                        .ops = &clk_branch2_ops,
1545                },
1546        },
1547};
1548
1549static struct clk_branch gcc_cfg_noc_usb3_mp_axi_clk = {
1550        .halt_reg = 0xa609c,
1551        .halt_check = BRANCH_HALT,
1552        .clkr = {
1553                .enable_reg = 0xa609c,
1554                .enable_mask = BIT(0),
1555                .hw.init = &(struct clk_init_data){
1556                        .name = "gcc_cfg_noc_usb3_mp_axi_clk",
1557                        .parent_hws = (const struct clk_hw *[]){
1558                                      &gcc_usb30_mp_master_clk_src.clkr.hw
1559                        },
1560                        .num_parents = 1,
1561                        .flags = CLK_SET_RATE_PARENT,
1562                        .ops = &clk_branch2_ops,
1563                },
1564        },
1565};
1566
1567static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1568        .halt_reg = 0xf078,
1569        .halt_check = BRANCH_HALT,
1570        .clkr = {
1571                .enable_reg = 0xf078,
1572                .enable_mask = BIT(0),
1573                .hw.init = &(struct clk_init_data){
1574                        .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1575                        .parent_hws = (const struct clk_hw *[]){
1576                                      &gcc_usb30_prim_master_clk_src.clkr.hw
1577                        },
1578                        .num_parents = 1,
1579                        .flags = CLK_SET_RATE_PARENT,
1580                        .ops = &clk_branch2_ops,
1581                },
1582        },
1583};
1584
1585static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1586        .halt_reg = 0x10078,
1587        .halt_check = BRANCH_HALT,
1588        .clkr = {
1589                .enable_reg = 0x10078,
1590                .enable_mask = BIT(0),
1591                .hw.init = &(struct clk_init_data){
1592                        .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1593                        .parent_hws = (const struct clk_hw *[]){
1594                                      &gcc_usb30_sec_master_clk_src.clkr.hw
1595                        },
1596                        .num_parents = 1,
1597                        .flags = CLK_SET_RATE_PARENT,
1598                        .ops = &clk_branch2_ops,
1599                },
1600        },
1601};
1602
1603/* For CPUSS functionality the AHB clock needs to be left enabled */
1604static struct clk_branch gcc_cpuss_ahb_clk = {
1605        .halt_reg = 0x48000,
1606        .halt_check = BRANCH_HALT_VOTED,
1607        .clkr = {
1608                .enable_reg = 0x52004,
1609                .enable_mask = BIT(21),
1610                .hw.init = &(struct clk_init_data){
1611                        .name = "gcc_cpuss_ahb_clk",
1612                        .parent_hws = (const struct clk_hw *[]){
1613                                      &gcc_cpuss_ahb_clk_src.clkr.hw
1614                        },
1615                        .num_parents = 1,
1616                        .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1617                        .ops = &clk_branch2_ops,
1618                },
1619        },
1620};
1621
1622static struct clk_branch gcc_cpuss_rbcpr_clk = {
1623        .halt_reg = 0x48008,
1624        .halt_check = BRANCH_HALT,
1625        .clkr = {
1626                .enable_reg = 0x48008,
1627                .enable_mask = BIT(0),
1628                .hw.init = &(struct clk_init_data){
1629                        .name = "gcc_cpuss_rbcpr_clk",
1630                        .ops = &clk_branch2_ops,
1631                },
1632        },
1633};
1634
1635static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1636        .halt_reg = 0x71154,
1637        .halt_check = BRANCH_VOTED,
1638        .clkr = {
1639                .enable_reg = 0x71154,
1640                .enable_mask = BIT(0),
1641                .hw.init = &(struct clk_init_data){
1642                        .name = "gcc_ddrss_gpu_axi_clk",
1643                        .ops = &clk_branch2_ops,
1644                },
1645        },
1646};
1647
1648static struct clk_branch gcc_disp_hf_axi_clk = {
1649        .halt_reg = 0xb038,
1650        .halt_check = BRANCH_HALT,
1651        .clkr = {
1652                .enable_reg = 0xb038,
1653                .enable_mask = BIT(0),
1654                .hw.init = &(struct clk_init_data){
1655                        .name = "gcc_disp_hf_axi_clk",
1656                        .ops = &clk_branch2_ops,
1657                },
1658        },
1659};
1660
1661static struct clk_branch gcc_disp_sf_axi_clk = {
1662        .halt_reg = 0xb03c,
1663        .halt_check = BRANCH_HALT,
1664        .clkr = {
1665                .enable_reg = 0xb03c,
1666                .enable_mask = BIT(0),
1667                .hw.init = &(struct clk_init_data){
1668                        .name = "gcc_disp_sf_axi_clk",
1669                        .ops = &clk_branch2_ops,
1670                },
1671        },
1672};
1673
1674static struct clk_branch gcc_emac_axi_clk = {
1675        .halt_reg = 0x6010,
1676        .halt_check = BRANCH_HALT,
1677        .clkr = {
1678                .enable_reg = 0x6010,
1679                .enable_mask = BIT(0),
1680                .hw.init = &(struct clk_init_data){
1681                        .name = "gcc_emac_axi_clk",
1682                        .ops = &clk_branch2_ops,
1683                },
1684        },
1685};
1686
1687static struct clk_branch gcc_emac_ptp_clk = {
1688        .halt_reg = 0x6034,
1689        .halt_check = BRANCH_HALT,
1690        .clkr = {
1691                .enable_reg = 0x6034,
1692                .enable_mask = BIT(0),
1693                .hw.init = &(struct clk_init_data){
1694                        .name = "gcc_emac_ptp_clk",
1695                        .parent_hws = (const struct clk_hw *[]){
1696                                      &gcc_emac_ptp_clk_src.clkr.hw
1697                        },
1698                        .num_parents = 1,
1699                        .flags = CLK_SET_RATE_PARENT,
1700                        .ops = &clk_branch2_ops,
1701                },
1702        },
1703};
1704
1705static struct clk_branch gcc_emac_rgmii_clk = {
1706        .halt_reg = 0x6018,
1707        .halt_check = BRANCH_HALT,
1708        .clkr = {
1709                .enable_reg = 0x6018,
1710                .enable_mask = BIT(0),
1711                .hw.init = &(struct clk_init_data){
1712                        .name = "gcc_emac_rgmii_clk",
1713                        .parent_hws = (const struct clk_hw *[]){
1714                                      &gcc_emac_rgmii_clk_src.clkr.hw
1715                        },
1716                        .num_parents = 1,
1717                        .flags = CLK_SET_RATE_PARENT,
1718                        .ops = &clk_branch2_ops,
1719                },
1720        },
1721};
1722
1723static struct clk_branch gcc_emac_slv_ahb_clk = {
1724        .halt_reg = 0x6014,
1725        .halt_check = BRANCH_HALT,
1726        .hwcg_reg = 0x6014,
1727        .hwcg_bit = 1,
1728        .clkr = {
1729                .enable_reg = 0x6014,
1730                .enable_mask = BIT(0),
1731                .hw.init = &(struct clk_init_data){
1732                        .name = "gcc_emac_slv_ahb_clk",
1733                        .ops = &clk_branch2_ops,
1734                },
1735        },
1736};
1737
1738static struct clk_branch gcc_gp1_clk = {
1739        .halt_reg = 0x64000,
1740        .halt_check = BRANCH_HALT,
1741        .clkr = {
1742                .enable_reg = 0x64000,
1743                .enable_mask = BIT(0),
1744                .hw.init = &(struct clk_init_data){
1745                        .name = "gcc_gp1_clk",
1746                        .parent_hws = (const struct clk_hw *[]){
1747                                      &gcc_gp1_clk_src.clkr.hw
1748                        },
1749                        .num_parents = 1,
1750                        .flags = CLK_SET_RATE_PARENT,
1751                        .ops = &clk_branch2_ops,
1752                },
1753        },
1754};
1755
1756static struct clk_branch gcc_gp2_clk = {
1757        .halt_reg = 0x65000,
1758        .halt_check = BRANCH_HALT,
1759        .clkr = {
1760                .enable_reg = 0x65000,
1761                .enable_mask = BIT(0),
1762                .hw.init = &(struct clk_init_data){
1763                        .name = "gcc_gp2_clk",
1764                        .parent_hws = (const struct clk_hw *[]){
1765                                      &gcc_gp2_clk_src.clkr.hw
1766                        },
1767                        .num_parents = 1,
1768                        .flags = CLK_SET_RATE_PARENT,
1769                        .ops = &clk_branch2_ops,
1770                },
1771        },
1772};
1773
1774static struct clk_branch gcc_gp3_clk = {
1775        .halt_reg = 0x66000,
1776        .halt_check = BRANCH_HALT,
1777        .clkr = {
1778                .enable_reg = 0x66000,
1779                .enable_mask = BIT(0),
1780                .hw.init = &(struct clk_init_data){
1781                        .name = "gcc_gp3_clk",
1782                        .parent_hws = (const struct clk_hw *[]){
1783                                      &gcc_gp3_clk_src.clkr.hw
1784                        },
1785                        .num_parents = 1,
1786                        .flags = CLK_SET_RATE_PARENT,
1787                        .ops = &clk_branch2_ops,
1788                },
1789        },
1790};
1791
1792static struct clk_branch gcc_gp4_clk = {
1793        .halt_reg = 0xbe000,
1794        .halt_check = BRANCH_HALT,
1795        .clkr = {
1796                .enable_reg = 0xbe000,
1797                .enable_mask = BIT(0),
1798                .hw.init = &(struct clk_init_data){
1799                        .name = "gcc_gp4_clk",
1800                        .parent_hws = (const struct clk_hw *[]){
1801                                      &gcc_gp4_clk_src.clkr.hw
1802                        },
1803                        .num_parents = 1,
1804                        .flags = CLK_SET_RATE_PARENT,
1805                        .ops = &clk_branch2_ops,
1806                },
1807        },
1808};
1809
1810static struct clk_branch gcc_gp5_clk = {
1811        .halt_reg = 0xbf000,
1812        .halt_check = BRANCH_HALT,
1813        .clkr = {
1814                .enable_reg = 0xbf000,
1815                .enable_mask = BIT(0),
1816                .hw.init = &(struct clk_init_data){
1817                        .name = "gcc_gp5_clk",
1818                        .parent_hws = (const struct clk_hw *[]){
1819                                      &gcc_gp5_clk_src.clkr.hw
1820                        },
1821                        .num_parents = 1,
1822                        .flags = CLK_SET_RATE_PARENT,
1823                        .ops = &clk_branch2_ops,
1824                },
1825        },
1826};
1827
1828static struct clk_branch gcc_gpu_gpll0_clk_src = {
1829        .halt_check = BRANCH_HALT_DELAY,
1830        .clkr = {
1831                .enable_reg = 0x52004,
1832                .enable_mask = BIT(15),
1833                .hw.init = &(struct clk_init_data){
1834                        .name = "gcc_gpu_gpll0_clk_src",
1835                        .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1836                        .num_parents = 1,
1837                        .flags = CLK_SET_RATE_PARENT,
1838                        .ops = &clk_branch2_ops,
1839                },
1840        },
1841};
1842
1843static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1844        .halt_check = BRANCH_HALT_DELAY,
1845        .clkr = {
1846                .enable_reg = 0x52004,
1847                .enable_mask = BIT(16),
1848                .hw.init = &(struct clk_init_data){
1849                        .name = "gcc_gpu_gpll0_div_clk_src",
1850                        .parent_hws = (const struct clk_hw *[]){
1851                                      &gpll0_out_even.clkr.hw
1852                        },
1853                        .num_parents = 1,
1854                        .flags = CLK_SET_RATE_PARENT,
1855                        .ops = &clk_branch2_ops,
1856                },
1857        },
1858};
1859
1860static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1861        .halt_reg = 0x7100c,
1862        .halt_check = BRANCH_VOTED,
1863        .clkr = {
1864                .enable_reg = 0x7100c,
1865                .enable_mask = BIT(0),
1866                .hw.init = &(struct clk_init_data){
1867                        .name = "gcc_gpu_memnoc_gfx_clk",
1868                        .ops = &clk_branch2_ops,
1869                },
1870        },
1871};
1872
1873static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1874        .halt_reg = 0x71018,
1875        .halt_check = BRANCH_HALT,
1876        .clkr = {
1877                .enable_reg = 0x71018,
1878                .enable_mask = BIT(0),
1879                .hw.init = &(struct clk_init_data){
1880                        .name = "gcc_gpu_snoc_dvm_gfx_clk",
1881                        .ops = &clk_branch2_ops,
1882                },
1883        },
1884};
1885
1886static struct clk_branch gcc_npu_at_clk = {
1887        .halt_reg = 0x4d010,
1888        .halt_check = BRANCH_VOTED,
1889        .clkr = {
1890                .enable_reg = 0x4d010,
1891                .enable_mask = BIT(0),
1892                .hw.init = &(struct clk_init_data){
1893                        .name = "gcc_npu_at_clk",
1894                        .ops = &clk_branch2_ops,
1895                },
1896        },
1897};
1898
1899static struct clk_branch gcc_npu_axi_clk = {
1900        .halt_reg = 0x4d008,
1901        .halt_check = BRANCH_VOTED,
1902        .clkr = {
1903                .enable_reg = 0x4d008,
1904                .enable_mask = BIT(0),
1905                .hw.init = &(struct clk_init_data){
1906                        .name = "gcc_npu_axi_clk",
1907                        .parent_hws = (const struct clk_hw *[]){
1908                                      &gcc_npu_axi_clk_src.clkr.hw
1909                        },
1910                        .num_parents = 1,
1911                        .flags = CLK_SET_RATE_PARENT,
1912                        .ops = &clk_branch2_ops,
1913                },
1914        },
1915};
1916
1917static struct clk_branch gcc_npu_gpll0_clk_src = {
1918        .halt_check = BRANCH_HALT_DELAY,
1919        .clkr = {
1920                .enable_reg = 0x52004,
1921                .enable_mask = BIT(18),
1922                .hw.init = &(struct clk_init_data){
1923                        .name = "gcc_npu_gpll0_clk_src",
1924                        .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1925                        .num_parents = 1,
1926                        .flags = CLK_SET_RATE_PARENT,
1927                        .ops = &clk_branch2_ops,
1928                },
1929        },
1930};
1931
1932static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1933        .halt_check = BRANCH_HALT_DELAY,
1934        .clkr = {
1935                .enable_reg = 0x52004,
1936                .enable_mask = BIT(19),
1937                .hw.init = &(struct clk_init_data){
1938                        .name = "gcc_npu_gpll0_div_clk_src",
1939                        .parent_hws = (const struct clk_hw *[]){
1940                                      &gpll0_out_even.clkr.hw
1941                        },
1942                        .num_parents = 1,
1943                        .flags = CLK_SET_RATE_PARENT,
1944                        .ops = &clk_branch2_ops,
1945                },
1946        },
1947};
1948
1949static struct clk_branch gcc_npu_trig_clk = {
1950        .halt_reg = 0x4d00c,
1951        .halt_check = BRANCH_VOTED,
1952        .clkr = {
1953                .enable_reg = 0x4d00c,
1954                .enable_mask = BIT(0),
1955                .hw.init = &(struct clk_init_data){
1956                        .name = "gcc_npu_trig_clk",
1957                        .ops = &clk_branch2_ops,
1958                },
1959        },
1960};
1961
1962static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1963        .halt_reg = 0x6f02c,
1964        .halt_check = BRANCH_HALT,
1965        .clkr = {
1966                .enable_reg = 0x6f02c,
1967                .enable_mask = BIT(0),
1968                .hw.init = &(struct clk_init_data){
1969                        .name = "gcc_pcie0_phy_refgen_clk",
1970                        .parent_hws = (const struct clk_hw *[]){
1971                                      &gcc_pcie_phy_refgen_clk_src.clkr.hw
1972                        },
1973                        .num_parents = 1,
1974                        .flags = CLK_SET_RATE_PARENT,
1975                        .ops = &clk_branch2_ops,
1976                },
1977        },
1978};
1979
1980static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1981        .halt_reg = 0x6f030,
1982        .halt_check = BRANCH_HALT,
1983        .clkr = {
1984                .enable_reg = 0x6f030,
1985                .enable_mask = BIT(0),
1986                .hw.init = &(struct clk_init_data){
1987                        .name = "gcc_pcie1_phy_refgen_clk",
1988                        .parent_hws = (const struct clk_hw *[]){
1989                                      &gcc_pcie_phy_refgen_clk_src.clkr.hw
1990                        },
1991                        .num_parents = 1,
1992                        .flags = CLK_SET_RATE_PARENT,
1993                        .ops = &clk_branch2_ops,
1994                },
1995        },
1996};
1997
1998static struct clk_branch gcc_pcie2_phy_refgen_clk = {
1999        .halt_reg = 0x6f034,
2000        .halt_check = BRANCH_HALT,
2001        .clkr = {
2002                .enable_reg = 0x6f034,
2003                .enable_mask = BIT(0),
2004                .hw.init = &(struct clk_init_data){
2005                        .name = "gcc_pcie2_phy_refgen_clk",
2006                        .parent_hws = (const struct clk_hw *[]){
2007                                      &gcc_pcie_phy_refgen_clk_src.clkr.hw
2008                        },
2009                        .num_parents = 1,
2010                        .flags = CLK_SET_RATE_PARENT,
2011                        .ops = &clk_branch2_ops,
2012                },
2013        },
2014};
2015
2016static struct clk_branch gcc_pcie3_phy_refgen_clk = {
2017        .halt_reg = 0x6f038,
2018        .halt_check = BRANCH_HALT,
2019        .clkr = {
2020                .enable_reg = 0x6f038,
2021                .enable_mask = BIT(0),
2022                .hw.init = &(struct clk_init_data){
2023                        .name = "gcc_pcie3_phy_refgen_clk",
2024                        .parent_hws = (const struct clk_hw *[]){
2025                                      &gcc_pcie_phy_refgen_clk_src.clkr.hw
2026                        },
2027                        .num_parents = 1,
2028                        .flags = CLK_SET_RATE_PARENT,
2029                        .ops = &clk_branch2_ops,
2030                },
2031        },
2032};
2033
2034static struct clk_branch gcc_pcie_0_aux_clk = {
2035        .halt_reg = 0x6b020,
2036        .halt_check = BRANCH_HALT_VOTED,
2037        .clkr = {
2038                .enable_reg = 0x5200c,
2039                .enable_mask = BIT(3),
2040                .hw.init = &(struct clk_init_data){
2041                        .name = "gcc_pcie_0_aux_clk",
2042                        .parent_hws = (const struct clk_hw *[]){
2043                                      &gcc_pcie_0_aux_clk_src.clkr.hw
2044                        },
2045                        .num_parents = 1,
2046                        .flags = CLK_SET_RATE_PARENT,
2047                        .ops = &clk_branch2_ops,
2048                },
2049        },
2050};
2051
2052static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2053        .halt_reg = 0x6b01c,
2054        .halt_check = BRANCH_HALT_VOTED,
2055        .hwcg_reg = 0x6b01c,
2056        .hwcg_bit = 1,
2057        .clkr = {
2058                .enable_reg = 0x5200c,
2059                .enable_mask = BIT(2),
2060                .hw.init = &(struct clk_init_data){
2061                        .name = "gcc_pcie_0_cfg_ahb_clk",
2062                        .ops = &clk_branch2_ops,
2063                },
2064        },
2065};
2066
2067static struct clk_branch gcc_pcie_0_clkref_clk = {
2068        .halt_reg = 0x8c00c,
2069        .halt_check = BRANCH_HALT,
2070        .clkr = {
2071                .enable_reg = 0x8c00c,
2072                .enable_mask = BIT(0),
2073                .hw.init = &(struct clk_init_data){
2074                        .name = "gcc_pcie_0_clkref_clk",
2075                        .ops = &clk_branch2_ops,
2076                },
2077        },
2078};
2079
2080static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2081        .halt_reg = 0x6b018,
2082        .halt_check = BRANCH_HALT_VOTED,
2083        .clkr = {
2084                .enable_reg = 0x5200c,
2085                .enable_mask = BIT(1),
2086                .hw.init = &(struct clk_init_data){
2087                        .name = "gcc_pcie_0_mstr_axi_clk",
2088                        .ops = &clk_branch2_ops,
2089                },
2090        },
2091};
2092
2093static struct clk_branch gcc_pcie_0_pipe_clk = {
2094        .halt_reg = 0x6b024,
2095        .halt_check = BRANCH_HALT_SKIP,
2096        .clkr = {
2097                .enable_reg = 0x5200c,
2098                .enable_mask = BIT(4),
2099                .hw.init = &(struct clk_init_data){
2100                        .name = "gcc_pcie_0_pipe_clk",
2101                        .ops = &clk_branch2_ops,
2102                },
2103        },
2104};
2105
2106static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2107        .halt_reg = 0x6b014,
2108        .halt_check = BRANCH_HALT_VOTED,
2109        .hwcg_reg = 0x6b014,
2110        .hwcg_bit = 1,
2111        .clkr = {
2112                .enable_reg = 0x5200c,
2113                .enable_mask = BIT(0),
2114                .hw.init = &(struct clk_init_data){
2115                        .name = "gcc_pcie_0_slv_axi_clk",
2116                        .ops = &clk_branch2_ops,
2117                },
2118        },
2119};
2120
2121static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
2122        .halt_reg = 0x6b010,
2123        .halt_check = BRANCH_HALT_VOTED,
2124        .clkr = {
2125                .enable_reg = 0x5200c,
2126                .enable_mask = BIT(5),
2127                .hw.init = &(struct clk_init_data){
2128                        .name = "gcc_pcie_0_slv_q2a_axi_clk",
2129                        .ops = &clk_branch2_ops,
2130                },
2131        },
2132};
2133
2134static struct clk_branch gcc_pcie_1_aux_clk = {
2135        .halt_reg = 0x8d020,
2136        .halt_check = BRANCH_HALT_VOTED,
2137        .clkr = {
2138                .enable_reg = 0x52004,
2139                .enable_mask = BIT(29),
2140                .hw.init = &(struct clk_init_data){
2141                        .name = "gcc_pcie_1_aux_clk",
2142                        .parent_hws = (const struct clk_hw *[]){
2143                                &gcc_pcie_1_aux_clk_src.clkr.hw
2144                        },
2145                        .num_parents = 1,
2146                        .flags = CLK_SET_RATE_PARENT,
2147                        .ops = &clk_branch2_ops,
2148                },
2149        },
2150};
2151
2152static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2153        .halt_reg = 0x8d01c,
2154        .halt_check = BRANCH_HALT_VOTED,
2155        .hwcg_reg = 0x8d01c,
2156        .hwcg_bit = 1,
2157        .clkr = {
2158                .enable_reg = 0x52004,
2159                .enable_mask = BIT(28),
2160                .hw.init = &(struct clk_init_data){
2161                        .name = "gcc_pcie_1_cfg_ahb_clk",
2162                        .ops = &clk_branch2_ops,
2163                },
2164        },
2165};
2166
2167static struct clk_branch gcc_pcie_1_clkref_clk = {
2168        .halt_reg = 0x8c02c,
2169        .halt_check = BRANCH_HALT,
2170        .clkr = {
2171                .enable_reg = 0x8c02c,
2172                .enable_mask = BIT(0),
2173                .hw.init = &(struct clk_init_data){
2174                        .name = "gcc_pcie_1_clkref_clk",
2175                        .ops = &clk_branch2_ops,
2176                },
2177        },
2178};
2179
2180static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2181        .halt_reg = 0x8d018,
2182        .halt_check = BRANCH_HALT_VOTED,
2183        .clkr = {
2184                .enable_reg = 0x52004,
2185                .enable_mask = BIT(27),
2186                .hw.init = &(struct clk_init_data){
2187                        .name = "gcc_pcie_1_mstr_axi_clk",
2188                        .ops = &clk_branch2_ops,
2189                },
2190        },
2191};
2192
2193static struct clk_branch gcc_pcie_1_pipe_clk = {
2194        .halt_reg = 0x8d024,
2195        .halt_check = BRANCH_HALT_SKIP,
2196        .clkr = {
2197                .enable_reg = 0x52004,
2198                .enable_mask = BIT(30),
2199                .hw.init = &(struct clk_init_data){
2200                        .name = "gcc_pcie_1_pipe_clk",
2201                        .ops = &clk_branch2_ops,
2202                },
2203        },
2204};
2205
2206static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2207        .halt_reg = 0x8d014,
2208        .halt_check = BRANCH_HALT_VOTED,
2209        .hwcg_reg = 0x8d014,
2210        .hwcg_bit = 1,
2211        .clkr = {
2212                .enable_reg = 0x52004,
2213                .enable_mask = BIT(26),
2214                .hw.init = &(struct clk_init_data){
2215                        .name = "gcc_pcie_1_slv_axi_clk",
2216                        .ops = &clk_branch2_ops,
2217                },
2218        },
2219};
2220
2221static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2222        .halt_reg = 0x8d010,
2223        .halt_check = BRANCH_HALT_VOTED,
2224        .clkr = {
2225                .enable_reg = 0x52004,
2226                .enable_mask = BIT(25),
2227                .hw.init = &(struct clk_init_data){
2228                        .name = "gcc_pcie_1_slv_q2a_axi_clk",
2229                        .ops = &clk_branch2_ops,
2230                },
2231        },
2232};
2233
2234static struct clk_branch gcc_pcie_2_aux_clk = {
2235        .halt_reg = 0x9d020,
2236        .halt_check = BRANCH_HALT_VOTED,
2237        .clkr = {
2238                .enable_reg = 0x52014,
2239                .enable_mask = BIT(14),
2240                .hw.init = &(struct clk_init_data){
2241                        .name = "gcc_pcie_2_aux_clk",
2242                        .parent_hws = (const struct clk_hw *[]){
2243                                &gcc_pcie_2_aux_clk_src.clkr.hw
2244                        },
2245                        .num_parents = 1,
2246                        .flags = CLK_SET_RATE_PARENT,
2247                        .ops = &clk_branch2_ops,
2248                },
2249        },
2250};
2251
2252static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2253        .halt_reg = 0x9d01c,
2254        .halt_check = BRANCH_HALT_VOTED,
2255        .hwcg_reg = 0x9d01c,
2256        .hwcg_bit = 1,
2257        .clkr = {
2258                .enable_reg = 0x52014,
2259                .enable_mask = BIT(13),
2260                .hw.init = &(struct clk_init_data){
2261                        .name = "gcc_pcie_2_cfg_ahb_clk",
2262                        .ops = &clk_branch2_ops,
2263                },
2264        },
2265};
2266
2267static struct clk_branch gcc_pcie_2_clkref_clk = {
2268        .halt_reg = 0x8c014,
2269        .halt_check = BRANCH_HALT,
2270        .clkr = {
2271                .enable_reg = 0x8c014,
2272                .enable_mask = BIT(0),
2273                .hw.init = &(struct clk_init_data){
2274                        .name = "gcc_pcie_2_clkref_clk",
2275                        .ops = &clk_branch2_ops,
2276                },
2277        },
2278};
2279
2280static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2281        .halt_reg = 0x9d018,
2282        .halt_check = BRANCH_HALT_VOTED,
2283        .clkr = {
2284                .enable_reg = 0x52014,
2285                .enable_mask = BIT(12),
2286                .hw.init = &(struct clk_init_data){
2287                        .name = "gcc_pcie_2_mstr_axi_clk",
2288                        .ops = &clk_branch2_ops,
2289                },
2290        },
2291};
2292
2293static struct clk_branch gcc_pcie_2_pipe_clk = {
2294        .halt_reg = 0x9d024,
2295        .halt_check = BRANCH_HALT_SKIP,
2296        .clkr = {
2297                .enable_reg = 0x52014,
2298                .enable_mask = BIT(15),
2299                .hw.init = &(struct clk_init_data){
2300                        .name = "gcc_pcie_2_pipe_clk",
2301                        .ops = &clk_branch2_ops,
2302                },
2303        },
2304};
2305
2306static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2307        .halt_reg = 0x9d014,
2308        .halt_check = BRANCH_HALT_VOTED,
2309        .hwcg_reg = 0x9d014,
2310        .hwcg_bit = 1,
2311        .clkr = {
2312                .enable_reg = 0x52014,
2313                .enable_mask = BIT(11),
2314                .hw.init = &(struct clk_init_data){
2315                        .name = "gcc_pcie_2_slv_axi_clk",
2316                        .ops = &clk_branch2_ops,
2317                },
2318        },
2319};
2320
2321static struct clk_branch gcc_pcie_2_slv_q2a_axi_clk = {
2322        .halt_reg = 0x9d010,
2323        .halt_check = BRANCH_HALT_VOTED,
2324        .clkr = {
2325                .enable_reg = 0x52014,
2326                .enable_mask = BIT(10),
2327                .hw.init = &(struct clk_init_data){
2328                        .name = "gcc_pcie_2_slv_q2a_axi_clk",
2329                        .ops = &clk_branch2_ops,
2330                },
2331        },
2332};
2333
2334static struct clk_branch gcc_pcie_3_aux_clk = {
2335        .halt_reg = 0xa3020,
2336        .halt_check = BRANCH_HALT_VOTED,
2337        .clkr = {
2338                .enable_reg = 0x52014,
2339                .enable_mask = BIT(20),
2340                .hw.init = &(struct clk_init_data){
2341                        .name = "gcc_pcie_3_aux_clk",
2342                        .parent_hws = (const struct clk_hw *[]){
2343                                &gcc_pcie_3_aux_clk_src.clkr.hw
2344                        },
2345                        .num_parents = 1,
2346                        .flags = CLK_SET_RATE_PARENT,
2347                        .ops = &clk_branch2_ops,
2348                },
2349        },
2350};
2351
2352static struct clk_branch gcc_pcie_3_cfg_ahb_clk = {
2353        .halt_reg = 0xa301c,
2354        .halt_check = BRANCH_HALT_VOTED,
2355        .hwcg_reg = 0xa301c,
2356        .hwcg_bit = 1,
2357        .clkr = {
2358                .enable_reg = 0x52014,
2359                .enable_mask = BIT(19),
2360                .hw.init = &(struct clk_init_data){
2361                        .name = "gcc_pcie_3_cfg_ahb_clk",
2362                        .ops = &clk_branch2_ops,
2363                },
2364        },
2365};
2366
2367static struct clk_branch gcc_pcie_3_clkref_clk = {
2368        .halt_reg = 0x8c018,
2369        .halt_check = BRANCH_HALT,
2370        .clkr = {
2371                .enable_reg = 0x8c018,
2372                .enable_mask = BIT(0),
2373                .hw.init = &(struct clk_init_data){
2374                        .name = "gcc_pcie_3_clkref_clk",
2375                        .ops = &clk_branch2_ops,
2376                },
2377        },
2378};
2379
2380static struct clk_branch gcc_pcie_3_mstr_axi_clk = {
2381        .halt_reg = 0xa3018,
2382        .halt_check = BRANCH_HALT_VOTED,
2383        .clkr = {
2384                .enable_reg = 0x52014,
2385                .enable_mask = BIT(18),
2386                .hw.init = &(struct clk_init_data){
2387                        .name = "gcc_pcie_3_mstr_axi_clk",
2388                        .ops = &clk_branch2_ops,
2389                },
2390        },
2391};
2392
2393static struct clk_branch gcc_pcie_3_pipe_clk = {
2394        .halt_reg = 0xa3024,
2395        .halt_check = BRANCH_HALT_SKIP,
2396        .clkr = {
2397                .enable_reg = 0x52014,
2398                .enable_mask = BIT(21),
2399                .hw.init = &(struct clk_init_data){
2400                        .name = "gcc_pcie_3_pipe_clk",
2401                        .ops = &clk_branch2_ops,
2402                },
2403        },
2404};
2405
2406static struct clk_branch gcc_pcie_3_slv_axi_clk = {
2407        .halt_reg = 0xa3014,
2408        .halt_check = BRANCH_HALT_VOTED,
2409        .hwcg_reg = 0xa3014,
2410        .hwcg_bit = 1,
2411        .clkr = {
2412                .enable_reg = 0x52014,
2413                .enable_mask = BIT(17),
2414                .hw.init = &(struct clk_init_data){
2415                        .name = "gcc_pcie_3_slv_axi_clk",
2416                        .ops = &clk_branch2_ops,
2417                },
2418        },
2419};
2420
2421static struct clk_branch gcc_pcie_3_slv_q2a_axi_clk = {
2422        .halt_reg = 0xa3010,
2423        .halt_check = BRANCH_HALT_VOTED,
2424        .clkr = {
2425                .enable_reg = 0x52014,
2426                .enable_mask = BIT(16),
2427                .hw.init = &(struct clk_init_data){
2428                        .name = "gcc_pcie_3_slv_q2a_axi_clk",
2429                        .ops = &clk_branch2_ops,
2430                },
2431        },
2432};
2433
2434static struct clk_branch gcc_pcie_phy_aux_clk = {
2435        .halt_reg = 0x6f004,
2436        .halt_check = BRANCH_HALT,
2437        .clkr = {
2438                .enable_reg = 0x6f004,
2439                .enable_mask = BIT(0),
2440                .hw.init = &(struct clk_init_data){
2441                        .name = "gcc_pcie_phy_aux_clk",
2442                        .parent_hws = (const struct clk_hw *[]){
2443                                      &gcc_pcie_0_aux_clk_src.clkr.hw
2444                        },
2445                        .num_parents = 1,
2446                        .flags = CLK_SET_RATE_PARENT,
2447                        .ops = &clk_branch2_ops,
2448                },
2449        },
2450};
2451
2452static struct clk_branch gcc_pdm2_clk = {
2453        .halt_reg = 0x3300c,
2454        .halt_check = BRANCH_HALT,
2455        .clkr = {
2456                .enable_reg = 0x3300c,
2457                .enable_mask = BIT(0),
2458                .hw.init = &(struct clk_init_data){
2459                        .name = "gcc_pdm2_clk",
2460                        .parent_hws = (const struct clk_hw *[]){
2461                                      &gcc_pdm2_clk_src.clkr.hw
2462                        },
2463                        .num_parents = 1,
2464                        .flags = CLK_SET_RATE_PARENT,
2465                        .ops = &clk_branch2_ops,
2466                },
2467        },
2468};
2469
2470static struct clk_branch gcc_pdm_ahb_clk = {
2471        .halt_reg = 0x33004,
2472        .halt_check = BRANCH_HALT,
2473        .hwcg_reg = 0x33004,
2474        .hwcg_bit = 1,
2475        .clkr = {
2476                .enable_reg = 0x33004,
2477                .enable_mask = BIT(0),
2478                .hw.init = &(struct clk_init_data){
2479                        .name = "gcc_pdm_ahb_clk",
2480                        .ops = &clk_branch2_ops,
2481                },
2482        },
2483};
2484
2485static struct clk_branch gcc_pdm_xo4_clk = {
2486        .halt_reg = 0x33008,
2487        .halt_check = BRANCH_HALT,
2488        .clkr = {
2489                .enable_reg = 0x33008,
2490                .enable_mask = BIT(0),
2491                .hw.init = &(struct clk_init_data){
2492                        .name = "gcc_pdm_xo4_clk",
2493                        .ops = &clk_branch2_ops,
2494                },
2495        },
2496};
2497
2498static struct clk_branch gcc_prng_ahb_clk = {
2499        .halt_reg = 0x34004,
2500        .halt_check = BRANCH_HALT_VOTED,
2501        .clkr = {
2502                .enable_reg = 0x52004,
2503                .enable_mask = BIT(13),
2504                .hw.init = &(struct clk_init_data){
2505                        .name = "gcc_prng_ahb_clk",
2506                        .ops = &clk_branch2_ops,
2507                },
2508        },
2509};
2510
2511static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2512        .halt_reg = 0xb018,
2513        .halt_check = BRANCH_HALT,
2514        .hwcg_reg = 0xb018,
2515        .hwcg_bit = 1,
2516        .clkr = {
2517                .enable_reg = 0xb018,
2518                .enable_mask = BIT(0),
2519                .hw.init = &(struct clk_init_data){
2520                        .name = "gcc_qmip_camera_nrt_ahb_clk",
2521                        .ops = &clk_branch2_ops,
2522                },
2523        },
2524};
2525
2526static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2527        .halt_reg = 0xb01c,
2528        .halt_check = BRANCH_HALT,
2529        .hwcg_reg = 0xb01c,
2530        .hwcg_bit = 1,
2531        .clkr = {
2532                .enable_reg = 0xb01c,
2533                .enable_mask = BIT(0),
2534                .hw.init = &(struct clk_init_data){
2535                        .name = "gcc_qmip_camera_rt_ahb_clk",
2536                        .ops = &clk_branch2_ops,
2537                },
2538        },
2539};
2540
2541static struct clk_branch gcc_qmip_disp_ahb_clk = {
2542        .halt_reg = 0xb020,
2543        .halt_check = BRANCH_HALT,
2544        .hwcg_reg = 0xb020,
2545        .hwcg_bit = 1,
2546        .clkr = {
2547                .enable_reg = 0xb020,
2548                .enable_mask = BIT(0),
2549                .hw.init = &(struct clk_init_data){
2550                        .name = "gcc_qmip_disp_ahb_clk",
2551                        .ops = &clk_branch2_ops,
2552                },
2553        },
2554};
2555
2556static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2557        .halt_reg = 0xb010,
2558        .halt_check = BRANCH_HALT,
2559        .hwcg_reg = 0xb010,
2560        .hwcg_bit = 1,
2561        .clkr = {
2562                .enable_reg = 0xb010,
2563                .enable_mask = BIT(0),
2564                .hw.init = &(struct clk_init_data){
2565                        .name = "gcc_qmip_video_cvp_ahb_clk",
2566                        .ops = &clk_branch2_ops,
2567                },
2568        },
2569};
2570
2571static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2572        .halt_reg = 0xb014,
2573        .halt_check = BRANCH_HALT,
2574        .hwcg_reg = 0xb014,
2575        .hwcg_bit = 1,
2576        .clkr = {
2577                .enable_reg = 0xb014,
2578                .enable_mask = BIT(0),
2579                .hw.init = &(struct clk_init_data){
2580                        .name = "gcc_qmip_video_vcodec_ahb_clk",
2581                        .ops = &clk_branch2_ops,
2582                },
2583        },
2584};
2585
2586static struct clk_branch gcc_qspi_1_cnoc_periph_ahb_clk = {
2587        .halt_reg = 0x4a004,
2588        .halt_check = BRANCH_HALT,
2589        .clkr = {
2590                .enable_reg = 0x4a004,
2591                .enable_mask = BIT(0),
2592                .hw.init = &(struct clk_init_data){
2593                        .name = "gcc_qspi_1_cnoc_periph_ahb_clk",
2594                        .ops = &clk_branch2_ops,
2595                },
2596        },
2597};
2598
2599static struct clk_branch gcc_qspi_1_core_clk = {
2600        .halt_reg = 0x4a008,
2601        .halt_check = BRANCH_HALT,
2602        .clkr = {
2603                .enable_reg = 0x4a008,
2604                .enable_mask = BIT(0),
2605                .hw.init = &(struct clk_init_data){
2606                        .name = "gcc_qspi_1_core_clk",
2607                        .parent_hws = (const struct clk_hw *[]){
2608                                      &gcc_qspi_1_core_clk_src.clkr.hw
2609                        },
2610                        .num_parents = 1,
2611                        .flags = CLK_SET_RATE_PARENT,
2612                        .ops = &clk_branch2_ops,
2613                },
2614        },
2615};
2616
2617static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2618        .halt_reg = 0x4b000,
2619        .halt_check = BRANCH_HALT,
2620        .clkr = {
2621                .enable_reg = 0x4b000,
2622                .enable_mask = BIT(0),
2623                .hw.init = &(struct clk_init_data){
2624                        .name = "gcc_qspi_cnoc_periph_ahb_clk",
2625                        .ops = &clk_branch2_ops,
2626                },
2627        },
2628};
2629
2630static struct clk_branch gcc_qspi_core_clk = {
2631        .halt_reg = 0x4b004,
2632        .halt_check = BRANCH_HALT,
2633        .clkr = {
2634                .enable_reg = 0x4b004,
2635                .enable_mask = BIT(0),
2636                .hw.init = &(struct clk_init_data){
2637                        .name = "gcc_qspi_core_clk",
2638                        .parent_hws = (const struct clk_hw *[]){
2639                                      &gcc_qspi_core_clk_src.clkr.hw
2640                        },
2641                        .num_parents = 1,
2642                        .flags = CLK_SET_RATE_PARENT,
2643                        .ops = &clk_branch2_ops,
2644                },
2645        },
2646};
2647
2648static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2649        .halt_reg = 0x17144,
2650        .halt_check = BRANCH_HALT_VOTED,
2651        .clkr = {
2652                .enable_reg = 0x5200c,
2653                .enable_mask = BIT(10),
2654                .hw.init = &(struct clk_init_data){
2655                        .name = "gcc_qupv3_wrap0_s0_clk",
2656                        .parent_hws = (const struct clk_hw *[]){
2657                                      &gcc_qupv3_wrap0_s0_clk_src.clkr.hw
2658                        },
2659                        .num_parents = 1,
2660                        .flags = CLK_SET_RATE_PARENT,
2661                        .ops = &clk_branch2_ops,
2662                },
2663        },
2664};
2665
2666static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2667        .halt_reg = 0x17274,
2668        .halt_check = BRANCH_HALT_VOTED,
2669        .clkr = {
2670                .enable_reg = 0x5200c,
2671                .enable_mask = BIT(11),
2672                .hw.init = &(struct clk_init_data){
2673                        .name = "gcc_qupv3_wrap0_s1_clk",
2674                        .parent_hws = (const struct clk_hw *[]){
2675                                &gcc_qupv3_wrap0_s1_clk_src.clkr.hw
2676                        },
2677                        .num_parents = 1,
2678                        .flags = CLK_SET_RATE_PARENT,
2679                        .ops = &clk_branch2_ops,
2680                },
2681        },
2682};
2683
2684static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2685        .halt_reg = 0x173a4,
2686        .halt_check = BRANCH_HALT_VOTED,
2687        .clkr = {
2688                .enable_reg = 0x5200c,
2689                .enable_mask = BIT(12),
2690                .hw.init = &(struct clk_init_data){
2691                        .name = "gcc_qupv3_wrap0_s2_clk",
2692                        .parent_hws = (const struct clk_hw *[]){
2693                                &gcc_qupv3_wrap0_s2_clk_src.clkr.hw
2694                        },
2695                        .num_parents = 1,
2696                        .flags = CLK_SET_RATE_PARENT,
2697                        .ops = &clk_branch2_ops,
2698                },
2699        },
2700};
2701
2702static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2703        .halt_reg = 0x174d4,
2704        .halt_check = BRANCH_HALT_VOTED,
2705        .clkr = {
2706                .enable_reg = 0x5200c,
2707                .enable_mask = BIT(13),
2708                .hw.init = &(struct clk_init_data){
2709                        .name = "gcc_qupv3_wrap0_s3_clk",
2710                        .parent_hws = (const struct clk_hw *[]){
2711                                &gcc_qupv3_wrap0_s3_clk_src.clkr.hw
2712                        },
2713                        .num_parents = 1,
2714                        .flags = CLK_SET_RATE_PARENT,
2715                        .ops = &clk_branch2_ops,
2716                },
2717        },
2718};
2719
2720static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2721        .halt_reg = 0x17604,
2722        .halt_check = BRANCH_HALT_VOTED,
2723        .clkr = {
2724                .enable_reg = 0x5200c,
2725                .enable_mask = BIT(14),
2726                .hw.init = &(struct clk_init_data){
2727                        .name = "gcc_qupv3_wrap0_s4_clk",
2728                        .parent_hws = (const struct clk_hw *[]){
2729                                &gcc_qupv3_wrap0_s4_clk_src.clkr.hw
2730                        },
2731                        .num_parents = 1,
2732                        .flags = CLK_SET_RATE_PARENT,
2733                        .ops = &clk_branch2_ops,
2734                },
2735        },
2736};
2737
2738static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2739        .halt_reg = 0x17734,
2740        .halt_check = BRANCH_HALT_VOTED,
2741        .clkr = {
2742                .enable_reg = 0x5200c,
2743                .enable_mask = BIT(15),
2744                .hw.init = &(struct clk_init_data){
2745                        .name = "gcc_qupv3_wrap0_s5_clk",
2746                        .parent_hws = (const struct clk_hw *[]){
2747                                &gcc_qupv3_wrap0_s5_clk_src.clkr.hw
2748                        },
2749                        .num_parents = 1,
2750                        .flags = CLK_SET_RATE_PARENT,
2751                        .ops = &clk_branch2_ops,
2752                },
2753        },
2754};
2755
2756static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2757        .halt_reg = 0x17864,
2758        .halt_check = BRANCH_HALT_VOTED,
2759        .clkr = {
2760                .enable_reg = 0x5200c,
2761                .enable_mask = BIT(16),
2762                .hw.init = &(struct clk_init_data){
2763                        .name = "gcc_qupv3_wrap0_s6_clk",
2764                        .parent_hws = (const struct clk_hw *[]){
2765                                &gcc_qupv3_wrap0_s6_clk_src.clkr.hw
2766                        },
2767                        .num_parents = 1,
2768                        .flags = CLK_SET_RATE_PARENT,
2769                        .ops = &clk_branch2_ops,
2770                },
2771        },
2772};
2773
2774static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2775        .halt_reg = 0x17994,
2776        .halt_check = BRANCH_HALT_VOTED,
2777        .clkr = {
2778                .enable_reg = 0x5200c,
2779                .enable_mask = BIT(17),
2780                .hw.init = &(struct clk_init_data){
2781                        .name = "gcc_qupv3_wrap0_s7_clk",
2782                        .parent_hws = (const struct clk_hw *[]){
2783                                &gcc_qupv3_wrap0_s7_clk_src.clkr.hw
2784                        },
2785                        .num_parents = 1,
2786                        .flags = CLK_SET_RATE_PARENT,
2787                        .ops = &clk_branch2_ops,
2788                },
2789        },
2790};
2791
2792static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2793        .halt_reg = 0x18144,
2794        .halt_check = BRANCH_HALT_VOTED,
2795        .clkr = {
2796                .enable_reg = 0x5200c,
2797                .enable_mask = BIT(22),
2798                .hw.init = &(struct clk_init_data){
2799                        .name = "gcc_qupv3_wrap1_s0_clk",
2800                        .parent_hws = (const struct clk_hw *[]){
2801                                &gcc_qupv3_wrap1_s0_clk_src.clkr.hw
2802                        },
2803                        .num_parents = 1,
2804                        .flags = CLK_SET_RATE_PARENT,
2805                        .ops = &clk_branch2_ops,
2806                },
2807        },
2808};
2809
2810static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2811        .halt_reg = 0x18274,
2812        .halt_check = BRANCH_HALT_VOTED,
2813        .clkr = {
2814                .enable_reg = 0x5200c,
2815                .enable_mask = BIT(23),
2816                .hw.init = &(struct clk_init_data){
2817                        .name = "gcc_qupv3_wrap1_s1_clk",
2818                        .parent_hws = (const struct clk_hw *[]){
2819                                &gcc_qupv3_wrap1_s1_clk_src.clkr.hw
2820                        },
2821                        .num_parents = 1,
2822                        .flags = CLK_SET_RATE_PARENT,
2823                        .ops = &clk_branch2_ops,
2824                },
2825        },
2826};
2827
2828static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2829        .halt_reg = 0x183a4,
2830        .halt_check = BRANCH_HALT_VOTED,
2831        .clkr = {
2832                .enable_reg = 0x5200c,
2833                .enable_mask = BIT(24),
2834                .hw.init = &(struct clk_init_data){
2835                        .name = "gcc_qupv3_wrap1_s2_clk",
2836                        .parent_hws = (const struct clk_hw *[]){
2837                                &gcc_qupv3_wrap1_s2_clk_src.clkr.hw
2838                        },
2839                        .num_parents = 1,
2840                        .flags = CLK_SET_RATE_PARENT,
2841                        .ops = &clk_branch2_ops,
2842                },
2843        },
2844};
2845
2846static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2847        .halt_reg = 0x184d4,
2848        .halt_check = BRANCH_HALT_VOTED,
2849        .clkr = {
2850                .enable_reg = 0x5200c,
2851                .enable_mask = BIT(25),
2852                .hw.init = &(struct clk_init_data){
2853                        .name = "gcc_qupv3_wrap1_s3_clk",
2854                        .parent_hws = (const struct clk_hw *[]){
2855                                &gcc_qupv3_wrap1_s3_clk_src.clkr.hw
2856                        },
2857                        .num_parents = 1,
2858                        .flags = CLK_SET_RATE_PARENT,
2859                        .ops = &clk_branch2_ops,
2860                },
2861        },
2862};
2863
2864static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2865        .halt_reg = 0x18604,
2866        .halt_check = BRANCH_HALT_VOTED,
2867        .clkr = {
2868                .enable_reg = 0x5200c,
2869                .enable_mask = BIT(26),
2870                .hw.init = &(struct clk_init_data){
2871                        .name = "gcc_qupv3_wrap1_s4_clk",
2872                        .parent_hws = (const struct clk_hw *[]){
2873                                &gcc_qupv3_wrap1_s4_clk_src.clkr.hw
2874                        },
2875                        .num_parents = 1,
2876                        .flags = CLK_SET_RATE_PARENT,
2877                        .ops = &clk_branch2_ops,
2878                },
2879        },
2880};
2881
2882static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2883        .halt_reg = 0x18734,
2884        .halt_check = BRANCH_HALT_VOTED,
2885        .clkr = {
2886                .enable_reg = 0x5200c,
2887                .enable_mask = BIT(27),
2888                .hw.init = &(struct clk_init_data){
2889                        .name = "gcc_qupv3_wrap1_s5_clk",
2890                        .parent_hws = (const struct clk_hw *[]){
2891                                &gcc_qupv3_wrap1_s5_clk_src.clkr.hw
2892                        },
2893                        .num_parents = 1,
2894                        .flags = CLK_SET_RATE_PARENT,
2895                        .ops = &clk_branch2_ops,
2896                },
2897        },
2898};
2899
2900static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2901        .halt_reg = 0x1e144,
2902        .halt_check = BRANCH_HALT_VOTED,
2903        .clkr = {
2904                .enable_reg = 0x52014,
2905                .enable_mask = BIT(4),
2906                .hw.init = &(struct clk_init_data){
2907                        .name = "gcc_qupv3_wrap2_s0_clk",
2908                        .parent_hws = (const struct clk_hw *[]){
2909                                &gcc_qupv3_wrap2_s0_clk_src.clkr.hw
2910                        },
2911                        .num_parents = 1,
2912                        .flags = CLK_SET_RATE_PARENT,
2913                        .ops = &clk_branch2_ops,
2914                },
2915        },
2916};
2917
2918static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2919        .halt_reg = 0x1e274,
2920        .halt_check = BRANCH_HALT_VOTED,
2921        .clkr = {
2922                .enable_reg = 0x52014,
2923                .enable_mask = BIT(5),
2924                .hw.init = &(struct clk_init_data){
2925                        .name = "gcc_qupv3_wrap2_s1_clk",
2926                        .parent_hws = (const struct clk_hw *[]){
2927                                &gcc_qupv3_wrap2_s1_clk_src.clkr.hw
2928                        },
2929                        .num_parents = 1,
2930                        .flags = CLK_SET_RATE_PARENT,
2931                        .ops = &clk_branch2_ops,
2932                },
2933        },
2934};
2935
2936static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2937        .halt_reg = 0x1e3a4,
2938        .halt_check = BRANCH_HALT_VOTED,
2939        .clkr = {
2940                .enable_reg = 0x52014,
2941                .enable_mask = BIT(6),
2942                .hw.init = &(struct clk_init_data){
2943                        .name = "gcc_qupv3_wrap2_s2_clk",
2944                        .parent_hws = (const struct clk_hw *[]){
2945                                &gcc_qupv3_wrap2_s2_clk_src.clkr.hw
2946                        },
2947                        .num_parents = 1,
2948                        .flags = CLK_SET_RATE_PARENT,
2949                        .ops = &clk_branch2_ops,
2950                },
2951        },
2952};
2953
2954static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2955        .halt_reg = 0x1e4d4,
2956        .halt_check = BRANCH_HALT_VOTED,
2957        .clkr = {
2958                .enable_reg = 0x52014,
2959                .enable_mask = BIT(7),
2960                .hw.init = &(struct clk_init_data){
2961                        .name = "gcc_qupv3_wrap2_s3_clk",
2962                        .parent_hws = (const struct clk_hw *[]){
2963                                &gcc_qupv3_wrap2_s3_clk_src.clkr.hw
2964                        },
2965                        .num_parents = 1,
2966                        .flags = CLK_SET_RATE_PARENT,
2967                        .ops = &clk_branch2_ops,
2968                },
2969        },
2970};
2971
2972static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2973        .halt_reg = 0x1e604,
2974        .halt_check = BRANCH_HALT_VOTED,
2975        .clkr = {
2976                .enable_reg = 0x52014,
2977                .enable_mask = BIT(8),
2978                .hw.init = &(struct clk_init_data){
2979                        .name = "gcc_qupv3_wrap2_s4_clk",
2980                        .parent_hws = (const struct clk_hw *[]){
2981                                &gcc_qupv3_wrap2_s4_clk_src.clkr.hw
2982                        },
2983                        .num_parents = 1,
2984                        .flags = CLK_SET_RATE_PARENT,
2985                        .ops = &clk_branch2_ops,
2986                },
2987        },
2988};
2989
2990static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2991        .halt_reg = 0x1e734,
2992        .halt_check = BRANCH_HALT_VOTED,
2993        .clkr = {
2994                .enable_reg = 0x52014,
2995                .enable_mask = BIT(9),
2996                .hw.init = &(struct clk_init_data){
2997                        .name = "gcc_qupv3_wrap2_s5_clk",
2998                        .parent_hws = (const struct clk_hw *[]){
2999                                &gcc_qupv3_wrap2_s5_clk_src.clkr.hw
3000                        },
3001                        .num_parents = 1,
3002                        .flags = CLK_SET_RATE_PARENT,
3003                        .ops = &clk_branch2_ops,
3004                },
3005        },
3006};
3007
3008static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3009        .halt_reg = 0x17004,
3010        .halt_check = BRANCH_HALT_VOTED,
3011        .clkr = {
3012                .enable_reg = 0x5200c,
3013                .enable_mask = BIT(6),
3014                .hw.init = &(struct clk_init_data){
3015                        .name = "gcc_qupv3_wrap_0_m_ahb_clk",
3016                        .ops = &clk_branch2_ops,
3017                },
3018        },
3019};
3020
3021static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3022        .halt_reg = 0x17008,
3023        .halt_check = BRANCH_HALT_VOTED,
3024        .hwcg_reg = 0x17008,
3025        .hwcg_bit = 1,
3026        .clkr = {
3027                .enable_reg = 0x5200c,
3028                .enable_mask = BIT(7),
3029                .hw.init = &(struct clk_init_data){
3030                        .name = "gcc_qupv3_wrap_0_s_ahb_clk",
3031                        .ops = &clk_branch2_ops,
3032                },
3033        },
3034};
3035
3036static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3037        .halt_reg = 0x18004,
3038        .halt_check = BRANCH_HALT_VOTED,
3039        .clkr = {
3040                .enable_reg = 0x5200c,
3041                .enable_mask = BIT(20),
3042                .hw.init = &(struct clk_init_data){
3043                        .name = "gcc_qupv3_wrap_1_m_ahb_clk",
3044                        .ops = &clk_branch2_ops,
3045                },
3046        },
3047};
3048
3049static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3050        .halt_reg = 0x18008,
3051        .halt_check = BRANCH_HALT_VOTED,
3052        .hwcg_reg = 0x18008,
3053        .hwcg_bit = 1,
3054        .clkr = {
3055                .enable_reg = 0x5200c,
3056                .enable_mask = BIT(21),
3057                .hw.init = &(struct clk_init_data){
3058                        .name = "gcc_qupv3_wrap_1_s_ahb_clk",
3059                        .ops = &clk_branch2_ops,
3060                },
3061        },
3062};
3063
3064static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
3065        .halt_reg = 0x1e004,
3066        .halt_check = BRANCH_HALT_VOTED,
3067        .clkr = {
3068                .enable_reg = 0x52014,
3069                .enable_mask = BIT(2),
3070                .hw.init = &(struct clk_init_data){
3071                        .name = "gcc_qupv3_wrap_2_m_ahb_clk",
3072                        .ops = &clk_branch2_ops,
3073                },
3074        },
3075};
3076
3077static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
3078        .halt_reg = 0x1e008,
3079        .halt_check = BRANCH_HALT_VOTED,
3080        .hwcg_reg = 0x1e008,
3081        .hwcg_bit = 1,
3082        .clkr = {
3083                .enable_reg = 0x52014,
3084                .enable_mask = BIT(1),
3085                .hw.init = &(struct clk_init_data){
3086                        .name = "gcc_qupv3_wrap_2_s_ahb_clk",
3087                        .ops = &clk_branch2_ops,
3088                },
3089        },
3090};
3091
3092static struct clk_branch gcc_sdcc2_ahb_clk = {
3093        .halt_reg = 0x14008,
3094        .halt_check = BRANCH_HALT,
3095        .clkr = {
3096                .enable_reg = 0x14008,
3097                .enable_mask = BIT(0),
3098                .hw.init = &(struct clk_init_data){
3099                        .name = "gcc_sdcc2_ahb_clk",
3100                        .ops = &clk_branch2_ops,
3101                },
3102        },
3103};
3104
3105static struct clk_branch gcc_sdcc2_apps_clk = {
3106        .halt_reg = 0x14004,
3107        .halt_check = BRANCH_HALT,
3108        .clkr = {
3109                .enable_reg = 0x14004,
3110                .enable_mask = BIT(0),
3111                .hw.init = &(struct clk_init_data){
3112                        .name = "gcc_sdcc2_apps_clk",
3113                        .parent_hws = (const struct clk_hw *[]){
3114                                &gcc_sdcc2_apps_clk_src.clkr.hw
3115                        },
3116                        .num_parents = 1,
3117                        .flags = CLK_SET_RATE_PARENT,
3118                        .ops = &clk_branch2_ops,
3119                },
3120        },
3121};
3122
3123static struct clk_branch gcc_sdcc4_ahb_clk = {
3124        .halt_reg = 0x16008,
3125        .halt_check = BRANCH_HALT,
3126        .clkr = {
3127                .enable_reg = 0x16008,
3128                .enable_mask = BIT(0),
3129                .hw.init = &(struct clk_init_data){
3130                        .name = "gcc_sdcc4_ahb_clk",
3131                        .ops = &clk_branch2_ops,
3132                },
3133        },
3134};
3135
3136static struct clk_branch gcc_sdcc4_apps_clk = {
3137        .halt_reg = 0x16004,
3138        .halt_check = BRANCH_HALT,
3139        .clkr = {
3140                .enable_reg = 0x16004,
3141                .enable_mask = BIT(0),
3142                .hw.init = &(struct clk_init_data){
3143                        .name = "gcc_sdcc4_apps_clk",
3144                        .parent_hws = (const struct clk_hw *[]){
3145                                &gcc_sdcc4_apps_clk_src.clkr.hw
3146                        },
3147                        .num_parents = 1,
3148                        .flags = CLK_SET_RATE_PARENT,
3149                        .ops = &clk_branch2_ops,
3150                },
3151        },
3152};
3153
3154/* For CPUSS functionality the SYS NOC clock needs to be left enabled */
3155static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
3156        .halt_reg = 0x4819c,
3157        .halt_check = BRANCH_HALT_VOTED,
3158        .clkr = {
3159                .enable_reg = 0x52004,
3160                .enable_mask = BIT(0),
3161                .hw.init = &(struct clk_init_data){
3162                        .name = "gcc_sys_noc_cpuss_ahb_clk",
3163                        .parent_hws = (const struct clk_hw *[]){
3164                                      &gcc_cpuss_ahb_clk_src.clkr.hw
3165                        },
3166                        .num_parents = 1,
3167                        .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
3168                        .ops = &clk_branch2_ops,
3169                },
3170        },
3171};
3172
3173static struct clk_branch gcc_tsif_ahb_clk = {
3174        .halt_reg = 0x36004,
3175        .halt_check = BRANCH_HALT,
3176        .clkr = {
3177                .enable_reg = 0x36004,
3178                .enable_mask = BIT(0),
3179                .hw.init = &(struct clk_init_data){
3180                        .name = "gcc_tsif_ahb_clk",
3181                        .ops = &clk_branch2_ops,
3182                },
3183        },
3184};
3185
3186static struct clk_branch gcc_tsif_inactivity_timers_clk = {
3187        .halt_reg = 0x3600c,
3188        .halt_check = BRANCH_HALT,
3189        .clkr = {
3190                .enable_reg = 0x3600c,
3191                .enable_mask = BIT(0),
3192                .hw.init = &(struct clk_init_data){
3193                        .name = "gcc_tsif_inactivity_timers_clk",
3194                        .ops = &clk_branch2_ops,
3195                },
3196        },
3197};
3198
3199static struct clk_branch gcc_tsif_ref_clk = {
3200        .halt_reg = 0x36008,
3201        .halt_check = BRANCH_HALT,
3202        .clkr = {
3203                .enable_reg = 0x36008,
3204                .enable_mask = BIT(0),
3205                .hw.init = &(struct clk_init_data){
3206                        .name = "gcc_tsif_ref_clk",
3207                        .parent_hws = (const struct clk_hw *[]){
3208                                &gcc_tsif_ref_clk_src.clkr.hw
3209                        },
3210                        .num_parents = 1,
3211                        .flags = CLK_SET_RATE_PARENT,
3212                        .ops = &clk_branch2_ops,
3213                },
3214        },
3215};
3216
3217static struct clk_branch gcc_ufs_card_2_ahb_clk = {
3218        .halt_reg = 0xa2014,
3219        .halt_check = BRANCH_HALT,
3220        .hwcg_reg = 0xa2014,
3221        .hwcg_bit = 1,
3222        .clkr = {
3223                .enable_reg = 0xa2014,
3224                .enable_mask = BIT(0),
3225                .hw.init = &(struct clk_init_data){
3226                        .name = "gcc_ufs_card_2_ahb_clk",
3227                        .ops = &clk_branch2_ops,
3228                },
3229        },
3230};
3231
3232static struct clk_branch gcc_ufs_card_2_axi_clk = {
3233        .halt_reg = 0xa2010,
3234        .halt_check = BRANCH_HALT,
3235        .hwcg_reg = 0xa2010,
3236        .hwcg_bit = 1,
3237        .clkr = {
3238                .enable_reg = 0xa2010,
3239                .enable_mask = BIT(0),
3240                .hw.init = &(struct clk_init_data){
3241                        .name = "gcc_ufs_card_2_axi_clk",
3242                        .parent_hws = (const struct clk_hw *[]){
3243                                &gcc_ufs_card_2_axi_clk_src.clkr.hw
3244                        },
3245                        .num_parents = 1,
3246                        .flags = CLK_SET_RATE_PARENT,
3247                        .ops = &clk_branch2_ops,
3248                },
3249        },
3250};
3251
3252static struct clk_branch gcc_ufs_card_2_ice_core_clk = {
3253        .halt_reg = 0xa205c,
3254        .halt_check = BRANCH_HALT,
3255        .hwcg_reg = 0xa205c,
3256        .hwcg_bit = 1,
3257        .clkr = {
3258                .enable_reg = 0xa205c,
3259                .enable_mask = BIT(0),
3260                .hw.init = &(struct clk_init_data){
3261                        .name = "gcc_ufs_card_2_ice_core_clk",
3262                        .parent_hws = (const struct clk_hw *[]){
3263                                &gcc_ufs_card_2_ice_core_clk_src.clkr.hw
3264                        },
3265                        .num_parents = 1,
3266                        .flags = CLK_SET_RATE_PARENT,
3267                        .ops = &clk_branch2_ops,
3268                },
3269        },
3270};
3271
3272static struct clk_branch gcc_ufs_card_2_phy_aux_clk = {
3273        .halt_reg = 0xa2090,
3274        .halt_check = BRANCH_HALT,
3275        .hwcg_reg = 0xa2090,
3276        .hwcg_bit = 1,
3277        .clkr = {
3278                .enable_reg = 0xa2090,
3279                .enable_mask = BIT(0),
3280                .hw.init = &(struct clk_init_data){
3281                        .name = "gcc_ufs_card_2_phy_aux_clk",
3282                        .parent_hws = (const struct clk_hw *[]){
3283                                &gcc_ufs_card_2_phy_aux_clk_src.clkr.hw
3284                        },
3285                        .num_parents = 1,
3286                        .flags = CLK_SET_RATE_PARENT,
3287                        .ops = &clk_branch2_ops,
3288                },
3289        },
3290};
3291
3292static struct clk_branch gcc_ufs_card_2_rx_symbol_0_clk = {
3293        .halt_reg = 0xa201c,
3294        .halt_check = BRANCH_HALT,
3295        .clkr = {
3296                .enable_reg = 0xa201c,
3297                .enable_mask = BIT(0),
3298                .hw.init = &(struct clk_init_data){
3299                        .name = "gcc_ufs_card_2_rx_symbol_0_clk",
3300                        .ops = &clk_branch2_ops,
3301                },
3302        },
3303};
3304
3305static struct clk_branch gcc_ufs_card_2_rx_symbol_1_clk = {
3306        .halt_reg = 0xa20ac,
3307        .halt_check = BRANCH_HALT,
3308        .clkr = {
3309                .enable_reg = 0xa20ac,
3310                .enable_mask = BIT(0),
3311                .hw.init = &(struct clk_init_data){
3312                        .name = "gcc_ufs_card_2_rx_symbol_1_clk",
3313                        .ops = &clk_branch2_ops,
3314                },
3315        },
3316};
3317
3318static struct clk_branch gcc_ufs_card_2_tx_symbol_0_clk = {
3319        .halt_reg = 0xa2018,
3320        .halt_check = BRANCH_HALT,
3321        .clkr = {
3322                .enable_reg = 0xa2018,
3323                .enable_mask = BIT(0),
3324                .hw.init = &(struct clk_init_data){
3325                        .name = "gcc_ufs_card_2_tx_symbol_0_clk",
3326                        .ops = &clk_branch2_ops,
3327                },
3328        },
3329};
3330
3331static struct clk_branch gcc_ufs_card_2_unipro_core_clk = {
3332        .halt_reg = 0xa2058,
3333        .halt_check = BRANCH_HALT,
3334        .hwcg_reg = 0xa2058,
3335        .hwcg_bit = 1,
3336        .clkr = {
3337                .enable_reg = 0xa2058,
3338                .enable_mask = BIT(0),
3339                .hw.init = &(struct clk_init_data){
3340                        .name = "gcc_ufs_card_2_unipro_core_clk",
3341                        .parent_hws = (const struct clk_hw *[]){
3342                                &gcc_ufs_card_2_unipro_core_clk_src.clkr.hw
3343                        },
3344                        .num_parents = 1,
3345                        .flags = CLK_SET_RATE_PARENT,
3346                        .ops = &clk_branch2_ops,
3347                },
3348        },
3349};
3350
3351static struct clk_branch gcc_ufs_card_ahb_clk = {
3352        .halt_reg = 0x75014,
3353        .halt_check = BRANCH_HALT,
3354        .hwcg_reg = 0x75014,
3355        .hwcg_bit = 1,
3356        .clkr = {
3357                .enable_reg = 0x75014,
3358                .enable_mask = BIT(0),
3359                .hw.init = &(struct clk_init_data){
3360                        .name = "gcc_ufs_card_ahb_clk",
3361                        .ops = &clk_branch2_ops,
3362                },
3363        },
3364};
3365
3366static struct clk_branch gcc_ufs_card_axi_clk = {
3367        .halt_reg = 0x75010,
3368        .halt_check = BRANCH_HALT,
3369        .hwcg_reg = 0x75010,
3370        .hwcg_bit = 1,
3371        .clkr = {
3372                .enable_reg = 0x75010,
3373                .enable_mask = BIT(0),
3374                .hw.init = &(struct clk_init_data){
3375                        .name = "gcc_ufs_card_axi_clk",
3376                        .parent_hws = (const struct clk_hw *[]){
3377                                      &gcc_ufs_card_axi_clk_src.clkr.hw
3378                        },
3379                        .num_parents = 1,
3380                        .flags = CLK_SET_RATE_PARENT,
3381                        .ops = &clk_branch2_ops,
3382                },
3383        },
3384};
3385
3386static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
3387        .halt_reg = 0x75010,
3388        .halt_check = BRANCH_HALT,
3389        .hwcg_reg = 0x75010,
3390        .hwcg_bit = 1,
3391        .clkr = {
3392                .enable_reg = 0x75010,
3393                .enable_mask = BIT(1),
3394                .hw.init = &(struct clk_init_data){
3395                        .name = "gcc_ufs_card_axi_hw_ctl_clk",
3396                        .parent_hws = (const struct clk_hw *[]){
3397                                      &gcc_ufs_card_axi_clk.clkr.hw
3398                        },
3399                        .num_parents = 1,
3400                        .flags = CLK_SET_RATE_PARENT,
3401                        .ops = &clk_branch_simple_ops,
3402                },
3403        },
3404};
3405
3406static struct clk_branch gcc_ufs_card_ice_core_clk = {
3407        .halt_reg = 0x7505c,
3408        .halt_check = BRANCH_HALT,
3409        .hwcg_reg = 0x7505c,
3410        .hwcg_bit = 1,
3411        .clkr = {
3412                .enable_reg = 0x7505c,
3413                .enable_mask = BIT(0),
3414                .hw.init = &(struct clk_init_data){
3415                        .name = "gcc_ufs_card_ice_core_clk",
3416                        .parent_hws = (const struct clk_hw *[]){
3417                                      &gcc_ufs_card_ice_core_clk_src.clkr.hw
3418                        },
3419                        .num_parents = 1,
3420                        .flags = CLK_SET_RATE_PARENT,
3421                        .ops = &clk_branch2_ops,
3422                },
3423        },
3424};
3425
3426static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
3427        .halt_reg = 0x7505c,
3428        .halt_check = BRANCH_HALT,
3429        .hwcg_reg = 0x7505c,
3430        .hwcg_bit = 1,
3431        .clkr = {
3432                .enable_reg = 0x7505c,
3433                .enable_mask = BIT(1),
3434                .hw.init = &(struct clk_init_data){
3435                        .name = "gcc_ufs_card_ice_core_hw_ctl_clk",
3436                        .parent_hws = (const struct clk_hw *[]){
3437                                      &gcc_ufs_card_ice_core_clk.clkr.hw
3438                        },
3439                        .num_parents = 1,
3440                        .flags = CLK_SET_RATE_PARENT,
3441                        .ops = &clk_branch_simple_ops,
3442                },
3443        },
3444};
3445
3446static struct clk_branch gcc_ufs_card_phy_aux_clk = {
3447        .halt_reg = 0x75090,
3448        .halt_check = BRANCH_HALT,
3449        .hwcg_reg = 0x75090,
3450        .hwcg_bit = 1,
3451        .clkr = {
3452                .enable_reg = 0x75090,
3453                .enable_mask = BIT(0),
3454                .hw.init = &(struct clk_init_data){
3455                        .name = "gcc_ufs_card_phy_aux_clk",
3456                        .parent_hws = (const struct clk_hw *[]){
3457                                      &gcc_ufs_card_phy_aux_clk_src.clkr.hw
3458                        },
3459                        .num_parents = 1,
3460                        .flags = CLK_SET_RATE_PARENT,
3461                        .ops = &clk_branch2_ops,
3462                },
3463        },
3464};
3465
3466static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
3467        .halt_reg = 0x75090,
3468        .halt_check = BRANCH_HALT,
3469        .hwcg_reg = 0x75090,
3470        .hwcg_bit = 1,
3471        .clkr = {
3472                .enable_reg = 0x75090,
3473                .enable_mask = BIT(1),
3474                .hw.init = &(struct clk_init_data){
3475                        .name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
3476                        .parent_hws = (const struct clk_hw *[]){
3477                                      &gcc_ufs_card_phy_aux_clk.clkr.hw
3478                        },
3479                        .num_parents = 1,
3480                        .flags = CLK_SET_RATE_PARENT,
3481                        .ops = &clk_branch_simple_ops,
3482                },
3483        },
3484};
3485
3486static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
3487        .halt_reg = 0x7501c,
3488        .halt_check = BRANCH_HALT_DELAY,
3489        .clkr = {
3490                .enable_reg = 0x7501c,
3491                .enable_mask = BIT(0),
3492                .hw.init = &(struct clk_init_data){
3493                        .name = "gcc_ufs_card_rx_symbol_0_clk",
3494                        .ops = &clk_branch2_ops,
3495                },
3496        },
3497};
3498
3499static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
3500        .halt_reg = 0x750ac,
3501        .halt_check = BRANCH_HALT_DELAY,
3502        .clkr = {
3503                .enable_reg = 0x750ac,
3504                .enable_mask = BIT(0),
3505                .hw.init = &(struct clk_init_data){
3506                        .name = "gcc_ufs_card_rx_symbol_1_clk",
3507                        .ops = &clk_branch2_ops,
3508                },
3509        },
3510};
3511
3512static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
3513        .halt_reg = 0x75018,
3514        .halt_check = BRANCH_HALT_DELAY,
3515        .clkr = {
3516                .enable_reg = 0x75018,
3517                .enable_mask = BIT(0),
3518                .hw.init = &(struct clk_init_data){
3519                        .name = "gcc_ufs_card_tx_symbol_0_clk",
3520                        .ops = &clk_branch2_ops,
3521                },
3522        },
3523};
3524
3525static struct clk_branch gcc_ufs_card_unipro_core_clk = {
3526        .halt_reg = 0x75058,
3527        .halt_check = BRANCH_HALT,
3528        .hwcg_reg = 0x75058,
3529        .hwcg_bit = 1,
3530        .clkr = {
3531                .enable_reg = 0x75058,
3532                .enable_mask = BIT(0),
3533                .hw.init = &(struct clk_init_data){
3534                        .name = "gcc_ufs_card_unipro_core_clk",
3535                        .parent_hws = (const struct clk_hw *[]){
3536                                      &gcc_ufs_card_unipro_core_clk_src.clkr.hw
3537                        },
3538                        .num_parents = 1,
3539                        .flags = CLK_SET_RATE_PARENT,
3540                        .ops = &clk_branch2_ops,
3541                },
3542        },
3543};
3544
3545static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
3546        .halt_reg = 0x75058,
3547        .halt_check = BRANCH_HALT,
3548        .hwcg_reg = 0x75058,
3549        .hwcg_bit = 1,
3550        .clkr = {
3551                .enable_reg = 0x75058,
3552                .enable_mask = BIT(1),
3553                .hw.init = &(struct clk_init_data){
3554                        .name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
3555                        .parent_hws = (const struct clk_hw *[]){
3556                                      &gcc_ufs_card_unipro_core_clk.clkr.hw
3557                        },
3558                        .num_parents = 1,
3559                        .flags = CLK_SET_RATE_PARENT,
3560                        .ops = &clk_branch_simple_ops,
3561                },
3562        },
3563};
3564
3565static struct clk_branch gcc_ufs_phy_ahb_clk = {
3566        .halt_reg = 0x77014,
3567        .halt_check = BRANCH_HALT,
3568        .hwcg_reg = 0x77014,
3569        .hwcg_bit = 1,
3570        .clkr = {
3571                .enable_reg = 0x77014,
3572                .enable_mask = BIT(0),
3573                .hw.init = &(struct clk_init_data){
3574                        .name = "gcc_ufs_phy_ahb_clk",
3575                        .ops = &clk_branch2_ops,
3576                },
3577        },
3578};
3579
3580static struct clk_branch gcc_ufs_phy_axi_clk = {
3581        .halt_reg = 0x77010,
3582        .halt_check = BRANCH_HALT,
3583        .hwcg_reg = 0x77010,
3584        .hwcg_bit = 1,
3585        .clkr = {
3586                .enable_reg = 0x77010,
3587                .enable_mask = BIT(0),
3588                .hw.init = &(struct clk_init_data){
3589                        .name = "gcc_ufs_phy_axi_clk",
3590                        .parent_hws = (const struct clk_hw *[]){
3591                                      &gcc_ufs_phy_axi_clk_src.clkr.hw
3592                        },
3593                        .num_parents = 1,
3594                        .flags = CLK_SET_RATE_PARENT,
3595                        .ops = &clk_branch2_ops,
3596                },
3597        },
3598};
3599
3600static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
3601        .halt_reg = 0x77010,
3602        .halt_check = BRANCH_HALT,
3603        .hwcg_reg = 0x77010,
3604        .hwcg_bit = 1,
3605        .clkr = {
3606                .enable_reg = 0x77010,
3607                .enable_mask = BIT(1),
3608                .hw.init = &(struct clk_init_data){
3609                        .name = "gcc_ufs_phy_axi_hw_ctl_clk",
3610                        .parent_hws = (const struct clk_hw *[]){
3611                                      &gcc_ufs_phy_axi_clk.clkr.hw
3612                        },
3613                        .num_parents = 1,
3614                        .flags = CLK_SET_RATE_PARENT,
3615                        .ops = &clk_branch_simple_ops,
3616                },
3617        },
3618};
3619
3620static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3621        .halt_reg = 0x7705c,
3622        .halt_check = BRANCH_HALT,
3623        .hwcg_reg = 0x7705c,
3624        .hwcg_bit = 1,
3625        .clkr = {
3626                .enable_reg = 0x7705c,
3627                .enable_mask = BIT(0),
3628                .hw.init = &(struct clk_init_data){
3629                        .name = "gcc_ufs_phy_ice_core_clk",
3630                        .parent_hws = (const struct clk_hw *[]){
3631                                      &gcc_ufs_phy_ice_core_clk_src.clkr.hw
3632                        },
3633                        .num_parents = 1,
3634                        .flags = CLK_SET_RATE_PARENT,
3635                        .ops = &clk_branch2_ops,
3636                },
3637        },
3638};
3639
3640static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3641        .halt_reg = 0x7705c,
3642        .halt_check = BRANCH_HALT,
3643        .hwcg_reg = 0x7705c,
3644        .hwcg_bit = 1,
3645        .clkr = {
3646                .enable_reg = 0x7705c,
3647                .enable_mask = BIT(1),
3648                .hw.init = &(struct clk_init_data){
3649                        .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3650                        .parent_hws = (const struct clk_hw *[]){
3651                                      &gcc_ufs_phy_ice_core_clk.clkr.hw
3652                        },
3653                        .num_parents = 1,
3654                        .flags = CLK_SET_RATE_PARENT,
3655                        .ops = &clk_branch_simple_ops,
3656                },
3657        },
3658};
3659
3660static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3661        .halt_reg = 0x77090,
3662        .halt_check = BRANCH_HALT,
3663        .hwcg_reg = 0x77090,
3664        .hwcg_bit = 1,
3665        .clkr = {
3666                .enable_reg = 0x77090,
3667                .enable_mask = BIT(0),
3668                .hw.init = &(struct clk_init_data){
3669                        .name = "gcc_ufs_phy_phy_aux_clk",
3670                        .parent_hws = (const struct clk_hw *[]){
3671                                      &gcc_ufs_phy_phy_aux_clk_src.clkr.hw
3672                        },
3673                        .num_parents = 1,
3674                        .flags = CLK_SET_RATE_PARENT,
3675                        .ops = &clk_branch2_ops,
3676                },
3677        },
3678};
3679
3680static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3681        .halt_reg = 0x77090,
3682        .halt_check = BRANCH_HALT,
3683        .hwcg_reg = 0x77090,
3684        .hwcg_bit = 1,
3685        .clkr = {
3686                .enable_reg = 0x77090,
3687                .enable_mask = BIT(1),
3688                .hw.init = &(struct clk_init_data){
3689                        .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3690                        .parent_hws = (const struct clk_hw *[]){
3691                                      &gcc_ufs_phy_phy_aux_clk.clkr.hw
3692                        },
3693                        .num_parents = 1,
3694                        .flags = CLK_SET_RATE_PARENT,
3695                        .ops = &clk_branch_simple_ops,
3696                },
3697        },
3698};
3699
3700static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3701        .halt_reg = 0x7701c,
3702        .halt_check = BRANCH_HALT_SKIP,
3703        .clkr = {
3704                .enable_reg = 0x7701c,
3705                .enable_mask = BIT(0),
3706                .hw.init = &(struct clk_init_data){
3707                        .name = "gcc_ufs_phy_rx_symbol_0_clk",
3708                        .ops = &clk_branch2_ops,
3709                },
3710        },
3711};
3712
3713static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3714        .halt_reg = 0x770ac,
3715        .halt_check = BRANCH_HALT_SKIP,
3716        .clkr = {
3717                .enable_reg = 0x770ac,
3718                .enable_mask = BIT(0),
3719                .hw.init = &(struct clk_init_data){
3720                        .name = "gcc_ufs_phy_rx_symbol_1_clk",
3721                        .ops = &clk_branch2_ops,
3722                },
3723        },
3724};
3725
3726static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3727        .halt_reg = 0x77018,
3728        .halt_check = BRANCH_HALT_SKIP,
3729        .clkr = {
3730                .enable_reg = 0x77018,
3731                .enable_mask = BIT(0),
3732                .hw.init = &(struct clk_init_data){
3733                        .name = "gcc_ufs_phy_tx_symbol_0_clk",
3734                        .ops = &clk_branch2_ops,
3735                },
3736        },
3737};
3738
3739static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3740        .halt_reg = 0x77058,
3741        .halt_check = BRANCH_HALT,
3742        .hwcg_reg = 0x77058,
3743        .hwcg_bit = 1,
3744        .clkr = {
3745                .enable_reg = 0x77058,
3746                .enable_mask = BIT(0),
3747                .hw.init = &(struct clk_init_data){
3748                        .name = "gcc_ufs_phy_unipro_core_clk",
3749                        .parent_hws = (const struct clk_hw *[]){
3750                                      &gcc_ufs_phy_unipro_core_clk_src.clkr.hw
3751                        },
3752                        .num_parents = 1,
3753                        .flags = CLK_SET_RATE_PARENT,
3754                        .ops = &clk_branch2_ops,
3755                },
3756        },
3757};
3758
3759static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3760        .halt_reg = 0x77058,
3761        .halt_check = BRANCH_HALT,
3762        .hwcg_reg = 0x77058,
3763        .hwcg_bit = 1,
3764        .clkr = {
3765                .enable_reg = 0x77058,
3766                .enable_mask = BIT(1),
3767                .hw.init = &(struct clk_init_data){
3768                        .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3769                        .parent_hws = (const struct clk_hw *[]){
3770                                      &gcc_ufs_phy_unipro_core_clk.clkr.hw
3771                        },
3772                        .num_parents = 1,
3773                        .flags = CLK_SET_RATE_PARENT,
3774                        .ops = &clk_branch_simple_ops,
3775                },
3776        },
3777};
3778
3779static struct clk_branch gcc_usb30_mp_master_clk = {
3780        .halt_reg = 0xa6010,
3781        .halt_check = BRANCH_HALT,
3782        .clkr = {
3783                .enable_reg = 0xa6010,
3784                .enable_mask = BIT(0),
3785                .hw.init = &(struct clk_init_data){
3786                        .name = "gcc_usb30_mp_master_clk",
3787                        .parent_hws = (const struct clk_hw *[]){
3788                                      &gcc_usb30_mp_master_clk_src.clkr.hw },
3789                        .num_parents = 1,
3790                        .flags = CLK_SET_RATE_PARENT,
3791                        .ops = &clk_branch2_ops,
3792                },
3793        },
3794};
3795
3796static struct clk_branch gcc_usb30_mp_mock_utmi_clk = {
3797        .halt_reg = 0xa6018,
3798        .halt_check = BRANCH_HALT,
3799        .clkr = {
3800                .enable_reg = 0xa6018,
3801                .enable_mask = BIT(0),
3802                .hw.init = &(struct clk_init_data){
3803                        .name = "gcc_usb30_mp_mock_utmi_clk",
3804                        .parent_hws = (const struct clk_hw *[]){
3805                                      &gcc_usb30_mp_mock_utmi_clk_src.clkr.hw
3806                        },
3807                        .num_parents = 1,
3808                        .flags = CLK_SET_RATE_PARENT,
3809                        .ops = &clk_branch2_ops,
3810                },
3811        },
3812};
3813
3814static struct clk_branch gcc_usb30_mp_sleep_clk = {
3815        .halt_reg = 0xa6014,
3816        .halt_check = BRANCH_HALT,
3817        .clkr = {
3818                .enable_reg = 0xa6014,
3819                .enable_mask = BIT(0),
3820                .hw.init = &(struct clk_init_data){
3821                        .name = "gcc_usb30_mp_sleep_clk",
3822                        .ops = &clk_branch2_ops,
3823                },
3824        },
3825};
3826
3827static struct clk_branch gcc_usb30_prim_master_clk = {
3828        .halt_reg = 0xf010,
3829        .halt_check = BRANCH_HALT,
3830        .clkr = {
3831                .enable_reg = 0xf010,
3832                .enable_mask = BIT(0),
3833                .hw.init = &(struct clk_init_data){
3834                        .name = "gcc_usb30_prim_master_clk",
3835                        .parent_hws = (const struct clk_hw *[]){
3836                                      &gcc_usb30_prim_master_clk_src.clkr.hw },
3837                        .num_parents = 1,
3838                        .flags = CLK_SET_RATE_PARENT,
3839                        .ops = &clk_branch2_ops,
3840                },
3841        },
3842};
3843
3844static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3845        .halt_reg = 0xf018,
3846        .halt_check = BRANCH_HALT,
3847        .clkr = {
3848                .enable_reg = 0xf018,
3849                .enable_mask = BIT(0),
3850                .hw.init = &(struct clk_init_data){
3851                        .name = "gcc_usb30_prim_mock_utmi_clk",
3852                        .parent_hws = (const struct clk_hw *[]){
3853                                      &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw
3854                        },
3855                        .num_parents = 1,
3856                        .flags = CLK_SET_RATE_PARENT,
3857                        .ops = &clk_branch2_ops,
3858                },
3859        },
3860};
3861
3862static struct clk_branch gcc_usb30_prim_sleep_clk = {
3863        .halt_reg = 0xf014,
3864        .halt_check = BRANCH_HALT,
3865        .clkr = {
3866                .enable_reg = 0xf014,
3867                .enable_mask = BIT(0),
3868                .hw.init = &(struct clk_init_data){
3869                        .name = "gcc_usb30_prim_sleep_clk",
3870                        .ops = &clk_branch2_ops,
3871                },
3872        },
3873};
3874
3875static struct clk_branch gcc_usb30_sec_master_clk = {
3876        .halt_reg = 0x10010,
3877        .halt_check = BRANCH_HALT,
3878        .clkr = {
3879                .enable_reg = 0x10010,
3880                .enable_mask = BIT(0),
3881                .hw.init = &(struct clk_init_data){
3882                        .name = "gcc_usb30_sec_master_clk",
3883                        .parent_hws = (const struct clk_hw *[]){
3884                                      &gcc_usb30_sec_master_clk_src.clkr.hw },
3885                        .num_parents = 1,
3886                        .flags = CLK_SET_RATE_PARENT,
3887                        .ops = &clk_branch2_ops,
3888                },
3889        },
3890};
3891
3892static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3893        .halt_reg = 0x10018,
3894        .halt_check = BRANCH_HALT,
3895        .clkr = {
3896                .enable_reg = 0x10018,
3897                .enable_mask = BIT(0),
3898                .hw.init = &(struct clk_init_data){
3899                        .name = "gcc_usb30_sec_mock_utmi_clk",
3900                        .parent_hws = (const struct clk_hw *[]){
3901                                      &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw
3902                        },
3903                        .num_parents = 1,
3904                        .flags = CLK_SET_RATE_PARENT,
3905                        .ops = &clk_branch2_ops,
3906                },
3907        },
3908};
3909
3910static struct clk_branch gcc_usb30_sec_sleep_clk = {
3911        .halt_reg = 0x10014,
3912        .halt_check = BRANCH_HALT,
3913        .clkr = {
3914                .enable_reg = 0x10014,
3915                .enable_mask = BIT(0),
3916                .hw.init = &(struct clk_init_data){
3917                        .name = "gcc_usb30_sec_sleep_clk",
3918                        .ops = &clk_branch2_ops,
3919                },
3920        },
3921};
3922
3923static struct clk_branch gcc_usb3_mp_phy_aux_clk = {
3924        .halt_reg = 0xa6050,
3925        .halt_check = BRANCH_HALT,
3926        .clkr = {
3927                .enable_reg = 0xa6050,
3928                .enable_mask = BIT(0),
3929                .hw.init = &(struct clk_init_data){
3930                        .name = "gcc_usb3_mp_phy_aux_clk",
3931                        .parent_hws = (const struct clk_hw *[]){
3932                                      &gcc_usb3_mp_phy_aux_clk_src.clkr.hw
3933                        },
3934                        .num_parents = 1,
3935                        .flags = CLK_SET_RATE_PARENT,
3936                        .ops = &clk_branch2_ops,
3937                },
3938        },
3939};
3940
3941static struct clk_branch gcc_usb3_mp_phy_com_aux_clk = {
3942        .halt_reg = 0xa6054,
3943        .halt_check = BRANCH_HALT,
3944        .clkr = {
3945                .enable_reg = 0xa6054,
3946                .enable_mask = BIT(0),
3947                .hw.init = &(struct clk_init_data){
3948                        .name = "gcc_usb3_mp_phy_com_aux_clk",
3949                        .parent_hws = (const struct clk_hw *[]){
3950                                      &gcc_usb3_mp_phy_aux_clk_src.clkr.hw
3951                        },
3952                        .num_parents = 1,
3953                        .flags = CLK_SET_RATE_PARENT,
3954                        .ops = &clk_branch2_ops,
3955                },
3956        },
3957};
3958
3959static struct clk_branch gcc_usb3_mp_phy_pipe_0_clk = {
3960        .halt_reg = 0xa6058,
3961        .halt_check = BRANCH_HALT_SKIP,
3962        .clkr = {
3963                .enable_reg = 0xa6058,
3964                .enable_mask = BIT(0),
3965                .hw.init = &(struct clk_init_data){
3966                        .name = "gcc_usb3_mp_phy_pipe_0_clk",
3967                        .ops = &clk_branch2_ops,
3968                },
3969        },
3970};
3971
3972static struct clk_branch gcc_usb3_mp_phy_pipe_1_clk = {
3973        .halt_reg = 0xa605c,
3974        .halt_check = BRANCH_HALT_SKIP,
3975        .clkr = {
3976                .enable_reg = 0xa605c,
3977                .enable_mask = BIT(0),
3978                .hw.init = &(struct clk_init_data){
3979                        .name = "gcc_usb3_mp_phy_pipe_1_clk",
3980                        .ops = &clk_branch2_ops,
3981                },
3982        },
3983};
3984
3985static struct clk_branch gcc_usb3_prim_clkref_clk = {
3986        .halt_reg = 0x8c008,
3987        .halt_check = BRANCH_HALT,
3988        .clkr = {
3989                .enable_reg = 0x8c008,
3990                .enable_mask = BIT(0),
3991                .hw.init = &(struct clk_init_data){
3992                        .name = "gcc_usb3_prim_clkref_clk",
3993                        .ops = &clk_branch2_ops,
3994                },
3995        },
3996};
3997
3998static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3999        .halt_reg = 0xf050,
4000        .halt_check = BRANCH_HALT,
4001        .clkr = {
4002                .enable_reg = 0xf050,
4003                .enable_mask = BIT(0),
4004                .hw.init = &(struct clk_init_data){
4005                        .name = "gcc_usb3_prim_phy_aux_clk",
4006                        .parent_hws = (const struct clk_hw *[]){
4007                                      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw
4008                        },
4009                        .num_parents = 1,
4010                        .flags = CLK_SET_RATE_PARENT,
4011                        .ops = &clk_branch2_ops,
4012                },
4013        },
4014};
4015
4016static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
4017        .halt_reg = 0xf054,
4018        .halt_check = BRANCH_HALT,
4019        .clkr = {
4020                .enable_reg = 0xf054,
4021                .enable_mask = BIT(0),
4022                .hw.init = &(struct clk_init_data){
4023                        .name = "gcc_usb3_prim_phy_com_aux_clk",
4024                        .parent_hws = (const struct clk_hw *[]){
4025                                      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw
4026                        },
4027                        .num_parents = 1,
4028                        .flags = CLK_SET_RATE_PARENT,
4029                        .ops = &clk_branch2_ops,
4030                },
4031        },
4032};
4033
4034static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
4035        .halt_reg = 0xf058,
4036        .halt_check = BRANCH_HALT_SKIP,
4037        .clkr = {
4038                .enable_reg = 0xf058,
4039                .enable_mask = BIT(0),
4040                .hw.init = &(struct clk_init_data){
4041                        .name = "gcc_usb3_prim_phy_pipe_clk",
4042                        .ops = &clk_branch2_ops,
4043                },
4044        },
4045};
4046
4047static struct clk_branch gcc_usb3_sec_clkref_clk = {
4048        .halt_reg = 0x8c028,
4049        .halt_check = BRANCH_HALT,
4050        .clkr = {
4051                .enable_reg = 0x8c028,
4052                .enable_mask = BIT(0),
4053                .hw.init = &(struct clk_init_data){
4054                        .name = "gcc_usb3_sec_clkref_clk",
4055                        .ops = &clk_branch2_ops,
4056                },
4057        },
4058};
4059
4060static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
4061        .halt_reg = 0x10050,
4062        .halt_check = BRANCH_HALT,
4063        .clkr = {
4064                .enable_reg = 0x10050,
4065                .enable_mask = BIT(0),
4066                .hw.init = &(struct clk_init_data){
4067                        .name = "gcc_usb3_sec_phy_aux_clk",
4068                        .parent_hws = (const struct clk_hw *[]){
4069                                      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw
4070                        },
4071                        .num_parents = 1,
4072                        .flags = CLK_SET_RATE_PARENT,
4073                        .ops = &clk_branch2_ops,
4074                },
4075        },
4076};
4077
4078static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
4079        .halt_reg = 0x10054,
4080        .halt_check = BRANCH_HALT,
4081        .clkr = {
4082                .enable_reg = 0x10054,
4083                .enable_mask = BIT(0),
4084                .hw.init = &(struct clk_init_data){
4085                        .name = "gcc_usb3_sec_phy_com_aux_clk",
4086                        .parent_hws = (const struct clk_hw *[]){
4087                                      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw
4088                        },
4089                        .num_parents = 1,
4090                        .flags = CLK_SET_RATE_PARENT,
4091                        .ops = &clk_branch2_ops,
4092                },
4093        },
4094};
4095
4096static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
4097        .halt_reg = 0x10058,
4098        .halt_check = BRANCH_HALT_SKIP,
4099        .clkr = {
4100                .enable_reg = 0x10058,
4101                .enable_mask = BIT(0),
4102                .hw.init = &(struct clk_init_data){
4103                        .name = "gcc_usb3_sec_phy_pipe_clk",
4104                        .ops = &clk_branch2_ops,
4105                },
4106        },
4107};
4108
4109static struct clk_branch gcc_video_axi0_clk = {
4110        .halt_reg = 0xb024,
4111        .halt_check = BRANCH_HALT,
4112        .clkr = {
4113                .enable_reg = 0xb024,
4114                .enable_mask = BIT(0),
4115                .hw.init = &(struct clk_init_data){
4116                        .name = "gcc_video_axi0_clk",
4117                        .ops = &clk_branch2_ops,
4118                },
4119        },
4120};
4121
4122static struct clk_branch gcc_video_axi1_clk = {
4123        .halt_reg = 0xb028,
4124        .halt_check = BRANCH_HALT,
4125        .clkr = {
4126                .enable_reg = 0xb028,
4127                .enable_mask = BIT(0),
4128                .hw.init = &(struct clk_init_data){
4129                        .name = "gcc_video_axi1_clk",
4130                        .ops = &clk_branch2_ops,
4131                },
4132        },
4133};
4134
4135static struct clk_branch gcc_video_axic_clk = {
4136        .halt_reg = 0xb02c,
4137        .halt_check = BRANCH_HALT,
4138        .clkr = {
4139                .enable_reg = 0xb02c,
4140                .enable_mask = BIT(0),
4141                .hw.init = &(struct clk_init_data){
4142                        .name = "gcc_video_axic_clk",
4143                        .ops = &clk_branch2_ops,
4144                },
4145        },
4146};
4147
4148static struct gdsc usb30_sec_gdsc = {
4149        .gdscr = 0x10004,
4150        .pd = {
4151                .name = "usb30_sec_gdsc",
4152        },
4153        .pwrsts = PWRSTS_OFF_ON,
4154        .flags = POLL_CFG_GDSCR,
4155};
4156
4157static struct gdsc emac_gdsc = {
4158        .gdscr = 0x6004,
4159        .pd = {
4160                .name = "emac_gdsc",
4161        },
4162        .pwrsts = PWRSTS_OFF_ON,
4163        .flags = POLL_CFG_GDSCR,
4164};
4165
4166static struct gdsc usb30_prim_gdsc = {
4167        .gdscr = 0xf004,
4168        .pd = {
4169                .name = "usb30_prim_gdsc",
4170        },
4171        .pwrsts = PWRSTS_OFF_ON,
4172        .flags = POLL_CFG_GDSCR,
4173};
4174
4175static struct gdsc pcie_0_gdsc = {
4176        .gdscr = 0x6b004,
4177        .pd = {
4178                .name = "pcie_0_gdsc",
4179        },
4180        .pwrsts = PWRSTS_OFF_ON,
4181        .flags = POLL_CFG_GDSCR,
4182};
4183
4184static struct gdsc ufs_card_gdsc = {
4185        .gdscr = 0x75004,
4186        .pd = {
4187                .name = "ufs_card_gdsc",
4188        },
4189        .pwrsts = PWRSTS_OFF_ON,
4190        .flags = POLL_CFG_GDSCR,
4191};
4192
4193static struct gdsc ufs_phy_gdsc = {
4194        .gdscr = 0x77004,
4195        .pd = {
4196                .name = "ufs_phy_gdsc",
4197        },
4198        .pwrsts = PWRSTS_OFF_ON,
4199        .flags = POLL_CFG_GDSCR,
4200};
4201
4202static struct gdsc pcie_1_gdsc = {
4203        .gdscr = 0x8d004,
4204        .pd = {
4205                .name = "pcie_1_gdsc",
4206        },
4207        .pwrsts = PWRSTS_OFF_ON,
4208        .flags = POLL_CFG_GDSCR,
4209};
4210
4211static struct gdsc pcie_2_gdsc = {
4212        .gdscr = 0x9d004,
4213        .pd = {
4214                .name = "pcie_2_gdsc",
4215        },
4216        .pwrsts = PWRSTS_OFF_ON,
4217        .flags = POLL_CFG_GDSCR,
4218};
4219
4220static struct gdsc ufs_card_2_gdsc = {
4221        .gdscr = 0xa2004,
4222        .pd = {
4223                .name = "ufs_card_2_gdsc",
4224        },
4225        .pwrsts = PWRSTS_OFF_ON,
4226        .flags = POLL_CFG_GDSCR,
4227};
4228
4229static struct gdsc pcie_3_gdsc = {
4230        .gdscr = 0xa3004,
4231        .pd = {
4232                .name = "pcie_3_gdsc",
4233        },
4234        .pwrsts = PWRSTS_OFF_ON,
4235        .flags = POLL_CFG_GDSCR,
4236};
4237
4238static struct gdsc usb30_mp_gdsc = {
4239        .gdscr = 0xa6004,
4240        .pd = {
4241                .name = "usb30_mp_gdsc",
4242        },
4243        .pwrsts = PWRSTS_OFF_ON,
4244        .flags = POLL_CFG_GDSCR,
4245};
4246
4247static struct clk_regmap *gcc_sc8180x_clocks[] = {
4248        [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
4249        [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
4250        [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
4251        [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
4252        [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
4253        [GCC_AGGRE_USB3_MP_AXI_CLK] = &gcc_aggre_usb3_mp_axi_clk.clkr,
4254        [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
4255        [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
4256        [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4257        [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
4258        [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
4259        [GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr,
4260        [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4261        [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
4262        [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
4263        [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
4264        [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
4265        [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4266        [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4267        [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
4268        [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
4269        [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
4270        [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
4271        [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
4272        [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
4273        [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
4274        [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4275        [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4276        [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4277        [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4278        [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4279        [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4280        [GCC_GP4_CLK] = &gcc_gp4_clk.clkr,
4281        [GCC_GP4_CLK_SRC] = &gcc_gp4_clk_src.clkr,
4282        [GCC_GP5_CLK] = &gcc_gp5_clk.clkr,
4283        [GCC_GP5_CLK_SRC] = &gcc_gp5_clk_src.clkr,
4284        [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4285        [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4286        [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4287        [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4288        [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
4289        [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
4290        [GCC_NPU_AXI_CLK_SRC] = &gcc_npu_axi_clk_src.clkr,
4291        [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
4292        [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
4293        [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
4294        [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
4295        [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
4296        [GCC_PCIE2_PHY_REFGEN_CLK] = &gcc_pcie2_phy_refgen_clk.clkr,
4297        [GCC_PCIE3_PHY_REFGEN_CLK] = &gcc_pcie3_phy_refgen_clk.clkr,
4298        [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
4299        [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
4300        [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
4301        [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
4302        [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
4303        [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
4304        [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
4305        [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
4306        [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
4307        [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
4308        [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
4309        [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
4310        [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
4311        [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
4312        [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
4313        [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
4314        [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
4315        [GCC_PCIE_2_AUX_CLK_SRC] = &gcc_pcie_2_aux_clk_src.clkr,
4316        [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
4317        [GCC_PCIE_2_CLKREF_CLK] = &gcc_pcie_2_clkref_clk.clkr,
4318        [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
4319        [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
4320        [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
4321        [GCC_PCIE_2_SLV_Q2A_AXI_CLK] = &gcc_pcie_2_slv_q2a_axi_clk.clkr,
4322        [GCC_PCIE_3_AUX_CLK] = &gcc_pcie_3_aux_clk.clkr,
4323        [GCC_PCIE_3_AUX_CLK_SRC] = &gcc_pcie_3_aux_clk_src.clkr,
4324        [GCC_PCIE_3_CFG_AHB_CLK] = &gcc_pcie_3_cfg_ahb_clk.clkr,
4325        [GCC_PCIE_3_CLKREF_CLK] = &gcc_pcie_3_clkref_clk.clkr,
4326        [GCC_PCIE_3_MSTR_AXI_CLK] = &gcc_pcie_3_mstr_axi_clk.clkr,
4327        [GCC_PCIE_3_PIPE_CLK] = &gcc_pcie_3_pipe_clk.clkr,
4328        [GCC_PCIE_3_SLV_AXI_CLK] = &gcc_pcie_3_slv_axi_clk.clkr,
4329        [GCC_PCIE_3_SLV_Q2A_AXI_CLK] = &gcc_pcie_3_slv_q2a_axi_clk.clkr,
4330        [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
4331        [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
4332        [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4333        [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4334        [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4335        [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4336        [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4337        [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4338        [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4339        [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4340        [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
4341        [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4342        [GCC_QSPI_1_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_1_cnoc_periph_ahb_clk.clkr,
4343        [GCC_QSPI_1_CORE_CLK] = &gcc_qspi_1_core_clk.clkr,
4344        [GCC_QSPI_1_CORE_CLK_SRC] = &gcc_qspi_1_core_clk_src.clkr,
4345        [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
4346        [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
4347        [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
4348        [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4349        [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4350        [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4351        [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4352        [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4353        [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4354        [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4355        [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4356        [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4357        [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4358        [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4359        [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4360        [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4361        [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4362        [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
4363        [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
4364        [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4365        [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4366        [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4367        [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4368        [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4369        [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4370        [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4371        [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4372        [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4373        [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4374        [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4375        [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4376        [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
4377        [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
4378        [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
4379        [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
4380        [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
4381        [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
4382        [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
4383        [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
4384        [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
4385        [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
4386        [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
4387        [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
4388        [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4389        [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4390        [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4391        [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4392        [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
4393        [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
4394        [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4395        [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4396        [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4397        [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
4398        [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
4399        [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
4400        [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
4401        [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
4402        [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
4403        [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
4404        [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
4405        [GCC_UFS_CARD_2_AHB_CLK] = &gcc_ufs_card_2_ahb_clk.clkr,
4406        [GCC_UFS_CARD_2_AXI_CLK] = &gcc_ufs_card_2_axi_clk.clkr,
4407        [GCC_UFS_CARD_2_AXI_CLK_SRC] = &gcc_ufs_card_2_axi_clk_src.clkr,
4408        [GCC_UFS_CARD_2_ICE_CORE_CLK] = &gcc_ufs_card_2_ice_core_clk.clkr,
4409        [GCC_UFS_CARD_2_ICE_CORE_CLK_SRC] = &gcc_ufs_card_2_ice_core_clk_src.clkr,
4410        [GCC_UFS_CARD_2_PHY_AUX_CLK] = &gcc_ufs_card_2_phy_aux_clk.clkr,
4411        [GCC_UFS_CARD_2_PHY_AUX_CLK_SRC] = &gcc_ufs_card_2_phy_aux_clk_src.clkr,
4412        [GCC_UFS_CARD_2_RX_SYMBOL_0_CLK] = &gcc_ufs_card_2_rx_symbol_0_clk.clkr,
4413        [GCC_UFS_CARD_2_RX_SYMBOL_1_CLK] = &gcc_ufs_card_2_rx_symbol_1_clk.clkr,
4414        [GCC_UFS_CARD_2_TX_SYMBOL_0_CLK] = &gcc_ufs_card_2_tx_symbol_0_clk.clkr,
4415        [GCC_UFS_CARD_2_UNIPRO_CORE_CLK] = &gcc_ufs_card_2_unipro_core_clk.clkr,
4416        [GCC_UFS_CARD_2_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_2_unipro_core_clk_src.clkr,
4417        [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
4418        [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
4419        [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
4420        [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
4421        [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
4422        [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
4423        [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
4424        [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
4425        [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
4426        [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
4427        [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
4428        [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
4429        [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
4430        [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
4431        [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr,
4432        [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
4433        [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4434        [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4435        [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4436        [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
4437        [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4438        [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4439        [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
4440        [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4441        [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4442        [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
4443        [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4444        [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
4445        [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4446        [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4447        [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
4448        [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
4449        [GCC_USB30_MP_MASTER_CLK] = &gcc_usb30_mp_master_clk.clkr,
4450        [GCC_USB30_MP_MASTER_CLK_SRC] = &gcc_usb30_mp_master_clk_src.clkr,
4451        [GCC_USB30_MP_MOCK_UTMI_CLK] = &gcc_usb30_mp_mock_utmi_clk.clkr,
4452        [GCC_USB30_MP_MOCK_UTMI_CLK_SRC] = &gcc_usb30_mp_mock_utmi_clk_src.clkr,
4453        [GCC_USB30_MP_SLEEP_CLK] = &gcc_usb30_mp_sleep_clk.clkr,
4454        [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4455        [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4456        [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4457        [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4458        [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4459        [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
4460        [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
4461        [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
4462        [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr,
4463        [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
4464        [GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr,
4465        [GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr,
4466        [GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr,
4467        [GCC_USB3_MP_PHY_PIPE_0_CLK] = &gcc_usb3_mp_phy_pipe_0_clk.clkr,
4468        [GCC_USB3_MP_PHY_PIPE_1_CLK] = &gcc_usb3_mp_phy_pipe_1_clk.clkr,
4469        [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
4470        [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
4471        [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4472        [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4473        [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4474        [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
4475        [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
4476        [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
4477        [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
4478        [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
4479        [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4480        [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
4481        [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
4482        [GPLL0] = &gpll0.clkr,
4483        [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
4484        [GPLL1] = &gpll1.clkr,
4485        [GPLL4] = &gpll4.clkr,
4486        [GPLL7] = &gpll7.clkr,
4487};
4488
4489static const struct qcom_reset_map gcc_sc8180x_resets[] = {
4490        [GCC_EMAC_BCR] = { 0x6000 },
4491        [GCC_GPU_BCR] = { 0x71000 },
4492        [GCC_MMSS_BCR] = { 0xb000 },
4493        [GCC_NPU_BCR] = { 0x4d000 },
4494        [GCC_PCIE_0_BCR] = { 0x6b000 },
4495        [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
4496        [GCC_PCIE_1_BCR] = { 0x8d000 },
4497        [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
4498        [GCC_PCIE_2_BCR] = { 0x9d000 },
4499        [GCC_PCIE_2_PHY_BCR] = { 0xa701c },
4500        [GCC_PCIE_3_BCR] = { 0xa3000 },
4501        [GCC_PCIE_3_PHY_BCR] = { 0xa801c },
4502        [GCC_PCIE_PHY_BCR] = { 0x6f000 },
4503        [GCC_PDM_BCR] = { 0x33000 },
4504        [GCC_PRNG_BCR] = { 0x34000 },
4505        [GCC_QSPI_1_BCR] = { 0x4a000 },
4506        [GCC_QSPI_BCR] = { 0x24008 },
4507        [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
4508        [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
4509        [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
4510        [GCC_QUSB2PHY_5_BCR] = { 0x12010 },
4511        [GCC_QUSB2PHY_MP0_BCR] = { 0x12008 },
4512        [GCC_QUSB2PHY_MP1_BCR] = { 0x1200c },
4513        [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
4514        [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
4515        [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x50000 },
4516        [GCC_USB3_PHY_PRIM_SP1_BCR] = { 0x50004 },
4517        [GCC_USB3_DP_PHY_PRIM_SP0_BCR] = { 0x50010 },
4518        [GCC_USB3_DP_PHY_PRIM_SP1_BCR] = { 0x50014 },
4519        [GCC_USB3_PHY_SEC_BCR] = { 0x50018 },
4520        [GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c },
4521        [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 },
4522        [GCC_SDCC2_BCR] = { 0x14000 },
4523        [GCC_SDCC4_BCR] = { 0x16000 },
4524        [GCC_TSIF_BCR] = { 0x36000 },
4525        [GCC_UFS_CARD_2_BCR] = { 0xa2000 },
4526        [GCC_UFS_CARD_BCR] = { 0x75000 },
4527        [GCC_UFS_PHY_BCR] = { 0x77000 },
4528        [GCC_USB30_MP_BCR] = { 0xa6000 },
4529        [GCC_USB30_PRIM_BCR] = { 0xf000 },
4530        [GCC_USB30_SEC_BCR] = { 0x10000 },
4531        [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
4532        [GCC_VIDEO_AXIC_CLK_BCR] = { 0xb02c, 2 },
4533        [GCC_VIDEO_AXI0_CLK_BCR] = { 0xb024, 2 },
4534        [GCC_VIDEO_AXI1_CLK_BCR] = { 0xb028, 2 },
4535};
4536
4537static struct gdsc *gcc_sc8180x_gdscs[] = {
4538        [EMAC_GDSC] = &emac_gdsc,
4539        [PCIE_0_GDSC] = &pcie_0_gdsc,
4540        [PCIE_1_GDSC] = &pcie_1_gdsc,
4541        [PCIE_2_GDSC] = &pcie_2_gdsc,
4542        [PCIE_3_GDSC] = &pcie_3_gdsc,
4543        [UFS_CARD_GDSC] = &ufs_card_gdsc,
4544        [UFS_CARD_2_GDSC] = &ufs_card_2_gdsc,
4545        [UFS_PHY_GDSC] = &ufs_phy_gdsc,
4546        [USB30_MP_GDSC] = &usb30_mp_gdsc,
4547        [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
4548        [USB30_SEC_GDSC] = &usb30_sec_gdsc,
4549};
4550
4551static const struct regmap_config gcc_sc8180x_regmap_config = {
4552        .reg_bits       = 32,
4553        .reg_stride     = 4,
4554        .val_bits       = 32,
4555        .max_register   = 0xc0004,
4556        .fast_io        = true,
4557};
4558
4559static const struct qcom_cc_desc gcc_sc8180x_desc = {
4560        .config = &gcc_sc8180x_regmap_config,
4561        .clks = gcc_sc8180x_clocks,
4562        .num_clks = ARRAY_SIZE(gcc_sc8180x_clocks),
4563        .resets = gcc_sc8180x_resets,
4564        .num_resets = ARRAY_SIZE(gcc_sc8180x_resets),
4565        .gdscs = gcc_sc8180x_gdscs,
4566        .num_gdscs = ARRAY_SIZE(gcc_sc8180x_gdscs),
4567};
4568
4569static const struct of_device_id gcc_sc8180x_match_table[] = {
4570        { .compatible = "qcom,gcc-sc8180x" },
4571        { }
4572};
4573MODULE_DEVICE_TABLE(of, gcc_sc8180x_match_table);
4574
4575static int gcc_sc8180x_probe(struct platform_device *pdev)
4576{
4577        struct regmap *regmap;
4578
4579        regmap = qcom_cc_map(pdev, &gcc_sc8180x_desc);
4580        if (IS_ERR(regmap))
4581                return PTR_ERR(regmap);
4582
4583        /*
4584         * Enable the following always-on clocks:
4585         * GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK, GCC_DISP_AHB_CLK,
4586         * GCC_VIDEO_XO_CLK, GCC_CAMERA_XO_CLK, GCC_DISP_XO_CLK,
4587         * GCC_CPUSS_GNOC_CLK, GCC_CPUSS_DVM_BUS_CLK, GCC_NPU_CFG_AHB_CLK and
4588         * GCC_GPU_CFG_AHB_CLK
4589         */
4590        regmap_update_bits(regmap, 0xb004, BIT(0), BIT(0));
4591        regmap_update_bits(regmap, 0xb008, BIT(0), BIT(0));
4592        regmap_update_bits(regmap, 0xb00c, BIT(0), BIT(0));
4593        regmap_update_bits(regmap, 0xb040, BIT(0), BIT(0));
4594        regmap_update_bits(regmap, 0xb044, BIT(0), BIT(0));
4595        regmap_update_bits(regmap, 0xb048, BIT(0), BIT(0));
4596        regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
4597        regmap_update_bits(regmap, 0x48190, BIT(0), BIT(0));
4598        regmap_update_bits(regmap, 0x4d004, BIT(0), BIT(0));
4599        regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
4600
4601        /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
4602        regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
4603        regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
4604
4605        return qcom_cc_really_probe(pdev, &gcc_sc8180x_desc, regmap);
4606}
4607
4608static struct platform_driver gcc_sc8180x_driver = {
4609        .probe          = gcc_sc8180x_probe,
4610        .driver         = {
4611                .name   = "gcc-sc8180x",
4612                .of_match_table = gcc_sc8180x_match_table,
4613        },
4614};
4615
4616static int __init gcc_sc8180x_init(void)
4617{
4618        return platform_driver_register(&gcc_sc8180x_driver);
4619}
4620core_initcall(gcc_sc8180x_init);
4621
4622static void __exit gcc_sc8180x_exit(void)
4623{
4624        platform_driver_unregister(&gcc_sc8180x_driver);
4625}
4626module_exit(gcc_sc8180x_exit);
4627
4628MODULE_DESCRIPTION("QTI GCC SC8180x driver");
4629MODULE_LICENSE("GPL v2");
4630