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