Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
   4 */
   5
   6#include <linux/clk-provider.h>
   7#include <linux/module.h>
   8#include <linux/of.h>
   9#include <linux/platform_device.h>
  10#include <linux/regmap.h>
  11
  12#include <dt-bindings/clock/qcom,qdu1000-gcc.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_GPLL1_OUT_MAIN,
  29	P_GCC_GPLL2_OUT_MAIN,
  30	P_GCC_GPLL3_OUT_MAIN,
  31	P_GCC_GPLL4_OUT_MAIN,
  32	P_GCC_GPLL5_OUT_MAIN,
  33	P_GCC_GPLL6_OUT_MAIN,
  34	P_GCC_GPLL7_OUT_MAIN,
  35	P_GCC_GPLL8_OUT_MAIN,
  36	P_PCIE_0_PHY_AUX_CLK,
  37	P_PCIE_0_PIPE_CLK,
  38	P_SLEEP_CLK,
  39	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
  40};
  41
  42enum {
  43	DT_TCXO_IDX,
  44	DT_SLEEP_CLK_IDX,
  45	DT_PCIE_0_PIPE_CLK_IDX,
  46	DT_PCIE_0_PHY_AUX_CLK_IDX,
  47	DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX,
  48};
  49
  50static struct clk_alpha_pll gcc_gpll0 = {
  51	.offset = 0x0,
  52	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
  53	.clkr = {
  54		.enable_reg = 0x62018,
  55		.enable_mask = BIT(0),
  56		.hw.init = &(const struct clk_init_data) {
  57			.name = "gcc_gpll0",
  58			.parent_data = &(const struct clk_parent_data) {
  59				.index = DT_TCXO_IDX,
  60			},
  61			.num_parents = 1,
  62			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
  63		},
  64	},
  65};
  66
  67static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
  68	{ 0x1, 2 }
  69};
  70
  71static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
  72	.offset = 0x0,
  73	.post_div_shift = 10,
  74	.post_div_table = post_div_table_gcc_gpll0_out_even,
  75	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
  76	.width = 4,
  77	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
  78	.clkr.hw.init = &(const struct clk_init_data) {
  79		.name = "gcc_gpll0_out_even",
  80		.parent_hws = (const struct clk_hw*[]) {
  81			&gcc_gpll0.clkr.hw,
  82		},
  83		.num_parents = 1,
  84		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
  85	},
  86};
  87
  88static struct clk_alpha_pll gcc_gpll1 = {
  89	.offset = 0x1000,
  90	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
  91	.clkr = {
  92		.enable_reg = 0x62018,
  93		.enable_mask = BIT(1),
  94		.hw.init = &(const struct clk_init_data) {
  95			.name = "gcc_gpll1",
  96			.parent_data = &(const struct clk_parent_data) {
  97				.index = DT_TCXO_IDX,
  98			},
  99			.num_parents = 1,
 100			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 101		},
 102	},
 103};
 104
 105static struct clk_alpha_pll_postdiv gcc_gpll1_out_even = {
 106	.offset = 0x1000,
 107	.post_div_shift = 10,
 108	.post_div_table = post_div_table_gcc_gpll0_out_even,
 109	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
 110	.width = 4,
 111	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 112	.clkr.hw.init = &(const struct clk_init_data) {
 113		.name = "gcc_gpll1_out_even",
 114		.parent_hws = (const struct clk_hw*[]) {
 115			&gcc_gpll1.clkr.hw,
 116		},
 117		.num_parents = 1,
 118		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
 119	},
 120};
 121
 122static struct clk_alpha_pll gcc_gpll2 = {
 123	.offset = 0x2000,
 124	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 125	.clkr = {
 126		.enable_reg = 0x62018,
 127		.enable_mask = BIT(2),
 128		.hw.init = &(const struct clk_init_data) {
 129			.name = "gcc_gpll2",
 130			.parent_data = &(const struct clk_parent_data) {
 131				.index = DT_TCXO_IDX,
 132			},
 133			.num_parents = 1,
 134			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 135		},
 136	},
 137};
 138
 139static struct clk_alpha_pll_postdiv gcc_gpll2_out_even = {
 140	.offset = 0x2000,
 141	.post_div_shift = 10,
 142	.post_div_table = post_div_table_gcc_gpll0_out_even,
 143	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
 144	.width = 4,
 145	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 146	.clkr.hw.init = &(const struct clk_init_data) {
 147		.name = "gcc_gpll2_out_even",
 148		.parent_hws = (const struct clk_hw*[]) {
 149			&gcc_gpll2.clkr.hw,
 150		},
 151		.num_parents = 1,
 152		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
 153	},
 154};
 155
 156static struct clk_alpha_pll gcc_gpll3 = {
 157	.offset = 0x3000,
 158	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 159	.clkr = {
 160		.enable_reg = 0x62018,
 161		.enable_mask = BIT(3),
 162		.hw.init = &(const struct clk_init_data) {
 163			.name = "gcc_gpll3",
 164			.parent_data = &(const struct clk_parent_data) {
 165				.index = DT_TCXO_IDX,
 166			},
 167			.num_parents = 1,
 168			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 169		},
 170	},
 171};
 172
 173static struct clk_alpha_pll gcc_gpll4 = {
 174	.offset = 0x4000,
 175	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 176	.clkr = {
 177		.enable_reg = 0x62018,
 178		.enable_mask = BIT(4),
 179		.hw.init = &(const struct clk_init_data) {
 180			.name = "gcc_gpll4",
 181			.parent_data = &(const struct clk_parent_data) {
 182				.index = DT_TCXO_IDX,
 183			},
 184			.num_parents = 1,
 185			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 186		},
 187	},
 188};
 189
 190static struct clk_alpha_pll gcc_gpll5 = {
 191	.offset = 0x5000,
 192	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 193	.clkr = {
 194		.enable_reg = 0x62018,
 195		.enable_mask = BIT(5),
 196		.hw.init = &(const struct clk_init_data) {
 197			.name = "gcc_gpll5",
 198			.parent_data = &(const struct clk_parent_data) {
 199				.index = DT_TCXO_IDX,
 200			},
 201			.num_parents = 1,
 202			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 203		},
 204	},
 205};
 206
 207static struct clk_alpha_pll_postdiv gcc_gpll5_out_even = {
 208	.offset = 0x5000,
 209	.post_div_shift = 10,
 210	.post_div_table = post_div_table_gcc_gpll0_out_even,
 211	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
 212	.width = 4,
 213	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 214	.clkr.hw.init = &(const struct clk_init_data) {
 215		.name = "gcc_gpll5_out_even",
 216		.parent_hws = (const struct clk_hw*[]) {
 217			&gcc_gpll5.clkr.hw,
 218		},
 219		.num_parents = 1,
 220		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
 221	},
 222};
 223
 224static struct clk_alpha_pll gcc_gpll6 = {
 225	.offset = 0x6000,
 226	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 227	.clkr = {
 228		.enable_reg = 0x62018,
 229		.enable_mask = BIT(6),
 230		.hw.init = &(const struct clk_init_data) {
 231			.name = "gcc_gpll6",
 232			.parent_data = &(const struct clk_parent_data) {
 233				.index = DT_TCXO_IDX,
 234			},
 235			.num_parents = 1,
 236			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 237		},
 238	},
 239};
 240
 241static struct clk_alpha_pll gcc_gpll7 = {
 242	.offset = 0x7000,
 243	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 244	.clkr = {
 245		.enable_reg = 0x62018,
 246		.enable_mask = BIT(7),
 247		.hw.init = &(const struct clk_init_data) {
 248			.name = "gcc_gpll7",
 249			.parent_data = &(const struct clk_parent_data) {
 250				.index = DT_TCXO_IDX,
 251			},
 252			.num_parents = 1,
 253			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 254		},
 255	},
 256};
 257
 258static struct clk_alpha_pll gcc_gpll8 = {
 259	.offset = 0x8000,
 260	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
 261	.clkr = {
 262		.enable_reg = 0x62018,
 263		.enable_mask = BIT(8),
 264		.hw.init = &(const struct clk_init_data) {
 265			.name = "gcc_gpll8",
 266			.parent_data = &(const struct clk_parent_data) {
 267				.index = DT_TCXO_IDX,
 268			},
 269			.num_parents = 1,
 270			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
 271		},
 272	},
 273};
 274
 275static const struct parent_map gcc_parent_map_0[] = {
 276	{ P_BI_TCXO, 0 },
 277	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 278	{ P_GCC_GPLL0_OUT_EVEN, 6 },
 279};
 280
 281static const struct clk_parent_data gcc_parent_data_0[] = {
 282	{ .index = DT_TCXO_IDX },
 283	{ .hw = &gcc_gpll0.clkr.hw },
 284	{ .hw = &gcc_gpll0_out_even.clkr.hw },
 285};
 286
 287static const struct parent_map gcc_parent_map_1[] = {
 288	{ P_BI_TCXO, 0 },
 289	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 290	{ P_SLEEP_CLK, 5 },
 291	{ P_GCC_GPLL0_OUT_EVEN, 6 },
 292};
 293
 294static const struct clk_parent_data gcc_parent_data_1[] = {
 295	{ .index = DT_TCXO_IDX },
 296	{ .hw = &gcc_gpll0.clkr.hw },
 297	{ .index = DT_SLEEP_CLK_IDX },
 298	{ .hw = &gcc_gpll0_out_even.clkr.hw },
 299};
 300
 301static const struct parent_map gcc_parent_map_2[] = {
 302	{ P_BI_TCXO, 0 },
 303	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 304	{ P_GCC_GPLL5_OUT_MAIN, 3 },
 305	{ P_GCC_GPLL4_OUT_MAIN, 5 },
 306};
 307
 308static const struct clk_parent_data gcc_parent_data_2[] = {
 309	{ .index = DT_TCXO_IDX },
 310	{ .hw = &gcc_gpll0.clkr.hw },
 311	{ .hw = &gcc_gpll5.clkr.hw },
 312	{ .hw = &gcc_gpll4.clkr.hw },
 313};
 314
 315static const struct parent_map gcc_parent_map_3[] = {
 316	{ P_BI_TCXO, 0 },
 317	{ P_SLEEP_CLK, 5 },
 318};
 319
 320static const struct clk_parent_data gcc_parent_data_3[] = {
 321	{ .index = DT_TCXO_IDX },
 322	{ .index = DT_SLEEP_CLK_IDX },
 323};
 324
 325static const struct parent_map gcc_parent_map_4[] = {
 326	{ P_BI_TCXO, 0 },
 327	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 328	{ P_GCC_GPLL2_OUT_MAIN, 2 },
 329	{ P_GCC_GPLL5_OUT_MAIN, 3 },
 330	{ P_GCC_GPLL1_OUT_MAIN, 4 },
 331	{ P_GCC_GPLL4_OUT_MAIN, 5 },
 332	{ P_GCC_GPLL3_OUT_MAIN, 6 },
 333};
 334
 335static const struct clk_parent_data gcc_parent_data_4[] = {
 336	{ .index = DT_TCXO_IDX },
 337	{ .hw = &gcc_gpll0.clkr.hw },
 338	{ .hw = &gcc_gpll2.clkr.hw },
 339	{ .hw = &gcc_gpll5.clkr.hw },
 340	{ .hw = &gcc_gpll1.clkr.hw },
 341	{ .hw = &gcc_gpll4.clkr.hw },
 342	{ .hw = &gcc_gpll3.clkr.hw },
 343};
 344
 345static const struct parent_map gcc_parent_map_5[] = {
 346	{ P_BI_TCXO, 0 },
 347	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 348	{ P_GCC_GPLL2_OUT_MAIN, 2 },
 349	{ P_GCC_GPLL6_OUT_MAIN, 3 },
 350	{ P_GCC_GPLL1_OUT_MAIN, 4 },
 351	{ P_GCC_GPLL4_OUT_MAIN, 5 },
 352	{ P_GCC_GPLL3_OUT_MAIN, 6 },
 353};
 354
 355static const struct clk_parent_data gcc_parent_data_5[] = {
 356	{ .index = DT_TCXO_IDX },
 357	{ .hw = &gcc_gpll0.clkr.hw },
 358	{ .hw = &gcc_gpll2.clkr.hw },
 359	{ .hw = &gcc_gpll6.clkr.hw },
 360	{ .hw = &gcc_gpll1.clkr.hw },
 361	{ .hw = &gcc_gpll4.clkr.hw },
 362	{ .hw = &gcc_gpll3.clkr.hw },
 363};
 364
 365static const struct parent_map gcc_parent_map_6[] = {
 366	{ P_PCIE_0_PHY_AUX_CLK, 0 },
 367	{ P_BI_TCXO, 2 },
 368};
 369
 370static const struct clk_parent_data gcc_parent_data_6[] = {
 371	{ .index = DT_PCIE_0_PHY_AUX_CLK_IDX },
 372	{ .index = DT_TCXO_IDX },
 373};
 374
 375static const struct parent_map gcc_parent_map_8[] = {
 376	{ P_BI_TCXO, 0 },
 377	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 378	{ P_GCC_GPLL8_OUT_MAIN, 2 },
 379	{ P_GCC_GPLL5_OUT_MAIN, 3 },
 380	{ P_GCC_GPLL4_OUT_MAIN, 5 },
 381};
 382
 383static const struct clk_parent_data gcc_parent_data_8[] = {
 384	{ .index = DT_TCXO_IDX },
 385	{ .hw = &gcc_gpll0.clkr.hw },
 386	{ .hw = &gcc_gpll8.clkr.hw },
 387	{ .hw = &gcc_gpll5.clkr.hw },
 388	{ .hw = &gcc_gpll4.clkr.hw },
 389};
 390
 391static const struct parent_map gcc_parent_map_9[] = {
 392	{ P_BI_TCXO, 0 },
 393	{ P_GCC_GPLL0_OUT_MAIN, 1 },
 394	{ P_GCC_GPLL2_OUT_MAIN, 2 },
 395	{ P_GCC_GPLL5_OUT_MAIN, 3 },
 396	{ P_GCC_GPLL7_OUT_MAIN, 4 },
 397	{ P_GCC_GPLL4_OUT_MAIN, 5 },
 398};
 399
 400static const struct clk_parent_data gcc_parent_data_9[] = {
 401	{ .index = DT_TCXO_IDX },
 402	{ .hw = &gcc_gpll0.clkr.hw },
 403	{ .hw = &gcc_gpll2.clkr.hw },
 404	{ .hw = &gcc_gpll5.clkr.hw },
 405	{ .hw = &gcc_gpll7.clkr.hw },
 406	{ .hw = &gcc_gpll4.clkr.hw },
 407};
 408
 409static const struct parent_map gcc_parent_map_10[] = {
 410	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
 411	{ P_BI_TCXO, 2 },
 412};
 413
 414static const struct clk_parent_data gcc_parent_data_10[] = {
 415	{ .index = DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX },
 416	{ .index = DT_TCXO_IDX },
 417};
 418
 419static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = {
 420	.reg = 0x9d080,
 421	.shift = 0,
 422	.width = 2,
 423	.parent_map = gcc_parent_map_6,
 424	.clkr = {
 425		.hw.init = &(const struct clk_init_data) {
 426			.name = "gcc_pcie_0_phy_aux_clk_src",
 427			.parent_data = gcc_parent_data_6,
 428			.num_parents = ARRAY_SIZE(gcc_parent_data_6),
 429			.ops = &clk_regmap_mux_closest_ops,
 430		},
 431	},
 432};
 433
 434static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
 435	.reg = 0x9d064,
 436	.clkr = {
 437		.hw.init = &(const struct clk_init_data) {
 438			.name = "gcc_pcie_0_pipe_clk_src",
 439			.parent_data = &(const struct clk_parent_data){
 440				.index = DT_PCIE_0_PIPE_CLK_IDX,
 441			},
 442			.num_parents = 1,
 443			.ops = &clk_regmap_phy_mux_ops,
 444		},
 445	},
 446};
 447
 448static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
 449	.reg = 0x4906c,
 450	.shift = 0,
 451	.width = 2,
 452	.parent_map = gcc_parent_map_10,
 453	.clkr = {
 454		.hw.init = &(const struct clk_init_data) {
 455			.name = "gcc_usb3_prim_phy_pipe_clk_src",
 456			.parent_data = gcc_parent_data_10,
 457			.num_parents = ARRAY_SIZE(gcc_parent_data_10),
 458			.ops = &clk_regmap_mux_closest_ops,
 459		},
 460	},
 461};
 462
 463static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_dma_clk_src[] = {
 464	F(466500000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
 465	F(500000000, P_GCC_GPLL2_OUT_MAIN, 2, 0, 0),
 466	{ }
 467};
 468
 469static struct clk_rcg2 gcc_aggre_noc_ecpri_dma_clk_src = {
 470	.cmd_rcgr = 0x92020,
 471	.mnd_width = 0,
 472	.hid_width = 5,
 473	.parent_map = gcc_parent_map_4,
 474	.freq_tbl = ftbl_gcc_aggre_noc_ecpri_dma_clk_src,
 475	.clkr.hw.init = &(const struct clk_init_data) {
 476		.name = "gcc_aggre_noc_ecpri_dma_clk_src",
 477		.parent_data = gcc_parent_data_4,
 478		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
 479		.ops = &clk_rcg2_shared_ops,
 480	},
 481};
 482
 483static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_gsi_clk_src[] = {
 484	F(250000000, P_GCC_GPLL2_OUT_MAIN, 4, 0, 0),
 485	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
 486	{ }
 487};
 488
 489static struct clk_rcg2 gcc_aggre_noc_ecpri_gsi_clk_src = {
 490	.cmd_rcgr = 0x92038,
 491	.mnd_width = 0,
 492	.hid_width = 5,
 493	.parent_map = gcc_parent_map_5,
 494	.freq_tbl = ftbl_gcc_aggre_noc_ecpri_gsi_clk_src,
 495	.clkr.hw.init = &(const struct clk_init_data) {
 496		.name = "gcc_aggre_noc_ecpri_gsi_clk_src",
 497		.parent_data = gcc_parent_data_5,
 498		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
 499		.ops = &clk_rcg2_shared_ops,
 500	},
 501};
 502
 503static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
 504	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
 505	{ }
 506};
 507
 508static struct clk_rcg2 gcc_gp1_clk_src = {
 509	.cmd_rcgr = 0x74004,
 510	.mnd_width = 16,
 511	.hid_width = 5,
 512	.parent_map = gcc_parent_map_1,
 513	.freq_tbl = ftbl_gcc_gp1_clk_src,
 514	.clkr.hw.init = &(const struct clk_init_data) {
 515		.name = "gcc_gp1_clk_src",
 516		.parent_data = gcc_parent_data_1,
 517		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 518		.ops = &clk_rcg2_shared_ops,
 519	},
 520};
 521
 522static struct clk_rcg2 gcc_gp2_clk_src = {
 523	.cmd_rcgr = 0x75004,
 524	.mnd_width = 16,
 525	.hid_width = 5,
 526	.parent_map = gcc_parent_map_1,
 527	.freq_tbl = ftbl_gcc_gp1_clk_src,
 528	.clkr.hw.init = &(const struct clk_init_data) {
 529		.name = "gcc_gp2_clk_src",
 530		.parent_data = gcc_parent_data_1,
 531		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 532		.ops = &clk_rcg2_shared_ops,
 533	},
 534};
 535
 536static struct clk_rcg2 gcc_gp3_clk_src = {
 537	.cmd_rcgr = 0x76004,
 538	.mnd_width = 16,
 539	.hid_width = 5,
 540	.parent_map = gcc_parent_map_1,
 541	.freq_tbl = ftbl_gcc_gp1_clk_src,
 542	.clkr.hw.init = &(const struct clk_init_data) {
 543		.name = "gcc_gp3_clk_src",
 544		.parent_data = gcc_parent_data_1,
 545		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 546		.ops = &clk_rcg2_shared_ops,
 547	},
 548};
 549
 550static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
 551	F(19200000, P_BI_TCXO, 1, 0, 0),
 552	{ }
 553};
 554
 555static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
 556	.cmd_rcgr = 0x9d068,
 557	.mnd_width = 16,
 558	.hid_width = 5,
 559	.parent_map = gcc_parent_map_3,
 560	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 561	.clkr.hw.init = &(const struct clk_init_data) {
 562		.name = "gcc_pcie_0_aux_clk_src",
 563		.parent_data = gcc_parent_data_3,
 564		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
 565		.ops = &clk_rcg2_shared_ops,
 566	},
 567};
 568
 569static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
 570	F(19200000, P_BI_TCXO, 1, 0, 0),
 571	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
 572	{ }
 573};
 574
 575static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
 576	.cmd_rcgr = 0x9d04c,
 577	.mnd_width = 0,
 578	.hid_width = 5,
 579	.parent_map = gcc_parent_map_0,
 580	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
 581	.clkr.hw.init = &(const struct clk_init_data) {
 582		.name = "gcc_pcie_0_phy_rchng_clk_src",
 583		.parent_data = gcc_parent_data_0,
 584		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 585		.ops = &clk_rcg2_shared_ops,
 586	},
 587};
 588
 589static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
 590	F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
 591	{ }
 592};
 593
 594static struct clk_rcg2 gcc_pdm2_clk_src = {
 595	.cmd_rcgr = 0x43010,
 596	.mnd_width = 0,
 597	.hid_width = 5,
 598	.parent_map = gcc_parent_map_0,
 599	.freq_tbl = ftbl_gcc_pdm2_clk_src,
 600	.clkr.hw.init = &(const struct clk_init_data) {
 601		.name = "gcc_pdm2_clk_src",
 602		.parent_data = gcc_parent_data_0,
 603		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 604		.ops = &clk_rcg2_shared_ops,
 605	},
 606};
 607
 608static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
 609	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
 610	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
 611	F(19200000, P_BI_TCXO, 1, 0, 0),
 612	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
 613	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
 614	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
 615	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
 616	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
 617	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
 618	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
 619	{ }
 620};
 621
 622static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
 623	.name = "gcc_qupv3_wrap0_s0_clk_src",
 624	.parent_data = gcc_parent_data_0,
 625	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 626	.ops = &clk_rcg2_shared_ops,
 627};
 628
 629static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
 630	.cmd_rcgr = 0x27154,
 631	.mnd_width = 16,
 632	.hid_width = 5,
 633	.parent_map = gcc_parent_map_0,
 634	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 635	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
 636};
 637
 638static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
 639	.name = "gcc_qupv3_wrap0_s1_clk_src",
 640	.parent_data = gcc_parent_data_0,
 641	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 642	.ops = &clk_rcg2_shared_ops,
 643};
 644
 645static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
 646	.cmd_rcgr = 0x27288,
 647	.mnd_width = 16,
 648	.hid_width = 5,
 649	.parent_map = gcc_parent_map_0,
 650	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 651	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
 652};
 653
 654static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
 655	.name = "gcc_qupv3_wrap0_s2_clk_src",
 656	.parent_data = gcc_parent_data_0,
 657	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 658	.ops = &clk_rcg2_shared_ops,
 659};
 660
 661static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
 662	.cmd_rcgr = 0x273bc,
 663	.mnd_width = 16,
 664	.hid_width = 5,
 665	.parent_map = gcc_parent_map_0,
 666	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 667	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
 668};
 669
 670static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
 671	.name = "gcc_qupv3_wrap0_s3_clk_src",
 672	.parent_data = gcc_parent_data_0,
 673	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 674	.ops = &clk_rcg2_shared_ops,
 675};
 676
 677static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
 678	.cmd_rcgr = 0x274f0,
 679	.mnd_width = 16,
 680	.hid_width = 5,
 681	.parent_map = gcc_parent_map_0,
 682	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 683	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
 684};
 685
 686static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
 687	.name = "gcc_qupv3_wrap0_s4_clk_src",
 688	.parent_data = gcc_parent_data_0,
 689	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 690	.ops = &clk_rcg2_shared_ops,
 691};
 692
 693static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
 694	.cmd_rcgr = 0x27624,
 695	.mnd_width = 16,
 696	.hid_width = 5,
 697	.parent_map = gcc_parent_map_0,
 698	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 699	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
 700};
 701
 702static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
 703	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
 704	{ }
 705};
 706
 707static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
 708	.name = "gcc_qupv3_wrap0_s5_clk_src",
 709	.parent_data = gcc_parent_data_0,
 710	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 711	.ops = &clk_rcg2_shared_ops,
 712};
 713
 714static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
 715	.cmd_rcgr = 0x27758,
 716	.mnd_width = 16,
 717	.hid_width = 5,
 718	.parent_map = gcc_parent_map_0,
 719	.freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
 720	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
 721};
 722
 723static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
 724	.name = "gcc_qupv3_wrap0_s6_clk_src",
 725	.parent_data = gcc_parent_data_0,
 726	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 727	.ops = &clk_rcg2_shared_ops,
 728};
 729
 730static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
 731	.cmd_rcgr = 0x2788c,
 732	.mnd_width = 16,
 733	.hid_width = 5,
 734	.parent_map = gcc_parent_map_0,
 735	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 736	.clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
 737};
 738
 739static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
 740	.name = "gcc_qupv3_wrap0_s7_clk_src",
 741	.parent_data = gcc_parent_data_0,
 742	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 743	.ops = &clk_rcg2_shared_ops,
 744};
 745
 746static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
 747	.cmd_rcgr = 0x279c0,
 748	.mnd_width = 16,
 749	.hid_width = 5,
 750	.parent_map = gcc_parent_map_0,
 751	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 752	.clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
 753};
 754
 755static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
 756	.name = "gcc_qupv3_wrap1_s0_clk_src",
 757	.parent_data = gcc_parent_data_0,
 758	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 759	.ops = &clk_rcg2_shared_ops,
 760};
 761
 762static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
 763	.cmd_rcgr = 0x28154,
 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_s0_clk_src_init,
 769};
 770
 771static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
 772	.name = "gcc_qupv3_wrap1_s1_clk_src",
 773	.parent_data = gcc_parent_data_0,
 774	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 775	.ops = &clk_rcg2_shared_ops,
 776};
 777
 778static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
 779	.cmd_rcgr = 0x28288,
 780	.mnd_width = 16,
 781	.hid_width = 5,
 782	.parent_map = gcc_parent_map_0,
 783	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 784	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
 785};
 786
 787static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
 788	.name = "gcc_qupv3_wrap1_s2_clk_src",
 789	.parent_data = gcc_parent_data_0,
 790	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 791	.ops = &clk_rcg2_shared_ops,
 792};
 793
 794static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
 795	.cmd_rcgr = 0x283bc,
 796	.mnd_width = 16,
 797	.hid_width = 5,
 798	.parent_map = gcc_parent_map_0,
 799	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 800	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
 801};
 802
 803static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
 804	.name = "gcc_qupv3_wrap1_s3_clk_src",
 805	.parent_data = gcc_parent_data_0,
 806	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 807	.ops = &clk_rcg2_shared_ops,
 808};
 809
 810static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
 811	.cmd_rcgr = 0x284f0,
 812	.mnd_width = 16,
 813	.hid_width = 5,
 814	.parent_map = gcc_parent_map_0,
 815	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 816	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
 817};
 818
 819static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
 820	.name = "gcc_qupv3_wrap1_s4_clk_src",
 821	.parent_data = gcc_parent_data_0,
 822	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 823	.ops = &clk_rcg2_shared_ops,
 824};
 825
 826static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
 827	.cmd_rcgr = 0x28624,
 828	.mnd_width = 16,
 829	.hid_width = 5,
 830	.parent_map = gcc_parent_map_0,
 831	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 832	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
 833};
 834
 835static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
 836	.name = "gcc_qupv3_wrap1_s5_clk_src",
 837	.parent_data = gcc_parent_data_0,
 838	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 839	.ops = &clk_rcg2_shared_ops,
 840};
 841
 842static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
 843	.cmd_rcgr = 0x28758,
 844	.mnd_width = 16,
 845	.hid_width = 5,
 846	.parent_map = gcc_parent_map_0,
 847	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 848	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
 849};
 850
 851static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
 852	.name = "gcc_qupv3_wrap1_s6_clk_src",
 853	.parent_data = gcc_parent_data_0,
 854	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 855	.ops = &clk_rcg2_shared_ops,
 856};
 857
 858static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
 859	.cmd_rcgr = 0x2888c,
 860	.mnd_width = 16,
 861	.hid_width = 5,
 862	.parent_map = gcc_parent_map_0,
 863	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 864	.clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
 865};
 866
 867static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
 868	.name = "gcc_qupv3_wrap1_s7_clk_src",
 869	.parent_data = gcc_parent_data_0,
 870	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 871	.ops = &clk_rcg2_shared_ops,
 872};
 873
 874static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
 875	.cmd_rcgr = 0x289c0,
 876	.mnd_width = 16,
 877	.hid_width = 5,
 878	.parent_map = gcc_parent_map_0,
 879	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
 880	.clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
 881};
 882
 883static const struct freq_tbl ftbl_gcc_sdcc5_apps_clk_src[] = {
 884	F(144000, P_BI_TCXO, 16, 3, 25),
 885	F(400000, P_BI_TCXO, 12, 1, 4),
 886	F(19200000, P_BI_TCXO, 1, 0, 0),
 887	F(20000000, P_GCC_GPLL0_OUT_MAIN, 10, 1, 3),
 888	F(25000000, P_GCC_GPLL0_OUT_MAIN, 12, 1, 2),
 889	F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
 890	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
 891	F(192000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0),
 892	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
 893	F(384000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0),
 894	{ }
 895};
 896
 897static struct clk_rcg2 gcc_sdcc5_apps_clk_src = {
 898	.cmd_rcgr = 0x3b034,
 899	.mnd_width = 8,
 900	.hid_width = 5,
 901	.parent_map = gcc_parent_map_8,
 902	.freq_tbl = ftbl_gcc_sdcc5_apps_clk_src,
 903	.clkr.hw.init = &(const struct clk_init_data) {
 904		.name = "gcc_sdcc5_apps_clk_src",
 905		.parent_data = gcc_parent_data_8,
 906		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
 907		.ops = &clk_rcg2_floor_ops,
 908	},
 909};
 910
 911static const struct freq_tbl ftbl_gcc_sdcc5_ice_core_clk_src[] = {
 912	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
 913	{ }
 914};
 915
 916static struct clk_rcg2 gcc_sdcc5_ice_core_clk_src = {
 917	.cmd_rcgr = 0x3b01c,
 918	.mnd_width = 0,
 919	.hid_width = 5,
 920	.parent_map = gcc_parent_map_2,
 921	.freq_tbl = ftbl_gcc_sdcc5_ice_core_clk_src,
 922	.clkr.hw.init = &(const struct clk_init_data) {
 923		.name = "gcc_sdcc5_ice_core_clk_src",
 924		.parent_data = gcc_parent_data_2,
 925		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
 926		.ops = &clk_rcg2_floor_ops,
 927	},
 928};
 929
 930static struct clk_rcg2 gcc_sm_bus_xo_clk_src = {
 931	.cmd_rcgr = 0x5b00c,
 932	.mnd_width = 0,
 933	.hid_width = 5,
 934	.parent_map = gcc_parent_map_2,
 935	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 936	.clkr.hw.init = &(const struct clk_init_data) {
 937		.name = "gcc_sm_bus_xo_clk_src",
 938		.parent_data = gcc_parent_data_2,
 939		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
 940		.ops = &clk_rcg2_shared_ops,
 941	},
 942};
 943
 944static const struct freq_tbl ftbl_gcc_tsc_clk_src[] = {
 945	F(500000000, P_GCC_GPLL7_OUT_MAIN, 2, 0, 0),
 946	{ }
 947};
 948
 949static struct clk_rcg2 gcc_tsc_clk_src = {
 950	.cmd_rcgr = 0x57010,
 951	.mnd_width = 0,
 952	.hid_width = 5,
 953	.parent_map = gcc_parent_map_9,
 954	.freq_tbl = ftbl_gcc_tsc_clk_src,
 955	.clkr.hw.init = &(const struct clk_init_data) {
 956		.name = "gcc_tsc_clk_src",
 957		.parent_data = gcc_parent_data_9,
 958		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
 959		.ops = &clk_rcg2_shared_ops,
 960	},
 961};
 962
 963static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
 964	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
 965	F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
 966	{ }
 967};
 968
 969static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
 970	.cmd_rcgr = 0x49028,
 971	.mnd_width = 8,
 972	.hid_width = 5,
 973	.parent_map = gcc_parent_map_0,
 974	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
 975	.clkr.hw.init = &(const struct clk_init_data) {
 976		.name = "gcc_usb30_prim_master_clk_src",
 977		.parent_data = gcc_parent_data_0,
 978		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 979		.ops = &clk_rcg2_shared_ops,
 980	},
 981};
 982
 983static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
 984	.cmd_rcgr = 0x49044,
 985	.mnd_width = 0,
 986	.hid_width = 5,
 987	.parent_map = gcc_parent_map_0,
 988	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
 989	.clkr.hw.init = &(const struct clk_init_data) {
 990		.name = "gcc_usb30_prim_mock_utmi_clk_src",
 991		.parent_data = gcc_parent_data_0,
 992		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 993		.ops = &clk_rcg2_shared_ops,
 994	},
 995};
 996
 997static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
 998	.cmd_rcgr = 0x49070,
 999	.mnd_width = 0,
