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