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