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