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