Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/err.h>
   7#include <linux/kernel.h>
   8#include <linux/module.h>
   9#include <linux/of.h>
  10#include <linux/platform_device.h>
  11#include <linux/clk-provider.h>
  12#include <linux/regmap.h>
  13#include <linux/reset-controller.h>
  14
  15#include <dt-bindings/clock/qcom,gcc-sm6115.h>
  16
  17#include "clk-alpha-pll.h"
  18#include "clk-branch.h"
  19#include "clk-pll.h"
  20#include "clk-rcg.h"
  21#include "clk-regmap.h"
  22#include "clk-regmap-divider.h"
  23#include "common.h"
  24#include "gdsc.h"
  25#include "reset.h"
  26
  27enum {
  28	P_BI_TCXO,
  29	P_GPLL0_OUT_AUX2,
  30	P_GPLL0_OUT_EARLY,
  31	P_GPLL10_OUT_MAIN,
  32	P_GPLL11_OUT_MAIN,
  33	P_GPLL3_OUT_EARLY,
  34	P_GPLL4_OUT_MAIN,
  35	P_GPLL6_OUT_EARLY,
  36	P_GPLL6_OUT_MAIN,
  37	P_GPLL7_OUT_MAIN,
  38	P_GPLL8_OUT_EARLY,
  39	P_GPLL8_OUT_MAIN,
  40	P_GPLL9_OUT_EARLY,
  41	P_GPLL9_OUT_MAIN,
  42	P_SLEEP_CLK,
  43};
  44
  45static struct pll_vco default_vco[] = {
  46	{ 500000000, 1000000000, 2 },
  47};
  48
  49static struct pll_vco gpll9_vco[] = {
  50	{ 500000000, 1250000000, 0 },
  51};
  52
  53static struct pll_vco gpll10_vco[] = {
  54	{ 750000000, 1500000000, 1 },
  55};
  56
  57static struct clk_alpha_pll gpll0 = {
  58	.offset = 0x0,
  59	.vco_table = default_vco,
  60	.num_vco = ARRAY_SIZE(default_vco),
  61	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
  62	.clkr = {
  63		.enable_reg = 0x79000,
  64		.enable_mask = BIT(0),
  65		.hw.init = &(struct clk_init_data){
  66			.name = "gpll0",
  67			.parent_data = &(const struct clk_parent_data){
  68				.fw_name = "bi_tcxo",
  69			},
  70			.num_parents = 1,
  71			.ops = &clk_alpha_pll_ops,
  72		},
  73	},
  74};
  75
  76static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
  77	{ 0x1, 2 },
  78	{ }
  79};
  80
  81static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
  82	.offset = 0x0,
  83	.post_div_shift = 8,
  84	.post_div_table = post_div_table_gpll0_out_aux2,
  85	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
  86	.width = 4,
  87	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
  88	.clkr.hw.init = &(struct clk_init_data){
  89		.name = "gpll0_out_aux2",
  90		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
  91		.num_parents = 1,
  92		.ops = &clk_alpha_pll_postdiv_ro_ops,
  93	},
  94};
  95
  96static const struct clk_div_table post_div_table_gpll0_out_main[] = {
  97	{ 0x0, 1 },
  98	{ }
  99};
 100
 101static struct clk_alpha_pll_postdiv gpll0_out_main = {
 102	.offset = 0x0,
 103	.post_div_shift = 8,
 104	.post_div_table = post_div_table_gpll0_out_main,
 105	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main),
 106	.width = 4,
 107	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 108	.clkr.hw.init = &(struct clk_init_data){
 109		.name = "gpll0_out_main",
 110		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
 111		.num_parents = 1,
 112		.ops = &clk_alpha_pll_postdiv_ro_ops,
 113	},
 114};
 115
 116/* 1152MHz configuration */
 117static const struct alpha_pll_config gpll10_config = {
 118	.l = 0x3c,
 119	.vco_val = 0x1 << 20,
 120	.vco_mask = GENMASK(21, 20),
 121	.main_output_mask = BIT(0),
 122	.config_ctl_val = 0x4001055b,
 123	.test_ctl_hi1_val = 0x1,
 124	.test_ctl_hi_mask = 0x1,
 125};
 126
 127static struct clk_alpha_pll gpll10 = {
 128	.offset = 0xa000,
 129	.vco_table = gpll10_vco,
 130	.num_vco = ARRAY_SIZE(gpll10_vco),
 131	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 132	.clkr = {
 133		.enable_reg = 0x79000,
 134		.enable_mask = BIT(10),
 135		.hw.init = &(struct clk_init_data){
 136			.name = "gpll10",
 137			.parent_data = &(const struct clk_parent_data){
 138				.fw_name = "bi_tcxo",
 139			},
 140			.num_parents = 1,
 141			.ops = &clk_alpha_pll_ops,
 142		},
 143	},
 144};
 145
 146static const struct clk_div_table post_div_table_gpll10_out_main[] = {
 147	{ 0x0, 1 },
 148	{ }
 149};
 150
 151static struct clk_alpha_pll_postdiv gpll10_out_main = {
 152	.offset = 0xa000,
 153	.post_div_shift = 8,
 154	.post_div_table = post_div_table_gpll10_out_main,
 155	.num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main),
 156	.width = 4,
 157	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 158	.clkr.hw.init = &(struct clk_init_data){
 159		.name = "gpll10_out_main",
 160		.parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw },
 161		.num_parents = 1,
 162		.flags = CLK_SET_RATE_PARENT,
 163		.ops = &clk_alpha_pll_postdiv_ops,
 164	},
 165};
 166
 167/* 600MHz configuration */
 168static const struct alpha_pll_config gpll11_config = {
 169	.l = 0x1F,
 170	.alpha = 0x0,
 171	.alpha_hi = 0x40,
 172	.alpha_en_mask = BIT(24),
 173	.vco_val = 0x2 << 20,
 174	.vco_mask = GENMASK(21, 20),
 175	.config_ctl_val = 0x4001055b,
 176	.test_ctl_hi1_val = 0x1,
 177	.test_ctl_hi_mask = 0x1,
 178};
 179
 180static struct clk_alpha_pll gpll11 = {
 181	.offset = 0xb000,
 182	.vco_table = default_vco,
 183	.num_vco = ARRAY_SIZE(default_vco),
 184	.flags = SUPPORTS_DYNAMIC_UPDATE,
 185	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 186	.clkr = {
 187		.enable_reg = 0x79000,
 188		.enable_mask = BIT(11),
 189		.hw.init = &(struct clk_init_data){
 190			.name = "gpll11",
 191			.parent_data = &(const struct clk_parent_data){
 192				.fw_name = "bi_tcxo",
 193			},
 194			.num_parents = 1,
 195			.ops = &clk_alpha_pll_ops,
 196		},
 197	},
 198};
 199
 200static const struct clk_div_table post_div_table_gpll11_out_main[] = {
 201	{ 0x0, 1 },
 202	{ }
 203};
 204
 205static struct clk_alpha_pll_postdiv gpll11_out_main = {
 206	.offset = 0xb000,
 207	.post_div_shift = 8,
 208	.post_div_table = post_div_table_gpll11_out_main,
 209	.num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main),
 210	.width = 4,
 211	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 212	.clkr.hw.init = &(struct clk_init_data){
 213		.name = "gpll11_out_main",
 214		.parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw },
 215		.num_parents = 1,
 216		.flags = CLK_SET_RATE_PARENT,
 217		.ops = &clk_alpha_pll_postdiv_ops,
 218	},
 219};
 220
 221static struct clk_alpha_pll gpll3 = {
 222	.offset = 0x3000,
 223	.vco_table = default_vco,
 224	.num_vco = ARRAY_SIZE(default_vco),
 225	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 226	.clkr = {
 227		.enable_reg = 0x79000,
 228		.enable_mask = BIT(3),
 229		.hw.init = &(struct clk_init_data){
 230			.name = "gpll3",
 231			.parent_data = &(const struct clk_parent_data){
 232				.fw_name = "bi_tcxo",
 233			},
 234			.num_parents = 1,
 235			.ops = &clk_alpha_pll_ops,
 236		},
 237	},
 238};
 239
 240static struct clk_alpha_pll gpll4 = {
 241	.offset = 0x4000,
 242	.vco_table = default_vco,
 243	.num_vco = ARRAY_SIZE(default_vco),
 244	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 245	.clkr = {
 246		.enable_reg = 0x79000,
 247		.enable_mask = BIT(4),
 248		.hw.init = &(struct clk_init_data){
 249			.name = "gpll4",
 250			.parent_data = &(const struct clk_parent_data){
 251				.fw_name = "bi_tcxo",
 252			},
 253			.num_parents = 1,
 254			.ops = &clk_alpha_pll_ops,
 255		},
 256	},
 257};
 258
 259static const struct clk_div_table post_div_table_gpll4_out_main[] = {
 260	{ 0x0, 1 },
 261	{ }
 262};
 263
 264static struct clk_alpha_pll_postdiv gpll4_out_main = {
 265	.offset = 0x4000,
 266	.post_div_shift = 8,
 267	.post_div_table = post_div_table_gpll4_out_main,
 268	.num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main),
 269	.width = 4,
 270	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 271	.clkr.hw.init = &(struct clk_init_data){
 272		.name = "gpll4_out_main",
 273		.parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw },
 274		.num_parents = 1,
 275		.ops = &clk_alpha_pll_postdiv_ro_ops,
 276	},
 277};
 278
 279static struct clk_alpha_pll gpll6 = {
 280	.offset = 0x6000,
 281	.vco_table = default_vco,
 282	.num_vco = ARRAY_SIZE(default_vco),
 283	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 284	.clkr = {
 285		.enable_reg = 0x79000,
 286		.enable_mask = BIT(6),
 287		.hw.init = &(struct clk_init_data){
 288			.name = "gpll6",
 289			.parent_data = &(const struct clk_parent_data){
 290				.fw_name = "bi_tcxo",
 291			},
 292			.num_parents = 1,
 293			.ops = &clk_alpha_pll_ops,
 294		},
 295	},
 296};
 297
 298static const struct clk_div_table post_div_table_gpll6_out_main[] = {
 299	{ 0x1, 2 },
 300	{ }
 301};
 302
 303static struct clk_alpha_pll_postdiv gpll6_out_main = {
 304	.offset = 0x6000,
 305	.post_div_shift = 8,
 306	.post_div_table = post_div_table_gpll6_out_main,
 307	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
 308	.width = 4,
 309	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 310	.clkr.hw.init = &(struct clk_init_data){
 311		.name = "gpll6_out_main",
 312		.parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },
 313		.num_parents = 1,
 314		.ops = &clk_alpha_pll_postdiv_ro_ops,
 315	},
 316};
 317
 318static struct clk_alpha_pll gpll7 = {
 319	.offset = 0x7000,
 320	.vco_table = default_vco,
 321	.num_vco = ARRAY_SIZE(default_vco),
 322	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 323	.clkr = {
 324		.enable_reg = 0x79000,
 325		.enable_mask = BIT(7),
 326		.hw.init = &(struct clk_init_data){
 327			.name = "gpll7",
 328			.parent_data = &(const struct clk_parent_data){
 329				.fw_name = "bi_tcxo",
 330			},
 331			.num_parents = 1,
 332			.ops = &clk_alpha_pll_ops,
 333		},
 334	},
 335};
 336
 337static const struct clk_div_table post_div_table_gpll7_out_main[] = {
 338	{ 0x0, 1 },
 339	{ }
 340};
 341
 342static struct clk_alpha_pll_postdiv gpll7_out_main = {
 343	.offset = 0x7000,
 344	.post_div_shift = 8,
 345	.post_div_table = post_div_table_gpll7_out_main,
 346	.num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main),
 347	.width = 4,
 348	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 349	.clkr.hw.init = &(struct clk_init_data){
 350		.name = "gpll7_out_main",
 351		.parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw },
 352		.num_parents = 1,
 353		.ops = &clk_alpha_pll_postdiv_ro_ops,
 354	},
 355};
 356
 357/* 800MHz configuration */
 358static const struct alpha_pll_config gpll8_config = {
 359	.l = 0x29,
 360	.alpha = 0xAAAAAAAA,
 361	.alpha_hi = 0xAA,
 362	.alpha_en_mask = BIT(24),
 363	.vco_val = 0x2 << 20,
 364	.vco_mask = GENMASK(21, 20),
 365	.main_output_mask = BIT(0),
 366	.early_output_mask = BIT(3),
 367	.post_div_val = 0x1 << 8,
 368	.post_div_mask = GENMASK(11, 8),
 369	.config_ctl_val = 0x4001055b,
 370	.test_ctl_hi1_val = 0x1,
 371	.test_ctl_hi_mask = 0x1,
 372};
 373
 374static struct clk_alpha_pll gpll8 = {
 375	.offset = 0x8000,
 376	.vco_table = default_vco,
 377	.num_vco = ARRAY_SIZE(default_vco),
 378	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 379	.flags = SUPPORTS_DYNAMIC_UPDATE,
 380	.clkr = {
 381		.enable_reg = 0x79000,
 382		.enable_mask = BIT(8),
 383		.hw.init = &(struct clk_init_data){
 384			.name = "gpll8",
 385			.parent_data = &(const struct clk_parent_data){
 386				.fw_name = "bi_tcxo",
 387			},
 388			.num_parents = 1,
 389			.ops = &clk_alpha_pll_ops,
 390		},
 391	},
 392};
 393
 394static const struct clk_div_table post_div_table_gpll8_out_main[] = {
 395	{ 0x1, 2 },
 396	{ }
 397};
 398
 399static struct clk_alpha_pll_postdiv gpll8_out_main = {
 400	.offset = 0x8000,
 401	.post_div_shift = 8,
 402	.post_div_table = post_div_table_gpll8_out_main,
 403	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
 404	.width = 4,
 405	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
 406	.clkr.hw.init = &(struct clk_init_data){
 407		.name = "gpll8_out_main",
 408		.parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },
 409		.num_parents = 1,
 410		.flags = CLK_SET_RATE_PARENT,
 411		.ops = &clk_alpha_pll_postdiv_ro_ops,
 412	},
 413};
 414
 415/* 1152MHz configuration */
 416static const struct alpha_pll_config gpll9_config = {
 417	.l = 0x3C,
 418	.alpha = 0x0,
 419	.post_div_val = 0x1 << 8,
 420	.post_div_mask = GENMASK(9, 8),
 421	.main_output_mask = BIT(0),
 422	.config_ctl_val = 0x00004289,
 423	.test_ctl_mask = GENMASK(31, 0),
 424	.test_ctl_val = 0x08000000,
 425};
 426
 427static struct clk_alpha_pll gpll9 = {
 428	.offset = 0x9000,
 429	.vco_table = gpll9_vco,
 430	.num_vco = ARRAY_SIZE(gpll9_vco),
 431	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
 432	.clkr = {
 433		.enable_reg = 0x79000,
 434		.enable_mask = BIT(9),
 435		.hw.init = &(struct clk_init_data){
 436			.name = "gpll9",
 437			.parent_data = &(const struct clk_parent_data){
 438				.fw_name = "bi_tcxo",
 439			},
 440			.num_parents = 1,
 441			.ops = &clk_alpha_pll_ops,
 442		},
 443	},
 444};
 445
 446static const struct clk_div_table post_div_table_gpll9_out_main[] = {
 447	{ 0x1, 2 },
 448	{ }
 449};
 450
 451static struct clk_alpha_pll_postdiv gpll9_out_main = {
 452	.offset = 0x9000,
 453	.post_div_shift = 8,
 454	.post_div_table = post_div_table_gpll9_out_main,
 455	.num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
 456	.width = 2,
 457	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
 458	.clkr.hw.init = &(struct clk_init_data){
 459		.name = "gpll9_out_main",
 460		.parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },
 461		.num_parents = 1,
 462		.flags = CLK_SET_RATE_PARENT,
 463		.ops = &clk_alpha_pll_postdiv_ops,
 464	},
 465};
 466
 467static const struct parent_map gcc_parent_map_0[] = {
 468	{ P_BI_TCXO, 0 },
 469	{ P_GPLL0_OUT_EARLY, 1 },
 470	{ P_GPLL0_OUT_AUX2, 2 },
 471};
 472
 473static const struct clk_parent_data gcc_parents_0[] = {
 474	{ .fw_name = "bi_tcxo" },
 475	{ .hw = &gpll0.clkr.hw },
 476	{ .hw = &gpll0_out_aux2.clkr.hw },
 477};
 478
 479static const struct parent_map gcc_parent_map_1[] = {
 480	{ P_BI_TCXO, 0 },
 481	{ P_GPLL0_OUT_EARLY, 1 },
 482	{ P_GPLL0_OUT_AUX2, 2 },
 483	{ P_GPLL6_OUT_MAIN, 4 },
 484};
 485
 486static const struct clk_parent_data gcc_parents_1[] = {
 487	{ .fw_name = "bi_tcxo" },
 488	{ .hw = &gpll0.clkr.hw },
 489	{ .hw = &gpll0_out_aux2.clkr.hw },
 490	{ .hw = &gpll6_out_main.clkr.hw },
 491};
 492
 493static const struct parent_map gcc_parent_map_2[] = {
 494	{ P_BI_TCXO, 0 },
 495	{ P_GPLL0_OUT_EARLY, 1 },
 496	{ P_GPLL0_OUT_AUX2, 2 },
 497	{ P_SLEEP_CLK, 5 },
 498};
 499
 500static const struct clk_parent_data gcc_parents_2[] = {
 501	{ .fw_name = "bi_tcxo" },
 502	{ .hw = &gpll0.clkr.hw },
 503	{ .hw = &gpll0_out_aux2.clkr.hw },
 504	{ .fw_name = "sleep_clk" },
 505};
 506
 507static const struct parent_map gcc_parent_map_3[] = {
 508	{ P_BI_TCXO, 0 },
 509	{ P_GPLL0_OUT_EARLY, 1 },
 510	{ P_GPLL9_OUT_EARLY, 2 },
 511	{ P_GPLL10_OUT_MAIN, 3 },
 512	{ P_GPLL9_OUT_MAIN, 5 },
 513};
 514
 515static const struct clk_parent_data gcc_parents_3[] = {
 516	{ .fw_name = "bi_tcxo" },
 517	{ .hw = &gpll0.clkr.hw },
 518	{ .hw = &gpll9.clkr.hw },
 519	{ .hw = &gpll10_out_main.clkr.hw },
 520	{ .hw = &gpll9_out_main.clkr.hw },
 521};
 522
 523static const struct parent_map gcc_parent_map_4[] = {
 524	{ P_BI_TCXO, 0 },
 525	{ P_GPLL0_OUT_EARLY, 1 },
 526	{ P_GPLL0_OUT_AUX2, 2 },
 527	{ P_GPLL4_OUT_MAIN, 5 },
 528};
 529
 530static const struct clk_parent_data gcc_parents_4[] = {
 531	{ .fw_name = "bi_tcxo" },
 532	{ .hw = &gpll0.clkr.hw },
 533	{ .hw = &gpll0_out_aux2.clkr.hw },
 534	{ .hw = &gpll4_out_main.clkr.hw },
 535};
 536
 537static const struct parent_map gcc_parent_map_5[] = {
 538	{ P_BI_TCXO, 0 },
 539	{ P_GPLL0_OUT_EARLY, 1 },
 540	{ P_GPLL8_OUT_EARLY, 2 },
 541	{ P_GPLL10_OUT_MAIN, 3 },
 542	{ P_GPLL8_OUT_MAIN, 4 },
 543	{ P_GPLL9_OUT_MAIN, 5 },
 544};
 545
 546static const struct clk_parent_data gcc_parents_5[] = {
 547	{ .fw_name = "bi_tcxo" },
 548	{ .hw = &gpll0.clkr.hw },
 549	{ .hw = &gpll8.clkr.hw },
 550	{ .hw = &gpll10_out_main.clkr.hw },
 551	{ .hw = &gpll8_out_main.clkr.hw },
 552	{ .hw = &gpll9_out_main.clkr.hw },
 553};
 554
 555static const struct parent_map gcc_parent_map_6[] = {
 556	{ P_BI_TCXO, 0 },
 557	{ P_GPLL0_OUT_EARLY, 1 },
 558	{ P_GPLL8_OUT_EARLY, 2 },
 559	{ P_GPLL10_OUT_MAIN, 3 },
 560	{ P_GPLL6_OUT_MAIN, 4 },
 561	{ P_GPLL9_OUT_MAIN, 5 },
 562	{ P_GPLL3_OUT_EARLY, 6 },
 563};
 564
 565static const struct clk_parent_data gcc_parents_6[] = {
 566	{ .fw_name = "bi_tcxo" },
 567	{ .hw = &gpll0.clkr.hw },
 568	{ .hw = &gpll8.clkr.hw },
 569	{ .hw = &gpll10_out_main.clkr.hw },
 570	{ .hw = &gpll6_out_main.clkr.hw },
 571	{ .hw = &gpll9_out_main.clkr.hw },
 572	{ .hw = &gpll3.clkr.hw },
 573};
 574
 575static const struct parent_map gcc_parent_map_7[] = {
 576	{ P_BI_TCXO, 0 },
 577	{ P_GPLL0_OUT_EARLY, 1 },
 578	{ P_GPLL0_OUT_AUX2, 2 },
 579	{ P_GPLL10_OUT_MAIN, 3 },
 580	{ P_GPLL4_OUT_MAIN, 5 },
 581	{ P_GPLL3_OUT_EARLY, 6 },
 582};
 583
 584static const struct clk_parent_data gcc_parents_7[] = {
 585	{ .fw_name = "bi_tcxo" },
 586	{ .hw = &gpll0.clkr.hw },
 587	{ .hw = &gpll0_out_aux2.clkr.hw },
 588	{ .hw = &gpll10_out_main.clkr.hw },
 589	{ .hw = &gpll4_out_main.clkr.hw },
 590	{ .hw = &gpll3.clkr.hw },
 591};
 592
 593static const struct parent_map gcc_parent_map_8[] = {
 594	{ P_BI_TCXO, 0 },
 595	{ P_GPLL0_OUT_EARLY, 1 },
 596	{ P_GPLL8_OUT_EARLY, 2 },
 597	{ P_GPLL10_OUT_MAIN, 3 },
 598	{ P_GPLL8_OUT_MAIN, 4 },
 599	{ P_GPLL9_OUT_MAIN, 5 },
 600	{ P_GPLL3_OUT_EARLY, 6 },
 601};
 602
 603static const struct clk_parent_data gcc_parents_8[] = {
 604	{ .fw_name = "bi_tcxo" },
 605	{ .hw = &gpll0.clkr.hw },
 606	{ .hw = &gpll8.clkr.hw },
 607	{ .hw = &gpll10_out_main.clkr.hw },
 608	{ .hw = &gpll8_out_main.clkr.hw },
 609	{ .hw = &gpll9_out_main.clkr.hw },
 610	{ .hw = &gpll3.clkr.hw },
 611};
 612
 613static const struct parent_map gcc_parent_map_9[] = {
 614	{ P_BI_TCXO, 0 },
 615	{ P_GPLL0_OUT_EARLY, 1 },
 616	{ P_GPLL0_OUT_AUX2, 2 },
 617	{ P_GPLL10_OUT_MAIN, 3 },
 618	{ P_GPLL8_OUT_MAIN, 4 },
 619	{ P_GPLL9_OUT_MAIN, 5 },
 620	{ P_GPLL3_OUT_EARLY, 6 },
 621};
 622
 623static const struct clk_parent_data gcc_parents_9[] = {
 624	{ .fw_name = "bi_tcxo" },
 625	{ .hw = &gpll0.clkr.hw },
 626	{ .hw = &gpll0_out_aux2.clkr.hw },
 627	{ .hw = &gpll10_out_main.clkr.hw },
 628	{ .hw = &gpll8_out_main.clkr.hw },
 629	{ .hw = &gpll9_out_main.clkr.hw },
 630	{ .hw = &gpll3.clkr.hw },
 631};
 632
 633static const struct parent_map gcc_parent_map_10[] = {
 634	{ P_BI_TCXO, 0 },
 635	{ P_GPLL0_OUT_EARLY, 1 },
 636	{ P_GPLL8_OUT_EARLY, 2 },
 637	{ P_GPLL10_OUT_MAIN, 3 },
 638	{ P_GPLL6_OUT_EARLY, 4 },
 639	{ P_GPLL9_OUT_MAIN, 5 },
 640};
 641
 642static const struct clk_parent_data gcc_parents_10[] = {
 643	{ .fw_name = "bi_tcxo" },
 644	{ .hw = &gpll0.clkr.hw },
 645	{ .hw = &gpll8.clkr.hw },
 646	{ .hw = &gpll10_out_main.clkr.hw },
 647	{ .hw = &gpll6.clkr.hw },
 648	{ .hw = &gpll9_out_main.clkr.hw },
 649};
 650
 651static const struct parent_map gcc_parent_map_11[] = {
 652	{ P_BI_TCXO, 0 },
 653	{ P_GPLL0_OUT_EARLY, 1 },
 654	{ P_GPLL0_OUT_AUX2, 2 },
 655	{ P_GPLL7_OUT_MAIN, 3 },
 656	{ P_GPLL4_OUT_MAIN, 5 },
 657};
 658
 659static const struct clk_parent_data gcc_parents_11[] = {
 660	{ .fw_name = "bi_tcxo" },
 661	{ .hw = &gpll0.clkr.hw },
 662	{ .hw = &gpll0_out_aux2.clkr.hw },
 663	{ .hw = &gpll7_out_main.clkr.hw },
 664	{ .hw = &gpll4_out_main.clkr.hw },
 665};
 666
 667static const struct parent_map gcc_parent_map_12[] = {
 668	{ P_BI_TCXO, 0 },
 669	{ P_SLEEP_CLK, 5 },
 670};
 671
 672static const struct clk_parent_data gcc_parents_12[] = {
 673	{ .fw_name = "bi_tcxo" },
 674	{ .fw_name = "sleep_clk" },
 675};
 676
 677static const struct parent_map gcc_parent_map_13[] = {
 678	{ P_BI_TCXO, 0 },
 679	{ P_GPLL11_OUT_MAIN, 1 },
 680};
 681
 682static const struct clk_parent_data gcc_parents_13[] = {
 683	{ .fw_name = "bi_tcxo" },
 684	{ .hw = &gpll11_out_main.clkr.hw },
 685};
 686
 687static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
 688	F(19200000, P_BI_TCXO, 1, 0, 0),
 689	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
 690	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
 691	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
 692	{ }
 693};
 694
 695static struct clk_rcg2 gcc_camss_axi_clk_src = {
 696	.cmd_rcgr = 0x5802c,
 697	.mnd_width = 0,
 698	.hid_width = 5,
 699	.parent_map = gcc_parent_map_7,
 700	.freq_tbl = ftbl_gcc_camss_axi_clk_src,
 701	.clkr.hw.init = &(struct clk_init_data){
 702		.name = "gcc_camss_axi_clk_src",
 703		.parent_data = gcc_parents_7,
 704		.num_parents = ARRAY_SIZE(gcc_parents_7),
 705		.flags = CLK_SET_RATE_PARENT,
 706		.ops = &clk_rcg2_shared_ops,
 707	},
 708};
 709
 710static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
 711	F(19200000, P_BI_TCXO, 1, 0, 0),
 712	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
 713	{ }
 714};
 715
 716static struct clk_rcg2 gcc_camss_cci_clk_src = {
 717	.cmd_rcgr = 0x56000,
 718	.mnd_width = 0,
 719	.hid_width = 5,
 720	.parent_map = gcc_parent_map_9,
 721	.freq_tbl = ftbl_gcc_camss_cci_clk_src,
 722	.clkr.hw.init = &(struct clk_init_data){
 723		.name = "gcc_camss_cci_clk_src",
 724		.parent_data = gcc_parents_9,
 725		.num_parents = ARRAY_SIZE(gcc_parents_9),
 726		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 727		.ops = &clk_rcg2_shared_ops,
 728	},
 729};
 730
 731static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
 732	F(19200000, P_BI_TCXO, 1, 0, 0),
 733	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
 734	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
 735	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
 736	{ }
 737};
 738
 739static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
 740	.cmd_rcgr = 0x59000,
 741	.mnd_width = 0,
 742	.hid_width = 5,
 743	.parent_map = gcc_parent_map_4,
 744	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
 745	.clkr.hw.init = &(struct clk_init_data){
 746		.name = "gcc_camss_csi0phytimer_clk_src",
 747		.parent_data = gcc_parents_4,
 748		.num_parents = ARRAY_SIZE(gcc_parents_4),
 749		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 750		.ops = &clk_rcg2_shared_ops,
 751	},
 752};
 753
 754static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
 755	.cmd_rcgr = 0x5901c,
 756	.mnd_width = 0,
 757	.hid_width = 5,
 758	.parent_map = gcc_parent_map_4,
 759	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
 760	.clkr.hw.init = &(struct clk_init_data){
 761		.name = "gcc_camss_csi1phytimer_clk_src",
 762		.parent_data = gcc_parents_4,
 763		.num_parents = ARRAY_SIZE(gcc_parents_4),
 764		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 765		.ops = &clk_rcg2_shared_ops,
 766	},
 767};
 768
 769static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
 770	.cmd_rcgr = 0x59038,
 771	.mnd_width = 0,
 772	.hid_width = 5,
 773	.parent_map = gcc_parent_map_4,
 774	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
 775	.clkr.hw.init = &(struct clk_init_data){
 776		.name = "gcc_camss_csi2phytimer_clk_src",
 777		.parent_data = gcc_parents_4,
 778		.num_parents = ARRAY_SIZE(gcc_parents_4),
 779		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 780		.ops = &clk_rcg2_shared_ops,
 781	},
 782};
 783
 784static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
 785	F(19200000, P_BI_TCXO, 1, 0, 0),
 786	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
 787	F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),
 788	{ }
 789};
 790
 791static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
 792	.cmd_rcgr = 0x51000,
 793	.mnd_width = 8,
 794	.hid_width = 5,
 795	.parent_map = gcc_parent_map_3,
 796	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
 797	.clkr.hw.init = &(struct clk_init_data){
 798		.name = "gcc_camss_mclk0_clk_src",
 799		.parent_data = gcc_parents_3,
 800		.num_parents = ARRAY_SIZE(gcc_parents_3),
 801		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 802		.ops = &clk_rcg2_shared_ops,
 803	},
 804};
 805
 806static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
 807	.cmd_rcgr = 0x5101c,
 808	.mnd_width = 8,
 809	.hid_width = 5,
 810	.parent_map = gcc_parent_map_3,
 811	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
 812	.clkr.hw.init = &(struct clk_init_data){
 813		.name = "gcc_camss_mclk1_clk_src",
 814		.parent_data = gcc_parents_3,
 815		.num_parents = ARRAY_SIZE(gcc_parents_3),
 816		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 817		.ops = &clk_rcg2_shared_ops,
 818	},
 819};
 820
 821static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
 822	.cmd_rcgr = 0x51038,
 823	.mnd_width = 8,
 824	.hid_width = 5,
 825	.parent_map = gcc_parent_map_3,
 826	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
 827	.clkr.hw.init = &(struct clk_init_data){
 828		.name = "gcc_camss_mclk2_clk_src",
 829		.parent_data = gcc_parents_3,
 830		.num_parents = ARRAY_SIZE(gcc_parents_3),
 831		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 832		.ops = &clk_rcg2_shared_ops,
 833	},
 834};
 835
 836static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
 837	.cmd_rcgr = 0x51054,
 838	.mnd_width = 8,
 839	.hid_width = 5,
 840	.parent_map = gcc_parent_map_3,
 841	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
 842	.clkr.hw.init = &(struct clk_init_data){
 843		.name = "gcc_camss_mclk3_clk_src",
 844		.parent_data = gcc_parents_3,
 845		.num_parents = ARRAY_SIZE(gcc_parents_3),
 846		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 847		.ops = &clk_rcg2_shared_ops,
 848	},
 849};
 850
 851static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
 852	F(19200000, P_BI_TCXO, 1, 0, 0),
 853	F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
 854	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
 855	{ }
 856};
 857
 858static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
 859	.cmd_rcgr = 0x55024,
 860	.mnd_width = 0,
 861	.hid_width = 5,
 862	.parent_map = gcc_parent_map_8,
 863	.freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
 864	.clkr.hw.init = &(struct clk_init_data){
 865		.name = "gcc_camss_ope_ahb_clk_src",
 866		.parent_data = gcc_parents_8,
 867		.num_parents = ARRAY_SIZE(gcc_parents_8),
 868		.flags = CLK_SET_RATE_PARENT,
 869		.ops = &clk_rcg2_shared_ops,
 870	},
 871};
 872
 873static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
 874	F(19200000, P_BI_TCXO, 1, 0, 0),
 875	F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
 876	F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
 877	F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
 878	F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
 879	{ }
 880};
 881
 882static struct clk_rcg2 gcc_camss_ope_clk_src = {
 883	.cmd_rcgr = 0x55004,
 884	.mnd_width = 0,
 885	.hid_width = 5,
 886	.parent_map = gcc_parent_map_8,
 887	.freq_tbl = ftbl_gcc_camss_ope_clk_src,
 888	.clkr.hw.init = &(struct clk_init_data){
 889		.name = "gcc_camss_ope_clk_src",
 890		.parent_data = gcc_parents_8,
 891		.num_parents = ARRAY_SIZE(gcc_parents_8),
 892		.flags = CLK_SET_RATE_PARENT,
 893		.ops = &clk_rcg2_shared_ops,
 894	},
 895};
 896
 897static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
 898	F(19200000, P_BI_TCXO, 1, 0, 0),
 899	F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
 900	F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
 901	F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
 902	F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
 903	F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
 904	F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
 905	F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
 906	F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
 907	F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
 908	F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
 909	F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
 910	F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
 911	F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
 912	F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
 913	F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
 914	{ }
 915};
 916
 917static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
 918	.cmd_rcgr = 0x52004,
 919	.mnd_width = 8,
 920	.hid_width = 5,
 921	.parent_map = gcc_parent_map_5,
 922	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
 923	.clkr.hw.init = &(struct clk_init_data){
 924		.name = "gcc_camss_tfe_0_clk_src",
 925		.parent_data = gcc_parents_5,
 926		.num_parents = ARRAY_SIZE(gcc_parents_5),
 927		.flags = CLK_SET_RATE_PARENT,
 928		.ops = &clk_rcg2_shared_ops,
 929	},
 930};
 931
 932static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
 933	F(19200000, P_BI_TCXO, 1, 0, 0),
 934	F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
 935	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
 936	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
 937	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
 938	F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
 939	{ }
 940};
 941
 942static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
 943	.cmd_rcgr = 0x52094,
 944	.mnd_width = 0,
 945	.hid_width = 5,
 946	.parent_map = gcc_parent_map_6,
 947	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
 948	.clkr.hw.init = &(struct clk_init_data){
 949		.name = "gcc_camss_tfe_0_csid_clk_src",
 950		.parent_data = gcc_parents_6,
 951		.num_parents = ARRAY_SIZE(gcc_parents_6),
 952		.flags = CLK_SET_RATE_PARENT,
 953		.ops = &clk_rcg2_shared_ops,
 954	},
 955};
 956
 957static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
 958	.cmd_rcgr = 0x52024,
 959	.mnd_width = 8,
 960	.hid_width = 5,
 961	.parent_map = gcc_parent_map_5,
 962	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
 963	.clkr.hw.init = &(struct clk_init_data){
 964		.name = "gcc_camss_tfe_1_clk_src",
 965		.parent_data = gcc_parents_5,
 966		.num_parents = ARRAY_SIZE(gcc_parents_5),
 967		.flags = CLK_SET_RATE_PARENT,
 968		.ops = &clk_rcg2_shared_ops,
 969	},
 970};
 971
 972static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
 973	.cmd_rcgr = 0x520b4,
 974	.mnd_width = 0,
 975	.hid_width = 5,
 976	.parent_map = gcc_parent_map_6,
 977	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
 978	.clkr.hw.init = &(struct clk_init_data){
 979		.name = "gcc_camss_tfe_1_csid_clk_src",
 980		.parent_data = gcc_parents_6,
 981		.num_parents = ARRAY_SIZE(gcc_parents_6),
 982		.flags = CLK_SET_RATE_PARENT,
 983		.ops = &clk_rcg2_shared_ops,
 984	},
 985};
 986
 987static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {
 988	.cmd_rcgr = 0x52044,
 989	.mnd_width = 8,
 990	.hid_width = 5,
 991	.parent_map = gcc_parent_map_5,
 992	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
 993	.clkr.hw.init = &(struct clk_init_data){
 994		.name = "gcc_camss_tfe_2_clk_src",
 995		.parent_data = gcc_parents_5,
 996		.num_parents = ARRAY_SIZE(gcc_parents_5),
 997		.flags = CLK_SET_RATE_PARENT,
 998		.ops = &clk_rcg2_shared_ops,
 999	},
1000};
1001
1002static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {
1003	.cmd_rcgr = 0x520d4,
1004	.mnd_width = 0,
1005	.hid_width = 5,
1006	.parent_map = gcc_parent_map_6,
1007	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1008	.clkr.hw.init = &(struct clk_init_data){
1009		.name = "gcc_camss_tfe_2_csid_clk_src",
1010		.parent_data = gcc_parents_6,
1011		.num_parents = ARRAY_SIZE(gcc_parents_6),
1012		.flags = CLK_SET_RATE_PARENT,
1013		.ops = &clk_rcg2_shared_ops,
1014	},
1015};
1016
1017static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
1018	F(19200000, P_BI_TCXO, 1, 0, 0),
1019	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1020	F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
1021	F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
1022	{ }
1023};
1024
1025static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
1026	.cmd_rcgr = 0x52064,
1027	.mnd_width = 16,
1028	.hid_width = 5,
1029	.parent_map = gcc_parent_map_10,
1030	.freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
1031	.clkr.hw.init = &(struct clk_init_data){
1032		.name = "gcc_camss_tfe_cphy_rx_clk_src",
1033		.parent_data = gcc_parents_10,
1034		.num_parents = ARRAY_SIZE(gcc_parents_10),
1035		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
1036		.ops = &clk_rcg2_shared_ops,
1037	},
1038};
1039
1040static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
1041	F(19200000, P_BI_TCXO, 1, 0, 0),
1042	F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1043	F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
1044	{ }
1045};
1046
1047static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1048	.cmd_rcgr = 0x58010,
1049	.mnd_width = 0,
1050	.hid_width = 5,
1051	.parent_map = gcc_parent_map_7,
1052	.freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1053	.clkr.hw.init = &(struct clk_init_data){
1054		.name = "gcc_camss_top_ahb_clk_src",
1055		.parent_data = gcc_parents_7,
1056		.num_parents = ARRAY_SIZE(gcc_parents_7),
1057		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
1058		.ops = &clk_rcg2_shared_ops,
1059	},
1060};
1061
1062static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1063	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1064	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1065	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1066	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1067	{ }
1068};
1069
1070static struct clk_rcg2 gcc_gp1_clk_src = {
1071	.cmd_rcgr = 0x4d004,
1072	.mnd_width = 8,
1073	.hid_width = 5,
1074	.parent_map = gcc_parent_map_2,
1075	.freq_tbl = ftbl_gcc_gp1_clk_src,
1076	.clkr.hw.init = &(struct clk_init_data){
1077		.name = "gcc_gp1_clk_src",
1078		.parent_data = gcc_parents_2,
1079		.num_parents = ARRAY_SIZE(gcc_parents_2),
1080		.ops = &clk_rcg2_ops,
1081	},
1082};
1083
1084static struct clk_rcg2 gcc_gp2_clk_src = {
1085	.cmd_rcgr = 0x4e004,
1086	.mnd_width = 8,
1087	.hid_width = 5,
1088	.parent_map = gcc_parent_map_2,
1089	.freq_tbl = ftbl_gcc_gp1_clk_src,
1090	.clkr.hw.init = &(struct clk_init_data){
1091		.name = "gcc_gp2_clk_src",
1092		.parent_data = gcc_parents_2,
1093		.num_parents = ARRAY_SIZE(gcc_parents_2),
1094		.ops = &clk_rcg2_ops,
1095	},
1096};
1097
1098static struct clk_rcg2 gcc_gp3_clk_src = {
1099	.cmd_rcgr = 0x4f004,
1100	.mnd_width = 8,
1101	.hid_width = 5,
1102	.parent_map = gcc_parent_map_2,
1103	.freq_tbl = ftbl_gcc_gp1_clk_src,
1104	.clkr.hw.init = &(struct clk_init_data){
1105		.name = "gcc_gp3_clk_src",
1106		.parent_data = gcc_parents_2,
1107		.num_parents = ARRAY_SIZE(gcc_parents_2),
1108		.ops = &clk_rcg2_ops,
1109	},
1110};
1111
1112static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1113	F(19200000, P_BI_TCXO, 1, 0, 0),
1114	F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1115	{ }
1116};
1117
1118static struct clk_rcg2 gcc_pdm2_clk_src = {
1119	.cmd_rcgr = 0x20010,
1120	.mnd_width = 0,
1121	.hid_width = 5,
1122	.parent_map = gcc_parent_map_0,
1123	.freq_tbl = ftbl_gcc_pdm2_clk_src,
1124	.clkr.hw.init = &(struct clk_init_data){
1125		.name = "gcc_pdm2_clk_src",
1126		.parent_data = gcc_parents_0,
1127		.num_parents = ARRAY_SIZE(gcc_parents_0),
1128		.ops = &clk_rcg2_shared_ops,
1129	},
1130};
1131
1132static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1133	F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1134	F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1135	F(19200000, P_BI_TCXO, 1, 0, 0),
1136	F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1137	F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1138	F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1139	F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1140	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1141	F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1142	F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1143	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1144	F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1145	F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1146	F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1147	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1148	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1149	{ }
1150};
1151
1152static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1153	.name = "gcc_qupv3_wrap0_s0_clk_src",
1154	.parent_data = gcc_parents_1,
1155	.num_parents = ARRAY_SIZE(gcc_parents_1),
1156	.ops = &clk_rcg2_ops,
1157};
1158
1159static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1160	.cmd_rcgr = 0x1f148,
1161	.mnd_width = 16,
1162	.hid_width = 5,
1163	.parent_map = gcc_parent_map_1,
1164	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1165	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1166};
1167
1168static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1169	.name = "gcc_qupv3_wrap0_s1_clk_src",
1170	.parent_data = gcc_parents_1,
1171	.num_parents = ARRAY_SIZE(gcc_parents_1),
1172	.ops = &clk_rcg2_ops,
1173};
1174
1175static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1176	.cmd_rcgr = 0x1f278,
1177	.mnd_width = 16,
1178	.hid_width = 5,
1179	.parent_map = gcc_parent_map_1,
1180	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1181	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1182};
1183
1184static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1185	.name = "gcc_qupv3_wrap0_s2_clk_src",
1186	.parent_data = gcc_parents_1,
1187	.num_parents = ARRAY_SIZE(gcc_parents_1),
1188	.ops = &clk_rcg2_ops,
1189};
1190
1191static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1192	.cmd_rcgr = 0x1f3a8,
1193	.mnd_width = 16,
1194	.hid_width = 5,
1195	.parent_map = gcc_parent_map_1,
1196	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1197	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1198};
1199
1200static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1201	.name = "gcc_qupv3_wrap0_s3_clk_src",
1202	.parent_data = gcc_parents_1,
1203	.num_parents = ARRAY_SIZE(gcc_parents_1),
1204	.ops = &clk_rcg2_ops,
1205};
1206
1207static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1208	.cmd_rcgr = 0x1f4d8,
1209	.mnd_width = 16,
1210	.hid_width = 5,
1211	.parent_map = gcc_parent_map_1,
1212	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1213	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1214};
1215
1216static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1217	.name = "gcc_qupv3_wrap0_s4_clk_src",
1218	.parent_data = gcc_parents_1,
1219	.num_parents = ARRAY_SIZE(gcc_parents_1),
1220	.ops = &clk_rcg2_ops,
1221};
1222
1223static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1224	.cmd_rcgr = 0x1f608,
1225	.mnd_width = 16,
1226	.hid_width = 5,
1227	.parent_map = gcc_parent_map_1,
1228	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1229	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1230};
1231
1232static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1233	.name = "gcc_qupv3_wrap0_s5_clk_src",
1234	.parent_data = gcc_parents_1,
1235	.num_parents = ARRAY_SIZE(gcc_parents_1),
1236	.ops = &clk_rcg2_ops,
1237};
1238
1239static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1240	.cmd_rcgr = 0x1f738,
1241	.mnd_width = 16,
1242	.hid_width = 5,
1243	.parent_map = gcc_parent_map_1,
1244	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1245	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1246};
1247
1248static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1249	F(144000, P_BI_TCXO, 16, 3, 25),
1250	F(400000, P_BI_TCXO, 12, 1, 4),
1251	F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1252	F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1253	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1254	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1255	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1256	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1257	{ }
1258};
1259
1260static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1261	.cmd_rcgr = 0x38028,
1262	.mnd_width = 8,
1263	.hid_width = 5,
1264	.parent_map = gcc_parent_map_1,
1265	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1266	.clkr.hw.init = &(struct clk_init_data){
1267		.name = "gcc_sdcc1_apps_clk_src",
1268		.parent_data = gcc_parents_1,
1269		.num_parents = ARRAY_SIZE(gcc_parents_1),
1270		.ops = &clk_rcg2_floor_ops,
1271	},
1272};
1273
1274static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1275	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1276	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1277	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1278	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1279	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1280	{ }
1281};
1282
1283static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1284	.cmd_rcgr = 0x38010,
1285	.mnd_width = 0,
1286	.hid_width = 5,
1287	.parent_map = gcc_parent_map_0,
1288	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1289	.clkr.hw.init = &(struct clk_init_data){
1290		.name = "gcc_sdcc1_ice_core_clk_src",
1291		.parent_data = gcc_parents_0,
1292		.num_parents = ARRAY_SIZE(gcc_parents_0),
1293		.ops = &clk_rcg2_ops,
1294	},
1295};
1296
1297static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1298	F(400000, P_BI_TCXO, 12, 1, 4),
1299	F(19200000, P_BI_TCXO, 1, 0, 0),
1300	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1301	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1302	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1303	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1304	{ }
1305};
1306
1307static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1308	.cmd_rcgr = 0x1e00c,
1309	.mnd_width = 8,
1310	.hid_width = 5,
1311	.parent_map = gcc_parent_map_11,
1312	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1313	.clkr.hw.init = &(struct clk_init_data){
1314		.name = "gcc_sdcc2_apps_clk_src",
1315		.parent_data = gcc_parents_11,
1316		.num_parents = ARRAY_SIZE(gcc_parents_11),
1317		.ops = &clk_rcg2_floor_ops,
1318		.flags = CLK_OPS_PARENT_ENABLE,
1319	},
1320};
1321
1322static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1323	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1324	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1325	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1326	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1327	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1328	{ }
1329};
1330
1331static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1332	.cmd_rcgr = 0x45020,
1333	.mnd_width = 8,
1334	.hid_width = 5,
1335	.parent_map = gcc_parent_map_0,
1336	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1337	.clkr.hw.init = &(struct clk_init_data){
1338		.name = "gcc_ufs_phy_axi_clk_src",
1339		.parent_data = gcc_parents_0,
1340		.num_parents = ARRAY_SIZE(gcc_parents_0),
1341		.ops = &clk_rcg2_shared_ops,
1342	},
1343};
1344
1345static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1346	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1347	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1348	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1349	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1350	{ }
1351};
1352
1353static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1354	.cmd_rcgr = 0x45048,
1355	.mnd_width = 0,
1356	.hid_width = 5,
1357	.parent_map = gcc_parent_map_0,
1358	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1359	.clkr.hw.init = &(struct clk_init_data){
1360		.name = "gcc_ufs_phy_ice_core_clk_src",
1361		.parent_data = gcc_parents_0,
1362		.num_parents = ARRAY_SIZE(gcc_parents_0),
1363		.ops = &clk_rcg2_shared_ops,
1364	},
1365};
1366
1367static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1368	F(9600000, P_BI_TCXO, 2, 0, 0),
1369	F(19200000, P_BI_TCXO, 1, 0, 0),
1370	{ }
1371};
1372
1373static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1374	.cmd_rcgr = 0x4507c,
1375	.mnd_width = 0,
1376	.hid_width = 5,
1377	.parent_map = gcc_parent_map_0,
1378	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1379	.clkr.hw.init = &(struct clk_init_data){
1380		.name = "gcc_ufs_phy_phy_aux_clk_src",
1381		.parent_data = gcc_parents_0,
1382		.num_parents = ARRAY_SIZE(gcc_parents_0),
1383		.ops = &clk_rcg2_ops,
1384	},
1385};
1386
1387static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1388	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1389	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1390	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1391	{ }
1392};
1393
1394static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1395	.cmd_rcgr = 0x45060,
1396	.mnd_width = 0,
1397	.hid_width = 5,
1398	.parent_map = gcc_parent_map_0,
1399	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1400	.clkr.hw.init = &(struct clk_init_data){
1401		.name = "gcc_ufs_phy_unipro_core_clk_src",
1402		.parent_data = gcc_parents_0,
1403		.num_parents = ARRAY_SIZE(gcc_parents_0),
1404		.ops = &clk_rcg2_shared_ops,
1405	},
1406};
1407
1408static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1409	F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1410	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1411	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1412	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1413	{ }
1414};
1415
1416static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1417	.cmd_rcgr = 0x1a01c,
1418	.mnd_width = 8,
1419	.hid_width = 5,
1420	.parent_map = gcc_parent_map_0,
1421	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1422	.clkr.hw.init = &(struct clk_init_data){
1423		.name = "gcc_usb30_prim_master_clk_src",
1424		.parent_data = gcc_parents_0,
1425		.num_parents = ARRAY_SIZE(gcc_parents_0),
1426		.ops = &clk_rcg2_shared_ops,
1427	},
1428};
1429
1430static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1431	F(19200000, P_BI_TCXO, 1, 0, 0),
1432	{ }
1433};
1434
1435static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1436	.cmd_rcgr = 0x1a034,
1437	.mnd_width = 0,
1438	.hid_width = 5,
1439	.parent_map = gcc_parent_map_0,
1440	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1441	.clkr.hw.init = &(struct clk_init_data){
1442		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1443		.parent_data = gcc_parents_0,
1444		.num_parents = ARRAY_SIZE(gcc_parents_0),
1445		.ops = &clk_rcg2_ops,
1446	},
1447};
1448
1449static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1450	.reg = 0x1a04c,
1451	.shift = 0,
1452	.width = 2,
1453	.clkr.hw.init = &(struct clk_init_data) {
1454		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1455		.parent_hws = (const struct clk_hw *[]) {
1456			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
1457		.num_parents = 1,
1458		.ops = &clk_regmap_div_ro_ops,
1459	},
1460};
1461
1462static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1463	.cmd_rcgr = 0x1a060,
1464	.mnd_width = 0,
1465	.hid_width = 5,
1466	.parent_map = gcc_parent_map_12,
1467	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1468	.clkr.hw.init = &(struct clk_init_data){
1469		.name = "gcc_usb3_prim_phy_aux_clk_src",
1470		.parent_data = gcc_parents_12,
1471		.num_parents = ARRAY_SIZE(gcc_parents_12),
1472		.ops = &clk_rcg2_ops,
1473	},
1474};
1475
1476static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1477	F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1478	F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1479	F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1480	F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1481	{ }
1482};
1483
1484static struct clk_rcg2 gcc_video_venus_clk_src = {
1485	.cmd_rcgr = 0x58060,
1486	.mnd_width = 0,
1487	.hid_width = 5,
1488	.parent_map = gcc_parent_map_13,
1489	.freq_tbl = ftbl_gcc_video_venus_clk_src,
1490	.clkr.hw.init = &(struct clk_init_data){
1491		.name = "gcc_video_venus_clk_src",
1492		.parent_data = gcc_parents_13,
1493		.num_parents = ARRAY_SIZE(gcc_parents_13),
1494		.flags = CLK_SET_RATE_PARENT,
1495		.ops = &clk_rcg2_shared_ops,
1496	},
1497};
1498
1499static struct clk_branch gcc_ahb2phy_csi_clk = {
1500	.halt_reg = 0x1d004,
1501	.halt_check = BRANCH_HALT,
1502	.hwcg_reg = 0x1d004,
1503	.hwcg_bit = 1,
1504	.clkr = {
1505		.enable_reg = 0x1d004,
1506		.enable_mask = BIT(0),
1507		.hw.init = &(struct clk_init_data){
1508			.name = "gcc_ahb2phy_csi_clk",
1509			.ops = &clk_branch2_ops,
1510		},
1511	},
1512};
1513
1514static struct clk_branch gcc_ahb2phy_usb_clk = {
1515	.halt_reg = 0x1d008,
1516	.halt_check = BRANCH_HALT,
1517	.hwcg_reg = 0x1d008,
1518	.hwcg_bit = 1,
1519	.clkr = {
1520		.enable_reg = 0x1d008,
1521		.enable_mask = BIT(0),
1522		.hw.init = &(struct clk_init_data){
1523			.name = "gcc_ahb2phy_usb_clk",
1524			.ops = &clk_branch2_ops,
1525		},
1526	},
1527};
1528
1529static struct clk_branch gcc_bimc_gpu_axi_clk = {
1530	.halt_reg = 0x71154,
1531	.halt_check = BRANCH_HALT_DELAY,
1532	.hwcg_reg = 0x71154,
1533	.hwcg_bit = 1,
1534	.clkr = {
1535		.enable_reg = 0x71154,
1536		.enable_mask = BIT(0),
1537		.hw.init = &(struct clk_init_data){
1538			.name = "gcc_bimc_gpu_axi_clk",
1539			.ops = &clk_branch2_ops,
1540		},
1541	},
1542};
1543
1544static struct clk_branch gcc_boot_rom_ahb_clk = {
1545	.halt_reg = 0x23004,
1546	.halt_check = BRANCH_HALT_VOTED,
1547	.hwcg_reg = 0x23004,
1548	.hwcg_bit = 1,
1549	.clkr = {
1550		.enable_reg = 0x79004,
1551		.enable_mask = BIT(10),
1552		.hw.init = &(struct clk_init_data){
1553			.name = "gcc_boot_rom_ahb_clk",
1554			.ops = &clk_branch2_ops,
1555		},
1556	},
1557};
1558
1559static struct clk_branch gcc_cam_throttle_nrt_clk = {
1560	.halt_reg = 0x17070,
1561	.halt_check = BRANCH_HALT_VOTED,
1562	.hwcg_reg = 0x17070,
1563	.hwcg_bit = 1,
1564	.clkr = {
1565		.enable_reg = 0x79004,
1566		.enable_mask = BIT(27),
1567		.hw.init = &(struct clk_init_data){
1568			.name = "gcc_cam_throttle_nrt_clk",
1569			.ops = &clk_branch2_ops,
1570		},
1571	},
1572};
1573
1574static struct clk_branch gcc_cam_throttle_rt_clk = {
1575	.halt_reg = 0x1706c,
1576	.halt_check = BRANCH_HALT_VOTED,
1577	.hwcg_reg = 0x1706c,
1578	.hwcg_bit = 1,
1579	.clkr = {
1580		.enable_reg = 0x79004,
1581		.enable_mask = BIT(26),
1582		.hw.init = &(struct clk_init_data){
1583			.name = "gcc_cam_throttle_rt_clk",
1584			.ops = &clk_branch2_ops,
1585		},
1586	},
1587};
1588
1589static struct clk_branch gcc_camera_ahb_clk = {
1590	.halt_reg = 0x17008,
1591	.halt_check = BRANCH_HALT_DELAY,
1592	.hwcg_reg = 0x17008,
1593	.hwcg_bit = 1,
1594	.clkr = {
1595		.enable_reg = 0x17008,
1596		.enable_mask = BIT(0),
1597		.hw.init = &(struct clk_init_data){
1598			.name = "gcc_camera_ahb_clk",
1599			.flags = CLK_IS_CRITICAL,
1600			.ops = &clk_branch2_ops,
1601		},
1602	},
1603};
1604
1605static struct clk_branch gcc_camera_xo_clk = {
1606	.halt_reg = 0x17028,
1607	.halt_check = BRANCH_HALT,
1608	.clkr = {
1609		.enable_reg = 0x17028,
1610		.enable_mask = BIT(0),
1611		.hw.init = &(struct clk_init_data){
1612			.name = "gcc_camera_xo_clk",
1613			.flags = CLK_IS_CRITICAL,
1614			.ops = &clk_branch2_ops,
1615		},
1616	},
1617};
1618
1619static struct clk_branch gcc_camss_axi_clk = {
1620	.halt_reg = 0x58044,
1621	.halt_check = BRANCH_HALT,
1622	.clkr = {
1623		.enable_reg = 0x58044,
1624		.enable_mask = BIT(0),
1625		.hw.init = &(struct clk_init_data){
1626			.name = "gcc_camss_axi_clk",
1627			.parent_hws = (const struct clk_hw *[]){
1628				&gcc_camss_axi_clk_src.clkr.hw,
1629			},
1630			.num_parents = 1,
1631			.flags = CLK_SET_RATE_PARENT,
1632			.ops = &clk_branch2_ops,
1633		},
1634	},
1635};
1636
1637static struct clk_branch gcc_camss_camnoc_atb_clk = {
1638	.halt_reg = 0x5804c,
1639	.halt_check = BRANCH_HALT_DELAY,
1640	.hwcg_reg = 0x5804c,
1641	.hwcg_bit = 1,
1642	.clkr = {
1643		.enable_reg = 0x5804c,
1644		.enable_mask = BIT(0),
1645		.hw.init = &(struct clk_init_data){
1646			.name = "gcc_camss_camnoc_atb_clk",
1647			.ops = &clk_branch2_ops,
1648		},
1649	},
1650};
1651
1652static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
1653	.halt_reg = 0x58050,
1654	.halt_check = BRANCH_HALT_DELAY,
1655	.hwcg_reg = 0x58050,
1656	.hwcg_bit = 1,
1657	.clkr = {
1658		.enable_reg = 0x58050,
1659		.enable_mask = BIT(0),
1660		.hw.init = &(struct clk_init_data){
1661			.name = "gcc_camss_camnoc_nts_xo_clk",
1662			.ops = &clk_branch2_ops,
1663		},
1664	},
1665};
1666
1667static struct clk_branch gcc_camss_cci_0_clk = {
1668	.halt_reg = 0x56018,
1669	.halt_check = BRANCH_HALT,
1670	.clkr = {
1671		.enable_reg = 0x56018,
1672		.enable_mask = BIT(0),
1673		.hw.init = &(struct clk_init_data){
1674			.name = "gcc_camss_cci_0_clk",
1675			.parent_hws = (const struct clk_hw *[]){
1676				&gcc_camss_cci_clk_src.clkr.hw,
1677			},
1678			.num_parents = 1,
1679			.flags = CLK_SET_RATE_PARENT,
1680			.ops = &clk_branch2_ops,
1681		},
1682	},
1683};
1684
1685static struct clk_branch gcc_camss_cphy_0_clk = {
1686	.halt_reg = 0x52088,
1687	.halt_check = BRANCH_HALT,
1688	.clkr = {
1689		.enable_reg = 0x52088,
1690		.enable_mask = BIT(0),
1691		.hw.init = &(struct clk_init_data){
1692			.name = "gcc_camss_cphy_0_clk",
1693			.parent_hws = (const struct clk_hw *[]){
1694				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1695			},
1696			.num_parents = 1,
1697			.flags = CLK_SET_RATE_PARENT,
1698			.ops = &clk_branch2_ops,
1699		},
1700	},
1701};
1702
1703static struct clk_branch gcc_camss_cphy_1_clk = {
1704	.halt_reg = 0x5208c,
1705	.halt_check = BRANCH_HALT,
1706	.clkr = {
1707		.enable_reg = 0x5208c,
1708		.enable_mask = BIT(0),
1709		.hw.init = &(struct clk_init_data){
1710			.name = "gcc_camss_cphy_1_clk",
1711			.parent_hws = (const struct clk_hw *[]){
1712				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1713			},
1714			.num_parents = 1,
1715			.flags = CLK_SET_RATE_PARENT,
1716			.ops = &clk_branch2_ops,
1717		},
1718	},
1719};
1720
1721static struct clk_branch gcc_camss_cphy_2_clk = {
1722	.halt_reg = 0x52090,
1723	.halt_check = BRANCH_HALT,
1724	.clkr = {
1725		.enable_reg = 0x52090,
1726		.enable_mask = BIT(0),
1727		.hw.init = &(struct clk_init_data){
1728			.name = "gcc_camss_cphy_2_clk",
1729			.parent_hws = (const struct clk_hw *[]){
1730				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1731			},
1732			.num_parents = 1,
1733			.flags = CLK_SET_RATE_PARENT,
1734			.ops = &clk_branch2_ops,
1735		},
1736	},
1737};
1738
1739static struct clk_branch gcc_camss_csi0phytimer_clk = {
1740	.halt_reg = 0x59018,
1741	.halt_check = BRANCH_HALT,
1742	.clkr = {
1743		.enable_reg = 0x59018,
1744		.enable_mask = BIT(0),
1745		.hw.init = &(struct clk_init_data){
1746			.name = "gcc_camss_csi0phytimer_clk",
1747			.parent_hws = (const struct clk_hw *[]){
1748				&gcc_camss_csi0phytimer_clk_src.clkr.hw,
1749			},
1750			.num_parents = 1,
1751			.flags = CLK_SET_RATE_PARENT,
1752			.ops = &clk_branch2_ops,
1753		},
1754	},
1755};
1756
1757static struct clk_branch gcc_camss_csi1phytimer_clk = {
1758	.halt_reg = 0x59034,
1759	.halt_check = BRANCH_HALT,
1760	.clkr = {
1761		.enable_reg = 0x59034,
1762		.enable_mask = BIT(0),
1763		.hw.init = &(struct clk_init_data){
1764			.name = "gcc_camss_csi1phytimer_clk",
1765			.parent_hws = (const struct clk_hw *[]){
1766				&gcc_camss_csi1phytimer_clk_src.clkr.hw,
1767			},
1768			.num_parents = 1,
1769			.flags = CLK_SET_RATE_PARENT,
1770			.ops = &clk_branch2_ops,
1771		},
1772	},
1773};
1774
1775static struct clk_branch gcc_camss_csi2phytimer_clk = {
1776	.halt_reg = 0x59050,
1777	.halt_check = BRANCH_HALT,
1778	.clkr = {
1779		.enable_reg = 0x59050,
1780		.enable_mask = BIT(0),
1781		.hw.init = &(struct clk_init_data){
1782			.name = "gcc_camss_csi2phytimer_clk",
1783			.parent_hws = (const struct clk_hw *[]){
1784				&gcc_camss_csi2phytimer_clk_src.clkr.hw,
1785			},
1786			.num_parents = 1,
1787			.flags = CLK_SET_RATE_PARENT,
1788			.ops = &clk_branch2_ops,
1789		},
1790	},
1791};
1792
1793static struct clk_branch gcc_camss_mclk0_clk = {
1794	.halt_reg = 0x51018,
1795	.halt_check = BRANCH_HALT,
1796	.clkr = {
1797		.enable_reg = 0x51018,
1798		.enable_mask = BIT(0),
1799		.hw.init = &(struct clk_init_data){
1800			.name = "gcc_camss_mclk0_clk",
1801			.parent_hws = (const struct clk_hw *[]){
1802				&gcc_camss_mclk0_clk_src.clkr.hw,
1803			},
1804			.num_parents = 1,
1805			.flags = CLK_SET_RATE_PARENT,
1806			.ops = &clk_branch2_ops,
1807		},
1808	},
1809};
1810
1811static struct clk_branch gcc_camss_mclk1_clk = {
1812	.halt_reg = 0x51034,
1813	.halt_check = BRANCH_HALT,
1814	.clkr = {
1815		.enable_reg = 0x51034,
1816		.enable_mask = BIT(0),
1817		.hw.init = &(struct clk_init_data){
1818			.name = "gcc_camss_mclk1_clk",
1819			.parent_hws = (const struct clk_hw *[]){
1820				&gcc_camss_mclk1_clk_src.clkr.hw,
1821			},
1822			.num_parents = 1,
1823			.flags = CLK_SET_RATE_PARENT,
1824			.ops = &clk_branch2_ops,
1825		},
1826	},
1827};
1828
1829static struct clk_branch gcc_camss_mclk2_clk = {
1830	.halt_reg = 0x51050,
1831	.halt_check = BRANCH_HALT,
1832	.clkr = {
1833		.enable_reg = 0x51050,
1834		.enable_mask = BIT(0),
1835		.hw.init = &(struct clk_init_data){
1836			.name = "gcc_camss_mclk2_clk",
1837			.parent_hws = (const struct clk_hw *[]){
1838				&gcc_camss_mclk2_clk_src.clkr.hw,
1839			},
1840			.num_parents = 1,
1841			.flags = CLK_SET_RATE_PARENT,
1842			.ops = &clk_branch2_ops,
1843		},
1844	},
1845};
1846
1847static struct clk_branch gcc_camss_mclk3_clk = {
1848	.halt_reg = 0x5106c,
1849	.halt_check = BRANCH_HALT,
1850	.clkr = {
1851		.enable_reg = 0x5106c,
1852		.enable_mask = BIT(0),
1853		.hw.init = &(struct clk_init_data){
1854			.name = "gcc_camss_mclk3_clk",
1855			.parent_hws = (const struct clk_hw *[]){
1856				&gcc_camss_mclk3_clk_src.clkr.hw,
1857			},
1858			.num_parents = 1,
1859			.flags = CLK_SET_RATE_PARENT,
1860			.ops = &clk_branch2_ops,
1861		},
1862	},
1863};
1864
1865static struct clk_branch gcc_camss_nrt_axi_clk = {
1866	.halt_reg = 0x58054,
1867	.halt_check = BRANCH_HALT,
1868	.clkr = {
1869		.enable_reg = 0x58054,
1870		.enable_mask = BIT(0),
1871		.hw.init = &(struct clk_init_data){
1872			.name = "gcc_camss_nrt_axi_clk",
1873			.ops = &clk_branch2_ops,
1874		},
1875	},
1876};
1877
1878static struct clk_branch gcc_camss_ope_ahb_clk = {
1879	.halt_reg = 0x5503c,
1880	.halt_check = BRANCH_HALT,
1881	.clkr = {
1882		.enable_reg = 0x5503c,
1883		.enable_mask = BIT(0),
1884		.hw.init = &(struct clk_init_data){
1885			.name = "gcc_camss_ope_ahb_clk",
1886			.parent_hws = (const struct clk_hw *[]){
1887				&gcc_camss_ope_ahb_clk_src.clkr.hw,
1888			},
1889			.num_parents = 1,
1890			.flags = CLK_SET_RATE_PARENT,
1891			.ops = &clk_branch2_ops,
1892		},
1893	},
1894};
1895
1896static struct clk_branch gcc_camss_ope_clk = {
1897	.halt_reg = 0x5501c,
1898	.halt_check = BRANCH_HALT,
1899	.clkr = {
1900		.enable_reg = 0x5501c,
1901		.enable_mask = BIT(0),
1902		.hw.init = &(struct clk_init_data){
1903			.name = "gcc_camss_ope_clk",
1904			.parent_hws = (const struct clk_hw *[]){
1905				&gcc_camss_ope_clk_src.clkr.hw,
1906			},
1907			.num_parents = 1,
1908			.flags = CLK_SET_RATE_PARENT,
1909			.ops = &clk_branch2_ops,
1910		},
1911	},
1912};
1913
1914static struct clk_branch gcc_camss_rt_axi_clk = {
1915	.halt_reg = 0x5805c,
1916	.halt_check = BRANCH_HALT,
1917	.clkr = {
1918		.enable_reg = 0x5805c,
1919		.enable_mask = BIT(0),
1920		.hw.init = &(struct clk_init_data){
1921			.name = "gcc_camss_rt_axi_clk",
1922			.ops = &clk_branch2_ops,
1923		},
1924	},
1925};
1926
1927static struct clk_branch gcc_camss_tfe_0_clk = {
1928	.halt_reg = 0x5201c,
1929	.halt_check = BRANCH_HALT,
1930	.clkr = {
1931		.enable_reg = 0x5201c,
1932		.enable_mask = BIT(0),
1933		.hw.init = &(struct clk_init_data){
1934			.name = "gcc_camss_tfe_0_clk",
1935			.parent_hws = (const struct clk_hw *[]){
1936				&gcc_camss_tfe_0_clk_src.clkr.hw,
1937			},
1938			.num_parents = 1,
1939			.flags = CLK_SET_RATE_PARENT,
1940			.ops = &clk_branch2_ops,
1941		},
1942	},
1943};
1944
1945static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
1946	.halt_reg = 0x5207c,
1947	.halt_check = BRANCH_HALT,
1948	.clkr = {
1949		.enable_reg = 0x5207c,
1950		.enable_mask = BIT(0),
1951		.hw.init = &(struct clk_init_data){
1952			.name = "gcc_camss_tfe_0_cphy_rx_clk",
1953			.parent_hws = (const struct clk_hw *[]){
1954				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1955			},
1956			.num_parents = 1,
1957			.flags = CLK_SET_RATE_PARENT,
1958			.ops = &clk_branch2_ops,
1959		},
1960	},
1961};
1962
1963static struct clk_branch gcc_camss_tfe_0_csid_clk = {
1964	.halt_reg = 0x520ac,
1965	.halt_check = BRANCH_HALT,
1966	.clkr = {
1967		.enable_reg = 0x520ac,
1968		.enable_mask = BIT(0),
1969		.hw.init = &(struct clk_init_data){
1970			.name = "gcc_camss_tfe_0_csid_clk",
1971			.parent_hws = (const struct clk_hw *[]){
1972				&gcc_camss_tfe_0_csid_clk_src.clkr.hw,
1973			},
1974			.num_parents = 1,
1975			.flags = CLK_SET_RATE_PARENT,
1976			.ops = &clk_branch2_ops,
1977		},
1978	},
1979};
1980
1981static struct clk_branch gcc_camss_tfe_1_clk = {
1982	.halt_reg = 0x5203c,
1983	.halt_check = BRANCH_HALT,
1984	.clkr = {
1985		.enable_reg = 0x5203c,
1986		.enable_mask = BIT(0),
1987		.hw.init = &(struct clk_init_data){
1988			.name = "gcc_camss_tfe_1_clk",
1989			.parent_hws = (const struct clk_hw *[]){
1990				&gcc_camss_tfe_1_clk_src.clkr.hw,
1991			},
1992			.num_parents = 1,
1993			.flags = CLK_SET_RATE_PARENT,
1994			.ops = &clk_branch2_ops,
1995		},
1996	},
1997};
1998
1999static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
2000	.halt_reg = 0x52080,
2001	.halt_check = BRANCH_HALT,
2002	.clkr = {
2003		.enable_reg = 0x52080,
2004		.enable_mask = BIT(0),
2005		.hw.init = &(struct clk_init_data){
2006			.name = "gcc_camss_tfe_1_cphy_rx_clk",
2007			.parent_hws = (const struct clk_hw *[]){
2008				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2009			},
2010			.num_parents = 1,
2011			.flags = CLK_SET_RATE_PARENT,
2012			.ops = &clk_branch2_ops,
2013		},
2014	},
2015};
2016
2017static struct clk_branch gcc_camss_tfe_1_csid_clk = {
2018	.halt_reg = 0x520cc,
2019	.halt_check = BRANCH_HALT,
2020	.clkr = {
2021		.enable_reg = 0x520cc,
2022		.enable_mask = BIT(0),
2023		.hw.init = &(struct clk_init_data){
2024			.name = "gcc_camss_tfe_1_csid_clk",
2025			.parent_hws = (const struct clk_hw *[]){
2026				&gcc_camss_tfe_1_csid_clk_src.clkr.hw,
2027			},
2028			.num_parents = 1,
2029			.flags = CLK_SET_RATE_PARENT,
2030			.ops = &clk_branch2_ops,
2031		},
2032	},
2033};
2034
2035static struct clk_branch gcc_camss_tfe_2_clk = {
2036	.halt_reg = 0x5205c,
2037	.halt_check = BRANCH_HALT,
2038	.clkr = {
2039		.enable_reg = 0x5205c,
2040		.enable_mask = BIT(0),
2041		.hw.init = &(struct clk_init_data){
2042			.name = "gcc_camss_tfe_2_clk",
2043			.parent_hws = (const struct clk_hw *[]){
2044				&gcc_camss_tfe_2_clk_src.clkr.hw,
2045			},
2046			.num_parents = 1,
2047			.flags = CLK_SET_RATE_PARENT,
2048			.ops = &clk_branch2_ops,
2049		},
2050	},
2051};
2052
2053static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {
2054	.halt_reg = 0x52084,
2055	.halt_check = BRANCH_HALT,
2056	.clkr = {
2057		.enable_reg = 0x52084,
2058		.enable_mask = BIT(0),
2059		.hw.init = &(struct clk_init_data){
2060			.name = "gcc_camss_tfe_2_cphy_rx_clk",
2061			.parent_hws = (const struct clk_hw *[]){
2062				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2063			},
2064			.num_parents = 1,
2065			.flags = CLK_SET_RATE_PARENT,
2066			.ops = &clk_branch2_ops,
2067		},
2068	},
2069};
2070
2071static struct clk_branch gcc_camss_tfe_2_csid_clk = {
2072	.halt_reg = 0x520ec,
2073	.halt_check = BRANCH_HALT,
2074	.clkr = {
2075		.enable_reg = 0x520ec,
2076		.enable_mask = BIT(0),
2077		.hw.init = &(struct clk_init_data){
2078			.name = "gcc_camss_tfe_2_csid_clk",
2079			.parent_hws = (const struct clk_hw *[]){
2080				&gcc_camss_tfe_2_csid_clk_src.clkr.hw,
2081			},
2082			.num_parents = 1,
2083			.flags = CLK_SET_RATE_PARENT,
2084			.ops = &clk_branch2_ops,
2085		},
2086	},
2087};
2088
2089static struct clk_branch gcc_camss_top_ahb_clk = {
2090	.halt_reg = 0x58028,
2091	.halt_check = BRANCH_HALT,
2092	.clkr = {
2093		.enable_reg = 0x58028,
2094		.enable_mask = BIT(0),
2095		.hw.init = &(struct clk_init_data){
2096			.name = "gcc_camss_top_ahb_clk",
2097			.parent_hws = (const struct clk_hw *[]){
2098				&gcc_camss_top_ahb_clk_src.clkr.hw,
2099			},
2100			.num_parents = 1,
2101			.flags = CLK_SET_RATE_PARENT,
2102			.ops = &clk_branch2_ops,
2103		},
2104	},
2105};
2106
2107static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2108	.halt_reg = 0x1a084,
2109	.halt_check = BRANCH_HALT,
2110	.hwcg_reg = 0x1a084,
2111	.hwcg_bit = 1,
2112	.clkr = {
2113		.enable_reg = 0x1a084,
2114		.enable_mask = BIT(0),
2115		.hw.init = &(struct clk_init_data){
2116			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
2117			.parent_hws = (const struct clk_hw *[]){
2118				&gcc_usb30_prim_master_clk_src.clkr.hw,
2119			},
2120			.num_parents = 1,
2121			.flags = CLK_SET_RATE_PARENT,
2122			.ops = &clk_branch2_ops,
2123		},
2124	},
2125};
2126
2127static struct clk_branch gcc_cpuss_gnoc_clk = {
2128	.halt_reg = 0x2b004,
2129	.halt_check = BRANCH_HALT_VOTED,
2130	.hwcg_reg = 0x2b004,
2131	.hwcg_bit = 1,
2132	.clkr = {
2133		.enable_reg = 0x79004,
2134		.enable_mask = BIT(22),
2135		.hw.init = &(struct clk_init_data){
2136			.name = "gcc_cpuss_gnoc_clk",
2137			.flags = CLK_IS_CRITICAL,
2138			.ops = &clk_branch2_ops,
2139		},
2140	},
2141};
2142
2143static struct clk_branch gcc_disp_ahb_clk = {
2144	.halt_reg = 0x1700c,
2145	.halt_check = BRANCH_HALT,
2146	.hwcg_reg = 0x1700c,
2147	.hwcg_bit = 1,
2148	.clkr = {
2149		.enable_reg = 0x1700c,
2150		.enable_mask = BIT(0),
2151		.hw.init = &(struct clk_init_data){
2152			.name = "gcc_disp_ahb_clk",
2153			.flags = CLK_IS_CRITICAL,
2154			.ops = &clk_branch2_ops,
2155		},
2156	},
2157};
2158
2159static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
2160	.reg = 0x17058,
2161	.shift = 0,
2162	.width = 2,
2163	.clkr.hw.init = &(struct clk_init_data) {
2164		.name = "gcc_disp_gpll0_clk_src",
2165		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2166		.num_parents = 1,
2167		.ops = &clk_regmap_div_ops,
2168	},
2169};
2170
2171static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2172	.halt_check = BRANCH_HALT_DELAY,
2173	.clkr = {
2174		.enable_reg = 0x79004,
2175		.enable_mask = BIT(20),
2176		.hw.init = &(struct clk_init_data){
2177			.name = "gcc_disp_gpll0_div_clk_src",
2178			.parent_hws = (const struct clk_hw *[]){
2179				&gcc_disp_gpll0_clk_src.clkr.hw,
2180			},
2181			.num_parents = 1,
2182			.flags = CLK_SET_RATE_PARENT,
2183			.ops = &clk_branch2_ops,
2184		},
2185	},
2186};
2187
2188static struct clk_branch gcc_disp_hf_axi_clk = {
2189	.halt_reg = 0x17020,
2190	.halt_check = BRANCH_HALT,
2191	.hwcg_reg = 0x17020,
2192	.hwcg_bit = 1,
2193	.clkr = {
2194		.enable_reg = 0x17020,
2195		.enable_mask = BIT(0),
2196		.hw.init = &(struct clk_init_data){
2197			.name = "gcc_disp_hf_axi_clk",
2198			.ops = &clk_branch2_ops,
2199		},
2200	},
2201};
2202
2203static struct clk_branch gcc_disp_throttle_core_clk = {
2204	.halt_reg = 0x17064,
2205	.halt_check = BRANCH_HALT_VOTED,
2206	.hwcg_reg = 0x17064,
2207	.hwcg_bit = 1,
2208	.clkr = {
2209		.enable_reg = 0x7900c,
2210		.enable_mask = BIT(5),
2211		.hw.init = &(struct clk_init_data){
2212			.name = "gcc_disp_throttle_core_clk",
2213			.ops = &clk_branch2_ops,
2214		},
2215	},
2216};
2217
2218static struct clk_branch gcc_disp_xo_clk = {
2219	.halt_reg = 0x1702c,
2220	.halt_check = BRANCH_HALT,
2221	.clkr = {
2222		.enable_reg = 0x1702c,
2223		.enable_mask = BIT(0),
2224		.hw.init = &(struct clk_init_data){
2225			.name = "gcc_disp_xo_clk",
2226			.flags = CLK_IS_CRITICAL,
2227			.ops = &clk_branch2_ops,
2228		},
2229	},
2230};
2231
2232static struct clk_branch gcc_gp1_clk = {
2233	.halt_reg = 0x4d000,
2234	.halt_check = BRANCH_HALT,
2235	.clkr = {
2236		.enable_reg = 0x4d000,
2237		.enable_mask = BIT(0),
2238		.hw.init = &(struct clk_init_data){
2239			.name = "gcc_gp1_clk",
2240			.parent_hws = (const struct clk_hw *[]){
2241				&gcc_gp1_clk_src.clkr.hw,
2242			},
2243			.num_parents = 1,
2244			.flags = CLK_SET_RATE_PARENT,
2245			.ops = &clk_branch2_ops,
2246		},
2247	},
2248};
2249
2250static struct clk_branch gcc_gp2_clk = {
2251	.halt_reg = 0x4e000,
2252	.halt_check = BRANCH_HALT,
2253	.clkr = {
2254		.enable_reg = 0x4e000,
2255		.enable_mask = BIT(0),
2256		.hw.init = &(struct clk_init_data){
2257			.name = "gcc_gp2_clk",
2258			.parent_hws = (const struct clk_hw *[]){
2259				&gcc_gp2_clk_src.clkr.hw,
2260			},
2261			.num_parents = 1,
2262			.flags = CLK_SET_RATE_PARENT,
2263			.ops = &clk_branch2_ops,
2264		},
2265	},
2266};
2267
2268static struct clk_branch gcc_gp3_clk = {
2269	.halt_reg = 0x4f000,
2270	.halt_check = BRANCH_HALT,
2271	.clkr = {
2272		.enable_reg = 0x4f000,
2273		.enable_mask = BIT(0),
2274		.hw.init = &(struct clk_init_data){
2275			.name = "gcc_gp3_clk",
2276			.parent_hws = (const struct clk_hw *[]){
2277				&gcc_gp3_clk_src.clkr.hw,
2278			},
2279			.num_parents = 1,
2280			.flags = CLK_SET_RATE_PARENT,
2281			.ops = &clk_branch2_ops,
2282		},
2283	},
2284};
2285
2286static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2287	.halt_reg = 0x36004,
2288	.halt_check = BRANCH_HALT,
2289	.hwcg_reg = 0x36004,
2290	.hwcg_bit = 1,
2291	.clkr = {
2292		.enable_reg = 0x36004,
2293		.enable_mask = BIT(0),
2294		.hw.init = &(struct clk_init_data){
2295			.name = "gcc_gpu_cfg_ahb_clk",
2296			.flags = CLK_IS_CRITICAL,
2297			.ops = &clk_branch2_ops,
2298		},
2299	},
2300};
2301
2302static struct clk_branch gcc_gpu_gpll0_clk_src = {
2303	.halt_check = BRANCH_HALT_DELAY,
2304	.clkr = {
2305		.enable_reg = 0x79004,
2306		.enable_mask = BIT(15),
2307		.hw.init = &(struct clk_init_data){
2308			.name = "gcc_gpu_gpll0_clk_src",
2309			.parent_hws = (const struct clk_hw *[]){
2310				&gpll0.clkr.hw,
2311			},
2312			.num_parents = 1,
2313			.flags = CLK_SET_RATE_PARENT,
2314			.ops = &clk_branch2_ops,
2315		},
2316	},
2317};
2318
2319static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2320	.halt_check = BRANCH_HALT_DELAY,
2321	.clkr = {
2322		.enable_reg = 0x79004,
2323		.enable_mask = BIT(16),
2324		.hw.init = &(struct clk_init_data){
2325			.name = "gcc_gpu_gpll0_div_clk_src",
2326			.parent_hws = (const struct clk_hw *[]){
2327				&gpll0_out_aux2.clkr.hw,
2328			},
2329			.num_parents = 1,
2330			.flags = CLK_SET_RATE_PARENT,
2331			.ops = &clk_branch2_ops,
2332		},
2333	},
2334};
2335
2336static struct clk_branch gcc_gpu_iref_clk = {
2337	.halt_reg = 0x36100,
2338	.halt_check = BRANCH_HALT_DELAY,
2339	.clkr = {
2340		.enable_reg = 0x36100,
2341		.enable_mask = BIT(0),
2342		.hw.init = &(struct clk_init_data){
2343			.name = "gcc_gpu_iref_clk",
2344			.ops = &clk_branch2_ops,
2345		},
2346	},
2347};
2348
2349static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2350	.halt_reg = 0x3600c,
2351	.halt_check = BRANCH_VOTED,
2352	.hwcg_reg = 0x3600c,
2353	.hwcg_bit = 1,
2354	.clkr = {
2355		.enable_reg = 0x3600c,
2356		.enable_mask = BIT(0),
2357		.hw.init = &(struct clk_init_data){
2358			.name = "gcc_gpu_memnoc_gfx_clk",
2359			.ops = &clk_branch2_ops,
2360		},
2361	},
2362};
2363
2364static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2365	.halt_reg = 0x36018,
2366	.halt_check = BRANCH_HALT,
2367	.clkr = {
2368		.enable_reg = 0x36018,
2369		.enable_mask = BIT(0),
2370		.hw.init = &(struct clk_init_data){
2371			.name = "gcc_gpu_snoc_dvm_gfx_clk",
2372			.ops = &clk_branch2_ops,
2373		},
2374	},
2375};
2376
2377static struct clk_branch gcc_gpu_throttle_core_clk = {
2378	.halt_reg = 0x36048,
2379	.halt_check = BRANCH_HALT_VOTED,
2380	.hwcg_reg = 0x36048,
2381	.hwcg_bit = 1,
2382	.clkr = {
2383		.enable_reg = 0x79004,
2384		.enable_mask = BIT(31),
2385		.hw.init = &(struct clk_init_data){
2386			.name = "gcc_gpu_throttle_core_clk",
2387			.ops = &clk_branch2_ops,
2388		},
2389	},
2390};
2391
2392static struct clk_branch gcc_pdm2_clk = {
2393	.halt_reg = 0x2000c,
2394	.halt_check = BRANCH_HALT,
2395	.clkr = {
2396		.enable_reg = 0x2000c,
2397		.enable_mask = BIT(0),
2398		.hw.init = &(struct clk_init_data){
2399			.name = "gcc_pdm2_clk",
2400			.parent_hws = (const struct clk_hw *[]){
2401				&gcc_pdm2_clk_src.clkr.hw,
2402			},
2403			.num_parents = 1,
2404			.flags = CLK_SET_RATE_PARENT,
2405			.ops = &clk_branch2_ops,
2406		},
2407	},
2408};
2409
2410static struct clk_branch gcc_pdm_ahb_clk = {
2411	.halt_reg = 0x20004,
2412	.halt_check = BRANCH_HALT,
2413	.hwcg_reg = 0x20004,
2414	.hwcg_bit = 1,
2415	.clkr = {
2416		.enable_reg = 0x20004,
2417		.enable_mask = BIT(0),
2418		.hw.init = &(struct clk_init_data){
2419			.name = "gcc_pdm_ahb_clk",
2420			.ops = &clk_branch2_ops,
2421		},
2422	},
2423};
2424
2425static struct clk_branch gcc_pdm_xo4_clk = {
2426	.halt_reg = 0x20008,
2427	.halt_check = BRANCH_HALT,
2428	.clkr = {
2429		.enable_reg = 0x20008,
2430		.enable_mask = BIT(0),
2431		.hw.init = &(struct clk_init_data){
2432			.name = "gcc_pdm_xo4_clk",
2433			.ops = &clk_branch2_ops,
2434		},
2435	},
2436};
2437
2438static struct clk_branch gcc_prng_ahb_clk = {
2439	.halt_reg = 0x21004,
2440	.halt_check = BRANCH_HALT_VOTED,
2441	.hwcg_reg = 0x21004,
2442	.hwcg_bit = 1,
2443	.clkr = {
2444		.enable_reg = 0x79004,
2445		.enable_mask = BIT(13),
2446		.hw.init = &(struct clk_init_data){
2447			.name = "gcc_prng_ahb_clk",
2448			.ops = &clk_branch2_ops,
2449		},
2450	},
2451};
2452
2453static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2454	.halt_reg = 0x17014,
2455	.halt_check = BRANCH_HALT_VOTED,
2456	.hwcg_reg = 0x17014,
2457	.hwcg_bit = 1,
2458	.clkr = {
2459		.enable_reg = 0x7900c,
2460		.enable_mask = BIT(0),
2461		.hw.init = &(struct clk_init_data){
2462			.name = "gcc_qmip_camera_nrt_ahb_clk",
2463			.ops = &clk_branch2_ops,
2464		},
2465	},
2466};
2467
2468static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2469	.halt_reg = 0x17060,
2470	.halt_check = BRANCH_HALT_VOTED,
2471	.hwcg_reg = 0x17060,
2472	.hwcg_bit = 1,
2473	.clkr = {
2474		.enable_reg = 0x7900c,
2475		.enable_mask = BIT(2),
2476		.hw.init = &(struct clk_init_data){
2477			.name = "gcc_qmip_camera_rt_ahb_clk",
2478			.ops = &clk_branch2_ops,
2479		},
2480	},
2481};
2482
2483static struct clk_branch gcc_qmip_disp_ahb_clk = {
2484	.halt_reg = 0x17018,
2485	.halt_check = BRANCH_HALT_VOTED,
2486	.hwcg_reg = 0x17018,
2487	.hwcg_bit = 1,
2488	.clkr = {
2489		.enable_reg = 0x7900c,
2490		.enable_mask = BIT(1),
2491		.hw.init = &(struct clk_init_data){
2492			.name = "gcc_qmip_disp_ahb_clk",
2493			.ops = &clk_branch2_ops,
2494		},
2495	},
2496};
2497
2498static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2499	.halt_reg = 0x36040,
2500	.halt_check = BRANCH_HALT_VOTED,
2501	.hwcg_reg = 0x36040,
2502	.hwcg_bit = 1,
2503	.clkr = {
2504		.enable_reg = 0x7900c,
2505		.enable_mask = BIT(4),
2506		.hw.init = &(struct clk_init_data){
2507			.name = "gcc_qmip_gpu_cfg_ahb_clk",
2508			.ops = &clk_branch2_ops,
2509		},
2510	},
2511};
2512
2513static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2514	.halt_reg = 0x17010,
2515	.halt_check = BRANCH_HALT_VOTED,
2516	.hwcg_reg = 0x17010,
2517	.hwcg_bit = 1,
2518	.clkr = {
2519		.enable_reg = 0x79004,
2520		.enable_mask = BIT(25),
2521		.hw.init = &(struct clk_init_data){
2522			.name = "gcc_qmip_video_vcodec_ahb_clk",
2523			.ops = &clk_branch2_ops,
2524		},
2525	},
2526};
2527
2528static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2529	.halt_reg = 0x1f014,
2530	.halt_check = BRANCH_HALT_VOTED,
2531	.clkr = {
2532		.enable_reg = 0x7900c,
2533		.enable_mask = BIT(9),
2534		.hw.init = &(struct clk_init_data){
2535			.name = "gcc_qupv3_wrap0_core_2x_clk",
2536			.ops = &clk_branch2_ops,
2537		},
2538	},
2539};
2540
2541static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2542	.halt_reg = 0x1f00c,
2543	.halt_check = BRANCH_HALT_VOTED,
2544	.clkr = {
2545		.enable_reg = 0x7900c,
2546		.enable_mask = BIT(8),
2547		.hw.init = &(struct clk_init_data){
2548			.name = "gcc_qupv3_wrap0_core_clk",
2549			.ops = &clk_branch2_ops,
2550		},
2551	},
2552};
2553
2554static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2555	.halt_reg = 0x1f144,
2556	.halt_check = BRANCH_HALT_VOTED,
2557	.clkr = {
2558		.enable_reg = 0x7900c,
2559		.enable_mask = BIT(10),
2560		.hw.init = &(struct clk_init_data){
2561			.name = "gcc_qupv3_wrap0_s0_clk",
2562			.parent_hws = (const struct clk_hw *[]){
2563				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2564			},
2565			.num_parents = 1,
2566			.flags = CLK_SET_RATE_PARENT,
2567			.ops = &clk_branch2_ops,
2568		},
2569	},
2570};
2571
2572static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2573	.halt_reg = 0x1f274,
2574	.halt_check = BRANCH_HALT_VOTED,
2575	.clkr = {
2576		.enable_reg = 0x7900c,
2577		.enable_mask = BIT(11),
2578		.hw.init = &(struct clk_init_data){
2579			.name = "gcc_qupv3_wrap0_s1_clk",
2580			.parent_hws = (const struct clk_hw *[]){
2581				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2582			},
2583			.num_parents = 1,
2584			.flags = CLK_SET_RATE_PARENT,
2585			.ops = &clk_branch2_ops,
2586		},
2587	},
2588};
2589
2590static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2591	.halt_reg = 0x1f3a4,
2592	.halt_check = BRANCH_HALT_VOTED,
2593	.clkr = {
2594		.enable_reg = 0x7900c,
2595		.enable_mask = BIT(12),
2596		.hw.init = &(struct clk_init_data){
2597			.name = "gcc_qupv3_wrap0_s2_clk",
2598			.parent_hws = (const struct clk_hw *[]){
2599				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2600			},
2601			.num_parents = 1,
2602			.flags = CLK_SET_RATE_PARENT,
2603			.ops = &clk_branch2_ops,
2604		},
2605	},
2606};
2607
2608static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2609	.halt_reg = 0x1f4d4,
2610	.halt_check = BRANCH_HALT_VOTED,
2611	.clkr = {
2612		.enable_reg = 0x7900c,
2613		.enable_mask = BIT(13),
2614		.hw.init = &(struct clk_init_data){
2615			.name = "gcc_qupv3_wrap0_s3_clk",
2616			.parent_hws = (const struct clk_hw *[]){
2617				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2618			},
2619			.num_parents = 1,
2620			.flags = CLK_SET_RATE_PARENT,
2621			.ops = &clk_branch2_ops,
2622		},
2623	},
2624};
2625
2626static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2627	.halt_reg = 0x1f604,
2628	.halt_check = BRANCH_HALT_VOTED,
2629	.clkr = {
2630		.enable_reg = 0x7900c,
2631		.enable_mask = BIT(14),
2632		.hw.init = &(struct clk_init_data){
2633			.name = "gcc_qupv3_wrap0_s4_clk",
2634			.parent_hws = (const struct clk_hw *[]){
2635				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2636			},
2637			.num_parents = 1,
2638			.flags = CLK_SET_RATE_PARENT,
2639			.ops = &clk_branch2_ops,
2640		},
2641	},
2642};
2643
2644static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2645	.halt_reg = 0x1f734,
2646	.halt_check = BRANCH_HALT_VOTED,
2647	.clkr = {
2648		.enable_reg = 0x7900c,
2649		.enable_mask = BIT(15),
2650		.hw.init = &(struct clk_init_data){
2651			.name = "gcc_qupv3_wrap0_s5_clk",
2652			.parent_hws = (const struct clk_hw *[]){
2653				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2654			},
2655			.num_parents = 1,
2656			.flags = CLK_SET_RATE_PARENT,
2657			.ops = &clk_branch2_ops,
2658		},
2659	},
2660};
2661
2662static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2663	.halt_reg = 0x1f004,
2664	.halt_check = BRANCH_HALT_VOTED,
2665	.hwcg_reg = 0x1f004,
2666	.hwcg_bit = 1,
2667	.clkr = {
2668		.enable_reg = 0x7900c,
2669		.enable_mask = BIT(6),
2670		.hw.init = &(struct clk_init_data){
2671			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2672			.ops = &clk_branch2_ops,
2673		},
2674	},
2675};
2676
2677static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2678	.halt_reg = 0x1f008,
2679	.halt_check = BRANCH_HALT_VOTED,
2680	.hwcg_reg = 0x1f008,
2681	.hwcg_bit = 1,
2682	.clkr = {
2683		.enable_reg = 0x7900c,
2684		.enable_mask = BIT(7),
2685		.hw.init = &(struct clk_init_data){
2686			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2687			.ops = &clk_branch2_ops,
2688		},
2689	},
2690};
2691
2692static struct clk_branch gcc_sdcc1_ahb_clk = {
2693	.halt_reg = 0x38008,
2694	.halt_check = BRANCH_HALT,
2695	.clkr = {
2696		.enable_reg = 0x38008,
2697		.enable_mask = BIT(0),
2698		.hw.init = &(struct clk_init_data){
2699			.name = "gcc_sdcc1_ahb_clk",
2700			.ops = &clk_branch2_ops,
2701		},
2702	},
2703};
2704
2705static struct clk_branch gcc_sdcc1_apps_clk = {
2706	.halt_reg = 0x38004,
2707	.halt_check = BRANCH_HALT,
2708	.clkr = {
2709		.enable_reg = 0x38004,
2710		.enable_mask = BIT(0),
2711		.hw.init = &(struct clk_init_data){
2712			.name = "gcc_sdcc1_apps_clk",
2713			.parent_hws = (const struct clk_hw *[]){
2714				&gcc_sdcc1_apps_clk_src.clkr.hw,
2715			},
2716			.num_parents = 1,
2717			.flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */,
2718			.ops = &clk_branch2_ops,
2719		},
2720	},
2721};
2722
2723static struct clk_branch gcc_sdcc1_ice_core_clk = {
2724	.halt_reg = 0x3800c,
2725	.halt_check = BRANCH_HALT,
2726	.hwcg_reg = 0x3800c,
2727	.hwcg_bit = 1,
2728	.clkr = {
2729		.enable_reg = 0x3800c,
2730		.enable_mask = BIT(0),
2731		.hw.init = &(struct clk_init_data){
2732			.name = "gcc_sdcc1_ice_core_clk",
2733			.parent_hws = (const struct clk_hw *[]){
2734				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
2735			},
2736			.num_parents = 1,
2737			.flags = CLK_SET_RATE_PARENT,
2738			.ops = &clk_branch2_ops,
2739		},
2740	},
2741};
2742
2743static struct clk_branch gcc_sdcc2_ahb_clk = {
2744	.halt_reg = 0x1e008,
2745	.halt_check = BRANCH_HALT,
2746	.clkr = {
2747		.enable_reg = 0x1e008,
2748		.enable_mask = BIT(0),
2749		.hw.init = &(struct clk_init_data){
2750			.name = "gcc_sdcc2_ahb_clk",
2751			.ops = &clk_branch2_ops,
2752		},
2753	},
2754};
2755
2756static struct clk_branch gcc_sdcc2_apps_clk = {
2757	.halt_reg = 0x1e004,
2758	.halt_check = BRANCH_HALT,
2759	.clkr = {
2760		.enable_reg = 0x1e004,
2761		.enable_mask = BIT(0),
2762		.hw.init = &(struct clk_init_data){
2763			.name = "gcc_sdcc2_apps_clk",
2764			.parent_hws = (const struct clk_hw *[]){
2765				&gcc_sdcc2_apps_clk_src.clkr.hw,
2766			},
2767			.num_parents = 1,
2768			.flags = CLK_SET_RATE_PARENT,
2769			.ops = &clk_branch2_ops,
2770		},
2771	},
2772};
2773
2774static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2775	.halt_reg = 0x2b06c,
2776	.halt_check = BRANCH_HALT_VOTED,
2777	.hwcg_reg = 0x2b06c,
2778	.hwcg_bit = 1,
2779	.clkr = {
2780		.enable_reg = 0x79004,
2781		.enable_mask = BIT(0),
2782		.hw.init = &(struct clk_init_data){
2783			.name = "gcc_sys_noc_cpuss_ahb_clk",
2784			.flags = CLK_IS_CRITICAL,
2785			.ops = &clk_branch2_ops,
2786		},
2787	},
2788};
2789
2790static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
2791	.halt_reg = 0x45098,
2792	.halt_check = BRANCH_HALT,
2793	.clkr = {
2794		.enable_reg = 0x45098,
2795		.enable_mask = BIT(0),
2796		.hw.init = &(struct clk_init_data){
2797			.name = "gcc_sys_noc_ufs_phy_axi_clk",
2798			.parent_hws = (const struct clk_hw *[]){
2799				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2800			},
2801			.num_parents = 1,
2802			.flags = CLK_SET_RATE_PARENT,
2803			.ops = &clk_branch2_ops,
2804		},
2805	},
2806};
2807
2808static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
2809	.halt_reg = 0x1a080,
2810	.halt_check = BRANCH_HALT,
2811	.hwcg_reg = 0x1a080,
2812	.hwcg_bit = 1,
2813	.clkr = {
2814		.enable_reg = 0x1a080,
2815		.enable_mask = BIT(0),
2816		.hw.init = &(struct clk_init_data){
2817			.name = "gcc_sys_noc_usb3_prim_axi_clk",
2818			.parent_hws = (const struct clk_hw *[]){
2819				&gcc_usb30_prim_master_clk_src.clkr.hw,
2820			},
2821			.num_parents = 1,
2822			.flags = CLK_SET_RATE_PARENT,
2823			.ops = &clk_branch2_ops,
2824		},
2825	},
2826};
2827
2828static struct clk_branch gcc_ufs_clkref_clk = {
2829	.halt_reg = 0x8c000,
2830	.halt_check = BRANCH_HALT,
2831	.clkr = {
2832		.enable_reg = 0x8c000,
2833		.enable_mask = BIT(0),
2834		.hw.init = &(struct clk_init_data){
2835			.name = "gcc_ufs_clkref_clk",
2836			.ops = &clk_branch2_ops,
2837		},
2838	},
2839};
2840
2841static struct clk_branch gcc_ufs_phy_ahb_clk = {
2842	.halt_reg = 0x45014,
2843	.halt_check = BRANCH_HALT,
2844	.hwcg_reg = 0x45014,
2845	.hwcg_bit = 1,
2846	.clkr = {
2847		.enable_reg = 0x45014,
2848		.enable_mask = BIT(0),
2849		.hw.init = &(struct clk_init_data){
2850			.name = "gcc_ufs_phy_ahb_clk",
2851			.ops = &clk_branch2_ops,
2852		},
2853	},
2854};
2855
2856static struct clk_branch gcc_ufs_phy_axi_clk = {
2857	.halt_reg = 0x45010,
2858	.halt_check = BRANCH_HALT,
2859	.hwcg_reg = 0x45010,
2860	.hwcg_bit = 1,
2861	.clkr = {
2862		.enable_reg = 0x45010,
2863		.enable_mask = BIT(0),
2864		.hw.init = &(struct clk_init_data){
2865			.name = "gcc_ufs_phy_axi_clk",
2866			.parent_hws = (const struct clk_hw *[]){
2867				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2868			},
2869			.num_parents = 1,
2870			.flags = CLK_SET_RATE_PARENT,
2871			.ops = &clk_branch2_ops,
2872		},
2873	},
2874};
2875
2876static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2877	.halt_reg = 0x45044,
2878	.halt_check = BRANCH_HALT,
2879	.hwcg_reg = 0x45044,
2880	.hwcg_bit = 1,
2881	.clkr = {
2882		.enable_reg = 0x45044,
2883		.enable_mask = BIT(0),
2884		.hw.init = &(struct clk_init_data){
2885			.name = "gcc_ufs_phy_ice_core_clk",
2886			.parent_hws = (const struct clk_hw *[]){
2887				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2888			},
2889			.num_parents = 1,
2890			.flags = CLK_SET_RATE_PARENT,
2891			.ops = &clk_branch2_ops,
2892		},
2893	},
2894};
2895
2896static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2897	.halt_reg = 0x45078,
2898	.halt_check = BRANCH_HALT,
2899	.hwcg_reg = 0x45078,
2900	.hwcg_bit = 1,
2901	.clkr = {
2902		.enable_reg = 0x45078,
2903		.enable_mask = BIT(0),
2904		.hw.init = &(struct clk_init_data){
2905			.name = "gcc_ufs_phy_phy_aux_clk",
2906			.parent_hws = (const struct clk_hw *[]){
2907				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2908			},
2909			.num_parents = 1,
2910			.flags = CLK_SET_RATE_PARENT,
2911			.ops = &clk_branch2_ops,
2912		},
2913	},
2914};
2915
2916static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2917	.halt_reg = 0x4501c,
2918	.halt_check = BRANCH_HALT_SKIP,
2919	.clkr = {
2920		.enable_reg = 0x4501c,
2921		.enable_mask = BIT(0),
2922		.hw.init = &(struct clk_init_data){
2923			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2924			.ops = &clk_branch2_ops,
2925		},
2926	},
2927};
2928
2929static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2930	.halt_reg = 0x45018,
2931	.halt_check = BRANCH_HALT_SKIP,
2932	.clkr = {
2933		.enable_reg = 0x45018,
2934		.enable_mask = BIT(0),
2935		.hw.init = &(struct clk_init_data){
2936			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2937			.ops = &clk_branch2_ops,
2938		},
2939	},
2940};
2941
2942static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2943	.halt_reg = 0x45040,
2944	.halt_check = BRANCH_HALT,
2945	.hwcg_reg = 0x45040,
2946	.hwcg_bit = 1,
2947	.clkr = {
2948		.enable_reg = 0x45040,
2949		.enable_mask = BIT(0),
2950		.hw.init = &(struct clk_init_data){
2951			.name = "gcc_ufs_phy_unipro_core_clk",
2952			.parent_hws = (const struct clk_hw *[]){
2953				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2954			},
2955			.num_parents = 1,
2956			.flags = CLK_SET_RATE_PARENT,
2957			.ops = &clk_branch2_ops,
2958		},
2959	},
2960};
2961
2962static struct clk_branch gcc_usb30_prim_master_clk = {
2963	.halt_reg = 0x1a010,
2964	.halt_check = BRANCH_HALT,
2965	.clkr = {
2966		.enable_reg = 0x1a010,
2967		.enable_mask = BIT(0),
2968		.hw.init = &(struct clk_init_data){
2969			.name = "gcc_usb30_prim_master_clk",
2970			.parent_hws = (const struct clk_hw *[]){
2971				&gcc_usb30_prim_master_clk_src.clkr.hw,
2972			},
2973			.num_parents = 1,
2974			.flags = CLK_SET_RATE_PARENT,
2975			.ops = &clk_branch2_ops,
2976		},
2977	},
2978};
2979
2980static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2981	.halt_reg = 0x1a018,
2982	.halt_check = BRANCH_HALT,
2983	.clkr = {
2984		.enable_reg = 0x1a018,
2985		.enable_mask = BIT(0),
2986		.hw.init = &(struct clk_init_data){
2987			.name = "gcc_usb30_prim_mock_utmi_clk",
2988			.parent_hws = (const struct clk_hw *[]){
2989				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2990			},
2991			.num_parents = 1,
2992			.flags = CLK_SET_RATE_PARENT,
2993			.ops = &clk_branch2_ops,
2994		},
2995	},
2996};
2997
2998static struct clk_branch gcc_usb30_prim_sleep_clk = {
2999	.halt_reg = 0x1a014,
3000	.halt_check = BRANCH_HALT,
3001	.clkr = {
3002		.enable_reg = 0x1a014,
3003		.enable_mask = BIT(0),
3004		.hw.init = &(struct clk_init_data){
3005			.name = "gcc_usb30_prim_sleep_clk",
3006			.ops = &clk_branch2_ops,
3007		},
3008	},
3009};
3010
3011static struct clk_branch gcc_usb3_prim_clkref_clk = {
3012	.halt_reg = 0x9f000,
3013	.halt_check = BRANCH_HALT,
3014	.clkr = {
3015		.enable_reg = 0x9f000,
3016		.enable_mask = BIT(0),
3017		.hw.init = &(struct clk_init_data){
3018			.name = "gcc_usb3_prim_clkref_clk",
3019			.ops = &clk_branch2_ops,
3020		},
3021	},
3022};
3023
3024static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3025	.halt_reg = 0x1a054,
3026	.halt_check = BRANCH_HALT,
3027	.clkr = {
3028		.enable_reg = 0x1a054,
3029		.enable_mask = BIT(0),
3030		.hw.init = &(struct clk_init_data){
3031			.name = "gcc_usb3_prim_phy_com_aux_clk",
3032			.parent_hws = (const struct clk_hw *[]){
3033				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3034			},
3035			.num_parents = 1,
3036			.flags = CLK_SET_RATE_PARENT,
3037			.ops = &clk_branch2_ops,
3038		},
3039	},
3040};
3041
3042static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3043	.halt_reg = 0x1a058,
3044	.halt_check = BRANCH_HALT_SKIP,
3045	.hwcg_reg = 0x1a058,
3046	.hwcg_bit = 1,
3047	.clkr = {
3048		.enable_reg = 0x1a058,
3049		.enable_mask = BIT(0),
3050		.hw.init = &(struct clk_init_data){
3051			.name = "gcc_usb3_prim_phy_pipe_clk",
3052			.ops = &clk_branch2_ops,
3053		},
3054	},
3055};
3056
3057static struct clk_branch gcc_vcodec0_axi_clk = {
3058	.halt_reg = 0x6e008,
3059	.halt_check = BRANCH_HALT,
3060	.clkr = {
3061		.enable_reg = 0x6e008,
3062		.enable_mask = BIT(0),
3063		.hw.init = &(struct clk_init_data){
3064			.name = "gcc_vcodec0_axi_clk",
3065			.ops = &clk_branch2_ops,
3066		},
3067	},
3068};
3069
3070static struct clk_branch gcc_venus_ahb_clk = {
3071	.halt_reg = 0x6e010,
3072	.halt_check = BRANCH_HALT,
3073	.clkr = {
3074		.enable_reg = 0x6e010,
3075		.enable_mask = BIT(0),
3076		.hw.init = &(struct clk_init_data){
3077			.name = "gcc_venus_ahb_clk",
3078			.ops = &clk_branch2_ops,
3079		},
3080	},
3081};
3082
3083static struct clk_branch gcc_venus_ctl_axi_clk = {
3084	.halt_reg = 0x6e004,
3085	.halt_check = BRANCH_HALT,
3086	.clkr = {
3087		.enable_reg = 0x6e004,
3088		.enable_mask = BIT(0),
3089		.hw.init = &(struct clk_init_data){
3090			.name = "gcc_venus_ctl_axi_clk",
3091			.ops = &clk_branch2_ops,
3092		},
3093	},
3094};
3095
3096static struct clk_branch gcc_video_ahb_clk = {
3097	.halt_reg = 0x17004,
3098	.halt_check = BRANCH_HALT,
3099	.hwcg_reg = 0x17004,
3100	.hwcg_bit = 1,
3101	.clkr = {
3102		.enable_reg = 0x17004,
3103		.enable_mask = BIT(0),
3104		.hw.init = &(struct clk_init_data){
3105			.name = "gcc_video_ahb_clk",
3106			.ops = &clk_branch2_ops,
3107		},
3108	},
3109};
3110
3111static struct clk_branch gcc_video_axi0_clk = {
3112	.halt_reg = 0x1701c,
3113	.halt_check = BRANCH_HALT,
3114	.hwcg_reg = 0x1701c,
3115	.hwcg_bit = 1,
3116	.clkr = {
3117		.enable_reg = 0x1701c,
3118		.enable_mask = BIT(0),
3119		.hw.init = &(struct clk_init_data){
3120			.name = "gcc_video_axi0_clk",
3121			.ops = &clk_branch2_ops,
3122		},
3123	},
3124};
3125
3126static struct clk_branch gcc_video_throttle_core_clk = {
3127	.halt_reg = 0x17068,
3128	.halt_check = BRANCH_HALT_VOTED,
3129	.hwcg_reg = 0x17068,
3130	.hwcg_bit = 1,
3131	.clkr = {
3132		.enable_reg = 0x79004,
3133		.enable_mask = BIT(28),
3134		.hw.init = &(struct clk_init_data){
3135			.name = "gcc_video_throttle_core_clk",
3136			.ops = &clk_branch2_ops,
3137		},
3138	},
3139};
3140
3141static struct clk_branch gcc_video_vcodec0_sys_clk = {
3142	.halt_reg = 0x580a4,
3143	.halt_check = BRANCH_HALT_DELAY,
3144	.hwcg_reg = 0x580a4,
3145	.hwcg_bit = 1,
3146	.clkr = {
3147		.enable_reg = 0x580a4,
3148		.enable_mask = BIT(0),
3149		.hw.init = &(struct clk_init_data){
3150			.name = "gcc_video_vcodec0_sys_clk",
3151			.parent_hws = (const struct clk_hw *[]){
3152				&gcc_video_venus_clk_src.clkr.hw,
3153			},
3154			.num_parents = 1,
3155			.flags = CLK_SET_RATE_PARENT,
3156			.ops = &clk_branch2_ops,
3157		},
3158	},
3159};
3160
3161static struct clk_branch gcc_video_venus_ctl_clk = {
3162	.halt_reg = 0x5808c,
3163	.halt_check = BRANCH_HALT,
3164	.clkr = {
3165		.enable_reg = 0x5808c,
3166		.enable_mask = BIT(0),
3167		.hw.init = &(struct clk_init_data){
3168			.name = "gcc_video_venus_ctl_clk",
3169			.parent_hws = (const struct clk_hw *[]){
3170				&gcc_video_venus_clk_src.clkr.hw,
3171			},
3172			.num_parents = 1,
3173			.flags = CLK_SET_RATE_PARENT,
3174			.ops = &clk_branch2_ops,
3175		},
3176	},
3177};
3178
3179static struct clk_branch gcc_video_xo_clk = {
3180	.halt_reg = 0x17024,
3181	.halt_check = BRANCH_HALT,
3182	.clkr = {
3183		.enable_reg = 0x17024,
3184		.enable_mask = BIT(0),
3185		.hw.init = &(struct clk_init_data){
3186			.name = "gcc_video_xo_clk",
3187			.ops = &clk_branch2_ops,
3188		},
3189	},
3190};
3191
3192static struct gdsc gcc_camss_top_gdsc = {
3193	.gdscr = 0x58004,
3194	.pd = {
3195		.name = "gcc_camss_top",
3196	},
3197	.pwrsts = PWRSTS_OFF_ON,
3198};
3199
3200static struct gdsc gcc_ufs_phy_gdsc = {
3201	.gdscr = 0x45004,
3202	.pd = {
3203		.name = "gcc_ufs_phy",
3204	},
3205	.pwrsts = PWRSTS_OFF_ON,
3206};
3207
3208static struct gdsc gcc_usb30_prim_gdsc = {
3209	.gdscr = 0x1a004,
3210	.pd = {
3211		.name = "gcc_usb30_prim",
3212	},
3213	.pwrsts = PWRSTS_OFF_ON,
3214};
3215
3216static struct gdsc gcc_vcodec0_gdsc = {
3217	.gdscr = 0x58098,
3218	.pd = {
3219		.name = "gcc_vcodec0",
3220	},
3221	.pwrsts = PWRSTS_OFF_ON,
3222};
3223
3224static struct gdsc gcc_venus_gdsc = {
3225	.gdscr = 0x5807c,
3226	.pd = {
3227		.name = "gcc_venus",
3228	},
3229	.pwrsts = PWRSTS_OFF_ON,
3230};
3231
3232static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3233	.gdscr = 0x7d060,
3234	.pd = {
3235		.name = "hlos1_vote_turing_mmu_tbu1",
3236	},
3237	.pwrsts = PWRSTS_OFF_ON,
3238	.flags = VOTABLE,
3239};
3240
3241static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3242	.gdscr = 0x7d07c,
3243	.pd = {
3244		.name = "hlos1_vote_turing_mmu_tbu0",
3245	},
3246	.pwrsts = PWRSTS_OFF_ON,
3247	.flags = VOTABLE,
3248};
3249
3250static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
3251	.gdscr = 0x7d074,
3252	.pd = {
3253		.name = "hlos1_vote_mm_snoc_mmu_tbu_rt",
3254	},
3255	.pwrsts = PWRSTS_OFF_ON,
3256	.flags = VOTABLE,
3257};
3258
3259static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
3260	.gdscr = 0x7d078,
3261	.pd = {
3262		.name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",
3263	},
3264	.pwrsts = PWRSTS_OFF_ON,
3265	.flags = VOTABLE,
3266};
3267
3268static struct clk_regmap *gcc_sm6115_clocks[] = {
3269	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
3270	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
3271	[GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
3272	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3273	[GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
3274	[GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
3275	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3276	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3277	[GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
3278	[GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
3279	[GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
3280	[GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
3281	[GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
3282	[GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
3283	[GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
3284	[GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
3285	[GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,
3286	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3287	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
3288	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3289	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
3290	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
3291	[GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
3292	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3293	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
3294	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3295	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
3296	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3297	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
3298	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
3299	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
3300	[GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
3301	[GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
3302	[GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
3303	[GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
3304	[GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
3305	[GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
3306	[GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
3307	[GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
3308	[GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
3309	[GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
3310	[GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
3311	[GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
3312	[GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
3313	[GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
3314	[GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
3315	[GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
3316	[GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,
3317	[GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,
3318	[GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,
3319	[GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,
3320	[GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,
3321	[GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
3322	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3323	[GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
3324	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3325	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3326	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3327	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3328	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3329	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3330	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
3331	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3332	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3333	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3334	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3335	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3336	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3337	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3338	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3339	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3340	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3341	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3342	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3343	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3344	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
3345	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3346	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3347	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3348	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3349	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3350	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3351	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3352	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3353	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
3354	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3355	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3356	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3357	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3358	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3359	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3360	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3361	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3362	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3363	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3364	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3365	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3366	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3367	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3368	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3369	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3370	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3371	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3372	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3373	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
3374	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3375	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
3376	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3377	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3378	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3379	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3380	[GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
3381	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
3382	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3383	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3384	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3385	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3386	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3387	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3388	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3389	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3390	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3391	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3392	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3393	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3394		&gcc_ufs_phy_unipro_core_clk_src.clkr,
3395	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3396	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3397	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3398	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3399		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
3400	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =
3401		&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3402	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3403	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3404	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3405	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3406	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3407	[GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
3408	[GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
3409	[GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
3410	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3411	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3412	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
3413	[GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
3414	[GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
3415	[GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
3416	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3417	[GPLL0] = &gpll0.clkr,
3418	[GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
3419	[GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
3420	[GPLL10] = &gpll10.clkr,
3421	[GPLL10_OUT_MAIN] = &gpll10_out_main.clkr,
3422	[GPLL11] = &gpll11.clkr,
3423	[GPLL11_OUT_MAIN] = &gpll11_out_main.clkr,
3424	[GPLL3] = &gpll3.clkr,
3425	[GPLL4] = &gpll4.clkr,
3426	[GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
3427	[GPLL6] = &gpll6.clkr,
3428	[GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
3429	[GPLL7] = &gpll7.clkr,
3430	[GPLL7_OUT_MAIN] = &gpll7_out_main.clkr,
3431	[GPLL8] = &gpll8.clkr,
3432	[GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
3433	[GPLL9] = &gpll9.clkr,
3434	[GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
3435};
3436
3437static const struct qcom_reset_map gcc_sm6115_resets[] = {
3438	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
3439	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
3440	[GCC_SDCC1_BCR] = { 0x38000 },
3441	[GCC_SDCC2_BCR] = { 0x1e000 },
3442	[GCC_UFS_PHY_BCR] = { 0x45000 },
3443	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
3444	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
3445	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
3446	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
3447	[GCC_VCODEC0_BCR] = { 0x58094 },
3448	[GCC_VENUS_BCR] = { 0x58078 },
3449	[GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
3450};
3451
3452static struct gdsc *gcc_sm6115_gdscs[] = {
3453	[GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
3454	[GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3455	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3456	[GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
3457	[GCC_VENUS_GDSC] = &gcc_venus_gdsc,
3458	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3459	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3460	[HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
3461	[HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
3462};
3463
3464static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3465	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3466	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3467	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3468	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3469	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3470	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3471};
3472
3473static const struct regmap_config gcc_sm6115_regmap_config = {
3474	.reg_bits = 32,
3475	.reg_stride = 4,
3476	.val_bits = 32,
3477	.max_register = 0xc7000,
3478	.fast_io = true,
3479};
3480
3481static const struct qcom_cc_desc gcc_sm6115_desc = {
3482	.config = &gcc_sm6115_regmap_config,
3483	.clks = gcc_sm6115_clocks,
3484	.num_clks = ARRAY_SIZE(gcc_sm6115_clocks),
3485	.resets = gcc_sm6115_resets,
3486	.num_resets = ARRAY_SIZE(gcc_sm6115_resets),
3487	.gdscs = gcc_sm6115_gdscs,
3488	.num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs),
3489};
3490
3491static const struct of_device_id gcc_sm6115_match_table[] = {
3492	{ .compatible = "qcom,gcc-sm6115" },
3493	{ }
3494};
3495MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table);
3496
3497static int gcc_sm6115_probe(struct platform_device *pdev)
3498{
3499	struct regmap *regmap;
3500	int ret;
3501
3502	regmap = qcom_cc_map(pdev, &gcc_sm6115_desc);
3503	if (IS_ERR(regmap))
3504		return PTR_ERR(regmap);
3505
3506	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3507			ARRAY_SIZE(gcc_dfs_clocks));
3508	if (ret)
3509		return ret;
3510
3511	clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
3512	clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
3513	clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
3514	clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
3515
3516	return qcom_cc_really_probe(pdev, &gcc_sm6115_desc, regmap);
3517}
3518
3519static struct platform_driver gcc_sm6115_driver = {
3520	.probe = gcc_sm6115_probe,
3521	.driver = {
3522		.name = "gcc-sm6115",
3523		.of_match_table = gcc_sm6115_match_table,
3524	},
3525};
3526
3527static int __init gcc_sm6115_init(void)
3528{
3529	return platform_driver_register(&gcc_sm6115_driver);
3530}
3531subsys_initcall(gcc_sm6115_init);
3532
3533static void __exit gcc_sm6115_exit(void)
3534{
3535	platform_driver_unregister(&gcc_sm6115_driver);
3536}
3537module_exit(gcc_sm6115_exit);
3538
3539MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver");
3540MODULE_LICENSE("GPL v2");
3541MODULE_ALIAS("platform:gcc-sm6115");