xref: /linux/drivers/clk/qcom/gcc-sm6350.c (revision 4359a011e259a4608afc7fb3635370c9d4ba5943)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
5  */
6 
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
11 
12 #include <dt-bindings/clock/qcom,gcc-sm6350.h>
13 
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "common.h"
21 #include "gdsc.h"
22 #include "reset.h"
23 
24 enum {
25 	P_BI_TCXO,
26 	P_GPLL0_OUT_EVEN,
27 	P_GPLL0_OUT_MAIN,
28 	P_GPLL0_OUT_ODD,
29 	P_GPLL6_OUT_EVEN,
30 	P_GPLL7_OUT_MAIN,
31 	P_SLEEP_CLK,
32 };
33 
34 static struct clk_alpha_pll gpll0 = {
35 	.offset = 0x0,
36 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
37 	.clkr = {
38 		.enable_reg = 0x52010,
39 		.enable_mask = BIT(0),
40 		.hw.init = &(struct clk_init_data){
41 			.name = "gpll0",
42 			.parent_data = &(const struct clk_parent_data){
43 				.fw_name = "bi_tcxo",
44 			},
45 			.num_parents = 1,
46 			.ops = &clk_alpha_pll_fixed_fabia_ops,
47 		},
48 	},
49 };
50 
51 static const struct clk_div_table post_div_table_gpll0_out_even[] = {
52 	{ 0x1, 2 },
53 	{ }
54 };
55 
56 static struct clk_alpha_pll_postdiv gpll0_out_even = {
57 	.offset = 0x0,
58 	.post_div_shift = 8,
59 	.post_div_table = post_div_table_gpll0_out_even,
60 	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
61 	.width = 4,
62 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
63 	.clkr.hw.init = &(struct clk_init_data){
64 		.name = "gpll0_out_even",
65 		.parent_hws = (const struct clk_hw*[]){
66 			&gpll0.clkr.hw,
67 		},
68 		.num_parents = 1,
69 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
70 	},
71 };
72 
73 static const struct clk_div_table post_div_table_gpll0_out_odd[] = {
74 	{ 0x3, 3 },
75 	{ }
76 };
77 
78 static struct clk_alpha_pll_postdiv gpll0_out_odd = {
79 	.offset = 0x0,
80 	.post_div_shift = 12,
81 	.post_div_table = post_div_table_gpll0_out_odd,
82 	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),
83 	.width = 4,
84 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
85 	.clkr.hw.init = &(struct clk_init_data){
86 		.name = "gpll0_out_odd",
87 		.parent_hws = (const struct clk_hw*[]){
88 			&gpll0.clkr.hw,
89 		},
90 		.num_parents = 1,
91 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
92 	},
93 };
94 
95 static struct clk_alpha_pll gpll6 = {
96 	.offset = 0x6000,
97 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
98 	.clkr = {
99 		.enable_reg = 0x52010,
100 		.enable_mask = BIT(6),
101 		.hw.init = &(struct clk_init_data){
102 			.name = "gpll6",
103 			.parent_hws = (const struct clk_hw*[]){
104 				&gpll0.clkr.hw,
105 			},
106 			.num_parents = 1,
107 			.ops = &clk_alpha_pll_fixed_fabia_ops,
108 		},
109 	},
110 };
111 
112 static const struct clk_div_table post_div_table_gpll6_out_even[] = {
113 	{ 0x1, 2 },
114 	{ }
115 };
116 
117 static struct clk_alpha_pll_postdiv gpll6_out_even = {
118 	.offset = 0x6000,
119 	.post_div_shift = 8,
120 	.post_div_table = post_div_table_gpll6_out_even,
121 	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),
122 	.width = 4,
123 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
124 	.clkr.hw.init = &(struct clk_init_data){
125 		.name = "gpll6_out_even",
126 		.parent_hws = (const struct clk_hw*[]){
127 			&gpll0.clkr.hw,
128 		},
129 		.num_parents = 1,
130 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
131 	},
132 };
133 
134 static struct clk_alpha_pll gpll7 = {
135 	.offset = 0x7000,
136 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
137 	.clkr = {
138 		.enable_reg = 0x52010,
139 		.enable_mask = BIT(7),
140 		.hw.init = &(struct clk_init_data){
141 			.name = "gpll7",
142 			.parent_hws = (const struct clk_hw*[]){
143 				&gpll0.clkr.hw,
144 			},
145 			.num_parents = 1,
146 			.ops = &clk_alpha_pll_fixed_fabia_ops,
147 		},
148 	},
149 };
150 
151 static const struct parent_map gcc_parent_map_0[] = {
152 	{ P_BI_TCXO, 0 },
153 	{ P_GPLL0_OUT_MAIN, 1 },
154 	{ P_GPLL6_OUT_EVEN, 2 },
155 	{ P_GPLL0_OUT_EVEN, 6 },
156 };
157 
158 static const struct clk_parent_data gcc_parent_data_0[] = {
159 	{ .fw_name = "bi_tcxo" },
160 	{ .hw = &gpll0.clkr.hw },
161 	{ .hw = &gpll6_out_even.clkr.hw },
162 	{ .hw = &gpll0_out_even.clkr.hw },
163 };
164 
165 static const struct parent_map gcc_parent_map_1[] = {
166 	{ P_BI_TCXO, 0 },
167 	{ P_GPLL0_OUT_EVEN, 6 },
168 };
169 
170 static const struct clk_parent_data gcc_parent_data_1[] = {
171 	{ .fw_name = "bi_tcxo" },
172 	{ .hw = &gpll0_out_even.clkr.hw },
173 };
174 
175 static const struct parent_map gcc_parent_map_2[] = {
176 	{ P_BI_TCXO, 0 },
177 	{ P_GPLL0_OUT_ODD, 2 },
178 };
179 
180 static const struct clk_parent_data gcc_parent_data_2_ao[] = {
181 	{ .fw_name = "bi_tcxo_ao" },
182 	{ .hw = &gpll0_out_odd.clkr.hw },
183 };
184 
185 static const struct parent_map gcc_parent_map_4[] = {
186 	{ P_BI_TCXO, 0 },
187 	{ P_GPLL0_OUT_MAIN, 1 },
188 	{ P_GPLL0_OUT_ODD, 2 },
189 };
190 
191 static const struct clk_parent_data gcc_parent_data_4[] = {
192 	{ .fw_name = "bi_tcxo" },
193 	{ .hw = &gpll0.clkr.hw },
194 	{ .hw = &gpll0_out_odd.clkr.hw },
195 };
196 
197 static const struct parent_map gcc_parent_map_5[] = {
198 	{ P_BI_TCXO, 0 },
199 	{ P_GPLL0_OUT_ODD, 2 },
200 	{ P_SLEEP_CLK, 5 },
201 	{ P_GPLL0_OUT_EVEN, 6 },
202 };
203 
204 static const struct clk_parent_data gcc_parent_data_5[] = {
205 	{ .fw_name = "bi_tcxo" },
206 	{ .hw = &gpll0_out_odd.clkr.hw },
207 	{ .fw_name = "sleep_clk" },
208 	{ .hw = &gpll0_out_even.clkr.hw },
209 };
210 
211 static const struct parent_map gcc_parent_map_6[] = {
212 	{ P_BI_TCXO, 0 },
213 	{ P_SLEEP_CLK, 5 },
214 };
215 
216 static const struct clk_parent_data gcc_parent_data_6[] = {
217 	{ .fw_name = "bi_tcxo" },
218 	{ .fw_name = "sleep_clk" }
219 };
220 
221 static const struct parent_map gcc_parent_map_7[] = {
222 	{ P_BI_TCXO, 0 },
223 	{ P_GPLL6_OUT_EVEN, 2 },
224 	{ P_GPLL0_OUT_EVEN, 6 },
225 };
226 
227 static const struct clk_parent_data gcc_parent_data_7[] = {
228 	{ .fw_name = "bi_tcxo" },
229 	{ .hw = &gpll6_out_even.clkr.hw },
230 	{ .hw = &gpll0_out_even.clkr.hw },
231 };
232 
233 static const struct parent_map gcc_parent_map_8[] = {
234 	{ P_BI_TCXO, 0 },
235 	{ P_GPLL0_OUT_ODD, 2 },
236 	{ P_GPLL7_OUT_MAIN, 3 },
237 };
238 
239 static const struct clk_parent_data gcc_parent_data_8[] = {
240 	{ .fw_name = "bi_tcxo" },
241 	{ .hw = &gpll0_out_odd.clkr.hw },
242 	{ .hw = &gpll7.clkr.hw },
243 };
244 
245 static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = {
246 	.reg = 0x4514C,
247 	.shift = 0,
248 	.width = 2,
249 	.clkr.hw.init = &(struct clk_init_data) {
250 		.name = "gcc_gpu_gpll0_main_div_clk_src",
251 		.parent_hws = (const struct clk_hw*[]){
252 			&gpll0.clkr.hw,
253 		},
254 		.num_parents = 1,
255 		.ops = &clk_regmap_div_ro_ops,
256 	},
257 };
258 
259 static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = {
260 	.reg = 0x4ce00,
261 	.shift = 0,
262 	.width = 2,
263 	.clkr.hw.init = &(struct clk_init_data) {
264 		.name = "gcc_npu_pll0_main_div_clk_src",
265 		.parent_hws = (const struct clk_hw*[]){
266 			&gpll0.clkr.hw,
267 		},
268 		.num_parents = 1,
269 		.ops = &clk_regmap_div_ro_ops,
270 	},
271 };
272 
273 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
274 	F(19200000, P_BI_TCXO, 1, 0, 0),
275 	{ }
276 };
277 
278 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
279 	.cmd_rcgr = 0x30014,
280 	.mnd_width = 0,
281 	.hid_width = 5,
282 	.parent_map = gcc_parent_map_2,
283 	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
284 	.clkr.hw.init = &(struct clk_init_data){
285 		.name = "gcc_cpuss_ahb_clk_src",
286 		.parent_data = gcc_parent_data_2_ao,
287 		.num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
288 		.ops = &clk_rcg2_ops,
289 	},
290 };
291 
292 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
293 	F(19200000, P_BI_TCXO, 1, 0, 0),
294 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
295 	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
296 	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
297 	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
298 	{ }
299 };
300 
301 static struct clk_rcg2 gcc_gp1_clk_src = {
302 	.cmd_rcgr = 0x37004,
303 	.mnd_width = 8,
304 	.hid_width = 5,
305 	.parent_map = gcc_parent_map_5,
306 	.freq_tbl = ftbl_gcc_gp1_clk_src,
307 	.clkr.hw.init = &(struct clk_init_data){
308 		.name = "gcc_gp1_clk_src",
309 		.parent_data = gcc_parent_data_5,
310 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
311 		.ops = &clk_rcg2_ops,
312 	},
313 };
314 
315 static struct clk_rcg2 gcc_gp2_clk_src = {
316 	.cmd_rcgr = 0x38004,
317 	.mnd_width = 8,
318 	.hid_width = 5,
319 	.parent_map = gcc_parent_map_5,
320 	.freq_tbl = ftbl_gcc_gp1_clk_src,
321 	.clkr.hw.init = &(struct clk_init_data){
322 		.name = "gcc_gp2_clk_src",
323 		.parent_data = gcc_parent_data_5,
324 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
325 		.ops = &clk_rcg2_ops,
326 	},
327 };
328 
329 static struct clk_rcg2 gcc_gp3_clk_src = {
330 	.cmd_rcgr = 0x39004,
331 	.mnd_width = 8,
332 	.hid_width = 5,
333 	.parent_map = gcc_parent_map_5,
334 	.freq_tbl = ftbl_gcc_gp1_clk_src,
335 	.clkr.hw.init = &(struct clk_init_data){
336 		.name = "gcc_gp3_clk_src",
337 		.parent_data = gcc_parent_data_5,
338 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
339 		.ops = &clk_rcg2_ops,
340 	},
341 };
342 
343 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
344 	F(19200000, P_BI_TCXO, 1, 0, 0),
345 	F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
346 	{ }
347 };
348 
349 static struct clk_rcg2 gcc_pdm2_clk_src = {
350 	.cmd_rcgr = 0x23010,
351 	.mnd_width = 0,
352 	.hid_width = 5,
353 	.parent_map = gcc_parent_map_1,
354 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
355 	.clkr.hw.init = &(struct clk_init_data){
356 		.name = "gcc_pdm2_clk_src",
357 		.parent_data = gcc_parent_data_1,
358 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
359 		.ops = &clk_rcg2_ops,
360 	},
361 };
362 
363 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
364 	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
365 	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
366 	F(19200000, P_BI_TCXO, 1, 0, 0),
367 	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
368 	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
369 	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
370 	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
371 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
372 	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
373 	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
374 	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
375 	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
376 	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
377 	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
378 	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
379 	F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),
380 	{ }
381 };
382 
383 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
384 	.name = "gcc_qupv3_wrap0_s0_clk_src",
385 	.parent_data = gcc_parent_data_0,
386 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
387 	.ops = &clk_rcg2_ops,
388 };
389 
390 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
391 	.cmd_rcgr = 0x21148,
392 	.mnd_width = 16,
393 	.hid_width = 5,
394 	.parent_map = gcc_parent_map_0,
395 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
396 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
397 };
398 
399 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
400 	.name = "gcc_qupv3_wrap0_s1_clk_src",
401 	.parent_data = gcc_parent_data_0,
402 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
403 	.ops = &clk_rcg2_ops,
404 };
405 
406 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
407 	.cmd_rcgr = 0x21278,
408 	.mnd_width = 16,
409 	.hid_width = 5,
410 	.parent_map = gcc_parent_map_0,
411 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
412 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
413 };
414 
415 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
416 	.name = "gcc_qupv3_wrap0_s2_clk_src",
417 	.parent_data = gcc_parent_data_0,
418 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
419 	.ops = &clk_rcg2_ops,
420 };
421 
422 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
423 	.cmd_rcgr = 0x213a8,
424 	.mnd_width = 16,
425 	.hid_width = 5,
426 	.parent_map = gcc_parent_map_0,
427 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
428 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
429 };
430 
431 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
432 	.name = "gcc_qupv3_wrap0_s3_clk_src",
433 	.parent_data = gcc_parent_data_0,
434 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
435 	.ops = &clk_rcg2_ops,
436 };
437 
438 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
439 	.cmd_rcgr = 0x214d8,
440 	.mnd_width = 16,
441 	.hid_width = 5,
442 	.parent_map = gcc_parent_map_0,
443 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
444 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
445 };
446 
447 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
448 	.name = "gcc_qupv3_wrap0_s4_clk_src",
449 	.parent_data = gcc_parent_data_0,
450 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
451 	.ops = &clk_rcg2_ops,
452 };
453 
454 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
455 	.cmd_rcgr = 0x21608,
456 	.mnd_width = 16,
457 	.hid_width = 5,
458 	.parent_map = gcc_parent_map_0,
459 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
460 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
461 };
462 
463 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
464 	.name = "gcc_qupv3_wrap0_s5_clk_src",
465 	.parent_data = gcc_parent_data_0,
466 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
467 	.ops = &clk_rcg2_ops,
468 };
469 
470 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
471 	.cmd_rcgr = 0x21738,
472 	.mnd_width = 16,
473 	.hid_width = 5,
474 	.parent_map = gcc_parent_map_0,
475 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
476 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
477 };
478 
479 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
480 	.name = "gcc_qupv3_wrap1_s0_clk_src",
481 	.parent_data = gcc_parent_data_0,
482 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
483 	.ops = &clk_rcg2_ops,
484 };
485 
486 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
487 	.cmd_rcgr = 0x22018,
488 	.mnd_width = 16,
489 	.hid_width = 5,
490 	.parent_map = gcc_parent_map_0,
491 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
492 	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
493 };
494 
495 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
496 	.name = "gcc_qupv3_wrap1_s1_clk_src",
497 	.parent_data = gcc_parent_data_0,
498 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
499 	.ops = &clk_rcg2_ops,
500 };
501 
502 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
503 	.cmd_rcgr = 0x22148,
504 	.mnd_width = 16,
505 	.hid_width = 5,
506 	.parent_map = gcc_parent_map_0,
507 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
508 	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
509 };
510 
511 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
512 	.name = "gcc_qupv3_wrap1_s2_clk_src",
513 	.parent_data = gcc_parent_data_0,
514 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
515 	.ops = &clk_rcg2_ops,
516 };
517 
518 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
519 	.cmd_rcgr = 0x22278,
520 	.mnd_width = 16,
521 	.hid_width = 5,
522 	.parent_map = gcc_parent_map_0,
523 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
524 	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
525 };
526 
527 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
528 	.name = "gcc_qupv3_wrap1_s3_clk_src",
529 	.parent_data = gcc_parent_data_0,
530 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
531 	.ops = &clk_rcg2_ops,
532 };
533 
534 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
535 	.cmd_rcgr = 0x223a8,
536 	.mnd_width = 16,
537 	.hid_width = 5,
538 	.parent_map = gcc_parent_map_0,
539 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
540 	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
541 };
542 
543 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
544 	.name = "gcc_qupv3_wrap1_s4_clk_src",
545 	.parent_data = gcc_parent_data_0,
546 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
547 	.ops = &clk_rcg2_ops,
548 };
549 
550 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
551 	.cmd_rcgr = 0x224d8,
552 	.mnd_width = 16,
553 	.hid_width = 5,
554 	.parent_map = gcc_parent_map_0,
555 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
556 	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
557 };
558 
559 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
560 	.name = "gcc_qupv3_wrap1_s5_clk_src",
561 	.parent_data = gcc_parent_data_0,
562 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
563 	.ops = &clk_rcg2_ops,
564 };
565 
566 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
567 	.cmd_rcgr = 0x22608,
568 	.mnd_width = 16,
569 	.hid_width = 5,
570 	.parent_map = gcc_parent_map_0,
571 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
572 	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
573 };
574 
575 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
576 	F(144000, P_BI_TCXO, 16, 3, 25),
577 	F(400000, P_BI_TCXO, 12, 1, 4),
578 	F(19200000, P_BI_TCXO, 1, 0, 0),
579 	F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
580 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
581 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
582 	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
583 	F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),
584 	F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),
585 	{ }
586 };
587 
588 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
589 	.cmd_rcgr = 0x4b024,
590 	.mnd_width = 8,
591 	.hid_width = 5,
592 	.parent_map = gcc_parent_map_7,
593 	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
594 	.clkr.hw.init = &(struct clk_init_data){
595 		.name = "gcc_sdcc1_apps_clk_src",
596 		.parent_data = gcc_parent_data_7,
597 		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
598 		.ops = &clk_rcg2_ops,
599 	},
600 };
601 
602 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
603 	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
604 	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
605 	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
606 	{ }
607 };
608 
609 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
610 	.cmd_rcgr = 0x4b00c,
611 	.mnd_width = 0,
612 	.hid_width = 5,
613 	.parent_map = gcc_parent_map_1,
614 	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
615 	.clkr.hw.init = &(struct clk_init_data){
616 		.name = "gcc_sdcc1_ice_core_clk_src",
617 		.parent_data = gcc_parent_data_1,
618 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
619 		.ops = &clk_rcg2_ops,
620 	},
621 };
622 
623 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
624 	F(400000, P_BI_TCXO, 12, 1, 4),
625 	F(9600000, P_BI_TCXO, 2, 0, 0),
626 	F(19200000, P_BI_TCXO, 1, 0, 0),
627 	F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
628 	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
629 	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
630 	F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
631 	{ }
632 };
633 
634 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
635 	.cmd_rcgr = 0x2000c,
636 	.mnd_width = 8,
637 	.hid_width = 5,
638 	.parent_map = gcc_parent_map_8,
639 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
640 	.clkr.hw.init = &(struct clk_init_data){
641 		.name = "gcc_sdcc2_apps_clk_src",
642 		.parent_data = gcc_parent_data_8,
643 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
644 		.ops = &clk_rcg2_floor_ops,
645 	},
646 };
647 
648 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
649 	F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
650 	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
651 	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
652 	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
653 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
654 	{ }
655 };
656 
657 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
658 	.cmd_rcgr = 0x3a01c,
659 	.mnd_width = 8,
660 	.hid_width = 5,
661 	.parent_map = gcc_parent_map_4,
662 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
663 	.clkr.hw.init = &(struct clk_init_data){
664 		.name = "gcc_ufs_phy_axi_clk_src",
665 		.parent_data = gcc_parent_data_4,
666 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
667 		.ops = &clk_rcg2_ops,
668 	},
669 };
670 
671 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
672 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
673 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
674 	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
675 	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
676 	{ }
677 };
678 
679 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
680 	.cmd_rcgr = 0x3a048,
681 	.mnd_width = 0,
682 	.hid_width = 5,
683 	.parent_map = gcc_parent_map_1,
684 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
685 	.clkr.hw.init = &(struct clk_init_data){
686 		.name = "gcc_ufs_phy_ice_core_clk_src",
687 		.parent_data = gcc_parent_data_1,
688 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
689 		.ops = &clk_rcg2_ops,
690 	},
691 };
692 
693 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
694 	F(9600000, P_BI_TCXO, 2, 0, 0),
695 	F(19200000, P_BI_TCXO, 1, 0, 0),
696 	{ }
697 };
698 
699 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
700 	.cmd_rcgr = 0x3a0b0,
701 	.mnd_width = 0,
702 	.hid_width = 5,
703 	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
704 	.clkr.hw.init = &(struct clk_init_data){
705 		.name = "gcc_ufs_phy_phy_aux_clk_src",
706 		.parent_data = &(const struct clk_parent_data){
707 			.fw_name = "bi_tcxo",
708 		},
709 		.num_parents = 1,
710 		.ops = &clk_rcg2_ops,
711 	},
712 };
713 
714 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
715 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
716 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
717 	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
718 	{ }
719 };
720 
721 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
722 	.cmd_rcgr = 0x3a060,
723 	.mnd_width = 0,
724 	.hid_width = 5,
725 	.parent_map = gcc_parent_map_1,
726 	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
727 	.clkr.hw.init = &(struct clk_init_data){
728 		.name = "gcc_ufs_phy_unipro_core_clk_src",
729 		.parent_data = gcc_parent_data_1,
730 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
731 		.ops = &clk_rcg2_ops,
732 	},
733 };
734 
735 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
736 	F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0),
737 	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
738 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
739 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
740 	{ }
741 };
742 
743 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
744 	.cmd_rcgr = 0x1a01c,
745 	.mnd_width = 8,
746 	.hid_width = 5,
747 	.parent_map = gcc_parent_map_4,
748 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
749 	.clkr.hw.init = &(struct clk_init_data){
750 		.name = "gcc_usb30_prim_master_clk_src",
751 		.parent_data = gcc_parent_data_4,
752 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
753 		.ops = &clk_rcg2_ops,
754 	},
755 };
756 
757 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
758 	F(19200000, P_BI_TCXO, 1, 0, 0),
759 	{ }
760 };
761 
762 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
763 	.cmd_rcgr = 0x1a034,
764 	.mnd_width = 0,
765 	.hid_width = 5,
766 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
767 	.clkr.hw.init = &(struct clk_init_data){
768 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
769 		.parent_data = &(const struct clk_parent_data){
770 			.fw_name = "bi_tcxo",
771 		},
772 		.num_parents = 1,
773 		.ops = &clk_rcg2_ops,
774 	},
775 };
776 
777 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
778 	.cmd_rcgr = 0x1a060,
779 	.mnd_width = 0,
780 	.hid_width = 5,
781 	.parent_map = gcc_parent_map_6,
782 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
783 	.clkr.hw.init = &(struct clk_init_data){
784 		.name = "gcc_usb3_prim_phy_aux_clk_src",
785 		.parent_data = gcc_parent_data_6,
786 		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
787 		.ops = &clk_rcg2_ops,
788 	},
789 };
790 
791 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
792 	.halt_reg = 0x3e014,
793 	.halt_check = BRANCH_HALT_DELAY,
794 	.hwcg_reg = 0x3e014,
795 	.hwcg_bit = 1,
796 	.clkr = {
797 		.enable_reg = 0x3e014,
798 		.enable_mask = BIT(0),
799 		.hw.init = &(struct clk_init_data){
800 			.name = "gcc_aggre_ufs_phy_axi_clk",
801 			.parent_hws = (const struct clk_hw*[]){
802 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
803 			},
804 			.num_parents = 1,
805 			.flags = CLK_SET_RATE_PARENT,
806 			.ops = &clk_branch2_ops,
807 		},
808 	},
809 };
810 
811 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
812 	.halt_reg = 0x3e014,
813 	.halt_check = BRANCH_HALT,
814 	.hwcg_reg = 0x3e014,
815 	.hwcg_bit = 1,
816 	.clkr = {
817 		.enable_reg = 0x3e014,
818 		.enable_mask = BIT(1),
819 		.hw.init = &(struct clk_init_data){
820 			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
821 			.parent_hws = (const struct clk_hw*[]){
822 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
823 			},
824 			.num_parents = 1,
825 			.flags = CLK_SET_RATE_PARENT,
826 			.ops = &clk_branch2_ops,
827 		},
828 	},
829 };
830 
831 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
832 	.halt_reg = 0x3e014,
833 	.halt_check = BRANCH_HALT,
834 	.hwcg_reg = 0x3e014,
835 	.hwcg_bit = 1,
836 	.clkr = {
837 		.enable_reg = 0x3e014,
838 		.enable_mask = BIT(1),
839 		.hw.init = &(struct clk_init_data){
840 			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
841 			.parent_hws = (const struct clk_hw*[]){
842 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
843 			},
844 			.num_parents = 1,
845 			.flags = CLK_SET_RATE_PARENT,
846 			.ops = &clk_branch2_ops,
847 		},
848 	},
849 };
850 
851 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
852 	.halt_reg = 0x3e010,
853 	.halt_check = BRANCH_HALT,
854 	.hwcg_reg = 0x3e010,
855 	.hwcg_bit = 1,
856 	.clkr = {
857 		.enable_reg = 0x3e010,
858 		.enable_mask = BIT(0),
859 		.hw.init = &(struct clk_init_data){
860 			.name = "gcc_aggre_usb3_prim_axi_clk",
861 			.parent_hws = (const struct clk_hw*[]){
862 				&gcc_usb30_prim_master_clk_src.clkr.hw,
863 			},
864 			.num_parents = 1,
865 			.flags = CLK_SET_RATE_PARENT,
866 			.ops = &clk_branch2_ops,
867 		},
868 	},
869 };
870 
871 static struct clk_branch gcc_boot_rom_ahb_clk = {
872 	.halt_reg = 0x26004,
873 	.halt_check = BRANCH_HALT_VOTED,
874 	.hwcg_reg = 0x26004,
875 	.hwcg_bit = 1,
876 	.clkr = {
877 		.enable_reg = 0x52000,
878 		.enable_mask = BIT(28),
879 		.hw.init = &(struct clk_init_data){
880 			.name = "gcc_boot_rom_ahb_clk",
881 			.ops = &clk_branch2_ops,
882 		},
883 	},
884 };
885 
886 static struct clk_branch gcc_camera_ahb_clk = {
887 	.halt_reg = 0x17008,
888 	.halt_check = BRANCH_HALT,
889 	.hwcg_reg = 0x17008,
890 	.hwcg_bit = 1,
891 	.clkr = {
892 		.enable_reg = 0x17008,
893 		.enable_mask = BIT(0),
894 		.hw.init = &(struct clk_init_data){
895 			.name = "gcc_camera_ahb_clk",
896 			.flags = CLK_IS_CRITICAL,
897 			.ops = &clk_branch2_ops,
898 		},
899 	},
900 };
901 
902 static struct clk_branch gcc_camera_axi_clk = {
903 	.halt_reg = 0x17018,
904 	.halt_check = BRANCH_HALT,
905 	.hwcg_reg = 0x17018,
906 	.hwcg_bit = 1,
907 	.clkr = {
908 		.enable_reg = 0x17018,
909 		.enable_mask = BIT(0),
910 		.hw.init = &(struct clk_init_data){
911 			.name = "gcc_camera_axi_clk",
912 			.ops = &clk_branch2_ops,
913 		},
914 	},
915 };
916 
917 static struct clk_branch gcc_camera_throttle_nrt_axi_clk = {
918 	.halt_reg = 0x17078,
919 	.halt_check = BRANCH_VOTED,
920 	.hwcg_reg = 0x17078,
921 	.hwcg_bit = 1,
922 	.clkr = {
923 		.enable_reg = 0x17078,
924 		.enable_mask = BIT(0),
925 		.hw.init = &(struct clk_init_data){
926 			.name = "gcc_camera_throttle_nrt_axi_clk",
927 			.ops = &clk_branch2_ops,
928 		},
929 	},
930 };
931 
932 static struct clk_branch gcc_camera_throttle_rt_axi_clk = {
933 	.halt_reg = 0x17024,
934 	.halt_check = BRANCH_VOTED,
935 	.hwcg_reg = 0x17024,
936 	.hwcg_bit = 1,
937 	.clkr = {
938 		.enable_reg = 0x17024,
939 		.enable_mask = BIT(0),
940 		.hw.init = &(struct clk_init_data){
941 			.name = "gcc_camera_throttle_rt_axi_clk",
942 			.ops = &clk_branch2_ops,
943 		},
944 	},
945 };
946 
947 static struct clk_branch gcc_camera_xo_clk = {
948 	.halt_reg = 0x17030,
949 	.halt_check = BRANCH_HALT,
950 	.clkr = {
951 		.enable_reg = 0x17030,
952 		.enable_mask = BIT(0),
953 		.hw.init = &(struct clk_init_data){
954 			.name = "gcc_camera_xo_clk",
955 			.flags = CLK_IS_CRITICAL,
956 			.ops = &clk_branch2_ops,
957 		},
958 	},
959 };
960 
961 static struct clk_branch gcc_ce1_ahb_clk = {
962 	.halt_reg = 0x2b00c,
963 	.halt_check = BRANCH_HALT_VOTED,
964 	.hwcg_reg = 0x2b00c,
965 	.hwcg_bit = 1,
966 	.clkr = {
967 		.enable_reg = 0x52008,
968 		.enable_mask = BIT(3),
969 		.hw.init = &(struct clk_init_data){
970 			.name = "gcc_ce1_ahb_clk",
971 			.ops = &clk_branch2_ops,
972 		},
973 	},
974 };
975 
976 static struct clk_branch gcc_ce1_axi_clk = {
977 	.halt_reg = 0x2b008,
978 	.halt_check = BRANCH_HALT_VOTED,
979 	.clkr = {
980 		.enable_reg = 0x52008,
981 		.enable_mask = BIT(2),
982 		.hw.init = &(struct clk_init_data){
983 			.name = "gcc_ce1_axi_clk",
984 			.ops = &clk_branch2_ops,
985 		},
986 	},
987 };
988 
989 static struct clk_branch gcc_ce1_clk = {
990 	.halt_reg = 0x2b004,
991 	.halt_check = BRANCH_HALT_VOTED,
992 	.clkr = {
993 		.enable_reg = 0x52008,
994 		.enable_mask = BIT(1),
995 		.hw.init = &(struct clk_init_data){
996 			.name = "gcc_ce1_clk",
997 			.ops = &clk_branch2_ops,
998 		},
999 	},
1000 };
1001 
1002 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1003 	.halt_reg = 0x1101c,
1004 	.halt_check = BRANCH_HALT,
1005 	.hwcg_reg = 0x1101c,
1006 	.hwcg_bit = 1,
1007 	.clkr = {
1008 		.enable_reg = 0x1101c,
1009 		.enable_mask = BIT(0),
1010 		.hw.init = &(struct clk_init_data){
1011 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1012 			.parent_hws = (const struct clk_hw*[]){
1013 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1014 			},
1015 			.num_parents = 1,
1016 			.flags = CLK_SET_RATE_PARENT,
1017 			.ops = &clk_branch2_ops,
1018 		},
1019 	},
1020 };
1021 
1022 static struct clk_branch gcc_cpuss_ahb_clk = {
1023 	.halt_reg = 0x30000,
1024 	.halt_check = BRANCH_HALT_VOTED,
1025 	.hwcg_reg = 0x30000,
1026 	.hwcg_bit = 1,
1027 	.clkr = {
1028 		.enable_reg = 0x52008,
1029 		.enable_mask = BIT(4),
1030 		.hw.init = &(struct clk_init_data){
1031 			.name = "gcc_cpuss_ahb_clk",
1032 			.parent_hws = (const struct clk_hw*[]){
1033 				&gcc_cpuss_ahb_clk_src.clkr.hw,
1034 			},
1035 			.num_parents = 1,
1036 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1037 			.ops = &clk_branch2_ops,
1038 		},
1039 	},
1040 };
1041 
1042 static struct clk_branch gcc_cpuss_gnoc_clk = {
1043 	.halt_reg = 0x30004,
1044 	.halt_check = BRANCH_HALT_VOTED,
1045 	.hwcg_reg = 0x30004,
1046 	.hwcg_bit = 1,
1047 	.clkr = {
1048 		.enable_reg = 0x52008,
1049 		.enable_mask = BIT(5),
1050 		.hw.init = &(struct clk_init_data){
1051 			.name = "gcc_cpuss_gnoc_clk",
1052 			.flags = CLK_IS_CRITICAL,
1053 			.ops = &clk_branch2_ops,
1054 		},
1055 	},
1056 };
1057 
1058 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1059 	.halt_reg = 0x30008,
1060 	.halt_check = BRANCH_HALT,
1061 	.clkr = {
1062 		.enable_reg = 0x30008,
1063 		.enable_mask = BIT(0),
1064 		.hw.init = &(struct clk_init_data){
1065 			.name = "gcc_cpuss_rbcpr_clk",
1066 			.ops = &clk_branch2_ops,
1067 		},
1068 	},
1069 };
1070 
1071 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1072 	.halt_reg = 0x2d038,
1073 	.halt_check = BRANCH_VOTED,
1074 	.hwcg_reg = 0x2d038,
1075 	.hwcg_bit = 1,
1076 	.clkr = {
1077 		.enable_reg = 0x2d038,
1078 		.enable_mask = BIT(0),
1079 		.hw.init = &(struct clk_init_data){
1080 			.name = "gcc_ddrss_gpu_axi_clk",
1081 			.ops = &clk_branch2_ops,
1082 		},
1083 	},
1084 };
1085 
1086 static struct clk_branch gcc_disp_ahb_clk = {
1087 	.halt_reg = 0x1700c,
1088 	.halt_check = BRANCH_HALT,
1089 	.hwcg_reg = 0x1700c,
1090 	.hwcg_bit = 1,
1091 	.clkr = {
1092 		.enable_reg = 0x1700c,
1093 		.enable_mask = BIT(0),
1094 		.hw.init = &(struct clk_init_data){
1095 			.name = "gcc_disp_ahb_clk",
1096 			.flags = CLK_IS_CRITICAL,
1097 			.ops = &clk_branch2_ops,
1098 		},
1099 	},
1100 };
1101 
1102 static struct clk_branch gcc_disp_axi_clk = {
1103 	.halt_reg = 0x1701c,
1104 	.halt_check = BRANCH_HALT,
1105 	.hwcg_reg = 0x1701c,
1106 	.hwcg_bit = 1,
1107 	.clkr = {
1108 		.enable_reg = 0x1701c,
1109 		.enable_mask = BIT(0),
1110 		.hw.init = &(struct clk_init_data){
1111 			.name = "gcc_disp_axi_clk",
1112 			.ops = &clk_branch2_ops,
1113 		},
1114 	},
1115 };
1116 
1117 static struct clk_branch gcc_disp_cc_sleep_clk = {
1118 	.halt_reg = 0x17074,
1119 	.halt_check = BRANCH_HALT_DELAY,
1120 	.hwcg_reg = 0x17074,
1121 	.hwcg_bit = 1,
1122 	.clkr = {
1123 		.enable_reg = 0x17074,
1124 		.enable_mask = BIT(0),
1125 		.hw.init = &(struct clk_init_data){
1126 			.name = "gcc_disp_cc_sleep_clk",
1127 			.ops = &clk_branch2_ops,
1128 		},
1129 	},
1130 };
1131 
1132 static struct clk_branch gcc_disp_cc_xo_clk = {
1133 	.halt_reg = 0x17070,
1134 	.halt_check = BRANCH_HALT,
1135 	.hwcg_reg = 0x17070,
1136 	.hwcg_bit = 1,
1137 	.clkr = {
1138 		.enable_reg = 0x17070,
1139 		.enable_mask = BIT(0),
1140 		.hw.init = &(struct clk_init_data){
1141 			.name = "gcc_disp_cc_xo_clk",
1142 			.flags = CLK_IS_CRITICAL,
1143 			.ops = &clk_branch2_ops,
1144 		},
1145 	},
1146 };
1147 
1148 static struct clk_branch gcc_disp_gpll0_clk = {
1149 	.halt_check = BRANCH_HALT_DELAY,
1150 	.clkr = {
1151 		.enable_reg = 0x52000,
1152 		.enable_mask = BIT(2),
1153 		.hw.init = &(struct clk_init_data){
1154 			.name = "gcc_disp_gpll0_clk",
1155 			.parent_hws = (const struct clk_hw*[]){
1156 				&gpll0.clkr.hw,
1157 			},
1158 			.num_parents = 1,
1159 			.ops = &clk_branch2_ops,
1160 		},
1161 	},
1162 };
1163 
1164 static struct clk_branch gcc_disp_throttle_axi_clk = {
1165 	.halt_reg = 0x17028,
1166 	.halt_check = BRANCH_HALT,
1167 	.hwcg_reg = 0x17028,
1168 	.hwcg_bit = 1,
1169 	.clkr = {
1170 		.enable_reg = 0x17028,
1171 		.enable_mask = BIT(0),
1172 		.hw.init = &(struct clk_init_data){
1173 			.name = "gcc_disp_throttle_axi_clk",
1174 			.ops = &clk_branch2_ops,
1175 		},
1176 	},
1177 };
1178 
1179 static struct clk_branch gcc_disp_xo_clk = {
1180 	.halt_reg = 0x17034,
1181 	.halt_check = BRANCH_HALT,
1182 	.clkr = {
1183 		.enable_reg = 0x17034,
1184 		.enable_mask = BIT(0),
1185 		.hw.init = &(struct clk_init_data){
1186 			.name = "gcc_disp_xo_clk",
1187 			.ops = &clk_branch2_ops,
1188 		},
1189 	},
1190 };
1191 
1192 static struct clk_branch gcc_gp1_clk = {
1193 	.halt_reg = 0x37000,
1194 	.halt_check = BRANCH_HALT,
1195 	.clkr = {
1196 		.enable_reg = 0x37000,
1197 		.enable_mask = BIT(0),
1198 		.hw.init = &(struct clk_init_data){
1199 			.name = "gcc_gp1_clk",
1200 			.parent_hws = (const struct clk_hw*[]){
1201 				&gcc_gp1_clk_src.clkr.hw,
1202 			},
1203 			.num_parents = 1,
1204 			.flags = CLK_SET_RATE_PARENT,
1205 			.ops = &clk_branch2_ops,
1206 		},
1207 	},
1208 };
1209 
1210 static struct clk_branch gcc_gp2_clk = {
1211 	.halt_reg = 0x38000,
1212 	.halt_check = BRANCH_HALT,
1213 	.clkr = {
1214 		.enable_reg = 0x38000,
1215 		.enable_mask = BIT(0),
1216 		.hw.init = &(struct clk_init_data){
1217 			.name = "gcc_gp2_clk",
1218 			.parent_hws = (const struct clk_hw*[]){
1219 				&gcc_gp2_clk_src.clkr.hw,
1220 			},
1221 			.num_parents = 1,
1222 			.flags = CLK_SET_RATE_PARENT,
1223 			.ops = &clk_branch2_ops,
1224 		},
1225 	},
1226 };
1227 
1228 static struct clk_branch gcc_gp3_clk = {
1229 	.halt_reg = 0x39000,
1230 	.halt_check = BRANCH_HALT,
1231 	.clkr = {
1232 		.enable_reg = 0x39000,
1233 		.enable_mask = BIT(0),
1234 		.hw.init = &(struct clk_init_data){
1235 			.name = "gcc_gp3_clk",
1236 			.parent_hws = (const struct clk_hw*[]){
1237 				&gcc_gp3_clk_src.clkr.hw,
1238 			},
1239 			.num_parents = 1,
1240 			.flags = CLK_SET_RATE_PARENT,
1241 			.ops = &clk_branch2_ops,
1242 		},
1243 	},
1244 };
1245 
1246 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1247 	.halt_reg = 0x45004,
1248 	.halt_check = BRANCH_HALT,
1249 	.hwcg_reg = 0x45004,
1250 	.hwcg_bit = 1,
1251 	.clkr = {
1252 		.enable_reg = 0x45004,
1253 		.enable_mask = BIT(0),
1254 		.hw.init = &(struct clk_init_data){
1255 			.name = "gcc_gpu_cfg_ahb_clk",
1256 			.flags = CLK_IS_CRITICAL,
1257 			.ops = &clk_branch2_ops,
1258 		},
1259 	},
1260 };
1261 
1262 static struct clk_branch gcc_gpu_gpll0_clk = {
1263 	.halt_check = BRANCH_HALT_DELAY,
1264 	.clkr = {
1265 		.enable_reg = 0x52008,
1266 		.enable_mask = BIT(7),
1267 		.hw.init = &(struct clk_init_data){
1268 			.name = "gcc_gpu_gpll0_clk",
1269 			.parent_hws = (const struct clk_hw*[]){
1270 				&gpll0.clkr.hw,
1271 			},
1272 			.num_parents = 1,
1273 			.ops = &clk_branch2_ops,
1274 		},
1275 	},
1276 };
1277 
1278 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1279 	.halt_check = BRANCH_HALT_DELAY,
1280 	.clkr = {
1281 		.enable_reg = 0x52008,
1282 		.enable_mask = BIT(8),
1283 		.hw.init = &(struct clk_init_data){
1284 			.name = "gcc_gpu_gpll0_div_clk",
1285 			.parent_hws = (const struct clk_hw*[]){
1286 				&gcc_gpu_gpll0_main_div_clk_src.clkr.hw,
1287 			},
1288 			.num_parents = 1,
1289 			.ops = &clk_branch2_ops,
1290 		},
1291 	},
1292 };
1293 
1294 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1295 	.halt_reg = 0x4500c,
1296 	.halt_check = BRANCH_VOTED,
1297 	.hwcg_reg = 0x4500c,
1298 	.hwcg_bit = 1,
1299 	.clkr = {
1300 		.enable_reg = 0x4500c,
1301 		.enable_mask = BIT(0),
1302 		.hw.init = &(struct clk_init_data){
1303 			.name = "gcc_gpu_memnoc_gfx_clk",
1304 			.ops = &clk_branch2_ops,
1305 		},
1306 	},
1307 };
1308 
1309 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1310 	.halt_reg = 0x45014,
1311 	.halt_check = BRANCH_HALT,
1312 	.hwcg_reg = 0x45014,
1313 	.hwcg_bit = 1,
1314 	.clkr = {
1315 		.enable_reg = 0x45014,
1316 		.enable_mask = BIT(0),
1317 		.hw.init = &(struct clk_init_data){
1318 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1319 			.ops = &clk_branch2_ops,
1320 		},
1321 	},
1322 };
1323 
1324 static struct clk_branch gcc_npu_axi_clk = {
1325 	.halt_reg = 0x4c008,
1326 	.halt_check = BRANCH_VOTED,
1327 	.hwcg_reg = 0x4c008,
1328 	.hwcg_bit = 1,
1329 	.clkr = {
1330 		.enable_reg = 0x4c008,
1331 		.enable_mask = BIT(0),
1332 		.hw.init = &(struct clk_init_data){
1333 			.name = "gcc_npu_axi_clk",
1334 			.ops = &clk_branch2_ops,
1335 		},
1336 	},
1337 };
1338 
1339 static struct clk_branch gcc_npu_bwmon_axi_clk = {
1340 	.halt_reg = 0x4d004,
1341 	.halt_check = BRANCH_HALT_DELAY,
1342 	.hwcg_reg = 0x4d004,
1343 	.hwcg_bit = 1,
1344 	.clkr = {
1345 		.enable_reg = 0x4d004,
1346 		.enable_mask = BIT(0),
1347 		.hw.init = &(struct clk_init_data){
1348 			.name = "gcc_npu_bwmon_axi_clk",
1349 			.ops = &clk_branch2_ops,
1350 		},
1351 	},
1352 };
1353 
1354 static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = {
1355 	.halt_reg = 0x4d008,
1356 	.halt_check = BRANCH_HALT,
1357 	.clkr = {
1358 		.enable_reg = 0x4d008,
1359 		.enable_mask = BIT(0),
1360 		.hw.init = &(struct clk_init_data){
1361 			.name = "gcc_npu_bwmon_dma_cfg_ahb_clk",
1362 			.ops = &clk_branch2_ops,
1363 		},
1364 	},
1365 };
1366 
1367 static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = {
1368 	.halt_reg = 0x4d00c,
1369 	.halt_check = BRANCH_HALT,
1370 	.clkr = {
1371 		.enable_reg = 0x4d00c,
1372 		.enable_mask = BIT(0),
1373 		.hw.init = &(struct clk_init_data){
1374 			.name = "gcc_npu_bwmon_dsp_cfg_ahb_clk",
1375 			.ops = &clk_branch2_ops,
1376 		},
1377 	},
1378 };
1379 
1380 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1381 	.halt_reg = 0x4c004,
1382 	.halt_check = BRANCH_HALT,
1383 	.hwcg_reg = 0x4c004,
1384 	.hwcg_bit = 1,
1385 	.clkr = {
1386 		.enable_reg = 0x4c004,
1387 		.enable_mask = BIT(0),
1388 		.hw.init = &(struct clk_init_data){
1389 			.name = "gcc_npu_cfg_ahb_clk",
1390 			.flags = CLK_IS_CRITICAL,
1391 			.ops = &clk_branch2_ops,
1392 		},
1393 	},
1394 };
1395 
1396 static struct clk_branch gcc_npu_dma_clk = {
1397 	.halt_reg = 0x4c140,
1398 	.halt_check = BRANCH_VOTED,
1399 	.hwcg_reg = 0x4c140,
1400 	.hwcg_bit = 1,
1401 	.clkr = {
1402 		.enable_reg = 0x4c140,
1403 		.enable_mask = BIT(0),
1404 		.hw.init = &(struct clk_init_data){
1405 			.name = "gcc_npu_dma_clk",
1406 			.ops = &clk_branch2_ops,
1407 		},
1408 	},
1409 };
1410 
1411 static struct clk_branch gcc_npu_gpll0_clk = {
1412 	.halt_check = BRANCH_HALT_DELAY,
1413 	.clkr = {
1414 		.enable_reg = 0x52008,
1415 		.enable_mask = BIT(9),
1416 		.hw.init = &(struct clk_init_data){
1417 			.name = "gcc_npu_gpll0_clk",
1418 			.parent_hws = (const struct clk_hw*[]){
1419 				&gpll0.clkr.hw,
1420 			},
1421 			.num_parents = 1,
1422 			.ops = &clk_branch2_ops,
1423 		},
1424 	},
1425 };
1426 
1427 static struct clk_branch gcc_npu_gpll0_div_clk = {
1428 	.halt_check = BRANCH_HALT_DELAY,
1429 	.clkr = {
1430 		.enable_reg = 0x52008,
1431 		.enable_mask = BIT(10),
1432 		.hw.init = &(struct clk_init_data){
1433 			.name = "gcc_npu_gpll0_div_clk",
1434 			.parent_hws = (const struct clk_hw*[]){
1435 				&gcc_npu_pll0_main_div_clk_src.clkr.hw,
1436 			},
1437 			.num_parents = 1,
1438 			.ops = &clk_branch2_ops,
1439 		},
1440 	},
1441 };
1442 
1443 static struct clk_branch gcc_pdm2_clk = {
1444 	.halt_reg = 0x2300c,
1445 	.halt_check = BRANCH_HALT,
1446 	.clkr = {
1447 		.enable_reg = 0x2300c,
1448 		.enable_mask = BIT(0),
1449 		.hw.init = &(struct clk_init_data){
1450 			.name = "gcc_pdm2_clk",
1451 			.parent_hws = (const struct clk_hw*[]){
1452 				&gcc_pdm2_clk_src.clkr.hw,
1453 			},
1454 			.num_parents = 1,
1455 			.flags = CLK_SET_RATE_PARENT,
1456 			.ops = &clk_branch2_ops,
1457 		},
1458 	},
1459 };
1460 
1461 static struct clk_branch gcc_pdm_ahb_clk = {
1462 	.halt_reg = 0x23004,
1463 	.halt_check = BRANCH_HALT,
1464 	.hwcg_reg = 0x23004,
1465 	.hwcg_bit = 1,
1466 	.clkr = {
1467 		.enable_reg = 0x23004,
1468 		.enable_mask = BIT(0),
1469 		.hw.init = &(struct clk_init_data){
1470 			.name = "gcc_pdm_ahb_clk",
1471 			.ops = &clk_branch2_ops,
1472 		},
1473 	},
1474 };
1475 
1476 static struct clk_branch gcc_pdm_xo4_clk = {
1477 	.halt_reg = 0x23008,
1478 	.halt_check = BRANCH_HALT,
1479 	.clkr = {
1480 		.enable_reg = 0x23008,
1481 		.enable_mask = BIT(0),
1482 		.hw.init = &(struct clk_init_data){
1483 			.name = "gcc_pdm_xo4_clk",
1484 			.ops = &clk_branch2_ops,
1485 		},
1486 	},
1487 };
1488 
1489 static struct clk_branch gcc_prng_ahb_clk = {
1490 	.halt_reg = 0x24004,
1491 	.halt_check = BRANCH_HALT_VOTED,
1492 	.hwcg_reg = 0x24004,
1493 	.hwcg_bit = 1,
1494 	.clkr = {
1495 		.enable_reg = 0x52000,
1496 		.enable_mask = BIT(26),
1497 		.hw.init = &(struct clk_init_data){
1498 			.name = "gcc_prng_ahb_clk",
1499 			.ops = &clk_branch2_ops,
1500 		},
1501 	},
1502 };
1503 
1504 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1505 	.halt_reg = 0x21014,
1506 	.halt_check = BRANCH_HALT_VOTED,
1507 	.clkr = {
1508 		.enable_reg = 0x52000,
1509 		.enable_mask = BIT(9),
1510 		.hw.init = &(struct clk_init_data){
1511 			.name = "gcc_qupv3_wrap0_core_2x_clk",
1512 			.ops = &clk_branch2_ops,
1513 		},
1514 	},
1515 };
1516 
1517 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1518 	.halt_reg = 0x2100c,
1519 	.halt_check = BRANCH_HALT_VOTED,
1520 	.clkr = {
1521 		.enable_reg = 0x52000,
1522 		.enable_mask = BIT(8),
1523 		.hw.init = &(struct clk_init_data){
1524 			.name = "gcc_qupv3_wrap0_core_clk",
1525 			.ops = &clk_branch2_ops,
1526 		},
1527 	},
1528 };
1529 
1530 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1531 	.halt_reg = 0x21144,
1532 	.halt_check = BRANCH_HALT_VOTED,
1533 	.clkr = {
1534 		.enable_reg = 0x52000,
1535 		.enable_mask = BIT(10),
1536 		.hw.init = &(struct clk_init_data){
1537 			.name = "gcc_qupv3_wrap0_s0_clk",
1538 			.parent_hws = (const struct clk_hw*[]){
1539 				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1540 			},
1541 			.num_parents = 1,
1542 			.flags = CLK_SET_RATE_PARENT,
1543 			.ops = &clk_branch2_ops,
1544 		},
1545 	},
1546 };
1547 
1548 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1549 	.halt_reg = 0x21274,
1550 	.halt_check = BRANCH_HALT_VOTED,
1551 	.clkr = {
1552 		.enable_reg = 0x52000,
1553 		.enable_mask = BIT(11),
1554 		.hw.init = &(struct clk_init_data){
1555 			.name = "gcc_qupv3_wrap0_s1_clk",
1556 			.parent_hws = (const struct clk_hw*[]){
1557 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1558 			},
1559 			.num_parents = 1,
1560 			.flags = CLK_SET_RATE_PARENT,
1561 			.ops = &clk_branch2_ops,
1562 		},
1563 	},
1564 };
1565 
1566 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1567 	.halt_reg = 0x213a4,
1568 	.halt_check = BRANCH_HALT_VOTED,
1569 	.clkr = {
1570 		.enable_reg = 0x52000,
1571 		.enable_mask = BIT(12),
1572 		.hw.init = &(struct clk_init_data){
1573 			.name = "gcc_qupv3_wrap0_s2_clk",
1574 			.parent_hws = (const struct clk_hw*[]){
1575 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1576 			},
1577 			.num_parents = 1,
1578 			.flags = CLK_SET_RATE_PARENT,
1579 			.ops = &clk_branch2_ops,
1580 		},
1581 	},
1582 };
1583 
1584 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1585 	.halt_reg = 0x214d4,
1586 	.halt_check = BRANCH_HALT_VOTED,
1587 	.clkr = {
1588 		.enable_reg = 0x52000,
1589 		.enable_mask = BIT(13),
1590 		.hw.init = &(struct clk_init_data){
1591 			.name = "gcc_qupv3_wrap0_s3_clk",
1592 			.parent_hws = (const struct clk_hw*[]){
1593 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1594 			},
1595 			.num_parents = 1,
1596 			.flags = CLK_SET_RATE_PARENT,
1597 			.ops = &clk_branch2_ops,
1598 		},
1599 	},
1600 };
1601 
1602 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1603 	.halt_reg = 0x21604,
1604 	.halt_check = BRANCH_HALT_VOTED,
1605 	.clkr = {
1606 		.enable_reg = 0x52000,
1607 		.enable_mask = BIT(14),
1608 		.hw.init = &(struct clk_init_data){
1609 			.name = "gcc_qupv3_wrap0_s4_clk",
1610 			.parent_hws = (const struct clk_hw*[]){
1611 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1612 			},
1613 			.num_parents = 1,
1614 			.flags = CLK_SET_RATE_PARENT,
1615 			.ops = &clk_branch2_ops,
1616 		},
1617 	},
1618 };
1619 
1620 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1621 	.halt_reg = 0x21734,
1622 	.halt_check = BRANCH_HALT_VOTED,
1623 	.clkr = {
1624 		.enable_reg = 0x52000,
1625 		.enable_mask = BIT(15),
1626 		.hw.init = &(struct clk_init_data){
1627 			.name = "gcc_qupv3_wrap0_s5_clk",
1628 			.parent_hws = (const struct clk_hw*[]){
1629 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1630 			},
1631 			.num_parents = 1,
1632 			.flags = CLK_SET_RATE_PARENT,
1633 			.ops = &clk_branch2_ops,
1634 		},
1635 	},
1636 };
1637 
1638 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1639 	.halt_reg = 0x22004,
1640 	.halt_check = BRANCH_HALT_VOTED,
1641 	.clkr = {
1642 		.enable_reg = 0x52000,
1643 		.enable_mask = BIT(16),
1644 		.hw.init = &(struct clk_init_data){
1645 			.name = "gcc_qupv3_wrap1_core_2x_clk",
1646 			.ops = &clk_branch2_ops,
1647 		},
1648 	},
1649 };
1650 
1651 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1652 	.halt_reg = 0x22008,
1653 	.halt_check = BRANCH_HALT_VOTED,
1654 	.clkr = {
1655 		.enable_reg = 0x52000,
1656 		.enable_mask = BIT(17),
1657 		.hw.init = &(struct clk_init_data){
1658 			.name = "gcc_qupv3_wrap1_core_clk",
1659 			.ops = &clk_branch2_ops,
1660 		},
1661 	},
1662 };
1663 
1664 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1665 	.halt_reg = 0x22014,
1666 	.halt_check = BRANCH_HALT_VOTED,
1667 	.clkr = {
1668 		.enable_reg = 0x52000,
1669 		.enable_mask = BIT(20),
1670 		.hw.init = &(struct clk_init_data){
1671 			.name = "gcc_qupv3_wrap1_s0_clk",
1672 			.parent_hws = (const struct clk_hw*[]){
1673 				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1674 			},
1675 			.num_parents = 1,
1676 			.flags = CLK_SET_RATE_PARENT,
1677 			.ops = &clk_branch2_ops,
1678 		},
1679 	},
1680 };
1681 
1682 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1683 	.halt_reg = 0x22144,
1684 	.halt_check = BRANCH_HALT_VOTED,
1685 	.clkr = {
1686 		.enable_reg = 0x52000,
1687 		.enable_mask = BIT(21),
1688 		.hw.init = &(struct clk_init_data){
1689 			.name = "gcc_qupv3_wrap1_s1_clk",
1690 			.parent_hws = (const struct clk_hw*[]){
1691 				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1692 			},
1693 			.num_parents = 1,
1694 			.flags = CLK_SET_RATE_PARENT,
1695 			.ops = &clk_branch2_ops,
1696 		},
1697 	},
1698 };
1699 
1700 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1701 	.halt_reg = 0x22274,
1702 	.halt_check = BRANCH_HALT_VOTED,
1703 	.clkr = {
1704 		.enable_reg = 0x52000,
1705 		.enable_mask = BIT(22),
1706 		.hw.init = &(struct clk_init_data){
1707 			.name = "gcc_qupv3_wrap1_s2_clk",
1708 			.parent_hws = (const struct clk_hw*[]){
1709 				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1710 			},
1711 			.num_parents = 1,
1712 			.flags = CLK_SET_RATE_PARENT,
1713 			.ops = &clk_branch2_ops,
1714 		},
1715 	},
1716 };
1717 
1718 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1719 	.halt_reg = 0x223a4,
1720 	.halt_check = BRANCH_HALT_VOTED,
1721 	.clkr = {
1722 		.enable_reg = 0x52000,
1723 		.enable_mask = BIT(23),
1724 		.hw.init = &(struct clk_init_data){
1725 			.name = "gcc_qupv3_wrap1_s3_clk",
1726 			.parent_hws = (const struct clk_hw*[]){
1727 				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1728 			},
1729 			.num_parents = 1,
1730 			.flags = CLK_SET_RATE_PARENT,
1731 			.ops = &clk_branch2_ops,
1732 		},
1733 	},
1734 };
1735 
1736 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1737 	.halt_reg = 0x224d4,
1738 	.halt_check = BRANCH_HALT_VOTED,
1739 	.clkr = {
1740 		.enable_reg = 0x52000,
1741 		.enable_mask = BIT(24),
1742 		.hw.init = &(struct clk_init_data){
1743 			.name = "gcc_qupv3_wrap1_s4_clk",
1744 			.parent_hws = (const struct clk_hw*[]){
1745 				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1746 			},
1747 			.num_parents = 1,
1748 			.flags = CLK_SET_RATE_PARENT,
1749 			.ops = &clk_branch2_ops,
1750 		},
1751 	},
1752 };
1753 
1754 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1755 	.halt_reg = 0x22604,
1756 	.halt_check = BRANCH_HALT_VOTED,
1757 	.clkr = {
1758 		.enable_reg = 0x52000,
1759 		.enable_mask = BIT(25),
1760 		.hw.init = &(struct clk_init_data){
1761 			.name = "gcc_qupv3_wrap1_s5_clk",
1762 			.parent_hws = (const struct clk_hw*[]){
1763 				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1764 			},
1765 			.num_parents = 1,
1766 			.flags = CLK_SET_RATE_PARENT,
1767 			.ops = &clk_branch2_ops,
1768 		},
1769 	},
1770 };
1771 
1772 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1773 	.halt_reg = 0x21004,
1774 	.halt_check = BRANCH_HALT_VOTED,
1775 	.hwcg_reg = 0x21004,
1776 	.hwcg_bit = 1,
1777 	.clkr = {
1778 		.enable_reg = 0x52000,
1779 		.enable_mask = BIT(6),
1780 		.hw.init = &(struct clk_init_data){
1781 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
1782 			.ops = &clk_branch2_ops,
1783 		},
1784 	},
1785 };
1786 
1787 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
1788 	.halt_reg = 0x21008,
1789 	.halt_check = BRANCH_HALT_VOTED,
1790 	.hwcg_reg = 0x21008,
1791 	.hwcg_bit = 1,
1792 	.clkr = {
1793 		.enable_reg = 0x52000,
1794 		.enable_mask = BIT(7),
1795 		.hw.init = &(struct clk_init_data){
1796 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
1797 			.ops = &clk_branch2_ops,
1798 		},
1799 	},
1800 };
1801 
1802 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
1803 	.halt_reg = 0x2200c,
1804 	.halt_check = BRANCH_HALT_VOTED,
1805 	.hwcg_reg = 0x2200c,
1806 	.hwcg_bit = 1,
1807 	.clkr = {
1808 		.enable_reg = 0x52000,
1809 		.enable_mask = BIT(18),
1810 		.hw.init = &(struct clk_init_data){
1811 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
1812 			.ops = &clk_branch2_ops,
1813 		},
1814 	},
1815 };
1816 
1817 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
1818 	.halt_reg = 0x22010,
1819 	.halt_check = BRANCH_HALT_VOTED,
1820 	.hwcg_reg = 0x22010,
1821 	.hwcg_bit = 1,
1822 	.clkr = {
1823 		.enable_reg = 0x52000,
1824 		.enable_mask = BIT(19),
1825 		.hw.init = &(struct clk_init_data){
1826 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
1827 			.ops = &clk_branch2_ops,
1828 		},
1829 	},
1830 };
1831 
1832 static struct clk_branch gcc_sdcc1_ahb_clk = {
1833 	.halt_reg = 0x4b004,
1834 	.halt_check = BRANCH_HALT,
1835 	.clkr = {
1836 		.enable_reg = 0x4b004,
1837 		.enable_mask = BIT(0),
1838 		.hw.init = &(struct clk_init_data){
1839 			.name = "gcc_sdcc1_ahb_clk",
1840 			.ops = &clk_branch2_ops,
1841 		},
1842 	},
1843 };
1844 
1845 static struct clk_branch gcc_sdcc1_apps_clk = {
1846 	.halt_reg = 0x4b008,
1847 	.halt_check = BRANCH_HALT,
1848 	.clkr = {
1849 		.enable_reg = 0x4b008,
1850 		.enable_mask = BIT(0),
1851 		.hw.init = &(struct clk_init_data){
1852 			.name = "gcc_sdcc1_apps_clk",
1853 			.parent_hws = (const struct clk_hw*[]){
1854 				&gcc_sdcc1_apps_clk_src.clkr.hw,
1855 			},
1856 			.num_parents = 1,
1857 			.flags = CLK_SET_RATE_PARENT,
1858 			.ops = &clk_branch2_ops,
1859 		},
1860 	},
1861 };
1862 
1863 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1864 	.halt_reg = 0x4b03c,
1865 	.halt_check = BRANCH_HALT,
1866 	.hwcg_reg = 0x4b03c,
1867 	.hwcg_bit = 1,
1868 	.clkr = {
1869 		.enable_reg = 0x4b03c,
1870 		.enable_mask = BIT(0),
1871 		.hw.init = &(struct clk_init_data){
1872 			.name = "gcc_sdcc1_ice_core_clk",
1873 			.parent_hws = (const struct clk_hw*[]){
1874 				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
1875 			},
1876 			.num_parents = 1,
1877 			.flags = CLK_SET_RATE_PARENT,
1878 			.ops = &clk_branch2_ops,
1879 		},
1880 	},
1881 };
1882 
1883 static struct clk_branch gcc_sdcc2_ahb_clk = {
1884 	.halt_reg = 0x20008,
1885 	.halt_check = BRANCH_HALT,
1886 	.clkr = {
1887 		.enable_reg = 0x20008,
1888 		.enable_mask = BIT(0),
1889 		.hw.init = &(struct clk_init_data){
1890 			.name = "gcc_sdcc2_ahb_clk",
1891 			.ops = &clk_branch2_ops,
1892 		},
1893 	},
1894 };
1895 
1896 static struct clk_branch gcc_sdcc2_apps_clk = {
1897 	.halt_reg = 0x20004,
1898 	.halt_check = BRANCH_HALT,
1899 	.clkr = {
1900 		.enable_reg = 0x20004,
1901 		.enable_mask = BIT(0),
1902 		.hw.init = &(struct clk_init_data){
1903 			.name = "gcc_sdcc2_apps_clk",
1904 			.parent_hws = (const struct clk_hw*[]){
1905 				&gcc_sdcc2_apps_clk_src.clkr.hw,
1906 			},
1907 			.num_parents = 1,
1908 			.flags = CLK_SET_RATE_PARENT,
1909 			.ops = &clk_branch2_ops,
1910 		},
1911 	},
1912 };
1913 
1914 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
1915 	.halt_reg = 0x10140,
1916 	.halt_check = BRANCH_HALT_VOTED,
1917 	.hwcg_reg = 0x10140,
1918 	.hwcg_bit = 1,
1919 	.clkr = {
1920 		.enable_reg = 0x52000,
1921 		.enable_mask = BIT(0),
1922 		.hw.init = &(struct clk_init_data){
1923 			.name = "gcc_sys_noc_cpuss_ahb_clk",
1924 			.parent_hws = (const struct clk_hw*[]){
1925 				&gcc_cpuss_ahb_clk_src.clkr.hw,
1926 			},
1927 			.num_parents = 1,
1928 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1929 			.ops = &clk_branch2_ops,
1930 		},
1931 	},
1932 };
1933 
1934 static struct clk_branch gcc_ufs_mem_clkref_clk = {
1935 	.halt_reg = 0x8c000,
1936 	.halt_check = BRANCH_HALT,
1937 	.clkr = {
1938 		.enable_reg = 0x8c000,
1939 		.enable_mask = BIT(0),
1940 		.hw.init = &(struct clk_init_data){
1941 			.name = "gcc_ufs_mem_clkref_clk",
1942 			.ops = &clk_branch2_ops,
1943 		},
1944 	},
1945 };
1946 
1947 static struct clk_branch gcc_ufs_phy_ahb_clk = {
1948 	.halt_reg = 0x3a00c,
1949 	.halt_check = BRANCH_HALT,
1950 	.hwcg_reg = 0x3a00c,
1951 	.hwcg_bit = 1,
1952 	.clkr = {
1953 		.enable_reg = 0x3a00c,
1954 		.enable_mask = BIT(0),
1955 		.hw.init = &(struct clk_init_data){
1956 			.name = "gcc_ufs_phy_ahb_clk",
1957 			.ops = &clk_branch2_ops,
1958 		},
1959 	},
1960 };
1961 
1962 static struct clk_branch gcc_ufs_phy_axi_clk = {
1963 	.halt_reg = 0x3a034,
1964 	.halt_check = BRANCH_HALT,
1965 	.hwcg_reg = 0x3a034,
1966 	.hwcg_bit = 1,
1967 	.clkr = {
1968 		.enable_reg = 0x3a034,
1969 		.enable_mask = BIT(0),
1970 		.hw.init = &(struct clk_init_data){
1971 			.name = "gcc_ufs_phy_axi_clk",
1972 			.parent_hws = (const struct clk_hw*[]){
1973 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
1974 			},
1975 			.num_parents = 1,
1976 			.flags = CLK_SET_RATE_PARENT,
1977 			.ops = &clk_branch2_ops,
1978 		},
1979 	},
1980 };
1981 
1982 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
1983 	.halt_reg = 0x3a0a4,
1984 	.halt_check = BRANCH_HALT,
1985 	.hwcg_reg = 0x3a0a4,
1986 	.hwcg_bit = 1,
1987 	.clkr = {
1988 		.enable_reg = 0x3a0a4,
1989 		.enable_mask = BIT(0),
1990 		.hw.init = &(struct clk_init_data){
1991 			.name = "gcc_ufs_phy_ice_core_clk",
1992 			.parent_hws = (const struct clk_hw*[]){
1993 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
1994 			},
1995 			.num_parents = 1,
1996 			.flags = CLK_SET_RATE_PARENT,
1997 			.ops = &clk_branch2_ops,
1998 		},
1999 	},
2000 };
2001 
2002 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2003 	.halt_reg = 0x3a0a4,
2004 	.halt_check = BRANCH_HALT,
2005 	.hwcg_reg = 0x3a0a4,
2006 	.hwcg_bit = 1,
2007 	.clkr = {
2008 		.enable_reg = 0x3a0a4,
2009 		.enable_mask = BIT(1),
2010 		.hw.init = &(struct clk_init_data){
2011 			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2012 			.parent_hws = (const struct clk_hw*[]){
2013 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2014 			},
2015 			.num_parents = 1,
2016 			.flags = CLK_SET_RATE_PARENT,
2017 			.ops = &clk_branch2_ops,
2018 		},
2019 	},
2020 };
2021 
2022 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2023 	.halt_reg = 0x3a0ac,
2024 	.halt_check = BRANCH_HALT,
2025 	.hwcg_reg = 0x3a0ac,
2026 	.hwcg_bit = 1,
2027 	.clkr = {
2028 		.enable_reg = 0x3a0ac,
2029 		.enable_mask = BIT(0),
2030 		.hw.init = &(struct clk_init_data){
2031 			.name = "gcc_ufs_phy_phy_aux_clk",
2032 			.parent_hws = (const struct clk_hw*[]){
2033 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2034 			},
2035 			.num_parents = 1,
2036 			.flags = CLK_SET_RATE_PARENT,
2037 			.ops = &clk_branch2_ops,
2038 		},
2039 	},
2040 };
2041 
2042 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2043 	.halt_reg = 0x3a0ac,
2044 	.halt_check = BRANCH_HALT,
2045 	.hwcg_reg = 0x3a0ac,
2046 	.hwcg_bit = 1,
2047 	.clkr = {
2048 		.enable_reg = 0x3a0ac,
2049 		.enable_mask = BIT(1),
2050 		.hw.init = &(struct clk_init_data){
2051 			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2052 			.parent_hws = (const struct clk_hw*[]){
2053 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2054 			},
2055 			.num_parents = 1,
2056 			.flags = CLK_SET_RATE_PARENT,
2057 			.ops = &clk_branch2_ops,
2058 		},
2059 	},
2060 };
2061 
2062 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2063 	.halt_reg = 0x3a014,
2064 	.halt_check = BRANCH_HALT_SKIP,
2065 	.clkr = {
2066 		.enable_reg = 0x3a014,
2067 		.enable_mask = BIT(0),
2068 		.hw.init = &(struct clk_init_data){
2069 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2070 			.ops = &clk_branch2_ops,
2071 		},
2072 	},
2073 };
2074 
2075 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2076 	.halt_reg = 0x3a018,
2077 	.halt_check = BRANCH_HALT_SKIP,
2078 	.clkr = {
2079 		.enable_reg = 0x3a018,
2080 		.enable_mask = BIT(0),
2081 		.hw.init = &(struct clk_init_data){
2082 			.name = "gcc_ufs_phy_rx_symbol_1_clk",
2083 			.ops = &clk_branch2_ops,
2084 		},
2085 	},
2086 };
2087 
2088 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2089 	.halt_reg = 0x3a010,
2090 	.halt_check = BRANCH_HALT_SKIP,
2091 	.clkr = {
2092 		.enable_reg = 0x3a010,
2093 		.enable_mask = BIT(0),
2094 		.hw.init = &(struct clk_init_data){
2095 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2096 			.ops = &clk_branch2_ops,
2097 		},
2098 	},
2099 };
2100 
2101 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2102 	.halt_reg = 0x3a09c,
2103 	.halt_check = BRANCH_HALT,
2104 	.hwcg_reg = 0x3a09c,
2105 	.hwcg_bit = 1,
2106 	.clkr = {
2107 		.enable_reg = 0x3a09c,
2108 		.enable_mask = BIT(0),
2109 		.hw.init = &(struct clk_init_data){
2110 			.name = "gcc_ufs_phy_unipro_core_clk",
2111 			.parent_hws = (const struct clk_hw*[]){
2112 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2113 			},
2114 			.num_parents = 1,
2115 			.flags = CLK_SET_RATE_PARENT,
2116 			.ops = &clk_branch2_ops,
2117 		},
2118 	},
2119 };
2120 
2121 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2122 	.halt_reg = 0x3a09c,
2123 	.halt_check = BRANCH_HALT,
2124 	.hwcg_reg = 0x3a09c,
2125 	.hwcg_bit = 1,
2126 	.clkr = {
2127 		.enable_reg = 0x3a09c,
2128 		.enable_mask = BIT(1),
2129 		.hw.init = &(struct clk_init_data){
2130 			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2131 			.parent_hws = (const struct clk_hw*[]){
2132 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2133 			},
2134 			.num_parents = 1,
2135 			.flags = CLK_SET_RATE_PARENT,
2136 			.ops = &clk_branch2_ops,
2137 		},
2138 	},
2139 };
2140 
2141 static struct clk_branch gcc_usb30_prim_master_clk = {
2142 	.halt_reg = 0x1a00c,
2143 	.halt_check = BRANCH_HALT,
2144 	.clkr = {
2145 		.enable_reg = 0x1a00c,
2146 		.enable_mask = BIT(0),
2147 		.hw.init = &(struct clk_init_data){
2148 			.name = "gcc_usb30_prim_master_clk",
2149 			.parent_hws = (const struct clk_hw*[]){
2150 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2151 			},
2152 			.num_parents = 1,
2153 			.flags = CLK_SET_RATE_PARENT,
2154 			.ops = &clk_branch2_ops,
2155 		},
2156 	},
2157 };
2158 
2159 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2160 	.halt_reg = 0x1a018,
2161 	.halt_check = BRANCH_HALT,
2162 	.clkr = {
2163 		.enable_reg = 0x1a018,
2164 		.enable_mask = BIT(0),
2165 		.hw.init = &(struct clk_init_data){
2166 			.name = "gcc_usb30_prim_mock_utmi_clk",
2167 			.parent_hws = (const struct clk_hw*[]){
2168 				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2169 			},
2170 			.num_parents = 1,
2171 			.flags = CLK_SET_RATE_PARENT,
2172 			.ops = &clk_branch2_ops,
2173 		},
2174 	},
2175 };
2176 
2177 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2178 	.halt_reg = 0x1a014,
2179 	.halt_check = BRANCH_HALT,
2180 	.clkr = {
2181 		.enable_reg = 0x1a014,
2182 		.enable_mask = BIT(0),
2183 		.hw.init = &(struct clk_init_data){
2184 			.name = "gcc_usb30_prim_sleep_clk",
2185 			.ops = &clk_branch2_ops,
2186 		},
2187 	},
2188 };
2189 
2190 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2191 	.halt_reg = 0x8c010,
2192 	.halt_check = BRANCH_HALT,
2193 	.clkr = {
2194 		.enable_reg = 0x8c010,
2195 		.enable_mask = BIT(0),
2196 		.hw.init = &(struct clk_init_data){
2197 			.name = "gcc_usb3_prim_clkref_clk",
2198 			.ops = &clk_branch2_ops,
2199 		},
2200 	},
2201 };
2202 
2203 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2204 	.halt_reg = 0x1a050,
2205 	.halt_check = BRANCH_HALT,
2206 	.clkr = {
2207 		.enable_reg = 0x1a050,
2208 		.enable_mask = BIT(0),
2209 		.hw.init = &(struct clk_init_data){
2210 			.name = "gcc_usb3_prim_phy_aux_clk",
2211 			.parent_hws = (const struct clk_hw*[]){
2212 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
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_usb3_prim_phy_com_aux_clk = {
2222 	.halt_reg = 0x1a054,
2223 	.halt_check = BRANCH_HALT,
2224 	.clkr = {
2225 		.enable_reg = 0x1a054,
2226 		.enable_mask = BIT(0),
2227 		.hw.init = &(struct clk_init_data){
2228 			.name = "gcc_usb3_prim_phy_com_aux_clk",
2229 			.parent_hws = (const struct clk_hw*[]){
2230 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
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_usb3_prim_phy_pipe_clk = {
2240 	.halt_reg = 0x1a058,
2241 	.halt_check = BRANCH_HALT_SKIP,
2242 	.hwcg_reg = 0x1a058,
2243 	.hwcg_bit = 1,
2244 	.clkr = {
2245 		.enable_reg = 0x1a058,
2246 		.enable_mask = BIT(0),
2247 		.hw.init = &(struct clk_init_data){
2248 			.name = "gcc_usb3_prim_phy_pipe_clk",
2249 			.ops = &clk_branch2_ops,
2250 		},
2251 	},
2252 };
2253 
2254 static struct clk_branch gcc_video_ahb_clk = {
2255 	.halt_reg = 0x17004,
2256 	.halt_check = BRANCH_HALT,
2257 	.hwcg_reg = 0x17004,
2258 	.hwcg_bit = 1,
2259 	.clkr = {
2260 		.enable_reg = 0x17004,
2261 		.enable_mask = BIT(0),
2262 		.hw.init = &(struct clk_init_data){
2263 			.name = "gcc_video_ahb_clk",
2264 			.flags = CLK_IS_CRITICAL,
2265 			.ops = &clk_branch2_ops,
2266 		},
2267 	},
2268 };
2269 
2270 static struct clk_branch gcc_video_axi_clk = {
2271 	.halt_reg = 0x17014,
2272 	.halt_check = BRANCH_HALT,
2273 	.hwcg_reg = 0x17014,
2274 	.hwcg_bit = 1,
2275 	.clkr = {
2276 		.enable_reg = 0x17014,
2277 		.enable_mask = BIT(0),
2278 		.hw.init = &(struct clk_init_data){
2279 			.name = "gcc_video_axi_clk",
2280 			.ops = &clk_branch2_ops,
2281 		},
2282 	},
2283 };
2284 
2285 static struct clk_branch gcc_video_throttle_axi_clk = {
2286 	.halt_reg = 0x17020,
2287 	.halt_check = BRANCH_HALT,
2288 	.hwcg_reg = 0x17020,
2289 	.hwcg_bit = 1,
2290 	.clkr = {
2291 		.enable_reg = 0x17020,
2292 		.enable_mask = BIT(0),
2293 		.hw.init = &(struct clk_init_data){
2294 			.name = "gcc_video_throttle_axi_clk",
2295 			.ops = &clk_branch2_ops,
2296 		},
2297 	},
2298 };
2299 
2300 static struct clk_branch gcc_video_xo_clk = {
2301 	.halt_reg = 0x1702c,
2302 	.halt_check = BRANCH_HALT,
2303 	.clkr = {
2304 		.enable_reg = 0x1702c,
2305 		.enable_mask = BIT(0),
2306 		.hw.init = &(struct clk_init_data){
2307 			.name = "gcc_video_xo_clk",
2308 			.flags = CLK_IS_CRITICAL,
2309 			.ops = &clk_branch2_ops,
2310 		},
2311 	},
2312 };
2313 
2314 static struct gdsc usb30_prim_gdsc = {
2315 	.gdscr = 0x1a004,
2316 	.pd = {
2317 		.name = "usb30_prim_gdsc",
2318 	},
2319 	.pwrsts = PWRSTS_OFF_ON,
2320 };
2321 
2322 static struct gdsc ufs_phy_gdsc = {
2323 	.gdscr = 0x3a004,
2324 	.pd = {
2325 		.name = "ufs_phy_gdsc",
2326 	},
2327 	.pwrsts = PWRSTS_OFF_ON,
2328 };
2329 
2330 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2331 	.gdscr = 0xb7040,
2332 	.pd = {
2333 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2334 	},
2335 	.pwrsts = PWRSTS_OFF_ON,
2336 	.flags = VOTABLE,
2337 };
2338 
2339 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2340 	.gdscr = 0xb7044,
2341 	.pd = {
2342 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2343 	},
2344 	.pwrsts = PWRSTS_OFF_ON,
2345 	.flags = VOTABLE,
2346 };
2347 
2348 static struct clk_regmap *gcc_sm6350_clocks[] = {
2349 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2350 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2351 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2352 	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
2353 	[GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
2354 	[GCC_CAMERA_THROTTLE_NRT_AXI_CLK] =
2355 		&gcc_camera_throttle_nrt_axi_clk.clkr,
2356 	[GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr,
2357 	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
2358 	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2359 	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2360 	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2361 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2362 	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2363 	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2364 	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
2365 	[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2366 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2367 	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
2368 	[GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
2369 	[GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr,
2370 	[GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr,
2371 	[GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr,
2372 	[GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr,
2373 	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
2374 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2375 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2376 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2377 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2378 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2379 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2380 	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2381 	[GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2382 	[GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2383 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2384 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2385 	[GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2386 	[GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr,
2387 	[GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr,
2388 	[GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr,
2389 	[GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2390 	[GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr,
2391 	[GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr,
2392 	[GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr,
2393 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2394 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2395 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2396 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2397 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2398 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2399 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2400 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2401 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2402 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2403 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2404 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2405 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2406 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2407 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2408 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2409 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2410 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2411 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2412 	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2413 	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2414 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2415 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2416 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2417 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2418 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2419 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2420 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2421 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2422 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2423 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2424 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2425 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2426 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2427 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2428 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2429 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2430 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2431 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2432 	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2433 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2434 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2435 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2436 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2437 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2438 	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2439 	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2440 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2441 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2442 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2443 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2444 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2445 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2446 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2447 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2448 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
2449 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2450 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2451 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2452 		&gcc_ufs_phy_unipro_core_clk_src.clkr,
2453 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2454 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2455 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2456 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2457 		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
2458 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2459 	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2460 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2461 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2462 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2463 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2464 	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
2465 	[GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2466 	[GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr,
2467 	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
2468 	[GPLL0] = &gpll0.clkr,
2469 	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2470 	[GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
2471 	[GPLL6] = &gpll6.clkr,
2472 	[GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,
2473 	[GPLL7] = &gpll7.clkr,
2474 	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2475 	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2476 	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2477 				&gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2478 	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2479 				&gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2480 	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2481 				&gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2482 	[GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr,
2483 	[GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr,
2484 };
2485 
2486 static struct gdsc *gcc_sm6350_gdscs[] = {
2487 	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2488 	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
2489 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2490 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2491 };
2492 
2493 static const struct qcom_reset_map gcc_sm6350_resets[] = {
2494 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 },
2495 	[GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 },
2496 	[GCC_SDCC1_BCR] = { 0x4b000 },
2497 	[GCC_SDCC2_BCR] = { 0x20000 },
2498 	[GCC_UFS_PHY_BCR] = { 0x3a000 },
2499 	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
2500 	[GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 },
2501 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 },
2502 };
2503 
2504 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2505 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2506 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2507 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2508 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2509 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2510 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2511 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2512 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2513 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2514 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2515 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2516 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2517 };
2518 
2519 static const struct regmap_config gcc_sm6350_regmap_config = {
2520 	.reg_bits = 32,
2521 	.reg_stride = 4,
2522 	.val_bits = 32,
2523 	.max_register = 0xbf030,
2524 	.fast_io = true,
2525 };
2526 
2527 static const struct qcom_cc_desc gcc_sm6350_desc = {
2528 	.config = &gcc_sm6350_regmap_config,
2529 	.clks = gcc_sm6350_clocks,
2530 	.num_clks = ARRAY_SIZE(gcc_sm6350_clocks),
2531 	.resets = gcc_sm6350_resets,
2532 	.num_resets = ARRAY_SIZE(gcc_sm6350_resets),
2533 	.gdscs = gcc_sm6350_gdscs,
2534 	.num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs),
2535 };
2536 
2537 static const struct of_device_id gcc_sm6350_match_table[] = {
2538 	{ .compatible = "qcom,gcc-sm6350" },
2539 	{ }
2540 };
2541 MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table);
2542 
2543 static int gcc_sm6350_probe(struct platform_device *pdev)
2544 {
2545 	struct regmap *regmap;
2546 	int ret;
2547 
2548 	regmap = qcom_cc_map(pdev, &gcc_sm6350_desc);
2549 	if (IS_ERR(regmap))
2550 		return PTR_ERR(regmap);
2551 
2552 	/* Disable the GPLL0 active input to NPU and GPU via MISC registers */
2553 	regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3);
2554 	regmap_update_bits(regmap, 0x45f00, 0x3, 0x3);
2555 
2556 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2557 			ARRAY_SIZE(gcc_dfs_clocks));
2558 	if (ret)
2559 		return ret;
2560 
2561 	return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);
2562 }
2563 
2564 static struct platform_driver gcc_sm6350_driver = {
2565 	.probe = gcc_sm6350_probe,
2566 	.driver = {
2567 		.name = "gcc-sm6350",
2568 		.of_match_table = gcc_sm6350_match_table,
2569 	},
2570 };
2571 
2572 static int __init gcc_sm6350_init(void)
2573 {
2574 	return platform_driver_register(&gcc_sm6350_driver);
2575 }
2576 core_initcall(gcc_sm6350_init);
2577 
2578 static void __exit gcc_sm6350_exit(void)
2579 {
2580 	platform_driver_unregister(&gcc_sm6350_driver);
2581 }
2582 module_exit(gcc_sm6350_exit);
2583 
2584 MODULE_DESCRIPTION("QTI GCC SM6350 Driver");
2585 MODULE_LICENSE("GPL v2");
2586