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