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