1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
4 */
5
6#include <linux/kernel.h>
7#include <linux/err.h>
8#include <linux/module.h>
9#include <linux/platform_device.h>
10#include <linux/of.h>
11#include <linux/clk-provider.h>
12#include <linux/regmap.h>
13#include <linux/reset-controller.h>
14
15#include <dt-bindings/clock/qcom,gcc-sm6125.h>
16
17#include "clk-alpha-pll.h"
18#include "clk-branch.h"
19#include "clk-rcg.h"
20#include "clk-regmap.h"
21#include "common.h"
22#include "gdsc.h"
23#include "reset.h"
24
25enum {
26	P_BI_TCXO,
27	P_GPLL0_OUT_AUX2,
28	P_GPLL0_OUT_EARLY,
29	P_GPLL3_OUT_EARLY,
30	P_GPLL4_OUT_MAIN,
31	P_GPLL5_OUT_MAIN,
32	P_GPLL6_OUT_EARLY,
33	P_GPLL6_OUT_MAIN,
34	P_GPLL7_OUT_MAIN,
35	P_GPLL8_OUT_EARLY,
36	P_GPLL8_OUT_MAIN,
37	P_GPLL9_OUT_MAIN,
38	P_SLEEP_CLK,
39};
40
41static struct clk_alpha_pll gpll0_out_early = {
42	.offset = 0x0,
43	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
44	.clkr = {
45		.enable_reg = 0x79000,
46		.enable_mask = BIT(0),
47		.hw.init = &(struct clk_init_data){
48			.name = "gpll0_out_early",
49			.parent_data = &(const struct clk_parent_data){
50				.fw_name = "bi_tcxo",
51			},
52			.num_parents = 1,
53			.ops = &clk_alpha_pll_ops,
54		},
55	},
56};
57
58static struct clk_fixed_factor gpll0_out_aux2 = {
59	.mult = 1,
60	.div = 2,
61	.hw.init = &(struct clk_init_data){
62		.name = "gpll0_out_aux2",
63		.parent_hws = (const struct clk_hw*[]){
64			&gpll0_out_early.clkr.hw,
65		},
66		.num_parents = 1,
67		.ops = &clk_fixed_factor_ops,
68	},
69};
70
71static struct clk_fixed_factor gpll0_out_main = {
72	.mult = 1,
73	.div = 2,
74	.hw.init = &(struct clk_init_data){
75		.name = "gpll0_out_main",
76		.parent_hws = (const struct clk_hw*[]){
77			&gpll0_out_early.clkr.hw,
78		},
79		.num_parents = 1,
80		.ops = &clk_fixed_factor_ops,
81	},
82};
83
84static struct clk_alpha_pll gpll3_out_early = {
85	.offset = 0x3000,
86	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
87	.clkr = {
88		.enable_reg = 0x79000,
89		.enable_mask = BIT(3),
90		.hw.init = &(struct clk_init_data){
91			.name = "gpll3_out_early",
92			.parent_data = &(const struct clk_parent_data){
93				.fw_name = "bi_tcxo",
94			},
95			.num_parents = 1,
96			.ops = &clk_alpha_pll_ops,
97		},
98	},
99};
100
101static struct clk_alpha_pll gpll4_out_main = {
102	.offset = 0x4000,
103	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
104	.clkr = {
105		.enable_reg = 0x79000,
106		.enable_mask = BIT(4),
107		.hw.init = &(struct clk_init_data){
108			.name = "gpll4_out_main",
109			.parent_data = &(const struct clk_parent_data){
110				.fw_name = "bi_tcxo",
111			},
112			.num_parents = 1,
113			.ops = &clk_alpha_pll_ops,
114		},
115	},
116};
117
118static struct clk_alpha_pll gpll5_out_main = {
119	.offset = 0x5000,
120	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
121	.clkr = {
122		.enable_reg = 0x79000,
123		.enable_mask = BIT(5),
124		.hw.init = &(struct clk_init_data){
125			.name = "gpll5_out_main",
126			.parent_data = &(const struct clk_parent_data){
127				.fw_name = "bi_tcxo",
128			},
129			.num_parents = 1,
130			.ops = &clk_alpha_pll_ops,
131		},
132	},
133};
134
135static struct clk_alpha_pll gpll6_out_early = {
136	.offset = 0x6000,
137	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
138	.clkr = {
139		.enable_reg = 0x79000,
140		.enable_mask = BIT(6),
141		.hw.init = &(struct clk_init_data){
142			.name = "gpll6_out_early",
143			.parent_data = &(const struct clk_parent_data){
144				.fw_name = "bi_tcxo",
145			},
146			.num_parents = 1,
147			.ops = &clk_alpha_pll_ops,
148		},
149	},
150};
151
152static struct clk_fixed_factor gpll6_out_main = {
153	.mult = 1,
154	.div = 2,
155	.hw.init = &(struct clk_init_data){
156		.name = "gpll6_out_main",
157		.parent_hws = (const struct clk_hw*[]){
158			&gpll6_out_early.clkr.hw,
159		},
160		.num_parents = 1,
161		.ops = &clk_fixed_factor_ops,
162	},
163};
164
165static struct clk_alpha_pll gpll7_out_early = {
166	.offset = 0x7000,
167	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
168	.clkr = {
169		.enable_reg = 0x79000,
170		.enable_mask = BIT(7),
171		.hw.init = &(struct clk_init_data){
172			.name = "gpll7_out_early",
173			.parent_data = &(const struct clk_parent_data){
174				.fw_name = "bi_tcxo",
175			},
176			.num_parents = 1,
177			.ops = &clk_alpha_pll_ops,
178		},
179	},
180};
181
182static struct clk_fixed_factor gpll7_out_main = {
183	.mult = 1,
184	.div = 2,
185	.hw.init = &(struct clk_init_data){
186		.name = "gpll7_out_main",
187		.parent_hws = (const struct clk_hw*[]){
188			&gpll7_out_early.clkr.hw,
189		},
190		.num_parents = 1,
191		.ops = &clk_fixed_factor_ops,
192	},
193};
194
195static struct clk_alpha_pll gpll8_out_early = {
196	.offset = 0x8000,
197	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
198	.clkr = {
199		.enable_reg = 0x79000,
200		.enable_mask = BIT(8),
201		.hw.init = &(struct clk_init_data){
202			.name = "gpll8_out_early",
203			.parent_data = &(const struct clk_parent_data){
204				.fw_name = "bi_tcxo",
205			},
206			.num_parents = 1,
207			.ops = &clk_alpha_pll_ops,
208		},
209	},
210};
211
212static struct clk_fixed_factor gpll8_out_main = {
213	.mult = 1,
214	.div = 2,
215	.hw.init = &(struct clk_init_data){
216		.name = "gpll8_out_main",
217		.parent_hws = (const struct clk_hw*[]){
218			&gpll8_out_early.clkr.hw,
219		},
220		.num_parents = 1,
221		.ops = &clk_fixed_factor_ops,
222	},
223};
224
225static struct clk_alpha_pll gpll9_out_early = {
226	.offset = 0x9000,
227	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
228	.clkr = {
229		.enable_reg = 0x79000,
230		.enable_mask = BIT(9),
231		.hw.init = &(struct clk_init_data){
232			.name = "gpll9_out_early",
233			.parent_data = &(const struct clk_parent_data){
234				.fw_name = "bi_tcxo",
235			},
236			.num_parents = 1,
237			.ops = &clk_alpha_pll_ops,
238		},
239	},
240};
241
242static struct clk_fixed_factor gpll9_out_main = {
243	.mult = 1,
244	.div = 2,
245	.hw.init = &(struct clk_init_data){
246		.name = "gpll9_out_main",
247		.parent_hws = (const struct clk_hw*[]){
248			&gpll9_out_early.clkr.hw,
249		},
250		.num_parents = 1,
251		.ops = &clk_fixed_factor_ops,
252	},
253};
254
255static const struct parent_map gcc_parent_map_0[] = {
256	{ P_BI_TCXO, 0 },
257	{ P_GPLL0_OUT_EARLY, 1 },
258	{ P_GPLL0_OUT_AUX2, 2 },
259};
260
261static const struct clk_parent_data gcc_parent_data_0[] = {
262	{ .fw_name = "bi_tcxo" },
263	{ .hw = &gpll0_out_early.clkr.hw },
264	{ .hw = &gpll0_out_aux2.hw },
265};
266
267static const struct parent_map gcc_parent_map_1[] = {
268	{ P_BI_TCXO, 0 },
269	{ P_GPLL0_OUT_EARLY, 1 },
270	{ P_GPLL0_OUT_AUX2, 2 },
271	{ P_GPLL6_OUT_MAIN, 4 },
272};
273
274static const struct clk_parent_data gcc_parent_data_1[] = {
275	{ .fw_name = "bi_tcxo" },
276	{ .hw = &gpll0_out_early.clkr.hw },
277	{ .hw = &gpll0_out_aux2.hw },
278	{ .hw = &gpll6_out_main.hw },
279};
280
281static const struct parent_map gcc_parent_map_2[] = {
282	{ P_BI_TCXO, 0 },
283	{ P_GPLL0_OUT_EARLY, 1 },
284	{ P_GPLL0_OUT_AUX2, 2 },
285	{ P_SLEEP_CLK, 5 },
286};
287
288static const struct clk_parent_data gcc_parent_data_2[] = {
289	{ .fw_name = "bi_tcxo" },
290	{ .hw = &gpll0_out_early.clkr.hw },
291	{ .hw = &gpll0_out_aux2.hw },
292	{ .fw_name = "sleep_clk" },
293};
294
295static const struct parent_map gcc_parent_map_3[] = {
296	{ P_BI_TCXO, 0 },
297	{ P_GPLL0_OUT_EARLY, 1 },
298	{ P_GPLL5_OUT_MAIN, 3 },
299	{ P_GPLL4_OUT_MAIN, 5 },
300};
301
302static const struct clk_parent_data gcc_parent_data_3[] = {
303	{ .fw_name = "bi_tcxo" },
304	{ .hw = &gpll0_out_early.clkr.hw },
305	{ .hw = &gpll5_out_main.clkr.hw },
306	{ .hw = &gpll4_out_main.clkr.hw },
307};
308
309static const struct parent_map gcc_parent_map_4[] = {
310	{ P_BI_TCXO, 0 },
311	{ P_GPLL0_OUT_EARLY, 1 },
312	{ P_GPLL9_OUT_MAIN, 2 },
313};
314
315static const struct clk_parent_data gcc_parent_data_4[] = {
316	{ .fw_name = "bi_tcxo" },
317	{ .hw = &gpll0_out_early.clkr.hw },
318	{ .hw = &gpll9_out_main.hw },
319};
320
321static const struct parent_map gcc_parent_map_5[] = {
322	{ P_BI_TCXO, 0 },
323	{ P_GPLL0_OUT_EARLY, 1 },
324};
325
326static const struct clk_parent_data gcc_parent_data_5[] = {
327	{ .fw_name = "bi_tcxo" },
328	{ .hw = &gpll0_out_early.clkr.hw },
329};
330
331static const struct parent_map gcc_parent_map_6[] = {
332	{ P_BI_TCXO, 0 },
333	{ P_GPLL0_OUT_EARLY, 1 },
334	{ P_GPLL4_OUT_MAIN, 5 },
335};
336
337static const struct clk_parent_data gcc_parent_data_6[] = {
338	{ .fw_name = "bi_tcxo" },
339	{ .hw = &gpll0_out_early.clkr.hw },
340	{ .hw = &gpll4_out_main.clkr.hw },
341};
342
343static const struct parent_map gcc_parent_map_7[] = {
344	{ P_BI_TCXO, 0 },
345	{ P_GPLL0_OUT_EARLY, 1 },
346	{ P_SLEEP_CLK, 5 },
347};
348
349static const struct clk_parent_data gcc_parent_data_7[] = {
350	{ .fw_name = "bi_tcxo" },
351	{ .hw = &gpll0_out_early.clkr.hw },
352	{ .fw_name = "sleep_clk" },
353};
354
355static const struct parent_map gcc_parent_map_8[] = {
356	{ P_BI_TCXO, 0 },
357	{ P_GPLL0_OUT_EARLY, 1 },
358	{ P_GPLL9_OUT_MAIN, 2 },
359	{ P_GPLL6_OUT_EARLY, 3 },
360	{ P_GPLL8_OUT_MAIN, 4 },
361	{ P_GPLL4_OUT_MAIN, 5 },
362	{ P_GPLL3_OUT_EARLY, 6 },
363};
364
365static const struct clk_parent_data gcc_parent_data_8[] = {
366	{ .fw_name = "bi_tcxo" },
367	{ .hw = &gpll0_out_early.clkr.hw },
368	{ .hw = &gpll9_out_main.hw },
369	{ .hw = &gpll6_out_early.clkr.hw },
370	{ .hw = &gpll8_out_main.hw },
371	{ .hw = &gpll4_out_main.clkr.hw },
372	{ .hw = &gpll3_out_early.clkr.hw },
373};
374
375static const struct parent_map gcc_parent_map_9[] = {
376	{ P_BI_TCXO, 0 },
377	{ P_GPLL0_OUT_EARLY, 1 },
378	{ P_GPLL8_OUT_MAIN, 4 },
379};
380
381static const struct clk_parent_data gcc_parent_data_9[] = {
382	{ .fw_name = "bi_tcxo" },
383	{ .hw = &gpll0_out_early.clkr.hw },
384	{ .hw = &gpll8_out_main.hw },
385};
386
387static const struct parent_map gcc_parent_map_10[] = {
388	{ P_BI_TCXO, 0 },
389	{ P_GPLL0_OUT_EARLY, 1 },
390	{ P_GPLL9_OUT_MAIN, 2 },
391	{ P_GPLL6_OUT_EARLY, 3 },
392	{ P_GPLL8_OUT_MAIN, 4 },
393	{ P_GPLL3_OUT_EARLY, 6 },
394};
395
396static const struct clk_parent_data gcc_parent_data_10[] = {
397	{ .fw_name = "bi_tcxo" },
398	{ .hw = &gpll0_out_early.clkr.hw },
399	{ .hw = &gpll9_out_main.hw },
400	{ .hw = &gpll6_out_early.clkr.hw },
401	{ .hw = &gpll8_out_main.hw },
402	{ .hw = &gpll3_out_early.clkr.hw },
403};
404
405static const struct parent_map gcc_parent_map_11[] = {
406	{ P_BI_TCXO, 0 },
407	{ P_GPLL0_OUT_EARLY, 1 },
408	{ P_GPLL8_OUT_EARLY, 4 },
409	{ P_GPLL4_OUT_MAIN, 5 },
410};
411
412static const struct clk_parent_data gcc_parent_data_11[] = {
413	{ .fw_name = "bi_tcxo" },
414	{ .hw = &gpll0_out_early.clkr.hw },
415	{ .hw = &gpll8_out_early.clkr.hw },
416	{ .hw = &gpll4_out_main.clkr.hw },
417};
418
419static const struct parent_map gcc_parent_map_12[] = {
420	{ P_BI_TCXO, 0 },
421	{ P_GPLL0_OUT_EARLY, 1 },
422	{ P_GPLL6_OUT_EARLY, 3 },
423	{ P_GPLL8_OUT_EARLY, 4 },
424};
425
426static const struct clk_parent_data gcc_parent_data_12[] = {
427	{ .fw_name = "bi_tcxo" },
428	{ .hw = &gpll0_out_early.clkr.hw },
429	{ .hw = &gpll6_out_early.clkr.hw },
430	{ .hw = &gpll8_out_early.clkr.hw },
431};
432
433static const struct parent_map gcc_parent_map_13[] = {
434	{ P_BI_TCXO, 0 },
435	{ P_GPLL0_OUT_EARLY, 1 },
436	{ P_GPLL0_OUT_AUX2, 2 },
437	{ P_GPLL7_OUT_MAIN, 3 },
438	{ P_GPLL4_OUT_MAIN, 5 },
439};
440
441static const struct clk_parent_data gcc_parent_data_13[] = {
442	{ .fw_name = "bi_tcxo" },
443	{ .hw = &gpll0_out_early.clkr.hw },
444	{ .hw = &gpll0_out_aux2.hw },
445	{ .hw = &gpll7_out_main.hw },
446	{ .hw = &gpll4_out_main.clkr.hw },
447};
448
449static const struct parent_map gcc_parent_map_14[] = {
450	{ P_BI_TCXO, 0 },
451	{ P_SLEEP_CLK, 5 },
452};
453
454static const struct clk_parent_data gcc_parent_data_14[] = {
455	{ .fw_name = "bi_tcxo" },
456	{ .fw_name = "sleep_clk" },
457};
458
459static const struct freq_tbl ftbl_gcc_camss_ahb_clk_src[] = {
460	F(19200000, P_BI_TCXO, 1, 0, 0),
461	F(40000000, P_GPLL8_OUT_MAIN, 12, 0, 0),
462	F(80000000, P_GPLL8_OUT_MAIN, 6, 0, 0),
463	{ }
464};
465
466static struct clk_rcg2 gcc_camss_ahb_clk_src = {
467	.cmd_rcgr = 0x56088,
468	.mnd_width = 0,
469	.hid_width = 5,
470	.parent_map = gcc_parent_map_9,
471	.freq_tbl = ftbl_gcc_camss_ahb_clk_src,
472	.clkr.hw.init = &(struct clk_init_data){
473		.name = "gcc_camss_ahb_clk_src",
474		.parent_data = gcc_parent_data_9,
475		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
476		.ops = &clk_rcg2_ops,
477	},
478};
479
480static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
481	F(37500000, P_GPLL0_OUT_EARLY, 16, 0, 0),
482	F(50000000, P_GPLL0_OUT_EARLY, 12, 0, 0),
483	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
484	{ }
485};
486
487static struct clk_rcg2 gcc_camss_cci_clk_src = {
488	.cmd_rcgr = 0x52004,
489	.mnd_width = 8,
490	.hid_width = 5,
491	.parent_map = gcc_parent_map_5,
492	.freq_tbl = ftbl_gcc_camss_cci_clk_src,
493	.clkr.hw.init = &(struct clk_init_data){
494		.name = "gcc_camss_cci_clk_src",
495		.parent_data = gcc_parent_data_5,
496		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
497		.ops = &clk_rcg2_ops,
498	},
499};
500
501static const struct freq_tbl ftbl_gcc_camss_cpp_clk_src[] = {
502	F(120000000, P_GPLL8_OUT_MAIN, 4, 0, 0),
503	F(240000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
504	F(320000000, P_GPLL8_OUT_MAIN, 1.5, 0, 0),
505	F(480000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
506	F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
507	{ }
508};
509
510static struct clk_rcg2 gcc_camss_cpp_clk_src = {
511	.cmd_rcgr = 0x560c8,
512	.mnd_width = 0,
513	.hid_width = 5,
514	.parent_map = gcc_parent_map_10,
515	.freq_tbl = ftbl_gcc_camss_cpp_clk_src,
516	.clkr.hw.init = &(struct clk_init_data){
517		.name = "gcc_camss_cpp_clk_src",
518		.parent_data = gcc_parent_data_10,
519		.num_parents = ARRAY_SIZE(gcc_parent_data_10),
520		.ops = &clk_rcg2_ops,
521	},
522};
523
524static const struct freq_tbl ftbl_gcc_camss_csi0_clk_src[] = {
525	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
526	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
527	F(311000000, P_GPLL5_OUT_MAIN, 3, 0, 0),
528	F(403200000, P_GPLL4_OUT_MAIN, 2, 0, 0),
529	F(466500000, P_GPLL5_OUT_MAIN, 2, 0, 0),
530	{ }
531};
532
533static struct clk_rcg2 gcc_camss_csi0_clk_src = {
534	.cmd_rcgr = 0x55030,
535	.mnd_width = 0,
536	.hid_width = 5,
537	.parent_map = gcc_parent_map_3,
538	.freq_tbl = ftbl_gcc_camss_csi0_clk_src,
539	.clkr.hw.init = &(struct clk_init_data){
540		.name = "gcc_camss_csi0_clk_src",
541		.parent_data = gcc_parent_data_3,
542		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
543		.ops = &clk_rcg2_ops,
544	},
545};
546
547static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
548	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
549	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
550	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
551	{ }
552};
553
554static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
555	.cmd_rcgr = 0x53004,
556	.mnd_width = 0,
557	.hid_width = 5,
558	.parent_map = gcc_parent_map_6,
559	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
560	.clkr.hw.init = &(struct clk_init_data){
561		.name = "gcc_camss_csi0phytimer_clk_src",
562		.parent_data = gcc_parent_data_6,
563		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
564		.ops = &clk_rcg2_ops,
565	},
566};
567
568static struct clk_rcg2 gcc_camss_csi1_clk_src = {
569	.cmd_rcgr = 0x5506c,
570	.mnd_width = 0,
571	.hid_width = 5,
572	.parent_map = gcc_parent_map_3,
573	.freq_tbl = ftbl_gcc_camss_csi0_clk_src,
574	.clkr.hw.init = &(struct clk_init_data){
575		.name = "gcc_camss_csi1_clk_src",
576		.parent_data = gcc_parent_data_3,
577		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
578		.ops = &clk_rcg2_ops,
579	},
580};
581
582static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
583	.cmd_rcgr = 0x53024,
584	.mnd_width = 0,
585	.hid_width = 5,
586	.parent_map = gcc_parent_map_6,
587	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
588	.clkr.hw.init = &(struct clk_init_data){
589		.name = "gcc_camss_csi1phytimer_clk_src",
590		.parent_data = gcc_parent_data_6,
591		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
592		.ops = &clk_rcg2_ops,
593	},
594};
595
596static struct clk_rcg2 gcc_camss_csi2_clk_src = {
597	.cmd_rcgr = 0x550a4,
598	.mnd_width = 0,
599	.hid_width = 5,
600	.parent_map = gcc_parent_map_3,
601	.freq_tbl = ftbl_gcc_camss_csi0_clk_src,
602	.clkr.hw.init = &(struct clk_init_data){
603		.name = "gcc_camss_csi2_clk_src",
604		.parent_data = gcc_parent_data_3,
605		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
606		.ops = &clk_rcg2_ops,
607	},
608};
609
610static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
611	.cmd_rcgr = 0x53044,
612	.mnd_width = 0,
613	.hid_width = 5,
614	.parent_map = gcc_parent_map_6,
615	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
616	.clkr.hw.init = &(struct clk_init_data){
617		.name = "gcc_camss_csi2phytimer_clk_src",
618		.parent_data = gcc_parent_data_6,
619		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
620		.ops = &clk_rcg2_ops,
621	},
622};
623
624static struct clk_rcg2 gcc_camss_csi3_clk_src = {
625	.cmd_rcgr = 0x550e0,
626	.mnd_width = 0,
627	.hid_width = 5,
628	.parent_map = gcc_parent_map_3,
629	.freq_tbl = ftbl_gcc_camss_csi0_clk_src,
630	.clkr.hw.init = &(struct clk_init_data){
631		.name = "gcc_camss_csi3_clk_src",
632		.parent_data = gcc_parent_data_3,
633		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
634		.ops = &clk_rcg2_ops,
635	},
636};
637
638static const struct freq_tbl ftbl_gcc_camss_csiphy_clk_src[] = {
639	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
640	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
641	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
642	F(320000000, P_GPLL8_OUT_EARLY, 3, 0, 0),
643	{ }
644};
645
646static struct clk_rcg2 gcc_camss_csiphy_clk_src = {
647	.cmd_rcgr = 0x55000,
648	.mnd_width = 0,
649	.hid_width = 5,
650	.parent_map = gcc_parent_map_11,
651	.freq_tbl = ftbl_gcc_camss_csiphy_clk_src,
652	.clkr.hw.init = &(struct clk_init_data){
653		.name = "gcc_camss_csiphy_clk_src",
654		.parent_data = gcc_parent_data_11,
655		.num_parents = ARRAY_SIZE(gcc_parent_data_11),
656		.ops = &clk_rcg2_ops,
657	},
658};
659
660static const struct freq_tbl ftbl_gcc_camss_gp0_clk_src[] = {
661	F(50000000, P_GPLL0_OUT_EARLY, 12, 0, 0),
662	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
663	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
664	{ }
665};
666
667static struct clk_rcg2 gcc_camss_gp0_clk_src = {
668	.cmd_rcgr = 0x50000,
669	.mnd_width = 8,
670	.hid_width = 5,
671	.parent_map = gcc_parent_map_7,
672	.freq_tbl = ftbl_gcc_camss_gp0_clk_src,
673	.clkr.hw.init = &(struct clk_init_data){
674		.name = "gcc_camss_gp0_clk_src",
675		.parent_data = gcc_parent_data_7,
676		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
677		.ops = &clk_rcg2_ops,
678	},
679};
680
681static struct clk_rcg2 gcc_camss_gp1_clk_src = {
682	.cmd_rcgr = 0x5001c,
683	.mnd_width = 8,
684	.hid_width = 5,
685	.parent_map = gcc_parent_map_7,
686	.freq_tbl = ftbl_gcc_camss_gp0_clk_src,
687	.clkr.hw.init = &(struct clk_init_data){
688		.name = "gcc_camss_gp1_clk_src",
689		.parent_data = gcc_parent_data_7,
690		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
691		.ops = &clk_rcg2_ops,
692	},
693};
694
695static const struct freq_tbl ftbl_gcc_camss_jpeg_clk_src[] = {
696	F(66666667, P_GPLL0_OUT_EARLY, 9, 0, 0),
697	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
698	F(219428571, P_GPLL6_OUT_EARLY, 3.5, 0, 0),
699	F(320000000, P_GPLL8_OUT_EARLY, 3, 0, 0),
700	F(480000000, P_GPLL8_OUT_EARLY, 2, 0, 0),
701	{ }
702};
703
704static struct clk_rcg2 gcc_camss_jpeg_clk_src = {
705	.cmd_rcgr = 0x52028,
706	.mnd_width = 0,
707	.hid_width = 5,
708	.parent_map = gcc_parent_map_12,
709	.freq_tbl = ftbl_gcc_camss_jpeg_clk_src,
710	.clkr.hw.init = &(struct clk_init_data){
711		.name = "gcc_camss_jpeg_clk_src",
712		.parent_data = gcc_parent_data_12,
713		.num_parents = ARRAY_SIZE(gcc_parent_data_12),
714		.ops = &clk_rcg2_ops,
715	},
716};
717
718static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
719	F(19200000, P_BI_TCXO, 1, 0, 0),
720	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
721	F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),
722	{ }
723};
724
725static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
726	.cmd_rcgr = 0x51000,
727	.mnd_width = 8,
728	.hid_width = 5,
729	.parent_map = gcc_parent_map_4,
730	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
731	.clkr.hw.init = &(struct clk_init_data){
732		.name = "gcc_camss_mclk0_clk_src",
733		.parent_data = gcc_parent_data_4,
734		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
735		.ops = &clk_rcg2_ops,
736	},
737};
738
739static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
740	.cmd_rcgr = 0x5101c,
741	.mnd_width = 8,
742	.hid_width = 5,
743	.parent_map = gcc_parent_map_4,
744	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
745	.clkr.hw.init = &(struct clk_init_data){
746		.name = "gcc_camss_mclk1_clk_src",
747		.parent_data = gcc_parent_data_4,
748		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
749		.ops = &clk_rcg2_ops,
750	},
751};
752
753static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
754	.cmd_rcgr = 0x51038,
755	.mnd_width = 8,
756	.hid_width = 5,
757	.parent_map = gcc_parent_map_4,
758	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
759	.clkr.hw.init = &(struct clk_init_data){
760		.name = "gcc_camss_mclk2_clk_src",
761		.parent_data = gcc_parent_data_4,
762		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
763		.ops = &clk_rcg2_ops,
764	},
765};
766
767static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
768	.cmd_rcgr = 0x51054,
769	.mnd_width = 8,
770	.hid_width = 5,
771	.parent_map = gcc_parent_map_4,
772	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
773	.clkr.hw.init = &(struct clk_init_data){
774		.name = "gcc_camss_mclk3_clk_src",
775		.parent_data = gcc_parent_data_4,
776		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
777		.ops = &clk_rcg2_ops,
778	},
779};
780
781static const struct freq_tbl ftbl_gcc_camss_vfe0_clk_src[] = {
782	F(120000000, P_GPLL8_OUT_MAIN, 4, 0, 0),
783	F(256000000, P_GPLL6_OUT_EARLY, 3, 0, 0),
784	F(403200000, P_GPLL4_OUT_MAIN, 2, 0, 0),
785	F(480000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
786	F(533000000, P_GPLL3_OUT_EARLY, 2, 0, 0),
787	F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
788	{ }
789};
790
791static struct clk_rcg2 gcc_camss_vfe0_clk_src = {
792	.cmd_rcgr = 0x54010,
793	.mnd_width = 0,
794	.hid_width = 5,
795	.parent_map = gcc_parent_map_8,
796	.freq_tbl = ftbl_gcc_camss_vfe0_clk_src,
797	.clkr.hw.init = &(struct clk_init_data){
798		.name = "gcc_camss_vfe0_clk_src",
799		.parent_data = gcc_parent_data_8,
800		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
801		.ops = &clk_rcg2_ops,
802	},
803};
804
805static struct clk_rcg2 gcc_camss_vfe1_clk_src = {
806	.cmd_rcgr = 0x54048,
807	.mnd_width = 0,
808	.hid_width = 5,
809	.parent_map = gcc_parent_map_8,
810	.freq_tbl = ftbl_gcc_camss_vfe0_clk_src,
811	.clkr.hw.init = &(struct clk_init_data){
812		.name = "gcc_camss_vfe1_clk_src",
813		.parent_data = gcc_parent_data_8,
814		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
815		.ops = &clk_rcg2_ops,
816	},
817};
818
819static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
820	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
821	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
822	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
823	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
824	{ }
825};
826
827static struct clk_rcg2 gcc_gp1_clk_src = {
828	.cmd_rcgr = 0x4d004,
829	.mnd_width = 8,
830	.hid_width = 5,
831	.parent_map = gcc_parent_map_2,
832	.freq_tbl = ftbl_gcc_gp1_clk_src,
833	.clkr.hw.init = &(struct clk_init_data){
834		.name = "gcc_gp1_clk_src",
835		.parent_data = gcc_parent_data_2,
836		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
837		.ops = &clk_rcg2_ops,
838	},
839};
840
841static struct clk_rcg2 gcc_gp2_clk_src = {
842	.cmd_rcgr = 0x4e004,
843	.mnd_width = 8,
844	.hid_width = 5,
845	.parent_map = gcc_parent_map_2,
846	.freq_tbl = ftbl_gcc_gp1_clk_src,
847	.clkr.hw.init = &(struct clk_init_data){
848		.name = "gcc_gp2_clk_src",
849		.parent_data = gcc_parent_data_2,
850		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
851		.ops = &clk_rcg2_ops,
852	},
853};
854
855static struct clk_rcg2 gcc_gp3_clk_src = {
856	.cmd_rcgr = 0x4f004,
857	.mnd_width = 8,
858	.hid_width = 5,
859	.parent_map = gcc_parent_map_2,
860	.freq_tbl = ftbl_gcc_gp1_clk_src,
861	.clkr.hw.init = &(struct clk_init_data){
862		.name = "gcc_gp3_clk_src",
863		.parent_data = gcc_parent_data_2,
864		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
865		.ops = &clk_rcg2_ops,
866	},
867};
868
869static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
870	F(19200000, P_BI_TCXO, 1, 0, 0),
871	F(60000000, P_GPLL0_OUT_EARLY, 10, 0, 0),
872	{ }
873};
874
875static struct clk_rcg2 gcc_pdm2_clk_src = {
876	.cmd_rcgr = 0x20010,
877	.mnd_width = 0,
878	.hid_width = 5,
879	.parent_map = gcc_parent_map_0,
880	.freq_tbl = ftbl_gcc_pdm2_clk_src,
881	.clkr.hw.init = &(struct clk_init_data){
882		.name = "gcc_pdm2_clk_src",
883		.parent_data = gcc_parent_data_0,
884		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
885		.ops = &clk_rcg2_ops,
886	},
887};
888
889static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
890	F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
891	F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
892	F(19200000, P_BI_TCXO, 1, 0, 0),
893	F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
894	F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
895	F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
896	F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
897	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
898	F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
899	F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
900	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
901	F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
902	F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
903	F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
904	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
905	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
906	{ }
907};
908
909static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
910	.name = "gcc_qupv3_wrap0_s0_clk_src",
911	.parent_data = gcc_parent_data_1,
912	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
913	.ops = &clk_rcg2_ops,
914};
915
916static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
917	.cmd_rcgr = 0x1f148,
918	.mnd_width = 16,
919	.hid_width = 5,
920	.parent_map = gcc_parent_map_1,
921	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
922	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
923};
924
925static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
926	.name = "gcc_qupv3_wrap0_s1_clk_src",
927	.parent_data = gcc_parent_data_1,
928	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
929	.ops = &clk_rcg2_ops,
930};
931
932static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
933	.cmd_rcgr = 0x1f278,
934	.mnd_width = 16,
935	.hid_width = 5,
936	.parent_map = gcc_parent_map_1,
937	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
938	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
939};
940
941static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
942	.name = "gcc_qupv3_wrap0_s2_clk_src",
943	.parent_data = gcc_parent_data_1,
944	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
945	.ops = &clk_rcg2_ops,
946};
947
948static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
949	.cmd_rcgr = 0x1f3a8,
950	.mnd_width = 16,
951	.hid_width = 5,
952	.parent_map = gcc_parent_map_1,
953	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
954	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
955};
956
957static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
958	.name = "gcc_qupv3_wrap0_s3_clk_src",
959	.parent_data = gcc_parent_data_1,
960	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
961	.ops = &clk_rcg2_ops,
962};
963
964static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
965	.cmd_rcgr = 0x1f4d8,
966	.mnd_width = 16,
967	.hid_width = 5,
968	.parent_map = gcc_parent_map_1,
969	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
970	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
971};
972
973static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
974	.name = "gcc_qupv3_wrap0_s4_clk_src",
975	.parent_data = gcc_parent_data_1,
976	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
977	.ops = &clk_rcg2_ops,
978};
979
980static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
981	.cmd_rcgr = 0x1f608,
982	.mnd_width = 16,
983	.hid_width = 5,
984	.parent_map = gcc_parent_map_1,
985	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
986	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
987};
988
989static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
990	.name = "gcc_qupv3_wrap0_s5_clk_src",
991	.parent_data = gcc_parent_data_1,
992	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
993	.ops = &clk_rcg2_ops,
994};
995
996static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
997	.cmd_rcgr = 0x1f738,
998	.mnd_width = 16,
999	.hid_width = 5,
1000	.parent_map = gcc_parent_map_1,
1001	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1002	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1003};
1004
1005static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
1006	.name = "gcc_qupv3_wrap1_s0_clk_src",
1007	.parent_data = gcc_parent_data_1,
1008	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1009	.ops = &clk_rcg2_ops,
1010};
1011
1012static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
1013	.cmd_rcgr = 0x39148,
1014	.mnd_width = 16,
1015	.hid_width = 5,
1016	.parent_map = gcc_parent_map_1,
1017	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1018	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
1019};
1020
1021static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
1022	.name = "gcc_qupv3_wrap1_s1_clk_src",
1023	.parent_data = gcc_parent_data_1,
1024	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1025	.ops = &clk_rcg2_ops,
1026};
1027
1028static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
1029	.cmd_rcgr = 0x39278,
1030	.mnd_width = 16,
1031	.hid_width = 5,
1032	.parent_map = gcc_parent_map_1,
1033	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1034	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
1035};
1036
1037static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
1038	.name = "gcc_qupv3_wrap1_s2_clk_src",
1039	.parent_data = gcc_parent_data_1,
1040	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1041	.ops = &clk_rcg2_ops,
1042};
1043
1044static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
1045	.cmd_rcgr = 0x393a8,
1046	.mnd_width = 16,
1047	.hid_width = 5,
1048	.parent_map = gcc_parent_map_1,
1049	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1050	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
1051};
1052
1053static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
1054	.name = "gcc_qupv3_wrap1_s3_clk_src",
1055	.parent_data = gcc_parent_data_1,
1056	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1057	.ops = &clk_rcg2_ops,
1058};
1059
1060static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
1061	.cmd_rcgr = 0x394d8,
1062	.mnd_width = 16,
1063	.hid_width = 5,
1064	.parent_map = gcc_parent_map_1,
1065	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1066	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
1067};
1068
1069static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
1070	.name = "gcc_qupv3_wrap1_s4_clk_src",
1071	.parent_data = gcc_parent_data_1,
1072	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1073	.ops = &clk_rcg2_ops,
1074};
1075
1076static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
1077	.cmd_rcgr = 0x39608,
1078	.mnd_width = 16,
1079	.hid_width = 5,
1080	.parent_map = gcc_parent_map_1,
1081	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1082	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
1083};
1084
1085static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
1086	.name = "gcc_qupv3_wrap1_s5_clk_src",
1087	.parent_data = gcc_parent_data_1,
1088	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1089	.ops = &clk_rcg2_ops,
1090};
1091
1092static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
1093	.cmd_rcgr = 0x39738,
1094	.mnd_width = 16,
1095	.hid_width = 5,
1096	.parent_map = gcc_parent_map_1,
1097	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1098	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
1099};
1100
1101static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1102	F(144000, P_BI_TCXO, 16, 3, 25),
1103	F(400000, P_BI_TCXO, 12, 1, 4),
1104	F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1105	F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1106	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1107	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1108	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1109	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1110	{ }
1111};
1112
1113static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1114	.cmd_rcgr = 0x38028,
1115	.mnd_width = 8,
1116	.hid_width = 5,
1117	.parent_map = gcc_parent_map_1,
1118	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1119	.clkr.hw.init = &(struct clk_init_data){
1120		.name = "gcc_sdcc1_apps_clk_src",
1121		.parent_data = gcc_parent_data_1,
1122		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1123		.ops = &clk_rcg2_floor_ops,
1124	},
1125};
1126
1127static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1128	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1129	F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0),
1130	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1131	F(300000000, P_GPLL0_OUT_EARLY, 2, 0, 0),
1132	{ }
1133};
1134
1135static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1136	.cmd_rcgr = 0x38010,
1137	.mnd_width = 0,
1138	.hid_width = 5,
1139	.parent_map = gcc_parent_map_0,
1140	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1141	.clkr.hw.init = &(struct clk_init_data){
1142		.name = "gcc_sdcc1_ice_core_clk_src",
1143		.parent_data = gcc_parent_data_0,
1144		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1145		.ops = &clk_rcg2_ops,
1146	},
1147};
1148
1149static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1150	F(400000, P_BI_TCXO, 12, 1, 4),
1151	F(19200000, P_BI_TCXO, 1, 0, 0),
1152	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1153	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1154	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1155	{ }
1156};
1157
1158static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1159	.cmd_rcgr = 0x1e00c,
1160	.mnd_width = 8,
1161	.hid_width = 5,
1162	.parent_map = gcc_parent_map_13,
1163	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1164	.clkr.hw.init = &(struct clk_init_data){
1165		.name = "gcc_sdcc2_apps_clk_src",
1166		.parent_data = gcc_parent_data_13,
1167		.num_parents = ARRAY_SIZE(gcc_parent_data_13),
1168		.ops = &clk_rcg2_floor_ops,
1169	},
1170};
1171
1172static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1173	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1174	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1175	F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
1176	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1177	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1178	{ }
1179};
1180
1181static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1182	.cmd_rcgr = 0x45020,
1183	.mnd_width = 8,
1184	.hid_width = 5,
1185	.parent_map = gcc_parent_map_0,
1186	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1187	.clkr.hw.init = &(struct clk_init_data){
1188		.name = "gcc_ufs_phy_axi_clk_src",
1189		.parent_data = gcc_parent_data_0,
1190		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1191		.ops = &clk_rcg2_ops,
1192	},
1193};
1194
1195static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1196	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1197	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1198	F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0),
1199	F(300000000, P_GPLL0_OUT_EARLY, 2, 0, 0),
1200	{ }
1201};
1202
1203static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1204	.cmd_rcgr = 0x45048,
1205	.mnd_width = 0,
1206	.hid_width = 5,
1207	.parent_map = gcc_parent_map_0,
1208	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1209	.clkr.hw.init = &(struct clk_init_data){
1210		.name = "gcc_ufs_phy_ice_core_clk_src",
1211		.parent_data = gcc_parent_data_0,
1212		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1213		.ops = &clk_rcg2_ops,
1214	},
1215};
1216
1217static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1218	F(9600000, P_BI_TCXO, 2, 0, 0),
1219	F(19200000, P_BI_TCXO, 1, 0, 0),
1220	{ }
1221};
1222
1223static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1224	.cmd_rcgr = 0x4507c,
1225	.mnd_width = 0,
1226	.hid_width = 5,
1227	.parent_map = gcc_parent_map_0,
1228	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1229	.clkr.hw.init = &(struct clk_init_data){
1230		.name = "gcc_ufs_phy_phy_aux_clk_src",
1231		.parent_data = gcc_parent_data_0,
1232		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1233		.ops = &clk_rcg2_ops,
1234	},
1235};
1236
1237static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1238	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1239	F(75000000, P_GPLL0_OUT_EARLY, 8, 0, 0),
1240	F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0),
1241	{ }
1242};
1243
1244static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1245	.cmd_rcgr = 0x45060,
1246	.mnd_width = 0,
1247	.hid_width = 5,
1248	.parent_map = gcc_parent_map_0,
1249	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1250	.clkr.hw.init = &(struct clk_init_data){
1251		.name = "gcc_ufs_phy_unipro_core_clk_src",
1252		.parent_data = gcc_parent_data_0,
1253		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1254		.ops = &clk_rcg2_ops,
1255	},
1256};
1257
1258static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1259	F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1260	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1261	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1262	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1263	{ }
1264};
1265
1266static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1267	.cmd_rcgr = 0x1a01c,
1268	.mnd_width = 8,
1269	.hid_width = 5,
1270	.parent_map = gcc_parent_map_0,
1271	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1272	.clkr.hw.init = &(struct clk_init_data){
1273		.name = "gcc_usb30_prim_master_clk_src",
1274		.parent_data = gcc_parent_data_0,
1275		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1276		.ops = &clk_rcg2_ops,
1277	},
1278};
1279
1280static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1281	F(19200000, P_BI_TCXO, 1, 0, 0),
1282	F(20000000, P_GPLL0_OUT_AUX2, 15, 0, 0),
1283	F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1284	F(60000000, P_GPLL0_OUT_EARLY, 10, 0, 0),
1285	{ }
1286};
1287
1288static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1289	.cmd_rcgr = 0x1a034,
1290	.mnd_width = 0,
1291	.hid_width = 5,
1292	.parent_map = gcc_parent_map_0,
1293	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1294	.clkr.hw.init = &(struct clk_init_data){
1295		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1296		.parent_data = gcc_parent_data_0,
1297		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1298		.ops = &clk_rcg2_ops,
1299	},
1300};
1301
1302static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = {
1303	F(19200000, P_BI_TCXO, 1, 0, 0),
1304	{ }
1305};
1306
1307static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1308	.cmd_rcgr = 0x1a060,
1309	.mnd_width = 0,
1310	.hid_width = 5,
1311	.parent_map = gcc_parent_map_14,
1312	.freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
1313	.clkr.hw.init = &(struct clk_init_data){
1314		.name = "gcc_usb3_prim_phy_aux_clk_src",
1315		.parent_data = gcc_parent_data_14,
1316		.num_parents = ARRAY_SIZE(gcc_parent_data_14),
1317		.ops = &clk_rcg2_ops,
1318	},
1319};
1320
1321static struct clk_rcg2 gcc_vs_ctrl_clk_src = {
1322	.cmd_rcgr = 0x42030,
1323	.mnd_width = 0,
1324	.hid_width = 5,
1325	.parent_map = gcc_parent_map_5,
1326	.freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
1327	.clkr.hw.init = &(struct clk_init_data){
1328		.name = "gcc_vs_ctrl_clk_src",
1329		.parent_data = gcc_parent_data_5,
1330		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1331		.ops = &clk_rcg2_ops,
1332	},
1333};
1334
1335static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
1336	F(19200000, P_BI_TCXO, 1, 0, 0),
1337	F(400000000, P_GPLL0_OUT_EARLY, 1.5, 0, 0),
1338	F(600000000, P_GPLL0_OUT_EARLY, 1, 0, 0),
1339	{ }
1340};
1341
1342static struct clk_rcg2 gcc_vsensor_clk_src = {
1343	.cmd_rcgr = 0x42018,
1344	.mnd_width = 0,
1345	.hid_width = 5,
1346	.parent_map = gcc_parent_map_5,
1347	.freq_tbl = ftbl_gcc_vsensor_clk_src,
1348	.clkr.hw.init = &(struct clk_init_data){
1349		.name = "gcc_vsensor_clk_src",
1350		.parent_data = gcc_parent_data_5,
1351		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1352		.ops = &clk_rcg2_ops,
1353	},
1354};
1355
1356static struct clk_branch gcc_ahb2phy_csi_clk = {
1357	.halt_reg = 0x1d004,
1358	.halt_check = BRANCH_HALT,
1359	.hwcg_reg = 0x1d004,
1360	.hwcg_bit = 1,
1361	.clkr = {
1362		.enable_reg = 0x1d004,
1363		.enable_mask = BIT(0),
1364		.hw.init = &(struct clk_init_data){
1365			.name = "gcc_ahb2phy_csi_clk",
1366			.ops = &clk_branch2_ops,
1367		},
1368	},
1369};
1370
1371static struct clk_branch gcc_ahb2phy_usb_clk = {
1372	.halt_reg = 0x1d008,
1373	.halt_check = BRANCH_HALT,
1374	.hwcg_reg = 0x1d008,
1375	.hwcg_bit = 1,
1376	.clkr = {
1377		.enable_reg = 0x1d008,
1378		.enable_mask = BIT(0),
1379		.hw.init = &(struct clk_init_data){
1380			.name = "gcc_ahb2phy_usb_clk",
1381			.ops = &clk_branch2_ops,
1382		},
1383	},
1384};
1385
1386static struct clk_branch gcc_apc_vs_clk = {
1387	.halt_reg = 0x4204c,
1388	.halt_check = BRANCH_HALT,
1389	.clkr = {
1390		.enable_reg = 0x4204c,
1391		.enable_mask = BIT(0),
1392		.hw.init = &(struct clk_init_data){
1393			.name = "gcc_apc_vs_clk",
1394			.parent_hws = (const struct clk_hw*[]){
1395				&gcc_vsensor_clk_src.clkr.hw,
1396			},
1397			.num_parents = 1,
1398			.flags = CLK_SET_RATE_PARENT,
1399			.ops = &clk_branch2_ops,
1400		},
1401	},
1402};
1403
1404static struct clk_branch gcc_bimc_gpu_axi_clk = {
1405	.halt_reg = 0x71154,
1406	.halt_check = BRANCH_HALT_DELAY,
1407	.clkr = {
1408		.enable_reg = 0x71154,
1409		.enable_mask = BIT(0),
1410		.hw.init = &(struct clk_init_data){
1411			.name = "gcc_bimc_gpu_axi_clk",
1412			.ops = &clk_branch2_ops,
1413		},
1414	},
1415};
1416
1417static struct clk_branch gcc_boot_rom_ahb_clk = {
1418	.halt_reg = 0x23004,
1419	.halt_check = BRANCH_HALT_VOTED,
1420	.hwcg_reg = 0x23004,
1421	.hwcg_bit = 1,
1422	.clkr = {
1423		.enable_reg = 0x79004,
1424		.enable_mask = BIT(10),
1425		.hw.init = &(struct clk_init_data){
1426			.name = "gcc_boot_rom_ahb_clk",
1427			.ops = &clk_branch2_ops,
1428		},
1429	},
1430};
1431
1432static struct clk_branch gcc_camera_ahb_clk = {
1433	.halt_reg = 0x17008,
1434	.halt_check = BRANCH_HALT_DELAY,
1435	.hwcg_reg = 0x17008,
1436	.hwcg_bit = 1,
1437	.clkr = {
1438		.enable_reg = 0x17008,
1439		.enable_mask = BIT(0),
1440		.hw.init = &(struct clk_init_data){
1441			.name = "gcc_camera_ahb_clk",
1442			.flags = CLK_IS_CRITICAL,
1443			.ops = &clk_branch2_ops,
1444		},
1445	},
1446};
1447
1448static struct clk_branch gcc_camera_xo_clk = {
1449	.halt_reg = 0x17028,
1450	.halt_check = BRANCH_HALT,
1451	.clkr = {
1452		.enable_reg = 0x17028,
1453		.enable_mask = BIT(0),
1454		.hw.init = &(struct clk_init_data){
1455			.name = "gcc_camera_xo_clk",
1456			.flags = CLK_IS_CRITICAL,
1457			.ops = &clk_branch2_ops,
1458		},
1459	},
1460};
1461
1462static struct clk_branch gcc_camss_cci_ahb_clk = {
1463	.halt_reg = 0x52020,
1464	.halt_check = BRANCH_HALT,
1465	.clkr = {
1466		.enable_reg = 0x52020,
1467		.enable_mask = BIT(0),
1468		.hw.init = &(struct clk_init_data){
1469			.name = "gcc_camss_cci_ahb_clk",
1470			.parent_hws = (const struct clk_hw*[]){
1471				&gcc_camss_ahb_clk_src.clkr.hw,
1472			},
1473			.num_parents = 1,
1474			.flags = CLK_SET_RATE_PARENT,
1475			.ops = &clk_branch2_ops,
1476		},
1477	},
1478};
1479
1480static struct clk_branch gcc_camss_cci_clk = {
1481	.halt_reg = 0x5201c,
1482	.halt_check = BRANCH_HALT,
1483	.clkr = {
1484		.enable_reg = 0x5201c,
1485		.enable_mask = BIT(0),
1486		.hw.init = &(struct clk_init_data){
1487			.name = "gcc_camss_cci_clk",
1488			.parent_hws = (const struct clk_hw*[]){
1489				&gcc_camss_cci_clk_src.clkr.hw,
1490			},
1491			.num_parents = 1,
1492			.flags = CLK_SET_RATE_PARENT,
1493			.ops = &clk_branch2_ops,
1494		},
1495	},
1496};
1497
1498static struct clk_branch gcc_camss_cphy_csid0_clk = {
1499	.halt_reg = 0x5504c,
1500	.halt_check = BRANCH_HALT,
1501	.clkr = {
1502		.enable_reg = 0x5504c,
1503		.enable_mask = BIT(0),
1504		.hw.init = &(struct clk_init_data){
1505			.name = "gcc_camss_cphy_csid0_clk",
1506			.parent_hws = (const struct clk_hw*[]){
1507				&gcc_camss_csiphy_clk_src.clkr.hw,
1508			},
1509			.num_parents = 1,
1510			.flags = CLK_SET_RATE_PARENT,
1511			.ops = &clk_branch2_ops,
1512		},
1513	},
1514};
1515
1516static struct clk_branch gcc_camss_cphy_csid1_clk = {
1517	.halt_reg = 0x55088,
1518	.halt_check = BRANCH_HALT,
1519	.clkr = {
1520		.enable_reg = 0x55088,
1521		.enable_mask = BIT(0),
1522		.hw.init = &(struct clk_init_data){
1523			.name = "gcc_camss_cphy_csid1_clk",
1524			.parent_hws = (const struct clk_hw*[]){
1525				&gcc_camss_csiphy_clk_src.clkr.hw,
1526			},
1527			.num_parents = 1,
1528			.flags = CLK_SET_RATE_PARENT,
1529			.ops = &clk_branch2_ops,
1530		},
1531	},
1532};
1533
1534static struct clk_branch gcc_camss_cphy_csid2_clk = {
1535	.halt_reg = 0x550c0,
1536	.halt_check = BRANCH_HALT,
1537	.clkr = {
1538		.enable_reg = 0x550c0,
1539		.enable_mask = BIT(0),
1540		.hw.init = &(struct clk_init_data){
1541			.name = "gcc_camss_cphy_csid2_clk",
1542			.parent_hws = (const struct clk_hw*[]){
1543				&gcc_camss_csiphy_clk_src.clkr.hw,
1544			},
1545			.num_parents = 1,
1546			.flags = CLK_SET_RATE_PARENT,
1547			.ops = &clk_branch2_ops,
1548		},
1549	},
1550};
1551
1552static struct clk_branch gcc_camss_cphy_csid3_clk = {
1553	.halt_reg = 0x550fc,
1554	.halt_check = BRANCH_HALT,
1555	.clkr = {
1556		.enable_reg = 0x550fc,
1557		.enable_mask = BIT(0),
1558		.hw.init = &(struct clk_init_data){
1559			.name = "gcc_camss_cphy_csid3_clk",
1560			.parent_hws = (const struct clk_hw*[]){
1561				&gcc_camss_csiphy_clk_src.clkr.hw,
1562			},
1563			.num_parents = 1,
1564			.flags = CLK_SET_RATE_PARENT,
1565			.ops = &clk_branch2_ops,
1566		},
1567	},
1568};
1569
1570static struct clk_branch gcc_camss_cpp_ahb_clk = {
1571	.halt_reg = 0x560e8,
1572	.halt_check = BRANCH_HALT,
1573	.clkr = {
1574		.enable_reg = 0x560e8,
1575		.enable_mask = BIT(0),
1576		.hw.init = &(struct clk_init_data){
1577			.name = "gcc_camss_cpp_ahb_clk",
1578			.parent_hws = (const struct clk_hw*[]){
1579				&gcc_camss_ahb_clk_src.clkr.hw,
1580			},
1581			.num_parents = 1,
1582			.flags = CLK_SET_RATE_PARENT,
1583			.ops = &clk_branch2_ops,
1584		},
1585	},
1586};
1587
1588static struct clk_branch gcc_camss_cpp_axi_clk = {
1589	.halt_reg = 0x560f4,
1590	.halt_check = BRANCH_HALT,
1591	.clkr = {
1592		.enable_reg = 0x560f4,
1593		.enable_mask = BIT(0),
1594		.hw.init = &(struct clk_init_data){
1595			.name = "gcc_camss_cpp_axi_clk",
1596			.ops = &clk_branch2_ops,
1597		},
1598	},
1599};
1600
1601static struct clk_branch gcc_camss_cpp_clk = {
1602	.halt_reg = 0x560e0,
1603	.halt_check = BRANCH_HALT,
1604	.clkr = {
1605		.enable_reg = 0x560e0,
1606		.enable_mask = BIT(0),
1607		.hw.init = &(struct clk_init_data){
1608			.name = "gcc_camss_cpp_clk",
1609			.parent_hws = (const struct clk_hw*[]){
1610				&gcc_camss_cpp_clk_src.clkr.hw,
1611			},
1612			.num_parents = 1,
1613			.flags = CLK_SET_RATE_PARENT,
1614			.ops = &clk_branch2_ops,
1615		},
1616	},
1617};
1618
1619static struct clk_branch gcc_camss_cpp_vbif_ahb_clk = {
1620	.halt_reg = 0x560f0,
1621	.halt_check = BRANCH_HALT,
1622	.clkr = {
1623		.enable_reg = 0x560f0,
1624		.enable_mask = BIT(0),
1625		.hw.init = &(struct clk_init_data){
1626			.name = "gcc_camss_cpp_vbif_ahb_clk",
1627			.parent_hws = (const struct clk_hw*[]){
1628				&gcc_camss_ahb_clk_src.clkr.hw,
1629			},
1630			.num_parents = 1,
1631			.flags = CLK_SET_RATE_PARENT,
1632			.ops = &clk_branch2_ops,
1633		},
1634	},
1635};
1636
1637static struct clk_branch gcc_camss_csi0_ahb_clk = {
1638	.halt_reg = 0x55050,
1639	.halt_check = BRANCH_HALT,
1640	.clkr = {
1641		.enable_reg = 0x55050,
1642		.enable_mask = BIT(0),
1643		.hw.init = &(struct clk_init_data){
1644			.name = "gcc_camss_csi0_ahb_clk",
1645			.parent_hws = (const struct clk_hw*[]){
1646				&gcc_camss_ahb_clk_src.clkr.hw,
1647			},
1648			.num_parents = 1,
1649			.flags = CLK_SET_RATE_PARENT,
1650			.ops = &clk_branch2_ops,
1651		},
1652	},
1653};
1654
1655static struct clk_branch gcc_camss_csi0_clk = {
1656	.halt_reg = 0x55048,
1657	.halt_check = BRANCH_HALT,
1658	.clkr = {
1659		.enable_reg = 0x55048,
1660		.enable_mask = BIT(0),
1661		.hw.init = &(struct clk_init_data){
1662			.name = "gcc_camss_csi0_clk",
1663			.parent_hws = (const struct clk_hw*[]){
1664				&gcc_camss_csi0_clk_src.clkr.hw,
1665			},
1666			.num_parents = 1,
1667			.flags = CLK_SET_RATE_PARENT,
1668			.ops = &clk_branch2_ops,
1669		},
1670	},
1671};
1672
1673static struct clk_branch gcc_camss_csi0phytimer_clk = {
1674	.halt_reg = 0x5301c,
1675	.halt_check = BRANCH_HALT,
1676	.clkr = {
1677		.enable_reg = 0x5301c,
1678		.enable_mask = BIT(0),
1679		.hw.init = &(struct clk_init_data){
1680			.name = "gcc_camss_csi0phytimer_clk",
1681			.parent_hws = (const struct clk_hw*[]){
1682				&gcc_camss_csi0phytimer_clk_src.clkr.hw,
1683			},
1684			.num_parents = 1,
1685			.flags = CLK_SET_RATE_PARENT,
1686			.ops = &clk_branch2_ops,
1687		},
1688	},
1689};
1690
1691static struct clk_branch gcc_camss_csi0pix_clk = {
1692	.halt_reg = 0x55060,
1693	.halt_check = BRANCH_HALT,
1694	.clkr = {
1695		.enable_reg = 0x55060,
1696		.enable_mask = BIT(0),
1697		.hw.init = &(struct clk_init_data){
1698			.name = "gcc_camss_csi0pix_clk",
1699			.parent_hws = (const struct clk_hw*[]){
1700				&gcc_camss_csi0_clk_src.clkr.hw,
1701			},
1702			.num_parents = 1,
1703			.flags = CLK_SET_RATE_PARENT,
1704			.ops = &clk_branch2_ops,
1705		},
1706	},
1707};
1708
1709static struct clk_branch gcc_camss_csi0rdi_clk = {
1710	.halt_reg = 0x55058,
1711	.halt_check = BRANCH_HALT,
1712	.clkr = {
1713		.enable_reg = 0x55058,
1714		.enable_mask = BIT(0),
1715		.hw.init = &(struct clk_init_data){
1716			.name = "gcc_camss_csi0rdi_clk",
1717			.parent_hws = (const struct clk_hw*[]){
1718				&gcc_camss_csi0_clk_src.clkr.hw,
1719			},
1720			.num_parents = 1,
1721			.flags = CLK_SET_RATE_PARENT,
1722			.ops = &clk_branch2_ops,
1723		},
1724	},
1725};
1726
1727static struct clk_branch gcc_camss_csi1_ahb_clk = {
1728	.halt_reg = 0x5508c,
1729	.halt_check = BRANCH_HALT,
1730	.clkr = {
1731		.enable_reg = 0x5508c,
1732		.enable_mask = BIT(0),
1733		.hw.init = &(struct clk_init_data){
1734			.name = "gcc_camss_csi1_ahb_clk",
1735			.parent_hws = (const struct clk_hw*[]){
1736				&gcc_camss_ahb_clk_src.clkr.hw,
1737			},
1738			.num_parents = 1,
1739			.flags = CLK_SET_RATE_PARENT,
1740			.ops = &clk_branch2_ops,
1741		},
1742	},
1743};
1744
1745static struct clk_branch gcc_camss_csi1_clk = {
1746	.halt_reg = 0x55084,
1747	.halt_check = BRANCH_HALT,
1748	.clkr = {
1749		.enable_reg = 0x55084,
1750		.enable_mask = BIT(0),
1751		.hw.init = &(struct clk_init_data){
1752			.name = "gcc_camss_csi1_clk",
1753			.parent_hws = (const struct clk_hw*[]){
1754				&gcc_camss_csi1_clk_src.clkr.hw,
1755			},
1756			.num_parents = 1,
1757			.flags = CLK_SET_RATE_PARENT,
1758			.ops = &clk_branch2_ops,
1759		},
1760	},
1761};
1762
1763static struct clk_branch gcc_camss_csi1phytimer_clk = {
1764	.halt_reg = 0x5303c,
1765	.halt_check = BRANCH_HALT,
1766	.clkr = {
1767		.enable_reg = 0x5303c,
1768		.enable_mask = BIT(0),
1769		.hw.init = &(struct clk_init_data){
1770			.name = "gcc_camss_csi1phytimer_clk",
1771			.parent_hws = (const struct clk_hw*[]){
1772				&gcc_camss_csi1phytimer_clk_src.clkr.hw,
1773			},
1774			.num_parents = 1,
1775			.flags = CLK_SET_RATE_PARENT,
1776			.ops = &clk_branch2_ops,
1777		},
1778	},
1779};
1780
1781static struct clk_branch gcc_camss_csi1pix_clk = {
1782	.halt_reg = 0x5509c,
1783	.halt_check = BRANCH_HALT,
1784	.clkr = {
1785		.enable_reg = 0x5509c,
1786		.enable_mask = BIT(0),
1787		.hw.init = &(struct clk_init_data){
1788			.name = "gcc_camss_csi1pix_clk",
1789			.parent_hws = (const struct clk_hw*[]){
1790				&gcc_camss_csi1_clk_src.clkr.hw,
1791			},
1792			.num_parents = 1,
1793			.flags = CLK_SET_RATE_PARENT,
1794			.ops = &clk_branch2_ops,
1795		},
1796	},
1797};
1798
1799static struct clk_branch gcc_camss_csi1rdi_clk = {
1800	.halt_reg = 0x55094,
1801	.halt_check = BRANCH_HALT,
1802	.clkr = {
1803		.enable_reg = 0x55094,
1804		.enable_mask = BIT(0),
1805		.hw.init = &(struct clk_init_data){
1806			.name = "gcc_camss_csi1rdi_clk",
1807			.parent_hws = (const struct clk_hw*[]){
1808				&gcc_camss_csi1_clk_src.clkr.hw,
1809			},
1810			.num_parents = 1,
1811			.flags = CLK_SET_RATE_PARENT,
1812			.ops = &clk_branch2_ops,
1813		},
1814	},
1815};
1816
1817static struct clk_branch gcc_camss_csi2_ahb_clk = {
1818	.halt_reg = 0x550c4,
1819	.halt_check = BRANCH_HALT,
1820	.clkr = {
1821		.enable_reg = 0x550c4,
1822		.enable_mask = BIT(0),
1823		.hw.init = &(struct clk_init_data){
1824			.name = "gcc_camss_csi2_ahb_clk",
1825			.parent_hws = (const struct clk_hw*[]){
1826				&gcc_camss_ahb_clk_src.clkr.hw,
1827			},
1828			.num_parents = 1,
1829			.flags = CLK_SET_RATE_PARENT,
1830			.ops = &clk_branch2_ops,
1831		},
1832	},
1833};
1834
1835static struct clk_branch gcc_camss_csi2_clk = {
1836	.halt_reg = 0x550bc,
1837	.halt_check = BRANCH_HALT,
1838	.clkr = {
1839		.enable_reg = 0x550bc,
1840		.enable_mask = BIT(0),
1841		.hw.init = &(struct clk_init_data){
1842			.name = "gcc_camss_csi2_clk",
1843			.parent_hws = (const struct clk_hw*[]){
1844				&gcc_camss_csi2_clk_src.clkr.hw,
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_camss_csi2phytimer_clk = {
1854	.halt_reg = 0x5305c,
1855	.halt_check = BRANCH_HALT,
1856	.clkr = {
1857		.enable_reg = 0x5305c,
1858		.enable_mask = BIT(0),
1859		.hw.init = &(struct clk_init_data){
1860			.name = "gcc_camss_csi2phytimer_clk",
1861			.parent_hws = (const struct clk_hw*[]){
1862				&gcc_camss_csi2phytimer_clk_src.clkr.hw,
1863			},
1864			.num_parents = 1,
1865			.flags = CLK_SET_RATE_PARENT,
1866			.ops = &clk_branch2_ops,
1867		},
1868	},
1869};
1870
1871static struct clk_branch gcc_camss_csi2pix_clk = {
1872	.halt_reg = 0x550d4,
1873	.halt_check = BRANCH_HALT,
1874	.clkr = {
1875		.enable_reg = 0x550d4,
1876		.enable_mask = BIT(0),
1877		.hw.init = &(struct clk_init_data){
1878			.name = "gcc_camss_csi2pix_clk",
1879			.parent_hws = (const struct clk_hw*[]){
1880				&gcc_camss_csi2_clk_src.clkr.hw,
1881			},
1882			.num_parents = 1,
1883			.flags = CLK_SET_RATE_PARENT,
1884			.ops = &clk_branch2_ops,
1885		},
1886	},
1887};
1888
1889static struct clk_branch gcc_camss_csi2rdi_clk = {
1890	.halt_reg = 0x550cc,
1891	.halt_check = BRANCH_HALT,
1892	.clkr = {
1893		.enable_reg = 0x550cc,
1894		.enable_mask = BIT(0),
1895		.hw.init = &(struct clk_init_data){
1896			.name = "gcc_camss_csi2rdi_clk",
1897			.parent_hws = (const struct clk_hw*[]){
1898				&gcc_camss_csi2_clk_src.clkr.hw,
1899			},
1900			.num_parents = 1,
1901			.flags = CLK_SET_RATE_PARENT,
1902			.ops = &clk_branch2_ops,
1903		},
1904	},
1905};
1906
1907static struct clk_branch gcc_camss_csi3_ahb_clk = {
1908	.halt_reg = 0x55100,
1909	.halt_check = BRANCH_HALT,
1910	.clkr = {
1911		.enable_reg = 0x55100,
1912		.enable_mask = BIT(0),
1913		.hw.init = &(struct clk_init_data){
1914			.name = "gcc_camss_csi3_ahb_clk",
1915			.parent_hws = (const struct clk_hw*[]){
1916				&gcc_camss_ahb_clk_src.clkr.hw,
1917			},
1918			.num_parents = 1,
1919			.flags = CLK_SET_RATE_PARENT,
1920			.ops = &clk_branch2_ops,
1921		},
1922	},
1923};
1924
1925static struct clk_branch gcc_camss_csi3_clk = {
1926	.halt_reg = 0x550f8,
1927	.halt_check = BRANCH_HALT,
1928	.clkr = {
1929		.enable_reg = 0x550f8,
1930		.enable_mask = BIT(0),
1931		.hw.init = &(struct clk_init_data){
1932			.name = "gcc_camss_csi3_clk",
1933			.parent_hws = (const struct clk_hw*[]){
1934				&gcc_camss_csi3_clk_src.clkr.hw,
1935			},
1936			.num_parents = 1,
1937			.flags = CLK_SET_RATE_PARENT,
1938			.ops = &clk_branch2_ops,
1939		},
1940	},
1941};
1942
1943static struct clk_branch gcc_camss_csi3pix_clk = {
1944	.halt_reg = 0x55110,
1945	.halt_check = BRANCH_HALT,
1946	.clkr = {
1947		.enable_reg = 0x55110,
1948		.enable_mask = BIT(0),
1949		.hw.init = &(struct clk_init_data){
1950			.name = "gcc_camss_csi3pix_clk",
1951			.parent_hws = (const struct clk_hw*[]){
1952				&gcc_camss_csi3_clk_src.clkr.hw,
1953			},
1954			.num_parents = 1,
1955			.flags = CLK_SET_RATE_PARENT,
1956			.ops = &clk_branch2_ops,
1957		},
1958	},
1959};
1960
1961static struct clk_branch gcc_camss_csi3rdi_clk = {
1962	.halt_reg = 0x55108,
1963	.halt_check = BRANCH_HALT,
1964	.clkr = {
1965		.enable_reg = 0x55108,
1966		.enable_mask = BIT(0),
1967		.hw.init = &(struct clk_init_data){
1968			.name = "gcc_camss_csi3rdi_clk",
1969			.parent_hws = (const struct clk_hw*[]){
1970				&gcc_camss_csi3_clk_src.clkr.hw,
1971			},
1972			.num_parents = 1,
1973			.flags = CLK_SET_RATE_PARENT,
1974			.ops = &clk_branch2_ops,
1975		},
1976	},
1977};
1978
1979static struct clk_branch gcc_camss_csi_vfe0_clk = {
1980	.halt_reg = 0x54074,
1981	.halt_check = BRANCH_HALT,
1982	.clkr = {
1983		.enable_reg = 0x54074,
1984		.enable_mask = BIT(0),
1985		.hw.init = &(struct clk_init_data){
1986			.name = "gcc_camss_csi_vfe0_clk",
1987			.parent_hws = (const struct clk_hw*[]){
1988				&gcc_camss_vfe0_clk_src.clkr.hw,
1989			},
1990			.num_parents = 1,
1991			.flags = CLK_SET_RATE_PARENT,
1992			.ops = &clk_branch2_ops,
1993		},
1994	},
1995};
1996
1997static struct clk_branch gcc_camss_csi_vfe1_clk = {
1998	.halt_reg = 0x54080,
1999	.halt_check = BRANCH_HALT,
2000	.clkr = {
2001		.enable_reg = 0x54080,
2002		.enable_mask = BIT(0),
2003		.hw.init = &(struct clk_init_data){
2004			.name = "gcc_camss_csi_vfe1_clk",
2005			.parent_hws = (const struct clk_hw*[]){
2006				&gcc_camss_vfe1_clk_src.clkr.hw,
2007			},
2008			.num_parents = 1,
2009			.flags = CLK_SET_RATE_PARENT,
2010			.ops = &clk_branch2_ops,
2011		},
2012	},
2013};
2014
2015static struct clk_branch gcc_camss_csiphy0_clk = {
2016	.halt_reg = 0x55018,
2017	.halt_check = BRANCH_HALT,
2018	.clkr = {
2019		.enable_reg = 0x55018,
2020		.enable_mask = BIT(0),
2021		.hw.init = &(struct clk_init_data){
2022			.name = "gcc_camss_csiphy0_clk",
2023			.parent_hws = (const struct clk_hw*[]){
2024				&gcc_camss_csiphy_clk_src.clkr.hw,
2025			},
2026			.num_parents = 1,
2027			.flags = CLK_SET_RATE_PARENT,
2028			.ops = &clk_branch2_ops,
2029		},
2030	},
2031};
2032
2033static struct clk_branch gcc_camss_csiphy1_clk = {
2034	.halt_reg = 0x5501c,
2035	.halt_check = BRANCH_HALT,
2036	.clkr = {
2037		.enable_reg = 0x5501c,
2038		.enable_mask = BIT(0),
2039		.hw.init = &(struct clk_init_data){
2040			.name = "gcc_camss_csiphy1_clk",
2041			.parent_hws = (const struct clk_hw*[]){
2042				&gcc_camss_csiphy_clk_src.clkr.hw,
2043			},
2044			.num_parents = 1,
2045			.flags = CLK_SET_RATE_PARENT,
2046			.ops = &clk_branch2_ops,
2047		},
2048	},
2049};
2050
2051static struct clk_branch gcc_camss_csiphy2_clk = {
2052	.halt_reg = 0x55020,
2053	.halt_check = BRANCH_HALT,
2054	.clkr = {
2055		.enable_reg = 0x55020,
2056		.enable_mask = BIT(0),
2057		.hw.init = &(struct clk_init_data){
2058			.name = "gcc_camss_csiphy2_clk",
2059			.parent_hws = (const struct clk_hw*[]){
2060				&gcc_camss_csiphy_clk_src.clkr.hw,
2061			},
2062			.num_parents = 1,
2063			.flags = CLK_SET_RATE_PARENT,
2064			.ops = &clk_branch2_ops,
2065		},
2066	},
2067};
2068
2069static struct clk_branch gcc_camss_gp0_clk = {
2070	.halt_reg = 0x50018,
2071	.halt_check = BRANCH_HALT,
2072	.clkr = {
2073		.enable_reg = 0x50018,
2074		.enable_mask = BIT(0),
2075		.hw.init = &(struct clk_init_data){
2076			.name = "gcc_camss_gp0_clk",
2077			.parent_hws = (const struct clk_hw*[]){
2078				&gcc_camss_gp0_clk_src.clkr.hw,
2079			},
2080			.num_parents = 1,
2081			.flags = CLK_SET_RATE_PARENT,
2082			.ops = &clk_branch2_ops,
2083		},
2084	},
2085};
2086
2087static struct clk_branch gcc_camss_gp1_clk = {
2088	.halt_reg = 0x50034,
2089	.halt_check = BRANCH_HALT,
2090	.clkr = {
2091		.enable_reg = 0x50034,
2092		.enable_mask = BIT(0),
2093		.hw.init = &(struct clk_init_data){
2094			.name = "gcc_camss_gp1_clk",
2095			.parent_hws = (const struct clk_hw*[]){
2096				&gcc_camss_gp1_clk_src.clkr.hw,
2097			},
2098			.num_parents = 1,
2099			.flags = CLK_SET_RATE_PARENT,
2100			.ops = &clk_branch2_ops,
2101		},
2102	},
2103};
2104
2105static struct clk_branch gcc_camss_ispif_ahb_clk = {
2106	.halt_reg = 0x540a4,
2107	.halt_check = BRANCH_HALT,
2108	.clkr = {
2109		.enable_reg = 0x540a4,
2110		.enable_mask = BIT(0),
2111		.hw.init = &(struct clk_init_data){
2112			.name = "gcc_camss_ispif_ahb_clk",
2113			.parent_hws = (const struct clk_hw*[]){
2114				&gcc_camss_ahb_clk_src.clkr.hw,
2115			},
2116			.num_parents = 1,
2117			.flags = CLK_SET_RATE_PARENT,
2118			.ops = &clk_branch2_ops,
2119		},
2120	},
2121};
2122
2123static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2124	.halt_reg = 0x52048,
2125	.halt_check = BRANCH_HALT,
2126	.clkr = {
2127		.enable_reg = 0x52048,
2128		.enable_mask = BIT(0),
2129		.hw.init = &(struct clk_init_data){
2130			.name = "gcc_camss_jpeg_ahb_clk",
2131			.parent_hws = (const struct clk_hw*[]){
2132				&gcc_camss_ahb_clk_src.clkr.hw,
2133			},
2134			.num_parents = 1,
2135			.flags = CLK_SET_RATE_PARENT,
2136			.ops = &clk_branch2_ops,
2137		},
2138	},
2139};
2140
2141static struct clk_branch gcc_camss_jpeg_axi_clk = {
2142	.halt_reg = 0x5204c,
2143	.halt_check = BRANCH_HALT,
2144	.clkr = {
2145		.enable_reg = 0x5204c,
2146		.enable_mask = BIT(0),
2147		.hw.init = &(struct clk_init_data){
2148			.name = "gcc_camss_jpeg_axi_clk",
2149			.ops = &clk_branch2_ops,
2150		},
2151	},
2152};
2153
2154static struct clk_branch gcc_camss_jpeg_clk = {
2155	.halt_reg = 0x52040,
2156	.halt_check = BRANCH_HALT,
2157	.clkr = {
2158		.enable_reg = 0x52040,
2159		.enable_mask = BIT(0),
2160		.hw.init = &(struct clk_init_data){
2161			.name = "gcc_camss_jpeg_clk",
2162			.parent_hws = (const struct clk_hw*[]){
2163				&gcc_camss_jpeg_clk_src.clkr.hw,
2164			},
2165			.num_parents = 1,
2166			.flags = CLK_SET_RATE_PARENT,
2167			.ops = &clk_branch2_ops,
2168		},
2169	},
2170};
2171
2172static struct clk_branch gcc_camss_mclk0_clk = {
2173	.halt_reg = 0x51018,
2174	.halt_check = BRANCH_HALT,
2175	.clkr = {
2176		.enable_reg = 0x51018,
2177		.enable_mask = BIT(0),
2178		.hw.init = &(struct clk_init_data){
2179			.name = "gcc_camss_mclk0_clk",
2180			.parent_hws = (const struct clk_hw*[]){
2181				&gcc_camss_mclk0_clk_src.clkr.hw,
2182			},
2183			.num_parents = 1,
2184			.flags = CLK_SET_RATE_PARENT,
2185			.ops = &clk_branch2_ops,
2186		},
2187	},
2188};
2189
2190static struct clk_branch gcc_camss_mclk1_clk = {
2191	.halt_reg = 0x51034,
2192	.halt_check = BRANCH_HALT,
2193	.clkr = {
2194		.enable_reg = 0x51034,
2195		.enable_mask = BIT(0),
2196		.hw.init = &(struct clk_init_data){
2197			.name = "gcc_camss_mclk1_clk",
2198			.parent_hws = (const struct clk_hw*[]){
2199				&gcc_camss_mclk1_clk_src.clkr.hw,
2200			},
2201			.num_parents = 1,
2202			.flags = CLK_SET_RATE_PARENT,
2203			.ops = &clk_branch2_ops,
2204		},
2205	},
2206};
2207
2208static struct clk_branch gcc_camss_mclk2_clk = {
2209	.halt_reg = 0x51050,
2210	.halt_check = BRANCH_HALT,
2211	.clkr = {
2212		.enable_reg = 0x51050,
2213		.enable_mask = BIT(0),
2214		.hw.init = &(struct clk_init_data){
2215			.name = "gcc_camss_mclk2_clk",
2216			.parent_hws = (const struct clk_hw*[]){
2217				&gcc_camss_mclk2_clk_src.clkr.hw,
2218			},
2219			.num_parents = 1,
2220			.flags = CLK_SET_RATE_PARENT,
2221			.ops = &clk_branch2_ops,
2222		},
2223	},
2224};
2225
2226static struct clk_branch gcc_camss_mclk3_clk = {
2227	.halt_reg = 0x5106c,
2228	.halt_check = BRANCH_HALT,
2229	.clkr = {
2230		.enable_reg = 0x5106c,
2231		.enable_mask = BIT(0),
2232		.hw.init = &(struct clk_init_data){
2233			.name = "gcc_camss_mclk3_clk",
2234			.parent_hws = (const struct clk_hw*[]){
2235				&gcc_camss_mclk3_clk_src.clkr.hw,
2236			},
2237			.num_parents = 1,
2238			.flags = CLK_SET_RATE_PARENT,
2239			.ops = &clk_branch2_ops,
2240		},
2241	},
2242};
2243
2244static struct clk_branch gcc_camss_micro_ahb_clk = {
2245	.halt_reg = 0x560b0,
2246	.halt_check = BRANCH_HALT,
2247	.clkr = {
2248		.enable_reg = 0x560b0,
2249		.enable_mask = BIT(0),
2250		.hw.init = &(struct clk_init_data){
2251			.name = "gcc_camss_micro_ahb_clk",
2252			.parent_hws = (const struct clk_hw*[]){
2253				&gcc_camss_ahb_clk_src.clkr.hw,
2254			},
2255			.num_parents = 1,
2256			.flags = CLK_SET_RATE_PARENT,
2257			.ops = &clk_branch2_ops,
2258		},
2259	},
2260};
2261
2262static struct clk_branch gcc_camss_throttle_nrt_axi_clk = {
2263	.halt_reg = 0x560a4,
2264	.halt_check = BRANCH_HALT_VOTED,
2265	.clkr = {
2266		.enable_reg = 0x79004,
2267		.enable_mask = BIT(27),
2268		.hw.init = &(struct clk_init_data){
2269			.name = "gcc_camss_throttle_nrt_axi_clk",
2270			.ops = &clk_branch2_ops,
2271		},
2272	},
2273};
2274
2275static struct clk_branch gcc_camss_throttle_rt_axi_clk = {
2276	.halt_reg = 0x560a8,
2277	.halt_check = BRANCH_HALT_VOTED,
2278	.clkr = {
2279		.enable_reg = 0x79004,
2280		.enable_mask = BIT(26),
2281		.hw.init = &(struct clk_init_data){
2282			.name = "gcc_camss_throttle_rt_axi_clk",
2283			.ops = &clk_branch2_ops,
2284		},
2285	},
2286};
2287
2288static struct clk_branch gcc_camss_top_ahb_clk = {
2289	.halt_reg = 0x560a0,
2290	.halt_check = BRANCH_HALT,
2291	.clkr = {
2292		.enable_reg = 0x560a0,
2293		.enable_mask = BIT(0),
2294		.hw.init = &(struct clk_init_data){
2295			.name = "gcc_camss_top_ahb_clk",
2296			.parent_hws = (const struct clk_hw*[]){
2297				&gcc_camss_ahb_clk_src.clkr.hw,
2298			},
2299			.num_parents = 1,
2300			.flags = CLK_SET_RATE_PARENT,
2301			.ops = &clk_branch2_ops,
2302		},
2303	},
2304};
2305
2306static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2307	.halt_reg = 0x54034,
2308	.halt_check = BRANCH_HALT,
2309	.clkr = {
2310		.enable_reg = 0x54034,
2311		.enable_mask = BIT(0),
2312		.hw.init = &(struct clk_init_data){
2313			.name = "gcc_camss_vfe0_ahb_clk",
2314			.parent_hws = (const struct clk_hw*[]){
2315				&gcc_camss_ahb_clk_src.clkr.hw,
2316			},
2317			.num_parents = 1,
2318			.flags = CLK_SET_RATE_PARENT,
2319			.ops = &clk_branch2_ops,
2320		},
2321	},
2322};
2323
2324static struct clk_branch gcc_camss_vfe0_clk = {
2325	.halt_reg = 0x54028,
2326	.halt_check = BRANCH_HALT,
2327	.clkr = {
2328		.enable_reg = 0x54028,
2329		.enable_mask = BIT(0),
2330		.hw.init = &(struct clk_init_data){
2331			.name = "gcc_camss_vfe0_clk",
2332			.parent_hws = (const struct clk_hw*[]){
2333				&gcc_camss_vfe0_clk_src.clkr.hw,
2334			},
2335			.num_parents = 1,
2336			.flags = CLK_SET_RATE_PARENT,
2337			.ops = &clk_branch2_ops,
2338		},
2339	},
2340};
2341
2342static struct clk_branch gcc_camss_vfe0_stream_clk = {
2343	.halt_reg = 0x54030,
2344	.halt_check = BRANCH_HALT,
2345	.clkr = {
2346		.enable_reg = 0x54030,
2347		.enable_mask = BIT(0),
2348		.hw.init = &(struct clk_init_data){
2349			.name = "gcc_camss_vfe0_stream_clk",
2350			.parent_hws = (const struct clk_hw*[]){
2351				&gcc_camss_vfe0_clk_src.clkr.hw,
2352			},
2353			.num_parents = 1,
2354			.flags = CLK_SET_RATE_PARENT,
2355			.ops = &clk_branch2_ops,
2356		},
2357	},
2358};
2359
2360static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2361	.halt_reg = 0x5406c,
2362	.halt_check = BRANCH_HALT,
2363	.clkr = {
2364		.enable_reg = 0x5406c,
2365		.enable_mask = BIT(0),
2366		.hw.init = &(struct clk_init_data){
2367			.name = "gcc_camss_vfe1_ahb_clk",
2368			.parent_hws = (const struct clk_hw*[]){
2369				&gcc_camss_ahb_clk_src.clkr.hw,
2370			},
2371			.num_parents = 1,
2372			.flags = CLK_SET_RATE_PARENT,
2373			.ops = &clk_branch2_ops,
2374		},
2375	},
2376};
2377
2378static struct clk_branch gcc_camss_vfe1_clk = {
2379	.halt_reg = 0x54060,
2380	.halt_check = BRANCH_HALT,
2381	.clkr = {
2382		.enable_reg = 0x54060,
2383		.enable_mask = BIT(0),
2384		.hw.init = &(struct clk_init_data){
2385			.name = "gcc_camss_vfe1_clk",
2386			.parent_hws = (const struct clk_hw*[]){
2387				&gcc_camss_vfe1_clk_src.clkr.hw,
2388			},
2389			.num_parents = 1,
2390			.flags = CLK_SET_RATE_PARENT,
2391			.ops = &clk_branch2_ops,
2392		},
2393	},
2394};
2395
2396static struct clk_branch gcc_camss_vfe1_stream_clk = {
2397	.halt_reg = 0x54068,
2398	.halt_check = BRANCH_HALT,
2399	.clkr = {
2400		.enable_reg = 0x54068,
2401		.enable_mask = BIT(0),
2402		.hw.init = &(struct clk_init_data){
2403			.name = "gcc_camss_vfe1_stream_clk",
2404			.parent_hws = (const struct clk_hw*[]){
2405				&gcc_camss_vfe1_clk_src.clkr.hw,
2406			},
2407			.num_parents = 1,
2408			.flags = CLK_SET_RATE_PARENT,
2409			.ops = &clk_branch2_ops,
2410		},
2411	},
2412};
2413
2414static struct clk_branch gcc_camss_vfe_tsctr_clk = {
2415	.halt_reg = 0x5409c,
2416	.halt_check = BRANCH_HALT,
2417	.clkr = {
2418		.enable_reg = 0x5409c,
2419		.enable_mask = BIT(0),
2420		.hw.init = &(struct clk_init_data){
2421			.name = "gcc_camss_vfe_tsctr_clk",
2422			.ops = &clk_branch2_ops,
2423		},
2424	},
2425};
2426
2427static struct clk_branch gcc_camss_vfe_vbif_ahb_clk = {
2428	.halt_reg = 0x5408c,
2429	.halt_check = BRANCH_HALT,
2430	.clkr = {
2431		.enable_reg = 0x5408c,
2432		.enable_mask = BIT(0),
2433		.hw.init = &(struct clk_init_data){
2434			.name = "gcc_camss_vfe_vbif_ahb_clk",
2435			.parent_hws = (const struct clk_hw*[]){
2436				&gcc_camss_ahb_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_camss_vfe_vbif_axi_clk = {
2446	.halt_reg = 0x54090,
2447	.halt_check = BRANCH_HALT,
2448	.clkr = {
2449		.enable_reg = 0x54090,
2450		.enable_mask = BIT(0),
2451		.hw.init = &(struct clk_init_data){
2452			.name = "gcc_camss_vfe_vbif_axi_clk",
2453			.ops = &clk_branch2_ops,
2454		},
2455	},
2456};
2457
2458static struct clk_branch gcc_ce1_ahb_clk = {
2459	.halt_reg = 0x2700c,
2460	.halt_check = BRANCH_HALT_VOTED,
2461	.hwcg_reg = 0x2700c,
2462	.hwcg_bit = 1,
2463	.clkr = {
2464		.enable_reg = 0x79004,
2465		.enable_mask = BIT(3),
2466		.hw.init = &(struct clk_init_data){
2467			.name = "gcc_ce1_ahb_clk",
2468			.ops = &clk_branch2_ops,
2469		},
2470	},
2471};
2472
2473static struct clk_branch gcc_ce1_axi_clk = {
2474	.halt_reg = 0x27008,
2475	.halt_check = BRANCH_HALT_VOTED,
2476	.clkr = {
2477		.enable_reg = 0x79004,
2478		.enable_mask = BIT(4),
2479		.hw.init = &(struct clk_init_data){
2480			.name = "gcc_ce1_axi_clk",
2481			.ops = &clk_branch2_ops,
2482		},
2483	},
2484};
2485
2486static struct clk_branch gcc_ce1_clk = {
2487	.halt_reg = 0x27004,
2488	.halt_check = BRANCH_HALT_VOTED,
2489	.clkr = {
2490		.enable_reg = 0x79004,
2491		.enable_mask = BIT(5),
2492		.hw.init = &(struct clk_init_data){
2493			.name = "gcc_ce1_clk",
2494			.ops = &clk_branch2_ops,
2495		},
2496	},
2497};
2498
2499static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2500	.halt_reg = 0x1a084,
2501	.halt_check = BRANCH_HALT,
2502	.clkr = {
2503		.enable_reg = 0x1a084,
2504		.enable_mask = BIT(0),
2505		.hw.init = &(struct clk_init_data){
2506			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
2507			.parent_hws = (const struct clk_hw*[]){
2508				&gcc_usb30_prim_master_clk_src.clkr.hw,
2509			},
2510			.num_parents = 1,
2511			.flags = CLK_SET_RATE_PARENT,
2512			.ops = &clk_branch2_ops,
2513		},
2514	},
2515};
2516
2517static struct clk_branch gcc_cpuss_gnoc_clk = {
2518	.halt_reg = 0x2b004,
2519	.halt_check = BRANCH_HALT_VOTED,
2520	.hwcg_reg = 0x2b004,
2521	.hwcg_bit = 1,
2522	.clkr = {
2523		.enable_reg = 0x79004,
2524		.enable_mask = BIT(22),
2525		.hw.init = &(struct clk_init_data){
2526			.name = "gcc_cpuss_gnoc_clk",
2527			.flags = CLK_IS_CRITICAL,
2528			.ops = &clk_branch2_ops,
2529		},
2530	},
2531};
2532
2533static struct clk_branch gcc_disp_ahb_clk = {
2534	.halt_reg = 0x1700c,
2535	.halt_check = BRANCH_HALT,
2536	.hwcg_reg = 0x1700c,
2537	.hwcg_bit = 1,
2538	.clkr = {
2539		.enable_reg = 0x1700c,
2540		.enable_mask = BIT(0),
2541		.hw.init = &(struct clk_init_data){
2542			.name = "gcc_disp_ahb_clk",
2543			.flags = CLK_IS_CRITICAL,
2544			.ops = &clk_branch2_ops,
2545		},
2546	},
2547};
2548
2549static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2550	.halt_check = BRANCH_HALT_DELAY,
2551	.clkr = {
2552		.enable_reg = 0x79004,
2553		.enable_mask = BIT(20),
2554		.hw.init = &(struct clk_init_data){
2555			.name = "gcc_disp_gpll0_div_clk_src",
2556			.parent_hws = (const struct clk_hw*[]){
2557				&gpll0_out_early.clkr.hw,
2558			},
2559			.num_parents = 1,
2560			.ops = &clk_branch2_ops,
2561		},
2562	},
2563};
2564
2565static struct clk_branch gcc_disp_hf_axi_clk = {
2566	.halt_reg = 0x17020,
2567	.halt_check = BRANCH_HALT,
2568	.clkr = {
2569		.enable_reg = 0x17020,
2570		.enable_mask = BIT(0),
2571		.hw.init = &(struct clk_init_data){
2572			.name = "gcc_disp_hf_axi_clk",
2573			.ops = &clk_branch2_ops,
2574		},
2575	},
2576};
2577
2578static struct clk_branch gcc_disp_throttle_core_clk = {
2579	.halt_reg = 0x17064,
2580	.halt_check = BRANCH_HALT_VOTED,
2581	.clkr = {
2582		.enable_reg = 0x7900c,
2583		.enable_mask = BIT(5),
2584		.hw.init = &(struct clk_init_data){
2585			.name = "gcc_disp_throttle_core_clk",
2586			.ops = &clk_branch2_ops,
2587		},
2588	},
2589};
2590
2591static struct clk_branch gcc_disp_xo_clk = {
2592	.halt_reg = 0x1702c,
2593	.halt_check = BRANCH_HALT,
2594	.clkr = {
2595		.enable_reg = 0x1702c,
2596		.enable_mask = BIT(0),
2597		.hw.init = &(struct clk_init_data){
2598			.name = "gcc_disp_xo_clk",
2599			.flags = CLK_IS_CRITICAL,
2600			.ops = &clk_branch2_ops,
2601		},
2602	},
2603};
2604
2605static struct clk_branch gcc_gp1_clk = {
2606	.halt_reg = 0x4d000,
2607	.halt_check = BRANCH_HALT,
2608	.clkr = {
2609		.enable_reg = 0x4d000,
2610		.enable_mask = BIT(0),
2611		.hw.init = &(struct clk_init_data){
2612			.name = "gcc_gp1_clk",
2613			.parent_hws = (const struct clk_hw*[]){
2614				&gcc_gp1_clk_src.clkr.hw,
2615			},
2616			.num_parents = 1,
2617			.flags = CLK_SET_RATE_PARENT,
2618			.ops = &clk_branch2_ops,
2619		},
2620	},
2621};
2622
2623static struct clk_branch gcc_gp2_clk = {
2624	.halt_reg = 0x4e000,
2625	.halt_check = BRANCH_HALT,
2626	.clkr = {
2627		.enable_reg = 0x4e000,
2628		.enable_mask = BIT(0),
2629		.hw.init = &(struct clk_init_data){
2630			.name = "gcc_gp2_clk",
2631			.parent_hws = (const struct clk_hw*[]){
2632				&gcc_gp2_clk_src.clkr.hw,
2633			},
2634			.num_parents = 1,
2635			.flags = CLK_SET_RATE_PARENT,
2636			.ops = &clk_branch2_ops,
2637		},
2638	},
2639};
2640
2641static struct clk_branch gcc_gp3_clk = {
2642	.halt_reg = 0x4f000,
2643	.halt_check = BRANCH_HALT,
2644	.clkr = {
2645		.enable_reg = 0x4f000,
2646		.enable_mask = BIT(0),
2647		.hw.init = &(struct clk_init_data){
2648			.name = "gcc_gp3_clk",
2649			.parent_hws = (const struct clk_hw*[]){
2650				&gcc_gp3_clk_src.clkr.hw,
2651			},
2652			.num_parents = 1,
2653			.flags = CLK_SET_RATE_PARENT,
2654			.ops = &clk_branch2_ops,
2655		},
2656	},
2657};
2658
2659static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2660	.halt_reg = 0x36004,
2661	.halt_check = BRANCH_HALT,
2662	.hwcg_reg = 0x36004,
2663	.hwcg_bit = 1,
2664	.clkr = {
2665		.enable_reg = 0x36004,
2666		.enable_mask = BIT(0),
2667		.hw.init = &(struct clk_init_data){
2668			.name = "gcc_gpu_cfg_ahb_clk",
2669			.flags = CLK_IS_CRITICAL,
2670			.ops = &clk_branch2_ops,
2671		},
2672	},
2673};
2674
2675static struct clk_branch gcc_gpu_gpll0_clk_src = {
2676	.halt_check = BRANCH_HALT_DELAY,
2677	.clkr = {
2678		.enable_reg = 0x79004,
2679		.enable_mask = BIT(15),
2680		.hw.init = &(struct clk_init_data){
2681			.name = "gcc_gpu_gpll0_clk_src",
2682			.parent_hws = (const struct clk_hw*[]){
2683				&gpll0_out_early.clkr.hw,
2684			},
2685			.num_parents = 1,
2686			.ops = &clk_branch2_ops,
2687		},
2688	},
2689};
2690
2691static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2692	.halt_check = BRANCH_HALT_DELAY,
2693	.clkr = {
2694		.enable_reg = 0x79004,
2695		.enable_mask = BIT(16),
2696		.hw.init = &(struct clk_init_data){
2697			.name = "gcc_gpu_gpll0_div_clk_src",
2698			.parent_hws = (const struct clk_hw*[]){
2699				&gpll0_out_aux2.hw,
2700			},
2701			.num_parents = 1,
2702			.ops = &clk_branch2_ops,
2703		},
2704	},
2705};
2706
2707static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2708	.halt_reg = 0x3600c,
2709	.halt_check = BRANCH_VOTED,
2710	.clkr = {
2711		.enable_reg = 0x3600c,
2712		.enable_mask = BIT(0),
2713		.hw.init = &(struct clk_init_data){
2714			.name = "gcc_gpu_memnoc_gfx_clk",
2715			.ops = &clk_branch2_ops,
2716		},
2717	},
2718};
2719
2720static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2721	.halt_reg = 0x36018,
2722	.halt_check = BRANCH_HALT,
2723	.clkr = {
2724		.enable_reg = 0x36018,
2725		.enable_mask = BIT(0),
2726		.hw.init = &(struct clk_init_data){
2727			.name = "gcc_gpu_snoc_dvm_gfx_clk",
2728			.ops = &clk_branch2_ops,
2729		},
2730	},
2731};
2732
2733static struct clk_branch gcc_gpu_throttle_core_clk = {
2734	.halt_reg = 0x36048,
2735	.halt_check = BRANCH_HALT_VOTED,
2736	.clkr = {
2737		.enable_reg = 0x79004,
2738		.enable_mask = BIT(31),
2739		.hw.init = &(struct clk_init_data){
2740			.name = "gcc_gpu_throttle_core_clk",
2741			.ops = &clk_branch2_ops,
2742		},
2743	},
2744};
2745
2746static struct clk_branch gcc_gpu_throttle_xo_clk = {
2747	.halt_reg = 0x36044,
2748	.halt_check = BRANCH_HALT,
2749	.clkr = {
2750		.enable_reg = 0x36044,
2751		.enable_mask = BIT(0),
2752		.hw.init = &(struct clk_init_data){
2753			.name = "gcc_gpu_throttle_xo_clk",
2754			.ops = &clk_branch2_ops,
2755		},
2756	},
2757};
2758
2759static struct clk_branch gcc_mss_vs_clk = {
2760	.halt_reg = 0x42048,
2761	.halt_check = BRANCH_HALT,
2762	.clkr = {
2763		.enable_reg = 0x42048,
2764		.enable_mask = BIT(0),
2765		.hw.init = &(struct clk_init_data){
2766			.name = "gcc_mss_vs_clk",
2767			.parent_hws = (const struct clk_hw*[]){
2768				&gcc_vsensor_clk_src.clkr.hw,
2769			},
2770			.num_parents = 1,
2771			.flags = CLK_SET_RATE_PARENT,
2772			.ops = &clk_branch2_ops,
2773		},
2774	},
2775};
2776
2777static struct clk_branch gcc_pdm2_clk = {
2778	.halt_reg = 0x2000c,
2779	.halt_check = BRANCH_HALT,
2780	.clkr = {
2781		.enable_reg = 0x2000c,
2782		.enable_mask = BIT(0),
2783		.hw.init = &(struct clk_init_data){
2784			.name = "gcc_pdm2_clk",
2785			.parent_hws = (const struct clk_hw*[]){
2786				&gcc_pdm2_clk_src.clkr.hw,
2787			},
2788			.num_parents = 1,
2789			.flags = CLK_SET_RATE_PARENT,
2790			.ops = &clk_branch2_ops,
2791		},
2792	},
2793};
2794
2795static struct clk_branch gcc_pdm_ahb_clk = {
2796	.halt_reg = 0x20004,
2797	.halt_check = BRANCH_HALT,
2798	.hwcg_reg = 0x20004,
2799	.hwcg_bit = 1,
2800	.clkr = {
2801		.enable_reg = 0x20004,
2802		.enable_mask = BIT(0),
2803		.hw.init = &(struct clk_init_data){
2804			.name = "gcc_pdm_ahb_clk",
2805			.ops = &clk_branch2_ops,
2806		},
2807	},
2808};
2809
2810static struct clk_branch gcc_pdm_xo4_clk = {
2811	.halt_reg = 0x20008,
2812	.halt_check = BRANCH_HALT,
2813	.clkr = {
2814		.enable_reg = 0x20008,
2815		.enable_mask = BIT(0),
2816		.hw.init = &(struct clk_init_data){
2817			.name = "gcc_pdm_xo4_clk",
2818			.ops = &clk_branch2_ops,
2819		},
2820	},
2821};
2822
2823static struct clk_branch gcc_prng_ahb_clk = {
2824	.halt_reg = 0x21004,
2825	.halt_check = BRANCH_HALT_VOTED,
2826	.hwcg_reg = 0x21004,
2827	.hwcg_bit = 1,
2828	.clkr = {
2829		.enable_reg = 0x79004,
2830		.enable_mask = BIT(13),
2831		.hw.init = &(struct clk_init_data){
2832			.name = "gcc_prng_ahb_clk",
2833			.ops = &clk_branch2_ops,
2834		},
2835	},
2836};
2837
2838static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2839	.halt_reg = 0x17014,
2840	.halt_check = BRANCH_HALT,
2841	.hwcg_reg = 0x17014,
2842	.hwcg_bit = 1,
2843	.clkr = {
2844		.enable_reg = 0x7900c,
2845		.enable_mask = BIT(0),
2846		.hw.init = &(struct clk_init_data){
2847			.name = "gcc_qmip_camera_nrt_ahb_clk",
2848			.ops = &clk_branch2_ops,
2849		},
2850	},
2851};
2852
2853static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2854	.halt_reg = 0x17060,
2855	.halt_check = BRANCH_HALT_VOTED,
2856	.hwcg_reg = 0x17060,
2857	.hwcg_bit = 1,
2858	.clkr = {
2859		.enable_reg = 0x7900c,
2860		.enable_mask = BIT(2),
2861		.hw.init = &(struct clk_init_data){
2862			.name = "gcc_qmip_camera_rt_ahb_clk",
2863			.ops = &clk_branch2_ops,
2864		},
2865	},
2866};
2867
2868static struct clk_branch gcc_qmip_disp_ahb_clk = {
2869	.halt_reg = 0x17018,
2870	.halt_check = BRANCH_HALT,
2871	.hwcg_reg = 0x17018,
2872	.hwcg_bit = 1,
2873	.clkr = {
2874		.enable_reg = 0x7900c,
2875		.enable_mask = BIT(1),
2876		.hw.init = &(struct clk_init_data){
2877			.name = "gcc_qmip_disp_ahb_clk",
2878			.ops = &clk_branch2_ops,
2879		},
2880	},
2881};
2882
2883static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2884	.halt_reg = 0x36040,
2885	.halt_check = BRANCH_HALT_VOTED,
2886	.hwcg_reg = 0x36040,
2887	.hwcg_bit = 1,
2888	.clkr = {
2889		.enable_reg = 0x7900c,
2890		.enable_mask = BIT(4),
2891		.hw.init = &(struct clk_init_data){
2892			.name = "gcc_qmip_gpu_cfg_ahb_clk",
2893			.ops = &clk_branch2_ops,
2894		},
2895	},
2896};
2897
2898static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2899	.halt_reg = 0x17010,
2900	.halt_check = BRANCH_HALT,
2901	.hwcg_reg = 0x17010,
2902	.hwcg_bit = 1,
2903	.clkr = {
2904		.enable_reg = 0x79004,
2905		.enable_mask = BIT(25),
2906		.hw.init = &(struct clk_init_data){
2907			.name = "gcc_qmip_video_vcodec_ahb_clk",
2908			.ops = &clk_branch2_ops,
2909		},
2910	},
2911};
2912
2913static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2914	.halt_reg = 0x1f014,
2915	.halt_check = BRANCH_HALT_VOTED,
2916	.clkr = {
2917		.enable_reg = 0x7900c,
2918		.enable_mask = BIT(9),
2919		.hw.init = &(struct clk_init_data){
2920			.name = "gcc_qupv3_wrap0_core_2x_clk",
2921			.ops = &clk_branch2_ops,
2922		},
2923	},
2924};
2925
2926static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2927	.halt_reg = 0x1f00c,
2928	.halt_check = BRANCH_HALT_VOTED,
2929	.clkr = {
2930		.enable_reg = 0x7900c,
2931		.enable_mask = BIT(8),
2932		.hw.init = &(struct clk_init_data){
2933			.name = "gcc_qupv3_wrap0_core_clk",
2934			.ops = &clk_branch2_ops,
2935		},
2936	},
2937};
2938
2939static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2940	.halt_reg = 0x1f144,
2941	.halt_check = BRANCH_HALT_VOTED,
2942	.clkr = {
2943		.enable_reg = 0x7900c,
2944		.enable_mask = BIT(10),
2945		.hw.init = &(struct clk_init_data){
2946			.name = "gcc_qupv3_wrap0_s0_clk",
2947			.parent_hws = (const struct clk_hw*[]){
2948				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2949			},
2950			.num_parents = 1,
2951			.flags = CLK_SET_RATE_PARENT,
2952			.ops = &clk_branch2_ops,
2953		},
2954	},
2955};
2956
2957static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2958	.halt_reg = 0x1f274,
2959	.halt_check = BRANCH_HALT_VOTED,
2960	.clkr = {
2961		.enable_reg = 0x7900c,
2962		.enable_mask = BIT(11),
2963		.hw.init = &(struct clk_init_data){
2964			.name = "gcc_qupv3_wrap0_s1_clk",
2965			.parent_hws = (const struct clk_hw*[]){
2966				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2967			},
2968			.num_parents = 1,
2969			.flags = CLK_SET_RATE_PARENT,
2970			.ops = &clk_branch2_ops,
2971		},
2972	},
2973};
2974
2975static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2976	.halt_reg = 0x1f3a4,
2977	.halt_check = BRANCH_HALT_VOTED,
2978	.clkr = {
2979		.enable_reg = 0x7900c,
2980		.enable_mask = BIT(12),
2981		.hw.init = &(struct clk_init_data){
2982			.name = "gcc_qupv3_wrap0_s2_clk",
2983			.parent_hws = (const struct clk_hw*[]){
2984				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2985			},
2986			.num_parents = 1,
2987			.flags = CLK_SET_RATE_PARENT,
2988			.ops = &clk_branch2_ops,
2989		},
2990	},
2991};
2992
2993static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2994	.halt_reg = 0x1f4d4,
2995	.halt_check = BRANCH_HALT_VOTED,
2996	.clkr = {
2997		.enable_reg = 0x7900c,
2998		.enable_mask = BIT(13),
2999		.hw.init = &(struct clk_init_data){
3000			.name = "gcc_qupv3_wrap0_s3_clk",
3001			.parent_hws = (const struct clk_hw*[]){
3002				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
3003			},
3004			.num_parents = 1,
3005			.flags = CLK_SET_RATE_PARENT,
3006			.ops = &clk_branch2_ops,
3007		},
3008	},
3009};
3010
3011static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
3012	.halt_reg = 0x1f604,
3013	.halt_check = BRANCH_HALT_VOTED,
3014	.clkr = {
3015		.enable_reg = 0x7900c,
3016		.enable_mask = BIT(14),
3017		.hw.init = &(struct clk_init_data){
3018			.name = "gcc_qupv3_wrap0_s4_clk",
3019			.parent_hws = (const struct clk_hw*[]){
3020				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
3021			},
3022			.num_parents = 1,
3023			.flags = CLK_SET_RATE_PARENT,
3024			.ops = &clk_branch2_ops,
3025		},
3026	},
3027};
3028
3029static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
3030	.halt_reg = 0x1f734,
3031	.halt_check = BRANCH_HALT_VOTED,
3032	.clkr = {
3033		.enable_reg = 0x7900c,
3034		.enable_mask = BIT(15),
3035		.hw.init = &(struct clk_init_data){
3036			.name = "gcc_qupv3_wrap0_s5_clk",
3037			.parent_hws = (const struct clk_hw*[]){
3038				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
3039			},
3040			.num_parents = 1,
3041			.flags = CLK_SET_RATE_PARENT,
3042			.ops = &clk_branch2_ops,
3043		},
3044	},
3045};
3046
3047static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
3048	.halt_reg = 0x39014,
3049	.halt_check = BRANCH_HALT_VOTED,
3050	.clkr = {
3051		.enable_reg = 0x7900c,
3052		.enable_mask = BIT(18),
3053		.hw.init = &(struct clk_init_data){
3054			.name = "gcc_qupv3_wrap1_core_2x_clk",
3055			.ops = &clk_branch2_ops,
3056		},
3057	},
3058};
3059
3060static struct clk_branch gcc_qupv3_wrap1_core_clk = {
3061	.halt_reg = 0x3900c,
3062	.halt_check = BRANCH_HALT_VOTED,
3063	.clkr = {
3064		.enable_reg = 0x7900c,
3065		.enable_mask = BIT(19),
3066		.hw.init = &(struct clk_init_data){
3067			.name = "gcc_qupv3_wrap1_core_clk",
3068			.ops = &clk_branch2_ops,
3069		},
3070	},
3071};
3072
3073static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
3074	.halt_reg = 0x39144,
3075	.halt_check = BRANCH_HALT_VOTED,
3076	.clkr = {
3077		.enable_reg = 0x7900c,
3078		.enable_mask = BIT(22),
3079		.hw.init = &(struct clk_init_data){
3080			.name = "gcc_qupv3_wrap1_s0_clk",
3081			.parent_hws = (const struct clk_hw*[]){
3082				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
3083			},
3084			.num_parents = 1,
3085			.flags = CLK_SET_RATE_PARENT,
3086			.ops = &clk_branch2_ops,
3087		},
3088	},
3089};
3090
3091static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
3092	.halt_reg = 0x39274,
3093	.halt_check = BRANCH_HALT_VOTED,
3094	.clkr = {
3095		.enable_reg = 0x7900c,
3096		.enable_mask = BIT(23),
3097		.hw.init = &(struct clk_init_data){
3098			.name = "gcc_qupv3_wrap1_s1_clk",
3099			.parent_hws = (const struct clk_hw*[]){
3100				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
3101			},
3102			.num_parents = 1,
3103			.flags = CLK_SET_RATE_PARENT,
3104			.ops = &clk_branch2_ops,
3105		},
3106	},
3107};
3108
3109static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
3110	.halt_reg = 0x393a4,
3111	.halt_check = BRANCH_HALT_VOTED,
3112	.clkr = {
3113		.enable_reg = 0x7900c,
3114		.enable_mask = BIT(24),
3115		.hw.init = &(struct clk_init_data){
3116			.name = "gcc_qupv3_wrap1_s2_clk",
3117			.parent_hws = (const struct clk_hw*[]){
3118				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
3119			},
3120			.num_parents = 1,
3121			.flags = CLK_SET_RATE_PARENT,
3122			.ops = &clk_branch2_ops,
3123		},
3124	},
3125};
3126
3127static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
3128	.halt_reg = 0x394d4,
3129	.halt_check = BRANCH_HALT_VOTED,
3130	.clkr = {
3131		.enable_reg = 0x7900c,
3132		.enable_mask = BIT(25),
3133		.hw.init = &(struct clk_init_data){
3134			.name = "gcc_qupv3_wrap1_s3_clk",
3135			.parent_hws = (const struct clk_hw*[]){
3136				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
3137			},
3138			.num_parents = 1,
3139			.flags = CLK_SET_RATE_PARENT,
3140			.ops = &clk_branch2_ops,
3141		},
3142	},
3143};
3144
3145static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
3146	.halt_reg = 0x39604,
3147	.halt_check = BRANCH_HALT_VOTED,
3148	.clkr = {
3149		.enable_reg = 0x7900c,
3150		.enable_mask = BIT(26),
3151		.hw.init = &(struct clk_init_data){
3152			.name = "gcc_qupv3_wrap1_s4_clk",
3153			.parent_hws = (const struct clk_hw*[]){
3154				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
3155			},
3156			.num_parents = 1,
3157			.flags = CLK_SET_RATE_PARENT,
3158			.ops = &clk_branch2_ops,
3159		},
3160	},
3161};
3162
3163static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
3164	.halt_reg = 0x39734,
3165	.halt_check = BRANCH_HALT_VOTED,
3166	.clkr = {
3167		.enable_reg = 0x7900c,
3168		.enable_mask = BIT(27),
3169		.hw.init = &(struct clk_init_data){
3170			.name = "gcc_qupv3_wrap1_s5_clk",
3171			.parent_hws = (const struct clk_hw*[]){
3172				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
3173			},
3174			.num_parents = 1,
3175			.flags = CLK_SET_RATE_PARENT,
3176			.ops = &clk_branch2_ops,
3177		},
3178	},
3179};
3180
3181static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3182	.halt_reg = 0x1f004,
3183	.halt_check = BRANCH_HALT_VOTED,
3184	.clkr = {
3185		.enable_reg = 0x7900c,
3186		.enable_mask = BIT(6),
3187		.hw.init = &(struct clk_init_data){
3188			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
3189			.ops = &clk_branch2_ops,
3190		},
3191	},
3192};
3193
3194static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3195	.halt_reg = 0x1f008,
3196	.halt_check = BRANCH_HALT_VOTED,
3197	.hwcg_reg = 0x1f008,
3198	.hwcg_bit = 1,
3199	.clkr = {
3200		.enable_reg = 0x7900c,
3201		.enable_mask = BIT(7),
3202		.hw.init = &(struct clk_init_data){
3203			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
3204			.ops = &clk_branch2_ops,
3205		},
3206	},
3207};
3208
3209static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3210	.halt_reg = 0x39004,
3211	.halt_check = BRANCH_HALT_VOTED,
3212	.clkr = {
3213		.enable_reg = 0x7900c,
3214		.enable_mask = BIT(20),
3215		.hw.init = &(struct clk_init_data){
3216			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
3217			.ops = &clk_branch2_ops,
3218		},
3219	},
3220};
3221
3222static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3223	.halt_reg = 0x39008,
3224	.halt_check = BRANCH_HALT_VOTED,
3225	.hwcg_reg = 0x39008,
3226	.hwcg_bit = 1,
3227	.clkr = {
3228		.enable_reg = 0x7900c,
3229		.enable_mask = BIT(21),
3230		.hw.init = &(struct clk_init_data){
3231			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
3232			.ops = &clk_branch2_ops,
3233		},
3234	},
3235};
3236
3237static struct clk_branch gcc_sdcc1_ahb_clk = {
3238	.halt_reg = 0x38008,
3239	.halt_check = BRANCH_HALT,
3240	.clkr = {
3241		.enable_reg = 0x38008,
3242		.enable_mask = BIT(0),
3243		.hw.init = &(struct clk_init_data){
3244			.name = "gcc_sdcc1_ahb_clk",
3245			.ops = &clk_branch2_ops,
3246		},
3247	},
3248};
3249
3250static struct clk_branch gcc_sdcc1_apps_clk = {
3251	.halt_reg = 0x38004,
3252	.halt_check = BRANCH_HALT,
3253	.clkr = {
3254		.enable_reg = 0x38004,
3255		.enable_mask = BIT(0),
3256		.hw.init = &(struct clk_init_data){
3257			.name = "gcc_sdcc1_apps_clk",
3258			.parent_hws = (const struct clk_hw*[]){
3259				&gcc_sdcc1_apps_clk_src.clkr.hw,
3260			},
3261			.num_parents = 1,
3262			.flags = CLK_SET_RATE_PARENT,
3263			.ops = &clk_branch2_ops,
3264		},
3265	},
3266};
3267
3268static struct clk_branch gcc_sdcc1_ice_core_clk = {
3269	.halt_reg = 0x3800c,
3270	.halt_check = BRANCH_HALT,
3271	.clkr = {
3272		.enable_reg = 0x3800c,
3273		.enable_mask = BIT(0),
3274		.hw.init = &(struct clk_init_data){
3275			.name = "gcc_sdcc1_ice_core_clk",
3276			.parent_hws = (const struct clk_hw*[]){
3277				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
3278			},
3279			.num_parents = 1,
3280			.flags = CLK_SET_RATE_PARENT,
3281			.ops = &clk_branch2_ops,
3282		},
3283	},
3284};
3285
3286static struct clk_branch gcc_sdcc2_ahb_clk = {
3287	.halt_reg = 0x1e008,
3288	.halt_check = BRANCH_HALT,
3289	.clkr = {
3290		.enable_reg = 0x1e008,
3291		.enable_mask = BIT(0),
3292		.hw.init = &(struct clk_init_data){
3293			.name = "gcc_sdcc2_ahb_clk",
3294			.ops = &clk_branch2_ops,
3295		},
3296	},
3297};
3298
3299static struct clk_branch gcc_sdcc2_apps_clk = {
3300	.halt_reg = 0x1e004,
3301	.halt_check = BRANCH_HALT,
3302	.clkr = {
3303		.enable_reg = 0x1e004,
3304		.enable_mask = BIT(0),
3305		.hw.init = &(struct clk_init_data){
3306			.name = "gcc_sdcc2_apps_clk",
3307			.parent_hws = (const struct clk_hw*[]){
3308				&gcc_sdcc2_apps_clk_src.clkr.hw,
3309			},
3310			.num_parents = 1,
3311			.flags = CLK_SET_RATE_PARENT,
3312			.ops = &clk_branch2_ops,
3313		},
3314	},
3315};
3316
3317static struct clk_branch gcc_sys_noc_compute_sf_axi_clk = {
3318	.halt_reg = 0x1050c,
3319	.halt_check = BRANCH_HALT,
3320	.clkr = {
3321		.enable_reg = 0x1050c,
3322		.enable_mask = BIT(0),
3323		.hw.init = &(struct clk_init_data){
3324			.name = "gcc_sys_noc_compute_sf_axi_clk",
3325			.flags = CLK_IS_CRITICAL,
3326			.ops = &clk_branch2_ops,
3327		},
3328	},
3329};
3330
3331static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
3332	.halt_reg = 0x2b06c,
3333	.halt_check = BRANCH_HALT_VOTED,
3334	.clkr = {
3335		.enable_reg = 0x79004,
3336		.enable_mask = BIT(0),
3337		.hw.init = &(struct clk_init_data){
3338			.name = "gcc_sys_noc_cpuss_ahb_clk",
3339			.flags = CLK_IS_CRITICAL,
3340			.ops = &clk_branch2_ops,
3341		},
3342	},
3343};
3344
3345static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
3346	.halt_reg = 0x45098,
3347	.halt_check = BRANCH_HALT,
3348	.clkr = {
3349		.enable_reg = 0x45098,
3350		.enable_mask = BIT(0),
3351		.hw.init = &(struct clk_init_data){
3352			.name = "gcc_sys_noc_ufs_phy_axi_clk",
3353			.parent_hws = (const struct clk_hw*[]){
3354				&gcc_ufs_phy_axi_clk_src.clkr.hw,
3355			},
3356			.num_parents = 1,
3357			.flags = CLK_SET_RATE_PARENT,
3358			.ops = &clk_branch2_ops,
3359		},
3360	},
3361};
3362
3363static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
3364	.halt_reg = 0x1a080,
3365	.halt_check = BRANCH_HALT,
3366	.clkr = {
3367		.enable_reg = 0x1a080,
3368		.enable_mask = BIT(0),
3369		.hw.init = &(struct clk_init_data){
3370			.name = "gcc_sys_noc_usb3_prim_axi_clk",
3371			.parent_hws = (const struct clk_hw*[]){
3372				&gcc_usb30_prim_master_clk_src.clkr.hw,
3373			},
3374			.num_parents = 1,
3375			.flags = CLK_SET_RATE_PARENT,
3376			.ops = &clk_branch2_ops,
3377		},
3378	},
3379};
3380
3381static struct clk_branch gcc_ufs_mem_clkref_clk = {
3382	.halt_reg = 0x8c000,
3383	.halt_check = BRANCH_HALT,
3384	.clkr = {
3385		.enable_reg = 0x8c000,
3386		.enable_mask = BIT(0),
3387		.hw.init = &(struct clk_init_data){
3388			.name = "gcc_ufs_mem_clkref_clk",
3389			.ops = &clk_branch2_ops,
3390		},
3391	},
3392};
3393
3394static struct clk_branch gcc_ufs_phy_ahb_clk = {
3395	.halt_reg = 0x45014,
3396	.halt_check = BRANCH_HALT,
3397	.hwcg_reg = 0x45014,
3398	.hwcg_bit = 1,
3399	.clkr = {
3400		.enable_reg = 0x45014,
3401		.enable_mask = BIT(0),
3402		.hw.init = &(struct clk_init_data){
3403			.name = "gcc_ufs_phy_ahb_clk",
3404			.ops = &clk_branch2_ops,
3405		},
3406	},
3407};
3408
3409static struct clk_branch gcc_ufs_phy_axi_clk = {
3410	.halt_reg = 0x45010,
3411	.halt_check = BRANCH_HALT,
3412	.hwcg_reg = 0x45010,
3413	.hwcg_bit = 1,
3414	.clkr = {
3415		.enable_reg = 0x45010,
3416		.enable_mask = BIT(0),
3417		.hw.init = &(struct clk_init_data){
3418			.name = "gcc_ufs_phy_axi_clk",
3419			.parent_hws = (const struct clk_hw*[]){
3420				&gcc_ufs_phy_axi_clk_src.clkr.hw,
3421			},
3422			.num_parents = 1,
3423			.flags = CLK_SET_RATE_PARENT,
3424			.ops = &clk_branch2_ops,
3425		},
3426	},
3427};
3428
3429static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3430	.halt_reg = 0x45044,
3431	.halt_check = BRANCH_HALT,
3432	.hwcg_reg = 0x45044,
3433	.hwcg_bit = 1,
3434	.clkr = {
3435		.enable_reg = 0x45044,
3436		.enable_mask = BIT(0),
3437		.hw.init = &(struct clk_init_data){
3438			.name = "gcc_ufs_phy_ice_core_clk",
3439			.parent_hws = (const struct clk_hw*[]){
3440				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3441			},
3442			.num_parents = 1,
3443			.flags = CLK_SET_RATE_PARENT,
3444			.ops = &clk_branch2_ops,
3445		},
3446	},
3447};
3448
3449static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3450	.halt_reg = 0x45078,
3451	.halt_check = BRANCH_HALT,
3452	.hwcg_reg = 0x45078,
3453	.hwcg_bit = 1,
3454	.clkr = {
3455		.enable_reg = 0x45078,
3456		.enable_mask = BIT(0),
3457		.hw.init = &(struct clk_init_data){
3458			.name = "gcc_ufs_phy_phy_aux_clk",
3459			.parent_hws = (const struct clk_hw*[]){
3460				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3461			},
3462			.num_parents = 1,
3463			.flags = CLK_SET_RATE_PARENT,
3464			.ops = &clk_branch2_ops,
3465		},
3466	},
3467};
3468
3469static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3470	.halt_reg = 0x4501c,
3471	.halt_check = BRANCH_HALT_SKIP,
3472	.clkr = {
3473		.enable_reg = 0x4501c,
3474		.enable_mask = BIT(0),
3475		.hw.init = &(struct clk_init_data){
3476			.name = "gcc_ufs_phy_rx_symbol_0_clk",
3477			.ops = &clk_branch2_ops,
3478		},
3479	},
3480};
3481
3482static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3483	.halt_reg = 0x45018,
3484	.halt_check = BRANCH_HALT_SKIP,
3485	.clkr = {
3486		.enable_reg = 0x45018,
3487		.enable_mask = BIT(0),
3488		.hw.init = &(struct clk_init_data){
3489			.name = "gcc_ufs_phy_tx_symbol_0_clk",
3490			.ops = &clk_branch2_ops,
3491		},
3492	},
3493};
3494
3495static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3496	.halt_reg = 0x45040,
3497	.halt_check = BRANCH_HALT,
3498	.hwcg_reg = 0x45040,
3499	.hwcg_bit = 1,
3500	.clkr = {
3501		.enable_reg = 0x45040,
3502		.enable_mask = BIT(0),
3503		.hw.init = &(struct clk_init_data){
3504			.name = "gcc_ufs_phy_unipro_core_clk",
3505			.parent_hws = (const struct clk_hw*[]){
3506				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3507			},
3508			.num_parents = 1,
3509			.flags = CLK_SET_RATE_PARENT,
3510			.ops = &clk_branch2_ops,
3511		},
3512	},
3513};
3514
3515static struct clk_branch gcc_usb30_prim_master_clk = {
3516	.halt_reg = 0x1a010,
3517	.halt_check = BRANCH_HALT,
3518	.clkr = {
3519		.enable_reg = 0x1a010,
3520		.enable_mask = BIT(0),
3521		.hw.init = &(struct clk_init_data){
3522			.name = "gcc_usb30_prim_master_clk",
3523			.parent_hws = (const struct clk_hw*[]){
3524				&gcc_usb30_prim_master_clk_src.clkr.hw,
3525			},
3526			.num_parents = 1,
3527			.flags = CLK_SET_RATE_PARENT,
3528			.ops = &clk_branch2_ops,
3529		},
3530	},
3531};
3532
3533static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3534	.halt_reg = 0x1a018,
3535	.halt_check = BRANCH_HALT,
3536	.clkr = {
3537		.enable_reg = 0x1a018,
3538		.enable_mask = BIT(0),
3539		.hw.init = &(struct clk_init_data){
3540			.name = "gcc_usb30_prim_mock_utmi_clk",
3541			.parent_hws = (const struct clk_hw*[]){
3542				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
3543			},
3544			.num_parents = 1,
3545			.flags = CLK_SET_RATE_PARENT,
3546			.ops = &clk_branch2_ops,
3547		},
3548	},
3549};
3550
3551static struct clk_branch gcc_usb30_prim_sleep_clk = {
3552	.halt_reg = 0x1a014,
3553	.halt_check = BRANCH_HALT,
3554	.clkr = {
3555		.enable_reg = 0x1a014,
3556		.enable_mask = BIT(0),
3557		.hw.init = &(struct clk_init_data){
3558			.name = "gcc_usb30_prim_sleep_clk",
3559			.ops = &clk_branch2_ops,
3560		},
3561	},
3562};
3563
3564static struct clk_branch gcc_usb3_prim_clkref_clk = {
3565	.halt_reg = 0x80278,
3566	.halt_check = BRANCH_HALT,
3567	.clkr = {
3568		.enable_reg = 0x80278,
3569		.enable_mask = BIT(0),
3570		.hw.init = &(struct clk_init_data){
3571			.name = "gcc_usb3_prim_clkref_clk",
3572			.ops = &clk_branch2_ops,
3573		},
3574	},
3575};
3576
3577static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3578	.halt_reg = 0x1a054,
3579	.halt_check = BRANCH_HALT,
3580	.clkr = {
3581		.enable_reg = 0x1a054,
3582		.enable_mask = BIT(0),
3583		.hw.init = &(struct clk_init_data){
3584			.name = "gcc_usb3_prim_phy_com_aux_clk",
3585			.parent_hws = (const struct clk_hw*[]){
3586				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3587			},
3588			.num_parents = 1,
3589			.flags = CLK_SET_RATE_PARENT,
3590			.ops = &clk_branch2_ops,
3591		},
3592	},
3593};
3594
3595static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3596	.halt_check = BRANCH_HALT_SKIP,
3597	.clkr = {
3598		.enable_reg = 0x1a058,
3599		.enable_mask = BIT(0),
3600		.hw.init = &(struct clk_init_data){
3601			.name = "gcc_usb3_prim_phy_pipe_clk",
3602			.ops = &clk_branch2_ops,
3603		},
3604	},
3605};
3606
3607static struct clk_branch gcc_vdda_vs_clk = {
3608	.halt_reg = 0x4200c,
3609	.halt_check = BRANCH_HALT,
3610	.clkr = {
3611		.enable_reg = 0x4200c,
3612		.enable_mask = BIT(0),
3613		.hw.init = &(struct clk_init_data){
3614			.name = "gcc_vdda_vs_clk",
3615			.parent_hws = (const struct clk_hw*[]){
3616				&gcc_vsensor_clk_src.clkr.hw,
3617			},
3618			.num_parents = 1,
3619			.flags = CLK_SET_RATE_PARENT,
3620			.ops = &clk_branch2_ops,
3621		},
3622	},
3623};
3624
3625static struct clk_branch gcc_vddcx_vs_clk = {
3626	.halt_reg = 0x42004,
3627	.halt_check = BRANCH_HALT,
3628	.clkr = {
3629		.enable_reg = 0x42004,
3630		.enable_mask = BIT(0),
3631		.hw.init = &(struct clk_init_data){
3632			.name = "gcc_vddcx_vs_clk",
3633			.parent_hws = (const struct clk_hw*[]){
3634				&gcc_vsensor_clk_src.clkr.hw,
3635			},
3636			.num_parents = 1,
3637			.flags = CLK_SET_RATE_PARENT,
3638			.ops = &clk_branch2_ops,
3639		},
3640	},
3641};
3642
3643static struct clk_branch gcc_vddmx_vs_clk = {
3644	.halt_reg = 0x42008,
3645	.halt_check = BRANCH_HALT,
3646	.clkr = {
3647		.enable_reg = 0x42008,
3648		.enable_mask = BIT(0),
3649		.hw.init = &(struct clk_init_data){
3650			.name = "gcc_vddmx_vs_clk",
3651			.parent_hws = (const struct clk_hw*[]){
3652				&gcc_vsensor_clk_src.clkr.hw,
3653			},
3654			.num_parents = 1,
3655			.flags = CLK_SET_RATE_PARENT,
3656			.ops = &clk_branch2_ops,
3657		},
3658	},
3659};
3660
3661static struct clk_branch gcc_video_ahb_clk = {
3662	.halt_reg = 0x17004,
3663	.halt_check = BRANCH_HALT,
3664	.hwcg_reg = 0x17004,
3665	.hwcg_bit = 1,
3666	.clkr = {
3667		.enable_reg = 0x17004,
3668		.enable_mask = BIT(0),
3669		.hw.init = &(struct clk_init_data){
3670			.name = "gcc_video_ahb_clk",
3671			.flags = CLK_IS_CRITICAL,
3672			.ops = &clk_branch2_ops,
3673		},
3674	},
3675};
3676
3677static struct clk_branch gcc_video_axi0_clk = {
3678	.halt_reg = 0x1701c,
3679	.halt_check = BRANCH_HALT,
3680	.clkr = {
3681		.enable_reg = 0x1701c,
3682		.enable_mask = BIT(0),
3683		.hw.init = &(struct clk_init_data){
3684			.name = "gcc_video_axi0_clk",
3685			.ops = &clk_branch2_ops,
3686		},
3687	},
3688};
3689
3690static struct clk_branch gcc_video_throttle_core_clk = {
3691	.halt_reg = 0x17068,
3692	.halt_check = BRANCH_HALT_VOTED,
3693	.clkr = {
3694		.enable_reg = 0x79004,
3695		.enable_mask = BIT(28),
3696		.hw.init = &(struct clk_init_data){
3697			.name = "gcc_video_throttle_core_clk",
3698			.ops = &clk_branch2_ops,
3699		},
3700	},
3701};
3702
3703static struct clk_branch gcc_video_xo_clk = {
3704	.halt_reg = 0x17024,
3705	.halt_check = BRANCH_HALT,
3706	.clkr = {
3707		.enable_reg = 0x17024,
3708		.enable_mask = BIT(0),
3709		.hw.init = &(struct clk_init_data){
3710			.name = "gcc_video_xo_clk",
3711			.flags = CLK_IS_CRITICAL,
3712			.ops = &clk_branch2_ops,
3713		},
3714	},
3715};
3716
3717static struct clk_branch gcc_vs_ctrl_ahb_clk = {
3718	.halt_reg = 0x42014,
3719	.halt_check = BRANCH_HALT,
3720	.hwcg_reg = 0x42014,
3721	.hwcg_bit = 1,
3722	.clkr = {
3723		.enable_reg = 0x42014,
3724		.enable_mask = BIT(0),
3725		.hw.init = &(struct clk_init_data){
3726			.name = "gcc_vs_ctrl_ahb_clk",
3727			.ops = &clk_branch2_ops,
3728		},
3729	},
3730};
3731
3732static struct clk_branch gcc_vs_ctrl_clk = {
3733	.halt_reg = 0x42010,
3734	.halt_check = BRANCH_HALT,
3735	.clkr = {
3736		.enable_reg = 0x42010,
3737		.enable_mask = BIT(0),
3738		.hw.init = &(struct clk_init_data){
3739			.name = "gcc_vs_ctrl_clk",
3740			.parent_hws = (const struct clk_hw*[]){
3741				&gcc_vs_ctrl_clk_src.clkr.hw,
3742			},
3743			.num_parents = 1,
3744			.flags = CLK_SET_RATE_PARENT,
3745			.ops = &clk_branch2_ops,
3746		},
3747	},
3748};
3749
3750static struct clk_branch gcc_wcss_vs_clk = {
3751	.halt_reg = 0x42050,
3752	.halt_check = BRANCH_HALT,
3753	.clkr = {
3754		.enable_reg = 0x42050,
3755		.enable_mask = BIT(0),
3756		.hw.init = &(struct clk_init_data){
3757			.name = "gcc_wcss_vs_clk",
3758			.parent_hws = (const struct clk_hw*[]){
3759				&gcc_vsensor_clk_src.clkr.hw,
3760			},
3761			.num_parents = 1,
3762			.flags = CLK_SET_RATE_PARENT,
3763			.ops = &clk_branch2_ops,
3764		},
3765	},
3766};
3767
3768static struct gdsc usb30_prim_gdsc = {
3769	.gdscr = 0x1a004,
3770	.pd = {
3771		.name = "usb30_prim_gdsc",
3772	},
3773	.pwrsts = PWRSTS_OFF_ON,
3774};
3775
3776static struct gdsc ufs_phy_gdsc = {
3777	.gdscr = 0x45004,
3778	.pd = {
3779		.name = "ufs_phy_gdsc",
3780	},
3781	.pwrsts = PWRSTS_OFF_ON,
3782};
3783
3784static struct gdsc camss_vfe0_gdsc = {
3785	.gdscr = 0x54004,
3786	.pd = {
3787		.name = "camss_vfe0_gdsc",
3788	},
3789	.pwrsts = PWRSTS_OFF_ON,
3790};
3791
3792static struct gdsc camss_vfe1_gdsc = {
3793	.gdscr = 0x5403c,
3794	.pd = {
3795		.name = "camss_vfe1_gdsc",
3796	},
3797	.pwrsts = PWRSTS_OFF_ON,
3798};
3799
3800static struct gdsc camss_top_gdsc = {
3801	.gdscr = 0x5607c,
3802	.pd = {
3803		.name = "camss_top_gdsc",
3804	},
3805	.pwrsts = PWRSTS_OFF_ON,
3806};
3807
3808static struct gdsc cam_cpp_gdsc = {
3809	.gdscr = 0x560bc,
3810	.pd = {
3811		.name = "cam_cpp_gdsc",
3812	},
3813	.pwrsts = PWRSTS_OFF_ON,
3814};
3815
3816static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3817	.gdscr = 0x7d060,
3818	.pd = {
3819		.name = "hlos1_vote_turing_mmu_tbu1_gdsc",
3820	},
3821	.pwrsts = PWRSTS_OFF_ON,
3822	.flags = VOTABLE,
3823};
3824
3825static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
3826	.gdscr = 0x80074,
3827	.pd = {
3828		.name = "hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc",
3829	},
3830	.pwrsts = PWRSTS_OFF_ON,
3831	.flags = VOTABLE,
3832};
3833
3834static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
3835	.gdscr = 0x80084,
3836	.pd = {
3837		.name = "hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc",
3838	},
3839	.pwrsts = PWRSTS_OFF_ON,
3840	.flags = VOTABLE,
3841};
3842
3843
3844static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3845	.gdscr = 0x80094,
3846	.pd = {
3847		.name = "hlos1_vote_turing_mmu_tbu0_gdsc",
3848	},
3849	.pwrsts = PWRSTS_OFF_ON,
3850	.flags = VOTABLE,
3851};
3852
3853static struct gdsc *gcc_sm6125_gdscs[] = {
3854	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3855	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
3856	[CAMSS_VFE0_GDSC] = &camss_vfe0_gdsc,
3857	[CAMSS_VFE1_GDSC] = &camss_vfe1_gdsc,
3858	[CAMSS_TOP_GDSC] = &camss_top_gdsc,
3859	[CAM_CPP_GDSC] = &cam_cpp_gdsc,
3860	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3861	[HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
3862	[HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
3863	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3864};
3865
3866static struct clk_hw *gcc_sm6125_hws[] = {
3867	[GPLL0_OUT_AUX2] = &gpll0_out_aux2.hw,
3868	[GPLL0_OUT_MAIN] = &gpll0_out_main.hw,
3869	[GPLL6_OUT_MAIN] = &gpll6_out_main.hw,
3870	[GPLL7_OUT_MAIN] = &gpll7_out_main.hw,
3871	[GPLL8_OUT_MAIN] = &gpll8_out_main.hw,
3872	[GPLL9_OUT_MAIN] = &gpll9_out_main.hw,
3873};
3874
3875static struct clk_regmap *gcc_sm6125_clocks[] = {
3876	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
3877	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
3878	[GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr,
3879	[GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
3880	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3881	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3882	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3883	[GCC_CAMSS_AHB_CLK_SRC] = &gcc_camss_ahb_clk_src.clkr,
3884	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3885	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3886	[GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
3887	[GCC_CAMSS_CPHY_CSID0_CLK] = &gcc_camss_cphy_csid0_clk.clkr,
3888	[GCC_CAMSS_CPHY_CSID1_CLK] = &gcc_camss_cphy_csid1_clk.clkr,
3889	[GCC_CAMSS_CPHY_CSID2_CLK] = &gcc_camss_cphy_csid2_clk.clkr,
3890	[GCC_CAMSS_CPHY_CSID3_CLK] = &gcc_camss_cphy_csid3_clk.clkr,
3891	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3892	[GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
3893	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3894	[GCC_CAMSS_CPP_CLK_SRC] = &gcc_camss_cpp_clk_src.clkr,
3895	[GCC_CAMSS_CPP_VBIF_AHB_CLK] = &gcc_camss_cpp_vbif_ahb_clk.clkr,
3896	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3897	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3898	[GCC_CAMSS_CSI0_CLK_SRC] = &gcc_camss_csi0_clk_src.clkr,
3899	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3900	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
3901	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3902	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3903	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3904	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3905	[GCC_CAMSS_CSI1_CLK_SRC] = &gcc_camss_csi1_clk_src.clkr,
3906	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3907	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
3908	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3909	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3910	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3911	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3912	[GCC_CAMSS_CSI2_CLK_SRC] = &gcc_camss_csi2_clk_src.clkr,
3913	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
3914	[GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
3915	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3916	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3917	[GCC_CAMSS_CSI3_AHB_CLK] = &gcc_camss_csi3_ahb_clk.clkr,
3918	[GCC_CAMSS_CSI3_CLK] = &gcc_camss_csi3_clk.clkr,
3919	[GCC_CAMSS_CSI3_CLK_SRC] = &gcc_camss_csi3_clk_src.clkr,
3920	[GCC_CAMSS_CSI3PIX_CLK] = &gcc_camss_csi3pix_clk.clkr,
3921	[GCC_CAMSS_CSI3RDI_CLK] = &gcc_camss_csi3rdi_clk.clkr,
3922	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3923	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3924	[GCC_CAMSS_CSIPHY0_CLK] = &gcc_camss_csiphy0_clk.clkr,
3925	[GCC_CAMSS_CSIPHY1_CLK] = &gcc_camss_csiphy1_clk.clkr,
3926	[GCC_CAMSS_CSIPHY2_CLK] = &gcc_camss_csiphy2_clk.clkr,
3927	[GCC_CAMSS_CSIPHY_CLK_SRC] = &gcc_camss_csiphy_clk_src.clkr,
3928	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3929	[GCC_CAMSS_GP0_CLK_SRC] = &gcc_camss_gp0_clk_src.clkr,
3930	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3931	[GCC_CAMSS_GP1_CLK_SRC] = &gcc_camss_gp1_clk_src.clkr,
3932	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3933	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3934	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3935	[GCC_CAMSS_JPEG_CLK] = &gcc_camss_jpeg_clk.clkr,
3936	[GCC_CAMSS_JPEG_CLK_SRC] = &gcc_camss_jpeg_clk_src.clkr,
3937	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3938	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
3939	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3940	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
3941	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3942	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
3943	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
3944	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
3945	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3946	[GCC_CAMSS_THROTTLE_NRT_AXI_CLK] = &gcc_camss_throttle_nrt_axi_clk.clkr,
3947	[GCC_CAMSS_THROTTLE_RT_AXI_CLK] = &gcc_camss_throttle_rt_axi_clk.clkr,
3948	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3949	[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3950	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3951	[GCC_CAMSS_VFE0_CLK_SRC] = &gcc_camss_vfe0_clk_src.clkr,
3952	[GCC_CAMSS_VFE0_STREAM_CLK] = &gcc_camss_vfe0_stream_clk.clkr,
3953	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3954	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3955	[GCC_CAMSS_VFE1_CLK_SRC] = &gcc_camss_vfe1_clk_src.clkr,
3956	[GCC_CAMSS_VFE1_STREAM_CLK] = &gcc_camss_vfe1_stream_clk.clkr,
3957	[GCC_CAMSS_VFE_TSCTR_CLK] = &gcc_camss_vfe_tsctr_clk.clkr,
3958	[GCC_CAMSS_VFE_VBIF_AHB_CLK] = &gcc_camss_vfe_vbif_ahb_clk.clkr,
3959	[GCC_CAMSS_VFE_VBIF_AXI_CLK] = &gcc_camss_vfe_vbif_axi_clk.clkr,
3960	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
3961	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
3962	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
3963	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3964	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3965	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3966	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3967	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3968	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
3969	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3970	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3971	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3972	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3973	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3974	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3975	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3976	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3977	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3978	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3979	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3980	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3981	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
3982	[GCC_GPU_THROTTLE_XO_CLK] = &gcc_gpu_throttle_xo_clk.clkr,
3983	[GCC_MSS_VS_CLK] = &gcc_mss_vs_clk.clkr,
3984	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3985	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3986	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3987	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3988	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3989	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3990	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3991	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3992	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
3993	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3994	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3995	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3996	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3997	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3998	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3999	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4000	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4001	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4002	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4003	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4004	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4005	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4006	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4007	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4008	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
4009	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
4010	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4011	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4012	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4013	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4014	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4015	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4016	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4017	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4018	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4019	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4020	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4021	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4022	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4023	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4024	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4025	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4026	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4027	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4028	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
4029	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4030	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
4031	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4032	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4033	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4034	[GCC_SYS_NOC_COMPUTE_SF_AXI_CLK] = &gcc_sys_noc_compute_sf_axi_clk.clkr,
4035	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
4036	[GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
4037	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
4038	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
4039	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4040	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4041	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4042	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4043	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4044	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4045	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4046	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4047	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4048	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4049	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
4050		&gcc_ufs_phy_unipro_core_clk_src.clkr,
4051	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4052	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4053	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4054	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
4055		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
4056	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4057	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4058	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4059	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4060	[GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr,
4061	[GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr,
4062	[GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr,
4063	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
4064	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4065	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
4066	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
4067	[GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr,
4068	[GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr,
4069	[GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr,
4070	[GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
4071	[GCC_WCSS_VS_CLK] = &gcc_wcss_vs_clk.clkr,
4072	[GPLL0_OUT_EARLY] = &gpll0_out_early.clkr,
4073	[GPLL3_OUT_EARLY] = &gpll3_out_early.clkr,
4074	[GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
4075	[GPLL5_OUT_MAIN] = &gpll5_out_main.clkr,
4076	[GPLL6_OUT_EARLY] = &gpll6_out_early.clkr,
4077	[GPLL7_OUT_EARLY] = &gpll7_out_early.clkr,
4078	[GPLL8_OUT_EARLY] = &gpll8_out_early.clkr,
4079	[GPLL9_OUT_EARLY] = &gpll9_out_early.clkr,
4080	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
4081};
4082
4083static const struct qcom_reset_map gcc_sm6125_resets[] = {
4084	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
4085	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
4086	[GCC_UFS_PHY_BCR] = { 0x45000 },
4087	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
4088	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
4089	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
4090	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
4091	[GCC_CAMSS_MICRO_BCR] = { 0x560ac },
4092};
4093
4094static struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
4095	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
4096	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
4097	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
4098	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
4099	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
4100	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
4101	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
4102	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
4103	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
4104	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
4105	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
4106	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
4107};
4108
4109static const struct regmap_config gcc_sm6125_regmap_config = {
4110	.reg_bits = 32,
4111	.reg_stride = 4,
4112	.val_bits = 32,
4113	.max_register = 0xc7000,
4114	.fast_io = true,
4115};
4116
4117static const struct qcom_cc_desc gcc_sm6125_desc = {
4118	.config = &gcc_sm6125_regmap_config,
4119	.clks = gcc_sm6125_clocks,
4120	.num_clks = ARRAY_SIZE(gcc_sm6125_clocks),
4121	.clk_hws = gcc_sm6125_hws,
4122	.num_clk_hws = ARRAY_SIZE(gcc_sm6125_hws),
4123	.resets = gcc_sm6125_resets,
4124	.num_resets = ARRAY_SIZE(gcc_sm6125_resets),
4125	.gdscs = gcc_sm6125_gdscs,
4126	.num_gdscs = ARRAY_SIZE(gcc_sm6125_gdscs),
4127};
4128
4129static const struct of_device_id gcc_sm6125_match_table[] = {
4130	{ .compatible = "qcom,gcc-sm6125" },
4131	{ }
4132};
4133MODULE_DEVICE_TABLE(of, gcc_sm6125_match_table);
4134
4135static int gcc_sm6125_probe(struct platform_device *pdev)
4136{
4137	struct regmap *regmap;
4138	int ret;
4139
4140	regmap = qcom_cc_map(pdev, &gcc_sm6125_desc);
4141	if (IS_ERR(regmap))
4142		return PTR_ERR(regmap);
4143
4144	/*
4145	 * Disable the GPLL0 active input to video block via
4146	 * MISC registers.
4147	 */
4148	regmap_update_bits(regmap, 0x80258, 0x1, 0x1);
4149
4150	/*
4151	 * Enable DUAL_EDGE mode for MCLK RCGs
4152	 * This is required to enable MND divider mode
4153	 */
4154	regmap_update_bits(regmap, 0x51004, 0x3000, 0x2000);
4155	regmap_update_bits(regmap, 0x51020, 0x3000, 0x2000);
4156	regmap_update_bits(regmap, 0x5103c, 0x3000, 0x2000);
4157	regmap_update_bits(regmap, 0x51058, 0x3000, 0x2000);
4158
4159	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
4160						ARRAY_SIZE(gcc_dfs_clocks));
4161	if (ret)
4162		return ret;
4163
4164	return qcom_cc_really_probe(pdev, &gcc_sm6125_desc, regmap);
4165}
4166
4167static struct platform_driver gcc_sm6125_driver = {
4168	.probe = gcc_sm6125_probe,
4169	.driver = {
4170		.name = "gcc-sm6125",
4171		.of_match_table = gcc_sm6125_match_table,
4172	},
4173};
4174
4175static int __init gcc_sm6125_init(void)
4176{
4177	return platform_driver_register(&gcc_sm6125_driver);
4178}
4179subsys_initcall(gcc_sm6125_init);
4180
4181static void __exit gcc_sm6125_exit(void)
4182{
4183	platform_driver_unregister(&gcc_sm6125_driver);
4184}
4185module_exit(gcc_sm6125_exit);
4186
4187MODULE_DESCRIPTION("QTI GCC SM6125 Driver");
4188MODULE_LICENSE("GPL v2");
4189