1000	.hid_width = 5,
1001	.parent_map = gcc_parent_map_3,
1002	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1003	.clkr.hw.init = &(const struct clk_init_data) {
1004		.name = "gcc_usb3_prim_phy_aux_clk_src",
1005		.parent_data = gcc_parent_data_3,
1006		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1007		.ops = &clk_rcg2_shared_ops,
1008	},
1009};
1010
1011static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1012	.reg = 0x4905c,
1013	.shift = 0,
1014	.width = 4,
1015	.clkr.hw.init = &(const struct clk_init_data) {
1016		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1017		.parent_hws = (const struct clk_hw*[]) {
1018			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1019		},
1020		.num_parents = 1,
1021		.flags = CLK_SET_RATE_PARENT,
1022		.ops = &clk_regmap_div_ro_ops,
1023	},
1024};
1025
1026static struct clk_branch gcc_aggre_noc_ecpri_dma_clk = {
1027	.halt_reg = 0x92008,
1028	.halt_check = BRANCH_HALT_VOTED,
1029	.hwcg_reg = 0x92008,
1030	.hwcg_bit = 1,
1031	.clkr = {
1032		.enable_reg = 0x92008,
1033		.enable_mask = BIT(0),
1034		.hw.init = &(const struct clk_init_data) {
1035			.name = "gcc_aggre_noc_ecpri_dma_clk",
1036			.parent_hws = (const struct clk_hw*[]) {
1037				&gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw,
1038			},
1039			.num_parents = 1,
1040			.flags = CLK_SET_RATE_PARENT,
1041			.ops = &clk_branch2_ops,
1042		},
1043	},
1044};
1045
1046static struct clk_branch gcc_aggre_noc_ecpri_gsi_clk = {
1047	.halt_reg = 0x9201c,
1048	.halt_check = BRANCH_HALT_VOTED,
1049	.hwcg_reg = 0x9201c,
1050	.hwcg_bit = 1,
1051	.clkr = {
1052		.enable_reg = 0x9201c,
1053		.enable_mask = BIT(0),
1054		.hw.init = &(const struct clk_init_data) {
1055			.name = "gcc_aggre_noc_ecpri_gsi_clk",
1056			.parent_hws = (const struct clk_hw*[]) {
1057				&gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw,
1058			},
1059			.num_parents = 1,
1060			.flags = CLK_SET_RATE_PARENT,
1061			.ops = &clk_branch2_ops,
1062		},
1063	},
1064};
1065
1066static struct clk_branch gcc_boot_rom_ahb_clk = {
1067	.halt_reg = 0x48004,
1068	.halt_check = BRANCH_HALT_VOTED,
1069	.hwcg_reg = 0x48004,
1070	.hwcg_bit = 1,
1071	.clkr = {
1072		.enable_reg = 0x62000,
1073		.enable_mask = BIT(10),
1074		.hw.init = &(const struct clk_init_data) {
1075			.name = "gcc_boot_rom_ahb_clk",
1076			.ops = &clk_branch2_ops,
1077		},
1078	},
1079};
1080
1081static struct clk_branch gcc_cfg_noc_ecpri_cc_ahb_clk = {
1082	.halt_reg = 0x3e004,
1083	.halt_check = BRANCH_HALT_VOTED,
1084	.hwcg_reg = 0x3e004,
1085	.hwcg_bit = 1,
1086	.clkr = {
1087		.enable_reg = 0x3e004,
1088		.enable_mask = BIT(0),
1089		.hw.init = &(const struct clk_init_data) {
1090			.name = "gcc_cfg_noc_ecpri_cc_ahb_clk",
1091			.ops = &clk_branch2_ops,
1092		},
1093	},
1094};
1095
1096static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1097	.halt_reg = 0x8401c,
1098	.halt_check = BRANCH_HALT_VOTED,
1099	.hwcg_reg = 0x8401c,
1100	.hwcg_bit = 1,
1101	.clkr = {
1102		.enable_reg = 0x8401c,
1103		.enable_mask = BIT(0),
1104		.hw.init = &(const struct clk_init_data) {
1105			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1106			.parent_hws = (const struct clk_hw*[]) {
1107				&gcc_usb30_prim_master_clk_src.clkr.hw,
1108			},
1109			.num_parents = 1,
1110			.flags = CLK_SET_RATE_PARENT,
1111			.ops = &clk_branch2_ops,
1112		},
1113	},
1114};
1115
1116static struct clk_branch gcc_ddrss_ecpri_dma_clk = {
1117	.halt_reg = 0x54030,
1118	.halt_check = BRANCH_HALT_VOTED,
1119	.hwcg_reg = 0x54030,
1120	.hwcg_bit = 1,
1121	.clkr = {
1122		.enable_reg = 0x54030,
1123		.enable_mask = BIT(0),
1124		.hw.init = &(const struct clk_init_data) {
1125			.name = "gcc_ddrss_ecpri_dma_clk",
1126			.parent_hws = (const struct clk_hw*[]) {
1127				&gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw,
1128			},
1129			.num_parents = 1,
1130			.flags = CLK_SET_RATE_PARENT,
1131			.ops = &clk_branch2_aon_ops,
1132		},
1133	},
1134};
1135
1136static struct clk_branch gcc_ddrss_ecpri_gsi_clk = {
1137	.halt_reg = 0x54298,
1138	.halt_check = BRANCH_HALT_VOTED,
1139	.hwcg_reg = 0x54298,
1140	.hwcg_bit = 1,
1141	.clkr = {
1142		.enable_reg = 0x54298,
1143		.enable_mask = BIT(0),
1144		.hw.init = &(const struct clk_init_data) {
1145			.name = "gcc_ddrss_ecpri_gsi_clk",
1146			.parent_hws = (const struct clk_hw*[]) {
1147				&gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw,
1148			},
1149			.num_parents = 1,
1150			.flags = CLK_SET_RATE_PARENT,
1151			.ops = &clk_branch2_aon_ops,
1152		},
1153	},
1154};
1155
1156static struct clk_branch gcc_ecpri_ahb_clk = {
1157	.halt_reg = 0x3a008,
1158	.halt_check = BRANCH_HALT_VOTED,
1159	.hwcg_reg = 0x3a008,
1160	.hwcg_bit = 1,
1161	.clkr = {
1162		.enable_reg = 0x3a008,
1163		.enable_mask = BIT(0),
1164		.hw.init = &(const struct clk_init_data) {
1165			.name = "gcc_ecpri_ahb_clk",
1166			.ops = &clk_branch2_ops,
1167		},
1168	},
1169};
1170
1171static struct clk_branch gcc_ecpri_cc_gpll0_clk_src = {
1172	.halt_check = BRANCH_HALT_DELAY,
1173	.clkr = {
1174		.enable_reg = 0x62010,
1175		.enable_mask = BIT(0),
1176		.hw.init = &(const struct clk_init_data) {
1177			.name = "gcc_ecpri_cc_gpll0_clk_src",
1178			.parent_hws = (const struct clk_hw*[]) {
1179				&gcc_gpll0.clkr.hw,
1180			},
1181			.num_parents = 1,
1182			.flags = CLK_SET_RATE_PARENT,
1183			.ops = &clk_branch2_ops,
1184		},
1185	},
1186};
1187
1188static struct clk_branch gcc_ecpri_cc_gpll1_even_clk_src = {
1189	.halt_check = BRANCH_HALT_DELAY,
1190	.clkr = {
1191		.enable_reg = 0x62010,
1192		.enable_mask = BIT(1),
1193		.hw.init = &(const struct clk_init_data) {
1194			.name = "gcc_ecpri_cc_gpll1_even_clk_src",
1195			.parent_hws = (const struct clk_hw*[]) {
1196				&gcc_gpll1_out_even.clkr.hw,
1197			},
1198			.num_parents = 1,
1199			.flags = CLK_SET_RATE_PARENT,
1200			.ops = &clk_branch2_ops,
1201		},
1202	},
1203};
1204
1205static struct clk_branch gcc_ecpri_cc_gpll2_even_clk_src = {
1206	.halt_check = BRANCH_HALT_DELAY,
1207	.clkr = {
1208		.enable_reg = 0x62010,
1209		.enable_mask = BIT(2),
1210		.hw.init = &(const struct clk_init_data) {
1211			.name = "gcc_ecpri_cc_gpll2_even_clk_src",
1212			.parent_hws = (const struct clk_hw*[]) {
1213				&gcc_gpll2_out_even.clkr.hw,
1214			},
1215			.num_parents = 1,
1216			.flags = CLK_SET_RATE_PARENT,
1217			.ops = &clk_branch2_ops,
1218		},
1219	},
1220};
1221
1222static struct clk_branch gcc_ecpri_cc_gpll3_clk_src = {
1223	.halt_check = BRANCH_HALT_DELAY,
1224	.clkr = {
1225		.enable_reg = 0x62010,
1226		.enable_mask = BIT(3),
1227		.hw.init = &(const struct clk_init_data) {
1228			.name = "gcc_ecpri_cc_gpll3_clk_src",
1229			.parent_hws = (const struct clk_hw*[]) {
1230				&gcc_gpll3.clkr.hw,
1231			},
1232			.num_parents = 1,
1233			.flags = CLK_SET_RATE_PARENT,
1234			.ops = &clk_branch2_ops,
1235		},
1236	},
1237};
1238
1239static struct clk_branch gcc_ecpri_cc_gpll4_clk_src = {
1240	.halt_check = BRANCH_HALT_DELAY,
1241	.clkr = {
1242		.enable_reg = 0x62010,
1243		.enable_mask = BIT(4),
1244		.hw.init = &(const struct clk_init_data) {
1245			.name = "gcc_ecpri_cc_gpll4_clk_src",
1246			.parent_hws = (const struct clk_hw*[]) {
1247				&gcc_gpll4.clkr.hw,
1248			},
1249			.num_parents = 1,
1250			.flags = CLK_SET_RATE_PARENT,
1251			.ops = &clk_branch2_ops,
1252		},
1253	},
1254};
1255
1256static struct clk_branch gcc_ecpri_cc_gpll5_even_clk_src = {
1257	.halt_check = BRANCH_HALT_DELAY,
1258	.clkr = {
1259		.enable_reg = 0x62010,
1260		.enable_mask = BIT(5),
1261		.hw.init = &(const struct clk_init_data) {
1262			.name = "gcc_ecpri_cc_gpll5_even_clk_src",
1263			.parent_hws = (const struct clk_hw*[]) {
1264				&gcc_gpll5_out_even.clkr.hw,
1265			},
1266			.num_parents = 1,
1267			.flags = CLK_SET_RATE_PARENT,
1268			.ops = &clk_branch2_ops,
1269		},
1270	},
1271};
1272
1273static struct clk_branch gcc_ecpri_xo_clk = {
1274	.halt_reg = 0x3a004,
1275	.halt_check = BRANCH_HALT,
1276	.clkr = {
1277		.enable_reg = 0x3a004,
1278		.enable_mask = BIT(0),
1279		.hw.init = &(const struct clk_init_data) {
1280			.name = "gcc_ecpri_xo_clk",
1281			.ops = &clk_branch2_ops,
1282		},
1283	},
1284};
1285
1286static struct clk_branch gcc_eth_100g_c2c_hm_apb_clk = {
1287	.halt_reg = 0x39010,
1288	.halt_check = BRANCH_HALT,
1289	.clkr = {
1290		.enable_reg = 0x39010,
1291		.enable_mask = BIT(0),
1292		.hw.init = &(const struct clk_init_data) {
1293			.name = "gcc_eth_100g_c2c_hm_apb_clk",
1294			.ops = &clk_branch2_ops,
1295		},
1296	},
1297};
1298
1299static struct clk_branch gcc_eth_100g_fh_hm_apb_0_clk = {
1300	.halt_reg = 0x39004,
1301	.halt_check = BRANCH_HALT,
1302	.clkr = {
1303		.enable_reg = 0x39004,
1304		.enable_mask = BIT(0),
1305		.hw.init = &(const struct clk_init_data) {
1306			.name = "gcc_eth_100g_fh_hm_apb_0_clk",
1307			.ops = &clk_branch2_ops,
1308		},
1309	},
1310};
1311
1312static struct clk_branch gcc_eth_100g_fh_hm_apb_1_clk = {
1313	.halt_reg = 0x39008,
1314	.halt_check = BRANCH_HALT,
1315	.clkr = {
1316		.enable_reg = 0x39008,
1317		.enable_mask = BIT(0),
1318		.hw.init = &(const struct clk_init_data) {
1319			.name = "gcc_eth_100g_fh_hm_apb_1_clk",
1320			.ops = &clk_branch2_ops,
1321		},
1322	},
1323};
1324
1325static struct clk_branch gcc_eth_100g_fh_hm_apb_2_clk = {
1326	.halt_reg = 0x3900c,
1327	.halt_check = BRANCH_HALT,
1328	.clkr = {
1329		.enable_reg = 0x3900c,
1330		.enable_mask = BIT(0),
1331		.hw.init = &(const struct clk_init_data) {
1332			.name = "gcc_eth_100g_fh_hm_apb_2_clk",
1333			.ops = &clk_branch2_ops,
1334		},
1335	},
1336};
1337
1338static struct clk_branch gcc_eth_dbg_c2c_hm_apb_clk = {
1339	.halt_reg = 0x39014,
1340	.halt_check = BRANCH_HALT,
1341	.clkr = {
1342		.enable_reg = 0x39014,
1343		.enable_mask = BIT(0),
1344		.hw.init = &(const struct clk_init_data) {
1345			.name = "gcc_eth_dbg_c2c_hm_apb_clk",
1346			.ops = &clk_branch2_ops,
1347		},
1348	},
1349};
1350
1351static struct clk_branch gcc_eth_dbg_snoc_axi_clk = {
1352	.halt_reg = 0x3901c,
1353	.halt_check = BRANCH_HALT_VOTED,
1354	.hwcg_reg = 0x3901c,
1355	.hwcg_bit = 1,
1356	.clkr = {
1357		.enable_reg = 0x3901c,
1358		.enable_mask = BIT(0),
1359		.hw.init = &(const struct clk_init_data) {
1360			.name = "gcc_eth_dbg_snoc_axi_clk",
1361			.ops = &clk_branch2_ops,
1362		},
1363	},
1364};
1365
1366static struct clk_branch gcc_gemnoc_pcie_qx_clk = {
1367	.halt_reg = 0x5402c,
1368	.halt_check = BRANCH_HALT_VOTED,
1369	.hwcg_reg = 0x5402c,
1370	.hwcg_bit = 1,
1371	.clkr = {
1372		.enable_reg = 0x62008,
1373		.enable_mask = BIT(0),
1374		.hw.init = &(const struct clk_init_data) {
1375			.name = "gcc_gemnoc_pcie_qx_clk",
1376			.ops = &clk_branch2_aon_ops,
1377		},
1378	},
1379};
1380
1381static struct clk_branch gcc_gp1_clk = {
1382	.halt_reg = 0x74000,
1383	.halt_check = BRANCH_HALT,
1384	.clkr = {
1385		.enable_reg = 0x74000,
1386		.enable_mask = BIT(0),
1387		.hw.init = &(const struct clk_init_data) {
1388			.name = "gcc_gp1_clk",
1389			.parent_hws = (const struct clk_hw*[]) {
1390				&gcc_gp1_clk_src.clkr.hw,
1391			},
1392			.num_parents = 1,
1393			.flags = CLK_SET_RATE_PARENT,
1394			.ops = &clk_branch2_ops,
1395		},
1396	},
1397};
1398
1399static struct clk_branch gcc_gp2_clk = {
1400	.halt_reg = 0x75000,
1401	.halt_check = BRANCH_HALT,
1402	.clkr = {
1403		.enable_reg = 0x75000,
1404		.enable_mask = BIT(0),
1405		.hw.init = &(const struct clk_init_data) {
1406			.name = "gcc_gp2_clk",
1407			.parent_hws = (const struct clk_hw*[]) {
1408				&gcc_gp2_clk_src.clkr.hw,
1409			},
1410			.num_parents = 1,
1411			.flags = CLK_SET_RATE_PARENT,
1412			.ops = &clk_branch2_ops,
1413		},
1414	},
1415};
1416
1417static struct clk_branch gcc_gp3_clk = {
1418	.halt_reg = 0x76000,
1419	.halt_check = BRANCH_HALT,
1420	.clkr = {
1421		.enable_reg = 0x76000,
1422		.enable_mask = BIT(0),
1423		.hw.init = &(const struct clk_init_data) {
1424			.name = "gcc_gp3_clk",
1425			.parent_hws = (const struct clk_hw*[]) {
1426				&gcc_gp3_clk_src.clkr.hw,
1427			},
1428			.num_parents = 1,
1429			.flags = CLK_SET_RATE_PARENT,
1430			.ops = &clk_branch2_ops,
1431		},
1432	},
1433};
1434
1435static struct clk_branch gcc_pcie_0_aux_clk = {
1436	.halt_reg = 0x9d030,
1437	.halt_check = BRANCH_HALT_VOTED,
1438	.hwcg_reg = 0x9d030,
1439	.hwcg_bit = 1,
1440	.clkr = {
1441		.enable_reg = 0x62000,
1442		.enable_mask = BIT(29),
1443		.hw.init = &(const struct clk_init_data) {
1444			.name = "gcc_pcie_0_aux_clk",
1445			.parent_hws = (const struct clk_hw*[]) {
1446				&gcc_pcie_0_aux_clk_src.clkr.hw,
1447			},
1448			.num_parents = 1,
1449			.flags = CLK_SET_RATE_PARENT,
1450			.ops = &clk_branch2_ops,
1451		},
1452	},
1453};
1454
1455static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1456	.halt_reg = 0x9d02c,
1457	.halt_check = BRANCH_HALT_VOTED,
1458	.hwcg_reg = 0x9d02c,
1459	.hwcg_bit = 1,
1460	.clkr = {
1461		.enable_reg = 0x62000,
1462		.enable_mask = BIT(28),
1463		.hw.init = &(const struct clk_init_data) {
1464			.name = "gcc_pcie_0_cfg_ahb_clk",
1465			.ops = &clk_branch2_ops,
1466		},
1467	},
1468};
1469
1470static struct clk_branch gcc_pcie_0_clkref_en = {
1471	.halt_reg = 0x9c004,
1472	.halt_check = BRANCH_HALT,
1473	.clkr = {
1474		.enable_reg = 0x9c004,
1475		.enable_mask = BIT(0),
1476		.hw.init = &(const struct clk_init_data) {
1477			.name = "gcc_pcie_0_clkref_en",
1478			.ops = &clk_branch2_ops,
1479		},
1480	},
1481};
1482
1483static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1484	.halt_reg = 0x9d024,
1485	.halt_check = BRANCH_HALT_SKIP,
1486	.hwcg_reg = 0x9d024,
1487	.hwcg_bit = 1,
1488	.clkr = {
1489		.enable_reg = 0x62000,
1490		.enable_mask = BIT(27),
1491		.hw.init = &(const struct clk_init_data) {
1492			.name = "gcc_pcie_0_mstr_axi_clk",
1493			.ops = &clk_branch2_ops,
1494		},
1495	},
1496};
1497
1498static struct clk_branch gcc_pcie_0_phy_aux_clk = {
1499	.halt_reg = 0x9d038,
1500	.halt_check = BRANCH_HALT_VOTED,
1501	.hwcg_reg = 0x9d038,
1502	.hwcg_bit = 1,
1503	.clkr = {
1504		.enable_reg = 0x62000,
1505		.enable_mask = BIT(24),
1506		.hw.init = &(const struct clk_init_data) {
1507			.name = "gcc_pcie_0_phy_aux_clk",
1508			.parent_hws = (const struct clk_hw*[]) {
1509				&gcc_pcie_0_phy_aux_clk_src.clkr.hw,
1510			},
1511			.num_parents = 1,
1512			.flags = CLK_SET_RATE_PARENT,
1513			.ops = &clk_branch2_ops,
1514		},
1515	},
1516};
1517
1518static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1519	.halt_reg = 0x9d048,
1520	.halt_check = BRANCH_HALT_VOTED,
1521	.hwcg_reg = 0x9d048,
1522	.hwcg_bit = 1,
1523	.clkr = {
1524		.enable_reg = 0x62000,
1525		.enable_mask = BIT(23),
1526		.hw.init = &(const struct clk_init_data) {
1527			.name = "gcc_pcie_0_phy_rchng_clk",
1528			.parent_hws = (const struct clk_hw*[]) {
1529				&gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1530			},
1531			.num_parents = 1,
1532			.flags = CLK_SET_RATE_PARENT,
1533			.ops = &clk_branch2_ops,
1534		},
1535	},
1536};
1537
1538static struct clk_branch gcc_pcie_0_pipe_clk = {
1539	.halt_reg = 0x9d040,
1540	.halt_check = BRANCH_HALT_VOTED,
1541	.hwcg_reg = 0x9d040,
1542	.hwcg_bit = 1,
1543	.clkr = {
1544		.enable_reg = 0x62000,
1545		.enable_mask = BIT(30),
1546		.hw.init = &(const struct clk_init_data) {
1547			.name = "gcc_pcie_0_pipe_clk",
1548			.parent_hws = (const struct clk_hw*[]) {
1549				&gcc_pcie_0_pipe_clk_src.clkr.hw,
1550			},
1551			.num_parents = 1,
1552			.flags = CLK_SET_RATE_PARENT,
1553			.ops = &clk_branch2_ops,
1554		},
1555	},
1556};
1557
1558static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1559	.halt_reg = 0x9d01c,
1560	.halt_check = BRANCH_HALT_VOTED,
1561	.hwcg_reg = 0x9d01c,
1562	.hwcg_bit = 1,
1563	.clkr = {
1564		.enable_reg = 0x62000,
1565		.enable_mask = BIT(26),
1566		.hw.init = &(const struct clk_init_data) {
1567			.name = "gcc_pcie_0_slv_axi_clk",
1568			.ops = &clk_branch2_ops,
1569		},
1570	},
1571};
1572
1573static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1574	.halt_reg = 0x9d018,
1575	.halt_check = BRANCH_HALT_VOTED,
1576	.hwcg_reg = 0x9d018,
1577	.hwcg_bit = 1,
1578	.clkr = {
1579		.enable_reg = 0x62000,
1580		.enable_mask = BIT(25),
1581		.hw.init = &(const struct clk_init_data) {
1582			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1583			.ops = &clk_branch2_ops,
1584		},
1585	},
1586};
1587
1588static struct clk_branch gcc_pdm2_clk = {
1589	.halt_reg = 0x4300c,
1590	.halt_check = BRANCH_HALT,
1591	.clkr = {
1592		.enable_reg = 0x4300c,
1593		.enable_mask = BIT(0),
1594		.hw.init = &(const struct clk_init_data) {
1595			.name = "gcc_pdm2_clk",
1596			.parent_hws = (const struct clk_hw*[]) {
1597				&gcc_pdm2_clk_src.clkr.hw,
1598			},
1599			.num_parents = 1,
1600			.flags = CLK_SET_RATE_PARENT,
1601			.ops = &clk_branch2_ops,
1602		},
1603	},
1604};
1605
1606static struct clk_branch gcc_pdm_ahb_clk = {
1607	.halt_reg = 0x43004,
1608	.halt_check = BRANCH_HALT_VOTED,
1609	.hwcg_reg = 0x43004,
1610	.hwcg_bit = 1,
1611	.clkr = {
1612		.enable_reg = 0x43004,
1613		.enable_mask = BIT(0),
1614		.hw.init = &(const struct clk_init_data) {
1615			.name = "gcc_pdm_ahb_clk",
1616			.ops = &clk_branch2_ops,
1617		},
1618	},
1619};
1620
1621static struct clk_branch gcc_pdm_xo4_clk = {
1622	.halt_reg = 0x43008,
1623	.halt_check = BRANCH_HALT,
1624	.clkr = {
1625		.enable_reg = 0x43008,
1626		.enable_mask = BIT(0),
1627		.hw.init = &(const struct clk_init_data) {
1628			.name = "gcc_pdm_xo4_clk",
1629			.ops = &clk_branch2_ops,
1630		},
1631	},
1632};
1633
1634static struct clk_branch gcc_qmip_anoc_pcie_clk = {
1635	.halt_reg = 0x84044,
1636	.halt_check = BRANCH_HALT_VOTED,
1637	.hwcg_reg = 0x84044,
1638	.hwcg_bit = 1,
1639	.clkr = {
1640		.enable_reg = 0x84044,
1641		.enable_mask = BIT(0),
1642		.hw.init = &(const struct clk_init_data) {
1643			.name = "gcc_qmip_anoc_pcie_clk",
1644			.ops = &clk_branch2_ops,
1645		},
1646	},
1647};
1648
1649static struct clk_branch gcc_qmip_ecpri_dma0_clk = {
1650	.halt_reg = 0x84038,
1651	.halt_check = BRANCH_HALT_VOTED,
1652	.hwcg_reg = 0x84038,
1653	.hwcg_bit = 1,
1654	.clkr = {
1655		.enable_reg = 0x84038,
1656		.enable_mask = BIT(0),
1657		.hw.init = &(const struct clk_init_data) {
1658			.name = "gcc_qmip_ecpri_dma0_clk",
1659			.ops = &clk_branch2_ops,
1660		},
1661	},
1662};
1663
1664static struct clk_branch gcc_qmip_ecpri_dma1_clk = {
1665	.halt_reg = 0x8403c,
1666	.halt_check = BRANCH_HALT_VOTED,
1667	.hwcg_reg = 0x8403c,
1668	.hwcg_bit = 1,
1669	.clkr = {
1670		.enable_reg = 0x8403c,
1671		.enable_mask = BIT(0),
1672		.hw.init = &(const struct clk_init_data) {
1673			.name = "gcc_qmip_ecpri_dma1_clk",
1674			.ops = &clk_branch2_ops,
1675		},
1676	},
1677};
1678
1679static struct clk_branch gcc_qmip_ecpri_gsi_clk = {
1680	.halt_reg = 0x84040,
1681	.halt_check = BRANCH_HALT_VOTED,
1682	.hwcg_reg = 0x84040,
1683	.hwcg_bit = 1,
1684	.clkr = {
1685		.enable_reg = 0x84040,
1686		.enable_mask = BIT(0),
1687		.hw.init = &(const struct clk_init_data) {
1688			.name = "gcc_qmip_ecpri_gsi_clk",
1689			.ops = &clk_branch2_ops,
1690		},
1691	},
1692};
1693
1694static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1695	.halt_reg = 0x27018,
1696	.halt_check = BRANCH_HALT_VOTED,
1697	.clkr = {
1698		.enable_reg = 0x62008,
1699		.enable_mask = BIT(9),
1700		.hw.init = &(const struct clk_init_data) {
1701			.name = "gcc_qupv3_wrap0_core_2x_clk",
1702			.ops = &clk_branch2_ops,
1703		},
1704	},
1705};
1706
1707static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1708	.halt_reg = 0x2700c,
1709	.halt_check = BRANCH_HALT_VOTED,
1710	.clkr = {
1711		.enable_reg = 0x62008,
1712		.enable_mask = BIT(8),
1713		.hw.init = &(const struct clk_init_data) {
1714			.name = "gcc_qupv3_wrap0_core_clk",
1715			.ops = &clk_branch2_ops,
1716		},
1717	},
1718};
1719
1720static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1721	.halt_reg = 0x2714c,
1722	.halt_check = BRANCH_HALT_VOTED,
1723	.clkr = {
1724		.enable_reg = 0x62008,
1725		.enable_mask = BIT(10),
1726		.hw.init = &(const struct clk_init_data) {
1727			.name = "gcc_qupv3_wrap0_s0_clk",
1728			.parent_hws = (const struct clk_hw*[]) {
1729				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1730			},
1731			.num_parents = 1,
1732			.flags = CLK_SET_RATE_PARENT,
1733			.ops = &clk_branch2_ops,
1734		},
1735	},
1736};
1737
1738static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1739	.halt_reg = 0x27280,
1740	.halt_check = BRANCH_HALT_VOTED,
1741	.clkr = {
1742		.enable_reg = 0x62008,
1743		.enable_mask = BIT(11),
1744		.hw.init = &(const struct clk_init_data) {
1745			.name = "gcc_qupv3_wrap0_s1_clk",
1746			.parent_hws = (const struct clk_hw*[]) {
1747				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1748			},
1749			.num_parents = 1,
1750			.flags = CLK_SET_RATE_PARENT,
1751			.ops = &clk_branch2_ops,
1752		},
1753	},
1754};
1755
1756static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1757	.halt_reg = 0x273b4,
1758	.halt_check = BRANCH_HALT_VOTED,
1759	.clkr = {
1760		.enable_reg = 0x62008,
1761		.enable_mask = BIT(12),
1762		.hw.init = &(const struct clk_init_data) {
1763			.name = "gcc_qupv3_wrap0_s2_clk",
1764			.parent_hws = (const struct clk_hw*[]) {
1765				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1766			},
1767			.num_parents = 1,
1768			.flags = CLK_SET_RATE_PARENT,
1769			.ops = &clk_branch2_ops,
1770		},
1771	},
1772};
1773
1774static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1775	.halt_reg = 0x274e8,
1776	.halt_check = BRANCH_HALT_VOTED,
1777	.clkr = {
1778		.enable_reg = 0x62008,
1779		.enable_mask = BIT(13),
1780		.hw.init = &(const struct clk_init_data) {
1781			.name = "gcc_qupv3_wrap0_s3_clk",
1782			.parent_hws = (const struct clk_hw*[]) {
1783				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1784			},
1785			.num_parents = 1,
1786			.flags = CLK_SET_RATE_PARENT,
1787			.ops = &clk_branch2_ops,
1788		},
1789	},
1790};
1791
1792static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1793	.halt_reg = 0x2761c,
1794	.halt_check = BRANCH_HALT_VOTED,
1795	.clkr = {
1796		.enable_reg = 0x62008,
1797		.enable_mask = BIT(14),
1798		.hw.init = &(const struct clk_init_data) {
1799			.name = "gcc_qupv3_wrap0_s4_clk",
1800			.parent_hws = (const struct clk_hw*[]) {
1801				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1802			},
1803			.num_parents = 1,
1804			.flags = CLK_SET_RATE_PARENT,
1805			.ops = &clk_branch2_ops,
1806		},
1807	},
1808};
1809
1810static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1811	.halt_reg = 0x27750,
1812	.halt_check = BRANCH_HALT_VOTED,
1813	.clkr = {
1814		.enable_reg = 0x62008,
1815		.enable_mask = BIT(15),
1816		.hw.init = &(const struct clk_init_data) {
1817			.name = "gcc_qupv3_wrap0_s5_clk",
1818			.parent_hws = (const struct clk_hw*[]) {
1819				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1820			},
1821			.num_parents = 1,
1822			.flags = CLK_SET_RATE_PARENT,
1823			.ops = &clk_branch2_ops,
1824		},
1825	},
1826};
1827
1828static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
1829	.halt_reg = 0x27884,
1830	.halt_check = BRANCH_HALT_VOTED,
1831	.clkr = {
1832		.enable_reg = 0x62008,
1833		.enable_mask = BIT(16),
1834		.hw.init = &(const struct clk_init_data) {
1835			.name = "gcc_qupv3_wrap0_s6_clk",
1836			.parent_hws = (const struct clk_hw*[]) {
1837				&gcc_qupv3_wrap0_s6_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_qupv3_wrap0_s7_clk = {
1847	.halt_reg = 0x279b8,
1848	.halt_check = BRANCH_HALT_VOTED,
1849	.clkr = {
1850		.enable_reg = 0x62008,
1851		.enable_mask = BIT(17),
1852		.hw.init = &(const struct clk_init_data) {
1853			.name = "gcc_qupv3_wrap0_s7_clk",
1854			.parent_hws = (const struct clk_hw*[]) {
1855				&gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
1856			},
1857			.num_parents = 1,
1858			.flags = CLK_SET_RATE_PARENT,
1859			.ops = &clk_branch2_ops,
1860		},
1861	},
1862};
1863
1864static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1865	.halt_reg = 0x28018,
1866	.halt_check = BRANCH_HALT_VOTED,
1867	.clkr = {
1868		.enable_reg = 0x62008,
1869		.enable_mask = BIT(18),
1870		.hw.init = &(const struct clk_init_data) {
1871			.name = "gcc_qupv3_wrap1_core_2x_clk",
1872			.ops = &clk_branch2_ops,
1873		},
1874	},
1875};
1876
1877static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1878	.halt_reg = 0x2800c,
1879	.halt_check = BRANCH_HALT_VOTED,
1880	.clkr = {
1881		.enable_reg = 0x62008,
1882		.enable_mask = BIT(19),
1883		.hw.init = &(const struct clk_init_data) {
1884			.name = "gcc_qupv3_wrap1_core_clk",
1885			.ops = &clk_branch2_ops,
1886		},
1887	},
1888};
1889
1890static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1891	.halt_reg = 0x2814c,
1892	.halt_check = BRANCH_HALT_VOTED,
1893	.clkr = {
1894		.enable_reg = 0x62008,
1895		.enable_mask = BIT(22),
1896		.hw.init = &(const struct clk_init_data) {
1897			.name = "gcc_qupv3_wrap1_s0_clk",
1898			.parent_hws = (const struct clk_hw*[]) {
1899				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1900			},
1901			.num_parents = 1,
1902			.flags = CLK_SET_RATE_PARENT,
1903			.ops = &clk_branch2_ops,
1904		},
1905	},
1906};
1907
1908static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1909	.halt_reg = 0x28280,
1910	.halt_check = BRANCH_HALT_VOTED,
1911	.clkr = {
1912		.enable_reg = 0x62008,
1913		.enable_mask = BIT(23),
1914		.hw.init = &(const struct clk_init_data) {
1915			.name = "gcc_qupv3_wrap1_s1_clk",
1916			.parent_hws = (const struct clk_hw*[]) {
1917				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1918			},
1919			.num_parents = 1,
1920			.flags = CLK_SET_RATE_PARENT,
1921			.ops = &clk_branch2_ops,
1922		},
1923	},
1924};
1925
1926static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1927	.halt_reg = 0x283b4,
1928	.halt_check = BRANCH_HALT_VOTED,
1929	.clkr = {
1930		.enable_reg = 0x62008,
1931		.enable_mask = BIT(24),
1932		.hw.init = &(const struct clk_init_data) {
1933			.name = "gcc_qupv3_wrap1_s2_clk",
1934			.parent_hws = (const struct clk_hw*[]) {
1935				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1936			},
1937			.num_parents = 1,
1938			.flags = CLK_SET_RATE_PARENT,
1939			.ops = &clk_branch2_ops,
1940		},
1941	},
1942};
1943
1944static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1945	.halt_reg = 0x284e8,
1946	.halt_check = BRANCH_HALT_VOTED,
1947	.clkr = {
1948		.enable_reg = 0x62008,
1949		.enable_mask = BIT(25),
1950		.hw.init = &(const struct clk_init_data) {
1951			.name = "gcc_qupv3_wrap1_s3_clk",
1952			.parent_hws = (const struct clk_hw*[]) {
1953				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1954			},
1955			.num_parents = 1,
1956			.flags = CLK_SET_RATE_PARENT,
1957			.ops = &clk_branch2_ops,
1958		},
1959	},
1960};
1961
1962static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1963	.halt_reg = 0x2861c,
1964	.halt_check = BRANCH_HALT_VOTED,
1965	.clkr = {
1966		.enable_reg = 0x62008,
1967		.enable_mask = BIT(26),
1968		.hw.init = &(const struct clk_init_data) {
1969			.name = "gcc_qupv3_wrap1_s4_clk",
1970			.parent_hws = (const struct clk_hw*[]) {
1971				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1972			},
1973			.num_parents = 1,
1974			.flags = CLK_SET_RATE_PARENT,
1975			.ops = &clk_branch2_ops,
1976		},
1977	},
1978};
1979
1980static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1981	.halt_reg = 0x28750,
1982	.halt_check = BRANCH_HALT_VOTED,
1983	.clkr = {
1984		.enable_reg = 0x62008,
1985		.enable_mask = BIT(27),
1986		.hw.init = &(const struct clk_init_data) {
1987			.name = "gcc_qupv3_wrap1_s5_clk",
1988			.parent_hws = (const struct clk_hw*[]) {
1989				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1990			},
1991			.num_parents = 1,
1992			.flags = CLK_SET_RATE_PARENT,
1993			.ops = &clk_branch2_ops,
1994		},
1995	},
1996};
1997
1998static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
1999	.halt_reg = 0x28884,
2000	.halt_check = BRANCH_HALT_VOTED,
2001	.clkr = {
2002		.enable_reg = 0x62008,
2003		.enable_mask = BIT(28),
2004		.hw.init = &(const struct clk_init_data) {
2005			.name = "gcc_qupv3_wrap1_s6_clk",
2006			.parent_hws = (const struct clk_hw*[]) {
2007				&gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2008			},
2009			.num_parents = 1,
2010			.flags = CLK_SET_RATE_PARENT,
2011			.ops = &clk_branch2_ops,
2012		},
2013	},
2014};
2015
2016static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2017	.halt_reg = 0x289b8,
2018	.halt_check = BRANCH_HALT_VOTED,
2019	.clkr = {
2020		.enable_reg = 0x62008,
2021		.enable_mask = BIT(29),
2022		.hw.init = &(const struct clk_init_data) {
2023			.name = "gcc_qupv3_wrap1_s7_clk",
2024			.parent_hws = (const struct clk_hw*[]) {
2025				&gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2026			},
2027			.num_parents = 1,
2028			.flags = CLK_SET_RATE_PARENT,
2029			.ops = &clk_branch2_ops,
2030		},
2031	},
2032};
2033
2034static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2035	.halt_reg = 0x27004,
2036	.halt_check = BRANCH_HALT_VOTED,
2037	.hwcg_reg = 0x27004,
2038	.hwcg_bit = 1,
2039	.clkr = {
2040		.enable_reg = 0x62008,
2041		.enable_mask = BIT(6),
2042		.hw.init = &(const struct clk_init_data) {
2043			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2044			.ops = &clk_branch2_ops,
2045		},
2046	},
2047};
2048
2049static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2050	.halt_reg = 0x27008,
2051	.halt_check = BRANCH_HALT_VOTED,
2052	.hwcg_reg = 0x27008,
2053	.hwcg_bit = 1,
2054	.clkr = {
2055		.enable_reg = 0x62008,
2056		.enable_mask = BIT(7),
2057		.hw.init = &(const struct clk_init_data) {
2058			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2059			.ops = &clk_branch2_ops,
2060		},
2061	},
2062};
2063
2064static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2065	.halt_reg = 0x28004,
2066	.halt_check = BRANCH_HALT_VOTED,
2067	.hwcg_reg = 0x28004,
2068	.hwcg_bit = 1,
2069	.clkr = {
2070		.enable_reg = 0x62008,
2071		.enable_mask = BIT(20),
2072		.hw.init = &(const struct clk_init_data) {
2073			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2074			.ops = &clk_branch2_ops,
2075		},
2076	},
2077};
2078
2079static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2080	.halt_reg = 0x28008,
2081	.halt_check = BRANCH_HALT_VOTED,
2082	.hwcg_reg = 0x28008,
2083	.hwcg_bit = 1,
2084	.clkr = {
2085		.enable_reg = 0x62008,
2086		.enable_mask = BIT(21),
2087		.hw.init = &(const struct clk_init_data) {
2088			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2089			.ops = &clk_branch2_ops,
2090		},
2091	},
2092};
2093
2094static struct clk_branch gcc_sdcc5_ahb_clk = {
2095	.halt_reg = 0x3b00c,
2096	.halt_check = BRANCH_HALT,
2097	.clkr = {
2098		.enable_reg = 0x3b00c,
2099		.enable_mask = BIT(0),
2100		.hw.init = &(const struct clk_init_data) {
2101			.name = "gcc_sdcc5_ahb_clk",
2102			.ops = &clk_branch2_ops,
2103		},
2104	},
2105};
2106
2107static struct clk_branch gcc_sdcc5_apps_clk = {
2108	.halt_reg = 0x3b004,
2109	.halt_check = BRANCH_HALT,
2110	.clkr = {
2111		.enable_reg = 0x3b004,
2112		.enable_mask = BIT(0),
2113		.hw.init = &(const struct clk_init_data) {
2114			.name = "gcc_sdcc5_apps_clk",
2115			.parent_hws = (const struct clk_hw*[]) {
2116				&gcc_sdcc5_apps_clk_src.clkr.hw,
2117			},
2118			.num_parents = 1,
2119			.flags = CLK_SET_RATE_PARENT,
2120			.ops = &clk_branch2_ops,
2121		},
2122	},
2123};
2124
2125static struct clk_branch gcc_sdcc5_ice_core_clk = {
2126	.halt_reg = 0x3b010,
2127	.halt_check = BRANCH_HALT,
2128	.clkr = {
2129		.enable_reg = 0x3b010,
2130		.enable_mask = BIT(0),
2131		.hw.init = &(const struct clk_init_data) {
2132			.name = "gcc_sdcc5_ice_core_clk",
2133			.parent_hws = (const struct clk_hw*[]) {
2134				&gcc_sdcc5_ice_core_clk_src.clkr.hw,
2135			},
2136			.num_parents = 1,
2137			.flags = CLK_SET_RATE_PARENT,
2138			.ops = &clk_branch2_ops,
2139		},
2140	},
2141};
2142
2143static struct clk_branch gcc_sm_bus_ahb_clk = {
2144	.halt_reg = 0x5b004,
2145	.halt_check = BRANCH_HALT,
2146	.clkr = {
2147		.enable_reg = 0x5b004,
2148		.enable_mask = BIT(0),
2149		.hw.init = &(const struct clk_init_data) {
2150			.name = "gcc_sm_bus_ahb_clk",
2151			.ops = &clk_branch2_ops,
2152		},
2153	},
2154};
2155
2156static struct clk_branch gcc_sm_bus_xo_clk = {
2157	.halt_reg = 0x5b008,
2158	.halt_check = BRANCH_HALT,
2159	.clkr = {
2160		.enable_reg = 0x5b008,
2161		.enable_mask = BIT(0),
2162		.hw.init = &(const struct clk_init_data) {
2163			.name = "gcc_sm_bus_xo_clk",
2164			.parent_hws = (const struct clk_hw*[]) {
2165				&gcc_sm_bus_xo_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_snoc_cnoc_gemnoc_pcie_qx_clk = {
2175	.halt_reg = 0x9200c,
2176	.halt_check = BRANCH_HALT_SKIP,
2177	.hwcg_reg = 0x9200c,
2178	.hwcg_bit = 1,
2179	.clkr = {
2180		.enable_reg = 0x62000,
2181		.enable_mask = BIT(11),
2182		.hw.init = &(const struct clk_init_data) {
2183			.name = "gcc_snoc_cnoc_gemnoc_pcie_qx_clk",
2184			.ops = &clk_branch2_ops,
2185		},
2186	},
2187};
2188
2189static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk = {
2190	.halt_reg = 0x92010,
2191	.halt_check = BRANCH_HALT_SKIP,
2192	.hwcg_reg = 0x92010,
2193	.hwcg_bit = 1,
2194	.clkr = {
2195		.enable_reg = 0x62000,
2196		.enable_mask = BIT(12),
2197		.hw.init = &(const struct clk_init_data) {
2198			.name = "gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk",
2199			.ops = &clk_branch2_ops,
2200		},
2201	},
2202};
2203
2204static struct clk_branch gcc_snoc_cnoc_pcie_qx_clk = {
2205	.halt_reg = 0x84030,
2206	.halt_check = BRANCH_HALT,
2207	.clkr = {
2208		.enable_reg = 0x84030,
2209		.enable_mask = BIT(0),
2210		.hw.init = &(const struct clk_init_data) {
2211			.name = "gcc_snoc_cnoc_pcie_qx_clk",
2212			.ops = &clk_branch2_ops,
2213		},
2214	},
2215};
2216
2217static struct clk_branch gcc_snoc_pcie_sf_center_qx_clk = {
2218	.halt_reg = 0x92014,
2219	.halt_check = BRANCH_HALT_SKIP,
2220	.hwcg_reg = 0x92014,
2221	.hwcg_bit = 1,
2222	.clkr = {
2223		.enable_reg = 0x62000,
2224		.enable_mask = BIT(19),
2225		.hw.init = &(const struct clk_init_data) {
2226			.name = "gcc_snoc_pcie_sf_center_qx_clk",
2227			.ops = &clk_branch2_ops,
2228		},
2229	},
2230};
2231
2232static struct clk_branch gcc_snoc_pcie_sf_south_qx_clk = {
2233	.halt_reg = 0x92018,
2234	.halt_check = BRANCH_HALT_SKIP,
2235	.hwcg_reg = 0x92018,
2236	.hwcg_bit = 1,
2237	.clkr = {
2238		.enable_reg = 0x62000,
2239		.enable_mask = BIT(22),
2240		.hw.init = &(const struct clk_init_data) {
2241			.name = "gcc_snoc_pcie_sf_south_qx_clk",
2242			.ops = &clk_branch2_ops,
2243		},
2244	},
2245};
2246
2247static struct clk_branch gcc_tsc_cfg_ahb_clk = {
2248	.halt_reg = 0x5700c,
2249	.halt_check = BRANCH_HALT,
2250	.clkr = {
2251		.enable_reg = 0x5700c,
2252		.enable_mask = BIT(0),
2253		.hw.init = &(const struct clk_init_data) {
2254			.name = "gcc_tsc_cfg_ahb_clk",
2255			.ops = &clk_branch2_ops,
2256		},
2257	},
2258};
2259
2260static struct clk_branch gcc_tsc_cntr_clk = {
2261	.halt_reg = 0x57004,
2262	.halt_check = BRANCH_HALT,
2263	.clkr = {
2264		.enable_reg = 0x57004,
2265		.enable_mask = BIT(0),
2266		.hw.init = &(const struct clk_init_data) {
2267			.name = "gcc_tsc_cntr_clk",
2268			.parent_hws = (const struct clk_hw*[]) {
2269				&gcc_tsc_clk_src.clkr.hw,
2270			},
2271			.num_parents = 1,
2272			.flags = CLK_SET_RATE_PARENT,
2273			.ops = &clk_branch2_ops,
2274		},
2275	},
2276};
2277
2278static struct clk_branch gcc_tsc_etu_clk = {
2279	.halt_reg = 0x57008,
2280	.halt_check = BRANCH_HALT,
2281	.clkr = {
2282		.enable_reg = 0x57008,
2283		.enable_mask = BIT(0),
2284		.hw.init = &(const struct clk_init_data) {
2285			.name = "gcc_tsc_etu_clk",
2286			.parent_hws = (const struct clk_hw*[]) {
2287				&gcc_tsc_clk_src.clkr.hw,
2288			},
2289			.num_parents = 1,
2290			.flags = CLK_SET_RATE_PARENT,
2291			.ops = &clk_branch2_ops,
2292		},
2293	},
2294};
2295
2296static struct clk_branch gcc_usb2_clkref_en = {
2297	.halt_reg = 0x9c008,
2298	.halt_check = BRANCH_HALT,
2299	.clkr = {
2300		.enable_reg = 0x9c008,
2301		.enable_mask = BIT(0),
2302		.hw.init = &(const struct clk_init_data) {
2303			.name = "gcc_usb2_clkref_en",
2304			.ops = &clk_branch2_ops,
2305		},
2306	},
2307};
2308
2309static struct clk_branch gcc_usb30_prim_master_clk = {
2310	.halt_reg = 0x49018,
2311	.halt_check = BRANCH_HALT,
2312	.clkr = {
2313		.enable_reg = 0x49018,
2314		.enable_mask = BIT(0),
2315		.hw.init = &(const struct clk_init_data) {
2316			.name = "gcc_usb30_prim_master_clk",
2317			.parent_hws = (const struct clk_hw*[]) {
2318				&gcc_usb30_prim_master_clk_src.clkr.hw,
2319			},
2320			.num_parents = 1,
2321			.flags = CLK_SET_RATE_PARENT,
2322			.ops = &clk_branch2_ops,
2323		},
2324	},
2325};
2326
2327static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2328	.halt_reg = 0x49024,
2329	.halt_check = BRANCH_HALT,
2330	.clkr = {
2331		.enable_reg = 0x49024,
2332		.enable_mask = BIT(0),
2333		.hw.init = &(const struct clk_init_data) {
2334			.name = "gcc_usb30_prim_mock_utmi_clk",
2335			.parent_hws = (const struct clk_hw*[]) {
2336				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2337			},
2338			.num_parents = 1,
2339			.flags = CLK_SET_RATE_PARENT,
2340			.ops = &clk_branch2_ops,
2341		},
2342	},
2343};
2344
2345static struct clk_branch gcc_usb30_prim_sleep_clk = {
2346	.halt_reg = 0x49020,
2347	.halt_check = BRANCH_HALT,
2348	.clkr = {
2349		.enable_reg = 0x49020,
2350		.enable_mask = BIT(0),
2351		.hw.init = &(const struct clk_init_data) {
2352			.name = "gcc_usb30_prim_sleep_clk",
2353			.ops = &clk_branch2_ops,
2354		},
2355	},
2356};
2357
2358static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2359	.halt_reg = 0x49060,
2360	.halt_check = BRANCH_HALT,
2361	.clkr = {
2362		.enable_reg = 0x49060,
2363		.enable_mask = BIT(0),
2364		.hw.init = &(const struct clk_init_data) {
2365			.name = "gcc_usb3_prim_phy_aux_clk",
2366			.parent_hws = (const struct clk_hw*[]) {
2367				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2368			},
2369			.num_parents = 1,
2370			.flags = CLK_SET_RATE_PARENT,
2371			.ops = &clk_branch2_ops,
2372		},
2373	},
2374};
2375
2376static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2377	.halt_reg = 0x49064,
2378	.halt_check = BRANCH_HALT,
2379	.clkr = {
2380		.enable_reg = 0x49064,
2381		.enable_mask = BIT(0),
2382		.hw.init = &(const struct clk_init_data) {
2383			.name = "gcc_usb3_prim_phy_com_aux_clk",
2384			.parent_hws = (const struct clk_hw*[]) {
2385				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2386			},
2387			.num_parents = 1,
2388			.flags = CLK_SET_RATE_PARENT,
2389			.ops = &clk_branch2_ops,
2390		},
2391	},
2392};
2393
2394static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2395	.halt_reg = 0x49068,
2396	.halt_check = BRANCH_HALT_DELAY,
2397	.hwcg_reg = 0x49068,
2398	.hwcg_bit = 1,
2399	.clkr = {
2400		.enable_reg = 0x49068,
2401		.enable_mask = BIT(0),
2402		.hw.init = &(const struct clk_init_data) {
2403			.name = "gcc_usb3_prim_phy_pipe_clk",
2404			.parent_hws = (const struct clk_hw*[]) {
2405				&gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2406			},
2407			.num_parents = 1,
2408			.flags = CLK_SET_RATE_PARENT,
2409			.ops = &clk_branch2_ops,
2410		},
2411	},
2412};
2413
2414static struct gdsc pcie_0_gdsc = {
2415	.gdscr = 0x9d004,
2416	.en_rest_wait_val = 0x2,
2417	.en_few_wait_val = 0x2,
2418	.clk_dis_wait_val = 0xf,
2419	.pd = {
2420		.name = "gcc_pcie_0_gdsc",
2421	},
2422	.pwrsts = PWRSTS_OFF_ON,
2423};
2424
2425static struct gdsc pcie_0_phy_gdsc = {
2426	.gdscr = 0x7c004,
2427	.en_rest_wait_val = 0x2,
2428	.en_few_wait_val = 0x2,
2429	.clk_dis_wait_val = 0x2,
2430	.pd = {
2431		.name = "gcc_pcie_0_phy_gdsc",
2432	},
2433	.pwrsts = PWRSTS_OFF_ON,
2434};
2435
2436static struct gdsc usb30_prim_gdsc = {
2437	.gdscr = 0x49004,
2438	.en_rest_wait_val = 0x2,
2439	.en_few_wait_val = 0x2,
2440	.clk_dis_wait_val = 0xf,
2441	.pd = {
2442		.name = "gcc_usb30_prim_gdsc",
2443	},
2444	.pwrsts = PWRSTS_OFF_ON,
2445};
2446
2447static struct clk_regmap *gcc_qdu1000_clocks[] = {
2448	[GCC_AGGRE_NOC_ECPRI_DMA_CLK] = &gcc_aggre_noc_ecpri_dma_clk.clkr,
2449	[GCC_AGGRE_NOC_ECPRI_DMA_CLK_SRC] = &gcc_aggre_noc_ecpri_dma_clk_src.clkr,
2450	[GCC_AGGRE_NOC_ECPRI_GSI_CLK_SRC] = &gcc_aggre_noc_ecpri_gsi_clk_src.clkr,
2451	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2452	[GCC_CFG_NOC_ECPRI_CC_AHB_CLK] = &gcc_cfg_noc_ecpri_cc_ahb_clk.clkr,
2453	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2454	[GCC_DDRSS_ECPRI_DMA_CLK] = &gcc_ddrss_ecpri_dma_clk.clkr,
2455	[GCC_ECPRI_AHB_CLK] = &gcc_ecpri_ahb_clk.clkr,
2456	[GCC_ECPRI_CC_GPLL0_CLK_SRC] = &gcc_ecpri_cc_gpll0_clk_src.clkr,
2457	[GCC_ECPRI_CC_GPLL1_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll1_even_clk_src.clkr,
2458	[GCC_ECPRI_CC_GPLL2_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll2_even_clk_src.clkr,
2459	[GCC_ECPRI_CC_GPLL3_CLK_SRC] = &gcc_ecpri_cc_gpll3_clk_src.clkr,
2460	[GCC_ECPRI_CC_GPLL4_CLK_SRC] = &gcc_ecpri_cc_gpll4_clk_src.clkr,
2461	[GCC_ECPRI_CC_GPLL5_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll5_even_clk_src.clkr,
2462	[GCC_ECPRI_XO_CLK] = &gcc_ecpri_xo_clk.clkr,
2463	[GCC_ETH_DBG_SNOC_AXI_CLK] = &gcc_eth_dbg_snoc_axi_clk.clkr,
2464	[GCC_GEMNOC_PCIE_QX_CLK] = &gcc_gemnoc_pcie_qx_clk.clkr,
2465	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2466	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2467	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2468	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2469	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2470	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2471	[GCC_GPLL0] = &gcc_gpll0.clkr,
2472	[GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
2473	[GCC_GPLL1] = &gcc_gpll1.clkr,
2474	[GCC_GPLL2] = &gcc_gpll2.clkr,
2475	[GCC_GPLL2_OUT_EVEN] = &gcc_gpll2_out_even.clkr,
2476	[GCC_GPLL3] = &gcc_gpll3.clkr,
2477	[GCC_GPLL4] = &gcc_gpll4.clkr,
2478	[GCC_GPLL5] = &gcc_gpll5.clkr,
2479	[GCC_GPLL5_OUT_EVEN] = &gcc_gpll5_out_even.clkr,
2480	[GCC_GPLL6] = &gcc_gpll6.clkr,
2481	[GCC_GPLL7] = &gcc_gpll7.clkr,
2482	[GCC_GPLL8] = &gcc_gpll8.clkr,
2483	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2484	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2485	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2486	[GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
2487	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2488	[GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
2489	[GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
2490	[GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
2491	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2492	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2493	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2494	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2495	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2496	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2497	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2498	[GCC_QMIP_ANOC_PCIE_CLK] = &gcc_qmip_anoc_pcie_clk.clkr,
2499	[GCC_QMIP_ECPRI_DMA0_CLK] = &gcc_qmip_ecpri_dma0_clk.clkr,
2500	[GCC_QMIP_ECPRI_DMA1_CLK] = &gcc_qmip_ecpri_dma1_clk.clkr,
2501	[GCC_QMIP_ECPRI_GSI_CLK] = &gcc_qmip_ecpri_gsi_clk.clkr,
2502	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2503	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2504	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2505	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2506	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2507	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2508	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2509	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2510	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2511	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2512	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2513	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2514	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2515	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2516	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
2517	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
2518	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
2519	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
2520	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2521	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2522	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2523	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2524	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2525	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2526	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2527	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2528	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2529	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2530	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2531	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2532	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2533	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2534	[GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
2535	[GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
2536	[GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
2537	[GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
2538	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2539	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2540	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2541	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2542	[GCC_SDCC5_AHB_CLK] = &gcc_sdcc5_ahb_clk.clkr,
2543	[GCC_SDCC5_APPS_CLK] = &gcc_sdcc5_apps_clk.clkr,
2544	[GCC_SDCC5_APPS_CLK_SRC] = &gcc_sdcc5_apps_clk_src.clkr,
2545	[GCC_SDCC5_ICE_CORE_CLK] = &gcc_sdcc5_ice_core_clk.clkr,
2546	[GCC_SDCC5_ICE_CORE_CLK_SRC] = &gcc_sdcc5_ice_core_clk_src.clkr,
2547	[GCC_SM_BUS_AHB_CLK] = &gcc_sm_bus_ahb_clk.clkr,
2548	[GCC_SM_BUS_XO_CLK] = &gcc_sm_bus_xo_clk.clkr,
2549	[GCC_SM_BUS_XO_CLK_SRC] = &gcc_sm_bus_xo_clk_src.clkr,
2550	[GCC_SNOC_CNOC_GEMNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_qx_clk.clkr,
2551	[GCC_SNOC_CNOC_GEMNOC_PCIE_SOUTH_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk.clkr,
2552	[GCC_SNOC_CNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_pcie_qx_clk.clkr,
2553	[GCC_SNOC_PCIE_SF_CENTER_QX_CLK] = &gcc_snoc_pcie_sf_center_qx_clk.clkr,
2554	[GCC_SNOC_PCIE_SF_SOUTH_QX_CLK] = &gcc_snoc_pcie_sf_south_qx_clk.clkr,
2555	[GCC_TSC_CFG_AHB_CLK] = &gcc_tsc_cfg_ahb_clk.clkr,
2556	[GCC_TSC_CLK_SRC] = &gcc_tsc_clk_src.clkr,
2557	[GCC_TSC_CNTR_CLK] = &gcc_tsc_cntr_clk.clkr,
2558	[GCC_TSC_ETU_CLK] = &gcc_tsc_etu_clk.clkr,
2559	[GCC_USB2_CLKREF_EN] = &gcc_usb2_clkref_en.clkr,
2560	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2561	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2562	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2563	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2564	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
2565	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2566	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2567	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2568	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2569	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2570	[GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
2571	[GCC_ETH_100G_C2C_HM_APB_CLK] = &gcc_eth_100g_c2c_hm_apb_clk.clkr,
2572	[GCC_ETH_100G_FH_HM_APB_0_CLK] = &gcc_eth_100g_fh_hm_apb_0_clk.clkr,
2573	[GCC_ETH_100G_FH_HM_APB_1_CLK] = &gcc_eth_100g_fh_hm_apb_1_clk.clkr,
2574	[GCC_ETH_100G_FH_HM_APB_2_CLK] = &gcc_eth_100g_fh_hm_apb_2_clk.clkr,
2575	[GCC_ETH_DBG_C2C_HM_APB_CLK] = &gcc_eth_dbg_c2c_hm_apb_clk.clkr,
2576	[GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr,
2577	[GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
2578	[GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
2579	[GCC_GPLL1_OUT_EVEN] = &gcc_gpll1_out_even.clkr,
2580	[GCC_DDRSS_ECPRI_GSI_CLK] = &gcc_ddrss_ecpri_gsi_clk.clkr,
2581};
2582
2583static struct gdsc *gcc_qdu1000_gdscs[] = {
2584	[PCIE_0_GDSC] = &pcie_0_gdsc,
2585	[PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,
2586	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2587};
2588
2589static const struct qcom_reset_map gcc_qdu1000_resets[] = {
2590	[GCC_ECPRI_CC_BCR] = { 0x3e000 },
2591	[GCC_ECPRI_SS_BCR] = { 0x3a000 },
2592	[GCC_ETH_WRAPPER_BCR] = { 0x39000 },
2593	[GCC_PCIE_0_BCR] = { 0x9d000 },
2594	[GCC_PCIE_0_LINK_DOWN_BCR] = { 0x9e014 },
2595	[GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x9e020 },
2596	[GCC_PCIE_0_PHY_BCR] = { 0x7c000 },
2597	[GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
2598	[GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
2599	[GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
2600	[GCC_PDM_BCR] = { 0x43000 },
2601	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
2602	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
2603	[GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
2604	[GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
2605	[GCC_SDCC5_BCR] = { 0x3b000 },
2606	[GCC_TSC_BCR] = { 0x57000 },
2607	[GCC_USB30_PRIM_BCR] = { 0x49000 },
2608	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
2609	[GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
2610	[GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
2611	[GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
2612	[GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
2613	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
2614	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
2615};
2616
2617static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2618	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2619	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2620	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2621	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2622	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2623	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2624	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
2625	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
2626	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2627	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2628	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2629	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2630	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2631	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2632	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
2633	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
2634};
2635
2636static const struct regmap_config gcc_qdu1000_regmap_config = {
2637	.reg_bits = 32,
2638	.reg_stride = 4,
2639	.val_bits = 32,
2640	.max_register = 0x1f41f0,
2641	.fast_io = true,
2642};
2643
2644static const struct qcom_cc_desc gcc_qdu1000_desc = {
2645	.config = &gcc_qdu1000_regmap_config,
2646	.clks = gcc_qdu1000_clocks,
2647	.num_clks = ARRAY_SIZE(gcc_qdu1000_clocks),
2648	.resets = gcc_qdu1000_resets,
2649	.num_resets = ARRAY_SIZE(gcc_qdu1000_resets),
2650	.gdscs = gcc_qdu1000_gdscs,
2651	.num_gdscs = ARRAY_SIZE(gcc_qdu1000_gdscs),
2652};
2653
2654static const struct of_device_id gcc_qdu1000_match_table[] = {
2655	{ .compatible = "qcom,qdu1000-gcc" },
2656	{ }
2657};
2658MODULE_DEVICE_TABLE(of, gcc_qdu1000_match_table);
2659
2660static int gcc_qdu1000_probe(struct platform_device *pdev)
2661{
2662	struct regmap *regmap;
2663	int ret;
2664
2665	regmap = qcom_cc_map(pdev, &gcc_qdu1000_desc);
2666	if (IS_ERR(regmap))
2667		return PTR_ERR(regmap);
2668
2669	/* Update FORCE_MEM_CORE_ON for gcc_pcie_0_mstr_axi_clk */
2670	regmap_update_bits(regmap, 0x9d024, BIT(14), BIT(14));
2671
2672	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2673				       ARRAY_SIZE(gcc_dfs_clocks));
2674	if (ret)
2675		return ret;
2676
2677	ret = qcom_cc_really_probe(&pdev->dev, &gcc_qdu1000_desc, regmap);
2678	if (ret)
2679		return dev_err_probe(&pdev->dev, ret, "Failed to register GCC clocks\n");
2680
2681	return ret;
2682}
2683
2684static struct platform_driver gcc_qdu1000_driver = {
2685	.probe = gcc_qdu1000_probe,
2686	.driver = {
2687		.name = "gcc-qdu1000",
2688		.of_match_table = gcc_qdu1000_match_table,
2689	},
2690};
2691
2692static int __init gcc_qdu1000_init(void)
2693{
2694	return platform_driver_register(&gcc_qdu1000_driver);
2695}
2696subsys_initcall(gcc_qdu1000_init);
2697
2698static void __exit gcc_qdu1000_exit(void)
2699{
2700	platform_driver_unregister(&gcc_qdu1000_driver);
2701}
2702module_exit(gcc_qdu1000_exit);
2703
2704MODULE_DESCRIPTION("QTI GCC QDU1000 Driver");
2705MODULE_LICENSE("GPL");