xref: /linux/drivers/clk/qcom/gcc-hawi.c (revision 502d45774af09f1c681c754c4b7cdfb5d7f72fd9)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4  */
5 
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/of.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
11 
12 #include <dt-bindings/clock/qcom,hawi-gcc.h>
13 #include <dt-bindings/clock/qcom,maili-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_BI_TCXO_AO,
30 	DT_SLEEP_CLK,
31 	DT_PCIE_0_PIPE_CLK,
32 	DT_PCIE_1_PIPE_CLK,
33 	DT_UFS_PHY_RX_SYMBOL_0_CLK,
34 	DT_UFS_PHY_RX_SYMBOL_1_CLK,
35 	DT_UFS_PHY_TX_SYMBOL_0_CLK,
36 	DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
37 };
38 
39 enum {
40 	P_BI_TCXO,
41 	P_GCC_GPLL0_OUT_EVEN,
42 	P_GCC_GPLL0_OUT_MAIN,
43 	P_GCC_GPLL4_OUT_MAIN,
44 	P_GCC_GPLL5_OUT_MAIN,
45 	P_GCC_GPLL7_OUT_MAIN,
46 	P_GCC_GPLL9_OUT_MAIN,
47 	P_PCIE_0_PIPE_CLK,
48 	P_PCIE_1_PIPE_CLK,
49 	P_SLEEP_CLK,
50 	P_UFS_PHY_RX_SYMBOL_0_CLK,
51 	P_UFS_PHY_RX_SYMBOL_1_CLK,
52 	P_UFS_PHY_TX_SYMBOL_0_CLK,
53 	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
54 };
55 
56 static struct clk_alpha_pll gcc_gpll0 = {
57 	.offset = 0x0,
58 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
59 	.clkr = {
60 		.enable_reg = 0x52028,
61 		.enable_mask = BIT(0),
62 		.hw.init = &(const struct clk_init_data) {
63 			.name = "gcc_gpll0",
64 			.parent_data = &(const struct clk_parent_data) {
65 				.index = DT_BI_TCXO,
66 			},
67 			.num_parents = 1,
68 			.ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
69 		},
70 	},
71 };
72 
73 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
74 	{ 0x1, 2 },
75 	{ }
76 };
77 
78 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
79 	.offset = 0x0,
80 	.post_div_shift = 10,
81 	.post_div_table = post_div_table_gcc_gpll0_out_even,
82 	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
83 	.width = 4,
84 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
85 	.clkr.hw.init = &(const struct clk_init_data) {
86 		.name = "gcc_gpll0_out_even",
87 		.parent_hws = (const struct clk_hw*[]) {
88 			&gcc_gpll0.clkr.hw,
89 		},
90 		.num_parents = 1,
91 		.ops = &clk_alpha_pll_postdiv_taycan_eha_t_ops,
92 	},
93 };
94 
95 static struct clk_alpha_pll gcc_gpll4 = {
96 	.offset = 0x4000,
97 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
98 	.clkr = {
99 		.enable_reg = 0x52028,
100 		.enable_mask = BIT(4),
101 		.hw.init = &(const struct clk_init_data) {
102 			.name = "gcc_gpll4",
103 			.parent_data = &(const struct clk_parent_data) {
104 				.index = DT_BI_TCXO,
105 			},
106 			.num_parents = 1,
107 			.ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
108 		},
109 	},
110 };
111 
112 static struct clk_alpha_pll gcc_gpll5 = {
113 	.offset = 0x5000,
114 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
115 	.clkr = {
116 		.enable_reg = 0x52028,
117 		.enable_mask = BIT(5),
118 		.hw.init = &(const struct clk_init_data) {
119 			.name = "gcc_gpll5",
120 			.parent_data = &(const struct clk_parent_data) {
121 				.index = DT_BI_TCXO,
122 			},
123 			.num_parents = 1,
124 			.ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
125 		},
126 	},
127 };
128 
129 static struct clk_alpha_pll gcc_gpll7 = {
130 	.offset = 0x7000,
131 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
132 	.clkr = {
133 		.enable_reg = 0x52028,
134 		.enable_mask = BIT(7),
135 		.hw.init = &(const struct clk_init_data) {
136 			.name = "gcc_gpll7",
137 			.parent_data = &(const struct clk_parent_data) {
138 				.index = DT_BI_TCXO,
139 			},
140 			.num_parents = 1,
141 			.ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
142 		},
143 	},
144 };
145 
146 static struct clk_alpha_pll gcc_gpll9 = {
147 	.offset = 0x9000,
148 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
149 	.clkr = {
150 		.enable_reg = 0x52028,
151 		.enable_mask = BIT(9),
152 		.hw.init = &(const struct clk_init_data) {
153 			.name = "gcc_gpll9",
154 			.parent_data = &(const struct clk_parent_data) {
155 				.index = DT_BI_TCXO,
156 			},
157 			.num_parents = 1,
158 			.ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
159 		},
160 	},
161 };
162 
163 static const struct parent_map gcc_parent_map_0[] = {
164 	{ P_BI_TCXO, 0 },
165 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
166 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
167 };
168 
169 static const struct clk_parent_data gcc_parent_data_0[] = {
170 	{ .index = DT_BI_TCXO },
171 	{ .hw = &gcc_gpll0.clkr.hw },
172 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
173 };
174 
175 static const struct parent_map gcc_parent_map_1[] = {
176 	{ P_BI_TCXO, 0 },
177 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
178 	{ P_GCC_GPLL7_OUT_MAIN, 2 },
179 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
180 };
181 
182 static const struct clk_parent_data gcc_parent_data_1[] = {
183 	{ .index = DT_BI_TCXO },
184 	{ .hw = &gcc_gpll0.clkr.hw },
185 	{ .hw = &gcc_gpll7.clkr.hw },
186 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
187 };
188 
189 static const struct parent_map gcc_parent_map_2[] = {
190 	{ P_BI_TCXO, 0 },
191 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
192 	{ P_SLEEP_CLK, 5 },
193 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
194 };
195 
196 static const struct clk_parent_data gcc_parent_data_2[] = {
197 	{ .index = DT_BI_TCXO },
198 	{ .hw = &gcc_gpll0.clkr.hw },
199 	{ .index = DT_SLEEP_CLK },
200 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
201 };
202 
203 static const struct parent_map gcc_parent_map_3[] = {
204 	{ P_BI_TCXO, 0 },
205 };
206 
207 static const struct clk_parent_data gcc_parent_data_3[] = {
208 	{ .index = DT_BI_TCXO },
209 };
210 
211 static const struct parent_map gcc_parent_map_4[] = {
212 	{ P_BI_TCXO, 0 },
213 	{ P_SLEEP_CLK, 5 },
214 };
215 
216 static const struct clk_parent_data gcc_parent_data_4[] = {
217 	{ .index = DT_BI_TCXO },
218 	{ .index = DT_SLEEP_CLK },
219 };
220 
221 static const struct parent_map gcc_parent_map_5[] = {
222 	{ P_BI_TCXO, 0 },
223 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
224 	{ P_GCC_GPLL5_OUT_MAIN, 3 },
225 	{ P_GCC_GPLL4_OUT_MAIN, 5 },
226 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
227 };
228 
229 static const struct clk_parent_data gcc_parent_data_5[] = {
230 	{ .index = DT_BI_TCXO },
231 	{ .hw = &gcc_gpll0.clkr.hw },
232 	{ .hw = &gcc_gpll5.clkr.hw },
233 	{ .hw = &gcc_gpll4.clkr.hw },
234 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
235 };
236 
237 static const struct parent_map gcc_parent_map_8[] = {
238 	{ P_BI_TCXO, 0 },
239 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
240 	{ P_GCC_GPLL9_OUT_MAIN, 2 },
241 	{ P_GCC_GPLL4_OUT_MAIN, 5 },
242 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
243 };
244 
245 static const struct clk_parent_data gcc_parent_data_8[] = {
246 	{ .index = DT_BI_TCXO },
247 	{ .hw = &gcc_gpll0.clkr.hw },
248 	{ .hw = &gcc_gpll9.clkr.hw },
249 	{ .hw = &gcc_gpll4.clkr.hw },
250 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
251 };
252 
253 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
254 	.reg = 0x6b0a8,
255 	.clkr = {
256 		.hw.init = &(const struct clk_init_data) {
257 			.name = "gcc_pcie_0_pipe_clk_src",
258 			.parent_data = &(const struct clk_parent_data){
259 				.index = DT_PCIE_0_PIPE_CLK,
260 			},
261 			.num_parents = 1,
262 			.ops = &clk_regmap_phy_mux_ops,
263 		},
264 	},
265 };
266 
267 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
268 	.reg = 0x670a4,
269 	.clkr = {
270 		.hw.init = &(const struct clk_init_data) {
271 			.name = "gcc_pcie_1_pipe_clk_src",
272 			.parent_data = &(const struct clk_parent_data){
273 				.index = DT_PCIE_1_PIPE_CLK,
274 			},
275 			.num_parents = 1,
276 			.ops = &clk_regmap_phy_mux_ops,
277 		},
278 	},
279 };
280 
281 static struct clk_regmap_phy_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
282 	.reg = 0x77068,
283 	.clkr = {
284 		.hw.init = &(const struct clk_init_data) {
285 			.name = "gcc_ufs_phy_rx_symbol_0_clk_src",
286 			.parent_data = &(const struct clk_parent_data){
287 				.index = DT_UFS_PHY_RX_SYMBOL_0_CLK,
288 			},
289 			.num_parents = 1,
290 			.ops = &clk_regmap_phy_mux_ops,
291 		},
292 	},
293 };
294 
295 static struct clk_regmap_phy_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
296 	.reg = 0x770ec,
297 	.clkr = {
298 		.hw.init = &(const struct clk_init_data) {
299 			.name = "gcc_ufs_phy_rx_symbol_1_clk_src",
300 			.parent_data = &(const struct clk_parent_data){
301 				.index = DT_UFS_PHY_RX_SYMBOL_1_CLK,
302 			},
303 			.num_parents = 1,
304 			.ops = &clk_regmap_phy_mux_ops,
305 		},
306 	},
307 };
308 
309 static struct clk_regmap_phy_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
310 	.reg = 0x77058,
311 	.clkr = {
312 		.hw.init = &(const struct clk_init_data) {
313 			.name = "gcc_ufs_phy_tx_symbol_0_clk_src",
314 			.parent_data = &(const struct clk_parent_data){
315 				.index = DT_UFS_PHY_TX_SYMBOL_0_CLK,
316 			},
317 			.num_parents = 1,
318 			.ops = &clk_regmap_phy_mux_ops,
319 		},
320 	},
321 };
322 
323 static struct clk_regmap_phy_mux gcc_usb3_prim_phy_pipe_clk_src = {
324 	.reg = 0x39074,
325 	.clkr = {
326 		.hw.init = &(const struct clk_init_data) {
327 			.name = "gcc_usb3_prim_phy_pipe_clk_src",
328 			.parent_data = &(const struct clk_parent_data){
329 				.index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
330 			},
331 			.num_parents = 1,
332 			.ops = &clk_regmap_phy_mux_ops,
333 		},
334 	},
335 };
336 
337 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
338 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
339 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
340 	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
341 	{ }
342 };
343 
344 static struct clk_rcg2 gcc_gp1_clk_src = {
345 	.cmd_rcgr = 0x64004,
346 	.mnd_width = 16,
347 	.hid_width = 5,
348 	.parent_map = gcc_parent_map_2,
349 	.freq_tbl = ftbl_gcc_gp1_clk_src,
350 	.hw_clk_ctrl = true,
351 	.clkr.hw.init = &(const struct clk_init_data) {
352 		.name = "gcc_gp1_clk_src",
353 		.parent_data = gcc_parent_data_2,
354 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
355 		.flags = CLK_SET_RATE_PARENT,
356 		.ops = &clk_rcg2_shared_no_init_park_ops,
357 	},
358 };
359 
360 static struct clk_rcg2 gcc_gp2_clk_src = {
361 	.cmd_rcgr = 0x65004,
362 	.mnd_width = 16,
363 	.hid_width = 5,
364 	.parent_map = gcc_parent_map_2,
365 	.freq_tbl = ftbl_gcc_gp1_clk_src,
366 	.hw_clk_ctrl = true,
367 	.clkr.hw.init = &(const struct clk_init_data) {
368 		.name = "gcc_gp2_clk_src",
369 		.parent_data = gcc_parent_data_2,
370 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
371 		.flags = CLK_SET_RATE_PARENT,
372 		.ops = &clk_rcg2_shared_no_init_park_ops,
373 	},
374 };
375 
376 static struct clk_rcg2 gcc_gp3_clk_src = {
377 	.cmd_rcgr = 0x66004,
378 	.mnd_width = 16,
379 	.hid_width = 5,
380 	.parent_map = gcc_parent_map_2,
381 	.freq_tbl = ftbl_gcc_gp1_clk_src,
382 	.hw_clk_ctrl = true,
383 	.clkr.hw.init = &(const struct clk_init_data) {
384 		.name = "gcc_gp3_clk_src",
385 		.parent_data = gcc_parent_data_2,
386 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
387 		.flags = CLK_SET_RATE_PARENT,
388 		.ops = &clk_rcg2_shared_no_init_park_ops,
389 	},
390 };
391 
392 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
393 	F(19200000, P_BI_TCXO, 1, 0, 0),
394 	{ }
395 };
396 
397 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
398 	.cmd_rcgr = 0x6b0ac,
399 	.mnd_width = 16,
400 	.hid_width = 5,
401 	.parent_map = gcc_parent_map_4,
402 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
403 	.hw_clk_ctrl = true,
404 	.clkr.hw.init = &(const struct clk_init_data) {
405 		.name = "gcc_pcie_0_aux_clk_src",
406 		.parent_data = gcc_parent_data_4,
407 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
408 		.flags = CLK_SET_RATE_PARENT,
409 		.ops = &clk_rcg2_shared_no_init_park_ops,
410 	},
411 };
412 
413 static struct clk_rcg2 gcc_pcie_0_phy_aux_clk_src = {
414 	.cmd_rcgr = 0x6b0c4,
415 	.mnd_width = 0,
416 	.hid_width = 5,
417 	.parent_map = gcc_parent_map_0,
418 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
419 	.hw_clk_ctrl = true,
420 	.clkr.hw.init = &(const struct clk_init_data) {
421 		.name = "gcc_pcie_0_phy_aux_clk_src",
422 		.parent_data = gcc_parent_data_0,
423 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
424 		.flags = CLK_SET_RATE_PARENT,
425 		.ops = &clk_rcg2_shared_no_init_park_ops,
426 	},
427 };
428 
429 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
430 	F(19200000, P_BI_TCXO, 1, 0, 0),
431 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
432 	{ }
433 };
434 
435 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
436 	.cmd_rcgr = 0x6b08c,
437 	.mnd_width = 0,
438 	.hid_width = 5,
439 	.parent_map = gcc_parent_map_0,
440 	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
441 	.hw_clk_ctrl = true,
442 	.clkr.hw.init = &(const struct clk_init_data) {
443 		.name = "gcc_pcie_0_phy_rchng_clk_src",
444 		.parent_data = gcc_parent_data_0,
445 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
446 		.flags = CLK_SET_RATE_PARENT,
447 		.ops = &clk_rcg2_shared_no_init_park_ops,
448 	},
449 };
450 
451 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
452 	.cmd_rcgr = 0x670a8,
453 	.mnd_width = 16,
454 	.hid_width = 5,
455 	.parent_map = gcc_parent_map_4,
456 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
457 	.hw_clk_ctrl = true,
458 	.clkr.hw.init = &(const struct clk_init_data) {
459 		.name = "gcc_pcie_1_aux_clk_src",
460 		.parent_data = gcc_parent_data_4,
461 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
462 		.flags = CLK_SET_RATE_PARENT,
463 		.ops = &clk_rcg2_shared_no_init_park_ops,
464 	},
465 };
466 
467 static struct clk_rcg2 gcc_pcie_1_phy_aux_clk_src = {
468 	.cmd_rcgr = 0x670c0,
469 	.mnd_width = 0,
470 	.hid_width = 5,
471 	.parent_map = gcc_parent_map_0,
472 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
473 	.hw_clk_ctrl = true,
474 	.clkr.hw.init = &(const struct clk_init_data) {
475 		.name = "gcc_pcie_1_phy_aux_clk_src",
476 		.parent_data = gcc_parent_data_0,
477 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
478 		.flags = CLK_SET_RATE_PARENT,
479 		.ops = &clk_rcg2_shared_no_init_park_ops,
480 	},
481 };
482 
483 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
484 	.cmd_rcgr = 0x67088,
485 	.mnd_width = 0,
486 	.hid_width = 5,
487 	.parent_map = gcc_parent_map_0,
488 	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
489 	.hw_clk_ctrl = true,
490 	.clkr.hw.init = &(const struct clk_init_data) {
491 		.name = "gcc_pcie_1_phy_rchng_clk_src",
492 		.parent_data = gcc_parent_data_0,
493 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
494 		.flags = CLK_SET_RATE_PARENT,
495 		.ops = &clk_rcg2_shared_no_init_park_ops,
496 	},
497 };
498 
499 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
500 	F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
501 	{ }
502 };
503 
504 static struct clk_rcg2 gcc_pdm2_clk_src = {
505 	.cmd_rcgr = 0x33010,
506 	.mnd_width = 0,
507 	.hid_width = 5,
508 	.parent_map = gcc_parent_map_0,
509 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
510 	.hw_clk_ctrl = true,
511 	.clkr.hw.init = &(const struct clk_init_data) {
512 		.name = "gcc_pdm2_clk_src",
513 		.parent_data = gcc_parent_data_0,
514 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
515 		.flags = CLK_SET_RATE_PARENT,
516 		.ops = &clk_rcg2_shared_no_init_park_ops,
517 	},
518 };
519 
520 static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {
521 	.cmd_rcgr = 0x17008,
522 	.mnd_width = 0,
523 	.hid_width = 5,
524 	.parent_map = gcc_parent_map_0,
525 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
526 	.hw_clk_ctrl = true,
527 	.clkr.hw.init = &(const struct clk_init_data) {
528 		.name = "gcc_qupv3_i2c_s0_clk_src",
529 		.parent_data = gcc_parent_data_0,
530 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
531 		.flags = CLK_SET_RATE_PARENT,
532 		.ops = &clk_rcg2_shared_no_init_park_ops,
533 	},
534 };
535 
536 static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {
537 	.cmd_rcgr = 0x17024,
538 	.mnd_width = 0,
539 	.hid_width = 5,
540 	.parent_map = gcc_parent_map_0,
541 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
542 	.hw_clk_ctrl = true,
543 	.clkr.hw.init = &(const struct clk_init_data) {
544 		.name = "gcc_qupv3_i2c_s1_clk_src",
545 		.parent_data = gcc_parent_data_0,
546 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
547 		.flags = CLK_SET_RATE_PARENT,
548 		.ops = &clk_rcg2_shared_no_init_park_ops,
549 	},
550 };
551 
552 static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {
553 	.cmd_rcgr = 0x17040,
554 	.mnd_width = 0,
555 	.hid_width = 5,
556 	.parent_map = gcc_parent_map_0,
557 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
558 	.hw_clk_ctrl = true,
559 	.clkr.hw.init = &(const struct clk_init_data) {
560 		.name = "gcc_qupv3_i2c_s2_clk_src",
561 		.parent_data = gcc_parent_data_0,
562 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
563 		.flags = CLK_SET_RATE_PARENT,
564 		.ops = &clk_rcg2_shared_no_init_park_ops,
565 	},
566 };
567 
568 static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {
569 	.cmd_rcgr = 0x1705c,
570 	.mnd_width = 0,
571 	.hid_width = 5,
572 	.parent_map = gcc_parent_map_0,
573 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
574 	.hw_clk_ctrl = true,
575 	.clkr.hw.init = &(const struct clk_init_data) {
576 		.name = "gcc_qupv3_i2c_s3_clk_src",
577 		.parent_data = gcc_parent_data_0,
578 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
579 		.flags = CLK_SET_RATE_PARENT,
580 		.ops = &clk_rcg2_shared_no_init_park_ops,
581 	},
582 };
583 
584 static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {
585 	.cmd_rcgr = 0x17078,
586 	.mnd_width = 0,
587 	.hid_width = 5,
588 	.parent_map = gcc_parent_map_0,
589 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
590 	.hw_clk_ctrl = true,
591 	.clkr.hw.init = &(const struct clk_init_data) {
592 		.name = "gcc_qupv3_i2c_s4_clk_src",
593 		.parent_data = gcc_parent_data_0,
594 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
595 		.flags = CLK_SET_RATE_PARENT,
596 		.ops = &clk_rcg2_shared_no_init_park_ops,
597 	},
598 };
599 
600 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src[] = {
601 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
602 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
603 	F(19200000, P_BI_TCXO, 1, 0, 0),
604 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
605 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
606 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
607 	F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
608 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
609 	F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
610 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
611 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
612 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
613 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
614 	F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
615 	F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
616 	F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
617 	F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
618 	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
619 	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
620 	{ }
621 };
622 
623 static struct clk_init_data gcc_qupv3_wrap1_qspi_ref_clk_src_init = {
624 	.name = "gcc_qupv3_wrap1_qspi_ref_clk_src",
625 	.parent_data = gcc_parent_data_0,
626 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
627 	.flags = CLK_SET_RATE_PARENT,
628 	.ops = &clk_rcg2_shared_no_init_park_ops,
629 };
630 
631 static struct clk_rcg2 gcc_qupv3_wrap1_qspi_ref_clk_src = {
632 	.cmd_rcgr = 0x188c0,
633 	.mnd_width = 16,
634 	.hid_width = 5,
635 	.parent_map = gcc_parent_map_0,
636 	.freq_tbl = ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src,
637 	.hw_clk_ctrl = true,
638 	.clkr.hw.init = &gcc_qupv3_wrap1_qspi_ref_clk_src_init,
639 };
640 
641 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
642 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
643 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
644 	F(19200000, P_BI_TCXO, 1, 0, 0),
645 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
646 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
647 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
648 	F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
649 	F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
650 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
651 	F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
652 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
653 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
654 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
655 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
656 	{ }
657 };
658 
659 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
660 	.name = "gcc_qupv3_wrap1_s0_clk_src",
661 	.parent_data = gcc_parent_data_0,
662 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
663 	.flags = CLK_SET_RATE_PARENT,
664 	.ops = &clk_rcg2_shared_no_init_park_ops,
665 };
666 
667 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
668 	.cmd_rcgr = 0x18014,
669 	.mnd_width = 16,
670 	.hid_width = 5,
671 	.parent_map = gcc_parent_map_0,
672 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
673 	.hw_clk_ctrl = true,
674 	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
675 };
676 
677 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
678 	.name = "gcc_qupv3_wrap1_s1_clk_src",
679 	.parent_data = gcc_parent_data_0,
680 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
681 	.flags = CLK_SET_RATE_PARENT,
682 	.ops = &clk_rcg2_shared_no_init_park_ops,
683 };
684 
685 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
686 	.cmd_rcgr = 0x18150,
687 	.mnd_width = 16,
688 	.hid_width = 5,
689 	.parent_map = gcc_parent_map_0,
690 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
691 	.hw_clk_ctrl = true,
692 	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
693 };
694 
695 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
696 	.name = "gcc_qupv3_wrap1_s3_clk_src",
697 	.parent_data = gcc_parent_data_0,
698 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
699 	.flags = CLK_SET_RATE_PARENT,
700 	.ops = &clk_rcg2_shared_no_init_park_ops,
701 };
702 
703 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
704 	.cmd_rcgr = 0x182a0,
705 	.mnd_width = 16,
706 	.hid_width = 5,
707 	.parent_map = gcc_parent_map_0,
708 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
709 	.hw_clk_ctrl = true,
710 	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
711 };
712 
713 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s4_clk_src[] = {
714 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
715 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
716 	F(19200000, P_BI_TCXO, 1, 0, 0),
717 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
718 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
719 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
720 	F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
721 	F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
722 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
723 	F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
724 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
725 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
726 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
727 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
728 	F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
729 	F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
730 	F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
731 	F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
732 	{ }
733 };
734 
735 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
736 	.name = "gcc_qupv3_wrap1_s4_clk_src",
737 	.parent_data = gcc_parent_data_0,
738 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
739 	.flags = CLK_SET_RATE_PARENT,
740 	.ops = &clk_rcg2_shared_no_init_park_ops,
741 };
742 
743 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
744 	.cmd_rcgr = 0x183dc,
745 	.mnd_width = 16,
746 	.hid_width = 5,
747 	.parent_map = gcc_parent_map_0,
748 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
749 	.hw_clk_ctrl = true,
750 	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
751 };
752 
753 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
754 	.name = "gcc_qupv3_wrap1_s5_clk_src",
755 	.parent_data = gcc_parent_data_0,
756 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
757 	.flags = CLK_SET_RATE_PARENT,
758 	.ops = &clk_rcg2_shared_no_init_park_ops,
759 };
760 
761 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
762 	.cmd_rcgr = 0x18518,
763 	.mnd_width = 16,
764 	.hid_width = 5,
765 	.parent_map = gcc_parent_map_0,
766 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
767 	.hw_clk_ctrl = true,
768 	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
769 };
770 
771 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
772 	.name = "gcc_qupv3_wrap1_s6_clk_src",
773 	.parent_data = gcc_parent_data_0,
774 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
775 	.flags = CLK_SET_RATE_PARENT,
776 	.ops = &clk_rcg2_shared_no_init_park_ops,
777 };
778 
779 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
780 	.cmd_rcgr = 0x18654,
781 	.mnd_width = 16,
782 	.hid_width = 5,
783 	.parent_map = gcc_parent_map_0,
784 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
785 	.hw_clk_ctrl = true,
786 	.clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
787 };
788 
789 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
790 	.name = "gcc_qupv3_wrap1_s7_clk_src",
791 	.parent_data = gcc_parent_data_0,
792 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
793 	.flags = CLK_SET_RATE_PARENT,
794 	.ops = &clk_rcg2_shared_no_init_park_ops,
795 };
796 
797 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
798 	.cmd_rcgr = 0x18790,
799 	.mnd_width = 16,
800 	.hid_width = 5,
801 	.parent_map = gcc_parent_map_0,
802 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
803 	.hw_clk_ctrl = true,
804 	.clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
805 };
806 
807 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
808 	.name = "gcc_qupv3_wrap2_s0_clk_src",
809 	.parent_data = gcc_parent_data_1,
810 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
811 	.flags = CLK_SET_RATE_PARENT,
812 	.ops = &clk_rcg2_shared_no_init_park_ops,
813 };
814 
815 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
816 	.cmd_rcgr = 0x1e01c,
817 	.mnd_width = 16,
818 	.hid_width = 5,
819 	.parent_map = gcc_parent_map_1,
820 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
821 	.hw_clk_ctrl = true,
822 	.clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
823 };
824 
825 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
826 	.name = "gcc_qupv3_wrap2_s1_clk_src",
827 	.parent_data = gcc_parent_data_1,
828 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
829 	.flags = CLK_SET_RATE_PARENT,
830 	.ops = &clk_rcg2_shared_no_init_park_ops,
831 };
832 
833 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
834 	.cmd_rcgr = 0x1e160,
835 	.mnd_width = 16,
836 	.hid_width = 5,
837 	.parent_map = gcc_parent_map_1,
838 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
839 	.hw_clk_ctrl = true,
840 	.clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
841 };
842 
843 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
844 	.name = "gcc_qupv3_wrap2_s2_clk_src",
845 	.parent_data = gcc_parent_data_0,
846 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
847 	.flags = CLK_SET_RATE_PARENT,
848 	.ops = &clk_rcg2_shared_no_init_park_ops,
849 };
850 
851 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
852 	.cmd_rcgr = 0x1e29c,
853 	.mnd_width = 16,
854 	.hid_width = 5,
855 	.parent_map = gcc_parent_map_0,
856 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
857 	.hw_clk_ctrl = true,
858 	.clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
859 };
860 
861 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
862 	.name = "gcc_qupv3_wrap2_s3_clk_src",
863 	.parent_data = gcc_parent_data_0,
864 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
865 	.flags = CLK_SET_RATE_PARENT,
866 	.ops = &clk_rcg2_shared_no_init_park_ops,
867 };
868 
869 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
870 	.cmd_rcgr = 0x1e3d8,
871 	.mnd_width = 16,
872 	.hid_width = 5,
873 	.parent_map = gcc_parent_map_0,
874 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
875 	.hw_clk_ctrl = true,
876 	.clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
877 };
878 
879 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
880 	.name = "gcc_qupv3_wrap2_s4_clk_src",
881 	.parent_data = gcc_parent_data_0,
882 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
883 	.flags = CLK_SET_RATE_PARENT,
884 	.ops = &clk_rcg2_shared_no_init_park_ops,
885 };
886 
887 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
888 	.cmd_rcgr = 0x1e514,
889 	.mnd_width = 16,
890 	.hid_width = 5,
891 	.parent_map = gcc_parent_map_0,
892 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
893 	.hw_clk_ctrl = true,
894 	.clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
895 };
896 
897 static const struct freq_tbl ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src[] = {
898 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
899 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
900 	F(19200000, P_BI_TCXO, 1, 0, 0),
901 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
902 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
903 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
904 	F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
905 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
906 	F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
907 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
908 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
909 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
910 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
911 	F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
912 	F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
913 	F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
914 	F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
915 	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
916 	F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
917 	{ }
918 };
919 
920 static struct clk_init_data gcc_qupv3_wrap3_qspi_ref_clk_src_init = {
921 	.name = "gcc_qupv3_wrap3_qspi_ref_clk_src",
922 	.parent_data = gcc_parent_data_1,
923 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
924 	.flags = CLK_SET_RATE_PARENT,
925 	.ops = &clk_rcg2_shared_no_init_park_ops,
926 };
927 
928 static struct clk_rcg2 gcc_qupv3_wrap3_qspi_ref_clk_src = {
929 	.cmd_rcgr = 0xa8650,
930 	.mnd_width = 16,
931 	.hid_width = 5,
932 	.parent_map = gcc_parent_map_1,
933 	.freq_tbl = ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src,
934 	.hw_clk_ctrl = true,
935 	.clkr.hw.init = &gcc_qupv3_wrap3_qspi_ref_clk_src_init,
936 };
937 
938 static struct clk_init_data gcc_qupv3_wrap3_s0_clk_src_init = {
939 	.name = "gcc_qupv3_wrap3_s0_clk_src",
940 	.parent_data = gcc_parent_data_0,
941 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
942 	.flags = CLK_SET_RATE_PARENT,
943 	.ops = &clk_rcg2_shared_no_init_park_ops,
944 };
945 
946 static struct clk_rcg2 gcc_qupv3_wrap3_s0_clk_src = {
947 	.cmd_rcgr = 0xa8014,
948 	.mnd_width = 16,
949 	.hid_width = 5,
950 	.parent_map = gcc_parent_map_0,
951 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
952 	.hw_clk_ctrl = true,
953 	.clkr.hw.init = &gcc_qupv3_wrap3_s0_clk_src_init,
954 };
955 
956 static struct clk_init_data gcc_qupv3_wrap3_s2_clk_src_init = {
957 	.name = "gcc_qupv3_wrap3_s2_clk_src",
958 	.parent_data = gcc_parent_data_0,
959 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
960 	.flags = CLK_SET_RATE_PARENT,
961 	.ops = &clk_rcg2_shared_no_init_park_ops,
962 };
963 
964 static struct clk_rcg2 gcc_qupv3_wrap3_s2_clk_src = {
965 	.cmd_rcgr = 0xa8168,
966 	.mnd_width = 16,
967 	.hid_width = 5,
968 	.parent_map = gcc_parent_map_0,
969 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
970 	.hw_clk_ctrl = true,
971 	.clkr.hw.init = &gcc_qupv3_wrap3_s2_clk_src_init,
972 };
973 
974 static struct clk_init_data gcc_qupv3_wrap3_s3_clk_src_init = {
975 	.name = "gcc_qupv3_wrap3_s3_clk_src",
976 	.parent_data = gcc_parent_data_0,
977 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
978 	.flags = CLK_SET_RATE_PARENT,
979 	.ops = &clk_rcg2_shared_no_init_park_ops,
980 };
981 
982 static struct clk_rcg2 gcc_qupv3_wrap3_s3_clk_src = {
983 	.cmd_rcgr = 0xa82a4,
984 	.mnd_width = 16,
985 	.hid_width = 5,
986 	.parent_map = gcc_parent_map_0,
987 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
988 	.hw_clk_ctrl = true,
989 	.clkr.hw.init = &gcc_qupv3_wrap3_s3_clk_src_init,
990 };
991 
992 static struct clk_init_data gcc_qupv3_wrap3_s4_clk_src_init = {
993 	.name = "gcc_qupv3_wrap3_s4_clk_src",
994 	.parent_data = gcc_parent_data_0,
995 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
996 	.flags = CLK_SET_RATE_PARENT,
997 	.ops = &clk_rcg2_shared_no_init_park_ops,
998 };
999 
1000 static struct clk_rcg2 gcc_qupv3_wrap3_s4_clk_src = {
1001 	.cmd_rcgr = 0xa83e0,
1002 	.mnd_width = 16,
1003 	.hid_width = 5,
1004 	.parent_map = gcc_parent_map_0,
1005 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1006 	.hw_clk_ctrl = true,
1007 	.clkr.hw.init = &gcc_qupv3_wrap3_s4_clk_src_init,
1008 };
1009 
1010 static struct clk_init_data gcc_qupv3_wrap3_s5_clk_src_init = {
1011 	.name = "gcc_qupv3_wrap3_s5_clk_src",
1012 	.parent_data = gcc_parent_data_0,
1013 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1014 	.flags = CLK_SET_RATE_PARENT,
1015 	.ops = &clk_rcg2_shared_no_init_park_ops,
1016 };
1017 
1018 static struct clk_rcg2 gcc_qupv3_wrap3_s5_clk_src = {
1019 	.cmd_rcgr = 0xa851c,
1020 	.mnd_width = 16,
1021 	.hid_width = 5,
1022 	.parent_map = gcc_parent_map_0,
1023 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1024 	.hw_clk_ctrl = true,
1025 	.clkr.hw.init = &gcc_qupv3_wrap3_s5_clk_src_init,
1026 };
1027 
1028 static struct clk_init_data gcc_qupv3_wrap4_s0_clk_src_init = {
1029 	.name = "gcc_qupv3_wrap4_s0_clk_src",
1030 	.parent_data = gcc_parent_data_1,
1031 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1032 	.flags = CLK_SET_RATE_PARENT,
1033 	.ops = &clk_rcg2_shared_no_init_park_ops,
1034 };
1035 
1036 static struct clk_rcg2 gcc_qupv3_wrap4_s0_clk_src = {
1037 	.cmd_rcgr = 0xa9014,
1038 	.mnd_width = 16,
1039 	.hid_width = 5,
1040 	.parent_map = gcc_parent_map_1,
1041 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1042 	.hw_clk_ctrl = true,
1043 	.clkr.hw.init = &gcc_qupv3_wrap4_s0_clk_src_init,
1044 };
1045 
1046 static struct clk_init_data gcc_qupv3_wrap4_s1_clk_src_init = {
1047 	.name = "gcc_qupv3_wrap4_s1_clk_src",
1048 	.parent_data = gcc_parent_data_1,
1049 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1050 	.flags = CLK_SET_RATE_PARENT,
1051 	.ops = &clk_rcg2_shared_no_init_park_ops,
1052 };
1053 
1054 static struct clk_rcg2 gcc_qupv3_wrap4_s1_clk_src = {
1055 	.cmd_rcgr = 0xa9150,
1056 	.mnd_width = 16,
1057 	.hid_width = 5,
1058 	.parent_map = gcc_parent_map_1,
1059 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1060 	.hw_clk_ctrl = true,
1061 	.clkr.hw.init = &gcc_qupv3_wrap4_s1_clk_src_init,
1062 };
1063 
1064 static struct clk_init_data gcc_qupv3_wrap4_s2_clk_src_init = {
1065 	.name = "gcc_qupv3_wrap4_s2_clk_src",
1066 	.parent_data = gcc_parent_data_1,
1067 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1068 	.flags = CLK_SET_RATE_PARENT,
1069 	.ops = &clk_rcg2_shared_no_init_park_ops,
1070 };
1071 
1072 static struct clk_rcg2 gcc_qupv3_wrap4_s2_clk_src = {
1073 	.cmd_rcgr = 0xa928c,
1074 	.mnd_width = 16,
1075 	.hid_width = 5,
1076 	.parent_map = gcc_parent_map_1,
1077 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1078 	.hw_clk_ctrl = true,
1079 	.clkr.hw.init = &gcc_qupv3_wrap4_s2_clk_src_init,
1080 };
1081 
1082 static struct clk_init_data gcc_qupv3_wrap4_s3_clk_src_init = {
1083 	.name = "gcc_qupv3_wrap4_s3_clk_src",
1084 	.parent_data = gcc_parent_data_1,
1085 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1086 	.flags = CLK_SET_RATE_PARENT,
1087 	.ops = &clk_rcg2_shared_no_init_park_ops,
1088 };
1089 
1090 static struct clk_rcg2 gcc_qupv3_wrap4_s3_clk_src = {
1091 	.cmd_rcgr = 0xa93c8,
1092 	.mnd_width = 16,
1093 	.hid_width = 5,
1094 	.parent_map = gcc_parent_map_1,
1095 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1096 	.hw_clk_ctrl = true,
1097 	.clkr.hw.init = &gcc_qupv3_wrap4_s3_clk_src_init,
1098 };
1099 
1100 static struct clk_init_data gcc_qupv3_wrap4_s4_clk_src_init = {
1101 	.name = "gcc_qupv3_wrap4_s4_clk_src",
1102 	.parent_data = gcc_parent_data_1,
1103 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1104 	.flags = CLK_SET_RATE_PARENT,
1105 	.ops = &clk_rcg2_shared_no_init_park_ops,
1106 };
1107 
1108 static struct clk_rcg2 gcc_qupv3_wrap4_s4_clk_src = {
1109 	.cmd_rcgr = 0xa9504,
1110 	.mnd_width = 16,
1111 	.hid_width = 5,
1112 	.parent_map = gcc_parent_map_1,
1113 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1114 	.hw_clk_ctrl = true,
1115 	.clkr.hw.init = &gcc_qupv3_wrap4_s4_clk_src_init,
1116 };
1117 
1118 static const struct freq_tbl ftbl_gcc_qupv3_wrap5_qspi_ref_clk_src[] = {
1119 	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
1120 	F(196078431, P_GCC_GPLL0_OUT_EVEN, 1, 100, 153),
1121 	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1122 	{ }
1123 };
1124 
1125 static struct clk_init_data gcc_qupv3_wrap5_qspi_ref_clk_src_init = {
1126 	.name = "gcc_qupv3_wrap5_qspi_ref_clk_src",
1127 	.parent_data = gcc_parent_data_1,
1128 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1129 	.flags = CLK_SET_RATE_PARENT,
1130 	.ops = &clk_rcg2_shared_no_init_park_ops,
1131 };
1132 
1133 static struct clk_rcg2 gcc_qupv3_wrap5_qspi_ref_clk_src = {
1134 	.cmd_rcgr = 0xad024,
1135 	.mnd_width = 16,
1136 	.hid_width = 5,
1137 	.parent_map = gcc_parent_map_1,
1138 	.freq_tbl = ftbl_gcc_qupv3_wrap5_qspi_ref_clk_src,
1139 	.hw_clk_ctrl = true,
1140 	.clkr.hw.init = &gcc_qupv3_wrap5_qspi_ref_clk_src_init,
1141 };
1142 
1143 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1144 	F(400000, P_BI_TCXO, 12, 1, 4),
1145 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1146 	F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1147 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1148 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1149 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1150 	F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1151 	{ }
1152 };
1153 
1154 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1155 	.cmd_rcgr = 0x1401c,
1156 	.mnd_width = 8,
1157 	.hid_width = 5,
1158 	.parent_map = gcc_parent_map_8,
1159 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1160 	.hw_clk_ctrl = true,
1161 	.clkr.hw.init = &(const struct clk_init_data) {
1162 		.name = "gcc_sdcc2_apps_clk_src",
1163 		.parent_data = gcc_parent_data_8,
1164 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
1165 		.flags = CLK_SET_RATE_PARENT,
1166 		.ops = &clk_rcg2_shared_floor_ops,
1167 	},
1168 };
1169 
1170 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1171 	F(400000, P_BI_TCXO, 12, 1, 4),
1172 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1173 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1174 	{ }
1175 };
1176 
1177 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1178 	.cmd_rcgr = 0x1601c,
1179 	.mnd_width = 8,
1180 	.hid_width = 5,
1181 	.parent_map = gcc_parent_map_0,
1182 	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1183 	.hw_clk_ctrl = true,
1184 	.clkr.hw.init = &(const struct clk_init_data) {
1185 		.name = "gcc_sdcc4_apps_clk_src",
1186 		.parent_data = gcc_parent_data_0,
1187 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1188 		.flags = CLK_SET_RATE_PARENT,
1189 		.ops = &clk_rcg2_shared_floor_ops,
1190 	},
1191 };
1192 
1193 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1194 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1195 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1196 	F(225000000, P_GCC_GPLL5_OUT_MAIN, 4, 0, 0),
1197 	F(450000000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
1198 	{ }
1199 };
1200 
1201 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1202 	.cmd_rcgr = 0x77034,
1203 	.mnd_width = 8,
1204 	.hid_width = 5,
1205 	.parent_map = gcc_parent_map_5,
1206 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1207 	.hw_clk_ctrl = true,
1208 	.clkr.hw.init = &(const struct clk_init_data) {
1209 		.name = "gcc_ufs_phy_axi_clk_src",
1210 		.parent_data = gcc_parent_data_5,
1211 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1212 		.flags = CLK_SET_RATE_PARENT,
1213 		.ops = &clk_rcg2_shared_ops,
1214 	},
1215 };
1216 
1217 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1218 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1219 	F(225000000, P_GCC_GPLL5_OUT_MAIN, 4, 0, 0),
1220 	F(450000000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
1221 	{ }
1222 };
1223 
1224 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1225 	.cmd_rcgr = 0x7708c,
1226 	.mnd_width = 0,
1227 	.hid_width = 5,
1228 	.parent_map = gcc_parent_map_5,
1229 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1230 	.hw_clk_ctrl = true,
1231 	.clkr.hw.init = &(const struct clk_init_data) {
1232 		.name = "gcc_ufs_phy_ice_core_clk_src",
1233 		.parent_data = gcc_parent_data_5,
1234 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1235 		.flags = CLK_SET_RATE_PARENT,
1236 		.ops = &clk_rcg2_shared_ops,
1237 	},
1238 };
1239 
1240 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1241 	F(9600000, P_BI_TCXO, 2, 0, 0),
1242 	F(19200000, P_BI_TCXO, 1, 0, 0),
1243 	{ }
1244 };
1245 
1246 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1247 	.cmd_rcgr = 0x770c0,
1248 	.mnd_width = 0,
1249 	.hid_width = 5,
1250 	.parent_map = gcc_parent_map_3,
1251 	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1252 	.hw_clk_ctrl = true,
1253 	.clkr.hw.init = &(const struct clk_init_data) {
1254 		.name = "gcc_ufs_phy_phy_aux_clk_src",
1255 		.parent_data = gcc_parent_data_3,
1256 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1257 		.flags = CLK_SET_RATE_PARENT,
1258 		.ops = &clk_rcg2_shared_ops,
1259 	},
1260 };
1261 
1262 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_5_core_clk_src[] = {
1263 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1264 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1265 	F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
1266 	F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1267 	{ }
1268 };
1269 
1270 static struct clk_rcg2 gcc_ufs_phy_unipro_5_core_clk_src = {
1271 	.cmd_rcgr = 0x770a4,
1272 	.mnd_width = 0,
1273 	.hid_width = 5,
1274 	.parent_map = gcc_parent_map_5,
1275 	.freq_tbl = ftbl_gcc_ufs_phy_unipro_5_core_clk_src,
1276 	.hw_clk_ctrl = true,
1277 	.clkr.hw.init = &(const struct clk_init_data) {
1278 		.name = "gcc_ufs_phy_unipro_5_core_clk_src",
1279 		.parent_data = gcc_parent_data_5,
1280 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1281 		.flags = CLK_SET_RATE_PARENT,
1282 		.ops = &clk_rcg2_shared_ops,
1283 	},
1284 };
1285 
1286 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1287 	F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1288 	F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1289 	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1290 	F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1291 	{ }
1292 };
1293 
1294 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1295 	.cmd_rcgr = 0x39034,
1296 	.mnd_width = 8,
1297 	.hid_width = 5,
1298 	.parent_map = gcc_parent_map_0,
1299 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1300 	.hw_clk_ctrl = true,
1301 	.clkr.hw.init = &(const struct clk_init_data) {
1302 		.name = "gcc_usb30_prim_master_clk_src",
1303 		.parent_data = gcc_parent_data_0,
1304 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1305 		.flags = CLK_SET_RATE_PARENT,
1306 		.ops = &clk_rcg2_shared_no_init_park_ops,
1307 	},
1308 };
1309 
1310 static struct clk_regmap_div gcc_qupv3_wrap5_s0_clk_src = {
1311 	.reg = 0xad018,
1312 	.shift = 0,
1313 	.width = 4,
1314 	.clkr.hw.init = &(const struct clk_init_data) {
1315 		.name = "gcc_qupv3_wrap5_s0_clk_src",
1316 		.parent_hws = (const struct clk_hw*[]) {
1317 			&gcc_qupv3_wrap5_qspi_ref_clk_src.clkr.hw,
1318 		},
1319 		.num_parents = 1,
1320 		.flags = CLK_SET_RATE_PARENT,
1321 		.ops = &clk_regmap_div_ro_ops,
1322 	},
1323 };
1324 
1325 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1326 	.cmd_rcgr = 0x3904c,
1327 	.mnd_width = 0,
1328 	.hid_width = 5,
1329 	.parent_map = gcc_parent_map_0,
1330 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1331 	.hw_clk_ctrl = true,
1332 	.clkr.hw.init = &(const struct clk_init_data) {
1333 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1334 		.parent_data = gcc_parent_data_0,
1335 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1336 		.flags = CLK_SET_RATE_PARENT,
1337 		.ops = &clk_rcg2_shared_no_init_park_ops,
1338 	},
1339 };
1340 
1341 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1342 	.cmd_rcgr = 0x39078,
1343 	.mnd_width = 0,
1344 	.hid_width = 5,
1345 	.parent_map = gcc_parent_map_4,
1346 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1347 	.hw_clk_ctrl = true,
1348 	.clkr.hw.init = &(const struct clk_init_data) {
1349 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1350 		.parent_data = gcc_parent_data_4,
1351 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
1352 		.flags = CLK_SET_RATE_PARENT,
1353 		.ops = &clk_rcg2_shared_no_init_park_ops,
1354 	},
1355 };
1356 
1357 static struct clk_regmap_div gcc_pcie_0_pipe_div_clk_src = {
1358 	.reg = 0x6b0a4,
1359 	.shift = 0,
1360 	.width = 4,
1361 	.clkr.hw.init = &(const struct clk_init_data) {
1362 		.name = "gcc_pcie_0_pipe_div_clk_src",
1363 		.parent_hws = (const struct clk_hw*[]) {
1364 			&gcc_pcie_0_pipe_clk_src.clkr.hw,
1365 		},
1366 		.num_parents = 1,
1367 		.flags = CLK_SET_RATE_PARENT,
1368 		.ops = &clk_regmap_div_ro_ops,
1369 	},
1370 };
1371 
1372 static struct clk_regmap_div gcc_pcie_1_pipe_div_clk_src = {
1373 	.reg = 0x670a0,
1374 	.shift = 0,
1375 	.width = 4,
1376 	.clkr.hw.init = &(const struct clk_init_data) {
1377 		.name = "gcc_pcie_1_pipe_div_clk_src",
1378 		.parent_hws = (const struct clk_hw*[]) {
1379 			&gcc_pcie_1_pipe_clk_src.clkr.hw,
1380 		},
1381 		.num_parents = 1,
1382 		.flags = CLK_SET_RATE_PARENT,
1383 		.ops = &clk_regmap_div_ro_ops,
1384 	},
1385 };
1386 
1387 static struct clk_regmap_div gcc_qupv3_wrap1_s2_clk_src = {
1388 	.reg = 0x1828c,
1389 	.shift = 0,
1390 	.width = 4,
1391 	.clkr.hw.init = &(const struct clk_init_data) {
1392 		.name = "gcc_qupv3_wrap1_s2_clk_src",
1393 		.parent_hws = (const struct clk_hw*[]) {
1394 			&gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
1395 		},
1396 		.num_parents = 1,
1397 		.flags = CLK_SET_RATE_PARENT,
1398 		.ops = &clk_regmap_div_ro_ops,
1399 	},
1400 };
1401 
1402 static struct clk_regmap_div gcc_qupv3_wrap3_s1_clk_src = {
1403 	.reg = 0xa8154,
1404 	.shift = 0,
1405 	.width = 4,
1406 	.clkr.hw.init = &(const struct clk_init_data) {
1407 		.name = "gcc_qupv3_wrap3_s1_clk_src",
1408 		.parent_hws = (const struct clk_hw*[]) {
1409 			&gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
1410 		},
1411 		.num_parents = 1,
1412 		.flags = CLK_SET_RATE_PARENT,
1413 		.ops = &clk_regmap_div_ro_ops,
1414 	},
1415 };
1416 
1417 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1418 	.reg = 0x39064,
1419 	.shift = 0,
1420 	.width = 4,
1421 	.clkr.hw.init = &(const struct clk_init_data) {
1422 		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1423 		.parent_hws = (const struct clk_hw*[]) {
1424 			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1425 		},
1426 		.num_parents = 1,
1427 		.flags = CLK_SET_RATE_PARENT,
1428 		.ops = &clk_regmap_div_ro_ops,
1429 	},
1430 };
1431 
1432 static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {
1433 	.halt_reg = 0x10068,
1434 	.halt_check = BRANCH_HALT_SKIP,
1435 	.hwcg_reg = 0x10068,
1436 	.hwcg_bit = 1,
1437 	.clkr = {
1438 		.enable_reg = 0x52000,
1439 		.enable_mask = BIT(24),
1440 		.hw.init = &(const struct clk_init_data) {
1441 			.name = "gcc_aggre_noc_pcie_axi_clk",
1442 			.ops = &clk_branch2_ops,
1443 		},
1444 	},
1445 };
1446 
1447 static struct clk_branch gcc_aggre_stardustnoc_usb3_prim_axi_clk = {
1448 	.halt_reg = 0x39094,
1449 	.halt_check = BRANCH_HALT_VOTED,
1450 	.hwcg_reg = 0x39094,
1451 	.hwcg_bit = 1,
1452 	.clkr = {
1453 		.enable_reg = 0x39094,
1454 		.enable_mask = BIT(0),
1455 		.hw.init = &(const struct clk_init_data) {
1456 			.name = "gcc_aggre_stardustnoc_usb3_prim_axi_clk",
1457 			.parent_hws = (const struct clk_hw*[]) {
1458 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1459 			},
1460 			.num_parents = 1,
1461 			.flags = CLK_SET_RATE_PARENT,
1462 			.ops = &clk_branch2_ops,
1463 		},
1464 	},
1465 };
1466 
1467 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1468 	.halt_reg = 0x770f0,
1469 	.halt_check = BRANCH_HALT_VOTED,
1470 	.hwcg_reg = 0x770f0,
1471 	.hwcg_bit = 1,
1472 	.clkr = {
1473 		.enable_reg = 0x770f0,
1474 		.enable_mask = BIT(0),
1475 		.hw.init = &(const struct clk_init_data) {
1476 			.name = "gcc_aggre_ufs_phy_axi_clk",
1477 			.parent_hws = (const struct clk_hw*[]) {
1478 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
1479 			},
1480 			.num_parents = 1,
1481 			.flags = CLK_SET_RATE_PARENT,
1482 			.ops = &clk_branch2_ops,
1483 		},
1484 	},
1485 };
1486 
1487 static struct clk_branch gcc_boot_rom_ahb_clk = {
1488 	.halt_reg = 0x38004,
1489 	.halt_check = BRANCH_HALT_VOTED,
1490 	.hwcg_reg = 0x38004,
1491 	.hwcg_bit = 1,
1492 	.clkr = {
1493 		.enable_reg = 0x52010,
1494 		.enable_mask = BIT(18),
1495 		.hw.init = &(const struct clk_init_data) {
1496 			.name = "gcc_boot_rom_ahb_clk",
1497 			.ops = &clk_branch2_ops,
1498 		},
1499 	},
1500 };
1501 
1502 static struct clk_branch gcc_camera_hf_axi_clk = {
1503 	.halt_reg = 0x26014,
1504 	.halt_check = BRANCH_HALT_SKIP,
1505 	.hwcg_reg = 0x26014,
1506 	.hwcg_bit = 1,
1507 	.clkr = {
1508 		.enable_reg = 0x26014,
1509 		.enable_mask = BIT(0),
1510 		.hw.init = &(const struct clk_init_data) {
1511 			.name = "gcc_camera_hf_axi_clk",
1512 			.ops = &clk_branch2_ops,
1513 		},
1514 	},
1515 };
1516 
1517 static struct clk_branch gcc_camera_sf_axi_clk = {
1518 	.halt_reg = 0x2601c,
1519 	.halt_check = BRANCH_HALT_SKIP,
1520 	.hwcg_reg = 0x2601c,
1521 	.hwcg_bit = 1,
1522 	.clkr = {
1523 		.enable_reg = 0x2601c,
1524 		.enable_mask = BIT(0),
1525 		.hw.init = &(const struct clk_init_data) {
1526 			.name = "gcc_camera_sf_axi_clk",
1527 			.ops = &clk_branch2_ops,
1528 		},
1529 	},
1530 };
1531 
1532 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1533 	.halt_reg = 0x10050,
1534 	.halt_check = BRANCH_HALT_SKIP,
1535 	.hwcg_reg = 0x10050,
1536 	.hwcg_bit = 1,
1537 	.clkr = {
1538 		.enable_reg = 0x52000,
1539 		.enable_mask = BIT(20),
1540 		.hw.init = &(const struct clk_init_data) {
1541 			.name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1542 			.ops = &clk_branch2_ops,
1543 		},
1544 	},
1545 };
1546 
1547 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1548 	.halt_reg = 0x39090,
1549 	.halt_check = BRANCH_HALT_VOTED,
1550 	.hwcg_reg = 0x39090,
1551 	.hwcg_bit = 1,
1552 	.clkr = {
1553 		.enable_reg = 0x39090,
1554 		.enable_mask = BIT(0),
1555 		.hw.init = &(const struct clk_init_data) {
1556 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1557 			.parent_hws = (const struct clk_hw*[]) {
1558 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1559 			},
1560 			.num_parents = 1,
1561 			.flags = CLK_SET_RATE_PARENT,
1562 			.ops = &clk_branch2_ops,
1563 		},
1564 	},
1565 };
1566 
1567 static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {
1568 	.halt_reg = 0x10058,
1569 	.halt_check = BRANCH_HALT_VOTED,
1570 	.clkr = {
1571 		.enable_reg = 0x52008,
1572 		.enable_mask = BIT(6),
1573 		.hw.init = &(const struct clk_init_data) {
1574 			.name = "gcc_cnoc_pcie_sf_axi_clk",
1575 			.ops = &clk_branch2_ops,
1576 		},
1577 	},
1578 };
1579 
1580 static struct clk_branch gcc_eva_axi0_clk = {
1581 	.halt_reg = 0x9f008,
1582 	.halt_check = BRANCH_HALT_SKIP,
1583 	.hwcg_reg = 0x9f008,
1584 	.hwcg_bit = 1,
1585 	.clkr = {
1586 		.enable_reg = 0x9f008,
1587 		.enable_mask = BIT(0),
1588 		.hw.init = &(const struct clk_init_data) {
1589 			.name = "gcc_eva_axi0_clk",
1590 			.ops = &clk_branch2_ops,
1591 		},
1592 	},
1593 };
1594 
1595 static struct clk_branch gcc_eva_axi0c_clk = {
1596 	.halt_reg = 0x9f010,
1597 	.halt_check = BRANCH_HALT_SKIP,
1598 	.hwcg_reg = 0x9f010,
1599 	.hwcg_bit = 1,
1600 	.clkr = {
1601 		.enable_reg = 0x9f010,
1602 		.enable_mask = BIT(0),
1603 		.hw.init = &(const struct clk_init_data) {
1604 			.name = "gcc_eva_axi0c_clk",
1605 			.ops = &clk_branch2_ops,
1606 		},
1607 	},
1608 };
1609 
1610 static struct clk_branch gcc_gp1_clk = {
1611 	.halt_reg = 0x64000,
1612 	.halt_check = BRANCH_HALT,
1613 	.clkr = {
1614 		.enable_reg = 0x64000,
1615 		.enable_mask = BIT(0),
1616 		.hw.init = &(const struct clk_init_data) {
1617 			.name = "gcc_gp1_clk",
1618 			.parent_hws = (const struct clk_hw*[]) {
1619 				&gcc_gp1_clk_src.clkr.hw,
1620 			},
1621 			.num_parents = 1,
1622 			.flags = CLK_SET_RATE_PARENT,
1623 			.ops = &clk_branch2_ops,
1624 		},
1625 	},
1626 };
1627 
1628 static struct clk_branch gcc_gp2_clk = {
1629 	.halt_reg = 0x65000,
1630 	.halt_check = BRANCH_HALT,
1631 	.clkr = {
1632 		.enable_reg = 0x65000,
1633 		.enable_mask = BIT(0),
1634 		.hw.init = &(const struct clk_init_data) {
1635 			.name = "gcc_gp2_clk",
1636 			.parent_hws = (const struct clk_hw*[]) {
1637 				&gcc_gp2_clk_src.clkr.hw,
1638 			},
1639 			.num_parents = 1,
1640 			.flags = CLK_SET_RATE_PARENT,
1641 			.ops = &clk_branch2_ops,
1642 		},
1643 	},
1644 };
1645 
1646 static struct clk_branch gcc_gp3_clk = {
1647 	.halt_reg = 0x66000,
1648 	.halt_check = BRANCH_HALT,
1649 	.clkr = {
1650 		.enable_reg = 0x66000,
1651 		.enable_mask = BIT(0),
1652 		.hw.init = &(const struct clk_init_data) {
1653 			.name = "gcc_gp3_clk",
1654 			.parent_hws = (const struct clk_hw*[]) {
1655 				&gcc_gp3_clk_src.clkr.hw,
1656 			},
1657 			.num_parents = 1,
1658 			.flags = CLK_SET_RATE_PARENT,
1659 			.ops = &clk_branch2_ops,
1660 		},
1661 	},
1662 };
1663 
1664 static struct clk_branch gcc_gpu_gemnoc_gfx_clk = {
1665 	.halt_reg = 0x71010,
1666 	.halt_check = BRANCH_HALT_VOTED,
1667 	.hwcg_reg = 0x71010,
1668 	.hwcg_bit = 1,
1669 	.clkr = {
1670 		.enable_reg = 0x71010,
1671 		.enable_mask = BIT(0),
1672 		.hw.init = &(const struct clk_init_data) {
1673 			.name = "gcc_gpu_gemnoc_gfx_clk",
1674 			.ops = &clk_branch2_ops,
1675 		},
1676 	},
1677 };
1678 
1679 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1680 	.halt_check = BRANCH_HALT_DELAY,
1681 	.clkr = {
1682 		.enable_reg = 0x52000,
1683 		.enable_mask = BIT(15),
1684 		.hw.init = &(const struct clk_init_data) {
1685 			.name = "gcc_gpu_gpll0_clk_src",
1686 			.parent_hws = (const struct clk_hw*[]) {
1687 				&gcc_gpll0.clkr.hw,
1688 			},
1689 			.num_parents = 1,
1690 			.flags = CLK_SET_RATE_PARENT,
1691 			.ops = &clk_branch2_ops,
1692 		},
1693 	},
1694 };
1695 
1696 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1697 	.halt_check = BRANCH_HALT_DELAY,
1698 	.clkr = {
1699 		.enable_reg = 0x52000,
1700 		.enable_mask = BIT(16),
1701 		.hw.init = &(const struct clk_init_data) {
1702 			.name = "gcc_gpu_gpll0_div_clk_src",
1703 			.parent_hws = (const struct clk_hw*[]) {
1704 				&gcc_gpll0_out_even.clkr.hw,
1705 			},
1706 			.num_parents = 1,
1707 			.flags = CLK_SET_RATE_PARENT,
1708 			.ops = &clk_branch2_ops,
1709 		},
1710 	},
1711 };
1712 
1713 static struct clk_branch gcc_gpu_smmu_vote_clk = {
1714 	.halt_reg = 0x7d000,
1715 	.halt_check = BRANCH_HALT_VOTED,
1716 	.clkr = {
1717 		.enable_reg = 0x7d000,
1718 		.enable_mask = BIT(0),
1719 		.hw.init = &(const struct clk_init_data) {
1720 			.name = "gcc_gpu_smmu_vote_clk",
1721 			.ops = &clk_branch2_ops,
1722 		},
1723 	},
1724 };
1725 
1726 static struct clk_branch gcc_mmu_tcu_vote_clk = {
1727 	.halt_reg = 0x7d02c,
1728 	.halt_check = BRANCH_HALT_VOTED,
1729 	.clkr = {
1730 		.enable_reg = 0x7d02c,
1731 		.enable_mask = BIT(0),
1732 		.hw.init = &(const struct clk_init_data) {
1733 			.name = "gcc_mmu_tcu_vote_clk",
1734 			.ops = &clk_branch2_ops,
1735 		},
1736 	},
1737 };
1738 
1739 static struct clk_branch gcc_pcie_0_aux_clk = {
1740 	.halt_reg = 0x6b044,
1741 	.halt_check = BRANCH_HALT_VOTED,
1742 	.hwcg_reg = 0x6b044,
1743 	.hwcg_bit = 1,
1744 	.clkr = {
1745 		.enable_reg = 0x52020,
1746 		.enable_mask = BIT(4),
1747 		.hw.init = &(const struct clk_init_data) {
1748 			.name = "gcc_pcie_0_aux_clk",
1749 			.parent_hws = (const struct clk_hw*[]) {
1750 				&gcc_pcie_0_aux_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_pcie_0_cfg_ahb_clk = {
1760 	.halt_reg = 0x6b040,
1761 	.halt_check = BRANCH_HALT_VOTED,
1762 	.hwcg_reg = 0x6b040,
1763 	.hwcg_bit = 1,
1764 	.clkr = {
1765 		.enable_reg = 0x52020,
1766 		.enable_mask = BIT(3),
1767 		.hw.init = &(const struct clk_init_data) {
1768 			.name = "gcc_pcie_0_cfg_ahb_clk",
1769 			.ops = &clk_branch2_ops,
1770 		},
1771 	},
1772 };
1773 
1774 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1775 	.halt_reg = 0x6b030,
1776 	.halt_check = BRANCH_HALT_SKIP,
1777 	.hwcg_reg = 0x6b030,
1778 	.hwcg_bit = 1,
1779 	.clkr = {
1780 		.enable_reg = 0x52020,
1781 		.enable_mask = BIT(2),
1782 		.hw.init = &(const struct clk_init_data) {
1783 			.name = "gcc_pcie_0_mstr_axi_clk",
1784 			.ops = &clk_branch2_ops,
1785 		},
1786 	},
1787 };
1788 
1789 static struct clk_branch gcc_pcie_0_phy_aux_clk = {
1790 	.halt_reg = 0x6b054,
1791 	.halt_check = BRANCH_HALT_VOTED,
1792 	.hwcg_reg = 0x6b054,
1793 	.hwcg_bit = 1,
1794 	.clkr = {
1795 		.enable_reg = 0x52020,
1796 		.enable_mask = BIT(5),
1797 		.hw.init = &(const struct clk_init_data) {
1798 			.name = "gcc_pcie_0_phy_aux_clk",
1799 			.parent_hws = (const struct clk_hw*[]) {
1800 				&gcc_pcie_0_phy_aux_clk_src.clkr.hw,
1801 			},
1802 			.num_parents = 1,
1803 			.flags = CLK_SET_RATE_PARENT,
1804 			.ops = &clk_branch2_ops,
1805 		},
1806 	},
1807 };
1808 
1809 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1810 	.halt_reg = 0x6b084,
1811 	.halt_check = BRANCH_HALT_VOTED,
1812 	.hwcg_reg = 0x6b084,
1813 	.hwcg_bit = 1,
1814 	.clkr = {
1815 		.enable_reg = 0x52020,
1816 		.enable_mask = BIT(8),
1817 		.hw.init = &(const struct clk_init_data) {
1818 			.name = "gcc_pcie_0_phy_rchng_clk",
1819 			.parent_hws = (const struct clk_hw*[]) {
1820 				&gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1821 			},
1822 			.num_parents = 1,
1823 			.flags = CLK_SET_RATE_PARENT,
1824 			.ops = &clk_branch2_ops,
1825 		},
1826 	},
1827 };
1828 
1829 static struct clk_branch gcc_pcie_0_pipe_clk = {
1830 	.halt_reg = 0x6b074,
1831 	.halt_check = BRANCH_HALT_SKIP,
1832 	.hwcg_reg = 0x6b074,
1833 	.hwcg_bit = 1,
1834 	.clkr = {
1835 		.enable_reg = 0x52020,
1836 		.enable_mask = BIT(7),
1837 		.hw.init = &(const struct clk_init_data) {
1838 			.name = "gcc_pcie_0_pipe_clk",
1839 			.parent_hws = (const struct clk_hw*[]) {
1840 				&gcc_pcie_0_pipe_clk_src.clkr.hw,
1841 			},
1842 			.num_parents = 1,
1843 			.flags = CLK_SET_RATE_PARENT,
1844 			.ops = &clk_branch2_ops,
1845 		},
1846 	},
1847 };
1848 
1849 static struct clk_branch gcc_pcie_0_pipe_div2_clk = {
1850 	.halt_reg = 0x6b064,
1851 	.halt_check = BRANCH_HALT_SKIP,
1852 	.hwcg_reg = 0x6b064,
1853 	.hwcg_bit = 1,
1854 	.clkr = {
1855 		.enable_reg = 0x52020,
1856 		.enable_mask = BIT(6),
1857 		.hw.init = &(const struct clk_init_data) {
1858 			.name = "gcc_pcie_0_pipe_div2_clk",
1859 			.parent_hws = (const struct clk_hw*[]) {
1860 				&gcc_pcie_0_pipe_div_clk_src.clkr.hw,
1861 			},
1862 			.num_parents = 1,
1863 			.flags = CLK_SET_RATE_PARENT,
1864 			.ops = &clk_branch2_ops,
1865 		},
1866 	},
1867 };
1868 
1869 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1870 	.halt_reg = 0x6b020,
1871 	.halt_check = BRANCH_HALT_VOTED,
1872 	.hwcg_reg = 0x6b020,
1873 	.hwcg_bit = 1,
1874 	.clkr = {
1875 		.enable_reg = 0x52020,
1876 		.enable_mask = BIT(1),
1877 		.hw.init = &(const struct clk_init_data) {
1878 			.name = "gcc_pcie_0_slv_axi_clk",
1879 			.ops = &clk_branch2_ops,
1880 		},
1881 	},
1882 };
1883 
1884 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1885 	.halt_reg = 0x6b01c,
1886 	.halt_check = BRANCH_HALT_VOTED,
1887 	.hwcg_reg = 0x6b01c,
1888 	.hwcg_bit = 1,
1889 	.clkr = {
1890 		.enable_reg = 0x52020,
1891 		.enable_mask = BIT(0),
1892 		.hw.init = &(const struct clk_init_data) {
1893 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1894 			.ops = &clk_branch2_ops,
1895 		},
1896 	},
1897 };
1898 
1899 static struct clk_branch gcc_pcie_1_aux_clk = {
1900 	.halt_reg = 0x67040,
1901 	.halt_check = BRANCH_HALT_VOTED,
1902 	.clkr = {
1903 		.enable_reg = 0x52010,
1904 		.enable_mask = BIT(10),
1905 		.hw.init = &(const struct clk_init_data) {
1906 			.name = "gcc_pcie_1_aux_clk",
1907 			.parent_hws = (const struct clk_hw*[]) {
1908 				&gcc_pcie_1_aux_clk_src.clkr.hw,
1909 			},
1910 			.num_parents = 1,
1911 			.flags = CLK_SET_RATE_PARENT,
1912 			.ops = &clk_branch2_ops,
1913 		},
1914 	},
1915 };
1916 
1917 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1918 	.halt_reg = 0x6703c,
1919 	.halt_check = BRANCH_HALT_VOTED,
1920 	.hwcg_reg = 0x6703c,
1921 	.hwcg_bit = 1,
1922 	.clkr = {
1923 		.enable_reg = 0x52010,
1924 		.enable_mask = BIT(9),
1925 		.hw.init = &(const struct clk_init_data) {
1926 			.name = "gcc_pcie_1_cfg_ahb_clk",
1927 			.ops = &clk_branch2_ops,
1928 		},
1929 	},
1930 };
1931 
1932 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1933 	.halt_reg = 0x6702c,
1934 	.halt_check = BRANCH_HALT_SKIP,
1935 	.hwcg_reg = 0x6702c,
1936 	.hwcg_bit = 1,
1937 	.clkr = {
1938 		.enable_reg = 0x52008,
1939 		.enable_mask = BIT(17),
1940 		.hw.init = &(const struct clk_init_data) {
1941 			.name = "gcc_pcie_1_mstr_axi_clk",
1942 			.ops = &clk_branch2_ops,
1943 		},
1944 	},
1945 };
1946 
1947 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1948 	.halt_reg = 0x67050,
1949 	.halt_check = BRANCH_HALT_VOTED,
1950 	.clkr = {
1951 		.enable_reg = 0x52010,
1952 		.enable_mask = BIT(14),
1953 		.hw.init = &(const struct clk_init_data) {
1954 			.name = "gcc_pcie_1_phy_aux_clk",
1955 			.parent_hws = (const struct clk_hw*[]) {
1956 				&gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1957 			},
1958 			.num_parents = 1,
1959 			.flags = CLK_SET_RATE_PARENT,
1960 			.ops = &clk_branch2_ops,
1961 		},
1962 	},
1963 };
1964 
1965 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1966 	.halt_reg = 0x67080,
1967 	.halt_check = BRANCH_HALT_VOTED,
1968 	.clkr = {
1969 		.enable_reg = 0x52010,
1970 		.enable_mask = BIT(26),
1971 		.hw.init = &(const struct clk_init_data) {
1972 			.name = "gcc_pcie_1_phy_rchng_clk",
1973 			.parent_hws = (const struct clk_hw*[]) {
1974 				&gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1975 			},
1976 			.num_parents = 1,
1977 			.flags = CLK_SET_RATE_PARENT,
1978 			.ops = &clk_branch2_ops,
1979 		},
1980 	},
1981 };
1982 
1983 static struct clk_branch gcc_pcie_1_pipe_clk = {
1984 	.halt_reg = 0x67070,
1985 	.halt_check = BRANCH_HALT_SKIP,
1986 	.clkr = {
1987 		.enable_reg = 0x52010,
1988 		.enable_mask = BIT(17),
1989 		.hw.init = &(const struct clk_init_data) {
1990 			.name = "gcc_pcie_1_pipe_clk",
1991 			.parent_hws = (const struct clk_hw*[]) {
1992 				&gcc_pcie_1_pipe_clk_src.clkr.hw,
1993 			},
1994 			.num_parents = 1,
1995 			.flags = CLK_SET_RATE_PARENT,
1996 			.ops = &clk_branch2_ops,
1997 		},
1998 	},
1999 };
2000 
2001 static struct clk_branch gcc_pcie_1_pipe_div2_clk = {
2002 	.halt_reg = 0x67060,
2003 	.halt_check = BRANCH_HALT_SKIP,
2004 	.clkr = {
2005 		.enable_reg = 0x52010,
2006 		.enable_mask = BIT(15),
2007 		.hw.init = &(const struct clk_init_data) {
2008 			.name = "gcc_pcie_1_pipe_div2_clk",
2009 			.parent_hws = (const struct clk_hw*[]) {
2010 				&gcc_pcie_1_pipe_div_clk_src.clkr.hw,
2011 			},
2012 			.num_parents = 1,
2013 			.flags = CLK_SET_RATE_PARENT,
2014 			.ops = &clk_branch2_ops,
2015 		},
2016 	},
2017 };
2018 
2019 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2020 	.halt_reg = 0x6701c,
2021 	.halt_check = BRANCH_HALT_VOTED,
2022 	.hwcg_reg = 0x6701c,
2023 	.hwcg_bit = 1,
2024 	.clkr = {
2025 		.enable_reg = 0x52008,
2026 		.enable_mask = BIT(16),
2027 		.hw.init = &(const struct clk_init_data) {
2028 			.name = "gcc_pcie_1_slv_axi_clk",
2029 			.ops = &clk_branch2_ops,
2030 		},
2031 	},
2032 };
2033 
2034 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2035 	.halt_reg = 0x67018,
2036 	.halt_check = BRANCH_HALT_VOTED,
2037 	.clkr = {
2038 		.enable_reg = 0x52008,
2039 		.enable_mask = BIT(15),
2040 		.hw.init = &(const struct clk_init_data) {
2041 			.name = "gcc_pcie_1_slv_q2a_axi_clk",
2042 			.ops = &clk_branch2_ops,
2043 		},
2044 	},
2045 };
2046 
2047 static struct clk_branch gcc_pdm2_clk = {
2048 	.halt_reg = 0x3300c,
2049 	.halt_check = BRANCH_HALT,
2050 	.clkr = {
2051 		.enable_reg = 0x3300c,
2052 		.enable_mask = BIT(0),
2053 		.hw.init = &(const struct clk_init_data) {
2054 			.name = "gcc_pdm2_clk",
2055 			.parent_hws = (const struct clk_hw*[]) {
2056 				&gcc_pdm2_clk_src.clkr.hw,
2057 			},
2058 			.num_parents = 1,
2059 			.flags = CLK_SET_RATE_PARENT,
2060 			.ops = &clk_branch2_ops,
2061 		},
2062 	},
2063 };
2064 
2065 static struct clk_branch gcc_pdm_ahb_clk = {
2066 	.halt_reg = 0x33004,
2067 	.halt_check = BRANCH_HALT_VOTED,
2068 	.hwcg_reg = 0x33004,
2069 	.hwcg_bit = 1,
2070 	.clkr = {
2071 		.enable_reg = 0x33004,
2072 		.enable_mask = BIT(0),
2073 		.hw.init = &(const struct clk_init_data) {
2074 			.name = "gcc_pdm_ahb_clk",
2075 			.ops = &clk_branch2_ops,
2076 		},
2077 	},
2078 };
2079 
2080 static struct clk_branch gcc_pdm_xo4_clk = {
2081 	.halt_reg = 0x33008,
2082 	.halt_check = BRANCH_HALT,
2083 	.clkr = {
2084 		.enable_reg = 0x33008,
2085 		.enable_mask = BIT(0),
2086 		.hw.init = &(const struct clk_init_data) {
2087 			.name = "gcc_pdm_xo4_clk",
2088 			.ops = &clk_branch2_ops,
2089 		},
2090 	},
2091 };
2092 
2093 static struct clk_branch gcc_qupv3_i2c_core_clk = {
2094 	.halt_reg = 0x23004,
2095 	.halt_check = BRANCH_HALT_VOTED,
2096 	.clkr = {
2097 		.enable_reg = 0x52008,
2098 		.enable_mask = BIT(8),
2099 		.hw.init = &(const struct clk_init_data) {
2100 			.name = "gcc_qupv3_i2c_core_clk",
2101 			.ops = &clk_branch2_ops,
2102 		},
2103 	},
2104 };
2105 
2106 static struct clk_branch gcc_qupv3_i2c_s0_clk = {
2107 	.halt_reg = 0x17004,
2108 	.halt_check = BRANCH_HALT_VOTED,
2109 	.clkr = {
2110 		.enable_reg = 0x52008,
2111 		.enable_mask = BIT(10),
2112 		.hw.init = &(const struct clk_init_data) {
2113 			.name = "gcc_qupv3_i2c_s0_clk",
2114 			.parent_hws = (const struct clk_hw*[]) {
2115 				&gcc_qupv3_i2c_s0_clk_src.clkr.hw,
2116 			},
2117 			.num_parents = 1,
2118 			.flags = CLK_SET_RATE_PARENT,
2119 			.ops = &clk_branch2_ops,
2120 		},
2121 	},
2122 };
2123 
2124 static struct clk_branch gcc_qupv3_i2c_s1_clk = {
2125 	.halt_reg = 0x17020,
2126 	.halt_check = BRANCH_HALT_VOTED,
2127 	.clkr = {
2128 		.enable_reg = 0x52008,
2129 		.enable_mask = BIT(11),
2130 		.hw.init = &(const struct clk_init_data) {
2131 			.name = "gcc_qupv3_i2c_s1_clk",
2132 			.parent_hws = (const struct clk_hw*[]) {
2133 				&gcc_qupv3_i2c_s1_clk_src.clkr.hw,
2134 			},
2135 			.num_parents = 1,
2136 			.flags = CLK_SET_RATE_PARENT,
2137 			.ops = &clk_branch2_ops,
2138 		},
2139 	},
2140 };
2141 
2142 static struct clk_branch gcc_qupv3_i2c_s2_clk = {
2143 	.halt_reg = 0x1703c,
2144 	.halt_check = BRANCH_HALT_VOTED,
2145 	.clkr = {
2146 		.enable_reg = 0x52008,
2147 		.enable_mask = BIT(12),
2148 		.hw.init = &(const struct clk_init_data) {
2149 			.name = "gcc_qupv3_i2c_s2_clk",
2150 			.parent_hws = (const struct clk_hw*[]) {
2151 				&gcc_qupv3_i2c_s2_clk_src.clkr.hw,
2152 			},
2153 			.num_parents = 1,
2154 			.flags = CLK_SET_RATE_PARENT,
2155 			.ops = &clk_branch2_ops,
2156 		},
2157 	},
2158 };
2159 
2160 static struct clk_branch gcc_qupv3_i2c_s3_clk = {
2161 	.halt_reg = 0x17058,
2162 	.halt_check = BRANCH_HALT_VOTED,
2163 	.clkr = {
2164 		.enable_reg = 0x52008,
2165 		.enable_mask = BIT(13),
2166 		.hw.init = &(const struct clk_init_data) {
2167 			.name = "gcc_qupv3_i2c_s3_clk",
2168 			.parent_hws = (const struct clk_hw*[]) {
2169 				&gcc_qupv3_i2c_s3_clk_src.clkr.hw,
2170 			},
2171 			.num_parents = 1,
2172 			.flags = CLK_SET_RATE_PARENT,
2173 			.ops = &clk_branch2_ops,
2174 		},
2175 	},
2176 };
2177 
2178 static struct clk_branch gcc_qupv3_i2c_s4_clk = {
2179 	.halt_reg = 0x17074,
2180 	.halt_check = BRANCH_HALT_VOTED,
2181 	.clkr = {
2182 		.enable_reg = 0x52008,
2183 		.enable_mask = BIT(14),
2184 		.hw.init = &(const struct clk_init_data) {
2185 			.name = "gcc_qupv3_i2c_s4_clk",
2186 			.parent_hws = (const struct clk_hw*[]) {
2187 				&gcc_qupv3_i2c_s4_clk_src.clkr.hw,
2188 			},
2189 			.num_parents = 1,
2190 			.flags = CLK_SET_RATE_PARENT,
2191 			.ops = &clk_branch2_ops,
2192 		},
2193 	},
2194 };
2195 
2196 static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {
2197 	.halt_reg = 0x23000,
2198 	.halt_check = BRANCH_HALT_VOTED,
2199 	.hwcg_reg = 0x23000,
2200 	.hwcg_bit = 1,
2201 	.clkr = {
2202 		.enable_reg = 0x52008,
2203 		.enable_mask = BIT(7),
2204 		.hw.init = &(const struct clk_init_data) {
2205 			.name = "gcc_qupv3_i2c_s_ahb_clk",
2206 			.ops = &clk_branch2_ops,
2207 		},
2208 	},
2209 };
2210 
2211 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2212 	.halt_reg = 0x2315c,
2213 	.halt_check = BRANCH_HALT_VOTED,
2214 	.clkr = {
2215 		.enable_reg = 0x52008,
2216 		.enable_mask = BIT(18),
2217 		.hw.init = &(const struct clk_init_data) {
2218 			.name = "gcc_qupv3_wrap1_core_2x_clk",
2219 			.ops = &clk_branch2_ops,
2220 		},
2221 	},
2222 };
2223 
2224 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2225 	.halt_reg = 0x23148,
2226 	.halt_check = BRANCH_HALT_VOTED,
2227 	.clkr = {
2228 		.enable_reg = 0x52008,
2229 		.enable_mask = BIT(19),
2230 		.hw.init = &(const struct clk_init_data) {
2231 			.name = "gcc_qupv3_wrap1_core_clk",
2232 			.ops = &clk_branch2_ops,
2233 		},
2234 	},
2235 };
2236 
2237 static struct clk_branch gcc_qupv3_wrap1_qspi_ref_clk = {
2238 	.halt_reg = 0x188bc,
2239 	.halt_check = BRANCH_HALT_VOTED,
2240 	.clkr = {
2241 		.enable_reg = 0x52010,
2242 		.enable_mask = BIT(29),
2243 		.hw.init = &(const struct clk_init_data) {
2244 			.name = "gcc_qupv3_wrap1_qspi_ref_clk",
2245 			.parent_hws = (const struct clk_hw*[]) {
2246 				&gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
2247 			},
2248 			.num_parents = 1,
2249 			.flags = CLK_SET_RATE_PARENT,
2250 			.ops = &clk_branch2_ops,
2251 		},
2252 	},
2253 };
2254 
2255 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2256 	.halt_reg = 0x18004,
2257 	.halt_check = BRANCH_HALT_VOTED,
2258 	.clkr = {
2259 		.enable_reg = 0x52008,
2260 		.enable_mask = BIT(22),
2261 		.hw.init = &(const struct clk_init_data) {
2262 			.name = "gcc_qupv3_wrap1_s0_clk",
2263 			.parent_hws = (const struct clk_hw*[]) {
2264 				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2265 			},
2266 			.num_parents = 1,
2267 			.flags = CLK_SET_RATE_PARENT,
2268 			.ops = &clk_branch2_ops,
2269 		},
2270 	},
2271 };
2272 
2273 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2274 	.halt_reg = 0x18140,
2275 	.halt_check = BRANCH_HALT_VOTED,
2276 	.clkr = {
2277 		.enable_reg = 0x52008,
2278 		.enable_mask = BIT(23),
2279 		.hw.init = &(const struct clk_init_data) {
2280 			.name = "gcc_qupv3_wrap1_s1_clk",
2281 			.parent_hws = (const struct clk_hw*[]) {
2282 				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2283 			},
2284 			.num_parents = 1,
2285 			.flags = CLK_SET_RATE_PARENT,
2286 			.ops = &clk_branch2_ops,
2287 		},
2288 	},
2289 };
2290 
2291 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2292 	.halt_reg = 0x1827c,
2293 	.halt_check = BRANCH_HALT_VOTED,
2294 	.clkr = {
2295 		.enable_reg = 0x52008,
2296 		.enable_mask = BIT(24),
2297 		.hw.init = &(const struct clk_init_data) {
2298 			.name = "gcc_qupv3_wrap1_s2_clk",
2299 			.parent_hws = (const struct clk_hw*[]) {
2300 				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2301 			},
2302 			.num_parents = 1,
2303 			.flags = CLK_SET_RATE_PARENT,
2304 			.ops = &clk_branch2_ops,
2305 		},
2306 	},
2307 };
2308 
2309 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2310 	.halt_reg = 0x18290,
2311 	.halt_check = BRANCH_HALT_VOTED,
2312 	.clkr = {
2313 		.enable_reg = 0x52008,
2314 		.enable_mask = BIT(25),
2315 		.hw.init = &(const struct clk_init_data) {
2316 			.name = "gcc_qupv3_wrap1_s3_clk",
2317 			.parent_hws = (const struct clk_hw*[]) {
2318 				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2319 			},
2320 			.num_parents = 1,
2321 			.flags = CLK_SET_RATE_PARENT,
2322 			.ops = &clk_branch2_ops,
2323 		},
2324 	},
2325 };
2326 
2327 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2328 	.halt_reg = 0x183cc,
2329 	.halt_check = BRANCH_HALT_VOTED,
2330 	.clkr = {
2331 		.enable_reg = 0x52008,
2332 		.enable_mask = BIT(26),
2333 		.hw.init = &(const struct clk_init_data) {
2334 			.name = "gcc_qupv3_wrap1_s4_clk",
2335 			.parent_hws = (const struct clk_hw*[]) {
2336 				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2337 			},
2338 			.num_parents = 1,
2339 			.flags = CLK_SET_RATE_PARENT,
2340 			.ops = &clk_branch2_ops,
2341 		},
2342 	},
2343 };
2344 
2345 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2346 	.halt_reg = 0x18508,
2347 	.halt_check = BRANCH_HALT_VOTED,
2348 	.clkr = {
2349 		.enable_reg = 0x52008,
2350 		.enable_mask = BIT(27),
2351 		.hw.init = &(const struct clk_init_data) {
2352 			.name = "gcc_qupv3_wrap1_s5_clk",
2353 			.parent_hws = (const struct clk_hw*[]) {
2354 				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2355 			},
2356 			.num_parents = 1,
2357 			.flags = CLK_SET_RATE_PARENT,
2358 			.ops = &clk_branch2_ops,
2359 		},
2360 	},
2361 };
2362 
2363 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2364 	.halt_reg = 0x18644,
2365 	.halt_check = BRANCH_HALT_VOTED,
2366 	.clkr = {
2367 		.enable_reg = 0x52008,
2368 		.enable_mask = BIT(28),
2369 		.hw.init = &(const struct clk_init_data) {
2370 			.name = "gcc_qupv3_wrap1_s6_clk",
2371 			.parent_hws = (const struct clk_hw*[]) {
2372 				&gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2373 			},
2374 			.num_parents = 1,
2375 			.flags = CLK_SET_RATE_PARENT,
2376 			.ops = &clk_branch2_ops,
2377 		},
2378 	},
2379 };
2380 
2381 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2382 	.halt_reg = 0x18780,
2383 	.halt_check = BRANCH_HALT_VOTED,
2384 	.clkr = {
2385 		.enable_reg = 0x52010,
2386 		.enable_mask = BIT(16),
2387 		.hw.init = &(const struct clk_init_data) {
2388 			.name = "gcc_qupv3_wrap1_s7_clk",
2389 			.parent_hws = (const struct clk_hw*[]) {
2390 				&gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2391 			},
2392 			.num_parents = 1,
2393 			.flags = CLK_SET_RATE_PARENT,
2394 			.ops = &clk_branch2_ops,
2395 		},
2396 	},
2397 };
2398 
2399 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2400 	.halt_reg = 0x232b4,
2401 	.halt_check = BRANCH_HALT_VOTED,
2402 	.clkr = {
2403 		.enable_reg = 0x52010,
2404 		.enable_mask = BIT(3),
2405 		.hw.init = &(const struct clk_init_data) {
2406 			.name = "gcc_qupv3_wrap2_core_2x_clk",
2407 			.ops = &clk_branch2_ops,
2408 		},
2409 	},
2410 };
2411 
2412 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2413 	.halt_reg = 0x232a0,
2414 	.halt_check = BRANCH_HALT_VOTED,
2415 	.clkr = {
2416 		.enable_reg = 0x52010,
2417 		.enable_mask = BIT(0),
2418 		.hw.init = &(const struct clk_init_data) {
2419 			.name = "gcc_qupv3_wrap2_core_clk",
2420 			.ops = &clk_branch2_ops,
2421 		},
2422 	},
2423 };
2424 
2425 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2426 	.halt_reg = 0x1e004,
2427 	.halt_check = BRANCH_HALT_VOTED,
2428 	.clkr = {
2429 		.enable_reg = 0x52010,
2430 		.enable_mask = BIT(4),
2431 		.hw.init = &(const struct clk_init_data) {
2432 			.name = "gcc_qupv3_wrap2_s0_clk",
2433 			.parent_hws = (const struct clk_hw*[]) {
2434 				&gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2435 			},
2436 			.num_parents = 1,
2437 			.flags = CLK_SET_RATE_PARENT,
2438 			.ops = &clk_branch2_ops,
2439 		},
2440 	},
2441 };
2442 
2443 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2444 	.halt_reg = 0x1e148,
2445 	.halt_check = BRANCH_HALT_VOTED,
2446 	.clkr = {
2447 		.enable_reg = 0x52010,
2448 		.enable_mask = BIT(5),
2449 		.hw.init = &(const struct clk_init_data) {
2450 			.name = "gcc_qupv3_wrap2_s1_clk",
2451 			.parent_hws = (const struct clk_hw*[]) {
2452 				&gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2453 			},
2454 			.num_parents = 1,
2455 			.flags = CLK_SET_RATE_PARENT,
2456 			.ops = &clk_branch2_ops,
2457 		},
2458 	},
2459 };
2460 
2461 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2462 	.halt_reg = 0x1e28c,
2463 	.halt_check = BRANCH_HALT_VOTED,
2464 	.clkr = {
2465 		.enable_reg = 0x52010,
2466 		.enable_mask = BIT(6),
2467 		.hw.init = &(const struct clk_init_data) {
2468 			.name = "gcc_qupv3_wrap2_s2_clk",
2469 			.parent_hws = (const struct clk_hw*[]) {
2470 				&gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2471 			},
2472 			.num_parents = 1,
2473 			.flags = CLK_SET_RATE_PARENT,
2474 			.ops = &clk_branch2_ops,
2475 		},
2476 	},
2477 };
2478 
2479 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2480 	.halt_reg = 0x1e3c8,
2481 	.halt_check = BRANCH_HALT_VOTED,
2482 	.clkr = {
2483 		.enable_reg = 0x52010,
2484 		.enable_mask = BIT(7),
2485 		.hw.init = &(const struct clk_init_data) {
2486 			.name = "gcc_qupv3_wrap2_s3_clk",
2487 			.parent_hws = (const struct clk_hw*[]) {
2488 				&gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2489 			},
2490 			.num_parents = 1,
2491 			.flags = CLK_SET_RATE_PARENT,
2492 			.ops = &clk_branch2_ops,
2493 		},
2494 	},
2495 };
2496 
2497 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2498 	.halt_reg = 0x1e504,
2499 	.halt_check = BRANCH_HALT_VOTED,
2500 	.clkr = {
2501 		.enable_reg = 0x52010,
2502 		.enable_mask = BIT(8),
2503 		.hw.init = &(const struct clk_init_data) {
2504 			.name = "gcc_qupv3_wrap2_s4_clk",
2505 			.parent_hws = (const struct clk_hw*[]) {
2506 				&gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2507 			},
2508 			.num_parents = 1,
2509 			.flags = CLK_SET_RATE_PARENT,
2510 			.ops = &clk_branch2_ops,
2511 		},
2512 	},
2513 };
2514 
2515 static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {
2516 	.halt_reg = 0x2340c,
2517 	.halt_check = BRANCH_HALT_VOTED,
2518 	.clkr = {
2519 		.enable_reg = 0x52018,
2520 		.enable_mask = BIT(11),
2521 		.hw.init = &(const struct clk_init_data) {
2522 			.name = "gcc_qupv3_wrap3_core_2x_clk",
2523 			.ops = &clk_branch2_ops,
2524 		},
2525 	},
2526 };
2527 
2528 static struct clk_branch gcc_qupv3_wrap3_core_clk = {
2529 	.halt_reg = 0x233f8,
2530 	.halt_check = BRANCH_HALT_VOTED,
2531 	.clkr = {
2532 		.enable_reg = 0x52018,
2533 		.enable_mask = BIT(10),
2534 		.hw.init = &(const struct clk_init_data) {
2535 			.name = "gcc_qupv3_wrap3_core_clk",
2536 			.ops = &clk_branch2_ops,
2537 		},
2538 	},
2539 };
2540 
2541 static struct clk_branch gcc_qupv3_wrap3_qspi_ref_clk = {
2542 	.halt_reg = 0xa8648,
2543 	.halt_check = BRANCH_HALT_VOTED,
2544 	.clkr = {
2545 		.enable_reg = 0x52010,
2546 		.enable_mask = BIT(25),
2547 		.hw.init = &(const struct clk_init_data) {
2548 			.name = "gcc_qupv3_wrap3_qspi_ref_clk",
2549 			.parent_hws = (const struct clk_hw*[]) {
2550 				&gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
2551 			},
2552 			.num_parents = 1,
2553 			.flags = CLK_SET_RATE_PARENT,
2554 			.ops = &clk_branch2_ops,
2555 		},
2556 	},
2557 };
2558 
2559 static struct clk_branch gcc_qupv3_wrap3_s0_clk = {
2560 	.halt_reg = 0xa8004,
2561 	.halt_check = BRANCH_HALT_VOTED,
2562 	.clkr = {
2563 		.enable_reg = 0x52018,
2564 		.enable_mask = BIT(12),
2565 		.hw.init = &(const struct clk_init_data) {
2566 			.name = "gcc_qupv3_wrap3_s0_clk",
2567 			.parent_hws = (const struct clk_hw*[]) {
2568 				&gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
2569 			},
2570 			.num_parents = 1,
2571 			.flags = CLK_SET_RATE_PARENT,
2572 			.ops = &clk_branch2_ops,
2573 		},
2574 	},
2575 };
2576 
2577 static struct clk_branch gcc_qupv3_wrap3_s1_clk = {
2578 	.halt_reg = 0xa8140,
2579 	.halt_check = BRANCH_HALT_VOTED,
2580 	.clkr = {
2581 		.enable_reg = 0x52018,
2582 		.enable_mask = BIT(13),
2583 		.hw.init = &(const struct clk_init_data) {
2584 			.name = "gcc_qupv3_wrap3_s1_clk",
2585 			.parent_hws = (const struct clk_hw*[]) {
2586 				&gcc_qupv3_wrap3_s1_clk_src.clkr.hw,
2587 			},
2588 			.num_parents = 1,
2589 			.flags = CLK_SET_RATE_PARENT,
2590 			.ops = &clk_branch2_ops,
2591 		},
2592 	},
2593 };
2594 
2595 static struct clk_branch gcc_qupv3_wrap3_s2_clk = {
2596 	.halt_reg = 0xa8158,
2597 	.halt_check = BRANCH_HALT_VOTED,
2598 	.clkr = {
2599 		.enable_reg = 0x52018,
2600 		.enable_mask = BIT(14),
2601 		.hw.init = &(const struct clk_init_data) {
2602 			.name = "gcc_qupv3_wrap3_s2_clk",
2603 			.parent_hws = (const struct clk_hw*[]) {
2604 				&gcc_qupv3_wrap3_s2_clk_src.clkr.hw,
2605 			},
2606 			.num_parents = 1,
2607 			.flags = CLK_SET_RATE_PARENT,
2608 			.ops = &clk_branch2_ops,
2609 		},
2610 	},
2611 };
2612 
2613 static struct clk_branch gcc_qupv3_wrap3_s3_clk = {
2614 	.halt_reg = 0xa8294,
2615 	.halt_check = BRANCH_HALT_VOTED,
2616 	.clkr = {
2617 		.enable_reg = 0x52018,
2618 		.enable_mask = BIT(15),
2619 		.hw.init = &(const struct clk_init_data) {
2620 			.name = "gcc_qupv3_wrap3_s3_clk",
2621 			.parent_hws = (const struct clk_hw*[]) {
2622 				&gcc_qupv3_wrap3_s3_clk_src.clkr.hw,
2623 			},
2624 			.num_parents = 1,
2625 			.flags = CLK_SET_RATE_PARENT,
2626 			.ops = &clk_branch2_ops,
2627 		},
2628 	},
2629 };
2630 
2631 static struct clk_branch gcc_qupv3_wrap3_s4_clk = {
2632 	.halt_reg = 0xa83d0,
2633 	.halt_check = BRANCH_HALT_VOTED,
2634 	.clkr = {
2635 		.enable_reg = 0x52018,
2636 		.enable_mask = BIT(16),
2637 		.hw.init = &(const struct clk_init_data) {
2638 			.name = "gcc_qupv3_wrap3_s4_clk",
2639 			.parent_hws = (const struct clk_hw*[]) {
2640 				&gcc_qupv3_wrap3_s4_clk_src.clkr.hw,
2641 			},
2642 			.num_parents = 1,
2643 			.flags = CLK_SET_RATE_PARENT,
2644 			.ops = &clk_branch2_ops,
2645 		},
2646 	},
2647 };
2648 
2649 static struct clk_branch gcc_qupv3_wrap3_s5_clk = {
2650 	.halt_reg = 0xa850c,
2651 	.halt_check = BRANCH_HALT_VOTED,
2652 	.clkr = {
2653 		.enable_reg = 0x52018,
2654 		.enable_mask = BIT(17),
2655 		.hw.init = &(const struct clk_init_data) {
2656 			.name = "gcc_qupv3_wrap3_s5_clk",
2657 			.parent_hws = (const struct clk_hw*[]) {
2658 				&gcc_qupv3_wrap3_s5_clk_src.clkr.hw,
2659 			},
2660 			.num_parents = 1,
2661 			.flags = CLK_SET_RATE_PARENT,
2662 			.ops = &clk_branch2_ops,
2663 		},
2664 	},
2665 };
2666 
2667 static struct clk_branch gcc_qupv3_wrap4_core_2x_clk = {
2668 	.halt_reg = 0x23564,
2669 	.halt_check = BRANCH_HALT_VOTED,
2670 	.clkr = {
2671 		.enable_reg = 0x52018,
2672 		.enable_mask = BIT(25),
2673 		.hw.init = &(const struct clk_init_data) {
2674 			.name = "gcc_qupv3_wrap4_core_2x_clk",
2675 			.ops = &clk_branch2_ops,
2676 		},
2677 	},
2678 };
2679 
2680 static struct clk_branch gcc_qupv3_wrap4_core_clk = {
2681 	.halt_reg = 0x23550,
2682 	.halt_check = BRANCH_HALT_VOTED,
2683 	.clkr = {
2684 		.enable_reg = 0x52018,
2685 		.enable_mask = BIT(24),
2686 		.hw.init = &(const struct clk_init_data) {
2687 			.name = "gcc_qupv3_wrap4_core_clk",
2688 			.ops = &clk_branch2_ops,
2689 		},
2690 	},
2691 };
2692 
2693 static struct clk_branch gcc_qupv3_wrap4_s0_clk = {
2694 	.halt_reg = 0xa9004,
2695 	.halt_check = BRANCH_HALT_VOTED,
2696 	.clkr = {
2697 		.enable_reg = 0x52018,
2698 		.enable_mask = BIT(26),
2699 		.hw.init = &(const struct clk_init_data) {
2700 			.name = "gcc_qupv3_wrap4_s0_clk",
2701 			.parent_hws = (const struct clk_hw*[]) {
2702 				&gcc_qupv3_wrap4_s0_clk_src.clkr.hw,
2703 			},
2704 			.num_parents = 1,
2705 			.flags = CLK_SET_RATE_PARENT,
2706 			.ops = &clk_branch2_ops,
2707 		},
2708 	},
2709 };
2710 
2711 static struct clk_branch gcc_qupv3_wrap4_s1_clk = {
2712 	.halt_reg = 0xa9140,
2713 	.halt_check = BRANCH_HALT_VOTED,
2714 	.clkr = {
2715 		.enable_reg = 0x52018,
2716 		.enable_mask = BIT(27),
2717 		.hw.init = &(const struct clk_init_data) {
2718 			.name = "gcc_qupv3_wrap4_s1_clk",
2719 			.parent_hws = (const struct clk_hw*[]) {
2720 				&gcc_qupv3_wrap4_s1_clk_src.clkr.hw,
2721 			},
2722 			.num_parents = 1,
2723 			.flags = CLK_SET_RATE_PARENT,
2724 			.ops = &clk_branch2_ops,
2725 		},
2726 	},
2727 };
2728 
2729 static struct clk_branch gcc_qupv3_wrap4_s2_clk = {
2730 	.halt_reg = 0xa927c,
2731 	.halt_check = BRANCH_HALT_VOTED,
2732 	.clkr = {
2733 		.enable_reg = 0x52018,
2734 		.enable_mask = BIT(28),
2735 		.hw.init = &(const struct clk_init_data) {
2736 			.name = "gcc_qupv3_wrap4_s2_clk",
2737 			.parent_hws = (const struct clk_hw*[]) {
2738 				&gcc_qupv3_wrap4_s2_clk_src.clkr.hw,
2739 			},
2740 			.num_parents = 1,
2741 			.flags = CLK_SET_RATE_PARENT,
2742 			.ops = &clk_branch2_ops,
2743 		},
2744 	},
2745 };
2746 
2747 static struct clk_branch gcc_qupv3_wrap4_s3_clk = {
2748 	.halt_reg = 0xa93b8,
2749 	.halt_check = BRANCH_HALT_VOTED,
2750 	.clkr = {
2751 		.enable_reg = 0x52018,
2752 		.enable_mask = BIT(29),
2753 		.hw.init = &(const struct clk_init_data) {
2754 			.name = "gcc_qupv3_wrap4_s3_clk",
2755 			.parent_hws = (const struct clk_hw*[]) {
2756 				&gcc_qupv3_wrap4_s3_clk_src.clkr.hw,
2757 			},
2758 			.num_parents = 1,
2759 			.flags = CLK_SET_RATE_PARENT,
2760 			.ops = &clk_branch2_ops,
2761 		},
2762 	},
2763 };
2764 
2765 static struct clk_branch gcc_qupv3_wrap4_s4_clk = {
2766 	.halt_reg = 0xa94f4,
2767 	.halt_check = BRANCH_HALT_VOTED,
2768 	.clkr = {
2769 		.enable_reg = 0x52018,
2770 		.enable_mask = BIT(30),
2771 		.hw.init = &(const struct clk_init_data) {
2772 			.name = "gcc_qupv3_wrap4_s4_clk",
2773 			.parent_hws = (const struct clk_hw*[]) {
2774 				&gcc_qupv3_wrap4_s4_clk_src.clkr.hw,
2775 			},
2776 			.num_parents = 1,
2777 			.flags = CLK_SET_RATE_PARENT,
2778 			.ops = &clk_branch2_ops,
2779 		},
2780 	},
2781 };
2782 
2783 static struct clk_branch gcc_qupv3_wrap5_core_2x_clk = {
2784 	.halt_reg = 0x236bc,
2785 	.halt_check = BRANCH_HALT_VOTED,
2786 	.clkr = {
2787 		.enable_reg = 0x52020,
2788 		.enable_mask = BIT(16),
2789 		.hw.init = &(const struct clk_init_data) {
2790 			.name = "gcc_qupv3_wrap5_core_2x_clk",
2791 			.ops = &clk_branch2_ops,
2792 		},
2793 	},
2794 };
2795 
2796 static struct clk_branch gcc_qupv3_wrap5_core_clk = {
2797 	.halt_reg = 0x236a8,
2798 	.halt_check = BRANCH_HALT_VOTED,
2799 	.clkr = {
2800 		.enable_reg = 0x52020,
2801 		.enable_mask = BIT(15),
2802 		.hw.init = &(const struct clk_init_data) {
2803 			.name = "gcc_qupv3_wrap5_core_clk",
2804 			.ops = &clk_branch2_ops,
2805 		},
2806 	},
2807 };
2808 
2809 static struct clk_branch gcc_qupv3_wrap5_qspi_ref_clk = {
2810 	.halt_reg = 0xad01c,
2811 	.halt_check = BRANCH_HALT_VOTED,
2812 	.clkr = {
2813 		.enable_reg = 0x52020,
2814 		.enable_mask = BIT(18),
2815 		.hw.init = &(const struct clk_init_data) {
2816 			.name = "gcc_qupv3_wrap5_qspi_ref_clk",
2817 			.parent_hws = (const struct clk_hw*[]) {
2818 				&gcc_qupv3_wrap5_qspi_ref_clk_src.clkr.hw,
2819 			},
2820 			.num_parents = 1,
2821 			.flags = CLK_SET_RATE_PARENT,
2822 			.ops = &clk_branch2_ops,
2823 		},
2824 	},
2825 };
2826 
2827 static struct clk_branch gcc_qupv3_wrap5_s0_clk = {
2828 	.halt_reg = 0xad004,
2829 	.halt_check = BRANCH_HALT_VOTED,
2830 	.clkr = {
2831 		.enable_reg = 0x52020,
2832 		.enable_mask = BIT(17),
2833 		.hw.init = &(const struct clk_init_data) {
2834 			.name = "gcc_qupv3_wrap5_s0_clk",
2835 			.parent_hws = (const struct clk_hw*[]) {
2836 				&gcc_qupv3_wrap5_s0_clk_src.clkr.hw,
2837 			},
2838 			.num_parents = 1,
2839 			.flags = CLK_SET_RATE_PARENT,
2840 			.ops = &clk_branch2_ops,
2841 		},
2842 	},
2843 };
2844 
2845 static struct clk_branch gcc_qupv3_wrap_1_m_axi_clk = {
2846 	.halt_reg = 0x23140,
2847 	.halt_check = BRANCH_HALT_VOTED,
2848 	.hwcg_reg = 0x23140,
2849 	.hwcg_bit = 1,
2850 	.clkr = {
2851 		.enable_reg = 0x52008,
2852 		.enable_mask = BIT(20),
2853 		.hw.init = &(const struct clk_init_data) {
2854 			.name = "gcc_qupv3_wrap_1_m_axi_clk",
2855 			.ops = &clk_branch2_ops,
2856 		},
2857 	},
2858 };
2859 
2860 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2861 	.halt_reg = 0x23144,
2862 	.halt_check = BRANCH_HALT_VOTED,
2863 	.hwcg_reg = 0x23144,
2864 	.hwcg_bit = 1,
2865 	.clkr = {
2866 		.enable_reg = 0x52008,
2867 		.enable_mask = BIT(21),
2868 		.hw.init = &(const struct clk_init_data) {
2869 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2870 			.ops = &clk_branch2_ops,
2871 		},
2872 	},
2873 };
2874 
2875 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2876 	.halt_reg = 0x23298,
2877 	.halt_check = BRANCH_HALT_VOTED,
2878 	.hwcg_reg = 0x23298,
2879 	.hwcg_bit = 1,
2880 	.clkr = {
2881 		.enable_reg = 0x52010,
2882 		.enable_mask = BIT(2),
2883 		.hw.init = &(const struct clk_init_data) {
2884 			.name = "gcc_qupv3_wrap_2_m_ahb_clk",
2885 			.ops = &clk_branch2_ops,
2886 		},
2887 	},
2888 };
2889 
2890 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2891 	.halt_reg = 0x2329c,
2892 	.halt_check = BRANCH_HALT_VOTED,
2893 	.hwcg_reg = 0x2329c,
2894 	.hwcg_bit = 1,
2895 	.clkr = {
2896 		.enable_reg = 0x52010,
2897 		.enable_mask = BIT(1),
2898 		.hw.init = &(const struct clk_init_data) {
2899 			.name = "gcc_qupv3_wrap_2_s_ahb_clk",
2900 			.ops = &clk_branch2_ops,
2901 		},
2902 	},
2903 };
2904 
2905 static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {
2906 	.halt_reg = 0x233f0,
2907 	.halt_check = BRANCH_HALT_VOTED,
2908 	.hwcg_reg = 0x233f0,
2909 	.hwcg_bit = 1,
2910 	.clkr = {
2911 		.enable_reg = 0x52018,
2912 		.enable_mask = BIT(8),
2913 		.hw.init = &(const struct clk_init_data) {
2914 			.name = "gcc_qupv3_wrap_3_m_ahb_clk",
2915 			.ops = &clk_branch2_ops,
2916 		},
2917 	},
2918 };
2919 
2920 static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {
2921 	.halt_reg = 0x233f4,
2922 	.halt_check = BRANCH_HALT_VOTED,
2923 	.hwcg_reg = 0x233f4,
2924 	.hwcg_bit = 1,
2925 	.clkr = {
2926 		.enable_reg = 0x52018,
2927 		.enable_mask = BIT(9),
2928 		.hw.init = &(const struct clk_init_data) {
2929 			.name = "gcc_qupv3_wrap_3_s_ahb_clk",
2930 			.ops = &clk_branch2_ops,
2931 		},
2932 	},
2933 };
2934 
2935 static struct clk_branch gcc_qupv3_wrap_4_m_ahb_clk = {
2936 	.halt_reg = 0x23548,
2937 	.halt_check = BRANCH_HALT_VOTED,
2938 	.hwcg_reg = 0x23548,
2939 	.hwcg_bit = 1,
2940 	.clkr = {
2941 		.enable_reg = 0x52018,
2942 		.enable_mask = BIT(22),
2943 		.hw.init = &(const struct clk_init_data) {
2944 			.name = "gcc_qupv3_wrap_4_m_ahb_clk",
2945 			.ops = &clk_branch2_ops,
2946 		},
2947 	},
2948 };
2949 
2950 static struct clk_branch gcc_qupv3_wrap_4_s_ahb_clk = {
2951 	.halt_reg = 0x2354c,
2952 	.halt_check = BRANCH_HALT_VOTED,
2953 	.hwcg_reg = 0x2354c,
2954 	.hwcg_bit = 1,
2955 	.clkr = {
2956 		.enable_reg = 0x52018,
2957 		.enable_mask = BIT(23),
2958 		.hw.init = &(const struct clk_init_data) {
2959 			.name = "gcc_qupv3_wrap_4_s_ahb_clk",
2960 			.ops = &clk_branch2_ops,
2961 		},
2962 	},
2963 };
2964 
2965 static struct clk_branch gcc_qupv3_wrap_5_m_ahb_clk = {
2966 	.halt_reg = 0x236a0,
2967 	.halt_check = BRANCH_HALT_VOTED,
2968 	.hwcg_reg = 0x236a0,
2969 	.hwcg_bit = 1,
2970 	.clkr = {
2971 		.enable_reg = 0x52020,
2972 		.enable_mask = BIT(13),
2973 		.hw.init = &(const struct clk_init_data) {
2974 			.name = "gcc_qupv3_wrap_5_m_ahb_clk",
2975 			.ops = &clk_branch2_ops,
2976 		},
2977 	},
2978 };
2979 
2980 static struct clk_branch gcc_qupv3_wrap_5_s_ahb_clk = {
2981 	.halt_reg = 0x236a4,
2982 	.halt_check = BRANCH_HALT_VOTED,
2983 	.hwcg_reg = 0x236a4,
2984 	.hwcg_bit = 1,
2985 	.clkr = {
2986 		.enable_reg = 0x52020,
2987 		.enable_mask = BIT(14),
2988 		.hw.init = &(const struct clk_init_data) {
2989 			.name = "gcc_qupv3_wrap_5_s_ahb_clk",
2990 			.ops = &clk_branch2_ops,
2991 		},
2992 	},
2993 };
2994 
2995 static struct clk_branch gcc_sdcc2_ahb_clk = {
2996 	.halt_reg = 0x14014,
2997 	.halt_check = BRANCH_HALT,
2998 	.clkr = {
2999 		.enable_reg = 0x14014,
3000 		.enable_mask = BIT(0),
3001 		.hw.init = &(const struct clk_init_data) {
3002 			.name = "gcc_sdcc2_ahb_clk",
3003 			.ops = &clk_branch2_ops,
3004 		},
3005 	},
3006 };
3007 
3008 static struct clk_branch gcc_sdcc2_apps_clk = {
3009 	.halt_reg = 0x14004,
3010 	.halt_check = BRANCH_HALT,
3011 	.clkr = {
3012 		.enable_reg = 0x14004,
3013 		.enable_mask = BIT(0),
3014 		.hw.init = &(const struct clk_init_data) {
3015 			.name = "gcc_sdcc2_apps_clk",
3016 			.parent_hws = (const struct clk_hw*[]) {
3017 				&gcc_sdcc2_apps_clk_src.clkr.hw,
3018 			},
3019 			.num_parents = 1,
3020 			.flags = CLK_SET_RATE_PARENT,
3021 			.ops = &clk_branch2_ops,
3022 		},
3023 	},
3024 };
3025 
3026 static struct clk_branch gcc_sdcc4_ahb_clk = {
3027 	.halt_reg = 0x16014,
3028 	.halt_check = BRANCH_HALT,
3029 	.clkr = {
3030 		.enable_reg = 0x16014,
3031 		.enable_mask = BIT(0),
3032 		.hw.init = &(const struct clk_init_data) {
3033 			.name = "gcc_sdcc4_ahb_clk",
3034 			.ops = &clk_branch2_ops,
3035 		},
3036 	},
3037 };
3038 
3039 static struct clk_branch gcc_sdcc4_apps_clk = {
3040 	.halt_reg = 0x16004,
3041 	.halt_check = BRANCH_HALT,
3042 	.clkr = {
3043 		.enable_reg = 0x16004,
3044 		.enable_mask = BIT(0),
3045 		.hw.init = &(const struct clk_init_data) {
3046 			.name = "gcc_sdcc4_apps_clk",
3047 			.parent_hws = (const struct clk_hw*[]) {
3048 				&gcc_sdcc4_apps_clk_src.clkr.hw,
3049 			},
3050 			.num_parents = 1,
3051 			.flags = CLK_SET_RATE_PARENT,
3052 			.ops = &clk_branch2_ops,
3053 		},
3054 	},
3055 };
3056 
3057 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3058 	.halt_reg = 0x77028,
3059 	.halt_check = BRANCH_HALT_VOTED,
3060 	.hwcg_reg = 0x77028,
3061 	.hwcg_bit = 1,
3062 	.clkr = {
3063 		.enable_reg = 0x77028,
3064 		.enable_mask = BIT(0),
3065 		.hw.init = &(const struct clk_init_data) {
3066 			.name = "gcc_ufs_phy_ahb_clk",
3067 			.ops = &clk_branch2_ops,
3068 		},
3069 	},
3070 };
3071 
3072 static struct clk_branch gcc_ufs_phy_axi_clk = {
3073 	.halt_reg = 0x77018,
3074 	.halt_check = BRANCH_HALT_VOTED,
3075 	.hwcg_reg = 0x77018,
3076 	.hwcg_bit = 1,
3077 	.clkr = {
3078 		.enable_reg = 0x77018,
3079 		.enable_mask = BIT(0),
3080 		.hw.init = &(const struct clk_init_data) {
3081 			.name = "gcc_ufs_phy_axi_clk",
3082 			.parent_hws = (const struct clk_hw*[]) {
3083 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
3084 			},
3085 			.num_parents = 1,
3086 			.flags = CLK_SET_RATE_PARENT,
3087 			.ops = &clk_branch2_ops,
3088 		},
3089 	},
3090 };
3091 
3092 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3093 	.halt_reg = 0x7707c,
3094 	.halt_check = BRANCH_HALT_VOTED,
3095 	.hwcg_reg = 0x7707c,
3096 	.hwcg_bit = 1,
3097 	.clkr = {
3098 		.enable_reg = 0x7707c,
3099 		.enable_mask = BIT(0),
3100 		.hw.init = &(const struct clk_init_data) {
3101 			.name = "gcc_ufs_phy_ice_core_clk",
3102 			.parent_hws = (const struct clk_hw*[]) {
3103 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3104 			},
3105 			.num_parents = 1,
3106 			.flags = CLK_SET_RATE_PARENT,
3107 			.ops = &clk_branch2_ops,
3108 		},
3109 	},
3110 };
3111 
3112 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3113 	.halt_reg = 0x770bc,
3114 	.halt_check = BRANCH_HALT_VOTED,
3115 	.hwcg_reg = 0x770bc,
3116 	.hwcg_bit = 1,
3117 	.clkr = {
3118 		.enable_reg = 0x770bc,
3119 		.enable_mask = BIT(0),
3120 		.hw.init = &(const struct clk_init_data) {
3121 			.name = "gcc_ufs_phy_phy_aux_clk",
3122 			.parent_hws = (const struct clk_hw*[]) {
3123 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3124 			},
3125 			.num_parents = 1,
3126 			.flags = CLK_SET_RATE_PARENT,
3127 			.ops = &clk_branch2_ops,
3128 		},
3129 	},
3130 };
3131 
3132 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3133 	.halt_reg = 0x77030,
3134 	.halt_check = BRANCH_HALT_DELAY,
3135 	.clkr = {
3136 		.enable_reg = 0x77030,
3137 		.enable_mask = BIT(0),
3138 		.hw.init = &(const struct clk_init_data) {
3139 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
3140 			.parent_hws = (const struct clk_hw*[]) {
3141 				&gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
3142 			},
3143 			.num_parents = 1,
3144 			.flags = CLK_SET_RATE_PARENT,
3145 			.ops = &clk_branch2_ops,
3146 		},
3147 	},
3148 };
3149 
3150 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3151 	.halt_reg = 0x770d8,
3152 	.halt_check = BRANCH_HALT_DELAY,
3153 	.clkr = {
3154 		.enable_reg = 0x770d8,
3155 		.enable_mask = BIT(0),
3156 		.hw.init = &(const struct clk_init_data) {
3157 			.name = "gcc_ufs_phy_rx_symbol_1_clk",
3158 			.parent_hws = (const struct clk_hw*[]) {
3159 				&gcc_ufs_phy_rx_symbol_1_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_ufs_phy_tx_symbol_0_clk = {
3169 	.halt_reg = 0x7702c,
3170 	.halt_check = BRANCH_HALT_DELAY,
3171 	.clkr = {
3172 		.enable_reg = 0x7702c,
3173 		.enable_mask = BIT(0),
3174 		.hw.init = &(const struct clk_init_data) {
3175 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
3176 			.parent_hws = (const struct clk_hw*[]) {
3177 				&gcc_ufs_phy_tx_symbol_0_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_ufs_phy_unipro_5_core_clk = {
3187 	.halt_reg = 0x7706c,
3188 	.halt_check = BRANCH_HALT_VOTED,
3189 	.hwcg_reg = 0x7706c,
3190 	.hwcg_bit = 1,
3191 	.clkr = {
3192 		.enable_reg = 0x7706c,
3193 		.enable_mask = BIT(0),
3194 		.hw.init = &(const struct clk_init_data) {
3195 			.name = "gcc_ufs_phy_unipro_5_core_clk",
3196 			.parent_hws = (const struct clk_hw*[]) {
3197 				&gcc_ufs_phy_unipro_5_core_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_usb30_prim_master_clk = {
3207 	.halt_reg = 0x39018,
3208 	.halt_check = BRANCH_HALT,
3209 	.clkr = {
3210 		.enable_reg = 0x39018,
3211 		.enable_mask = BIT(0),
3212 		.hw.init = &(const struct clk_init_data) {
3213 			.name = "gcc_usb30_prim_master_clk",
3214 			.parent_hws = (const struct clk_hw*[]) {
3215 				&gcc_usb30_prim_master_clk_src.clkr.hw,
3216 			},
3217 			.num_parents = 1,
3218 			.flags = CLK_SET_RATE_PARENT,
3219 			.ops = &clk_branch2_ops,
3220 		},
3221 	},
3222 };
3223 
3224 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3225 	.halt_reg = 0x3902c,
3226 	.halt_check = BRANCH_HALT,
3227 	.clkr = {
3228 		.enable_reg = 0x3902c,
3229 		.enable_mask = BIT(0),
3230 		.hw.init = &(const struct clk_init_data) {
3231 			.name = "gcc_usb30_prim_mock_utmi_clk",
3232 			.parent_hws = (const struct clk_hw*[]) {
3233 				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3234 			},
3235 			.num_parents = 1,
3236 			.flags = CLK_SET_RATE_PARENT,
3237 			.ops = &clk_branch2_ops,
3238 		},
3239 	},
3240 };
3241 
3242 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3243 	.halt_reg = 0x39028,
3244 	.halt_check = BRANCH_HALT,
3245 	.clkr = {
3246 		.enable_reg = 0x39028,
3247 		.enable_mask = BIT(0),
3248 		.hw.init = &(const struct clk_init_data) {
3249 			.name = "gcc_usb30_prim_sleep_clk",
3250 			.ops = &clk_branch2_ops,
3251 		},
3252 	},
3253 };
3254 
3255 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3256 	.halt_reg = 0x39068,
3257 	.halt_check = BRANCH_HALT,
3258 	.clkr = {
3259 		.enable_reg = 0x39068,
3260 		.enable_mask = BIT(0),
3261 		.hw.init = &(const struct clk_init_data) {
3262 			.name = "gcc_usb3_prim_phy_aux_clk",
3263 			.parent_hws = (const struct clk_hw*[]) {
3264 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3265 			},
3266 			.num_parents = 1,
3267 			.flags = CLK_SET_RATE_PARENT,
3268 			.ops = &clk_branch2_ops,
3269 		},
3270 	},
3271 };
3272 
3273 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3274 	.halt_reg = 0x3906c,
3275 	.halt_check = BRANCH_HALT,
3276 	.clkr = {
3277 		.enable_reg = 0x3906c,
3278 		.enable_mask = BIT(0),
3279 		.hw.init = &(const struct clk_init_data) {
3280 			.name = "gcc_usb3_prim_phy_com_aux_clk",
3281 			.parent_hws = (const struct clk_hw*[]) {
3282 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3283 			},
3284 			.num_parents = 1,
3285 			.flags = CLK_SET_RATE_PARENT,
3286 			.ops = &clk_branch2_ops,
3287 		},
3288 	},
3289 };
3290 
3291 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3292 	.halt_reg = 0x39070,
3293 	.halt_check = BRANCH_HALT_DELAY,
3294 	.hwcg_reg = 0x39070,
3295 	.hwcg_bit = 1,
3296 	.clkr = {
3297 		.enable_reg = 0x39070,
3298 		.enable_mask = BIT(0),
3299 		.hw.init = &(const struct clk_init_data) {
3300 			.name = "gcc_usb3_prim_phy_pipe_clk",
3301 			.parent_hws = (const struct clk_hw*[]) {
3302 				&gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3303 			},
3304 			.num_parents = 1,
3305 			.flags = CLK_SET_RATE_PARENT,
3306 			.ops = &clk_branch2_ops,
3307 		},
3308 	},
3309 };
3310 
3311 static struct clk_branch gcc_video_axi0_clk = {
3312 	.halt_reg = 0x32018,
3313 	.halt_check = BRANCH_HALT_SKIP,
3314 	.hwcg_reg = 0x32018,
3315 	.hwcg_bit = 1,
3316 	.clkr = {
3317 		.enable_reg = 0x32018,
3318 		.enable_mask = BIT(0),
3319 		.hw.init = &(const struct clk_init_data) {
3320 			.name = "gcc_video_axi0_clk",
3321 			.ops = &clk_branch2_ops,
3322 		},
3323 	},
3324 };
3325 
3326 static struct clk_branch gcc_video_axi0c_clk = {
3327 	.halt_reg = 0x32020,
3328 	.halt_check = BRANCH_HALT_SKIP,
3329 	.hwcg_reg = 0x32020,
3330 	.hwcg_bit = 1,
3331 	.clkr = {
3332 		.enable_reg = 0x32020,
3333 		.enable_mask = BIT(0),
3334 		.hw.init = &(const struct clk_init_data) {
3335 			.name = "gcc_video_axi0c_clk",
3336 			.ops = &clk_branch2_ops,
3337 		},
3338 	},
3339 };
3340 
3341 static struct gdsc gcc_pcie_0_gdsc = {
3342 	.gdscr = 0x6b004,
3343 	.en_rest_wait_val = 0x2,
3344 	.en_few_wait_val = 0x2,
3345 	.clk_dis_wait_val = 0xf,
3346 	.collapse_ctrl = 0x52154,
3347 	.collapse_mask = BIT(0),
3348 	.pd = {
3349 		.name = "gcc_pcie_0_gdsc",
3350 	},
3351 	.pwrsts = PWRSTS_OFF_ON,
3352 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3353 };
3354 
3355 static struct gdsc gcc_pcie_0_phy_gdsc = {
3356 	.gdscr = 0x6c000,
3357 	.en_rest_wait_val = 0x2,
3358 	.en_few_wait_val = 0x2,
3359 	.clk_dis_wait_val = 0x2,
3360 	.collapse_ctrl = 0x52154,
3361 	.collapse_mask = BIT(1),
3362 	.pd = {
3363 		.name = "gcc_pcie_0_phy_gdsc",
3364 	},
3365 	.pwrsts = PWRSTS_OFF_ON,
3366 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3367 };
3368 
3369 static struct gdsc gcc_pcie_1_gdsc = {
3370 	.gdscr = 0x67004,
3371 	.en_rest_wait_val = 0x2,
3372 	.en_few_wait_val = 0x2,
3373 	.clk_dis_wait_val = 0xf,
3374 	.collapse_ctrl = 0x5214c,
3375 	.collapse_mask = BIT(2),
3376 	.pd = {
3377 		.name = "gcc_pcie_1_gdsc",
3378 	},
3379 	.pwrsts = PWRSTS_OFF_ON,
3380 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3381 };
3382 
3383 static struct gdsc gcc_pcie_1_phy_gdsc = {
3384 	.gdscr = 0x68000,
3385 	.en_rest_wait_val = 0x2,
3386 	.en_few_wait_val = 0x2,
3387 	.clk_dis_wait_val = 0x2,
3388 	.collapse_ctrl = 0x5214c,
3389 	.collapse_mask = BIT(3),
3390 	.pd = {
3391 		.name = "gcc_pcie_1_phy_gdsc",
3392 	},
3393 	.pwrsts = PWRSTS_OFF_ON,
3394 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3395 };
3396 
3397 static struct gdsc gcc_ufs_mem_phy_gdsc = {
3398 	.gdscr = 0x9e000,
3399 	.en_rest_wait_val = 0x2,
3400 	.en_few_wait_val = 0x2,
3401 	.clk_dis_wait_val = 0x2,
3402 	.pd = {
3403 		.name = "gcc_ufs_mem_phy_gdsc",
3404 	},
3405 	.pwrsts = PWRSTS_OFF_ON,
3406 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3407 };
3408 
3409 static struct gdsc gcc_ufs_phy_gdsc = {
3410 	.gdscr = 0x77004,
3411 	.en_rest_wait_val = 0x2,
3412 	.en_few_wait_val = 0x2,
3413 	.clk_dis_wait_val = 0xf,
3414 	.pd = {
3415 		.name = "gcc_ufs_phy_gdsc",
3416 	},
3417 	.pwrsts = PWRSTS_OFF_ON,
3418 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3419 };
3420 
3421 static struct gdsc gcc_usb30_prim_gdsc = {
3422 	.gdscr = 0x39004,
3423 	.en_rest_wait_val = 0x2,
3424 	.en_few_wait_val = 0x2,
3425 	.clk_dis_wait_val = 0xf,
3426 	.pd = {
3427 		.name = "gcc_usb30_prim_gdsc",
3428 	},
3429 	.pwrsts = PWRSTS_OFF_ON,
3430 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3431 };
3432 
3433 static struct gdsc gcc_usb3_phy_gdsc = {
3434 	.gdscr = 0x50018,
3435 	.en_rest_wait_val = 0x2,
3436 	.en_few_wait_val = 0x2,
3437 	.clk_dis_wait_val = 0x2,
3438 	.pd = {
3439 		.name = "gcc_usb3_phy_gdsc",
3440 	},
3441 	.pwrsts = PWRSTS_OFF_ON,
3442 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3443 };
3444 
3445 static struct clk_regmap *gcc_hawi_clocks[] = {
3446 	[GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,
3447 	[GCC_AGGRE_STARDUSTNOC_USB3_PRIM_AXI_CLK] = &gcc_aggre_stardustnoc_usb3_prim_axi_clk.clkr,
3448 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3449 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3450 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3451 	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3452 	[GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3453 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3454 	[GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,
3455 	[GCC_EVA_AXI0_CLK] = &gcc_eva_axi0_clk.clkr,
3456 	[GCC_EVA_AXI0C_CLK] = &gcc_eva_axi0c_clk.clkr,
3457 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3458 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3459 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3460 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3461 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3462 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3463 	[GCC_GPLL0] = &gcc_gpll0.clkr,
3464 	[GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3465 	[GCC_GPLL4] = &gcc_gpll4.clkr,
3466 	[GCC_GPLL5] = &gcc_gpll5.clkr,
3467 	[GCC_GPLL7] = &gcc_gpll7.clkr,
3468 	[GCC_GPLL9] = &gcc_gpll9.clkr,
3469 	[GCC_GPU_GEMNOC_GFX_CLK] = &gcc_gpu_gemnoc_gfx_clk.clkr,
3470 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3471 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3472 	[GCC_GPU_SMMU_VOTE_CLK] = &gcc_gpu_smmu_vote_clk.clkr,
3473 	[GCC_MMU_TCU_VOTE_CLK] = &gcc_mmu_tcu_vote_clk.clkr,
3474 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3475 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3476 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3477 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3478 	[GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
3479 	[GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
3480 	[GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3481 	[GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3482 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3483 	[GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3484 	[GCC_PCIE_0_PIPE_DIV2_CLK] = &gcc_pcie_0_pipe_div2_clk.clkr,
3485 	[GCC_PCIE_0_PIPE_DIV_CLK_SRC] = &gcc_pcie_0_pipe_div_clk_src.clkr,
3486 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3487 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3488 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3489 	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3490 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3491 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3492 	[GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3493 	[GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3494 	[GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3495 	[GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3496 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3497 	[GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3498 	[GCC_PCIE_1_PIPE_DIV2_CLK] = &gcc_pcie_1_pipe_div2_clk.clkr,
3499 	[GCC_PCIE_1_PIPE_DIV_CLK_SRC] = &gcc_pcie_1_pipe_div_clk_src.clkr,
3500 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3501 	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3502 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3503 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3504 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3505 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3506 	[GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,
3507 	[GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,
3508 	[GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,
3509 	[GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,
3510 	[GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,
3511 	[GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,
3512 	[GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,
3513 	[GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,
3514 	[GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,
3515 	[GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,
3516 	[GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,
3517 	[GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,
3518 	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3519 	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3520 	[GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr,
3521 	[GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr,
3522 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3523 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3524 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3525 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3526 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3527 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3528 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3529 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3530 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3531 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3532 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3533 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3534 	[GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3535 	[GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3536 	[GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3537 	[GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3538 	[GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3539 	[GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3540 	[GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3541 	[GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3542 	[GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3543 	[GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3544 	[GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3545 	[GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3546 	[GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3547 	[GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3548 	[GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3549 	[GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3550 	[GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,
3551 	[GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,
3552 	[GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr,
3553 	[GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr,
3554 	[GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,
3555 	[GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,
3556 	[GCC_QUPV3_WRAP3_S1_CLK] = &gcc_qupv3_wrap3_s1_clk.clkr,
3557 	[GCC_QUPV3_WRAP3_S1_CLK_SRC] = &gcc_qupv3_wrap3_s1_clk_src.clkr,
3558 	[GCC_QUPV3_WRAP3_S2_CLK] = &gcc_qupv3_wrap3_s2_clk.clkr,
3559 	[GCC_QUPV3_WRAP3_S2_CLK_SRC] = &gcc_qupv3_wrap3_s2_clk_src.clkr,
3560 	[GCC_QUPV3_WRAP3_S3_CLK] = &gcc_qupv3_wrap3_s3_clk.clkr,
3561 	[GCC_QUPV3_WRAP3_S3_CLK_SRC] = &gcc_qupv3_wrap3_s3_clk_src.clkr,
3562 	[GCC_QUPV3_WRAP3_S4_CLK] = &gcc_qupv3_wrap3_s4_clk.clkr,
3563 	[GCC_QUPV3_WRAP3_S4_CLK_SRC] = &gcc_qupv3_wrap3_s4_clk_src.clkr,
3564 	[GCC_QUPV3_WRAP3_S5_CLK] = &gcc_qupv3_wrap3_s5_clk.clkr,
3565 	[GCC_QUPV3_WRAP3_S5_CLK_SRC] = &gcc_qupv3_wrap3_s5_clk_src.clkr,
3566 	[GCC_QUPV3_WRAP4_CORE_2X_CLK] = &gcc_qupv3_wrap4_core_2x_clk.clkr,
3567 	[GCC_QUPV3_WRAP4_CORE_CLK] = &gcc_qupv3_wrap4_core_clk.clkr,
3568 	[GCC_QUPV3_WRAP4_S0_CLK] = &gcc_qupv3_wrap4_s0_clk.clkr,
3569 	[GCC_QUPV3_WRAP4_S0_CLK_SRC] = &gcc_qupv3_wrap4_s0_clk_src.clkr,
3570 	[GCC_QUPV3_WRAP4_S1_CLK] = &gcc_qupv3_wrap4_s1_clk.clkr,
3571 	[GCC_QUPV3_WRAP4_S1_CLK_SRC] = &gcc_qupv3_wrap4_s1_clk_src.clkr,
3572 	[GCC_QUPV3_WRAP4_S2_CLK] = &gcc_qupv3_wrap4_s2_clk.clkr,
3573 	[GCC_QUPV3_WRAP4_S2_CLK_SRC] = &gcc_qupv3_wrap4_s2_clk_src.clkr,
3574 	[GCC_QUPV3_WRAP4_S3_CLK] = &gcc_qupv3_wrap4_s3_clk.clkr,
3575 	[GCC_QUPV3_WRAP4_S3_CLK_SRC] = &gcc_qupv3_wrap4_s3_clk_src.clkr,
3576 	[GCC_QUPV3_WRAP4_S4_CLK] = &gcc_qupv3_wrap4_s4_clk.clkr,
3577 	[GCC_QUPV3_WRAP4_S4_CLK_SRC] = &gcc_qupv3_wrap4_s4_clk_src.clkr,
3578 	[GCC_QUPV3_WRAP_1_M_AXI_CLK] = &gcc_qupv3_wrap_1_m_axi_clk.clkr,
3579 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3580 	[GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3581 	[GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3582 	[GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,
3583 	[GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,
3584 	[GCC_QUPV3_WRAP_4_M_AHB_CLK] = &gcc_qupv3_wrap_4_m_ahb_clk.clkr,
3585 	[GCC_QUPV3_WRAP_4_S_AHB_CLK] = &gcc_qupv3_wrap_4_s_ahb_clk.clkr,
3586 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3587 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3588 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3589 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3590 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3591 	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3592 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3593 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3594 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3595 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3596 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3597 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3598 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3599 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3600 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3601 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3602 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3603 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3604 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3605 	[GCC_UFS_PHY_UNIPRO_5_CORE_CLK] = &gcc_ufs_phy_unipro_5_core_clk.clkr,
3606 	[GCC_UFS_PHY_UNIPRO_5_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_5_core_clk_src.clkr,
3607 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3608 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3609 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3610 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3611 	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3612 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3613 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3614 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3615 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3616 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3617 	[GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3618 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3619 	[GCC_VIDEO_AXI0C_CLK] = &gcc_video_axi0c_clk.clkr,
3620 	/*
3621 	 * Maili has more clocks than Hawi. Ensure the array is appropriately
3622 	 * sized and assign the additional clocks in .probe()
3623 	 */
3624 	[GCC_QUPV3_WRAP_5_S_AHB_CLK] = NULL,
3625 };
3626 
3627 static struct gdsc *gcc_hawi_gdscs[] = {
3628 	[GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc,
3629 	[GCC_PCIE_0_PHY_GDSC] = &gcc_pcie_0_phy_gdsc,
3630 	[GCC_PCIE_1_GDSC] = &gcc_pcie_1_gdsc,
3631 	[GCC_PCIE_1_PHY_GDSC] = &gcc_pcie_1_phy_gdsc,
3632 	[GCC_UFS_MEM_PHY_GDSC] = &gcc_ufs_mem_phy_gdsc,
3633 	[GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3634 	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3635 	[GCC_USB3_PHY_GDSC] = &gcc_usb3_phy_gdsc,
3636 };
3637 
3638 static const struct qcom_reset_map gcc_hawi_resets[] = {
3639 	[GCC_CAMERA_BCR] = { 0x26000 },
3640 	[GCC_EVA_AXI0_CLK_ARES] = { 0x9f008, 2 },
3641 	[GCC_EVA_AXI0C_CLK_ARES] = { 0x9f010, 2 },
3642 	[GCC_EVA_BCR] = { 0x9f000 },
3643 	[GCC_GPU_BCR] = { 0x71000 },
3644 	[GCC_PCIE_0_BCR] = { 0x6b000 },
3645 	[GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
3646 	[GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
3647 	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3648 	[GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
3649 	[GCC_PCIE_1_BCR] = { 0x67000 },
3650 	[GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
3651 	[GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
3652 	[GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3653 	[GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },
3654 	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
3655 	[GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
3656 	[GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
3657 	[GCC_PCIE_RSCC_BCR] = { 0x11000 },
3658 	[GCC_PDM_BCR] = { 0x33000 },
3659 	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3660 	[GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3661 	[GCC_QUPV3_WRAPPER_3_BCR] = { 0xa8000 },
3662 	[GCC_QUPV3_WRAPPER_4_BCR] = { 0xa9000 },
3663 	[GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },
3664 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3665 	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3666 	[GCC_SDCC2_BCR] = { 0x14000 },
3667 	[GCC_SDCC4_BCR] = { 0x16000 },
3668 	[GCC_TCSR_PCIE_BCR] = { 0x6f018 },
3669 	[GCC_UFS_PHY_BCR] = { 0x77000 },
3670 	[GCC_USB30_PRIM_BCR] = { 0x39000 },
3671 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3672 	[GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3673 	[GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3674 	[GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3675 	[GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3676 	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3677 	[GCC_VIDEO_AXI0_CLK_ARES] = { 0x32018, 2 },
3678 	[GCC_VIDEO_AXI0C_CLK_ARES] = { 0x32020, 2 },
3679 	[GCC_VIDEO_BCR] = { 0x32000 },
3680 	[GCC_VIDEO_XO_CLK_ARES] = { 0x32028, 2 },
3681 };
3682 
3683 static const u32 gcc_hawi_critical_cbcrs[] = {
3684 	0xa0004, /* GCC_CAM_BIST_MCLK_AHB_CLK */
3685 	0x26004, /* GCC_CAMERA_AHB_CLK */
3686 	0x26028, /* GCC_CAMERA_RSC_CORE_CLK */
3687 	0x26024, /* GCC_CAMERA_XO_CLK */
3688 	0x9f004, /* GCC_EVA_AHB_CLK */
3689 	0x9f018, /* GCC_EVA_XO_CLK */
3690 	0x71004, /* GCC_GPU_CFG_AHB_CLK */
3691 	0x7101c, /* GCC_GPU_RSC_CORE_CLK */
3692 	0x67084, /* GCC_PCIE_1_RSC_CORE_CLK */
3693 	0x43014, /* GCC_PCIE_LINK_XO_CLK */
3694 	0x6b088, /* GCC_PCIE_RSC_CORE_CLK */
3695 	0x52010, /* GCC_PCIE_RSCC_CFG_AHB_CLK */
3696 	0x52010, /* GCC_PCIE_RSCC_XO_CLK */
3697 	0x32004, /* GCC_VIDEO_AHB_CLK */
3698 	0x32028, /* GCC_VIDEO_XO_CLK */
3699 };
3700 
3701 static const struct clk_rcg_dfs_data gcc_hawi_dfs_clocks[] = {
3702 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),
3703 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3704 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3705 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3706 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3707 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3708 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3709 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3710 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3711 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3712 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3713 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3714 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3715 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),
3716 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s0_clk_src),
3717 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s2_clk_src),
3718 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s3_clk_src),
3719 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s4_clk_src),
3720 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s5_clk_src),
3721 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s0_clk_src),
3722 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s1_clk_src),
3723 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s2_clk_src),
3724 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s3_clk_src),
3725 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s4_clk_src),
3726 };
3727 
3728 static const struct clk_rcg_dfs_data gcc_maili_dfs_clocks[] = {
3729 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),
3730 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3731 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3732 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3733 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3734 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3735 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3736 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3737 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3738 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3739 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3740 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3741 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3742 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),
3743 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s0_clk_src),
3744 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s2_clk_src),
3745 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s3_clk_src),
3746 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s4_clk_src),
3747 	DEFINE_RCG_DFS(gcc_qupv3_wrap3_s5_clk_src),
3748 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s0_clk_src),
3749 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s1_clk_src),
3750 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s2_clk_src),
3751 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s3_clk_src),
3752 	DEFINE_RCG_DFS(gcc_qupv3_wrap4_s4_clk_src),
3753 	DEFINE_RCG_DFS(gcc_qupv3_wrap5_qspi_ref_clk_src),
3754 };
3755 
3756 static const struct regmap_config gcc_hawi_regmap_config = {
3757 	.reg_bits = 32,
3758 	.reg_stride = 4,
3759 	.val_bits = 32,
3760 	.max_register = 0x1f41f4,
3761 	.fast_io = true,
3762 };
3763 
clk_hawi_regs_configure(struct device * dev,struct regmap * regmap)3764 static void clk_hawi_regs_configure(struct device *dev, struct regmap *regmap)
3765 {
3766 	/* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3767 	qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
3768 }
3769 
3770 static const struct qcom_cc_driver_data gcc_hawi_driver_data = {
3771 	.clk_cbcrs = gcc_hawi_critical_cbcrs,
3772 	.num_clk_cbcrs = ARRAY_SIZE(gcc_hawi_critical_cbcrs),
3773 	.dfs_rcgs = gcc_hawi_dfs_clocks,
3774 	.num_dfs_rcgs = ARRAY_SIZE(gcc_hawi_dfs_clocks),
3775 	.clk_regs_configure = clk_hawi_regs_configure,
3776 };
3777 
3778 static const struct qcom_cc_desc gcc_hawi_desc = {
3779 	.config = &gcc_hawi_regmap_config,
3780 	.clks = gcc_hawi_clocks,
3781 	.num_clks = ARRAY_SIZE(gcc_hawi_clocks),
3782 	.resets = gcc_hawi_resets,
3783 	.num_resets = ARRAY_SIZE(gcc_hawi_resets),
3784 	.gdscs = gcc_hawi_gdscs,
3785 	.num_gdscs = ARRAY_SIZE(gcc_hawi_gdscs),
3786 	.use_rpm = true,
3787 	.driver_data = &gcc_hawi_driver_data,
3788 };
3789 
3790 static const struct qcom_cc_driver_data gcc_maili_driver_data = {
3791 	.clk_cbcrs = gcc_hawi_critical_cbcrs,
3792 	.num_clk_cbcrs = ARRAY_SIZE(gcc_hawi_critical_cbcrs),
3793 	.dfs_rcgs = gcc_maili_dfs_clocks,
3794 	.num_dfs_rcgs = ARRAY_SIZE(gcc_maili_dfs_clocks),
3795 	.clk_regs_configure = clk_hawi_regs_configure,
3796 };
3797 
3798 static const struct qcom_cc_desc gcc_maili_desc = {
3799 	.config = &gcc_hawi_regmap_config,
3800 	.clks = gcc_hawi_clocks,
3801 	.num_clks = ARRAY_SIZE(gcc_hawi_clocks),
3802 	.resets = gcc_hawi_resets,
3803 	.num_resets = ARRAY_SIZE(gcc_hawi_resets),
3804 	.gdscs = gcc_hawi_gdscs,
3805 	.num_gdscs = ARRAY_SIZE(gcc_hawi_gdscs),
3806 	.use_rpm = true,
3807 	.driver_data = &gcc_maili_driver_data,
3808 };
3809 
3810 static const struct of_device_id gcc_hawi_match_table[] = {
3811 	{ .compatible = "qcom,hawi-gcc" },
3812 	{ .compatible = "qcom,maili-gcc" },
3813 	{ }
3814 };
3815 MODULE_DEVICE_TABLE(of, gcc_hawi_match_table);
3816 
gcc_hawi_probe(struct platform_device * pdev)3817 static int gcc_hawi_probe(struct platform_device *pdev)
3818 {
3819 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,maili-gcc")) {
3820 		gcc_hawi_clocks[GCC_QUPV3_WRAP5_CORE_2X_CLK] = &gcc_qupv3_wrap5_core_2x_clk.clkr;
3821 		gcc_hawi_clocks[GCC_QUPV3_WRAP5_CORE_CLK] = &gcc_qupv3_wrap5_core_clk.clkr;
3822 		gcc_hawi_clocks[GCC_QUPV3_WRAP5_QSPI_REF_CLK] = &gcc_qupv3_wrap5_qspi_ref_clk.clkr;
3823 		gcc_hawi_clocks[GCC_QUPV3_WRAP5_QSPI_REF_CLK_SRC] =
3824 			&gcc_qupv3_wrap5_qspi_ref_clk_src.clkr;
3825 		gcc_hawi_clocks[GCC_QUPV3_WRAP5_S0_CLK] = &gcc_qupv3_wrap5_s0_clk.clkr;
3826 		gcc_hawi_clocks[GCC_QUPV3_WRAP5_S0_CLK_SRC] = &gcc_qupv3_wrap5_s0_clk_src.clkr;
3827 		gcc_hawi_clocks[GCC_QUPV3_WRAP_5_M_AHB_CLK] = &gcc_qupv3_wrap_5_m_ahb_clk.clkr;
3828 		gcc_hawi_clocks[GCC_QUPV3_WRAP_5_S_AHB_CLK] = &gcc_qupv3_wrap_5_s_ahb_clk.clkr;
3829 
3830 		return qcom_cc_probe(pdev, &gcc_maili_desc);
3831 	}
3832 
3833 	return qcom_cc_probe(pdev, &gcc_hawi_desc);
3834 }
3835 
3836 static struct platform_driver gcc_hawi_driver = {
3837 	.probe = gcc_hawi_probe,
3838 	.driver = {
3839 		.name = "gcc-hawi",
3840 		.of_match_table = gcc_hawi_match_table,
3841 	},
3842 };
3843 
gcc_hawi_init(void)3844 static int __init gcc_hawi_init(void)
3845 {
3846 	return platform_driver_register(&gcc_hawi_driver);
3847 }
3848 subsys_initcall(gcc_hawi_init);
3849 
gcc_hawi_exit(void)3850 static void __exit gcc_hawi_exit(void)
3851 {
3852 	platform_driver_unregister(&gcc_hawi_driver);
3853 }
3854 module_exit(gcc_hawi_exit);
3855 
3856 MODULE_DESCRIPTION("QTI GCC HAWI Driver");
3857 MODULE_LICENSE("GPL");
3858