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