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