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