Linux Audio

Check our new training course

Embedded Linux training

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