Linux Audio

Check our new training course

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