linux/drivers/clk/qcom/gcc-sm6350.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
   4 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
   5 */
   6
   7#include <linux/clk-provider.h>
   8#include <linux/module.h>
   9#include <linux/platform_device.h>
  10#include <linux/regmap.h>
  11
  12#include <dt-bindings/clock/qcom,gcc-sm6350.h>
  13
  14#include "clk-alpha-pll.h"
  15#include "clk-branch.h"
  16#include "clk-rcg.h"
  17#include "clk-regmap.h"
  18#include "clk-regmap-divider.h"
  19#include "clk-regmap-mux.h"
  20#include "common.h"
  21#include "gdsc.h"
  22#include "reset.h"
  23
  24enum {
  25        P_BI_TCXO,
  26        P_GPLL0_OUT_EVEN,
  27        P_GPLL0_OUT_MAIN,
  28        P_GPLL0_OUT_ODD,
  29        P_GPLL6_OUT_EVEN,
  30        P_GPLL7_OUT_MAIN,
  31        P_SLEEP_CLK,
  32};
  33
  34static struct clk_alpha_pll gpll0 = {
  35        .offset = 0x0,
  36        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  37        .clkr = {
  38                .enable_reg = 0x52010,
  39                .enable_mask = BIT(0),
  40                .hw.init = &(struct clk_init_data){
  41                        .name = "gpll0",
  42                        .parent_data = &(const struct clk_parent_data){
  43                                .fw_name = "bi_tcxo",
  44                        },
  45                        .num_parents = 1,
  46                        .ops = &clk_alpha_pll_fixed_fabia_ops,
  47                },
  48        },
  49};
  50
  51static const struct clk_div_table post_div_table_gpll0_out_even[] = {
  52        { 0x1, 2 },
  53        { }
  54};
  55
  56static struct clk_alpha_pll_postdiv gpll0_out_even = {
  57        .offset = 0x0,
  58        .post_div_shift = 8,
  59        .post_div_table = post_div_table_gpll0_out_even,
  60        .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
  61        .width = 4,
  62        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  63        .clkr.hw.init = &(struct clk_init_data){
  64                .name = "gpll0_out_even",
  65                .parent_hws = (const struct clk_hw*[]){
  66                        &gpll0.clkr.hw,
  67                },
  68                .num_parents = 1,
  69                .ops = &clk_alpha_pll_postdiv_fabia_ops,
  70        },
  71};
  72
  73static const struct clk_div_table post_div_table_gpll0_out_odd[] = {
  74        { 0x3, 3 },
  75        { }
  76};
  77
  78static struct clk_alpha_pll_postdiv gpll0_out_odd = {
  79        .offset = 0x0,
  80        .post_div_shift = 12,
  81        .post_div_table = post_div_table_gpll0_out_odd,
  82        .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),
  83        .width = 4,
  84        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  85        .clkr.hw.init = &(struct clk_init_data){
  86                .name = "gpll0_out_odd",
  87                .parent_hws = (const struct clk_hw*[]){
  88                        &gpll0.clkr.hw,
  89                },
  90                .num_parents = 1,
  91                .ops = &clk_alpha_pll_postdiv_fabia_ops,
  92        },
  93};
  94
  95static struct clk_alpha_pll gpll6 = {
  96        .offset = 0x6000,
  97        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  98        .clkr = {
  99                .enable_reg = 0x52010,
 100                .enable_mask = BIT(6),
 101                .hw.init = &(struct clk_init_data){
 102                        .name = "gpll6",
 103                        .parent_hws = (const struct clk_hw*[]){
 104                                &gpll0.clkr.hw,
 105                        },
 106                        .num_parents = 1,
 107                        .ops = &clk_alpha_pll_fixed_fabia_ops,
 108                },
 109        },
 110};
 111
 112static const struct clk_div_table post_div_table_gpll6_out_even[] = {
 113        { 0x1, 2 },
 114        { }
 115};
 116
 117static struct clk_alpha_pll_postdiv gpll6_out_even = {
 118        .offset = 0x6000,
 119        .post_div_shift = 8,
 120        .post_div_table = post_div_table_gpll6_out_even,
 121        .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),
 122        .width = 4,
 123        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
 124        .clkr.hw.init = &(struct clk_init_data){
 125                .name = "gpll6_out_even",
 126                .parent_hws = (const struct clk_hw*[]){
 127                        &gpll0.clkr.hw,
 128                },
 129                .num_parents = 1,
 130                .ops = &clk_alpha_pll_postdiv_fabia_ops,
 131        },
 132};
 133
 134static struct clk_alpha_pll gpll7 = {
 135        .offset = 0x7000,
 136        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
 137        .clkr = {
 138                .enable_reg = 0x52010,
 139                .enable_mask = BIT(7),
 140                .hw.init = &(struct clk_init_data){
 141                        .name = "gpll7",
 142                        .parent_hws = (const struct clk_hw*[]){
 143                                &gpll0.clkr.hw,
 144                        },
 145                        .num_parents = 1,
 146                        .ops = &clk_alpha_pll_fixed_fabia_ops,
 147                },
 148        },
 149};
 150
 151static const struct parent_map gcc_parent_map_0[] = {
 152        { P_BI_TCXO, 0 },
 153        { P_GPLL0_OUT_MAIN, 1 },
 154        { P_GPLL6_OUT_EVEN, 2 },
 155        { P_GPLL0_OUT_EVEN, 6 },
 156};
 157
 158static const struct clk_parent_data gcc_parent_data_0[] = {
 159        { .fw_name = "bi_tcxo" },
 160        { .hw = &gpll0.clkr.hw },
 161        { .hw = &gpll6_out_even.clkr.hw },
 162        { .hw = &gpll0_out_even.clkr.hw },
 163};
 164
 165static const struct parent_map gcc_parent_map_1[] = {
 166        { P_BI_TCXO, 0 },
 167        { P_GPLL0_OUT_EVEN, 6 },
 168};
 169
 170static const struct clk_parent_data gcc_parent_data_1[] = {
 171        { .fw_name = "bi_tcxo" },
 172        { .hw = &gpll0_out_even.clkr.hw },
 173};
 174
 175static const struct parent_map gcc_parent_map_2[] = {
 176        { P_BI_TCXO, 0 },
 177        { P_GPLL0_OUT_ODD, 2 },
 178};
 179
 180static const struct clk_parent_data gcc_parent_data_2_ao[] = {
 181        { .fw_name = "bi_tcxo_ao" },
 182        { .hw = &gpll0_out_odd.clkr.hw },
 183};
 184
 185static const struct parent_map gcc_parent_map_4[] = {
 186        { P_BI_TCXO, 0 },
 187        { P_GPLL0_OUT_MAIN, 1 },
 188        { P_GPLL0_OUT_ODD, 2 },
 189};
 190
 191static const struct clk_parent_data gcc_parent_data_4[] = {
 192        { .fw_name = "bi_tcxo" },
 193        { .hw = &gpll0.clkr.hw },
 194        { .hw = &gpll0_out_odd.clkr.hw },
 195};
 196
 197static const struct parent_map gcc_parent_map_5[] = {
 198        { P_BI_TCXO, 0 },
 199        { P_GPLL0_OUT_ODD, 2 },
 200        { P_SLEEP_CLK, 5 },
 201        { P_GPLL0_OUT_EVEN, 6 },
 202};
 203
 204static const struct clk_parent_data gcc_parent_data_5[] = {
 205        { .fw_name = "bi_tcxo" },
 206        { .hw = &gpll0_out_odd.clkr.hw },
 207        { .fw_name = "sleep_clk" },
 208        { .hw = &gpll0_out_even.clkr.hw },
 209};
 210
 211static const struct parent_map gcc_parent_map_6[] = {
 212        { P_BI_TCXO, 0 },
 213        { P_SLEEP_CLK, 5 },
 214};
 215
 216static const struct clk_parent_data gcc_parent_data_6[] = {
 217        { .fw_name = "bi_tcxo" },
 218        { .fw_name = "sleep_clk" }
 219};
 220
 221static const struct parent_map gcc_parent_map_7[] = {
 222        { P_BI_TCXO, 0 },
 223        { P_GPLL6_OUT_EVEN, 2 },
 224        { P_GPLL0_OUT_EVEN, 6 },
 225};
 226
 227static const struct clk_parent_data gcc_parent_data_7[] = {
 228        { .fw_name = "bi_tcxo" },
 229        { .hw = &gpll6_out_even.clkr.hw },
 230        { .hw = &gpll0_out_even.clkr.hw },
 231};
 232
 233static const struct parent_map gcc_parent_map_8[] = {
 234        { P_BI_TCXO, 0 },
 235        { P_GPLL0_OUT_ODD, 2 },
 236        { P_GPLL7_OUT_MAIN, 3 },
 237};
 238
 239static const struct clk_parent_data gcc_parent_data_8[] = {
 240        { .fw_name = "bi_tcxo" },
 241        { .hw = &gpll0_out_odd.clkr.hw },
 242        { .hw = &gpll7.clkr.hw },
 243};
 244
 245static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = {
 246        .reg = 0x4514C,
 247        .shift = 0,
 248        .width = 2,
 249        .clkr.hw.init = &(struct clk_init_data) {
 250                .name = "gcc_gpu_gpll0_main_div_clk_src",
 251                .parent_hws = (const struct clk_hw*[]){
 252                        &gpll0.clkr.hw,
 253                },
 254                .num_parents = 1,
 255                .ops = &clk_regmap_div_ro_ops,
 256        },
 257};
 258
 259static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = {
 260        .reg = 0x4ce00,
 261        .shift = 0,
 262        .width = 2,
 263        .clkr.hw.init = &(struct clk_init_data) {
 264                .name = "gcc_npu_pll0_main_div_clk_src",
 265                .parent_hws = (const struct clk_hw*[]){
 266                        &gpll0.clkr.hw,
 267                },
 268                .num_parents = 1,
 269                .ops = &clk_regmap_div_ro_ops,
 270        },
 271};
 272
 273static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
 274        F(19200000, P_BI_TCXO, 1, 0, 0),
 275        { }
 276};
 277
 278static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
 279        .cmd_rcgr = 0x30014,
 280        .mnd_width = 0,
 281        .hid_width = 5,
 282        .parent_map = gcc_parent_map_2,
 283        .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
 284        .clkr.hw.init = &(struct clk_init_data){
 285                .name = "gcc_cpuss_ahb_clk_src",
 286                .parent_data = gcc_parent_data_2_ao,
 287                .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
 288                .ops = &clk_rcg2_ops,
 289        },
 290};
 291
 292static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
 293        F(19200000, P_BI_TCXO, 1, 0, 0),
 294        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 295        F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
 296        F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
 297        F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
 298        { }
 299};
 300
 301static struct clk_rcg2 gcc_gp1_clk_src = {
 302        .cmd_rcgr = 0x37004,
 303        .mnd_width = 8,
 304        .hid_width = 5,
 305        .parent_map = gcc_parent_map_5,
 306        .freq_tbl = ftbl_gcc_gp1_clk_src,
 307        .clkr.hw.init = &(struct clk_init_data){
 308                .name = "gcc_gp1_clk_src",
 309                .parent_data = gcc_parent_data_5,
 310                .num_parents = ARRAY_SIZE(gcc_parent_data_5),
 311                .ops = &clk_rcg2_ops,
 312        },
 313};
 314
 315static struct clk_rcg2 gcc_gp2_clk_src = {
 316        .cmd_rcgr = 0x38004,
 317        .mnd_width = 8,
 318        .hid_width = 5,
 319        .parent_map = gcc_parent_map_5,
 320        .freq_tbl = ftbl_gcc_gp1_clk_src,
 321        .clkr.hw.init = &(struct clk_init_data){
 322                .name = "gcc_gp2_clk_src",
 323                .parent_data = gcc_parent_data_5,
 324                .num_parents = ARRAY_SIZE(gcc_parent_data_5),
 325                .ops = &clk_rcg2_ops,
 326        },
 327};
 328
 329static struct clk_rcg2 gcc_gp3_clk_src = {
 330        .cmd_rcgr = 0x39004,
 331        .mnd_width = 8,
 332        .hid_width = 5,
 333        .parent_map = gcc_parent_map_5,
 334        .freq_tbl = ftbl_gcc_gp1_clk_src,
 335        .clkr.hw.init = &(struct clk_init_data){
 336                .name = "gcc_gp3_clk_src",
 337                .parent_data = gcc_parent_data_5,
 338                .num_parents = ARRAY_SIZE(gcc_parent_data_5),
 339                .ops = &clk_rcg2_ops,
 340        },
 341};
 342
 343static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
 344        F(19200000, P_BI_TCXO, 1, 0, 0),
 345        F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
 346        { }
 347};
 348
 349static struct clk_rcg2 gcc_pdm2_clk_src = {
 350        .cmd_rcgr = 0x23010,
 351        .mnd_width = 0,
 352        .hid_width = 5,
 353        .parent_map = gcc_parent_map_1,
 354        .freq_tbl = ftbl_gcc_pdm2_clk_src,
 355        .clkr.hw.init = &(struct clk_init_data){
 356                .name = "gcc_pdm2_clk_src",
 357                .parent_data = gcc_parent_data_1,
 358                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
 359                .ops = &clk_rcg2_ops,
 360        },
 361};
 362
 363static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
 364        F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
 365        F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
 366        F(19200000, P_BI_TCXO, 1, 0, 0),
 367        F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
 368        F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
 369        F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
 370        F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
 371        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 372        F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
 373        F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
 374        F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
 375        F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
 376        F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
 377        F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
 378        F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
 379        F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),
 380        { }
 381};
 382
 383static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
 384        .name = "gcc_qupv3_wrap0_s0_clk_src",
 385        .parent_data = gcc_parent_data_0,
 386        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 387        .ops = &clk_rcg2_ops,
 388};
 389
 390static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
 391        .cmd_rcgr = 0x21148,
 392        .mnd_width = 16,
 393        .hid_width = 5,
 394        .parent_map = gcc_parent_map_0,
 395        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 396        .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
 397};
 398
 399static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
 400        .name = "gcc_qupv3_wrap0_s1_clk_src",
 401        .parent_data = gcc_parent_data_0,
 402        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 403        .ops = &clk_rcg2_ops,
 404};
 405
 406static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
 407        .cmd_rcgr = 0x21278,
 408        .mnd_width = 16,
 409        .hid_width = 5,
 410        .parent_map = gcc_parent_map_0,
 411        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 412        .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
 413};
 414
 415static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
 416        .name = "gcc_qupv3_wrap0_s2_clk_src",
 417        .parent_data = gcc_parent_data_0,
 418        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 419        .ops = &clk_rcg2_ops,
 420};
 421
 422static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
 423        .cmd_rcgr = 0x213a8,
 424        .mnd_width = 16,
 425        .hid_width = 5,
 426        .parent_map = gcc_parent_map_0,
 427        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 428        .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
 429};
 430
 431static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
 432        .name = "gcc_qupv3_wrap0_s3_clk_src",
 433        .parent_data = gcc_parent_data_0,
 434        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 435        .ops = &clk_rcg2_ops,
 436};
 437
 438static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
 439        .cmd_rcgr = 0x214d8,
 440        .mnd_width = 16,
 441        .hid_width = 5,
 442        .parent_map = gcc_parent_map_0,
 443        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 444        .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
 445};
 446
 447static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
 448        .name = "gcc_qupv3_wrap0_s4_clk_src",
 449        .parent_data = gcc_parent_data_0,
 450        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 451        .ops = &clk_rcg2_ops,
 452};
 453
 454static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
 455        .cmd_rcgr = 0x21608,
 456        .mnd_width = 16,
 457        .hid_width = 5,
 458        .parent_map = gcc_parent_map_0,
 459        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 460        .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
 461};
 462
 463static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
 464        .name = "gcc_qupv3_wrap0_s5_clk_src",
 465        .parent_data = gcc_parent_data_0,
 466        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 467        .ops = &clk_rcg2_ops,
 468};
 469
 470static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
 471        .cmd_rcgr = 0x21738,
 472        .mnd_width = 16,
 473        .hid_width = 5,
 474        .parent_map = gcc_parent_map_0,
 475        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 476        .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
 477};
 478
 479static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
 480        .name = "gcc_qupv3_wrap1_s0_clk_src",
 481        .parent_data = gcc_parent_data_0,
 482        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 483        .ops = &clk_rcg2_ops,
 484};
 485
 486static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
 487        .cmd_rcgr = 0x22018,
 488        .mnd_width = 16,
 489        .hid_width = 5,
 490        .parent_map = gcc_parent_map_0,
 491        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 492        .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
 493};
 494
 495static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
 496        .name = "gcc_qupv3_wrap1_s1_clk_src",
 497        .parent_data = gcc_parent_data_0,
 498        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 499        .ops = &clk_rcg2_ops,
 500};
 501
 502static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
 503        .cmd_rcgr = 0x22148,
 504        .mnd_width = 16,
 505        .hid_width = 5,
 506        .parent_map = gcc_parent_map_0,
 507        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 508        .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
 509};
 510
 511static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
 512        .name = "gcc_qupv3_wrap1_s2_clk_src",
 513        .parent_data = gcc_parent_data_0,
 514        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 515        .ops = &clk_rcg2_ops,
 516};
 517
 518static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
 519        .cmd_rcgr = 0x22278,
 520        .mnd_width = 16,
 521        .hid_width = 5,
 522        .parent_map = gcc_parent_map_0,
 523        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 524        .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
 525};
 526
 527static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
 528        .name = "gcc_qupv3_wrap1_s3_clk_src",
 529        .parent_data = gcc_parent_data_0,
 530        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 531        .ops = &clk_rcg2_ops,
 532};
 533
 534static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
 535        .cmd_rcgr = 0x223a8,
 536        .mnd_width = 16,
 537        .hid_width = 5,
 538        .parent_map = gcc_parent_map_0,
 539        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 540        .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
 541};
 542
 543static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
 544        .name = "gcc_qupv3_wrap1_s4_clk_src",
 545        .parent_data = gcc_parent_data_0,
 546        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 547        .ops = &clk_rcg2_ops,
 548};
 549
 550static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
 551        .cmd_rcgr = 0x224d8,
 552        .mnd_width = 16,
 553        .hid_width = 5,
 554        .parent_map = gcc_parent_map_0,
 555        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 556        .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
 557};
 558
 559static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
 560        .name = "gcc_qupv3_wrap1_s5_clk_src",
 561        .parent_data = gcc_parent_data_0,
 562        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
 563        .ops = &clk_rcg2_ops,
 564};
 565
 566static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
 567        .cmd_rcgr = 0x22608,
 568        .mnd_width = 16,
 569        .hid_width = 5,
 570        .parent_map = gcc_parent_map_0,
 571        .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 572        .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
 573};
 574
 575static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
 576        F(144000, P_BI_TCXO, 16, 3, 25),
 577        F(400000, P_BI_TCXO, 12, 1, 4),
 578        F(19200000, P_BI_TCXO, 1, 0, 0),
 579        F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
 580        F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
 581        F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
 582        F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
 583        F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),
 584        F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),
 585        { }
 586};
 587
 588static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
 589        .cmd_rcgr = 0x4b024,
 590        .mnd_width = 8,
 591        .hid_width = 5,
 592        .parent_map = gcc_parent_map_7,
 593        .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
 594        .clkr.hw.init = &(struct clk_init_data){
 595                .name = "gcc_sdcc1_apps_clk_src",
 596                .parent_data = gcc_parent_data_7,
 597                .num_parents = ARRAY_SIZE(gcc_parent_data_7),
 598                .ops = &clk_rcg2_ops,
 599        },
 600};
 601
 602static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
 603        F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
 604        F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
 605        F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
 606        { }
 607};
 608
 609static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
 610        .cmd_rcgr = 0x4b00c,
 611        .mnd_width = 0,
 612        .hid_width = 5,
 613        .parent_map = gcc_parent_map_1,
 614        .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
 615        .clkr.hw.init = &(struct clk_init_data){
 616                .name = "gcc_sdcc1_ice_core_clk_src",
 617                .parent_data = gcc_parent_data_1,
 618                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
 619                .ops = &clk_rcg2_ops,
 620        },
 621};
 622
 623static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
 624        F(400000, P_BI_TCXO, 12, 1, 4),
 625        F(9600000, P_BI_TCXO, 2, 0, 0),
 626        F(19200000, P_BI_TCXO, 1, 0, 0),
 627        F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
 628        F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
 629        F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
 630        F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
 631        { }
 632};
 633
 634static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
 635        .cmd_rcgr = 0x2000c,
 636        .mnd_width = 8,
 637        .hid_width = 5,
 638        .parent_map = gcc_parent_map_8,
 639        .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
 640        .clkr.hw.init = &(struct clk_init_data){
 641                .name = "gcc_sdcc2_apps_clk_src",
 642                .parent_data = gcc_parent_data_8,
 643                .num_parents = ARRAY_SIZE(gcc_parent_data_8),
 644                .ops = &clk_rcg2_floor_ops,
 645        },
 646};
 647
 648static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
 649        F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
 650        F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
 651        F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
 652        F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
 653        F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
 654        { }
 655};
 656
 657static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
 658        .cmd_rcgr = 0x3a01c,
 659        .mnd_width = 8,
 660        .hid_width = 5,
 661        .parent_map = gcc_parent_map_4,
 662        .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
 663        .clkr.hw.init = &(struct clk_init_data){
 664                .name = "gcc_ufs_phy_axi_clk_src",
 665                .parent_data = gcc_parent_data_4,
 666                .num_parents = ARRAY_SIZE(gcc_parent_data_4),
 667                .ops = &clk_rcg2_ops,
 668        },
 669};
 670
 671static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
 672        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
 673        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 674        F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
 675        F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
 676        { }
 677};
 678
 679static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
 680        .cmd_rcgr = 0x3a048,
 681        .mnd_width = 0,
 682        .hid_width = 5,
 683        .parent_map = gcc_parent_map_1,
 684        .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
 685        .clkr.hw.init = &(struct clk_init_data){
 686                .name = "gcc_ufs_phy_ice_core_clk_src",
 687                .parent_data = gcc_parent_data_1,
 688                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
 689                .ops = &clk_rcg2_ops,
 690        },
 691};
 692
 693static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
 694        F(9600000, P_BI_TCXO, 2, 0, 0),
 695        F(19200000, P_BI_TCXO, 1, 0, 0),
 696        { }
 697};
 698
 699static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
 700        .cmd_rcgr = 0x3a0b0,
 701        .mnd_width = 0,
 702        .hid_width = 5,
 703        .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
 704        .clkr.hw.init = &(struct clk_init_data){
 705                .name = "gcc_ufs_phy_phy_aux_clk_src",
 706                .parent_data = &(const struct clk_parent_data){
 707                        .fw_name = "bi_tcxo",
 708                },
 709                .num_parents = 1,
 710                .ops = &clk_rcg2_ops,
 711        },
 712};
 713
 714static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
 715        F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
 716        F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
 717        F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
 718        { }
 719};
 720
 721static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
 722        .cmd_rcgr = 0x3a060,
 723        .mnd_width = 0,
 724        .hid_width = 5,
 725        .parent_map = gcc_parent_map_1,
 726        .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
 727        .clkr.hw.init = &(struct clk_init_data){
 728                .name = "gcc_ufs_phy_unipro_core_clk_src",
 729                .parent_data = gcc_parent_data_1,
 730                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
 731                .ops = &clk_rcg2_ops,
 732        },
 733};
 734
 735static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
 736        F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0),
 737        F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
 738        F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
 739        F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
 740        { }
 741};
 742
 743static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
 744        .cmd_rcgr = 0x1a01c,
 745        .mnd_width = 8,
 746        .hid_width = 5,
 747        .parent_map = gcc_parent_map_4,
 748        .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
 749        .clkr.hw.init = &(struct clk_init_data){
 750                .name = "gcc_usb30_prim_master_clk_src",
 751                .parent_data = gcc_parent_data_4,
 752                .num_parents = ARRAY_SIZE(gcc_parent_data_4),
 753                .ops = &clk_rcg2_ops,
 754        },
 755};
 756
 757static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
 758        F(19200000, P_BI_TCXO, 1, 0, 0),
 759        { }
 760};
 761
 762static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
 763        .cmd_rcgr = 0x1a034,
 764        .mnd_width = 0,
 765        .hid_width = 5,
 766        .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
 767        .clkr.hw.init = &(struct clk_init_data){
 768                .name = "gcc_usb30_prim_mock_utmi_clk_src",
 769                .parent_data = &(const struct clk_parent_data){
 770                        .fw_name = "bi_tcxo",
 771                },
 772                .num_parents = 1,
 773                .ops = &clk_rcg2_ops,
 774        },
 775};
 776
 777static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
 778        .cmd_rcgr = 0x1a060,
 779        .mnd_width = 0,
 780        .hid_width = 5,
 781        .parent_map = gcc_parent_map_6,
 782        .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
 783        .clkr.hw.init = &(struct clk_init_data){
 784                .name = "gcc_usb3_prim_phy_aux_clk_src",
 785                .parent_data = gcc_parent_data_6,
 786                .num_parents = ARRAY_SIZE(gcc_parent_data_6),
 787                .ops = &clk_rcg2_ops,
 788        },
 789};
 790
 791static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
 792        .halt_reg = 0x3e014,
 793        .halt_check = BRANCH_HALT_DELAY,
 794        .hwcg_reg = 0x3e014,
 795        .hwcg_bit = 1,
 796        .clkr = {
 797                .enable_reg = 0x3e014,
 798                .enable_mask = BIT(0),
 799                .hw.init = &(struct clk_init_data){
 800                        .name = "gcc_aggre_ufs_phy_axi_clk",
 801                        .parent_hws = (const struct clk_hw*[]){
 802                                &gcc_ufs_phy_axi_clk_src.clkr.hw,
 803                        },
 804                        .num_parents = 1,
 805                        .flags = CLK_SET_RATE_PARENT,
 806                        .ops = &clk_branch2_ops,
 807                },
 808        },
 809};
 810
 811static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
 812        .halt_reg = 0x3e014,
 813        .halt_check = BRANCH_HALT,
 814        .hwcg_reg = 0x3e014,
 815        .hwcg_bit = 1,
 816        .clkr = {
 817                .enable_reg = 0x3e014,
 818                .enable_mask = BIT(1),
 819                .hw.init = &(struct clk_init_data){
 820                        .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
 821                        .parent_hws = (const struct clk_hw*[]){
 822                                &gcc_ufs_phy_axi_clk_src.clkr.hw,
 823                        },
 824                        .num_parents = 1,
 825                        .flags = CLK_SET_RATE_PARENT,
 826                        .ops = &clk_branch2_ops,
 827                },
 828        },
 829};
 830
 831static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
 832        .halt_reg = 0x3e014,
 833        .halt_check = BRANCH_HALT,
 834        .hwcg_reg = 0x3e014,
 835        .hwcg_bit = 1,
 836        .clkr = {
 837                .enable_reg = 0x3e014,
 838                .enable_mask = BIT(1),
 839                .hw.init = &(struct clk_init_data){
 840                        .name = "gcc_ufs_phy_axi_hw_ctl_clk",
 841                        .parent_hws = (const struct clk_hw*[]){
 842                                &gcc_ufs_phy_axi_clk_src.clkr.hw,
 843                        },
 844                        .num_parents = 1,
 845                        .flags = CLK_SET_RATE_PARENT,
 846                        .ops = &clk_branch2_ops,
 847                },
 848        },
 849};
 850
 851static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
 852        .halt_reg = 0x3e010,
 853        .halt_check = BRANCH_HALT,
 854        .hwcg_reg = 0x3e010,
 855        .hwcg_bit = 1,
 856        .clkr = {
 857                .enable_reg = 0x3e010,
 858                .enable_mask = BIT(0),
 859                .hw.init = &(struct clk_init_data){
 860                        .name = "gcc_aggre_usb3_prim_axi_clk",
 861                        .parent_hws = (const struct clk_hw*[]){
 862                                &gcc_usb30_prim_master_clk_src.clkr.hw,
 863                        },
 864                        .num_parents = 1,
 865                        .flags = CLK_SET_RATE_PARENT,
 866                        .ops = &clk_branch2_ops,
 867                },
 868        },
 869};
 870
 871static struct clk_branch gcc_boot_rom_ahb_clk = {
 872        .halt_reg = 0x26004,
 873        .halt_check = BRANCH_HALT_VOTED,
 874        .hwcg_reg = 0x26004,
 875        .hwcg_bit = 1,
 876        .clkr = {
 877                .enable_reg = 0x52000,
 878                .enable_mask = BIT(28),
 879                .hw.init = &(struct clk_init_data){
 880                        .name = "gcc_boot_rom_ahb_clk",
 881                        .ops = &clk_branch2_ops,
 882                },
 883        },
 884};
 885
 886static struct clk_branch gcc_camera_ahb_clk = {
 887        .halt_reg = 0x17008,
 888        .halt_check = BRANCH_HALT,
 889        .hwcg_reg = 0x17008,
 890        .hwcg_bit = 1,
 891        .clkr = {
 892                .enable_reg = 0x17008,
 893                .enable_mask = BIT(0),
 894                .hw.init = &(struct clk_init_data){
 895                        .name = "gcc_camera_ahb_clk",
 896                        .flags = CLK_IS_CRITICAL,
 897                        .ops = &clk_branch2_ops,
 898                },
 899        },
 900};
 901
 902static struct clk_branch gcc_camera_axi_clk = {
 903        .halt_reg = 0x17018,
 904        .halt_check = BRANCH_HALT,
 905        .hwcg_reg = 0x17018,
 906        .hwcg_bit = 1,
 907        .clkr = {
 908                .enable_reg = 0x17018,
 909                .enable_mask = BIT(0),
 910                .hw.init = &(struct clk_init_data){
 911                        .name = "gcc_camera_axi_clk",
 912                        .ops = &clk_branch2_ops,
 913                },
 914        },
 915};
 916
 917static struct clk_branch gcc_camera_throttle_nrt_axi_clk = {
 918        .halt_reg = 0x17078,
 919        .halt_check = BRANCH_VOTED,
 920        .hwcg_reg = 0x17078,
 921        .hwcg_bit = 1,
 922        .clkr = {
 923                .enable_reg = 0x17078,
 924                .enable_mask = BIT(0),
 925                .hw.init = &(struct clk_init_data){
 926                        .name = "gcc_camera_throttle_nrt_axi_clk",
 927                        .ops = &clk_branch2_ops,
 928                },
 929        },
 930};
 931
 932static struct clk_branch gcc_camera_throttle_rt_axi_clk = {
 933        .halt_reg = 0x17024,
 934        .halt_check = BRANCH_VOTED,
 935        .hwcg_reg = 0x17024,
 936        .hwcg_bit = 1,
 937        .clkr = {
 938                .enable_reg = 0x17024,
 939                .enable_mask = BIT(0),
 940                .hw.init = &(struct clk_init_data){
 941                        .name = "gcc_camera_throttle_rt_axi_clk",
 942                        .ops = &clk_branch2_ops,
 943                },
 944        },
 945};
 946
 947static struct clk_branch gcc_camera_xo_clk = {
 948        .halt_reg = 0x17030,
 949        .halt_check = BRANCH_HALT,
 950        .clkr = {
 951                .enable_reg = 0x17030,
 952                .enable_mask = BIT(0),
 953                .hw.init = &(struct clk_init_data){
 954                        .name = "gcc_camera_xo_clk",
 955                        .flags = CLK_IS_CRITICAL,
 956                        .ops = &clk_branch2_ops,
 957                },
 958        },
 959};
 960
 961static struct clk_branch gcc_ce1_ahb_clk = {
 962        .halt_reg = 0x2b00c,
 963        .halt_check = BRANCH_HALT_VOTED,
 964        .hwcg_reg = 0x2b00c,
 965        .hwcg_bit = 1,
 966        .clkr = {
 967                .enable_reg = 0x52008,
 968                .enable_mask = BIT(3),
 969                .hw.init = &(struct clk_init_data){
 970                        .name = "gcc_ce1_ahb_clk",
 971                        .ops = &clk_branch2_ops,
 972                },
 973        },
 974};
 975
 976static struct clk_branch gcc_ce1_axi_clk = {
 977        .halt_reg = 0x2b008,
 978        .halt_check = BRANCH_HALT_VOTED,
 979        .clkr = {
 980                .enable_reg = 0x52008,
 981                .enable_mask = BIT(2),
 982                .hw.init = &(struct clk_init_data){
 983                        .name = "gcc_ce1_axi_clk",
 984                        .ops = &clk_branch2_ops,
 985                },
 986        },
 987};
 988
 989static struct clk_branch gcc_ce1_clk = {
 990        .halt_reg = 0x2b004,
 991        .halt_check = BRANCH_HALT_VOTED,
 992        .clkr = {
 993                .enable_reg = 0x52008,
 994                .enable_mask = BIT(1),
 995                .hw.init = &(struct clk_init_data){
 996                        .name = "gcc_ce1_clk",
 997                        .ops = &clk_branch2_ops,
 998                },
 999        },
1000};
1001
1002static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1003        .halt_reg = 0x1101c,
1004        .halt_check = BRANCH_HALT,
1005        .hwcg_reg = 0x1101c,
1006        .hwcg_bit = 1,
1007        .clkr = {
1008                .enable_reg = 0x1101c,
1009                .enable_mask = BIT(0),
1010                .hw.init = &(struct clk_init_data){
1011                        .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1012                        .parent_hws = (const struct clk_hw*[]){
1013                                &gcc_usb30_prim_master_clk_src.clkr.hw,
1014                        },
1015                        .num_parents = 1,
1016                        .flags = CLK_SET_RATE_PARENT,
1017                        .ops = &clk_branch2_ops,
1018                },
1019        },
1020};
1021
1022static struct clk_branch gcc_cpuss_ahb_clk = {
1023        .halt_reg = 0x30000,
1024        .halt_check = BRANCH_HALT_VOTED,
1025        .hwcg_reg = 0x30000,
1026        .hwcg_bit = 1,
1027        .clkr = {
1028                .enable_reg = 0x52008,
1029                .enable_mask = BIT(4),
1030                .hw.init = &(struct clk_init_data){
1031                        .name = "gcc_cpuss_ahb_clk",
1032                        .parent_hws = (const struct clk_hw*[]){
1033                                &gcc_cpuss_ahb_clk_src.clkr.hw,
1034                        },
1035                        .num_parents = 1,
1036                        .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1037                        .ops = &clk_branch2_ops,
1038                },
1039        },
1040};
1041
1042static struct clk_branch gcc_cpuss_gnoc_clk = {
1043        .halt_reg = 0x30004,
1044        .halt_check = BRANCH_HALT_VOTED,
1045        .hwcg_reg = 0x30004,
1046        .hwcg_bit = 1,
1047        .clkr = {
1048                .enable_reg = 0x52008,
1049                .enable_mask = BIT(5),
1050                .hw.init = &(struct clk_init_data){
1051                        .name = "gcc_cpuss_gnoc_clk",
1052                        .flags = CLK_IS_CRITICAL,
1053                        .ops = &clk_branch2_ops,
1054                },
1055        },
1056};
1057
1058static struct clk_branch gcc_cpuss_rbcpr_clk = {
1059        .halt_reg = 0x30008,
1060        .halt_check = BRANCH_HALT,
1061        .clkr = {
1062                .enable_reg = 0x30008,
1063                .enable_mask = BIT(0),
1064                .hw.init = &(struct clk_init_data){
1065                        .name = "gcc_cpuss_rbcpr_clk",
1066                        .ops = &clk_branch2_ops,
1067                },
1068        },
1069};
1070
1071static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1072        .halt_reg = 0x2d038,
1073        .halt_check = BRANCH_VOTED,
1074        .hwcg_reg = 0x2d038,
1075        .hwcg_bit = 1,
1076        .clkr = {
1077                .enable_reg = 0x2d038,
1078                .enable_mask = BIT(0),
1079                .hw.init = &(struct clk_init_data){
1080                        .name = "gcc_ddrss_gpu_axi_clk",
1081                        .ops = &clk_branch2_ops,
1082                },
1083        },
1084};
1085
1086static struct clk_branch gcc_disp_ahb_clk = {
1087        .halt_reg = 0x1700c,
1088        .halt_check = BRANCH_HALT,
1089        .hwcg_reg = 0x1700c,
1090        .hwcg_bit = 1,
1091        .clkr = {
1092                .enable_reg = 0x1700c,
1093                .enable_mask = BIT(0),
1094                .hw.init = &(struct clk_init_data){
1095                        .name = "gcc_disp_ahb_clk",
1096                        .flags = CLK_IS_CRITICAL,
1097                        .ops = &clk_branch2_ops,
1098                },
1099        },
1100};
1101
1102static struct clk_branch gcc_disp_axi_clk = {
1103        .halt_reg = 0x1701c,
1104        .halt_check = BRANCH_HALT,
1105        .hwcg_reg = 0x1701c,
1106        .hwcg_bit = 1,
1107        .clkr = {
1108                .enable_reg = 0x1701c,
1109                .enable_mask = BIT(0),
1110                .hw.init = &(struct clk_init_data){
1111                        .name = "gcc_disp_axi_clk",
1112                        .ops = &clk_branch2_ops,
1113                },
1114        },
1115};
1116
1117static struct clk_branch gcc_disp_cc_sleep_clk = {
1118        .halt_reg = 0x17074,
1119        .halt_check = BRANCH_HALT_DELAY,
1120        .hwcg_reg = 0x17074,
1121        .hwcg_bit = 1,
1122        .clkr = {
1123                .enable_reg = 0x17074,
1124                .enable_mask = BIT(0),
1125                .hw.init = &(struct clk_init_data){
1126                        .name = "gcc_disp_cc_sleep_clk",
1127                        .ops = &clk_branch2_ops,
1128                },
1129        },
1130};
1131
1132static struct clk_branch gcc_disp_cc_xo_clk = {
1133        .halt_reg = 0x17070,
1134        .halt_check = BRANCH_HALT,
1135        .hwcg_reg = 0x17070,
1136        .hwcg_bit = 1,
1137        .clkr = {
1138                .enable_reg = 0x17070,
1139                .enable_mask = BIT(0),
1140                .hw.init = &(struct clk_init_data){
1141                        .name = "gcc_disp_cc_xo_clk",
1142                        .flags = CLK_IS_CRITICAL,
1143                        .ops = &clk_branch2_ops,
1144                },
1145        },
1146};
1147
1148static struct clk_branch gcc_disp_gpll0_clk = {
1149        .halt_check = BRANCH_HALT_DELAY,
1150        .clkr = {
1151                .enable_reg = 0x52000,
1152                .enable_mask = BIT(2),
1153                .hw.init = &(struct clk_init_data){
1154                        .name = "gcc_disp_gpll0_clk",
1155                        .parent_hws = (const struct clk_hw*[]){
1156                                &gpll0.clkr.hw,
1157                        },
1158                        .num_parents = 1,
1159                        .ops = &clk_branch2_ops,
1160                },
1161        },
1162};
1163
1164static struct clk_branch gcc_disp_throttle_axi_clk = {
1165        .halt_reg = 0x17028,
1166        .halt_check = BRANCH_HALT,
1167        .hwcg_reg = 0x17028,
1168        .hwcg_bit = 1,
1169        .clkr = {
1170                .enable_reg = 0x17028,
1171                .enable_mask = BIT(0),
1172                .hw.init = &(struct clk_init_data){
1173                        .name = "gcc_disp_throttle_axi_clk",
1174                        .ops = &clk_branch2_ops,
1175                },
1176        },
1177};
1178
1179static struct clk_branch gcc_disp_xo_clk = {
1180        .halt_reg = 0x17034,
1181        .halt_check = BRANCH_HALT,
1182        .clkr = {
1183                .enable_reg = 0x17034,
1184                .enable_mask = BIT(0),
1185                .hw.init = &(struct clk_init_data){
1186                        .name = "gcc_disp_xo_clk",
1187                        .ops = &clk_branch2_ops,
1188                },
1189        },
1190};
1191
1192static struct clk_branch gcc_gp1_clk = {
1193        .halt_reg = 0x37000,
1194        .halt_check = BRANCH_HALT,
1195        .clkr = {
1196                .enable_reg = 0x37000,
1197                .enable_mask = BIT(0),
1198                .hw.init = &(struct clk_init_data){
1199                        .name = "gcc_gp1_clk",
1200                        .parent_hws = (const struct clk_hw*[]){
1201                                &gcc_gp1_clk_src.clkr.hw,
1202                        },
1203                        .num_parents = 1,
1204                        .flags = CLK_SET_RATE_PARENT,
1205                        .ops = &clk_branch2_ops,
1206                },
1207        },
1208};
1209
1210static struct clk_branch gcc_gp2_clk = {
1211        .halt_reg = 0x38000,
1212        .halt_check = BRANCH_HALT,
1213        .clkr = {
1214                .enable_reg = 0x38000,
1215                .enable_mask = BIT(0),
1216                .hw.init = &(struct clk_init_data){
1217                        .name = "gcc_gp2_clk",
1218                        .parent_hws = (const struct clk_hw*[]){
1219                                &gcc_gp2_clk_src.clkr.hw,
1220                        },
1221                        .num_parents = 1,
1222                        .flags = CLK_SET_RATE_PARENT,
1223                        .ops = &clk_branch2_ops,
1224                },
1225        },
1226};
1227
1228static struct clk_branch gcc_gp3_clk = {
1229        .halt_reg = 0x39000,
1230        .halt_check = BRANCH_HALT,
1231        .clkr = {
1232                .enable_reg = 0x39000,
1233                .enable_mask = BIT(0),
1234                .hw.init = &(struct clk_init_data){
1235                        .name = "gcc_gp3_clk",
1236                        .parent_hws = (const struct clk_hw*[]){
1237                                &gcc_gp3_clk_src.clkr.hw,
1238                        },
1239                        .num_parents = 1,
1240                        .flags = CLK_SET_RATE_PARENT,
1241                        .ops = &clk_branch2_ops,
1242                },
1243        },
1244};
1245
1246static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1247        .halt_reg = 0x45004,
1248        .halt_check = BRANCH_HALT,
1249        .hwcg_reg = 0x45004,
1250        .hwcg_bit = 1,
1251        .clkr = {
1252                .enable_reg = 0x45004,
1253                .enable_mask = BIT(0),
1254                .hw.init = &(struct clk_init_data){
1255                        .name = "gcc_gpu_cfg_ahb_clk",
1256                        .flags = CLK_IS_CRITICAL,
1257                        .ops = &clk_branch2_ops,
1258                },
1259        },
1260};
1261
1262static struct clk_branch gcc_gpu_gpll0_clk = {
1263        .halt_check = BRANCH_HALT_DELAY,
1264        .clkr = {
1265                .enable_reg = 0x52008,
1266                .enable_mask = BIT(7),
1267                .hw.init = &(struct clk_init_data){
1268                        .name = "gcc_gpu_gpll0_clk",
1269                        .parent_hws = (const struct clk_hw*[]){
1270                                &gpll0.clkr.hw,
1271                        },
1272                        .num_parents = 1,
1273                        .ops = &clk_branch2_ops,
1274                },
1275        },
1276};
1277
1278static struct clk_branch gcc_gpu_gpll0_div_clk = {
1279        .halt_check = BRANCH_HALT_DELAY,
1280        .clkr = {
1281                .enable_reg = 0x52008,
1282                .enable_mask = BIT(8),
1283                .hw.init = &(struct clk_init_data){
1284                        .name = "gcc_gpu_gpll0_div_clk",
1285                        .parent_hws = (const struct clk_hw*[]){
1286                                &gcc_gpu_gpll0_main_div_clk_src.clkr.hw,
1287                        },
1288                        .num_parents = 1,
1289                        .ops = &clk_branch2_ops,
1290                },
1291        },
1292};
1293
1294static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1295        .halt_reg = 0x4500c,
1296        .halt_check = BRANCH_VOTED,
1297        .hwcg_reg = 0x4500c,
1298        .hwcg_bit = 1,
1299        .clkr = {
1300                .enable_reg = 0x4500c,
1301                .enable_mask = BIT(0),
1302                .hw.init = &(struct clk_init_data){
1303                        .name = "gcc_gpu_memnoc_gfx_clk",
1304                        .ops = &clk_branch2_ops,
1305                },
1306        },
1307};
1308
1309static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1310        .halt_reg = 0x45014,
1311        .halt_check = BRANCH_HALT,
1312        .hwcg_reg = 0x45014,
1313        .hwcg_bit = 1,
1314        .clkr = {
1315                .enable_reg = 0x45014,
1316                .enable_mask = BIT(0),
1317                .hw.init = &(struct clk_init_data){
1318                        .name = "gcc_gpu_snoc_dvm_gfx_clk",
1319                        .ops = &clk_branch2_ops,
1320                },
1321        },
1322};
1323
1324static struct clk_branch gcc_npu_axi_clk = {
1325        .halt_reg = 0x4c008,
1326        .halt_check = BRANCH_VOTED,
1327        .hwcg_reg = 0x4c008,
1328        .hwcg_bit = 1,
1329        .clkr = {
1330                .enable_reg = 0x4c008,
1331                .enable_mask = BIT(0),
1332                .hw.init = &(struct clk_init_data){
1333                        .name = "gcc_npu_axi_clk",
1334                        .ops = &clk_branch2_ops,
1335                },
1336        },
1337};
1338
1339static struct clk_branch gcc_npu_bwmon_axi_clk = {
1340        .halt_reg = 0x4d004,
1341        .halt_check = BRANCH_HALT_DELAY,
1342        .hwcg_reg = 0x4d004,
1343        .hwcg_bit = 1,
1344        .clkr = {
1345                .enable_reg = 0x4d004,
1346                .enable_mask = BIT(0),
1347                .hw.init = &(struct clk_init_data){
1348                        .name = "gcc_npu_bwmon_axi_clk",
1349                        .ops = &clk_branch2_ops,
1350                },
1351        },
1352};
1353
1354static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = {
1355        .halt_reg = 0x4d008,
1356        .halt_check = BRANCH_HALT,
1357        .clkr = {
1358                .enable_reg = 0x4d008,
1359                .enable_mask = BIT(0),
1360                .hw.init = &(struct clk_init_data){
1361                        .name = "gcc_npu_bwmon_dma_cfg_ahb_clk",
1362                        .ops = &clk_branch2_ops,
1363                },
1364        },
1365};
1366
1367static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = {
1368        .halt_reg = 0x4d00c,
1369        .halt_check = BRANCH_HALT,
1370        .clkr = {
1371                .enable_reg = 0x4d00c,
1372                .enable_mask = BIT(0),
1373                .hw.init = &(struct clk_init_data){
1374                        .name = "gcc_npu_bwmon_dsp_cfg_ahb_clk",
1375                        .ops = &clk_branch2_ops,
1376                },
1377        },
1378};
1379
1380static struct clk_branch gcc_npu_cfg_ahb_clk = {
1381        .halt_reg = 0x4c004,
1382        .halt_check = BRANCH_HALT,
1383        .hwcg_reg = 0x4c004,
1384        .hwcg_bit = 1,
1385        .clkr = {
1386                .enable_reg = 0x4c004,
1387                .enable_mask = BIT(0),
1388                .hw.init = &(struct clk_init_data){
1389                        .name = "gcc_npu_cfg_ahb_clk",
1390                        .flags = CLK_IS_CRITICAL,
1391                        .ops = &clk_branch2_ops,
1392                },
1393        },
1394};
1395
1396static struct clk_branch gcc_npu_dma_clk = {
1397        .halt_reg = 0x4c140,
1398        .halt_check = BRANCH_VOTED,
1399        .hwcg_reg = 0x4c140,
1400        .hwcg_bit = 1,
1401        .clkr = {
1402                .enable_reg = 0x4c140,
1403                .enable_mask = BIT(0),
1404                .hw.init = &(struct clk_init_data){
1405                        .name = "gcc_npu_dma_clk",
1406                        .ops = &clk_branch2_ops,
1407                },
1408        },
1409};
1410
1411static struct clk_branch gcc_npu_gpll0_clk = {
1412        .halt_check = BRANCH_HALT_DELAY,
1413        .clkr = {
1414                .enable_reg = 0x52008,
1415                .enable_mask = BIT(9),
1416                .hw.init = &(struct clk_init_data){
1417                        .name = "gcc_npu_gpll0_clk",
1418                        .parent_hws = (const struct clk_hw*[]){
1419                                &gpll0.clkr.hw,
1420                        },
1421                        .num_parents = 1,
1422                        .ops = &clk_branch2_ops,
1423                },
1424        },
1425};
1426
1427static struct clk_branch gcc_npu_gpll0_div_clk = {
1428        .halt_check = BRANCH_HALT_DELAY,
1429        .clkr = {
1430                .enable_reg = 0x52008,
1431                .enable_mask = BIT(10),
1432                .hw.init = &(struct clk_init_data){
1433                        .name = "gcc_npu_gpll0_div_clk",
1434                        .parent_hws = (const struct clk_hw*[]){
1435                                &gcc_npu_pll0_main_div_clk_src.clkr.hw,
1436                        },
1437                        .num_parents = 1,
1438                        .ops = &clk_branch2_ops,
1439                },
1440        },
1441};
1442
1443static struct clk_branch gcc_pdm2_clk = {
1444        .halt_reg = 0x2300c,
1445        .halt_check = BRANCH_HALT,
1446        .clkr = {
1447                .enable_reg = 0x2300c,
1448                .enable_mask = BIT(0),
1449                .hw.init = &(struct clk_init_data){
1450                        .name = "gcc_pdm2_clk",
1451                        .parent_hws = (const struct clk_hw*[]){
1452                                &gcc_pdm2_clk_src.clkr.hw,
1453                        },
1454                        .num_parents = 1,
1455                        .flags = CLK_SET_RATE_PARENT,
1456                        .ops = &clk_branch2_ops,
1457                },
1458        },
1459};
1460
1461static struct clk_branch gcc_pdm_ahb_clk = {
1462        .halt_reg = 0x23004,
1463        .halt_check = BRANCH_HALT,
1464        .hwcg_reg = 0x23004,
1465        .hwcg_bit = 1,
1466        .clkr = {
1467                .enable_reg = 0x23004,
1468                .enable_mask = BIT(0),
1469                .hw.init = &(struct clk_init_data){
1470                        .name = "gcc_pdm_ahb_clk",
1471                        .ops = &clk_branch2_ops,
1472                },
1473        },
1474};
1475
1476static struct clk_branch gcc_pdm_xo4_clk = {
1477        .halt_reg = 0x23008,
1478        .halt_check = BRANCH_HALT,
1479        .clkr = {
1480                .enable_reg = 0x23008,
1481                .enable_mask = BIT(0),
1482                .hw.init = &(struct clk_init_data){
1483                        .name = "gcc_pdm_xo4_clk",
1484                        .ops = &clk_branch2_ops,
1485                },
1486        },
1487};
1488
1489static struct clk_branch gcc_prng_ahb_clk = {
1490        .halt_reg = 0x24004,
1491        .halt_check = BRANCH_HALT_VOTED,
1492        .hwcg_reg = 0x24004,
1493        .hwcg_bit = 1,
1494        .clkr = {
1495                .enable_reg = 0x52000,
1496                .enable_mask = BIT(26),
1497                .hw.init = &(struct clk_init_data){
1498                        .name = "gcc_prng_ahb_clk",
1499                        .ops = &clk_branch2_ops,
1500                },
1501        },
1502};
1503
1504static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1505        .halt_reg = 0x21014,
1506        .halt_check = BRANCH_HALT_VOTED,
1507        .clkr = {
1508                .enable_reg = 0x52000,
1509                .enable_mask = BIT(9),
1510                .hw.init = &(struct clk_init_data){
1511                        .name = "gcc_qupv3_wrap0_core_2x_clk",
1512                        .ops = &clk_branch2_ops,
1513                },
1514        },
1515};
1516
1517static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1518        .halt_reg = 0x2100c,
1519        .halt_check = BRANCH_HALT_VOTED,
1520        .clkr = {
1521                .enable_reg = 0x52000,
1522                .enable_mask = BIT(8),
1523                .hw.init = &(struct clk_init_data){
1524                        .name = "gcc_qupv3_wrap0_core_clk",
1525                        .ops = &clk_branch2_ops,
1526                },
1527        },
1528};
1529
1530static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1531        .halt_reg = 0x21144,
1532        .halt_check = BRANCH_HALT_VOTED,
1533        .clkr = {
1534                .enable_reg = 0x52000,
1535                .enable_mask = BIT(10),
1536                .hw.init = &(struct clk_init_data){
1537                        .name = "gcc_qupv3_wrap0_s0_clk",
1538                        .parent_hws = (const struct clk_hw*[]){
1539                                &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1540                        },
1541                        .num_parents = 1,
1542                        .flags = CLK_SET_RATE_PARENT,
1543                        .ops = &clk_branch2_ops,
1544                },
1545        },
1546};
1547
1548static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1549        .halt_reg = 0x21274,
1550        .halt_check = BRANCH_HALT_VOTED,
1551        .clkr = {
1552                .enable_reg = 0x52000,
1553                .enable_mask = BIT(11),
1554                .hw.init = &(struct clk_init_data){
1555                        .name = "gcc_qupv3_wrap0_s1_clk",
1556                        .parent_hws = (const struct clk_hw*[]){
1557                                &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1558                        },
1559                        .num_parents = 1,
1560                        .flags = CLK_SET_RATE_PARENT,
1561                        .ops = &clk_branch2_ops,
1562                },
1563        },
1564};
1565
1566static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1567        .halt_reg = 0x213a4,
1568        .halt_check = BRANCH_HALT_VOTED,
1569        .clkr = {
1570                .enable_reg = 0x52000,
1571                .enable_mask = BIT(12),
1572                .hw.init = &(struct clk_init_data){
1573                        .name = "gcc_qupv3_wrap0_s2_clk",
1574                        .parent_hws = (const struct clk_hw*[]){
1575                                &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1576                        },
1577                        .num_parents = 1,
1578                        .flags = CLK_SET_RATE_PARENT,
1579                        .ops = &clk_branch2_ops,
1580                },
1581        },
1582};
1583
1584static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1585        .halt_reg = 0x214d4,
1586        .halt_check = BRANCH_HALT_VOTED,
1587        .clkr = {
1588                .enable_reg = 0x52000,
1589                .enable_mask = BIT(13),
1590                .hw.init = &(struct clk_init_data){
1591                        .name = "gcc_qupv3_wrap0_s3_clk",
1592                        .parent_hws = (const struct clk_hw*[]){
1593                                &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1594                        },
1595                        .num_parents = 1,
1596                        .flags = CLK_SET_RATE_PARENT,
1597                        .ops = &clk_branch2_ops,
1598                },
1599        },
1600};
1601
1602static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1603        .halt_reg = 0x21604,
1604        .halt_check = BRANCH_HALT_VOTED,
1605        .clkr = {
1606                .enable_reg = 0x52000,
1607                .enable_mask = BIT(14),
1608                .hw.init = &(struct clk_init_data){
1609                        .name = "gcc_qupv3_wrap0_s4_clk",
1610                        .parent_hws = (const struct clk_hw*[]){
1611                                &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1612                        },
1613                        .num_parents = 1,
1614                        .flags = CLK_SET_RATE_PARENT,
1615                        .ops = &clk_branch2_ops,
1616                },
1617        },
1618};
1619
1620static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1621        .halt_reg = 0x21734,
1622        .halt_check = BRANCH_HALT_VOTED,
1623        .clkr = {
1624                .enable_reg = 0x52000,
1625                .enable_mask = BIT(15),
1626                .hw.init = &(struct clk_init_data){
1627                        .name = "gcc_qupv3_wrap0_s5_clk",
1628                        .parent_hws = (const struct clk_hw*[]){
1629                                &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1630                        },
1631                        .num_parents = 1,
1632                        .flags = CLK_SET_RATE_PARENT,
1633                        .ops = &clk_branch2_ops,
1634                },
1635        },
1636};
1637
1638static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1639        .halt_reg = 0x22004,
1640        .halt_check = BRANCH_HALT_VOTED,
1641        .clkr = {
1642                .enable_reg = 0x52000,
1643                .enable_mask = BIT(16),
1644                .hw.init = &(struct clk_init_data){
1645                        .name = "gcc_qupv3_wrap1_core_2x_clk",
1646                        .ops = &clk_branch2_ops,
1647                },
1648        },
1649};
1650
1651static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1652        .halt_reg = 0x22008,
1653        .halt_check = BRANCH_HALT_VOTED,
1654        .clkr = {
1655                .enable_reg = 0x52000,
1656                .enable_mask = BIT(17),
1657                .hw.init = &(struct clk_init_data){
1658                        .name = "gcc_qupv3_wrap1_core_clk",
1659                        .ops = &clk_branch2_ops,
1660                },
1661        },
1662};
1663
1664static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1665        .halt_reg = 0x22014,
1666        .halt_check = BRANCH_HALT_VOTED,
1667        .clkr = {
1668                .enable_reg = 0x52000,
1669                .enable_mask = BIT(20),
1670                .hw.init = &(struct clk_init_data){
1671                        .name = "gcc_qupv3_wrap1_s0_clk",
1672                        .parent_hws = (const struct clk_hw*[]){
1673                                &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1674                        },
1675                        .num_parents = 1,
1676                        .flags = CLK_SET_RATE_PARENT,
1677                        .ops = &clk_branch2_ops,
1678                },
1679        },
1680};
1681
1682static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1683        .halt_reg = 0x22144,
1684        .halt_check = BRANCH_HALT_VOTED,
1685        .clkr = {
1686                .enable_reg = 0x52000,
1687                .enable_mask = BIT(21),
1688                .hw.init = &(struct clk_init_data){
1689                        .name = "gcc_qupv3_wrap1_s1_clk",
1690                        .parent_hws = (const struct clk_hw*[]){
1691                                &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1692                        },
1693                        .num_parents = 1,
1694                        .flags = CLK_SET_RATE_PARENT,
1695                        .ops = &clk_branch2_ops,
1696                },
1697        },
1698};
1699
1700static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1701        .halt_reg = 0x22274,
1702        .halt_check = BRANCH_HALT_VOTED,
1703        .clkr = {
1704                .enable_reg = 0x52000,
1705                .enable_mask = BIT(22),
1706                .hw.init = &(struct clk_init_data){
1707                        .name = "gcc_qupv3_wrap1_s2_clk",
1708                        .parent_hws = (const struct clk_hw*[]){
1709                                &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1710                        },
1711                        .num_parents = 1,
1712                        .flags = CLK_SET_RATE_PARENT,
1713                        .ops = &clk_branch2_ops,
1714                },
1715        },
1716};
1717
1718static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1719        .halt_reg = 0x223a4,
1720        .halt_check = BRANCH_HALT_VOTED,
1721        .clkr = {
1722                .enable_reg = 0x52000,
1723                .enable_mask = BIT(23),
1724                .hw.init = &(struct clk_init_data){
1725                        .name = "gcc_qupv3_wrap1_s3_clk",
1726                        .parent_hws = (const struct clk_hw*[]){
1727                                &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1728                        },
1729                        .num_parents = 1,
1730                        .flags = CLK_SET_RATE_PARENT,
1731                        .ops = &clk_branch2_ops,
1732                },
1733        },
1734};
1735
1736static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1737        .halt_reg = 0x224d4,
1738        .halt_check = BRANCH_HALT_VOTED,
1739        .clkr = {
1740                .enable_reg = 0x52000,
1741                .enable_mask = BIT(24),
1742                .hw.init = &(struct clk_init_data){
1743                        .name = "gcc_qupv3_wrap1_s4_clk",
1744                        .parent_hws = (const struct clk_hw*[]){
1745                                &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1746                        },
1747                        .num_parents = 1,
1748                        .flags = CLK_SET_RATE_PARENT,
1749                        .ops = &clk_branch2_ops,
1750                },
1751        },
1752};
1753
1754static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1755        .halt_reg = 0x22604,
1756        .halt_check = BRANCH_HALT_VOTED,
1757        .clkr = {
1758                .enable_reg = 0x52000,
1759                .enable_mask = BIT(25),
1760                .hw.init = &(struct clk_init_data){
1761                        .name = "gcc_qupv3_wrap1_s5_clk",
1762                        .parent_hws = (const struct clk_hw*[]){
1763                                &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1764                        },
1765                        .num_parents = 1,
1766                        .flags = CLK_SET_RATE_PARENT,
1767                        .ops = &clk_branch2_ops,
1768                },
1769        },
1770};
1771
1772static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1773        .halt_reg = 0x21004,
1774        .halt_check = BRANCH_HALT_VOTED,
1775        .hwcg_reg = 0x21004,
1776        .hwcg_bit = 1,
1777        .clkr = {
1778                .enable_reg = 0x52000,
1779                .enable_mask = BIT(6),
1780                .hw.init = &(struct clk_init_data){
1781                        .name = "gcc_qupv3_wrap_0_m_ahb_clk",
1782                        .ops = &clk_branch2_ops,
1783                },
1784        },
1785};
1786
1787static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
1788        .halt_reg = 0x21008,
1789        .halt_check = BRANCH_HALT_VOTED,
1790        .hwcg_reg = 0x21008,
1791        .hwcg_bit = 1,
1792        .clkr = {
1793                .enable_reg = 0x52000,
1794                .enable_mask = BIT(7),
1795                .hw.init = &(struct clk_init_data){
1796                        .name = "gcc_qupv3_wrap_0_s_ahb_clk",
1797                        .ops = &clk_branch2_ops,
1798                },
1799        },
1800};
1801
1802static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
1803        .halt_reg = 0x2200c,
1804        .halt_check = BRANCH_HALT_VOTED,
1805        .hwcg_reg = 0x2200c,
1806        .hwcg_bit = 1,
1807        .clkr = {
1808                .enable_reg = 0x52000,
1809                .enable_mask = BIT(18),
1810                .hw.init = &(struct clk_init_data){
1811                        .name = "gcc_qupv3_wrap_1_m_ahb_clk",
1812                        .ops = &clk_branch2_ops,
1813                },
1814        },
1815};
1816
1817static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
1818        .halt_reg = 0x22010,
1819        .halt_check = BRANCH_HALT_VOTED,
1820        .hwcg_reg = 0x22010,
1821        .hwcg_bit = 1,
1822        .clkr = {
1823                .enable_reg = 0x52000,
1824                .enable_mask = BIT(19),
1825                .hw.init = &(struct clk_init_data){
1826                        .name = "gcc_qupv3_wrap_1_s_ahb_clk",
1827                        .ops = &clk_branch2_ops,
1828                },
1829        },
1830};
1831
1832static struct clk_branch gcc_sdcc1_ahb_clk = {
1833        .halt_reg = 0x4b004,
1834        .halt_check = BRANCH_HALT,
1835        .clkr = {
1836                .enable_reg = 0x4b004,
1837                .enable_mask = BIT(0),
1838                .hw.init = &(struct clk_init_data){
1839                        .name = "gcc_sdcc1_ahb_clk",
1840                        .ops = &clk_branch2_ops,
1841                },
1842        },
1843};
1844
1845static struct clk_branch gcc_sdcc1_apps_clk = {
1846        .halt_reg = 0x4b008,
1847        .halt_check = BRANCH_HALT,
1848        .clkr = {
1849                .enable_reg = 0x4b008,
1850                .enable_mask = BIT(0),
1851                .hw.init = &(struct clk_init_data){
1852                        .name = "gcc_sdcc1_apps_clk",
1853                        .parent_hws = (const struct clk_hw*[]){
1854                                &gcc_sdcc1_apps_clk_src.clkr.hw,
1855                        },
1856                        .num_parents = 1,
1857                        .flags = CLK_SET_RATE_PARENT,
1858                        .ops = &clk_branch2_ops,
1859                },
1860        },
1861};
1862
1863static struct clk_branch gcc_sdcc1_ice_core_clk = {
1864        .halt_reg = 0x4b03c,
1865        .halt_check = BRANCH_HALT,
1866        .hwcg_reg = 0x4b03c,
1867        .hwcg_bit = 1,
1868        .clkr = {
1869                .enable_reg = 0x4b03c,
1870                .enable_mask = BIT(0),
1871                .hw.init = &(struct clk_init_data){
1872                        .name = "gcc_sdcc1_ice_core_clk",
1873                        .parent_hws = (const struct clk_hw*[]){
1874                                &gcc_sdcc1_ice_core_clk_src.clkr.hw,
1875                        },
1876                        .num_parents = 1,
1877                        .flags = CLK_SET_RATE_PARENT,
1878                        .ops = &clk_branch2_ops,
1879                },
1880        },
1881};
1882
1883static struct clk_branch gcc_sdcc2_ahb_clk = {
1884        .halt_reg = 0x20008,
1885        .halt_check = BRANCH_HALT,
1886        .clkr = {
1887                .enable_reg = 0x20008,
1888                .enable_mask = BIT(0),
1889                .hw.init = &(struct clk_init_data){
1890                        .name = "gcc_sdcc2_ahb_clk",
1891                        .ops = &clk_branch2_ops,
1892                },
1893        },
1894};
1895
1896static struct clk_branch gcc_sdcc2_apps_clk = {
1897        .halt_reg = 0x20004,
1898        .halt_check = BRANCH_HALT,
1899        .clkr = {
1900                .enable_reg = 0x20004,
1901                .enable_mask = BIT(0),
1902                .hw.init = &(struct clk_init_data){
1903                        .name = "gcc_sdcc2_apps_clk",
1904                        .parent_hws = (const struct clk_hw*[]){
1905                                &gcc_sdcc2_apps_clk_src.clkr.hw,
1906                        },
1907                        .num_parents = 1,
1908                        .flags = CLK_SET_RATE_PARENT,
1909                        .ops = &clk_branch2_ops,
1910                },
1911        },
1912};
1913
1914static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
1915        .halt_reg = 0x10140,
1916        .halt_check = BRANCH_HALT_VOTED,
1917        .hwcg_reg = 0x10140,
1918        .hwcg_bit = 1,
1919        .clkr = {
1920                .enable_reg = 0x52000,
1921                .enable_mask = BIT(0),
1922                .hw.init = &(struct clk_init_data){
1923                        .name = "gcc_sys_noc_cpuss_ahb_clk",
1924                        .parent_hws = (const struct clk_hw*[]){
1925                                &gcc_cpuss_ahb_clk_src.clkr.hw,
1926                        },
1927                        .num_parents = 1,
1928                        .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1929                        .ops = &clk_branch2_ops,
1930                },
1931        },
1932};
1933
1934static struct clk_branch gcc_ufs_mem_clkref_clk = {
1935        .halt_reg = 0x8c000,
1936        .halt_check = BRANCH_HALT,
1937        .clkr = {
1938                .enable_reg = 0x8c000,
1939                .enable_mask = BIT(0),
1940                .hw.init = &(struct clk_init_data){
1941                        .name = "gcc_ufs_mem_clkref_clk",
1942                        .ops = &clk_branch2_ops,
1943                },
1944        },
1945};
1946
1947static struct clk_branch gcc_ufs_phy_ahb_clk = {
1948        .halt_reg = 0x3a00c,
1949        .halt_check = BRANCH_HALT,
1950        .hwcg_reg = 0x3a00c,
1951        .hwcg_bit = 1,
1952        .clkr = {
1953                .enable_reg = 0x3a00c,
1954                .enable_mask = BIT(0),
1955                .hw.init = &(struct clk_init_data){
1956                        .name = "gcc_ufs_phy_ahb_clk",
1957                        .ops = &clk_branch2_ops,
1958                },
1959        },
1960};
1961
1962static struct clk_branch gcc_ufs_phy_axi_clk = {
1963        .halt_reg = 0x3a034,
1964        .halt_check = BRANCH_HALT,
1965        .hwcg_reg = 0x3a034,
1966        .hwcg_bit = 1,
1967        .clkr = {
1968                .enable_reg = 0x3a034,
1969                .enable_mask = BIT(0),
1970                .hw.init = &(struct clk_init_data){
1971                        .name = "gcc_ufs_phy_axi_clk",
1972                        .parent_hws = (const struct clk_hw*[]){
1973                                &gcc_ufs_phy_axi_clk_src.clkr.hw,
1974                        },
1975                        .num_parents = 1,
1976                        .flags = CLK_SET_RATE_PARENT,
1977                        .ops = &clk_branch2_ops,
1978                },
1979        },
1980};
1981
1982static struct clk_branch gcc_ufs_phy_ice_core_clk = {
1983        .halt_reg = 0x3a0a4,
1984        .halt_check = BRANCH_HALT,
1985        .hwcg_reg = 0x3a0a4,
1986        .hwcg_bit = 1,
1987        .clkr = {
1988                .enable_reg = 0x3a0a4,
1989                .enable_mask = BIT(0),
1990                .hw.init = &(struct clk_init_data){
1991                        .name = "gcc_ufs_phy_ice_core_clk",
1992                        .parent_hws = (const struct clk_hw*[]){
1993                                &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
1994                        },
1995                        .num_parents = 1,
1996                        .flags = CLK_SET_RATE_PARENT,
1997                        .ops = &clk_branch2_ops,
1998                },
1999        },
2000};
2001
2002static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2003        .halt_reg = 0x3a0a4,
2004        .halt_check = BRANCH_HALT,
2005        .hwcg_reg = 0x3a0a4,
2006        .hwcg_bit = 1,
2007        .clkr = {
2008                .enable_reg = 0x3a0a4,
2009                .enable_mask = BIT(1),
2010                .hw.init = &(struct clk_init_data){
2011                        .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2012                        .parent_hws = (const struct clk_hw*[]){
2013                                &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2014                        },
2015                        .num_parents = 1,
2016                        .flags = CLK_SET_RATE_PARENT,
2017                        .ops = &clk_branch2_ops,
2018                },
2019        },
2020};
2021
2022static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2023        .halt_reg = 0x3a0ac,
2024        .halt_check = BRANCH_HALT,
2025        .hwcg_reg = 0x3a0ac,
2026        .hwcg_bit = 1,
2027        .clkr = {
2028                .enable_reg = 0x3a0ac,
2029                .enable_mask = BIT(0),
2030                .hw.init = &(struct clk_init_data){
2031                        .name = "gcc_ufs_phy_phy_aux_clk",
2032                        .parent_hws = (const struct clk_hw*[]){
2033                                &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2034                        },
2035                        .num_parents = 1,
2036                        .flags = CLK_SET_RATE_PARENT,
2037                        .ops = &clk_branch2_ops,
2038                },
2039        },
2040};
2041
2042static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2043        .halt_reg = 0x3a0ac,
2044        .halt_check = BRANCH_HALT,
2045        .hwcg_reg = 0x3a0ac,
2046        .hwcg_bit = 1,
2047        .clkr = {
2048                .enable_reg = 0x3a0ac,
2049                .enable_mask = BIT(1),
2050                .hw.init = &(struct clk_init_data){
2051                        .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2052                        .parent_hws = (const struct clk_hw*[]){
2053                                &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2054                        },
2055                        .num_parents = 1,
2056                        .flags = CLK_SET_RATE_PARENT,
2057                        .ops = &clk_branch2_ops,
2058                },
2059        },
2060};
2061
2062static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2063        .halt_reg = 0x3a014,
2064        .halt_check = BRANCH_HALT_SKIP,
2065        .clkr = {
2066                .enable_reg = 0x3a014,
2067                .enable_mask = BIT(0),
2068                .hw.init = &(struct clk_init_data){
2069                        .name = "gcc_ufs_phy_rx_symbol_0_clk",
2070                        .ops = &clk_branch2_ops,
2071                },
2072        },
2073};
2074
2075static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2076        .halt_reg = 0x3a018,
2077        .halt_check = BRANCH_HALT_SKIP,
2078        .clkr = {
2079                .enable_reg = 0x3a018,
2080                .enable_mask = BIT(0),
2081                .hw.init = &(struct clk_init_data){
2082                        .name = "gcc_ufs_phy_rx_symbol_1_clk",
2083                        .ops = &clk_branch2_ops,
2084                },
2085        },
2086};
2087
2088static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2089        .halt_reg = 0x3a010,
2090        .halt_check = BRANCH_HALT_SKIP,
2091        .clkr = {
2092                .enable_reg = 0x3a010,
2093                .enable_mask = BIT(0),
2094                .hw.init = &(struct clk_init_data){
2095                        .name = "gcc_ufs_phy_tx_symbol_0_clk",
2096                        .ops = &clk_branch2_ops,
2097                },
2098        },
2099};
2100
2101static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2102        .halt_reg = 0x3a09c,
2103        .halt_check = BRANCH_HALT,
2104        .hwcg_reg = 0x3a09c,
2105        .hwcg_bit = 1,
2106        .clkr = {
2107                .enable_reg = 0x3a09c,
2108                .enable_mask = BIT(0),
2109                .hw.init = &(struct clk_init_data){
2110                        .name = "gcc_ufs_phy_unipro_core_clk",
2111                        .parent_hws = (const struct clk_hw*[]){
2112                                &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2113                        },
2114                        .num_parents = 1,
2115                        .flags = CLK_SET_RATE_PARENT,
2116                        .ops = &clk_branch2_ops,
2117                },
2118        },
2119};
2120
2121static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2122        .halt_reg = 0x3a09c,
2123        .halt_check = BRANCH_HALT,
2124        .hwcg_reg = 0x3a09c,
2125        .hwcg_bit = 1,
2126        .clkr = {
2127                .enable_reg = 0x3a09c,
2128                .enable_mask = BIT(1),
2129                .hw.init = &(struct clk_init_data){
2130                        .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2131                        .parent_hws = (const struct clk_hw*[]){
2132                                &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2133                        },
2134                        .num_parents = 1,
2135                        .flags = CLK_SET_RATE_PARENT,
2136                        .ops = &clk_branch2_ops,
2137                },
2138        },
2139};
2140
2141static struct clk_branch gcc_usb30_prim_master_clk = {
2142        .halt_reg = 0x1a00c,
2143        .halt_check = BRANCH_HALT,
2144        .clkr = {
2145                .enable_reg = 0x1a00c,
2146                .enable_mask = BIT(0),
2147                .hw.init = &(struct clk_init_data){
2148                        .name = "gcc_usb30_prim_master_clk",
2149                        .parent_hws = (const struct clk_hw*[]){
2150                                &gcc_usb30_prim_master_clk_src.clkr.hw,
2151                        },
2152                        .num_parents = 1,
2153                        .flags = CLK_SET_RATE_PARENT,
2154                        .ops = &clk_branch2_ops,
2155                },
2156        },
2157};
2158
2159static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2160        .halt_reg = 0x1a018,
2161        .halt_check = BRANCH_HALT,
2162        .clkr = {
2163                .enable_reg = 0x1a018,
2164                .enable_mask = BIT(0),
2165                .hw.init = &(struct clk_init_data){
2166                        .name = "gcc_usb30_prim_mock_utmi_clk",
2167                        .parent_hws = (const struct clk_hw*[]){
2168                                &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2169                        },
2170                        .num_parents = 1,
2171                        .flags = CLK_SET_RATE_PARENT,
2172                        .ops = &clk_branch2_ops,
2173                },
2174        },
2175};
2176
2177static struct clk_branch gcc_usb30_prim_sleep_clk = {
2178        .halt_reg = 0x1a014,
2179        .halt_check = BRANCH_HALT,
2180        .clkr = {
2181                .enable_reg = 0x1a014,
2182                .enable_mask = BIT(0),
2183                .hw.init = &(struct clk_init_data){
2184                        .name = "gcc_usb30_prim_sleep_clk",
2185                        .ops = &clk_branch2_ops,
2186                },
2187        },
2188};
2189
2190static struct clk_branch gcc_usb3_prim_clkref_clk = {
2191        .halt_reg = 0x8c010,
2192        .halt_check = BRANCH_HALT,
2193        .clkr = {
2194                .enable_reg = 0x8c010,
2195                .enable_mask = BIT(0),
2196                .hw.init = &(struct clk_init_data){
2197                        .name = "gcc_usb3_prim_clkref_clk",
2198                        .ops = &clk_branch2_ops,
2199                },
2200        },
2201};
2202
2203static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2204        .halt_reg = 0x1a050,
2205        .halt_check = BRANCH_HALT,
2206        .clkr = {
2207                .enable_reg = 0x1a050,
2208                .enable_mask = BIT(0),
2209                .hw.init = &(struct clk_init_data){
2210                        .name = "gcc_usb3_prim_phy_aux_clk",
2211                        .parent_hws = (const struct clk_hw*[]){
2212                                &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2213                        },
2214                        .num_parents = 1,
2215                        .flags = CLK_SET_RATE_PARENT,
2216                        .ops = &clk_branch2_ops,
2217                },
2218        },
2219};
2220
2221static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2222        .halt_reg = 0x1a054,
2223        .halt_check = BRANCH_HALT,
2224        .clkr = {
2225                .enable_reg = 0x1a054,
2226                .enable_mask = BIT(0),
2227                .hw.init = &(struct clk_init_data){
2228                        .name = "gcc_usb3_prim_phy_com_aux_clk",
2229                        .parent_hws = (const struct clk_hw*[]){
2230                                &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2231                        },
2232                        .num_parents = 1,
2233                        .flags = CLK_SET_RATE_PARENT,
2234                        .ops = &clk_branch2_ops,
2235                },
2236        },
2237};
2238
2239static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2240        .halt_reg = 0x1a058,
2241        .halt_check = BRANCH_HALT_SKIP,
2242        .hwcg_reg = 0x1a058,
2243        .hwcg_bit = 1,
2244        .clkr = {
2245                .enable_reg = 0x1a058,
2246                .enable_mask = BIT(0),
2247                .hw.init = &(struct clk_init_data){
2248                        .name = "gcc_usb3_prim_phy_pipe_clk",
2249                        .ops = &clk_branch2_ops,
2250                },
2251        },
2252};
2253
2254static struct clk_branch gcc_video_ahb_clk = {
2255        .halt_reg = 0x17004,
2256        .halt_check = BRANCH_HALT,
2257        .hwcg_reg = 0x17004,
2258        .hwcg_bit = 1,
2259        .clkr = {
2260                .enable_reg = 0x17004,
2261                .enable_mask = BIT(0),
2262                .hw.init = &(struct clk_init_data){
2263                        .name = "gcc_video_ahb_clk",
2264                        .flags = CLK_IS_CRITICAL,
2265                        .ops = &clk_branch2_ops,
2266                },
2267        },
2268};
2269
2270static struct clk_branch gcc_video_axi_clk = {
2271        .halt_reg = 0x17014,
2272        .halt_check = BRANCH_HALT,
2273        .hwcg_reg = 0x17014,
2274        .hwcg_bit = 1,
2275        .clkr = {
2276                .enable_reg = 0x17014,
2277                .enable_mask = BIT(0),
2278                .hw.init = &(struct clk_init_data){
2279                        .name = "gcc_video_axi_clk",
2280                        .ops = &clk_branch2_ops,
2281                },
2282        },
2283};
2284
2285static struct clk_branch gcc_video_throttle_axi_clk = {
2286        .halt_reg = 0x17020,
2287        .halt_check = BRANCH_HALT,
2288        .hwcg_reg = 0x17020,
2289        .hwcg_bit = 1,
2290        .clkr = {
2291                .enable_reg = 0x17020,
2292                .enable_mask = BIT(0),
2293                .hw.init = &(struct clk_init_data){
2294                        .name = "gcc_video_throttle_axi_clk",
2295                        .ops = &clk_branch2_ops,
2296                },
2297        },
2298};
2299
2300static struct clk_branch gcc_video_xo_clk = {
2301        .halt_reg = 0x1702c,
2302        .halt_check = BRANCH_HALT,
2303        .clkr = {
2304                .enable_reg = 0x1702c,
2305                .enable_mask = BIT(0),
2306                .hw.init = &(struct clk_init_data){
2307                        .name = "gcc_video_xo_clk",
2308                        .flags = CLK_IS_CRITICAL,
2309                        .ops = &clk_branch2_ops,
2310                },
2311        },
2312};
2313
2314static struct gdsc usb30_prim_gdsc = {
2315        .gdscr = 0x1a004,
2316        .pd = {
2317                .name = "usb30_prim_gdsc",
2318        },
2319        .pwrsts = PWRSTS_OFF_ON,
2320};
2321
2322static struct gdsc ufs_phy_gdsc = {
2323        .gdscr = 0x3a004,
2324        .pd = {
2325                .name = "ufs_phy_gdsc",
2326        },
2327        .pwrsts = PWRSTS_OFF_ON,
2328};
2329
2330static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2331        .gdscr = 0xb7040,
2332        .pd = {
2333                .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2334        },
2335        .pwrsts = PWRSTS_OFF_ON,
2336        .flags = VOTABLE,
2337};
2338
2339static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2340        .gdscr = 0xb7044,
2341        .pd = {
2342                .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2343        },
2344        .pwrsts = PWRSTS_OFF_ON,
2345        .flags = VOTABLE,
2346};
2347
2348static struct clk_regmap *gcc_sm6350_clocks[] = {
2349        [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2350        [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2351        [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2352        [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
2353        [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
2354        [GCC_CAMERA_THROTTLE_NRT_AXI_CLK] =
2355                &gcc_camera_throttle_nrt_axi_clk.clkr,
2356        [GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr,
2357        [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
2358        [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2359        [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2360        [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2361        [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2362        [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2363        [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2364        [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
2365        [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2366        [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2367        [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
2368        [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
2369        [GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr,
2370        [GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr,
2371        [GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr,
2372        [GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr,
2373        [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
2374        [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2375        [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2376        [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2377        [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2378        [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2379        [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2380        [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2381        [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2382        [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2383        [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2384        [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2385        [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2386        [GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr,
2387        [GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr,
2388        [GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr,
2389        [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2390        [GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr,
2391        [GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr,
2392        [GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr,
2393        [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2394        [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2395        [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2396        [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2397        [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2398        [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2399        [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2400        [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2401        [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2402        [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2403        [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2404        [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2405        [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2406        [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2407        [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2408        [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2409        [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2410        [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2411        [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2412        [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2413        [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2414        [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2415        [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2416        [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2417        [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2418        [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2419        [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2420        [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2421        [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2422        [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2423        [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2424        [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2425        [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2426        [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2427        [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2428        [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2429        [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2430        [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2431        [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2432        [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2433        [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2434        [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2435        [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2436        [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2437        [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2438        [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2439        [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2440        [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2441        [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2442        [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2443        [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2444        [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2445        [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2446        [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2447        [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2448        [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
2449        [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2450        [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2451        [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2452                &gcc_ufs_phy_unipro_core_clk_src.clkr,
2453        [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2454        [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2455        [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2456        [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2457                &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2458        [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2459        [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2460        [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2461        [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2462        [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2463        [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2464        [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
2465        [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2466        [GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr,
2467        [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
2468        [GPLL0] = &gpll0.clkr,
2469        [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2470        [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
2471        [GPLL6] = &gpll6.clkr,
2472        [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,
2473        [GPLL7] = &gpll7.clkr,
2474        [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2475        [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2476        [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2477                                &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2478        [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2479                                &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2480        [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2481                                &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2482        [GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr,
2483        [GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr,
2484};
2485
2486static struct gdsc *gcc_sm6350_gdscs[] = {
2487        [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2488        [UFS_PHY_GDSC] = &ufs_phy_gdsc,
2489        [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2490        [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2491};
2492
2493static const struct qcom_reset_map gcc_sm6350_resets[] = {
2494        [GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 },
2495        [GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 },
2496        [GCC_SDCC1_BCR] = { 0x4b000 },
2497        [GCC_SDCC2_BCR] = { 0x20000 },
2498        [GCC_UFS_PHY_BCR] = { 0x3a000 },
2499        [GCC_USB30_PRIM_BCR] = { 0x1a000 },
2500        [GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 },
2501        [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 },
2502};
2503
2504static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2505        DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2506        DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2507        DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2508        DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2509        DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2510        DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2511        DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2512        DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2513        DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2514        DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2515        DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2516        DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2517};
2518
2519static const struct regmap_config gcc_sm6350_regmap_config = {
2520        .reg_bits = 32,
2521        .reg_stride = 4,
2522        .val_bits = 32,
2523        .max_register = 0xbf030,
2524        .fast_io = true,
2525};
2526
2527static const struct qcom_cc_desc gcc_sm6350_desc = {
2528        .config = &gcc_sm6350_regmap_config,
2529        .clks = gcc_sm6350_clocks,
2530        .num_clks = ARRAY_SIZE(gcc_sm6350_clocks),
2531        .resets = gcc_sm6350_resets,
2532        .num_resets = ARRAY_SIZE(gcc_sm6350_resets),
2533        .gdscs = gcc_sm6350_gdscs,
2534        .num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs),
2535};
2536
2537static const struct of_device_id gcc_sm6350_match_table[] = {
2538        { .compatible = "qcom,gcc-sm6350" },
2539        { }
2540};
2541MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table);
2542
2543static int gcc_sm6350_probe(struct platform_device *pdev)
2544{
2545        struct regmap *regmap;
2546        int ret;
2547
2548        regmap = qcom_cc_map(pdev, &gcc_sm6350_desc);
2549        if (IS_ERR(regmap))
2550                return PTR_ERR(regmap);
2551
2552        /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
2553        regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3);
2554        regmap_update_bits(regmap, 0x45f00, 0x3, 0x3);
2555
2556        ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2557                        ARRAY_SIZE(gcc_dfs_clocks));
2558        if (ret)
2559                return ret;
2560
2561        return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);;
2562}
2563
2564static struct platform_driver gcc_sm6350_driver = {
2565        .probe = gcc_sm6350_probe,
2566        .driver = {
2567                .name = "gcc-sm6350",
2568                .of_match_table = gcc_sm6350_match_table,
2569        },
2570};
2571
2572static int __init gcc_sm6350_init(void)
2573{
2574        return platform_driver_register(&gcc_sm6350_driver);
2575}
2576core_initcall(gcc_sm6350_init);
2577
2578static void __exit gcc_sm6350_exit(void)
2579{
2580        platform_driver_unregister(&gcc_sm6350_driver);
2581}
2582module_exit(gcc_sm6350_exit);
2583
2584MODULE_DESCRIPTION("QTI GCC SM6350 Driver");
2585MODULE_LICENSE("GPL v2");
2586