xref: /linux/drivers/clk/qcom/gcc-sc8180x.c (revision fc143580753348c62068f30958fede937aa471ad)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2020-2021, Linaro Ltd.
5  */
6 
7 #include <linux/bitops.h>
8 #include <linux/clk-provider.h>
9 #include <linux/err.h>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/of.h>
13 #include <linux/platform_device.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
16 
17 #include <dt-bindings/clock/qcom,gcc-sc8180x.h>
18 
19 #include "common.h"
20 #include "clk-alpha-pll.h"
21 #include "clk-branch.h"
22 #include "clk-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-regmap.h"
25 #include "gdsc.h"
26 #include "reset.h"
27 
28 enum {
29 	P_AUD_REF_CLK,
30 	P_BI_TCXO,
31 	P_GPLL0_OUT_EVEN,
32 	P_GPLL0_OUT_MAIN,
33 	P_GPLL1_OUT_MAIN,
34 	P_GPLL2_OUT_MAIN,
35 	P_GPLL4_OUT_MAIN,
36 	P_GPLL5_OUT_MAIN,
37 	P_GPLL7_OUT_MAIN,
38 	P_GPLL9_OUT_MAIN,
39 	P_SLEEP_CLK,
40 };
41 
42 static struct pll_vco trion_vco[] = {
43 	{ 249600000, 2000000000, 0 },
44 };
45 
46 static struct clk_alpha_pll gpll0 = {
47 	.offset = 0x0,
48 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
49 	.vco_table = trion_vco,
50 	.num_vco = ARRAY_SIZE(trion_vco),
51 	.clkr = {
52 		.enable_reg = 0x52000,
53 		.enable_mask = BIT(0),
54 		.hw.init = &(struct clk_init_data){
55 			.name = "gpll0",
56 			.parent_data = &(const struct clk_parent_data){
57 				.fw_name = "bi_tcxo",
58 			},
59 			.num_parents = 1,
60 			.ops = &clk_alpha_pll_fixed_trion_ops,
61 		},
62 	},
63 };
64 
65 static const struct clk_div_table post_div_table_trion_even[] = {
66 	{ 0x0, 1 },
67 	{ 0x1, 2 },
68 	{ 0x3, 4 },
69 	{ 0x7, 8 },
70 	{ }
71 };
72 
73 static struct clk_alpha_pll_postdiv gpll0_out_even = {
74 	.offset = 0x0,
75 	.post_div_shift = 8,
76 	.post_div_table = post_div_table_trion_even,
77 	.num_post_div = ARRAY_SIZE(post_div_table_trion_even),
78 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
79 	.width = 4,
80 	.clkr.hw.init = &(struct clk_init_data){
81 		.name = "gpll0_out_even",
82 		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
83 		.num_parents = 1,
84 		.ops = &clk_alpha_pll_postdiv_trion_ops,
85 	},
86 };
87 
88 static struct clk_alpha_pll gpll1 = {
89 	.offset = 0x1000,
90 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
91 	.vco_table = trion_vco,
92 	.num_vco = ARRAY_SIZE(trion_vco),
93 	.clkr = {
94 		.enable_reg = 0x52000,
95 		.enable_mask = BIT(1),
96 		.hw.init = &(struct clk_init_data){
97 			.name = "gpll1",
98 			.parent_data = &(const struct clk_parent_data){
99 				.fw_name = "bi_tcxo",
100 			},
101 			.num_parents = 1,
102 			.ops = &clk_alpha_pll_fixed_trion_ops,
103 		},
104 	},
105 };
106 
107 static struct clk_alpha_pll gpll4 = {
108 	.offset = 0x76000,
109 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
110 	.vco_table = trion_vco,
111 	.num_vco = ARRAY_SIZE(trion_vco),
112 	.clkr = {
113 		.enable_reg = 0x52000,
114 		.enable_mask = BIT(4),
115 		.hw.init = &(struct clk_init_data){
116 			.name = "gpll4",
117 			.parent_data = &(const struct clk_parent_data){
118 				.fw_name = "bi_tcxo",
119 			},
120 			.num_parents = 1,
121 			.ops = &clk_alpha_pll_fixed_trion_ops,
122 		},
123 	},
124 };
125 
126 static struct clk_alpha_pll gpll7 = {
127 	.offset = 0x1a000,
128 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
129 	.vco_table = trion_vco,
130 	.num_vco = ARRAY_SIZE(trion_vco),
131 	.clkr = {
132 		.enable_reg = 0x52000,
133 		.enable_mask = BIT(7),
134 		.hw.init = &(struct clk_init_data){
135 			.name = "gpll7",
136 			.parent_data = &(const struct clk_parent_data){
137 				.fw_name = "bi_tcxo",
138 			},
139 			.num_parents = 1,
140 			.ops = &clk_alpha_pll_fixed_trion_ops,
141 		},
142 	},
143 };
144 
145 static const struct parent_map gcc_parent_map_0[] = {
146 	{ P_BI_TCXO, 0 },
147 	{ P_GPLL0_OUT_MAIN, 1 },
148 	{ P_GPLL0_OUT_EVEN, 6 },
149 };
150 
151 static const struct clk_parent_data gcc_parents_0[] = {
152 	{ .fw_name = "bi_tcxo" },
153 	{ .hw = &gpll0.clkr.hw },
154 	{ .hw = &gpll0_out_even.clkr.hw },
155 };
156 
157 static const struct parent_map gcc_parent_map_1[] = {
158 	{ P_BI_TCXO, 0 },
159 	{ P_GPLL0_OUT_MAIN, 1 },
160 	{ P_SLEEP_CLK, 5 },
161 	{ P_GPLL0_OUT_EVEN, 6 },
162 };
163 
164 static const struct clk_parent_data gcc_parents_1[] = {
165 	{ .fw_name = "bi_tcxo", },
166 	{ .hw = &gpll0.clkr.hw },
167 	{ .fw_name = "sleep_clk", },
168 	{ .hw = &gpll0_out_even.clkr.hw },
169 };
170 
171 static const struct parent_map gcc_parent_map_2[] = {
172 	{ P_BI_TCXO, 0 },
173 	{ P_SLEEP_CLK, 5 },
174 };
175 
176 static const struct clk_parent_data gcc_parents_2[] = {
177 	{ .fw_name = "bi_tcxo", },
178 	{ .fw_name = "sleep_clk", },
179 };
180 
181 static const struct parent_map gcc_parent_map_3[] = {
182 	{ P_BI_TCXO, 0 },
183 	{ P_GPLL0_OUT_MAIN, 1 },
184 	{ P_GPLL2_OUT_MAIN, 2 },
185 	{ P_GPLL5_OUT_MAIN, 3 },
186 	{ P_GPLL1_OUT_MAIN, 4 },
187 	{ P_GPLL4_OUT_MAIN, 5 },
188 	{ P_GPLL0_OUT_EVEN, 6 },
189 };
190 
191 static const struct clk_parent_data gcc_parents_3[] = {
192 	{ .fw_name = "bi_tcxo", },
193 	{ .hw = &gpll0.clkr.hw },
194 	{ .name = "gpll2" },
195 	{ .name = "gpll5" },
196 	{ .hw = &gpll1.clkr.hw },
197 	{ .hw = &gpll4.clkr.hw },
198 	{ .hw = &gpll0_out_even.clkr.hw },
199 };
200 
201 static const struct parent_map gcc_parent_map_4[] = {
202 	{ P_BI_TCXO, 0 },
203 };
204 
205 static const struct clk_parent_data gcc_parents_4[] = {
206 	{ .fw_name = "bi_tcxo", },
207 };
208 
209 static const struct parent_map gcc_parent_map_5[] = {
210 	{ P_BI_TCXO, 0 },
211 	{ P_GPLL0_OUT_MAIN, 1 },
212 };
213 
214 static const struct clk_parent_data gcc_parents_5[] = {
215 	{ .fw_name = "bi_tcxo", },
216 	{ .hw = &gpll0.clkr.hw },
217 };
218 
219 static const struct parent_map gcc_parent_map_6[] = {
220 	{ P_BI_TCXO, 0 },
221 	{ P_GPLL0_OUT_MAIN, 1 },
222 	{ P_GPLL7_OUT_MAIN, 3 },
223 	{ P_GPLL0_OUT_EVEN, 6 },
224 };
225 
226 static const struct clk_parent_data gcc_parents_6[] = {
227 	{ .fw_name = "bi_tcxo", },
228 	{ .hw = &gpll0.clkr.hw },
229 	{ .hw = &gpll7.clkr.hw },
230 	{ .hw = &gpll0_out_even.clkr.hw },
231 };
232 
233 static const struct parent_map gcc_parent_map_7[] = {
234 	{ P_BI_TCXO, 0 },
235 	{ P_GPLL0_OUT_MAIN, 1 },
236 	{ P_GPLL9_OUT_MAIN, 2 },
237 	{ P_GPLL4_OUT_MAIN, 5 },
238 	{ P_GPLL0_OUT_EVEN, 6 },
239 };
240 
241 static const struct clk_parent_data gcc_parents_7[] = {
242 	{ .fw_name = "bi_tcxo", },
243 	{ .hw = &gpll0.clkr.hw },
244 	{ .name = "gppl9" },
245 	{ .hw = &gpll4.clkr.hw },
246 	{ .hw = &gpll0_out_even.clkr.hw },
247 };
248 
249 static const struct parent_map gcc_parent_map_8[] = {
250 	{ P_BI_TCXO, 0 },
251 	{ P_GPLL0_OUT_MAIN, 1 },
252 	{ P_AUD_REF_CLK, 2 },
253 	{ P_GPLL0_OUT_EVEN, 6 },
254 };
255 
256 static const struct clk_parent_data gcc_parents_8[] = {
257 	{ .fw_name = "bi_tcxo", },
258 	{ .hw = &gpll0.clkr.hw },
259 	{ .name = "aud_ref_clk" },
260 	{ .hw = &gpll0_out_even.clkr.hw },
261 };
262 
263 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
264 	F(19200000, P_BI_TCXO, 1, 0, 0),
265 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
266 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
267 	{ }
268 };
269 
270 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
271 	.cmd_rcgr = 0x48014,
272 	.mnd_width = 0,
273 	.hid_width = 5,
274 	.parent_map = gcc_parent_map_0,
275 	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
276 	.clkr.hw.init = &(struct clk_init_data){
277 		.name = "gcc_cpuss_ahb_clk_src",
278 		.parent_data = gcc_parents_0,
279 		.num_parents = ARRAY_SIZE(gcc_parents_0),
280 		.flags = CLK_SET_RATE_PARENT,
281 		.ops = &clk_rcg2_ops,
282 	},
283 };
284 
285 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
286 	F(19200000, P_BI_TCXO, 1, 0, 0),
287 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
288 	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
289 	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
290 	{ }
291 };
292 
293 static struct clk_rcg2 gcc_emac_ptp_clk_src = {
294 	.cmd_rcgr = 0x6038,
295 	.mnd_width = 0,
296 	.hid_width = 5,
297 	.parent_map = gcc_parent_map_6,
298 	.freq_tbl = ftbl_gcc_emac_ptp_clk_src,
299 	.clkr.hw.init = &(struct clk_init_data){
300 		.name = "gcc_emac_ptp_clk_src",
301 		.parent_data = gcc_parents_6,
302 		.num_parents = ARRAY_SIZE(gcc_parents_6),
303 		.flags = CLK_SET_RATE_PARENT,
304 		.ops = &clk_rcg2_ops,
305 	},
306 };
307 
308 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
309 	F(2500000, P_BI_TCXO, 1, 25, 192),
310 	F(5000000, P_BI_TCXO, 1, 25, 96),
311 	F(19200000, P_BI_TCXO, 1, 0, 0),
312 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
313 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
314 	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
315 	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
316 	{ }
317 };
318 
319 static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
320 	.cmd_rcgr = 0x601c,
321 	.mnd_width = 8,
322 	.hid_width = 5,
323 	.parent_map = gcc_parent_map_6,
324 	.freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
325 	.clkr.hw.init = &(struct clk_init_data){
326 		.name = "gcc_emac_rgmii_clk_src",
327 		.parent_data = gcc_parents_6,
328 		.num_parents = ARRAY_SIZE(gcc_parents_6),
329 		.flags = CLK_SET_RATE_PARENT,
330 		.ops = &clk_rcg2_ops,
331 	},
332 };
333 
334 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
335 	F(19200000, P_BI_TCXO, 1, 0, 0),
336 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
337 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
338 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
339 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
340 	{ }
341 };
342 
343 static struct clk_rcg2 gcc_gp1_clk_src = {
344 	.cmd_rcgr = 0x64004,
345 	.mnd_width = 8,
346 	.hid_width = 5,
347 	.parent_map = gcc_parent_map_1,
348 	.freq_tbl = ftbl_gcc_gp1_clk_src,
349 	.clkr.hw.init = &(struct clk_init_data){
350 		.name = "gcc_gp1_clk_src",
351 		.parent_data = gcc_parents_1,
352 		.num_parents = ARRAY_SIZE(gcc_parents_1),
353 		.flags = CLK_SET_RATE_PARENT,
354 		.ops = &clk_rcg2_ops,
355 	},
356 };
357 
358 static struct clk_rcg2 gcc_gp2_clk_src = {
359 	.cmd_rcgr = 0x65004,
360 	.mnd_width = 8,
361 	.hid_width = 5,
362 	.parent_map = gcc_parent_map_1,
363 	.freq_tbl = ftbl_gcc_gp1_clk_src,
364 	.clkr.hw.init = &(struct clk_init_data){
365 		.name = "gcc_gp2_clk_src",
366 		.parent_data = gcc_parents_1,
367 		.num_parents = ARRAY_SIZE(gcc_parents_1),
368 		.flags = CLK_SET_RATE_PARENT,
369 		.ops = &clk_rcg2_ops,
370 	},
371 };
372 
373 static struct clk_rcg2 gcc_gp3_clk_src = {
374 	.cmd_rcgr = 0x66004,
375 	.mnd_width = 8,
376 	.hid_width = 5,
377 	.parent_map = gcc_parent_map_1,
378 	.freq_tbl = ftbl_gcc_gp1_clk_src,
379 	.clkr.hw.init = &(struct clk_init_data){
380 		.name = "gcc_gp3_clk_src",
381 		.parent_data = gcc_parents_1,
382 		.num_parents = ARRAY_SIZE(gcc_parents_1),
383 		.flags = CLK_SET_RATE_PARENT,
384 		.ops = &clk_rcg2_ops,
385 	},
386 };
387 
388 static struct clk_rcg2 gcc_gp4_clk_src = {
389 	.cmd_rcgr = 0xbe004,
390 	.mnd_width = 8,
391 	.hid_width = 5,
392 	.parent_map = gcc_parent_map_1,
393 	.freq_tbl = ftbl_gcc_gp1_clk_src,
394 	.clkr.hw.init = &(struct clk_init_data){
395 		.name = "gcc_gp4_clk_src",
396 		.parent_data = gcc_parents_1,
397 		.num_parents = ARRAY_SIZE(gcc_parents_1),
398 		.flags = CLK_SET_RATE_PARENT,
399 		.ops = &clk_rcg2_ops,
400 	},
401 };
402 
403 static struct clk_rcg2 gcc_gp5_clk_src = {
404 	.cmd_rcgr = 0xbf004,
405 	.mnd_width = 8,
406 	.hid_width = 5,
407 	.parent_map = gcc_parent_map_1,
408 	.freq_tbl = ftbl_gcc_gp1_clk_src,
409 	.clkr.hw.init = &(struct clk_init_data){
410 		.name = "gcc_gp5_clk_src",
411 		.parent_data = gcc_parents_1,
412 		.num_parents = ARRAY_SIZE(gcc_parents_1),
413 		.flags = CLK_SET_RATE_PARENT,
414 		.ops = &clk_rcg2_ops,
415 	},
416 };
417 
418 static const struct freq_tbl ftbl_gcc_npu_axi_clk_src[] = {
419 	F(19200000, P_BI_TCXO, 1, 0, 0),
420 	F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
421 	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
422 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
423 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
424 	F(403000000, P_GPLL4_OUT_MAIN, 2, 0, 0),
425 	F(533000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
426 	{ }
427 };
428 
429 static struct clk_rcg2 gcc_npu_axi_clk_src = {
430 	.cmd_rcgr = 0x4d014,
431 	.mnd_width = 0,
432 	.hid_width = 5,
433 	.parent_map = gcc_parent_map_3,
434 	.freq_tbl = ftbl_gcc_npu_axi_clk_src,
435 	.clkr.hw.init = &(struct clk_init_data){
436 		.name = "gcc_npu_axi_clk_src",
437 		.parent_data = gcc_parents_3,
438 		.num_parents = ARRAY_SIZE(gcc_parents_3),
439 		.flags = CLK_SET_RATE_PARENT,
440 		.ops = &clk_rcg2_ops,
441 	},
442 };
443 
444 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
445 	F(9600000, P_BI_TCXO, 2, 0, 0),
446 	F(19200000, P_BI_TCXO, 1, 0, 0),
447 	{ }
448 };
449 
450 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
451 	.cmd_rcgr = 0x6b02c,
452 	.mnd_width = 16,
453 	.hid_width = 5,
454 	.parent_map = gcc_parent_map_2,
455 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
456 	.clkr.hw.init = &(struct clk_init_data){
457 		.name = "gcc_pcie_0_aux_clk_src",
458 		.parent_data = gcc_parents_2,
459 		.num_parents = ARRAY_SIZE(gcc_parents_2),
460 		.flags = CLK_SET_RATE_PARENT,
461 		.ops = &clk_rcg2_ops,
462 	},
463 };
464 
465 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
466 	.cmd_rcgr = 0x8d02c,
467 	.mnd_width = 16,
468 	.hid_width = 5,
469 	.parent_map = gcc_parent_map_2,
470 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
471 	.clkr.hw.init = &(struct clk_init_data){
472 		.name = "gcc_pcie_1_aux_clk_src",
473 		.parent_data = gcc_parents_2,
474 		.num_parents = ARRAY_SIZE(gcc_parents_2),
475 		.flags = CLK_SET_RATE_PARENT,
476 		.ops = &clk_rcg2_ops,
477 	},
478 };
479 
480 static struct clk_rcg2 gcc_pcie_2_aux_clk_src = {
481 	.cmd_rcgr = 0x9d02c,
482 	.mnd_width = 16,
483 	.hid_width = 5,
484 	.parent_map = gcc_parent_map_2,
485 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
486 	.clkr.hw.init = &(struct clk_init_data){
487 		.name = "gcc_pcie_2_aux_clk_src",
488 		.parent_data = gcc_parents_2,
489 		.num_parents = ARRAY_SIZE(gcc_parents_2),
490 		.flags = CLK_SET_RATE_PARENT,
491 		.ops = &clk_rcg2_ops,
492 	},
493 };
494 
495 static struct clk_rcg2 gcc_pcie_3_aux_clk_src = {
496 	.cmd_rcgr = 0xa302c,
497 	.mnd_width = 16,
498 	.hid_width = 5,
499 	.parent_map = gcc_parent_map_2,
500 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
501 	.clkr.hw.init = &(struct clk_init_data){
502 		.name = "gcc_pcie_3_aux_clk_src",
503 		.parent_data = gcc_parents_2,
504 		.num_parents = ARRAY_SIZE(gcc_parents_2),
505 		.flags = CLK_SET_RATE_PARENT,
506 		.ops = &clk_rcg2_ops,
507 	},
508 };
509 
510 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
511 	F(19200000, P_BI_TCXO, 1, 0, 0),
512 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
513 	{ }
514 };
515 
516 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
517 	.cmd_rcgr = 0x6f014,
518 	.mnd_width = 0,
519 	.hid_width = 5,
520 	.parent_map = gcc_parent_map_0,
521 	.freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
522 	.clkr.hw.init = &(struct clk_init_data){
523 		.name = "gcc_pcie_phy_refgen_clk_src",
524 		.parent_data = gcc_parents_0,
525 		.num_parents = ARRAY_SIZE(gcc_parents_0),
526 		.flags = CLK_SET_RATE_PARENT,
527 		.ops = &clk_rcg2_ops,
528 	},
529 };
530 
531 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
532 	F(9600000, P_BI_TCXO, 2, 0, 0),
533 	F(19200000, P_BI_TCXO, 1, 0, 0),
534 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
535 	{ }
536 };
537 
538 static struct clk_rcg2 gcc_pdm2_clk_src = {
539 	.cmd_rcgr = 0x33010,
540 	.mnd_width = 0,
541 	.hid_width = 5,
542 	.parent_map = gcc_parent_map_0,
543 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
544 	.clkr.hw.init = &(struct clk_init_data){
545 		.name = "gcc_pdm2_clk_src",
546 		.parent_data = gcc_parents_0,
547 		.num_parents = ARRAY_SIZE(gcc_parents_0),
548 		.flags = CLK_SET_RATE_PARENT,
549 		.ops = &clk_rcg2_ops,
550 	},
551 };
552 
553 static const struct freq_tbl ftbl_gcc_qspi_1_core_clk_src[] = {
554 	F(19200000, P_BI_TCXO, 1, 0, 0),
555 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
556 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
557 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
558 	{ }
559 };
560 
561 static struct clk_rcg2 gcc_qspi_1_core_clk_src = {
562 	.cmd_rcgr = 0x4a00c,
563 	.mnd_width = 0,
564 	.hid_width = 5,
565 	.parent_map = gcc_parent_map_0,
566 	.freq_tbl = ftbl_gcc_qspi_1_core_clk_src,
567 	.clkr.hw.init = &(struct clk_init_data){
568 		.name = "gcc_qspi_1_core_clk_src",
569 		.parent_data = gcc_parents_0,
570 		.num_parents = ARRAY_SIZE(gcc_parents_0),
571 		.flags = CLK_SET_RATE_PARENT,
572 		.ops = &clk_rcg2_ops,
573 	},
574 };
575 
576 static struct clk_rcg2 gcc_qspi_core_clk_src = {
577 	.cmd_rcgr = 0x4b008,
578 	.mnd_width = 0,
579 	.hid_width = 5,
580 	.parent_map = gcc_parent_map_0,
581 	.freq_tbl = ftbl_gcc_qspi_1_core_clk_src,
582 	.clkr.hw.init = &(struct clk_init_data){
583 		.name = "gcc_qspi_core_clk_src",
584 		.parent_data = gcc_parents_0,
585 		.num_parents = ARRAY_SIZE(gcc_parents_0),
586 		.flags = CLK_SET_RATE_PARENT,
587 		.ops = &clk_rcg2_ops,
588 	},
589 };
590 
591 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
592 	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
593 	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
594 	F(19200000, P_BI_TCXO, 1, 0, 0),
595 	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
596 	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
597 	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
598 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
599 	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
600 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
601 	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
602 	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
603 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
604 	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
605 	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
606 	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
607 	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
608 	F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
609 	{ }
610 };
611 
612 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
613 	.cmd_rcgr = 0x17148,
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 = &(struct clk_init_data){
619 		.name = "gcc_qupv3_wrap0_s0_clk_src",
620 		.parent_data = gcc_parents_0,
621 		.num_parents = ARRAY_SIZE(gcc_parents_0),
622 		.flags = CLK_SET_RATE_PARENT,
623 		.ops = &clk_rcg2_ops,
624 	},
625 };
626 
627 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
628 	.cmd_rcgr = 0x17278,
629 	.mnd_width = 16,
630 	.hid_width = 5,
631 	.parent_map = gcc_parent_map_0,
632 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
633 	.clkr.hw.init = &(struct clk_init_data){
634 		.name = "gcc_qupv3_wrap0_s1_clk_src",
635 		.parent_data = gcc_parents_0,
636 		.num_parents = ARRAY_SIZE(gcc_parents_0),
637 		.flags = CLK_SET_RATE_PARENT,
638 		.ops = &clk_rcg2_ops,
639 	},
640 };
641 
642 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
643 	.cmd_rcgr = 0x173a8,
644 	.mnd_width = 16,
645 	.hid_width = 5,
646 	.parent_map = gcc_parent_map_0,
647 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
648 	.clkr.hw.init = &(struct clk_init_data){
649 		.name = "gcc_qupv3_wrap0_s2_clk_src",
650 		.parent_data = gcc_parents_0,
651 		.num_parents = ARRAY_SIZE(gcc_parents_0),
652 		.flags = CLK_SET_RATE_PARENT,
653 		.ops = &clk_rcg2_ops,
654 	},
655 };
656 
657 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
658 	.cmd_rcgr = 0x174d8,
659 	.mnd_width = 16,
660 	.hid_width = 5,
661 	.parent_map = gcc_parent_map_0,
662 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
663 	.clkr.hw.init = &(struct clk_init_data){
664 		.name = "gcc_qupv3_wrap0_s3_clk_src",
665 		.parent_data = gcc_parents_0,
666 		.num_parents = ARRAY_SIZE(gcc_parents_0),
667 		.flags = CLK_SET_RATE_PARENT,
668 		.ops = &clk_rcg2_ops,
669 	},
670 };
671 
672 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
673 	.cmd_rcgr = 0x17608,
674 	.mnd_width = 16,
675 	.hid_width = 5,
676 	.parent_map = gcc_parent_map_0,
677 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
678 	.clkr.hw.init = &(struct clk_init_data){
679 		.name = "gcc_qupv3_wrap0_s4_clk_src",
680 		.parent_data = gcc_parents_0,
681 		.num_parents = ARRAY_SIZE(gcc_parents_0),
682 		.flags = CLK_SET_RATE_PARENT,
683 		.ops = &clk_rcg2_ops,
684 	},
685 };
686 
687 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
688 	.cmd_rcgr = 0x17738,
689 	.mnd_width = 16,
690 	.hid_width = 5,
691 	.parent_map = gcc_parent_map_0,
692 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
693 	.clkr.hw.init = &(struct clk_init_data){
694 		.name = "gcc_qupv3_wrap0_s5_clk_src",
695 		.parent_data = gcc_parents_0,
696 		.num_parents = ARRAY_SIZE(gcc_parents_0),
697 		.flags = CLK_SET_RATE_PARENT,
698 		.ops = &clk_rcg2_ops,
699 	},
700 };
701 
702 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
703 	.cmd_rcgr = 0x17868,
704 	.mnd_width = 16,
705 	.hid_width = 5,
706 	.parent_map = gcc_parent_map_0,
707 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
708 	.clkr.hw.init = &(struct clk_init_data){
709 		.name = "gcc_qupv3_wrap0_s6_clk_src",
710 		.parent_data = gcc_parents_0,
711 		.num_parents = ARRAY_SIZE(gcc_parents_0),
712 		.flags = CLK_SET_RATE_PARENT,
713 		.ops = &clk_rcg2_ops,
714 	},
715 };
716 
717 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
718 	.cmd_rcgr = 0x17998,
719 	.mnd_width = 16,
720 	.hid_width = 5,
721 	.parent_map = gcc_parent_map_0,
722 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
723 	.clkr.hw.init = &(struct clk_init_data){
724 		.name = "gcc_qupv3_wrap0_s7_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 
732 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
733 	.cmd_rcgr = 0x18148,
734 	.mnd_width = 16,
735 	.hid_width = 5,
736 	.parent_map = gcc_parent_map_0,
737 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
738 	.clkr.hw.init = &(struct clk_init_data){
739 		.name = "gcc_qupv3_wrap1_s0_clk_src",
740 		.parent_data = gcc_parents_0,
741 		.num_parents = ARRAY_SIZE(gcc_parents_0),
742 		.flags = CLK_SET_RATE_PARENT,
743 		.ops = &clk_rcg2_ops,
744 	},
745 };
746 
747 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
748 	.cmd_rcgr = 0x18278,
749 	.mnd_width = 16,
750 	.hid_width = 5,
751 	.parent_map = gcc_parent_map_0,
752 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
753 	.clkr.hw.init = &(struct clk_init_data){
754 		.name = "gcc_qupv3_wrap1_s1_clk_src",
755 		.parent_data = gcc_parents_0,
756 		.num_parents = ARRAY_SIZE(gcc_parents_0),
757 		.flags = CLK_SET_RATE_PARENT,
758 		.ops = &clk_rcg2_ops,
759 	},
760 };
761 
762 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
763 	.cmd_rcgr = 0x183a8,
764 	.mnd_width = 16,
765 	.hid_width = 5,
766 	.parent_map = gcc_parent_map_0,
767 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
768 	.clkr.hw.init = &(struct clk_init_data){
769 		.name = "gcc_qupv3_wrap1_s2_clk_src",
770 		.parent_data = gcc_parents_0,
771 		.num_parents = ARRAY_SIZE(gcc_parents_0),
772 		.flags = CLK_SET_RATE_PARENT,
773 		.ops = &clk_rcg2_ops,
774 	},
775 };
776 
777 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
778 	.cmd_rcgr = 0x184d8,
779 	.mnd_width = 16,
780 	.hid_width = 5,
781 	.parent_map = gcc_parent_map_0,
782 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
783 	.clkr.hw.init = &(struct clk_init_data){
784 		.name = "gcc_qupv3_wrap1_s3_clk_src",
785 		.parent_data = gcc_parents_0,
786 		.num_parents = ARRAY_SIZE(gcc_parents_0),
787 		.flags = CLK_SET_RATE_PARENT,
788 		.ops = &clk_rcg2_ops,
789 	},
790 };
791 
792 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
793 	.cmd_rcgr = 0x18608,
794 	.mnd_width = 16,
795 	.hid_width = 5,
796 	.parent_map = gcc_parent_map_0,
797 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
798 	.clkr.hw.init = &(struct clk_init_data){
799 		.name = "gcc_qupv3_wrap1_s4_clk_src",
800 		.parent_data = gcc_parents_0,
801 		.num_parents = ARRAY_SIZE(gcc_parents_0),
802 		.flags = CLK_SET_RATE_PARENT,
803 		.ops = &clk_rcg2_ops,
804 	},
805 };
806 
807 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
808 	.cmd_rcgr = 0x18738,
809 	.mnd_width = 16,
810 	.hid_width = 5,
811 	.parent_map = gcc_parent_map_0,
812 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
813 	.clkr.hw.init = &(struct clk_init_data){
814 		.name = "gcc_qupv3_wrap1_s5_clk_src",
815 		.parent_data = gcc_parents_0,
816 		.num_parents = ARRAY_SIZE(gcc_parents_0),
817 		.flags = CLK_SET_RATE_PARENT,
818 		.ops = &clk_rcg2_ops,
819 	},
820 };
821 
822 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
823 	.cmd_rcgr = 0x1e148,
824 	.mnd_width = 16,
825 	.hid_width = 5,
826 	.parent_map = gcc_parent_map_0,
827 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
828 	.clkr.hw.init = &(struct clk_init_data){
829 		.name = "gcc_qupv3_wrap2_s0_clk_src",
830 		.parent_data = gcc_parents_0,
831 		.num_parents = ARRAY_SIZE(gcc_parents_0),
832 		.flags = CLK_SET_RATE_PARENT,
833 		.ops = &clk_rcg2_ops,
834 	},
835 };
836 
837 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
838 	.cmd_rcgr = 0x1e278,
839 	.mnd_width = 16,
840 	.hid_width = 5,
841 	.parent_map = gcc_parent_map_0,
842 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
843 	.clkr.hw.init = &(struct clk_init_data){
844 		.name = "gcc_qupv3_wrap2_s1_clk_src",
845 		.parent_data = gcc_parents_0,
846 		.num_parents = ARRAY_SIZE(gcc_parents_0),
847 		.flags = CLK_SET_RATE_PARENT,
848 		.ops = &clk_rcg2_ops,
849 	},
850 };
851 
852 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
853 	.cmd_rcgr = 0x1e3a8,
854 	.mnd_width = 16,
855 	.hid_width = 5,
856 	.parent_map = gcc_parent_map_0,
857 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
858 	.clkr.hw.init = &(struct clk_init_data){
859 		.name = "gcc_qupv3_wrap2_s2_clk_src",
860 		.parent_data = gcc_parents_0,
861 		.num_parents = ARRAY_SIZE(gcc_parents_0),
862 		.flags = CLK_SET_RATE_PARENT,
863 		.ops = &clk_rcg2_ops,
864 	},
865 };
866 
867 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
868 	.cmd_rcgr = 0x1e4d8,
869 	.mnd_width = 16,
870 	.hid_width = 5,
871 	.parent_map = gcc_parent_map_0,
872 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
873 	.clkr.hw.init = &(struct clk_init_data){
874 		.name = "gcc_qupv3_wrap2_s3_clk_src",
875 		.parent_data = gcc_parents_0,
876 		.num_parents = ARRAY_SIZE(gcc_parents_0),
877 		.flags = CLK_SET_RATE_PARENT,
878 		.ops = &clk_rcg2_ops,
879 	},
880 };
881 
882 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
883 	.cmd_rcgr = 0x1e608,
884 	.mnd_width = 16,
885 	.hid_width = 5,
886 	.parent_map = gcc_parent_map_0,
887 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
888 	.clkr.hw.init = &(struct clk_init_data){
889 		.name = "gcc_qupv3_wrap2_s4_clk_src",
890 		.parent_data = gcc_parents_0,
891 		.num_parents = ARRAY_SIZE(gcc_parents_0),
892 		.flags = CLK_SET_RATE_PARENT,
893 		.ops = &clk_rcg2_ops,
894 	},
895 };
896 
897 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
898 	.cmd_rcgr = 0x1e738,
899 	.mnd_width = 16,
900 	.hid_width = 5,
901 	.parent_map = gcc_parent_map_0,
902 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
903 	.clkr.hw.init = &(struct clk_init_data){
904 		.name = "gcc_qupv3_wrap2_s5_clk_src",
905 		.parent_data = gcc_parents_0,
906 		.num_parents = ARRAY_SIZE(gcc_parents_0),
907 		.flags = CLK_SET_RATE_PARENT,
908 		.ops = &clk_rcg2_ops,
909 	},
910 };
911 
912 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
913 	F(400000, P_BI_TCXO, 12, 1, 4),
914 	F(9600000, P_BI_TCXO, 2, 0, 0),
915 	F(19200000, P_BI_TCXO, 1, 0, 0),
916 	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
917 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
918 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
919 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
920 	{ }
921 };
922 
923 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
924 	.cmd_rcgr = 0x1400c,
925 	.mnd_width = 8,
926 	.hid_width = 5,
927 	.parent_map = gcc_parent_map_7,
928 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
929 	.clkr.hw.init = &(struct clk_init_data){
930 		.name = "gcc_sdcc2_apps_clk_src",
931 		.parent_data = gcc_parents_7,
932 		.num_parents = ARRAY_SIZE(gcc_parents_7),
933 		.flags = CLK_SET_RATE_PARENT,
934 		.ops = &clk_rcg2_floor_ops,
935 	},
936 };
937 
938 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
939 	F(400000, P_BI_TCXO, 12, 1, 4),
940 	F(9600000, P_BI_TCXO, 2, 0, 0),
941 	F(19200000, P_BI_TCXO, 1, 0, 0),
942 	F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0),
943 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
944 	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
945 	{ }
946 };
947 
948 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
949 	.cmd_rcgr = 0x1600c,
950 	.mnd_width = 8,
951 	.hid_width = 5,
952 	.parent_map = gcc_parent_map_5,
953 	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
954 	.clkr.hw.init = &(struct clk_init_data){
955 		.name = "gcc_sdcc4_apps_clk_src",
956 		.parent_data = gcc_parents_5,
957 		.num_parents = ARRAY_SIZE(gcc_parents_5),
958 		.flags = CLK_SET_RATE_PARENT,
959 		.ops = &clk_rcg2_floor_ops,
960 	},
961 };
962 
963 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
964 	F(105495, P_BI_TCXO, 2, 1, 91),
965 	{ }
966 };
967 
968 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
969 	.cmd_rcgr = 0x36010,
970 	.mnd_width = 8,
971 	.hid_width = 5,
972 	.parent_map = gcc_parent_map_8,
973 	.freq_tbl = ftbl_gcc_tsif_ref_clk_src,
974 	.clkr.hw.init = &(struct clk_init_data){
975 		.name = "gcc_tsif_ref_clk_src",
976 		.parent_data = gcc_parents_8,
977 		.num_parents = ARRAY_SIZE(gcc_parents_8),
978 		.flags = CLK_SET_RATE_PARENT,
979 		.ops = &clk_rcg2_ops,
980 	},
981 };
982 
983 static const struct freq_tbl ftbl_gcc_ufs_card_2_axi_clk_src[] = {
984 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
985 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
986 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
987 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
988 	{ }
989 };
990 
991 static struct clk_rcg2 gcc_ufs_card_2_axi_clk_src = {
992 	.cmd_rcgr = 0xa2020,
993 	.mnd_width = 8,
994 	.hid_width = 5,
995 	.parent_map = gcc_parent_map_0,
996 	.freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
997 	.clkr.hw.init = &(struct clk_init_data){
998 		.name = "gcc_ufs_card_2_axi_clk_src",
999 		.parent_data = gcc_parents_0,
1000 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1001 		.flags = CLK_SET_RATE_PARENT,
1002 		.ops = &clk_rcg2_ops,
1003 	},
1004 };
1005 
1006 static struct clk_rcg2 gcc_ufs_card_2_ice_core_clk_src = {
1007 	.cmd_rcgr = 0xa2060,
1008 	.mnd_width = 0,
1009 	.hid_width = 5,
1010 	.parent_map = gcc_parent_map_0,
1011 	.freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1012 	.clkr.hw.init = &(struct clk_init_data){
1013 		.name = "gcc_ufs_card_2_ice_core_clk_src",
1014 		.parent_data = gcc_parents_0,
1015 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1016 		.flags = CLK_SET_RATE_PARENT,
1017 		.ops = &clk_rcg2_ops,
1018 	},
1019 };
1020 
1021 static const struct freq_tbl ftbl_gcc_ufs_card_2_phy_aux_clk_src[] = {
1022 	F(19200000, P_BI_TCXO, 1, 0, 0),
1023 	{ }
1024 };
1025 
1026 static struct clk_rcg2 gcc_ufs_card_2_phy_aux_clk_src = {
1027 	.cmd_rcgr = 0xa2094,
1028 	.mnd_width = 0,
1029 	.hid_width = 5,
1030 	.parent_map = gcc_parent_map_4,
1031 	.freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1032 	.clkr.hw.init = &(struct clk_init_data){
1033 		.name = "gcc_ufs_card_2_phy_aux_clk_src",
1034 		.parent_data = gcc_parents_4,
1035 		.num_parents = ARRAY_SIZE(gcc_parents_4),
1036 		.flags = CLK_SET_RATE_PARENT,
1037 		.ops = &clk_rcg2_ops,
1038 	},
1039 };
1040 
1041 static struct clk_rcg2 gcc_ufs_card_2_unipro_core_clk_src = {
1042 	.cmd_rcgr = 0xa2078,
1043 	.mnd_width = 0,
1044 	.hid_width = 5,
1045 	.parent_map = gcc_parent_map_0,
1046 	.freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1047 	.clkr.hw.init = &(struct clk_init_data){
1048 		.name = "gcc_ufs_card_2_unipro_core_clk_src",
1049 		.parent_data = gcc_parents_0,
1050 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1051 		.flags = CLK_SET_RATE_PARENT,
1052 		.ops = &clk_rcg2_ops,
1053 	},
1054 };
1055 
1056 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
1057 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1058 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
1059 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
1060 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1061 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1062 	{ }
1063 };
1064 
1065 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
1066 	.cmd_rcgr = 0x75020,
1067 	.mnd_width = 8,
1068 	.hid_width = 5,
1069 	.parent_map = gcc_parent_map_0,
1070 	.freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1071 	.clkr.hw.init = &(struct clk_init_data){
1072 		.name = "gcc_ufs_card_axi_clk_src",
1073 		.parent_data = gcc_parents_0,
1074 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1075 		.flags = CLK_SET_RATE_PARENT,
1076 		.ops = &clk_rcg2_ops,
1077 	},
1078 };
1079 
1080 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
1081 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1082 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1083 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1084 	{ }
1085 };
1086 
1087 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
1088 	.cmd_rcgr = 0x75060,
1089 	.mnd_width = 0,
1090 	.hid_width = 5,
1091 	.parent_map = gcc_parent_map_0,
1092 	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1093 	.clkr.hw.init = &(struct clk_init_data){
1094 		.name = "gcc_ufs_card_ice_core_clk_src",
1095 		.parent_data = gcc_parents_0,
1096 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1097 		.flags = CLK_SET_RATE_PARENT,
1098 		.ops = &clk_rcg2_ops,
1099 	},
1100 };
1101 
1102 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
1103 	.cmd_rcgr = 0x75094,
1104 	.mnd_width = 0,
1105 	.hid_width = 5,
1106 	.parent_map = gcc_parent_map_4,
1107 	.freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1108 	.clkr.hw.init = &(struct clk_init_data){
1109 		.name = "gcc_ufs_card_phy_aux_clk_src",
1110 		.parent_data = gcc_parents_4,
1111 		.num_parents = ARRAY_SIZE(gcc_parents_4),
1112 		.flags = CLK_SET_RATE_PARENT,
1113 		.ops = &clk_rcg2_ops,
1114 	},
1115 };
1116 
1117 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
1118 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1119 	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1120 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1121 	{ }
1122 };
1123 
1124 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
1125 	.cmd_rcgr = 0x75078,
1126 	.mnd_width = 0,
1127 	.hid_width = 5,
1128 	.parent_map = gcc_parent_map_0,
1129 	.freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
1130 	.clkr.hw.init = &(struct clk_init_data){
1131 		.name = "gcc_ufs_card_unipro_core_clk_src",
1132 		.parent_data = gcc_parents_0,
1133 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1134 		.flags = CLK_SET_RATE_PARENT,
1135 		.ops = &clk_rcg2_ops,
1136 	},
1137 };
1138 
1139 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1140 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1141 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1142 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1143 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1144 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1145 	{ }
1146 };
1147 
1148 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1149 	.cmd_rcgr = 0x77020,
1150 	.mnd_width = 8,
1151 	.hid_width = 5,
1152 	.parent_map = gcc_parent_map_0,
1153 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1154 	.clkr.hw.init = &(struct clk_init_data){
1155 		.name = "gcc_ufs_phy_axi_clk_src",
1156 		.parent_data = gcc_parents_0,
1157 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1158 		.flags = CLK_SET_RATE_PARENT,
1159 		.ops = &clk_rcg2_ops,
1160 	},
1161 };
1162 
1163 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1164 	.cmd_rcgr = 0x77060,
1165 	.mnd_width = 0,
1166 	.hid_width = 5,
1167 	.parent_map = gcc_parent_map_0,
1168 	.freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1169 	.clkr.hw.init = &(struct clk_init_data){
1170 		.name = "gcc_ufs_phy_ice_core_clk_src",
1171 		.parent_data = gcc_parents_0,
1172 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1173 		.flags = CLK_SET_RATE_PARENT,
1174 		.ops = &clk_rcg2_ops,
1175 	},
1176 };
1177 
1178 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1179 	.cmd_rcgr = 0x77094,
1180 	.mnd_width = 0,
1181 	.hid_width = 5,
1182 	.parent_map = gcc_parent_map_4,
1183 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1184 	.clkr.hw.init = &(struct clk_init_data){
1185 		.name = "gcc_ufs_phy_phy_aux_clk_src",
1186 		.parent_data = gcc_parents_4,
1187 		.num_parents = ARRAY_SIZE(gcc_parents_4),
1188 		.flags = CLK_SET_RATE_PARENT,
1189 		.ops = &clk_rcg2_ops,
1190 	},
1191 };
1192 
1193 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1194 	.cmd_rcgr = 0x77078,
1195 	.mnd_width = 0,
1196 	.hid_width = 5,
1197 	.parent_map = gcc_parent_map_0,
1198 	.freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1199 	.clkr.hw.init = &(struct clk_init_data){
1200 		.name = "gcc_ufs_phy_unipro_core_clk_src",
1201 		.parent_data = gcc_parents_0,
1202 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1203 		.flags = CLK_SET_RATE_PARENT,
1204 		.ops = &clk_rcg2_ops,
1205 	},
1206 };
1207 
1208 static const struct freq_tbl ftbl_gcc_usb30_mp_master_clk_src[] = {
1209 	F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1210 	F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1211 	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1212 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1213 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1214 	{ }
1215 };
1216 
1217 static struct clk_rcg2 gcc_usb30_mp_master_clk_src = {
1218 	.cmd_rcgr = 0xa601c,
1219 	.mnd_width = 8,
1220 	.hid_width = 5,
1221 	.parent_map = gcc_parent_map_0,
1222 	.freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1223 	.clkr.hw.init = &(struct clk_init_data){
1224 		.name = "gcc_usb30_mp_master_clk_src",
1225 		.parent_data = gcc_parents_0,
1226 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1227 		.flags = CLK_SET_RATE_PARENT,
1228 		.ops = &clk_rcg2_ops,
1229 	},
1230 };
1231 
1232 static const struct freq_tbl ftbl_gcc_usb30_mp_mock_utmi_clk_src[] = {
1233 	F(19200000, P_BI_TCXO, 1, 0, 0),
1234 	F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1235 	F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
1236 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1237 	{ }
1238 };
1239 
1240 static struct clk_rcg2 gcc_usb30_mp_mock_utmi_clk_src = {
1241 	.cmd_rcgr = 0xa6034,
1242 	.mnd_width = 0,
1243 	.hid_width = 5,
1244 	.parent_map = gcc_parent_map_0,
1245 	.freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1246 	.clkr.hw.init = &(struct clk_init_data){
1247 		.name = "gcc_usb30_mp_mock_utmi_clk_src",
1248 		.parent_data = gcc_parents_0,
1249 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1250 		.flags = CLK_SET_RATE_PARENT,
1251 		.ops = &clk_rcg2_ops,
1252 	},
1253 };
1254 
1255 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1256 	.cmd_rcgr = 0xf01c,
1257 	.mnd_width = 8,
1258 	.hid_width = 5,
1259 	.parent_map = gcc_parent_map_0,
1260 	.freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1261 	.clkr.hw.init = &(struct clk_init_data){
1262 		.name = "gcc_usb30_prim_master_clk_src",
1263 		.parent_data = gcc_parents_0,
1264 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1265 		.flags = CLK_SET_RATE_PARENT,
1266 		.ops = &clk_rcg2_ops,
1267 	},
1268 };
1269 
1270 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1271 	.cmd_rcgr = 0xf034,
1272 	.mnd_width = 0,
1273 	.hid_width = 5,
1274 	.parent_map = gcc_parent_map_0,
1275 	.freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1276 	.clkr.hw.init = &(struct clk_init_data){
1277 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1278 		.parent_data = gcc_parents_0,
1279 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1280 		.flags = CLK_SET_RATE_PARENT,
1281 		.ops = &clk_rcg2_ops,
1282 	},
1283 };
1284 
1285 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1286 	.cmd_rcgr = 0x1001c,
1287 	.mnd_width = 8,
1288 	.hid_width = 5,
1289 	.parent_map = gcc_parent_map_0,
1290 	.freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1291 	.clkr.hw.init = &(struct clk_init_data){
1292 		.name = "gcc_usb30_sec_master_clk_src",
1293 		.parent_data = gcc_parents_0,
1294 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1295 		.flags = CLK_SET_RATE_PARENT,
1296 		.ops = &clk_rcg2_ops,
1297 	},
1298 };
1299 
1300 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1301 	.cmd_rcgr = 0x10034,
1302 	.mnd_width = 0,
1303 	.hid_width = 5,
1304 	.parent_map = gcc_parent_map_0,
1305 	.freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1306 	.clkr.hw.init = &(struct clk_init_data){
1307 		.name = "gcc_usb30_sec_mock_utmi_clk_src",
1308 		.parent_data = gcc_parents_0,
1309 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1310 		.flags = CLK_SET_RATE_PARENT,
1311 		.ops = &clk_rcg2_ops,
1312 	},
1313 };
1314 
1315 static struct clk_rcg2 gcc_usb3_mp_phy_aux_clk_src = {
1316 	.cmd_rcgr = 0xa6068,
1317 	.mnd_width = 0,
1318 	.hid_width = 5,
1319 	.parent_map = gcc_parent_map_2,
1320 	.freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1321 	.clkr.hw.init = &(struct clk_init_data){
1322 		.name = "gcc_usb3_mp_phy_aux_clk_src",
1323 		.parent_data = gcc_parents_2,
1324 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1325 		.flags = CLK_SET_RATE_PARENT,
1326 		.ops = &clk_rcg2_ops,
1327 	},
1328 };
1329 
1330 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1331 	.cmd_rcgr = 0xf060,
1332 	.mnd_width = 0,
1333 	.hid_width = 5,
1334 	.parent_map = gcc_parent_map_2,
1335 	.freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1336 	.clkr.hw.init = &(struct clk_init_data){
1337 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1338 		.parent_data = gcc_parents_2,
1339 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1340 		.flags = CLK_SET_RATE_PARENT,
1341 		.ops = &clk_rcg2_ops,
1342 	},
1343 };
1344 
1345 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1346 	.cmd_rcgr = 0x10060,
1347 	.mnd_width = 0,
1348 	.hid_width = 5,
1349 	.parent_map = gcc_parent_map_2,
1350 	.freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1351 	.clkr.hw.init = &(struct clk_init_data){
1352 		.name = "gcc_usb3_sec_phy_aux_clk_src",
1353 		.parent_data = gcc_parents_2,
1354 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1355 		.flags = CLK_SET_RATE_PARENT,
1356 		.ops = &clk_rcg2_ops,
1357 	},
1358 };
1359 
1360 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1361 	.halt_reg = 0x90018,
1362 	.halt_check = BRANCH_HALT,
1363 	.clkr = {
1364 		.enable_reg = 0x90018,
1365 		.enable_mask = BIT(0),
1366 		.hw.init = &(struct clk_init_data){
1367 			.name = "gcc_aggre_noc_pcie_tbu_clk",
1368 			.ops = &clk_branch2_ops,
1369 		},
1370 	},
1371 };
1372 
1373 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1374 	.halt_reg = 0x750c0,
1375 	.halt_check = BRANCH_HALT,
1376 	.hwcg_reg = 0x750c0,
1377 	.hwcg_bit = 1,
1378 	.clkr = {
1379 		.enable_reg = 0x750c0,
1380 		.enable_mask = BIT(0),
1381 		.hw.init = &(struct clk_init_data){
1382 			.name = "gcc_aggre_ufs_card_axi_clk",
1383 			.parent_hws = (const struct clk_hw *[]){
1384 				      &gcc_ufs_card_axi_clk_src.clkr.hw
1385 			},
1386 			.num_parents = 1,
1387 			.flags = CLK_SET_RATE_PARENT,
1388 			.ops = &clk_branch2_ops,
1389 		},
1390 	},
1391 };
1392 
1393 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1394 	.halt_reg = 0x750c0,
1395 	.halt_check = BRANCH_HALT,
1396 	.hwcg_reg = 0x750c0,
1397 	.hwcg_bit = 1,
1398 	.clkr = {
1399 		.enable_reg = 0x750c0,
1400 		.enable_mask = BIT(1),
1401 		.hw.init = &(struct clk_init_data){
1402 			.name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1403 			.parent_hws = (const struct clk_hw *[]){
1404 				      &gcc_aggre_ufs_card_axi_clk.clkr.hw
1405 			},
1406 			.num_parents = 1,
1407 			.flags = CLK_SET_RATE_PARENT,
1408 			.ops = &clk_branch_simple_ops,
1409 		},
1410 	},
1411 };
1412 
1413 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1414 	.halt_reg = 0x770c0,
1415 	.halt_check = BRANCH_HALT,
1416 	.hwcg_reg = 0x770c0,
1417 	.hwcg_bit = 1,
1418 	.clkr = {
1419 		.enable_reg = 0x770c0,
1420 		.enable_mask = BIT(0),
1421 		.hw.init = &(struct clk_init_data){
1422 			.name = "gcc_aggre_ufs_phy_axi_clk",
1423 			.parent_hws = (const struct clk_hw *[]){
1424 				      &gcc_ufs_phy_axi_clk_src.clkr.hw
1425 			},
1426 			.num_parents = 1,
1427 			.flags = CLK_SET_RATE_PARENT,
1428 			.ops = &clk_branch2_ops,
1429 		},
1430 	},
1431 };
1432 
1433 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1434 	.halt_reg = 0x770c0,
1435 	.halt_check = BRANCH_HALT,
1436 	.hwcg_reg = 0x770c0,
1437 	.hwcg_bit = 1,
1438 	.clkr = {
1439 		.enable_reg = 0x770c0,
1440 		.enable_mask = BIT(1),
1441 		.hw.init = &(struct clk_init_data){
1442 			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1443 			.parent_hws = (const struct clk_hw *[]){
1444 				      &gcc_aggre_ufs_phy_axi_clk.clkr.hw
1445 			},
1446 			.num_parents = 1,
1447 			.flags = CLK_SET_RATE_PARENT,
1448 			.ops = &clk_branch_simple_ops,
1449 		},
1450 	},
1451 };
1452 
1453 static struct clk_branch gcc_aggre_usb3_mp_axi_clk = {
1454 	.halt_reg = 0xa6084,
1455 	.halt_check = BRANCH_HALT,
1456 	.clkr = {
1457 		.enable_reg = 0xa6084,
1458 		.enable_mask = BIT(0),
1459 		.hw.init = &(struct clk_init_data){
1460 			.name = "gcc_aggre_usb3_mp_axi_clk",
1461 			.parent_hws = (const struct clk_hw *[]){
1462 				      &gcc_usb30_mp_master_clk_src.clkr.hw
1463 			},
1464 			.num_parents = 1,
1465 			.flags = CLK_SET_RATE_PARENT,
1466 			.ops = &clk_branch2_ops,
1467 		},
1468 	},
1469 };
1470 
1471 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1472 	.halt_reg = 0xf07c,
1473 	.halt_check = BRANCH_HALT,
1474 	.clkr = {
1475 		.enable_reg = 0xf07c,
1476 		.enable_mask = BIT(0),
1477 		.hw.init = &(struct clk_init_data){
1478 			.name = "gcc_aggre_usb3_prim_axi_clk",
1479 			.parent_hws = (const struct clk_hw *[]){
1480 				      &gcc_usb30_prim_master_clk_src.clkr.hw
1481 			},
1482 			.num_parents = 1,
1483 			.flags = CLK_SET_RATE_PARENT,
1484 			.ops = &clk_branch2_ops,
1485 		},
1486 	},
1487 };
1488 
1489 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1490 	.halt_reg = 0x1007c,
1491 	.halt_check = BRANCH_HALT,
1492 	.clkr = {
1493 		.enable_reg = 0x1007c,
1494 		.enable_mask = BIT(0),
1495 		.hw.init = &(struct clk_init_data){
1496 			.name = "gcc_aggre_usb3_sec_axi_clk",
1497 			.parent_hws = (const struct clk_hw *[]){
1498 				      &gcc_usb30_sec_master_clk_src.clkr.hw
1499 			},
1500 			.num_parents = 1,
1501 			.flags = CLK_SET_RATE_PARENT,
1502 			.ops = &clk_branch2_ops,
1503 		},
1504 	},
1505 };
1506 
1507 static struct clk_branch gcc_boot_rom_ahb_clk = {
1508 	.halt_reg = 0x38004,
1509 	.halt_check = BRANCH_HALT_VOTED,
1510 	.hwcg_reg = 0x38004,
1511 	.hwcg_bit = 1,
1512 	.clkr = {
1513 		.enable_reg = 0x52004,
1514 		.enable_mask = BIT(10),
1515 		.hw.init = &(struct clk_init_data){
1516 			.name = "gcc_boot_rom_ahb_clk",
1517 			.ops = &clk_branch2_ops,
1518 		},
1519 	},
1520 };
1521 
1522 static struct clk_branch gcc_camera_hf_axi_clk = {
1523 	.halt_reg = 0xb030,
1524 	.halt_check = BRANCH_HALT,
1525 	.clkr = {
1526 		.enable_reg = 0xb030,
1527 		.enable_mask = BIT(0),
1528 		.hw.init = &(struct clk_init_data){
1529 			.name = "gcc_camera_hf_axi_clk",
1530 			.ops = &clk_branch2_ops,
1531 		},
1532 	},
1533 };
1534 
1535 static struct clk_branch gcc_camera_sf_axi_clk = {
1536 	.halt_reg = 0xb034,
1537 	.halt_check = BRANCH_HALT,
1538 	.clkr = {
1539 		.enable_reg = 0xb034,
1540 		.enable_mask = BIT(0),
1541 		.hw.init = &(struct clk_init_data){
1542 			.name = "gcc_camera_sf_axi_clk",
1543 			.ops = &clk_branch2_ops,
1544 		},
1545 	},
1546 };
1547 
1548 static struct clk_branch gcc_cfg_noc_usb3_mp_axi_clk = {
1549 	.halt_reg = 0xa609c,
1550 	.halt_check = BRANCH_HALT,
1551 	.clkr = {
1552 		.enable_reg = 0xa609c,
1553 		.enable_mask = BIT(0),
1554 		.hw.init = &(struct clk_init_data){
1555 			.name = "gcc_cfg_noc_usb3_mp_axi_clk",
1556 			.parent_hws = (const struct clk_hw *[]){
1557 				      &gcc_usb30_mp_master_clk_src.clkr.hw
1558 			},
1559 			.num_parents = 1,
1560 			.flags = CLK_SET_RATE_PARENT,
1561 			.ops = &clk_branch2_ops,
1562 		},
1563 	},
1564 };
1565 
1566 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1567 	.halt_reg = 0xf078,
1568 	.halt_check = BRANCH_HALT,
1569 	.clkr = {
1570 		.enable_reg = 0xf078,
1571 		.enable_mask = BIT(0),
1572 		.hw.init = &(struct clk_init_data){
1573 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1574 			.parent_hws = (const struct clk_hw *[]){
1575 				      &gcc_usb30_prim_master_clk_src.clkr.hw
1576 			},
1577 			.num_parents = 1,
1578 			.flags = CLK_SET_RATE_PARENT,
1579 			.ops = &clk_branch2_ops,
1580 		},
1581 	},
1582 };
1583 
1584 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1585 	.halt_reg = 0x10078,
1586 	.halt_check = BRANCH_HALT,
1587 	.clkr = {
1588 		.enable_reg = 0x10078,
1589 		.enable_mask = BIT(0),
1590 		.hw.init = &(struct clk_init_data){
1591 			.name = "gcc_cfg_noc_usb3_sec_axi_clk",
1592 			.parent_hws = (const struct clk_hw *[]){
1593 				      &gcc_usb30_sec_master_clk_src.clkr.hw
1594 			},
1595 			.num_parents = 1,
1596 			.flags = CLK_SET_RATE_PARENT,
1597 			.ops = &clk_branch2_ops,
1598 		},
1599 	},
1600 };
1601 
1602 /* For CPUSS functionality the AHB clock needs to be left enabled */
1603 static struct clk_branch gcc_cpuss_ahb_clk = {
1604 	.halt_reg = 0x48000,
1605 	.halt_check = BRANCH_HALT_VOTED,
1606 	.clkr = {
1607 		.enable_reg = 0x52004,
1608 		.enable_mask = BIT(21),
1609 		.hw.init = &(struct clk_init_data){
1610 			.name = "gcc_cpuss_ahb_clk",
1611 			.parent_hws = (const struct clk_hw *[]){
1612 				      &gcc_cpuss_ahb_clk_src.clkr.hw
1613 			},
1614 			.num_parents = 1,
1615 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1616 			.ops = &clk_branch2_ops,
1617 		},
1618 	},
1619 };
1620 
1621 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1622 	.halt_reg = 0x48008,
1623 	.halt_check = BRANCH_HALT,
1624 	.clkr = {
1625 		.enable_reg = 0x48008,
1626 		.enable_mask = BIT(0),
1627 		.hw.init = &(struct clk_init_data){
1628 			.name = "gcc_cpuss_rbcpr_clk",
1629 			.ops = &clk_branch2_ops,
1630 		},
1631 	},
1632 };
1633 
1634 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1635 	.halt_reg = 0x71154,
1636 	.halt_check = BRANCH_VOTED,
1637 	.clkr = {
1638 		.enable_reg = 0x71154,
1639 		.enable_mask = BIT(0),
1640 		.hw.init = &(struct clk_init_data){
1641 			.name = "gcc_ddrss_gpu_axi_clk",
1642 			.ops = &clk_branch2_ops,
1643 		},
1644 	},
1645 };
1646 
1647 static struct clk_branch gcc_disp_hf_axi_clk = {
1648 	.halt_reg = 0xb038,
1649 	.halt_check = BRANCH_HALT,
1650 	.clkr = {
1651 		.enable_reg = 0xb038,
1652 		.enable_mask = BIT(0),
1653 		.hw.init = &(struct clk_init_data){
1654 			.name = "gcc_disp_hf_axi_clk",
1655 			.ops = &clk_branch2_ops,
1656 		},
1657 	},
1658 };
1659 
1660 static struct clk_branch gcc_disp_sf_axi_clk = {
1661 	.halt_reg = 0xb03c,
1662 	.halt_check = BRANCH_HALT,
1663 	.clkr = {
1664 		.enable_reg = 0xb03c,
1665 		.enable_mask = BIT(0),
1666 		.hw.init = &(struct clk_init_data){
1667 			.name = "gcc_disp_sf_axi_clk",
1668 			.ops = &clk_branch2_ops,
1669 		},
1670 	},
1671 };
1672 
1673 static struct clk_branch gcc_emac_axi_clk = {
1674 	.halt_reg = 0x6010,
1675 	.halt_check = BRANCH_HALT,
1676 	.clkr = {
1677 		.enable_reg = 0x6010,
1678 		.enable_mask = BIT(0),
1679 		.hw.init = &(struct clk_init_data){
1680 			.name = "gcc_emac_axi_clk",
1681 			.ops = &clk_branch2_ops,
1682 		},
1683 	},
1684 };
1685 
1686 static struct clk_branch gcc_emac_ptp_clk = {
1687 	.halt_reg = 0x6034,
1688 	.halt_check = BRANCH_HALT,
1689 	.clkr = {
1690 		.enable_reg = 0x6034,
1691 		.enable_mask = BIT(0),
1692 		.hw.init = &(struct clk_init_data){
1693 			.name = "gcc_emac_ptp_clk",
1694 			.parent_hws = (const struct clk_hw *[]){
1695 				      &gcc_emac_ptp_clk_src.clkr.hw
1696 			},
1697 			.num_parents = 1,
1698 			.flags = CLK_SET_RATE_PARENT,
1699 			.ops = &clk_branch2_ops,
1700 		},
1701 	},
1702 };
1703 
1704 static struct clk_branch gcc_emac_rgmii_clk = {
1705 	.halt_reg = 0x6018,
1706 	.halt_check = BRANCH_HALT,
1707 	.clkr = {
1708 		.enable_reg = 0x6018,
1709 		.enable_mask = BIT(0),
1710 		.hw.init = &(struct clk_init_data){
1711 			.name = "gcc_emac_rgmii_clk",
1712 			.parent_hws = (const struct clk_hw *[]){
1713 				      &gcc_emac_rgmii_clk_src.clkr.hw
1714 			},
1715 			.num_parents = 1,
1716 			.flags = CLK_SET_RATE_PARENT,
1717 			.ops = &clk_branch2_ops,
1718 		},
1719 	},
1720 };
1721 
1722 static struct clk_branch gcc_emac_slv_ahb_clk = {
1723 	.halt_reg = 0x6014,
1724 	.halt_check = BRANCH_HALT,
1725 	.hwcg_reg = 0x6014,
1726 	.hwcg_bit = 1,
1727 	.clkr = {
1728 		.enable_reg = 0x6014,
1729 		.enable_mask = BIT(0),
1730 		.hw.init = &(struct clk_init_data){
1731 			.name = "gcc_emac_slv_ahb_clk",
1732 			.ops = &clk_branch2_ops,
1733 		},
1734 	},
1735 };
1736 
1737 static struct clk_branch gcc_gp1_clk = {
1738 	.halt_reg = 0x64000,
1739 	.halt_check = BRANCH_HALT,
1740 	.clkr = {
1741 		.enable_reg = 0x64000,
1742 		.enable_mask = BIT(0),
1743 		.hw.init = &(struct clk_init_data){
1744 			.name = "gcc_gp1_clk",
1745 			.parent_hws = (const struct clk_hw *[]){
1746 				      &gcc_gp1_clk_src.clkr.hw
1747 			},
1748 			.num_parents = 1,
1749 			.flags = CLK_SET_RATE_PARENT,
1750 			.ops = &clk_branch2_ops,
1751 		},
1752 	},
1753 };
1754 
1755 static struct clk_branch gcc_gp2_clk = {
1756 	.halt_reg = 0x65000,
1757 	.halt_check = BRANCH_HALT,
1758 	.clkr = {
1759 		.enable_reg = 0x65000,
1760 		.enable_mask = BIT(0),
1761 		.hw.init = &(struct clk_init_data){
1762 			.name = "gcc_gp2_clk",
1763 			.parent_hws = (const struct clk_hw *[]){
1764 				      &gcc_gp2_clk_src.clkr.hw
1765 			},
1766 			.num_parents = 1,
1767 			.flags = CLK_SET_RATE_PARENT,
1768 			.ops = &clk_branch2_ops,
1769 		},
1770 	},
1771 };
1772 
1773 static struct clk_branch gcc_gp3_clk = {
1774 	.halt_reg = 0x66000,
1775 	.halt_check = BRANCH_HALT,
1776 	.clkr = {
1777 		.enable_reg = 0x66000,
1778 		.enable_mask = BIT(0),
1779 		.hw.init = &(struct clk_init_data){
1780 			.name = "gcc_gp3_clk",
1781 			.parent_hws = (const struct clk_hw *[]){
1782 				      &gcc_gp3_clk_src.clkr.hw
1783 			},
1784 			.num_parents = 1,
1785 			.flags = CLK_SET_RATE_PARENT,
1786 			.ops = &clk_branch2_ops,
1787 		},
1788 	},
1789 };
1790 
1791 static struct clk_branch gcc_gp4_clk = {
1792 	.halt_reg = 0xbe000,
1793 	.halt_check = BRANCH_HALT,
1794 	.clkr = {
1795 		.enable_reg = 0xbe000,
1796 		.enable_mask = BIT(0),
1797 		.hw.init = &(struct clk_init_data){
1798 			.name = "gcc_gp4_clk",
1799 			.parent_hws = (const struct clk_hw *[]){
1800 				      &gcc_gp4_clk_src.clkr.hw
1801 			},
1802 			.num_parents = 1,
1803 			.flags = CLK_SET_RATE_PARENT,
1804 			.ops = &clk_branch2_ops,
1805 		},
1806 	},
1807 };
1808 
1809 static struct clk_branch gcc_gp5_clk = {
1810 	.halt_reg = 0xbf000,
1811 	.halt_check = BRANCH_HALT,
1812 	.clkr = {
1813 		.enable_reg = 0xbf000,
1814 		.enable_mask = BIT(0),
1815 		.hw.init = &(struct clk_init_data){
1816 			.name = "gcc_gp5_clk",
1817 			.parent_hws = (const struct clk_hw *[]){
1818 				      &gcc_gp5_clk_src.clkr.hw
1819 			},
1820 			.num_parents = 1,
1821 			.flags = CLK_SET_RATE_PARENT,
1822 			.ops = &clk_branch2_ops,
1823 		},
1824 	},
1825 };
1826 
1827 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1828 	.halt_check = BRANCH_HALT_DELAY,
1829 	.clkr = {
1830 		.enable_reg = 0x52004,
1831 		.enable_mask = BIT(15),
1832 		.hw.init = &(struct clk_init_data){
1833 			.name = "gcc_gpu_gpll0_clk_src",
1834 			.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1835 			.num_parents = 1,
1836 			.flags = CLK_SET_RATE_PARENT,
1837 			.ops = &clk_branch2_ops,
1838 		},
1839 	},
1840 };
1841 
1842 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1843 	.halt_check = BRANCH_HALT_DELAY,
1844 	.clkr = {
1845 		.enable_reg = 0x52004,
1846 		.enable_mask = BIT(16),
1847 		.hw.init = &(struct clk_init_data){
1848 			.name = "gcc_gpu_gpll0_div_clk_src",
1849 			.parent_hws = (const struct clk_hw *[]){
1850 				      &gpll0_out_even.clkr.hw
1851 			},
1852 			.num_parents = 1,
1853 			.flags = CLK_SET_RATE_PARENT,
1854 			.ops = &clk_branch2_ops,
1855 		},
1856 	},
1857 };
1858 
1859 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1860 	.halt_reg = 0x7100c,
1861 	.halt_check = BRANCH_VOTED,
1862 	.clkr = {
1863 		.enable_reg = 0x7100c,
1864 		.enable_mask = BIT(0),
1865 		.hw.init = &(struct clk_init_data){
1866 			.name = "gcc_gpu_memnoc_gfx_clk",
1867 			.ops = &clk_branch2_ops,
1868 		},
1869 	},
1870 };
1871 
1872 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1873 	.halt_reg = 0x71018,
1874 	.halt_check = BRANCH_HALT,
1875 	.clkr = {
1876 		.enable_reg = 0x71018,
1877 		.enable_mask = BIT(0),
1878 		.hw.init = &(struct clk_init_data){
1879 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1880 			.ops = &clk_branch2_ops,
1881 		},
1882 	},
1883 };
1884 
1885 static struct clk_branch gcc_npu_at_clk = {
1886 	.halt_reg = 0x4d010,
1887 	.halt_check = BRANCH_VOTED,
1888 	.clkr = {
1889 		.enable_reg = 0x4d010,
1890 		.enable_mask = BIT(0),
1891 		.hw.init = &(struct clk_init_data){
1892 			.name = "gcc_npu_at_clk",
1893 			.ops = &clk_branch2_ops,
1894 		},
1895 	},
1896 };
1897 
1898 static struct clk_branch gcc_npu_axi_clk = {
1899 	.halt_reg = 0x4d008,
1900 	.halt_check = BRANCH_VOTED,
1901 	.clkr = {
1902 		.enable_reg = 0x4d008,
1903 		.enable_mask = BIT(0),
1904 		.hw.init = &(struct clk_init_data){
1905 			.name = "gcc_npu_axi_clk",
1906 			.parent_hws = (const struct clk_hw *[]){
1907 				      &gcc_npu_axi_clk_src.clkr.hw
1908 			},
1909 			.num_parents = 1,
1910 			.flags = CLK_SET_RATE_PARENT,
1911 			.ops = &clk_branch2_ops,
1912 		},
1913 	},
1914 };
1915 
1916 static struct clk_branch gcc_npu_gpll0_clk_src = {
1917 	.halt_check = BRANCH_HALT_DELAY,
1918 	.clkr = {
1919 		.enable_reg = 0x52004,
1920 		.enable_mask = BIT(18),
1921 		.hw.init = &(struct clk_init_data){
1922 			.name = "gcc_npu_gpll0_clk_src",
1923 			.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1924 			.num_parents = 1,
1925 			.flags = CLK_SET_RATE_PARENT,
1926 			.ops = &clk_branch2_ops,
1927 		},
1928 	},
1929 };
1930 
1931 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1932 	.halt_check = BRANCH_HALT_DELAY,
1933 	.clkr = {
1934 		.enable_reg = 0x52004,
1935 		.enable_mask = BIT(19),
1936 		.hw.init = &(struct clk_init_data){
1937 			.name = "gcc_npu_gpll0_div_clk_src",
1938 			.parent_hws = (const struct clk_hw *[]){
1939 				      &gpll0_out_even.clkr.hw
1940 			},
1941 			.num_parents = 1,
1942 			.flags = CLK_SET_RATE_PARENT,
1943 			.ops = &clk_branch2_ops,
1944 		},
1945 	},
1946 };
1947 
1948 static struct clk_branch gcc_npu_trig_clk = {
1949 	.halt_reg = 0x4d00c,
1950 	.halt_check = BRANCH_VOTED,
1951 	.clkr = {
1952 		.enable_reg = 0x4d00c,
1953 		.enable_mask = BIT(0),
1954 		.hw.init = &(struct clk_init_data){
1955 			.name = "gcc_npu_trig_clk",
1956 			.ops = &clk_branch2_ops,
1957 		},
1958 	},
1959 };
1960 
1961 static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1962 	.halt_reg = 0x6f02c,
1963 	.halt_check = BRANCH_HALT,
1964 	.clkr = {
1965 		.enable_reg = 0x6f02c,
1966 		.enable_mask = BIT(0),
1967 		.hw.init = &(struct clk_init_data){
1968 			.name = "gcc_pcie0_phy_refgen_clk",
1969 			.parent_hws = (const struct clk_hw *[]){
1970 				      &gcc_pcie_phy_refgen_clk_src.clkr.hw
1971 			},
1972 			.num_parents = 1,
1973 			.flags = CLK_SET_RATE_PARENT,
1974 			.ops = &clk_branch2_ops,
1975 		},
1976 	},
1977 };
1978 
1979 static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1980 	.halt_reg = 0x6f030,
1981 	.halt_check = BRANCH_HALT,
1982 	.clkr = {
1983 		.enable_reg = 0x6f030,
1984 		.enable_mask = BIT(0),
1985 		.hw.init = &(struct clk_init_data){
1986 			.name = "gcc_pcie1_phy_refgen_clk",
1987 			.parent_hws = (const struct clk_hw *[]){
1988 				      &gcc_pcie_phy_refgen_clk_src.clkr.hw
1989 			},
1990 			.num_parents = 1,
1991 			.flags = CLK_SET_RATE_PARENT,
1992 			.ops = &clk_branch2_ops,
1993 		},
1994 	},
1995 };
1996 
1997 static struct clk_branch gcc_pcie2_phy_refgen_clk = {
1998 	.halt_reg = 0x6f034,
1999 	.halt_check = BRANCH_HALT,
2000 	.clkr = {
2001 		.enable_reg = 0x6f034,
2002 		.enable_mask = BIT(0),
2003 		.hw.init = &(struct clk_init_data){
2004 			.name = "gcc_pcie2_phy_refgen_clk",
2005 			.parent_hws = (const struct clk_hw *[]){
2006 				      &gcc_pcie_phy_refgen_clk_src.clkr.hw
2007 			},
2008 			.num_parents = 1,
2009 			.flags = CLK_SET_RATE_PARENT,
2010 			.ops = &clk_branch2_ops,
2011 		},
2012 	},
2013 };
2014 
2015 static struct clk_branch gcc_pcie3_phy_refgen_clk = {
2016 	.halt_reg = 0x6f038,
2017 	.halt_check = BRANCH_HALT,
2018 	.clkr = {
2019 		.enable_reg = 0x6f038,
2020 		.enable_mask = BIT(0),
2021 		.hw.init = &(struct clk_init_data){
2022 			.name = "gcc_pcie3_phy_refgen_clk",
2023 			.parent_hws = (const struct clk_hw *[]){
2024 				      &gcc_pcie_phy_refgen_clk_src.clkr.hw
2025 			},
2026 			.num_parents = 1,
2027 			.flags = CLK_SET_RATE_PARENT,
2028 			.ops = &clk_branch2_ops,
2029 		},
2030 	},
2031 };
2032 
2033 static struct clk_branch gcc_pcie_0_aux_clk = {
2034 	.halt_reg = 0x6b020,
2035 	.halt_check = BRANCH_HALT_VOTED,
2036 	.clkr = {
2037 		.enable_reg = 0x5200c,
2038 		.enable_mask = BIT(3),
2039 		.hw.init = &(struct clk_init_data){
2040 			.name = "gcc_pcie_0_aux_clk",
2041 			.parent_hws = (const struct clk_hw *[]){
2042 				      &gcc_pcie_0_aux_clk_src.clkr.hw
2043 			},
2044 			.num_parents = 1,
2045 			.flags = CLK_SET_RATE_PARENT,
2046 			.ops = &clk_branch2_ops,
2047 		},
2048 	},
2049 };
2050 
2051 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2052 	.halt_reg = 0x6b01c,
2053 	.halt_check = BRANCH_HALT_VOTED,
2054 	.hwcg_reg = 0x6b01c,
2055 	.hwcg_bit = 1,
2056 	.clkr = {
2057 		.enable_reg = 0x5200c,
2058 		.enable_mask = BIT(2),
2059 		.hw.init = &(struct clk_init_data){
2060 			.name = "gcc_pcie_0_cfg_ahb_clk",
2061 			.ops = &clk_branch2_ops,
2062 		},
2063 	},
2064 };
2065 
2066 static struct clk_branch gcc_pcie_0_clkref_clk = {
2067 	.halt_reg = 0x8c00c,
2068 	.halt_check = BRANCH_HALT,
2069 	.clkr = {
2070 		.enable_reg = 0x8c00c,
2071 		.enable_mask = BIT(0),
2072 		.hw.init = &(struct clk_init_data){
2073 			.name = "gcc_pcie_0_clkref_clk",
2074 			.ops = &clk_branch2_ops,
2075 		},
2076 	},
2077 };
2078 
2079 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2080 	.halt_reg = 0x6b018,
2081 	.halt_check = BRANCH_HALT_VOTED,
2082 	.clkr = {
2083 		.enable_reg = 0x5200c,
2084 		.enable_mask = BIT(1),
2085 		.hw.init = &(struct clk_init_data){
2086 			.name = "gcc_pcie_0_mstr_axi_clk",
2087 			.ops = &clk_branch2_ops,
2088 		},
2089 	},
2090 };
2091 
2092 static struct clk_branch gcc_pcie_0_pipe_clk = {
2093 	.halt_reg = 0x6b024,
2094 	.halt_check = BRANCH_HALT_SKIP,
2095 	.clkr = {
2096 		.enable_reg = 0x5200c,
2097 		.enable_mask = BIT(4),
2098 		.hw.init = &(struct clk_init_data){
2099 			.name = "gcc_pcie_0_pipe_clk",
2100 			.ops = &clk_branch2_ops,
2101 		},
2102 	},
2103 };
2104 
2105 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2106 	.halt_reg = 0x6b014,
2107 	.halt_check = BRANCH_HALT_VOTED,
2108 	.hwcg_reg = 0x6b014,
2109 	.hwcg_bit = 1,
2110 	.clkr = {
2111 		.enable_reg = 0x5200c,
2112 		.enable_mask = BIT(0),
2113 		.hw.init = &(struct clk_init_data){
2114 			.name = "gcc_pcie_0_slv_axi_clk",
2115 			.ops = &clk_branch2_ops,
2116 		},
2117 	},
2118 };
2119 
2120 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
2121 	.halt_reg = 0x6b010,
2122 	.halt_check = BRANCH_HALT_VOTED,
2123 	.clkr = {
2124 		.enable_reg = 0x5200c,
2125 		.enable_mask = BIT(5),
2126 		.hw.init = &(struct clk_init_data){
2127 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
2128 			.ops = &clk_branch2_ops,
2129 		},
2130 	},
2131 };
2132 
2133 static struct clk_branch gcc_pcie_1_aux_clk = {
2134 	.halt_reg = 0x8d020,
2135 	.halt_check = BRANCH_HALT_VOTED,
2136 	.clkr = {
2137 		.enable_reg = 0x52004,
2138 		.enable_mask = BIT(29),
2139 		.hw.init = &(struct clk_init_data){
2140 			.name = "gcc_pcie_1_aux_clk",
2141 			.parent_hws = (const struct clk_hw *[]){
2142 				&gcc_pcie_1_aux_clk_src.clkr.hw
2143 			},
2144 			.num_parents = 1,
2145 			.flags = CLK_SET_RATE_PARENT,
2146 			.ops = &clk_branch2_ops,
2147 		},
2148 	},
2149 };
2150 
2151 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2152 	.halt_reg = 0x8d01c,
2153 	.halt_check = BRANCH_HALT_VOTED,
2154 	.hwcg_reg = 0x8d01c,
2155 	.hwcg_bit = 1,
2156 	.clkr = {
2157 		.enable_reg = 0x52004,
2158 		.enable_mask = BIT(28),
2159 		.hw.init = &(struct clk_init_data){
2160 			.name = "gcc_pcie_1_cfg_ahb_clk",
2161 			.ops = &clk_branch2_ops,
2162 		},
2163 	},
2164 };
2165 
2166 static struct clk_branch gcc_pcie_1_clkref_clk = {
2167 	.halt_reg = 0x8c02c,
2168 	.halt_check = BRANCH_HALT,
2169 	.clkr = {
2170 		.enable_reg = 0x8c02c,
2171 		.enable_mask = BIT(0),
2172 		.hw.init = &(struct clk_init_data){
2173 			.name = "gcc_pcie_1_clkref_clk",
2174 			.ops = &clk_branch2_ops,
2175 		},
2176 	},
2177 };
2178 
2179 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2180 	.halt_reg = 0x8d018,
2181 	.halt_check = BRANCH_HALT_VOTED,
2182 	.clkr = {
2183 		.enable_reg = 0x52004,
2184 		.enable_mask = BIT(27),
2185 		.hw.init = &(struct clk_init_data){
2186 			.name = "gcc_pcie_1_mstr_axi_clk",
2187 			.ops = &clk_branch2_ops,
2188 		},
2189 	},
2190 };
2191 
2192 static struct clk_branch gcc_pcie_1_pipe_clk = {
2193 	.halt_reg = 0x8d024,
2194 	.halt_check = BRANCH_HALT_SKIP,
2195 	.clkr = {
2196 		.enable_reg = 0x52004,
2197 		.enable_mask = BIT(30),
2198 		.hw.init = &(struct clk_init_data){
2199 			.name = "gcc_pcie_1_pipe_clk",
2200 			.ops = &clk_branch2_ops,
2201 		},
2202 	},
2203 };
2204 
2205 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2206 	.halt_reg = 0x8d014,
2207 	.halt_check = BRANCH_HALT_VOTED,
2208 	.hwcg_reg = 0x8d014,
2209 	.hwcg_bit = 1,
2210 	.clkr = {
2211 		.enable_reg = 0x52004,
2212 		.enable_mask = BIT(26),
2213 		.hw.init = &(struct clk_init_data){
2214 			.name = "gcc_pcie_1_slv_axi_clk",
2215 			.ops = &clk_branch2_ops,
2216 		},
2217 	},
2218 };
2219 
2220 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2221 	.halt_reg = 0x8d010,
2222 	.halt_check = BRANCH_HALT_VOTED,
2223 	.clkr = {
2224 		.enable_reg = 0x52004,
2225 		.enable_mask = BIT(25),
2226 		.hw.init = &(struct clk_init_data){
2227 			.name = "gcc_pcie_1_slv_q2a_axi_clk",
2228 			.ops = &clk_branch2_ops,
2229 		},
2230 	},
2231 };
2232 
2233 static struct clk_branch gcc_pcie_2_aux_clk = {
2234 	.halt_reg = 0x9d020,
2235 	.halt_check = BRANCH_HALT_VOTED,
2236 	.clkr = {
2237 		.enable_reg = 0x52014,
2238 		.enable_mask = BIT(14),
2239 		.hw.init = &(struct clk_init_data){
2240 			.name = "gcc_pcie_2_aux_clk",
2241 			.parent_hws = (const struct clk_hw *[]){
2242 				&gcc_pcie_2_aux_clk_src.clkr.hw
2243 			},
2244 			.num_parents = 1,
2245 			.flags = CLK_SET_RATE_PARENT,
2246 			.ops = &clk_branch2_ops,
2247 		},
2248 	},
2249 };
2250 
2251 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2252 	.halt_reg = 0x9d01c,
2253 	.halt_check = BRANCH_HALT_VOTED,
2254 	.hwcg_reg = 0x9d01c,
2255 	.hwcg_bit = 1,
2256 	.clkr = {
2257 		.enable_reg = 0x52014,
2258 		.enable_mask = BIT(13),
2259 		.hw.init = &(struct clk_init_data){
2260 			.name = "gcc_pcie_2_cfg_ahb_clk",
2261 			.ops = &clk_branch2_ops,
2262 		},
2263 	},
2264 };
2265 
2266 static struct clk_branch gcc_pcie_2_clkref_clk = {
2267 	.halt_reg = 0x8c014,
2268 	.halt_check = BRANCH_HALT,
2269 	.clkr = {
2270 		.enable_reg = 0x8c014,
2271 		.enable_mask = BIT(0),
2272 		.hw.init = &(struct clk_init_data){
2273 			.name = "gcc_pcie_2_clkref_clk",
2274 			.ops = &clk_branch2_ops,
2275 		},
2276 	},
2277 };
2278 
2279 static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2280 	.halt_reg = 0x9d018,
2281 	.halt_check = BRANCH_HALT_VOTED,
2282 	.clkr = {
2283 		.enable_reg = 0x52014,
2284 		.enable_mask = BIT(12),
2285 		.hw.init = &(struct clk_init_data){
2286 			.name = "gcc_pcie_2_mstr_axi_clk",
2287 			.ops = &clk_branch2_ops,
2288 		},
2289 	},
2290 };
2291 
2292 static struct clk_branch gcc_pcie_2_pipe_clk = {
2293 	.halt_reg = 0x9d024,
2294 	.halt_check = BRANCH_HALT_SKIP,
2295 	.clkr = {
2296 		.enable_reg = 0x52014,
2297 		.enable_mask = BIT(15),
2298 		.hw.init = &(struct clk_init_data){
2299 			.name = "gcc_pcie_2_pipe_clk",
2300 			.ops = &clk_branch2_ops,
2301 		},
2302 	},
2303 };
2304 
2305 static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2306 	.halt_reg = 0x9d014,
2307 	.halt_check = BRANCH_HALT_VOTED,
2308 	.hwcg_reg = 0x9d014,
2309 	.hwcg_bit = 1,
2310 	.clkr = {
2311 		.enable_reg = 0x52014,
2312 		.enable_mask = BIT(11),
2313 		.hw.init = &(struct clk_init_data){
2314 			.name = "gcc_pcie_2_slv_axi_clk",
2315 			.ops = &clk_branch2_ops,
2316 		},
2317 	},
2318 };
2319 
2320 static struct clk_branch gcc_pcie_2_slv_q2a_axi_clk = {
2321 	.halt_reg = 0x9d010,
2322 	.halt_check = BRANCH_HALT_VOTED,
2323 	.clkr = {
2324 		.enable_reg = 0x52014,
2325 		.enable_mask = BIT(10),
2326 		.hw.init = &(struct clk_init_data){
2327 			.name = "gcc_pcie_2_slv_q2a_axi_clk",
2328 			.ops = &clk_branch2_ops,
2329 		},
2330 	},
2331 };
2332 
2333 static struct clk_branch gcc_pcie_3_aux_clk = {
2334 	.halt_reg = 0xa3020,
2335 	.halt_check = BRANCH_HALT_VOTED,
2336 	.clkr = {
2337 		.enable_reg = 0x52014,
2338 		.enable_mask = BIT(20),
2339 		.hw.init = &(struct clk_init_data){
2340 			.name = "gcc_pcie_3_aux_clk",
2341 			.parent_hws = (const struct clk_hw *[]){
2342 				&gcc_pcie_3_aux_clk_src.clkr.hw
2343 			},
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_pcie_3_cfg_ahb_clk = {
2352 	.halt_reg = 0xa301c,
2353 	.halt_check = BRANCH_HALT_VOTED,
2354 	.hwcg_reg = 0xa301c,
2355 	.hwcg_bit = 1,
2356 	.clkr = {
2357 		.enable_reg = 0x52014,
2358 		.enable_mask = BIT(19),
2359 		.hw.init = &(struct clk_init_data){
2360 			.name = "gcc_pcie_3_cfg_ahb_clk",
2361 			.ops = &clk_branch2_ops,
2362 		},
2363 	},
2364 };
2365 
2366 static struct clk_branch gcc_pcie_3_clkref_clk = {
2367 	.halt_reg = 0x8c018,
2368 	.halt_check = BRANCH_HALT,
2369 	.clkr = {
2370 		.enable_reg = 0x8c018,
2371 		.enable_mask = BIT(0),
2372 		.hw.init = &(struct clk_init_data){
2373 			.name = "gcc_pcie_3_clkref_clk",
2374 			.ops = &clk_branch2_ops,
2375 		},
2376 	},
2377 };
2378 
2379 static struct clk_branch gcc_pcie_3_mstr_axi_clk = {
2380 	.halt_reg = 0xa3018,
2381 	.halt_check = BRANCH_HALT_VOTED,
2382 	.clkr = {
2383 		.enable_reg = 0x52014,
2384 		.enable_mask = BIT(18),
2385 		.hw.init = &(struct clk_init_data){
2386 			.name = "gcc_pcie_3_mstr_axi_clk",
2387 			.ops = &clk_branch2_ops,
2388 		},
2389 	},
2390 };
2391 
2392 static struct clk_branch gcc_pcie_3_pipe_clk = {
2393 	.halt_reg = 0xa3024,
2394 	.halt_check = BRANCH_HALT_SKIP,
2395 	.clkr = {
2396 		.enable_reg = 0x52014,
2397 		.enable_mask = BIT(21),
2398 		.hw.init = &(struct clk_init_data){
2399 			.name = "gcc_pcie_3_pipe_clk",
2400 			.ops = &clk_branch2_ops,
2401 		},
2402 	},
2403 };
2404 
2405 static struct clk_branch gcc_pcie_3_slv_axi_clk = {
2406 	.halt_reg = 0xa3014,
2407 	.halt_check = BRANCH_HALT_VOTED,
2408 	.hwcg_reg = 0xa3014,
2409 	.hwcg_bit = 1,
2410 	.clkr = {
2411 		.enable_reg = 0x52014,
2412 		.enable_mask = BIT(17),
2413 		.hw.init = &(struct clk_init_data){
2414 			.name = "gcc_pcie_3_slv_axi_clk",
2415 			.ops = &clk_branch2_ops,
2416 		},
2417 	},
2418 };
2419 
2420 static struct clk_branch gcc_pcie_3_slv_q2a_axi_clk = {
2421 	.halt_reg = 0xa3010,
2422 	.halt_check = BRANCH_HALT_VOTED,
2423 	.clkr = {
2424 		.enable_reg = 0x52014,
2425 		.enable_mask = BIT(16),
2426 		.hw.init = &(struct clk_init_data){
2427 			.name = "gcc_pcie_3_slv_q2a_axi_clk",
2428 			.ops = &clk_branch2_ops,
2429 		},
2430 	},
2431 };
2432 
2433 static struct clk_branch gcc_pcie_phy_aux_clk = {
2434 	.halt_reg = 0x6f004,
2435 	.halt_check = BRANCH_HALT,
2436 	.clkr = {
2437 		.enable_reg = 0x6f004,
2438 		.enable_mask = BIT(0),
2439 		.hw.init = &(struct clk_init_data){
2440 			.name = "gcc_pcie_phy_aux_clk",
2441 			.parent_hws = (const struct clk_hw *[]){
2442 				      &gcc_pcie_0_aux_clk_src.clkr.hw
2443 			},
2444 			.num_parents = 1,
2445 			.flags = CLK_SET_RATE_PARENT,
2446 			.ops = &clk_branch2_ops,
2447 		},
2448 	},
2449 };
2450 
2451 static struct clk_branch gcc_pdm2_clk = {
2452 	.halt_reg = 0x3300c,
2453 	.halt_check = BRANCH_HALT,
2454 	.clkr = {
2455 		.enable_reg = 0x3300c,
2456 		.enable_mask = BIT(0),
2457 		.hw.init = &(struct clk_init_data){
2458 			.name = "gcc_pdm2_clk",
2459 			.parent_hws = (const struct clk_hw *[]){
2460 				      &gcc_pdm2_clk_src.clkr.hw
2461 			},
2462 			.num_parents = 1,
2463 			.flags = CLK_SET_RATE_PARENT,
2464 			.ops = &clk_branch2_ops,
2465 		},
2466 	},
2467 };
2468 
2469 static struct clk_branch gcc_pdm_ahb_clk = {
2470 	.halt_reg = 0x33004,
2471 	.halt_check = BRANCH_HALT,
2472 	.hwcg_reg = 0x33004,
2473 	.hwcg_bit = 1,
2474 	.clkr = {
2475 		.enable_reg = 0x33004,
2476 		.enable_mask = BIT(0),
2477 		.hw.init = &(struct clk_init_data){
2478 			.name = "gcc_pdm_ahb_clk",
2479 			.ops = &clk_branch2_ops,
2480 		},
2481 	},
2482 };
2483 
2484 static struct clk_branch gcc_pdm_xo4_clk = {
2485 	.halt_reg = 0x33008,
2486 	.halt_check = BRANCH_HALT,
2487 	.clkr = {
2488 		.enable_reg = 0x33008,
2489 		.enable_mask = BIT(0),
2490 		.hw.init = &(struct clk_init_data){
2491 			.name = "gcc_pdm_xo4_clk",
2492 			.ops = &clk_branch2_ops,
2493 		},
2494 	},
2495 };
2496 
2497 static struct clk_branch gcc_prng_ahb_clk = {
2498 	.halt_reg = 0x34004,
2499 	.halt_check = BRANCH_HALT_VOTED,
2500 	.clkr = {
2501 		.enable_reg = 0x52004,
2502 		.enable_mask = BIT(13),
2503 		.hw.init = &(struct clk_init_data){
2504 			.name = "gcc_prng_ahb_clk",
2505 			.ops = &clk_branch2_ops,
2506 		},
2507 	},
2508 };
2509 
2510 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2511 	.halt_reg = 0xb018,
2512 	.halt_check = BRANCH_HALT,
2513 	.hwcg_reg = 0xb018,
2514 	.hwcg_bit = 1,
2515 	.clkr = {
2516 		.enable_reg = 0xb018,
2517 		.enable_mask = BIT(0),
2518 		.hw.init = &(struct clk_init_data){
2519 			.name = "gcc_qmip_camera_nrt_ahb_clk",
2520 			.ops = &clk_branch2_ops,
2521 		},
2522 	},
2523 };
2524 
2525 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2526 	.halt_reg = 0xb01c,
2527 	.halt_check = BRANCH_HALT,
2528 	.hwcg_reg = 0xb01c,
2529 	.hwcg_bit = 1,
2530 	.clkr = {
2531 		.enable_reg = 0xb01c,
2532 		.enable_mask = BIT(0),
2533 		.hw.init = &(struct clk_init_data){
2534 			.name = "gcc_qmip_camera_rt_ahb_clk",
2535 			.ops = &clk_branch2_ops,
2536 		},
2537 	},
2538 };
2539 
2540 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2541 	.halt_reg = 0xb020,
2542 	.halt_check = BRANCH_HALT,
2543 	.hwcg_reg = 0xb020,
2544 	.hwcg_bit = 1,
2545 	.clkr = {
2546 		.enable_reg = 0xb020,
2547 		.enable_mask = BIT(0),
2548 		.hw.init = &(struct clk_init_data){
2549 			.name = "gcc_qmip_disp_ahb_clk",
2550 			.ops = &clk_branch2_ops,
2551 		},
2552 	},
2553 };
2554 
2555 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2556 	.halt_reg = 0xb010,
2557 	.halt_check = BRANCH_HALT,
2558 	.hwcg_reg = 0xb010,
2559 	.hwcg_bit = 1,
2560 	.clkr = {
2561 		.enable_reg = 0xb010,
2562 		.enable_mask = BIT(0),
2563 		.hw.init = &(struct clk_init_data){
2564 			.name = "gcc_qmip_video_cvp_ahb_clk",
2565 			.ops = &clk_branch2_ops,
2566 		},
2567 	},
2568 };
2569 
2570 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2571 	.halt_reg = 0xb014,
2572 	.halt_check = BRANCH_HALT,
2573 	.hwcg_reg = 0xb014,
2574 	.hwcg_bit = 1,
2575 	.clkr = {
2576 		.enable_reg = 0xb014,
2577 		.enable_mask = BIT(0),
2578 		.hw.init = &(struct clk_init_data){
2579 			.name = "gcc_qmip_video_vcodec_ahb_clk",
2580 			.ops = &clk_branch2_ops,
2581 		},
2582 	},
2583 };
2584 
2585 static struct clk_branch gcc_qspi_1_cnoc_periph_ahb_clk = {
2586 	.halt_reg = 0x4a004,
2587 	.halt_check = BRANCH_HALT,
2588 	.clkr = {
2589 		.enable_reg = 0x4a004,
2590 		.enable_mask = BIT(0),
2591 		.hw.init = &(struct clk_init_data){
2592 			.name = "gcc_qspi_1_cnoc_periph_ahb_clk",
2593 			.ops = &clk_branch2_ops,
2594 		},
2595 	},
2596 };
2597 
2598 static struct clk_branch gcc_qspi_1_core_clk = {
2599 	.halt_reg = 0x4a008,
2600 	.halt_check = BRANCH_HALT,
2601 	.clkr = {
2602 		.enable_reg = 0x4a008,
2603 		.enable_mask = BIT(0),
2604 		.hw.init = &(struct clk_init_data){
2605 			.name = "gcc_qspi_1_core_clk",
2606 			.parent_hws = (const struct clk_hw *[]){
2607 				      &gcc_qspi_1_core_clk_src.clkr.hw
2608 			},
2609 			.num_parents = 1,
2610 			.flags = CLK_SET_RATE_PARENT,
2611 			.ops = &clk_branch2_ops,
2612 		},
2613 	},
2614 };
2615 
2616 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2617 	.halt_reg = 0x4b000,
2618 	.halt_check = BRANCH_HALT,
2619 	.clkr = {
2620 		.enable_reg = 0x4b000,
2621 		.enable_mask = BIT(0),
2622 		.hw.init = &(struct clk_init_data){
2623 			.name = "gcc_qspi_cnoc_periph_ahb_clk",
2624 			.ops = &clk_branch2_ops,
2625 		},
2626 	},
2627 };
2628 
2629 static struct clk_branch gcc_qspi_core_clk = {
2630 	.halt_reg = 0x4b004,
2631 	.halt_check = BRANCH_HALT,
2632 	.clkr = {
2633 		.enable_reg = 0x4b004,
2634 		.enable_mask = BIT(0),
2635 		.hw.init = &(struct clk_init_data){
2636 			.name = "gcc_qspi_core_clk",
2637 			.parent_hws = (const struct clk_hw *[]){
2638 				      &gcc_qspi_core_clk_src.clkr.hw
2639 			},
2640 			.num_parents = 1,
2641 			.flags = CLK_SET_RATE_PARENT,
2642 			.ops = &clk_branch2_ops,
2643 		},
2644 	},
2645 };
2646 
2647 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2648 	.halt_reg = 0x17144,
2649 	.halt_check = BRANCH_HALT_VOTED,
2650 	.clkr = {
2651 		.enable_reg = 0x5200c,
2652 		.enable_mask = BIT(10),
2653 		.hw.init = &(struct clk_init_data){
2654 			.name = "gcc_qupv3_wrap0_s0_clk",
2655 			.parent_hws = (const struct clk_hw *[]){
2656 				      &gcc_qupv3_wrap0_s0_clk_src.clkr.hw
2657 			},
2658 			.num_parents = 1,
2659 			.flags = CLK_SET_RATE_PARENT,
2660 			.ops = &clk_branch2_ops,
2661 		},
2662 	},
2663 };
2664 
2665 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2666 	.halt_reg = 0x17274,
2667 	.halt_check = BRANCH_HALT_VOTED,
2668 	.clkr = {
2669 		.enable_reg = 0x5200c,
2670 		.enable_mask = BIT(11),
2671 		.hw.init = &(struct clk_init_data){
2672 			.name = "gcc_qupv3_wrap0_s1_clk",
2673 			.parent_hws = (const struct clk_hw *[]){
2674 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw
2675 			},
2676 			.num_parents = 1,
2677 			.flags = CLK_SET_RATE_PARENT,
2678 			.ops = &clk_branch2_ops,
2679 		},
2680 	},
2681 };
2682 
2683 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2684 	.halt_reg = 0x173a4,
2685 	.halt_check = BRANCH_HALT_VOTED,
2686 	.clkr = {
2687 		.enable_reg = 0x5200c,
2688 		.enable_mask = BIT(12),
2689 		.hw.init = &(struct clk_init_data){
2690 			.name = "gcc_qupv3_wrap0_s2_clk",
2691 			.parent_hws = (const struct clk_hw *[]){
2692 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw
2693 			},
2694 			.num_parents = 1,
2695 			.flags = CLK_SET_RATE_PARENT,
2696 			.ops = &clk_branch2_ops,
2697 		},
2698 	},
2699 };
2700 
2701 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2702 	.halt_reg = 0x174d4,
2703 	.halt_check = BRANCH_HALT_VOTED,
2704 	.clkr = {
2705 		.enable_reg = 0x5200c,
2706 		.enable_mask = BIT(13),
2707 		.hw.init = &(struct clk_init_data){
2708 			.name = "gcc_qupv3_wrap0_s3_clk",
2709 			.parent_hws = (const struct clk_hw *[]){
2710 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw
2711 			},
2712 			.num_parents = 1,
2713 			.flags = CLK_SET_RATE_PARENT,
2714 			.ops = &clk_branch2_ops,
2715 		},
2716 	},
2717 };
2718 
2719 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2720 	.halt_reg = 0x17604,
2721 	.halt_check = BRANCH_HALT_VOTED,
2722 	.clkr = {
2723 		.enable_reg = 0x5200c,
2724 		.enable_mask = BIT(14),
2725 		.hw.init = &(struct clk_init_data){
2726 			.name = "gcc_qupv3_wrap0_s4_clk",
2727 			.parent_hws = (const struct clk_hw *[]){
2728 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw
2729 			},
2730 			.num_parents = 1,
2731 			.flags = CLK_SET_RATE_PARENT,
2732 			.ops = &clk_branch2_ops,
2733 		},
2734 	},
2735 };
2736 
2737 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2738 	.halt_reg = 0x17734,
2739 	.halt_check = BRANCH_HALT_VOTED,
2740 	.clkr = {
2741 		.enable_reg = 0x5200c,
2742 		.enable_mask = BIT(15),
2743 		.hw.init = &(struct clk_init_data){
2744 			.name = "gcc_qupv3_wrap0_s5_clk",
2745 			.parent_hws = (const struct clk_hw *[]){
2746 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw
2747 			},
2748 			.num_parents = 1,
2749 			.flags = CLK_SET_RATE_PARENT,
2750 			.ops = &clk_branch2_ops,
2751 		},
2752 	},
2753 };
2754 
2755 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2756 	.halt_reg = 0x17864,
2757 	.halt_check = BRANCH_HALT_VOTED,
2758 	.clkr = {
2759 		.enable_reg = 0x5200c,
2760 		.enable_mask = BIT(16),
2761 		.hw.init = &(struct clk_init_data){
2762 			.name = "gcc_qupv3_wrap0_s6_clk",
2763 			.parent_hws = (const struct clk_hw *[]){
2764 				&gcc_qupv3_wrap0_s6_clk_src.clkr.hw
2765 			},
2766 			.num_parents = 1,
2767 			.flags = CLK_SET_RATE_PARENT,
2768 			.ops = &clk_branch2_ops,
2769 		},
2770 	},
2771 };
2772 
2773 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2774 	.halt_reg = 0x17994,
2775 	.halt_check = BRANCH_HALT_VOTED,
2776 	.clkr = {
2777 		.enable_reg = 0x5200c,
2778 		.enable_mask = BIT(17),
2779 		.hw.init = &(struct clk_init_data){
2780 			.name = "gcc_qupv3_wrap0_s7_clk",
2781 			.parent_hws = (const struct clk_hw *[]){
2782 				&gcc_qupv3_wrap0_s7_clk_src.clkr.hw
2783 			},
2784 			.num_parents = 1,
2785 			.flags = CLK_SET_RATE_PARENT,
2786 			.ops = &clk_branch2_ops,
2787 		},
2788 	},
2789 };
2790 
2791 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2792 	.halt_reg = 0x18144,
2793 	.halt_check = BRANCH_HALT_VOTED,
2794 	.clkr = {
2795 		.enable_reg = 0x5200c,
2796 		.enable_mask = BIT(22),
2797 		.hw.init = &(struct clk_init_data){
2798 			.name = "gcc_qupv3_wrap1_s0_clk",
2799 			.parent_hws = (const struct clk_hw *[]){
2800 				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw
2801 			},
2802 			.num_parents = 1,
2803 			.flags = CLK_SET_RATE_PARENT,
2804 			.ops = &clk_branch2_ops,
2805 		},
2806 	},
2807 };
2808 
2809 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2810 	.halt_reg = 0x18274,
2811 	.halt_check = BRANCH_HALT_VOTED,
2812 	.clkr = {
2813 		.enable_reg = 0x5200c,
2814 		.enable_mask = BIT(23),
2815 		.hw.init = &(struct clk_init_data){
2816 			.name = "gcc_qupv3_wrap1_s1_clk",
2817 			.parent_hws = (const struct clk_hw *[]){
2818 				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw
2819 			},
2820 			.num_parents = 1,
2821 			.flags = CLK_SET_RATE_PARENT,
2822 			.ops = &clk_branch2_ops,
2823 		},
2824 	},
2825 };
2826 
2827 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2828 	.halt_reg = 0x183a4,
2829 	.halt_check = BRANCH_HALT_VOTED,
2830 	.clkr = {
2831 		.enable_reg = 0x5200c,
2832 		.enable_mask = BIT(24),
2833 		.hw.init = &(struct clk_init_data){
2834 			.name = "gcc_qupv3_wrap1_s2_clk",
2835 			.parent_hws = (const struct clk_hw *[]){
2836 				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw
2837 			},
2838 			.num_parents = 1,
2839 			.flags = CLK_SET_RATE_PARENT,
2840 			.ops = &clk_branch2_ops,
2841 		},
2842 	},
2843 };
2844 
2845 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2846 	.halt_reg = 0x184d4,
2847 	.halt_check = BRANCH_HALT_VOTED,
2848 	.clkr = {
2849 		.enable_reg = 0x5200c,
2850 		.enable_mask = BIT(25),
2851 		.hw.init = &(struct clk_init_data){
2852 			.name = "gcc_qupv3_wrap1_s3_clk",
2853 			.parent_hws = (const struct clk_hw *[]){
2854 				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw
2855 			},
2856 			.num_parents = 1,
2857 			.flags = CLK_SET_RATE_PARENT,
2858 			.ops = &clk_branch2_ops,
2859 		},
2860 	},
2861 };
2862 
2863 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2864 	.halt_reg = 0x18604,
2865 	.halt_check = BRANCH_HALT_VOTED,
2866 	.clkr = {
2867 		.enable_reg = 0x5200c,
2868 		.enable_mask = BIT(26),
2869 		.hw.init = &(struct clk_init_data){
2870 			.name = "gcc_qupv3_wrap1_s4_clk",
2871 			.parent_hws = (const struct clk_hw *[]){
2872 				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw
2873 			},
2874 			.num_parents = 1,
2875 			.flags = CLK_SET_RATE_PARENT,
2876 			.ops = &clk_branch2_ops,
2877 		},
2878 	},
2879 };
2880 
2881 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2882 	.halt_reg = 0x18734,
2883 	.halt_check = BRANCH_HALT_VOTED,
2884 	.clkr = {
2885 		.enable_reg = 0x5200c,
2886 		.enable_mask = BIT(27),
2887 		.hw.init = &(struct clk_init_data){
2888 			.name = "gcc_qupv3_wrap1_s5_clk",
2889 			.parent_hws = (const struct clk_hw *[]){
2890 				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw
2891 			},
2892 			.num_parents = 1,
2893 			.flags = CLK_SET_RATE_PARENT,
2894 			.ops = &clk_branch2_ops,
2895 		},
2896 	},
2897 };
2898 
2899 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2900 	.halt_reg = 0x1e144,
2901 	.halt_check = BRANCH_HALT_VOTED,
2902 	.clkr = {
2903 		.enable_reg = 0x52014,
2904 		.enable_mask = BIT(4),
2905 		.hw.init = &(struct clk_init_data){
2906 			.name = "gcc_qupv3_wrap2_s0_clk",
2907 			.parent_hws = (const struct clk_hw *[]){
2908 				&gcc_qupv3_wrap2_s0_clk_src.clkr.hw
2909 			},
2910 			.num_parents = 1,
2911 			.flags = CLK_SET_RATE_PARENT,
2912 			.ops = &clk_branch2_ops,
2913 		},
2914 	},
2915 };
2916 
2917 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2918 	.halt_reg = 0x1e274,
2919 	.halt_check = BRANCH_HALT_VOTED,
2920 	.clkr = {
2921 		.enable_reg = 0x52014,
2922 		.enable_mask = BIT(5),
2923 		.hw.init = &(struct clk_init_data){
2924 			.name = "gcc_qupv3_wrap2_s1_clk",
2925 			.parent_hws = (const struct clk_hw *[]){
2926 				&gcc_qupv3_wrap2_s1_clk_src.clkr.hw
2927 			},
2928 			.num_parents = 1,
2929 			.flags = CLK_SET_RATE_PARENT,
2930 			.ops = &clk_branch2_ops,
2931 		},
2932 	},
2933 };
2934 
2935 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2936 	.halt_reg = 0x1e3a4,
2937 	.halt_check = BRANCH_HALT_VOTED,
2938 	.clkr = {
2939 		.enable_reg = 0x52014,
2940 		.enable_mask = BIT(6),
2941 		.hw.init = &(struct clk_init_data){
2942 			.name = "gcc_qupv3_wrap2_s2_clk",
2943 			.parent_hws = (const struct clk_hw *[]){
2944 				&gcc_qupv3_wrap2_s2_clk_src.clkr.hw
2945 			},
2946 			.num_parents = 1,
2947 			.flags = CLK_SET_RATE_PARENT,
2948 			.ops = &clk_branch2_ops,
2949 		},
2950 	},
2951 };
2952 
2953 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2954 	.halt_reg = 0x1e4d4,
2955 	.halt_check = BRANCH_HALT_VOTED,
2956 	.clkr = {
2957 		.enable_reg = 0x52014,
2958 		.enable_mask = BIT(7),
2959 		.hw.init = &(struct clk_init_data){
2960 			.name = "gcc_qupv3_wrap2_s3_clk",
2961 			.parent_hws = (const struct clk_hw *[]){
2962 				&gcc_qupv3_wrap2_s3_clk_src.clkr.hw
2963 			},
2964 			.num_parents = 1,
2965 			.flags = CLK_SET_RATE_PARENT,
2966 			.ops = &clk_branch2_ops,
2967 		},
2968 	},
2969 };
2970 
2971 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2972 	.halt_reg = 0x1e604,
2973 	.halt_check = BRANCH_HALT_VOTED,
2974 	.clkr = {
2975 		.enable_reg = 0x52014,
2976 		.enable_mask = BIT(8),
2977 		.hw.init = &(struct clk_init_data){
2978 			.name = "gcc_qupv3_wrap2_s4_clk",
2979 			.parent_hws = (const struct clk_hw *[]){
2980 				&gcc_qupv3_wrap2_s4_clk_src.clkr.hw
2981 			},
2982 			.num_parents = 1,
2983 			.flags = CLK_SET_RATE_PARENT,
2984 			.ops = &clk_branch2_ops,
2985 		},
2986 	},
2987 };
2988 
2989 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2990 	.halt_reg = 0x1e734,
2991 	.halt_check = BRANCH_HALT_VOTED,
2992 	.clkr = {
2993 		.enable_reg = 0x52014,
2994 		.enable_mask = BIT(9),
2995 		.hw.init = &(struct clk_init_data){
2996 			.name = "gcc_qupv3_wrap2_s5_clk",
2997 			.parent_hws = (const struct clk_hw *[]){
2998 				&gcc_qupv3_wrap2_s5_clk_src.clkr.hw
2999 			},
3000 			.num_parents = 1,
3001 			.flags = CLK_SET_RATE_PARENT,
3002 			.ops = &clk_branch2_ops,
3003 		},
3004 	},
3005 };
3006 
3007 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3008 	.halt_reg = 0x17004,
3009 	.halt_check = BRANCH_HALT_VOTED,
3010 	.clkr = {
3011 		.enable_reg = 0x5200c,
3012 		.enable_mask = BIT(6),
3013 		.hw.init = &(struct clk_init_data){
3014 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
3015 			.ops = &clk_branch2_ops,
3016 		},
3017 	},
3018 };
3019 
3020 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3021 	.halt_reg = 0x17008,
3022 	.halt_check = BRANCH_HALT_VOTED,
3023 	.hwcg_reg = 0x17008,
3024 	.hwcg_bit = 1,
3025 	.clkr = {
3026 		.enable_reg = 0x5200c,
3027 		.enable_mask = BIT(7),
3028 		.hw.init = &(struct clk_init_data){
3029 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
3030 			.ops = &clk_branch2_ops,
3031 		},
3032 	},
3033 };
3034 
3035 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3036 	.halt_reg = 0x18004,
3037 	.halt_check = BRANCH_HALT_VOTED,
3038 	.clkr = {
3039 		.enable_reg = 0x5200c,
3040 		.enable_mask = BIT(20),
3041 		.hw.init = &(struct clk_init_data){
3042 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
3043 			.ops = &clk_branch2_ops,
3044 		},
3045 	},
3046 };
3047 
3048 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3049 	.halt_reg = 0x18008,
3050 	.halt_check = BRANCH_HALT_VOTED,
3051 	.hwcg_reg = 0x18008,
3052 	.hwcg_bit = 1,
3053 	.clkr = {
3054 		.enable_reg = 0x5200c,
3055 		.enable_mask = BIT(21),
3056 		.hw.init = &(struct clk_init_data){
3057 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
3058 			.ops = &clk_branch2_ops,
3059 		},
3060 	},
3061 };
3062 
3063 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
3064 	.halt_reg = 0x1e004,
3065 	.halt_check = BRANCH_HALT_VOTED,
3066 	.clkr = {
3067 		.enable_reg = 0x52014,
3068 		.enable_mask = BIT(2),
3069 		.hw.init = &(struct clk_init_data){
3070 			.name = "gcc_qupv3_wrap_2_m_ahb_clk",
3071 			.ops = &clk_branch2_ops,
3072 		},
3073 	},
3074 };
3075 
3076 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
3077 	.halt_reg = 0x1e008,
3078 	.halt_check = BRANCH_HALT_VOTED,
3079 	.hwcg_reg = 0x1e008,
3080 	.hwcg_bit = 1,
3081 	.clkr = {
3082 		.enable_reg = 0x52014,
3083 		.enable_mask = BIT(1),
3084 		.hw.init = &(struct clk_init_data){
3085 			.name = "gcc_qupv3_wrap_2_s_ahb_clk",
3086 			.ops = &clk_branch2_ops,
3087 		},
3088 	},
3089 };
3090 
3091 static struct clk_branch gcc_sdcc2_ahb_clk = {
3092 	.halt_reg = 0x14008,
3093 	.halt_check = BRANCH_HALT,
3094 	.clkr = {
3095 		.enable_reg = 0x14008,
3096 		.enable_mask = BIT(0),
3097 		.hw.init = &(struct clk_init_data){
3098 			.name = "gcc_sdcc2_ahb_clk",
3099 			.ops = &clk_branch2_ops,
3100 		},
3101 	},
3102 };
3103 
3104 static struct clk_branch gcc_sdcc2_apps_clk = {
3105 	.halt_reg = 0x14004,
3106 	.halt_check = BRANCH_HALT,
3107 	.clkr = {
3108 		.enable_reg = 0x14004,
3109 		.enable_mask = BIT(0),
3110 		.hw.init = &(struct clk_init_data){
3111 			.name = "gcc_sdcc2_apps_clk",
3112 			.parent_hws = (const struct clk_hw *[]){
3113 				&gcc_sdcc2_apps_clk_src.clkr.hw
3114 			},
3115 			.num_parents = 1,
3116 			.flags = CLK_SET_RATE_PARENT,
3117 			.ops = &clk_branch2_ops,
3118 		},
3119 	},
3120 };
3121 
3122 static struct clk_branch gcc_sdcc4_ahb_clk = {
3123 	.halt_reg = 0x16008,
3124 	.halt_check = BRANCH_HALT,
3125 	.clkr = {
3126 		.enable_reg = 0x16008,
3127 		.enable_mask = BIT(0),
3128 		.hw.init = &(struct clk_init_data){
3129 			.name = "gcc_sdcc4_ahb_clk",
3130 			.ops = &clk_branch2_ops,
3131 		},
3132 	},
3133 };
3134 
3135 static struct clk_branch gcc_sdcc4_apps_clk = {
3136 	.halt_reg = 0x16004,
3137 	.halt_check = BRANCH_HALT,
3138 	.clkr = {
3139 		.enable_reg = 0x16004,
3140 		.enable_mask = BIT(0),
3141 		.hw.init = &(struct clk_init_data){
3142 			.name = "gcc_sdcc4_apps_clk",
3143 			.parent_hws = (const struct clk_hw *[]){
3144 				&gcc_sdcc4_apps_clk_src.clkr.hw
3145 			},
3146 			.num_parents = 1,
3147 			.flags = CLK_SET_RATE_PARENT,
3148 			.ops = &clk_branch2_ops,
3149 		},
3150 	},
3151 };
3152 
3153 /* For CPUSS functionality the SYS NOC clock needs to be left enabled */
3154 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
3155 	.halt_reg = 0x4819c,
3156 	.halt_check = BRANCH_HALT_VOTED,
3157 	.clkr = {
3158 		.enable_reg = 0x52004,
3159 		.enable_mask = BIT(0),
3160 		.hw.init = &(struct clk_init_data){
3161 			.name = "gcc_sys_noc_cpuss_ahb_clk",
3162 			.parent_hws = (const struct clk_hw *[]){
3163 				      &gcc_cpuss_ahb_clk_src.clkr.hw
3164 			},
3165 			.num_parents = 1,
3166 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
3167 			.ops = &clk_branch2_ops,
3168 		},
3169 	},
3170 };
3171 
3172 static struct clk_branch gcc_tsif_ahb_clk = {
3173 	.halt_reg = 0x36004,
3174 	.halt_check = BRANCH_HALT,
3175 	.clkr = {
3176 		.enable_reg = 0x36004,
3177 		.enable_mask = BIT(0),
3178 		.hw.init = &(struct clk_init_data){
3179 			.name = "gcc_tsif_ahb_clk",
3180 			.ops = &clk_branch2_ops,
3181 		},
3182 	},
3183 };
3184 
3185 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
3186 	.halt_reg = 0x3600c,
3187 	.halt_check = BRANCH_HALT,
3188 	.clkr = {
3189 		.enable_reg = 0x3600c,
3190 		.enable_mask = BIT(0),
3191 		.hw.init = &(struct clk_init_data){
3192 			.name = "gcc_tsif_inactivity_timers_clk",
3193 			.ops = &clk_branch2_ops,
3194 		},
3195 	},
3196 };
3197 
3198 static struct clk_branch gcc_tsif_ref_clk = {
3199 	.halt_reg = 0x36008,
3200 	.halt_check = BRANCH_HALT,
3201 	.clkr = {
3202 		.enable_reg = 0x36008,
3203 		.enable_mask = BIT(0),
3204 		.hw.init = &(struct clk_init_data){
3205 			.name = "gcc_tsif_ref_clk",
3206 			.parent_hws = (const struct clk_hw *[]){
3207 				&gcc_tsif_ref_clk_src.clkr.hw
3208 			},
3209 			.num_parents = 1,
3210 			.flags = CLK_SET_RATE_PARENT,
3211 			.ops = &clk_branch2_ops,
3212 		},
3213 	},
3214 };
3215 
3216 static struct clk_branch gcc_ufs_card_2_ahb_clk = {
3217 	.halt_reg = 0xa2014,
3218 	.halt_check = BRANCH_HALT,
3219 	.hwcg_reg = 0xa2014,
3220 	.hwcg_bit = 1,
3221 	.clkr = {
3222 		.enable_reg = 0xa2014,
3223 		.enable_mask = BIT(0),
3224 		.hw.init = &(struct clk_init_data){
3225 			.name = "gcc_ufs_card_2_ahb_clk",
3226 			.ops = &clk_branch2_ops,
3227 		},
3228 	},
3229 };
3230 
3231 static struct clk_branch gcc_ufs_card_2_axi_clk = {
3232 	.halt_reg = 0xa2010,
3233 	.halt_check = BRANCH_HALT,
3234 	.hwcg_reg = 0xa2010,
3235 	.hwcg_bit = 1,
3236 	.clkr = {
3237 		.enable_reg = 0xa2010,
3238 		.enable_mask = BIT(0),
3239 		.hw.init = &(struct clk_init_data){
3240 			.name = "gcc_ufs_card_2_axi_clk",
3241 			.parent_hws = (const struct clk_hw *[]){
3242 				&gcc_ufs_card_2_axi_clk_src.clkr.hw
3243 			},
3244 			.num_parents = 1,
3245 			.flags = CLK_SET_RATE_PARENT,
3246 			.ops = &clk_branch2_ops,
3247 		},
3248 	},
3249 };
3250 
3251 static struct clk_branch gcc_ufs_card_2_ice_core_clk = {
3252 	.halt_reg = 0xa205c,
3253 	.halt_check = BRANCH_HALT,
3254 	.hwcg_reg = 0xa205c,
3255 	.hwcg_bit = 1,
3256 	.clkr = {
3257 		.enable_reg = 0xa205c,
3258 		.enable_mask = BIT(0),
3259 		.hw.init = &(struct clk_init_data){
3260 			.name = "gcc_ufs_card_2_ice_core_clk",
3261 			.parent_hws = (const struct clk_hw *[]){
3262 				&gcc_ufs_card_2_ice_core_clk_src.clkr.hw
3263 			},
3264 			.num_parents = 1,
3265 			.flags = CLK_SET_RATE_PARENT,
3266 			.ops = &clk_branch2_ops,
3267 		},
3268 	},
3269 };
3270 
3271 static struct clk_branch gcc_ufs_card_2_phy_aux_clk = {
3272 	.halt_reg = 0xa2090,
3273 	.halt_check = BRANCH_HALT,
3274 	.hwcg_reg = 0xa2090,
3275 	.hwcg_bit = 1,
3276 	.clkr = {
3277 		.enable_reg = 0xa2090,
3278 		.enable_mask = BIT(0),
3279 		.hw.init = &(struct clk_init_data){
3280 			.name = "gcc_ufs_card_2_phy_aux_clk",
3281 			.parent_hws = (const struct clk_hw *[]){
3282 				&gcc_ufs_card_2_phy_aux_clk_src.clkr.hw
3283 			},
3284 			.num_parents = 1,
3285 			.flags = CLK_SET_RATE_PARENT,
3286 			.ops = &clk_branch2_ops,
3287 		},
3288 	},
3289 };
3290 
3291 static struct clk_branch gcc_ufs_card_2_rx_symbol_0_clk = {
3292 	.halt_reg = 0xa201c,
3293 	.halt_check = BRANCH_HALT,
3294 	.clkr = {
3295 		.enable_reg = 0xa201c,
3296 		.enable_mask = BIT(0),
3297 		.hw.init = &(struct clk_init_data){
3298 			.name = "gcc_ufs_card_2_rx_symbol_0_clk",
3299 			.ops = &clk_branch2_ops,
3300 		},
3301 	},
3302 };
3303 
3304 static struct clk_branch gcc_ufs_card_2_rx_symbol_1_clk = {
3305 	.halt_reg = 0xa20ac,
3306 	.halt_check = BRANCH_HALT,
3307 	.clkr = {
3308 		.enable_reg = 0xa20ac,
3309 		.enable_mask = BIT(0),
3310 		.hw.init = &(struct clk_init_data){
3311 			.name = "gcc_ufs_card_2_rx_symbol_1_clk",
3312 			.ops = &clk_branch2_ops,
3313 		},
3314 	},
3315 };
3316 
3317 static struct clk_branch gcc_ufs_card_2_tx_symbol_0_clk = {
3318 	.halt_reg = 0xa2018,
3319 	.halt_check = BRANCH_HALT,
3320 	.clkr = {
3321 		.enable_reg = 0xa2018,
3322 		.enable_mask = BIT(0),
3323 		.hw.init = &(struct clk_init_data){
3324 			.name = "gcc_ufs_card_2_tx_symbol_0_clk",
3325 			.ops = &clk_branch2_ops,
3326 		},
3327 	},
3328 };
3329 
3330 static struct clk_branch gcc_ufs_card_2_unipro_core_clk = {
3331 	.halt_reg = 0xa2058,
3332 	.halt_check = BRANCH_HALT,
3333 	.hwcg_reg = 0xa2058,
3334 	.hwcg_bit = 1,
3335 	.clkr = {
3336 		.enable_reg = 0xa2058,
3337 		.enable_mask = BIT(0),
3338 		.hw.init = &(struct clk_init_data){
3339 			.name = "gcc_ufs_card_2_unipro_core_clk",
3340 			.parent_hws = (const struct clk_hw *[]){
3341 				&gcc_ufs_card_2_unipro_core_clk_src.clkr.hw
3342 			},
3343 			.num_parents = 1,
3344 			.flags = CLK_SET_RATE_PARENT,
3345 			.ops = &clk_branch2_ops,
3346 		},
3347 	},
3348 };
3349 
3350 static struct clk_branch gcc_ufs_card_ahb_clk = {
3351 	.halt_reg = 0x75014,
3352 	.halt_check = BRANCH_HALT,
3353 	.hwcg_reg = 0x75014,
3354 	.hwcg_bit = 1,
3355 	.clkr = {
3356 		.enable_reg = 0x75014,
3357 		.enable_mask = BIT(0),
3358 		.hw.init = &(struct clk_init_data){
3359 			.name = "gcc_ufs_card_ahb_clk",
3360 			.ops = &clk_branch2_ops,
3361 		},
3362 	},
3363 };
3364 
3365 static struct clk_branch gcc_ufs_card_axi_clk = {
3366 	.halt_reg = 0x75010,
3367 	.halt_check = BRANCH_HALT,
3368 	.hwcg_reg = 0x75010,
3369 	.hwcg_bit = 1,
3370 	.clkr = {
3371 		.enable_reg = 0x75010,
3372 		.enable_mask = BIT(0),
3373 		.hw.init = &(struct clk_init_data){
3374 			.name = "gcc_ufs_card_axi_clk",
3375 			.parent_hws = (const struct clk_hw *[]){
3376 				      &gcc_ufs_card_axi_clk_src.clkr.hw
3377 			},
3378 			.num_parents = 1,
3379 			.flags = CLK_SET_RATE_PARENT,
3380 			.ops = &clk_branch2_ops,
3381 		},
3382 	},
3383 };
3384 
3385 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
3386 	.halt_reg = 0x75010,
3387 	.halt_check = BRANCH_HALT,
3388 	.hwcg_reg = 0x75010,
3389 	.hwcg_bit = 1,
3390 	.clkr = {
3391 		.enable_reg = 0x75010,
3392 		.enable_mask = BIT(1),
3393 		.hw.init = &(struct clk_init_data){
3394 			.name = "gcc_ufs_card_axi_hw_ctl_clk",
3395 			.parent_hws = (const struct clk_hw *[]){
3396 				      &gcc_ufs_card_axi_clk.clkr.hw
3397 			},
3398 			.num_parents = 1,
3399 			.flags = CLK_SET_RATE_PARENT,
3400 			.ops = &clk_branch_simple_ops,
3401 		},
3402 	},
3403 };
3404 
3405 static struct clk_branch gcc_ufs_card_ice_core_clk = {
3406 	.halt_reg = 0x7505c,
3407 	.halt_check = BRANCH_HALT,
3408 	.hwcg_reg = 0x7505c,
3409 	.hwcg_bit = 1,
3410 	.clkr = {
3411 		.enable_reg = 0x7505c,
3412 		.enable_mask = BIT(0),
3413 		.hw.init = &(struct clk_init_data){
3414 			.name = "gcc_ufs_card_ice_core_clk",
3415 			.parent_hws = (const struct clk_hw *[]){
3416 				      &gcc_ufs_card_ice_core_clk_src.clkr.hw
3417 			},
3418 			.num_parents = 1,
3419 			.flags = CLK_SET_RATE_PARENT,
3420 			.ops = &clk_branch2_ops,
3421 		},
3422 	},
3423 };
3424 
3425 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
3426 	.halt_reg = 0x7505c,
3427 	.halt_check = BRANCH_HALT,
3428 	.hwcg_reg = 0x7505c,
3429 	.hwcg_bit = 1,
3430 	.clkr = {
3431 		.enable_reg = 0x7505c,
3432 		.enable_mask = BIT(1),
3433 		.hw.init = &(struct clk_init_data){
3434 			.name = "gcc_ufs_card_ice_core_hw_ctl_clk",
3435 			.parent_hws = (const struct clk_hw *[]){
3436 				      &gcc_ufs_card_ice_core_clk.clkr.hw
3437 			},
3438 			.num_parents = 1,
3439 			.flags = CLK_SET_RATE_PARENT,
3440 			.ops = &clk_branch_simple_ops,
3441 		},
3442 	},
3443 };
3444 
3445 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
3446 	.halt_reg = 0x75090,
3447 	.halt_check = BRANCH_HALT,
3448 	.hwcg_reg = 0x75090,
3449 	.hwcg_bit = 1,
3450 	.clkr = {
3451 		.enable_reg = 0x75090,
3452 		.enable_mask = BIT(0),
3453 		.hw.init = &(struct clk_init_data){
3454 			.name = "gcc_ufs_card_phy_aux_clk",
3455 			.parent_hws = (const struct clk_hw *[]){
3456 				      &gcc_ufs_card_phy_aux_clk_src.clkr.hw
3457 			},
3458 			.num_parents = 1,
3459 			.flags = CLK_SET_RATE_PARENT,
3460 			.ops = &clk_branch2_ops,
3461 		},
3462 	},
3463 };
3464 
3465 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
3466 	.halt_reg = 0x75090,
3467 	.halt_check = BRANCH_HALT,
3468 	.hwcg_reg = 0x75090,
3469 	.hwcg_bit = 1,
3470 	.clkr = {
3471 		.enable_reg = 0x75090,
3472 		.enable_mask = BIT(1),
3473 		.hw.init = &(struct clk_init_data){
3474 			.name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
3475 			.parent_hws = (const struct clk_hw *[]){
3476 				      &gcc_ufs_card_phy_aux_clk.clkr.hw
3477 			},
3478 			.num_parents = 1,
3479 			.flags = CLK_SET_RATE_PARENT,
3480 			.ops = &clk_branch_simple_ops,
3481 		},
3482 	},
3483 };
3484 
3485 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
3486 	.halt_reg = 0x7501c,
3487 	.halt_check = BRANCH_HALT_DELAY,
3488 	.clkr = {
3489 		.enable_reg = 0x7501c,
3490 		.enable_mask = BIT(0),
3491 		.hw.init = &(struct clk_init_data){
3492 			.name = "gcc_ufs_card_rx_symbol_0_clk",
3493 			.ops = &clk_branch2_ops,
3494 		},
3495 	},
3496 };
3497 
3498 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
3499 	.halt_reg = 0x750ac,
3500 	.halt_check = BRANCH_HALT_DELAY,
3501 	.clkr = {
3502 		.enable_reg = 0x750ac,
3503 		.enable_mask = BIT(0),
3504 		.hw.init = &(struct clk_init_data){
3505 			.name = "gcc_ufs_card_rx_symbol_1_clk",
3506 			.ops = &clk_branch2_ops,
3507 		},
3508 	},
3509 };
3510 
3511 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
3512 	.halt_reg = 0x75018,
3513 	.halt_check = BRANCH_HALT_DELAY,
3514 	.clkr = {
3515 		.enable_reg = 0x75018,
3516 		.enable_mask = BIT(0),
3517 		.hw.init = &(struct clk_init_data){
3518 			.name = "gcc_ufs_card_tx_symbol_0_clk",
3519 			.ops = &clk_branch2_ops,
3520 		},
3521 	},
3522 };
3523 
3524 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
3525 	.halt_reg = 0x75058,
3526 	.halt_check = BRANCH_HALT,
3527 	.hwcg_reg = 0x75058,
3528 	.hwcg_bit = 1,
3529 	.clkr = {
3530 		.enable_reg = 0x75058,
3531 		.enable_mask = BIT(0),
3532 		.hw.init = &(struct clk_init_data){
3533 			.name = "gcc_ufs_card_unipro_core_clk",
3534 			.parent_hws = (const struct clk_hw *[]){
3535 				      &gcc_ufs_card_unipro_core_clk_src.clkr.hw
3536 			},
3537 			.num_parents = 1,
3538 			.flags = CLK_SET_RATE_PARENT,
3539 			.ops = &clk_branch2_ops,
3540 		},
3541 	},
3542 };
3543 
3544 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
3545 	.halt_reg = 0x75058,
3546 	.halt_check = BRANCH_HALT,
3547 	.hwcg_reg = 0x75058,
3548 	.hwcg_bit = 1,
3549 	.clkr = {
3550 		.enable_reg = 0x75058,
3551 		.enable_mask = BIT(1),
3552 		.hw.init = &(struct clk_init_data){
3553 			.name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
3554 			.parent_hws = (const struct clk_hw *[]){
3555 				      &gcc_ufs_card_unipro_core_clk.clkr.hw
3556 			},
3557 			.num_parents = 1,
3558 			.flags = CLK_SET_RATE_PARENT,
3559 			.ops = &clk_branch_simple_ops,
3560 		},
3561 	},
3562 };
3563 
3564 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3565 	.halt_reg = 0x77014,
3566 	.halt_check = BRANCH_HALT,
3567 	.hwcg_reg = 0x77014,
3568 	.hwcg_bit = 1,
3569 	.clkr = {
3570 		.enable_reg = 0x77014,
3571 		.enable_mask = BIT(0),
3572 		.hw.init = &(struct clk_init_data){
3573 			.name = "gcc_ufs_phy_ahb_clk",
3574 			.ops = &clk_branch2_ops,
3575 		},
3576 	},
3577 };
3578 
3579 static struct clk_branch gcc_ufs_phy_axi_clk = {
3580 	.halt_reg = 0x77010,
3581 	.halt_check = BRANCH_HALT,
3582 	.hwcg_reg = 0x77010,
3583 	.hwcg_bit = 1,
3584 	.clkr = {
3585 		.enable_reg = 0x77010,
3586 		.enable_mask = BIT(0),
3587 		.hw.init = &(struct clk_init_data){
3588 			.name = "gcc_ufs_phy_axi_clk",
3589 			.parent_hws = (const struct clk_hw *[]){
3590 				      &gcc_ufs_phy_axi_clk_src.clkr.hw
3591 			},
3592 			.num_parents = 1,
3593 			.flags = CLK_SET_RATE_PARENT,
3594 			.ops = &clk_branch2_ops,
3595 		},
3596 	},
3597 };
3598 
3599 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
3600 	.halt_reg = 0x77010,
3601 	.halt_check = BRANCH_HALT,
3602 	.hwcg_reg = 0x77010,
3603 	.hwcg_bit = 1,
3604 	.clkr = {
3605 		.enable_reg = 0x77010,
3606 		.enable_mask = BIT(1),
3607 		.hw.init = &(struct clk_init_data){
3608 			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
3609 			.parent_hws = (const struct clk_hw *[]){
3610 				      &gcc_ufs_phy_axi_clk.clkr.hw
3611 			},
3612 			.num_parents = 1,
3613 			.flags = CLK_SET_RATE_PARENT,
3614 			.ops = &clk_branch_simple_ops,
3615 		},
3616 	},
3617 };
3618 
3619 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3620 	.halt_reg = 0x7705c,
3621 	.halt_check = BRANCH_HALT,
3622 	.hwcg_reg = 0x7705c,
3623 	.hwcg_bit = 1,
3624 	.clkr = {
3625 		.enable_reg = 0x7705c,
3626 		.enable_mask = BIT(0),
3627 		.hw.init = &(struct clk_init_data){
3628 			.name = "gcc_ufs_phy_ice_core_clk",
3629 			.parent_hws = (const struct clk_hw *[]){
3630 				      &gcc_ufs_phy_ice_core_clk_src.clkr.hw
3631 			},
3632 			.num_parents = 1,
3633 			.flags = CLK_SET_RATE_PARENT,
3634 			.ops = &clk_branch2_ops,
3635 		},
3636 	},
3637 };
3638 
3639 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3640 	.halt_reg = 0x7705c,
3641 	.halt_check = BRANCH_HALT,
3642 	.hwcg_reg = 0x7705c,
3643 	.hwcg_bit = 1,
3644 	.clkr = {
3645 		.enable_reg = 0x7705c,
3646 		.enable_mask = BIT(1),
3647 		.hw.init = &(struct clk_init_data){
3648 			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3649 			.parent_hws = (const struct clk_hw *[]){
3650 				      &gcc_ufs_phy_ice_core_clk.clkr.hw
3651 			},
3652 			.num_parents = 1,
3653 			.flags = CLK_SET_RATE_PARENT,
3654 			.ops = &clk_branch_simple_ops,
3655 		},
3656 	},
3657 };
3658 
3659 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3660 	.halt_reg = 0x77090,
3661 	.halt_check = BRANCH_HALT,
3662 	.hwcg_reg = 0x77090,
3663 	.hwcg_bit = 1,
3664 	.clkr = {
3665 		.enable_reg = 0x77090,
3666 		.enable_mask = BIT(0),
3667 		.hw.init = &(struct clk_init_data){
3668 			.name = "gcc_ufs_phy_phy_aux_clk",
3669 			.parent_hws = (const struct clk_hw *[]){
3670 				      &gcc_ufs_phy_phy_aux_clk_src.clkr.hw
3671 			},
3672 			.num_parents = 1,
3673 			.flags = CLK_SET_RATE_PARENT,
3674 			.ops = &clk_branch2_ops,
3675 		},
3676 	},
3677 };
3678 
3679 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3680 	.halt_reg = 0x77090,
3681 	.halt_check = BRANCH_HALT,
3682 	.hwcg_reg = 0x77090,
3683 	.hwcg_bit = 1,
3684 	.clkr = {
3685 		.enable_reg = 0x77090,
3686 		.enable_mask = BIT(1),
3687 		.hw.init = &(struct clk_init_data){
3688 			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3689 			.parent_hws = (const struct clk_hw *[]){
3690 				      &gcc_ufs_phy_phy_aux_clk.clkr.hw
3691 			},
3692 			.num_parents = 1,
3693 			.flags = CLK_SET_RATE_PARENT,
3694 			.ops = &clk_branch_simple_ops,
3695 		},
3696 	},
3697 };
3698 
3699 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3700 	.halt_reg = 0x7701c,
3701 	.halt_check = BRANCH_HALT_SKIP,
3702 	.clkr = {
3703 		.enable_reg = 0x7701c,
3704 		.enable_mask = BIT(0),
3705 		.hw.init = &(struct clk_init_data){
3706 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
3707 			.ops = &clk_branch2_ops,
3708 		},
3709 	},
3710 };
3711 
3712 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3713 	.halt_reg = 0x770ac,
3714 	.halt_check = BRANCH_HALT_SKIP,
3715 	.clkr = {
3716 		.enable_reg = 0x770ac,
3717 		.enable_mask = BIT(0),
3718 		.hw.init = &(struct clk_init_data){
3719 			.name = "gcc_ufs_phy_rx_symbol_1_clk",
3720 			.ops = &clk_branch2_ops,
3721 		},
3722 	},
3723 };
3724 
3725 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3726 	.halt_reg = 0x77018,
3727 	.halt_check = BRANCH_HALT_SKIP,
3728 	.clkr = {
3729 		.enable_reg = 0x77018,
3730 		.enable_mask = BIT(0),
3731 		.hw.init = &(struct clk_init_data){
3732 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
3733 			.ops = &clk_branch2_ops,
3734 		},
3735 	},
3736 };
3737 
3738 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3739 	.halt_reg = 0x77058,
3740 	.halt_check = BRANCH_HALT,
3741 	.hwcg_reg = 0x77058,
3742 	.hwcg_bit = 1,
3743 	.clkr = {
3744 		.enable_reg = 0x77058,
3745 		.enable_mask = BIT(0),
3746 		.hw.init = &(struct clk_init_data){
3747 			.name = "gcc_ufs_phy_unipro_core_clk",
3748 			.parent_hws = (const struct clk_hw *[]){
3749 				      &gcc_ufs_phy_unipro_core_clk_src.clkr.hw
3750 			},
3751 			.num_parents = 1,
3752 			.flags = CLK_SET_RATE_PARENT,
3753 			.ops = &clk_branch2_ops,
3754 		},
3755 	},
3756 };
3757 
3758 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3759 	.halt_reg = 0x77058,
3760 	.halt_check = BRANCH_HALT,
3761 	.hwcg_reg = 0x77058,
3762 	.hwcg_bit = 1,
3763 	.clkr = {
3764 		.enable_reg = 0x77058,
3765 		.enable_mask = BIT(1),
3766 		.hw.init = &(struct clk_init_data){
3767 			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3768 			.parent_hws = (const struct clk_hw *[]){
3769 				      &gcc_ufs_phy_unipro_core_clk.clkr.hw
3770 			},
3771 			.num_parents = 1,
3772 			.flags = CLK_SET_RATE_PARENT,
3773 			.ops = &clk_branch_simple_ops,
3774 		},
3775 	},
3776 };
3777 
3778 static struct clk_branch gcc_usb30_mp_master_clk = {
3779 	.halt_reg = 0xa6010,
3780 	.halt_check = BRANCH_HALT,
3781 	.clkr = {
3782 		.enable_reg = 0xa6010,
3783 		.enable_mask = BIT(0),
3784 		.hw.init = &(struct clk_init_data){
3785 			.name = "gcc_usb30_mp_master_clk",
3786 			.parent_hws = (const struct clk_hw *[]){
3787 				      &gcc_usb30_mp_master_clk_src.clkr.hw },
3788 			.num_parents = 1,
3789 			.flags = CLK_SET_RATE_PARENT,
3790 			.ops = &clk_branch2_ops,
3791 		},
3792 	},
3793 };
3794 
3795 static struct clk_branch gcc_usb30_mp_mock_utmi_clk = {
3796 	.halt_reg = 0xa6018,
3797 	.halt_check = BRANCH_HALT,
3798 	.clkr = {
3799 		.enable_reg = 0xa6018,
3800 		.enable_mask = BIT(0),
3801 		.hw.init = &(struct clk_init_data){
3802 			.name = "gcc_usb30_mp_mock_utmi_clk",
3803 			.parent_hws = (const struct clk_hw *[]){
3804 				      &gcc_usb30_mp_mock_utmi_clk_src.clkr.hw
3805 			},
3806 			.num_parents = 1,
3807 			.flags = CLK_SET_RATE_PARENT,
3808 			.ops = &clk_branch2_ops,
3809 		},
3810 	},
3811 };
3812 
3813 static struct clk_branch gcc_usb30_mp_sleep_clk = {
3814 	.halt_reg = 0xa6014,
3815 	.halt_check = BRANCH_HALT,
3816 	.clkr = {
3817 		.enable_reg = 0xa6014,
3818 		.enable_mask = BIT(0),
3819 		.hw.init = &(struct clk_init_data){
3820 			.name = "gcc_usb30_mp_sleep_clk",
3821 			.ops = &clk_branch2_ops,
3822 		},
3823 	},
3824 };
3825 
3826 static struct clk_branch gcc_usb30_prim_master_clk = {
3827 	.halt_reg = 0xf010,
3828 	.halt_check = BRANCH_HALT,
3829 	.clkr = {
3830 		.enable_reg = 0xf010,
3831 		.enable_mask = BIT(0),
3832 		.hw.init = &(struct clk_init_data){
3833 			.name = "gcc_usb30_prim_master_clk",
3834 			.parent_hws = (const struct clk_hw *[]){
3835 				      &gcc_usb30_prim_master_clk_src.clkr.hw },
3836 			.num_parents = 1,
3837 			.flags = CLK_SET_RATE_PARENT,
3838 			.ops = &clk_branch2_ops,
3839 		},
3840 	},
3841 };
3842 
3843 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3844 	.halt_reg = 0xf018,
3845 	.halt_check = BRANCH_HALT,
3846 	.clkr = {
3847 		.enable_reg = 0xf018,
3848 		.enable_mask = BIT(0),
3849 		.hw.init = &(struct clk_init_data){
3850 			.name = "gcc_usb30_prim_mock_utmi_clk",
3851 			.parent_hws = (const struct clk_hw *[]){
3852 				      &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw
3853 			},
3854 			.num_parents = 1,
3855 			.flags = CLK_SET_RATE_PARENT,
3856 			.ops = &clk_branch2_ops,
3857 		},
3858 	},
3859 };
3860 
3861 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3862 	.halt_reg = 0xf014,
3863 	.halt_check = BRANCH_HALT,
3864 	.clkr = {
3865 		.enable_reg = 0xf014,
3866 		.enable_mask = BIT(0),
3867 		.hw.init = &(struct clk_init_data){
3868 			.name = "gcc_usb30_prim_sleep_clk",
3869 			.ops = &clk_branch2_ops,
3870 		},
3871 	},
3872 };
3873 
3874 static struct clk_branch gcc_usb30_sec_master_clk = {
3875 	.halt_reg = 0x10010,
3876 	.halt_check = BRANCH_HALT,
3877 	.clkr = {
3878 		.enable_reg = 0x10010,
3879 		.enable_mask = BIT(0),
3880 		.hw.init = &(struct clk_init_data){
3881 			.name = "gcc_usb30_sec_master_clk",
3882 			.parent_hws = (const struct clk_hw *[]){
3883 				      &gcc_usb30_sec_master_clk_src.clkr.hw },
3884 			.num_parents = 1,
3885 			.flags = CLK_SET_RATE_PARENT,
3886 			.ops = &clk_branch2_ops,
3887 		},
3888 	},
3889 };
3890 
3891 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3892 	.halt_reg = 0x10018,
3893 	.halt_check = BRANCH_HALT,
3894 	.clkr = {
3895 		.enable_reg = 0x10018,
3896 		.enable_mask = BIT(0),
3897 		.hw.init = &(struct clk_init_data){
3898 			.name = "gcc_usb30_sec_mock_utmi_clk",
3899 			.parent_hws = (const struct clk_hw *[]){
3900 				      &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw
3901 			},
3902 			.num_parents = 1,
3903 			.flags = CLK_SET_RATE_PARENT,
3904 			.ops = &clk_branch2_ops,
3905 		},
3906 	},
3907 };
3908 
3909 static struct clk_branch gcc_usb30_sec_sleep_clk = {
3910 	.halt_reg = 0x10014,
3911 	.halt_check = BRANCH_HALT,
3912 	.clkr = {
3913 		.enable_reg = 0x10014,
3914 		.enable_mask = BIT(0),
3915 		.hw.init = &(struct clk_init_data){
3916 			.name = "gcc_usb30_sec_sleep_clk",
3917 			.ops = &clk_branch2_ops,
3918 		},
3919 	},
3920 };
3921 
3922 static struct clk_branch gcc_usb3_mp_phy_aux_clk = {
3923 	.halt_reg = 0xa6050,
3924 	.halt_check = BRANCH_HALT,
3925 	.clkr = {
3926 		.enable_reg = 0xa6050,
3927 		.enable_mask = BIT(0),
3928 		.hw.init = &(struct clk_init_data){
3929 			.name = "gcc_usb3_mp_phy_aux_clk",
3930 			.parent_hws = (const struct clk_hw *[]){
3931 				      &gcc_usb3_mp_phy_aux_clk_src.clkr.hw
3932 			},
3933 			.num_parents = 1,
3934 			.flags = CLK_SET_RATE_PARENT,
3935 			.ops = &clk_branch2_ops,
3936 		},
3937 	},
3938 };
3939 
3940 static struct clk_branch gcc_usb3_mp_phy_com_aux_clk = {
3941 	.halt_reg = 0xa6054,
3942 	.halt_check = BRANCH_HALT,
3943 	.clkr = {
3944 		.enable_reg = 0xa6054,
3945 		.enable_mask = BIT(0),
3946 		.hw.init = &(struct clk_init_data){
3947 			.name = "gcc_usb3_mp_phy_com_aux_clk",
3948 			.parent_hws = (const struct clk_hw *[]){
3949 				      &gcc_usb3_mp_phy_aux_clk_src.clkr.hw
3950 			},
3951 			.num_parents = 1,
3952 			.flags = CLK_SET_RATE_PARENT,
3953 			.ops = &clk_branch2_ops,
3954 		},
3955 	},
3956 };
3957 
3958 static struct clk_branch gcc_usb3_mp_phy_pipe_0_clk = {
3959 	.halt_reg = 0xa6058,
3960 	.halt_check = BRANCH_HALT_SKIP,
3961 	.clkr = {
3962 		.enable_reg = 0xa6058,
3963 		.enable_mask = BIT(0),
3964 		.hw.init = &(struct clk_init_data){
3965 			.name = "gcc_usb3_mp_phy_pipe_0_clk",
3966 			.ops = &clk_branch2_ops,
3967 		},
3968 	},
3969 };
3970 
3971 static struct clk_branch gcc_usb3_mp_phy_pipe_1_clk = {
3972 	.halt_reg = 0xa605c,
3973 	.halt_check = BRANCH_HALT_SKIP,
3974 	.clkr = {
3975 		.enable_reg = 0xa605c,
3976 		.enable_mask = BIT(0),
3977 		.hw.init = &(struct clk_init_data){
3978 			.name = "gcc_usb3_mp_phy_pipe_1_clk",
3979 			.ops = &clk_branch2_ops,
3980 		},
3981 	},
3982 };
3983 
3984 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3985 	.halt_reg = 0x8c008,
3986 	.halt_check = BRANCH_HALT,
3987 	.clkr = {
3988 		.enable_reg = 0x8c008,
3989 		.enable_mask = BIT(0),
3990 		.hw.init = &(struct clk_init_data){
3991 			.name = "gcc_usb3_prim_clkref_clk",
3992 			.ops = &clk_branch2_ops,
3993 		},
3994 	},
3995 };
3996 
3997 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3998 	.halt_reg = 0xf050,
3999 	.halt_check = BRANCH_HALT,
4000 	.clkr = {
4001 		.enable_reg = 0xf050,
4002 		.enable_mask = BIT(0),
4003 		.hw.init = &(struct clk_init_data){
4004 			.name = "gcc_usb3_prim_phy_aux_clk",
4005 			.parent_hws = (const struct clk_hw *[]){
4006 				      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw
4007 			},
4008 			.num_parents = 1,
4009 			.flags = CLK_SET_RATE_PARENT,
4010 			.ops = &clk_branch2_ops,
4011 		},
4012 	},
4013 };
4014 
4015 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
4016 	.halt_reg = 0xf054,
4017 	.halt_check = BRANCH_HALT,
4018 	.clkr = {
4019 		.enable_reg = 0xf054,
4020 		.enable_mask = BIT(0),
4021 		.hw.init = &(struct clk_init_data){
4022 			.name = "gcc_usb3_prim_phy_com_aux_clk",
4023 			.parent_hws = (const struct clk_hw *[]){
4024 				      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw
4025 			},
4026 			.num_parents = 1,
4027 			.flags = CLK_SET_RATE_PARENT,
4028 			.ops = &clk_branch2_ops,
4029 		},
4030 	},
4031 };
4032 
4033 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
4034 	.halt_reg = 0xf058,
4035 	.halt_check = BRANCH_HALT_SKIP,
4036 	.clkr = {
4037 		.enable_reg = 0xf058,
4038 		.enable_mask = BIT(0),
4039 		.hw.init = &(struct clk_init_data){
4040 			.name = "gcc_usb3_prim_phy_pipe_clk",
4041 			.ops = &clk_branch2_ops,
4042 		},
4043 	},
4044 };
4045 
4046 static struct clk_branch gcc_usb3_sec_clkref_clk = {
4047 	.halt_reg = 0x8c028,
4048 	.halt_check = BRANCH_HALT,
4049 	.clkr = {
4050 		.enable_reg = 0x8c028,
4051 		.enable_mask = BIT(0),
4052 		.hw.init = &(struct clk_init_data){
4053 			.name = "gcc_usb3_sec_clkref_clk",
4054 			.ops = &clk_branch2_ops,
4055 		},
4056 	},
4057 };
4058 
4059 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
4060 	.halt_reg = 0x10050,
4061 	.halt_check = BRANCH_HALT,
4062 	.clkr = {
4063 		.enable_reg = 0x10050,
4064 		.enable_mask = BIT(0),
4065 		.hw.init = &(struct clk_init_data){
4066 			.name = "gcc_usb3_sec_phy_aux_clk",
4067 			.parent_hws = (const struct clk_hw *[]){
4068 				      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw
4069 			},
4070 			.num_parents = 1,
4071 			.flags = CLK_SET_RATE_PARENT,
4072 			.ops = &clk_branch2_ops,
4073 		},
4074 	},
4075 };
4076 
4077 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
4078 	.halt_reg = 0x10054,
4079 	.halt_check = BRANCH_HALT,
4080 	.clkr = {
4081 		.enable_reg = 0x10054,
4082 		.enable_mask = BIT(0),
4083 		.hw.init = &(struct clk_init_data){
4084 			.name = "gcc_usb3_sec_phy_com_aux_clk",
4085 			.parent_hws = (const struct clk_hw *[]){
4086 				      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw
4087 			},
4088 			.num_parents = 1,
4089 			.flags = CLK_SET_RATE_PARENT,
4090 			.ops = &clk_branch2_ops,
4091 		},
4092 	},
4093 };
4094 
4095 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
4096 	.halt_reg = 0x10058,
4097 	.halt_check = BRANCH_HALT_SKIP,
4098 	.clkr = {
4099 		.enable_reg = 0x10058,
4100 		.enable_mask = BIT(0),
4101 		.hw.init = &(struct clk_init_data){
4102 			.name = "gcc_usb3_sec_phy_pipe_clk",
4103 			.ops = &clk_branch2_ops,
4104 		},
4105 	},
4106 };
4107 
4108 static struct clk_branch gcc_video_axi0_clk = {
4109 	.halt_reg = 0xb024,
4110 	.halt_check = BRANCH_HALT,
4111 	.clkr = {
4112 		.enable_reg = 0xb024,
4113 		.enable_mask = BIT(0),
4114 		.hw.init = &(struct clk_init_data){
4115 			.name = "gcc_video_axi0_clk",
4116 			.ops = &clk_branch2_ops,
4117 		},
4118 	},
4119 };
4120 
4121 static struct clk_branch gcc_video_axi1_clk = {
4122 	.halt_reg = 0xb028,
4123 	.halt_check = BRANCH_HALT,
4124 	.clkr = {
4125 		.enable_reg = 0xb028,
4126 		.enable_mask = BIT(0),
4127 		.hw.init = &(struct clk_init_data){
4128 			.name = "gcc_video_axi1_clk",
4129 			.ops = &clk_branch2_ops,
4130 		},
4131 	},
4132 };
4133 
4134 static struct clk_branch gcc_video_axic_clk = {
4135 	.halt_reg = 0xb02c,
4136 	.halt_check = BRANCH_HALT,
4137 	.clkr = {
4138 		.enable_reg = 0xb02c,
4139 		.enable_mask = BIT(0),
4140 		.hw.init = &(struct clk_init_data){
4141 			.name = "gcc_video_axic_clk",
4142 			.ops = &clk_branch2_ops,
4143 		},
4144 	},
4145 };
4146 
4147 static struct gdsc usb30_sec_gdsc = {
4148 	.gdscr = 0x10004,
4149 	.pd = {
4150 		.name = "usb30_sec_gdsc",
4151 	},
4152 	.pwrsts = PWRSTS_OFF_ON,
4153 	.flags = POLL_CFG_GDSCR,
4154 };
4155 
4156 static struct gdsc emac_gdsc = {
4157 	.gdscr = 0x6004,
4158 	.pd = {
4159 		.name = "emac_gdsc",
4160 	},
4161 	.pwrsts = PWRSTS_OFF_ON,
4162 	.flags = POLL_CFG_GDSCR,
4163 };
4164 
4165 static struct gdsc usb30_prim_gdsc = {
4166 	.gdscr = 0xf004,
4167 	.pd = {
4168 		.name = "usb30_prim_gdsc",
4169 	},
4170 	.pwrsts = PWRSTS_OFF_ON,
4171 	.flags = POLL_CFG_GDSCR,
4172 };
4173 
4174 static struct gdsc pcie_0_gdsc = {
4175 	.gdscr = 0x6b004,
4176 	.pd = {
4177 		.name = "pcie_0_gdsc",
4178 	},
4179 	.pwrsts = PWRSTS_OFF_ON,
4180 	.flags = POLL_CFG_GDSCR,
4181 };
4182 
4183 static struct gdsc ufs_card_gdsc = {
4184 	.gdscr = 0x75004,
4185 	.pd = {
4186 		.name = "ufs_card_gdsc",
4187 	},
4188 	.pwrsts = PWRSTS_OFF_ON,
4189 	.flags = POLL_CFG_GDSCR,
4190 };
4191 
4192 static struct gdsc ufs_phy_gdsc = {
4193 	.gdscr = 0x77004,
4194 	.pd = {
4195 		.name = "ufs_phy_gdsc",
4196 	},
4197 	.pwrsts = PWRSTS_OFF_ON,
4198 	.flags = POLL_CFG_GDSCR,
4199 };
4200 
4201 static struct gdsc pcie_1_gdsc = {
4202 	.gdscr = 0x8d004,
4203 	.pd = {
4204 		.name = "pcie_1_gdsc",
4205 	},
4206 	.pwrsts = PWRSTS_OFF_ON,
4207 	.flags = POLL_CFG_GDSCR,
4208 };
4209 
4210 static struct gdsc pcie_2_gdsc = {
4211 	.gdscr = 0x9d004,
4212 	.pd = {
4213 		.name = "pcie_2_gdsc",
4214 	},
4215 	.pwrsts = PWRSTS_OFF_ON,
4216 	.flags = POLL_CFG_GDSCR,
4217 };
4218 
4219 static struct gdsc ufs_card_2_gdsc = {
4220 	.gdscr = 0xa2004,
4221 	.pd = {
4222 		.name = "ufs_card_2_gdsc",
4223 	},
4224 	.pwrsts = PWRSTS_OFF_ON,
4225 	.flags = POLL_CFG_GDSCR,
4226 };
4227 
4228 static struct gdsc pcie_3_gdsc = {
4229 	.gdscr = 0xa3004,
4230 	.pd = {
4231 		.name = "pcie_3_gdsc",
4232 	},
4233 	.pwrsts = PWRSTS_OFF_ON,
4234 	.flags = POLL_CFG_GDSCR,
4235 };
4236 
4237 static struct gdsc usb30_mp_gdsc = {
4238 	.gdscr = 0xa6004,
4239 	.pd = {
4240 		.name = "usb30_mp_gdsc",
4241 	},
4242 	.pwrsts = PWRSTS_OFF_ON,
4243 	.flags = POLL_CFG_GDSCR,
4244 };
4245 
4246 static struct clk_regmap *gcc_sc8180x_clocks[] = {
4247 	[GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
4248 	[GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
4249 	[GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
4250 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
4251 	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
4252 	[GCC_AGGRE_USB3_MP_AXI_CLK] = &gcc_aggre_usb3_mp_axi_clk.clkr,
4253 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
4254 	[GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
4255 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4256 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
4257 	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
4258 	[GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr,
4259 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4260 	[GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
4261 	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
4262 	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
4263 	[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
4264 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4265 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4266 	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
4267 	[GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
4268 	[GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
4269 	[GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
4270 	[GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
4271 	[GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
4272 	[GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
4273 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4274 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4275 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4276 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4277 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4278 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4279 	[GCC_GP4_CLK] = &gcc_gp4_clk.clkr,
4280 	[GCC_GP4_CLK_SRC] = &gcc_gp4_clk_src.clkr,
4281 	[GCC_GP5_CLK] = &gcc_gp5_clk.clkr,
4282 	[GCC_GP5_CLK_SRC] = &gcc_gp5_clk_src.clkr,
4283 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4284 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4285 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4286 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4287 	[GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
4288 	[GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
4289 	[GCC_NPU_AXI_CLK_SRC] = &gcc_npu_axi_clk_src.clkr,
4290 	[GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
4291 	[GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
4292 	[GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
4293 	[GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
4294 	[GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
4295 	[GCC_PCIE2_PHY_REFGEN_CLK] = &gcc_pcie2_phy_refgen_clk.clkr,
4296 	[GCC_PCIE3_PHY_REFGEN_CLK] = &gcc_pcie3_phy_refgen_clk.clkr,
4297 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
4298 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
4299 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
4300 	[GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
4301 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
4302 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
4303 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
4304 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
4305 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
4306 	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
4307 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
4308 	[GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
4309 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
4310 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
4311 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
4312 	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
4313 	[GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
4314 	[GCC_PCIE_2_AUX_CLK_SRC] = &gcc_pcie_2_aux_clk_src.clkr,
4315 	[GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
4316 	[GCC_PCIE_2_CLKREF_CLK] = &gcc_pcie_2_clkref_clk.clkr,
4317 	[GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
4318 	[GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
4319 	[GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
4320 	[GCC_PCIE_2_SLV_Q2A_AXI_CLK] = &gcc_pcie_2_slv_q2a_axi_clk.clkr,
4321 	[GCC_PCIE_3_AUX_CLK] = &gcc_pcie_3_aux_clk.clkr,
4322 	[GCC_PCIE_3_AUX_CLK_SRC] = &gcc_pcie_3_aux_clk_src.clkr,
4323 	[GCC_PCIE_3_CFG_AHB_CLK] = &gcc_pcie_3_cfg_ahb_clk.clkr,
4324 	[GCC_PCIE_3_CLKREF_CLK] = &gcc_pcie_3_clkref_clk.clkr,
4325 	[GCC_PCIE_3_MSTR_AXI_CLK] = &gcc_pcie_3_mstr_axi_clk.clkr,
4326 	[GCC_PCIE_3_PIPE_CLK] = &gcc_pcie_3_pipe_clk.clkr,
4327 	[GCC_PCIE_3_SLV_AXI_CLK] = &gcc_pcie_3_slv_axi_clk.clkr,
4328 	[GCC_PCIE_3_SLV_Q2A_AXI_CLK] = &gcc_pcie_3_slv_q2a_axi_clk.clkr,
4329 	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
4330 	[GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
4331 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4332 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4333 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4334 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4335 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4336 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4337 	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4338 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4339 	[GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
4340 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4341 	[GCC_QSPI_1_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_1_cnoc_periph_ahb_clk.clkr,
4342 	[GCC_QSPI_1_CORE_CLK] = &gcc_qspi_1_core_clk.clkr,
4343 	[GCC_QSPI_1_CORE_CLK_SRC] = &gcc_qspi_1_core_clk_src.clkr,
4344 	[GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
4345 	[GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
4346 	[GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
4347 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4348 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4349 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4350 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4351 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4352 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4353 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4354 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4355 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4356 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4357 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4358 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4359 	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4360 	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4361 	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
4362 	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
4363 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4364 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4365 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4366 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4367 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4368 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4369 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4370 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4371 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4372 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4373 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4374 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4375 	[GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
4376 	[GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
4377 	[GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
4378 	[GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
4379 	[GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
4380 	[GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
4381 	[GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
4382 	[GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
4383 	[GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
4384 	[GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
4385 	[GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
4386 	[GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
4387 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4388 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4389 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4390 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4391 	[GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
4392 	[GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
4393 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4394 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4395 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4396 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
4397 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
4398 	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
4399 	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
4400 	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
4401 	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
4402 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
4403 	[GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
4404 	[GCC_UFS_CARD_2_AHB_CLK] = &gcc_ufs_card_2_ahb_clk.clkr,
4405 	[GCC_UFS_CARD_2_AXI_CLK] = &gcc_ufs_card_2_axi_clk.clkr,
4406 	[GCC_UFS_CARD_2_AXI_CLK_SRC] = &gcc_ufs_card_2_axi_clk_src.clkr,
4407 	[GCC_UFS_CARD_2_ICE_CORE_CLK] = &gcc_ufs_card_2_ice_core_clk.clkr,
4408 	[GCC_UFS_CARD_2_ICE_CORE_CLK_SRC] = &gcc_ufs_card_2_ice_core_clk_src.clkr,
4409 	[GCC_UFS_CARD_2_PHY_AUX_CLK] = &gcc_ufs_card_2_phy_aux_clk.clkr,
4410 	[GCC_UFS_CARD_2_PHY_AUX_CLK_SRC] = &gcc_ufs_card_2_phy_aux_clk_src.clkr,
4411 	[GCC_UFS_CARD_2_RX_SYMBOL_0_CLK] = &gcc_ufs_card_2_rx_symbol_0_clk.clkr,
4412 	[GCC_UFS_CARD_2_RX_SYMBOL_1_CLK] = &gcc_ufs_card_2_rx_symbol_1_clk.clkr,
4413 	[GCC_UFS_CARD_2_TX_SYMBOL_0_CLK] = &gcc_ufs_card_2_tx_symbol_0_clk.clkr,
4414 	[GCC_UFS_CARD_2_UNIPRO_CORE_CLK] = &gcc_ufs_card_2_unipro_core_clk.clkr,
4415 	[GCC_UFS_CARD_2_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_2_unipro_core_clk_src.clkr,
4416 	[GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
4417 	[GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
4418 	[GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
4419 	[GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
4420 	[GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
4421 	[GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
4422 	[GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
4423 	[GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
4424 	[GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
4425 	[GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
4426 	[GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
4427 	[GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
4428 	[GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
4429 	[GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
4430 	[GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr,
4431 	[GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
4432 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4433 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4434 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4435 	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
4436 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4437 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4438 	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
4439 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4440 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4441 	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
4442 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4443 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
4444 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4445 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4446 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
4447 	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
4448 	[GCC_USB30_MP_MASTER_CLK] = &gcc_usb30_mp_master_clk.clkr,
4449 	[GCC_USB30_MP_MASTER_CLK_SRC] = &gcc_usb30_mp_master_clk_src.clkr,
4450 	[GCC_USB30_MP_MOCK_UTMI_CLK] = &gcc_usb30_mp_mock_utmi_clk.clkr,
4451 	[GCC_USB30_MP_MOCK_UTMI_CLK_SRC] = &gcc_usb30_mp_mock_utmi_clk_src.clkr,
4452 	[GCC_USB30_MP_SLEEP_CLK] = &gcc_usb30_mp_sleep_clk.clkr,
4453 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4454 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4455 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4456 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4457 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4458 	[GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
4459 	[GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
4460 	[GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
4461 	[GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr,
4462 	[GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
4463 	[GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr,
4464 	[GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr,
4465 	[GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr,
4466 	[GCC_USB3_MP_PHY_PIPE_0_CLK] = &gcc_usb3_mp_phy_pipe_0_clk.clkr,
4467 	[GCC_USB3_MP_PHY_PIPE_1_CLK] = &gcc_usb3_mp_phy_pipe_1_clk.clkr,
4468 	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
4469 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
4470 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4471 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4472 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4473 	[GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
4474 	[GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
4475 	[GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
4476 	[GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
4477 	[GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
4478 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4479 	[GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
4480 	[GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
4481 	[GPLL0] = &gpll0.clkr,
4482 	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
4483 	[GPLL1] = &gpll1.clkr,
4484 	[GPLL4] = &gpll4.clkr,
4485 	[GPLL7] = &gpll7.clkr,
4486 };
4487 
4488 static const struct qcom_reset_map gcc_sc8180x_resets[] = {
4489 	[GCC_EMAC_BCR] = { 0x6000 },
4490 	[GCC_GPU_BCR] = { 0x71000 },
4491 	[GCC_MMSS_BCR] = { 0xb000 },
4492 	[GCC_NPU_BCR] = { 0x4d000 },
4493 	[GCC_PCIE_0_BCR] = { 0x6b000 },
4494 	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
4495 	[GCC_PCIE_1_BCR] = { 0x8d000 },
4496 	[GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
4497 	[GCC_PCIE_2_BCR] = { 0x9d000 },
4498 	[GCC_PCIE_2_PHY_BCR] = { 0xa701c },
4499 	[GCC_PCIE_3_BCR] = { 0xa3000 },
4500 	[GCC_PCIE_3_PHY_BCR] = { 0xa801c },
4501 	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
4502 	[GCC_PDM_BCR] = { 0x33000 },
4503 	[GCC_PRNG_BCR] = { 0x34000 },
4504 	[GCC_QSPI_1_BCR] = { 0x4a000 },
4505 	[GCC_QSPI_BCR] = { 0x24008 },
4506 	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
4507 	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
4508 	[GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
4509 	[GCC_QUSB2PHY_5_BCR] = { 0x12010 },
4510 	[GCC_QUSB2PHY_MP0_BCR] = { 0x12008 },
4511 	[GCC_QUSB2PHY_MP1_BCR] = { 0x1200c },
4512 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
4513 	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
4514 	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x50000 },
4515 	[GCC_USB3_PHY_PRIM_SP1_BCR] = { 0x50004 },
4516 	[GCC_USB3_DP_PHY_PRIM_SP0_BCR] = { 0x50010 },
4517 	[GCC_USB3_DP_PHY_PRIM_SP1_BCR] = { 0x50014 },
4518 	[GCC_USB3_PHY_SEC_BCR] = { 0x50018 },
4519 	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c },
4520 	[GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 },
4521 	[GCC_SDCC2_BCR] = { 0x14000 },
4522 	[GCC_SDCC4_BCR] = { 0x16000 },
4523 	[GCC_TSIF_BCR] = { 0x36000 },
4524 	[GCC_UFS_CARD_2_BCR] = { 0xa2000 },
4525 	[GCC_UFS_CARD_BCR] = { 0x75000 },
4526 	[GCC_UFS_PHY_BCR] = { 0x77000 },
4527 	[GCC_USB30_MP_BCR] = { 0xa6000 },
4528 	[GCC_USB30_PRIM_BCR] = { 0xf000 },
4529 	[GCC_USB30_SEC_BCR] = { 0x10000 },
4530 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
4531 	[GCC_VIDEO_AXIC_CLK_BCR] = { 0xb02c, 2 },
4532 	[GCC_VIDEO_AXI0_CLK_BCR] = { 0xb024, 2 },
4533 	[GCC_VIDEO_AXI1_CLK_BCR] = { 0xb028, 2 },
4534 };
4535 
4536 static struct gdsc *gcc_sc8180x_gdscs[] = {
4537 	[EMAC_GDSC] = &emac_gdsc,
4538 	[PCIE_0_GDSC] = &pcie_0_gdsc,
4539 	[PCIE_1_GDSC] = &pcie_1_gdsc,
4540 	[PCIE_2_GDSC] = &pcie_2_gdsc,
4541 	[PCIE_3_GDSC] = &pcie_3_gdsc,
4542 	[UFS_CARD_GDSC] = &ufs_card_gdsc,
4543 	[UFS_CARD_2_GDSC] = &ufs_card_2_gdsc,
4544 	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
4545 	[USB30_MP_GDSC] = &usb30_mp_gdsc,
4546 	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
4547 	[USB30_SEC_GDSC] = &usb30_sec_gdsc,
4548 };
4549 
4550 static const struct regmap_config gcc_sc8180x_regmap_config = {
4551 	.reg_bits	= 32,
4552 	.reg_stride	= 4,
4553 	.val_bits	= 32,
4554 	.max_register	= 0xc0004,
4555 	.fast_io	= true,
4556 };
4557 
4558 static const struct qcom_cc_desc gcc_sc8180x_desc = {
4559 	.config = &gcc_sc8180x_regmap_config,
4560 	.clks = gcc_sc8180x_clocks,
4561 	.num_clks = ARRAY_SIZE(gcc_sc8180x_clocks),
4562 	.resets = gcc_sc8180x_resets,
4563 	.num_resets = ARRAY_SIZE(gcc_sc8180x_resets),
4564 	.gdscs = gcc_sc8180x_gdscs,
4565 	.num_gdscs = ARRAY_SIZE(gcc_sc8180x_gdscs),
4566 };
4567 
4568 static const struct of_device_id gcc_sc8180x_match_table[] = {
4569 	{ .compatible = "qcom,gcc-sc8180x" },
4570 	{ }
4571 };
4572 MODULE_DEVICE_TABLE(of, gcc_sc8180x_match_table);
4573 
4574 static int gcc_sc8180x_probe(struct platform_device *pdev)
4575 {
4576 	struct regmap *regmap;
4577 
4578 	regmap = qcom_cc_map(pdev, &gcc_sc8180x_desc);
4579 	if (IS_ERR(regmap))
4580 		return PTR_ERR(regmap);
4581 
4582 	/*
4583 	 * Enable the following always-on clocks:
4584 	 * GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK, GCC_DISP_AHB_CLK,
4585 	 * GCC_VIDEO_XO_CLK, GCC_CAMERA_XO_CLK, GCC_DISP_XO_CLK,
4586 	 * GCC_CPUSS_GNOC_CLK, GCC_CPUSS_DVM_BUS_CLK, GCC_NPU_CFG_AHB_CLK and
4587 	 * GCC_GPU_CFG_AHB_CLK
4588 	 */
4589 	regmap_update_bits(regmap, 0xb004, BIT(0), BIT(0));
4590 	regmap_update_bits(regmap, 0xb008, BIT(0), BIT(0));
4591 	regmap_update_bits(regmap, 0xb00c, BIT(0), BIT(0));
4592 	regmap_update_bits(regmap, 0xb040, BIT(0), BIT(0));
4593 	regmap_update_bits(regmap, 0xb044, BIT(0), BIT(0));
4594 	regmap_update_bits(regmap, 0xb048, BIT(0), BIT(0));
4595 	regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
4596 	regmap_update_bits(regmap, 0x48190, BIT(0), BIT(0));
4597 	regmap_update_bits(regmap, 0x4d004, BIT(0), BIT(0));
4598 	regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
4599 
4600 	/* Disable the GPLL0 active input to NPU and GPU via MISC registers */
4601 	regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
4602 	regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
4603 
4604 	return qcom_cc_really_probe(pdev, &gcc_sc8180x_desc, regmap);
4605 }
4606 
4607 static struct platform_driver gcc_sc8180x_driver = {
4608 	.probe		= gcc_sc8180x_probe,
4609 	.driver		= {
4610 		.name	= "gcc-sc8180x",
4611 		.of_match_table = gcc_sc8180x_match_table,
4612 	},
4613 };
4614 
4615 static int __init gcc_sc8180x_init(void)
4616 {
4617 	return platform_driver_register(&gcc_sc8180x_driver);
4618 }
4619 core_initcall(gcc_sc8180x_init);
4620 
4621 static void __exit gcc_sc8180x_exit(void)
4622 {
4623 	platform_driver_unregister(&gcc_sc8180x_driver);
4624 }
4625 module_exit(gcc_sc8180x_exit);
4626 
4627 MODULE_DESCRIPTION("QTI GCC SC8180x driver");
4628 MODULE_LICENSE("GPL v2");
4629