xref: /linux/drivers/clk/qcom/gcc-sm8450.c (revision da1d9caf95def6f0320819cf941c9fd1069ba9e1)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2021, Linaro Limited
5  */
6 
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/of_device.h>
10 #include <linux/regmap.h>
11 
12 #include <dt-bindings/clock/qcom,gcc-sm8450.h>
13 
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "gdsc.h"
21 #include "reset.h"
22 
23 enum {
24 	P_BI_TCXO,
25 	P_GCC_GPLL0_OUT_EVEN,
26 	P_GCC_GPLL0_OUT_MAIN,
27 	P_GCC_GPLL4_OUT_MAIN,
28 	P_GCC_GPLL9_OUT_MAIN,
29 	P_PCIE_0_PIPE_CLK,
30 	P_PCIE_1_PHY_AUX_CLK,
31 	P_PCIE_1_PIPE_CLK,
32 	P_SLEEP_CLK,
33 	P_UFS_PHY_RX_SYMBOL_0_CLK,
34 	P_UFS_PHY_RX_SYMBOL_1_CLK,
35 	P_UFS_PHY_TX_SYMBOL_0_CLK,
36 	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
37 };
38 
39 static struct clk_alpha_pll gcc_gpll0 = {
40 	.offset = 0x0,
41 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
42 	.clkr = {
43 		.enable_reg = 0x62018,
44 		.enable_mask = BIT(0),
45 		.hw.init = &(struct clk_init_data){
46 			.name = "gcc_gpll0",
47 			.parent_data = &(const struct clk_parent_data){
48 				.fw_name = "bi_tcxo",
49 			},
50 			.num_parents = 1,
51 			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
52 		},
53 	},
54 };
55 
56 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
57 	{ 0x1, 2 },
58 	{ }
59 };
60 
61 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
62 	.offset = 0x0,
63 	.post_div_shift = 10,
64 	.post_div_table = post_div_table_gcc_gpll0_out_even,
65 	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
66 	.width = 4,
67 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
68 	.clkr.hw.init = &(struct clk_init_data){
69 		.name = "gcc_gpll0_out_even",
70 		.parent_data = &(const struct clk_parent_data){
71 			.hw = &gcc_gpll0.clkr.hw,
72 		},
73 		.num_parents = 1,
74 		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
75 	},
76 };
77 
78 static struct clk_alpha_pll gcc_gpll4 = {
79 	.offset = 0x4000,
80 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
81 	.clkr = {
82 		.enable_reg = 0x62018,
83 		.enable_mask = BIT(4),
84 		.hw.init = &(struct clk_init_data){
85 			.name = "gcc_gpll4",
86 			.parent_data = &(const struct clk_parent_data){
87 				.fw_name = "bi_tcxo",
88 			},
89 			.num_parents = 1,
90 			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
91 		},
92 	},
93 };
94 
95 static struct clk_alpha_pll gcc_gpll9 = {
96 	.offset = 0x9000,
97 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
98 	.clkr = {
99 		.enable_reg = 0x62018,
100 		.enable_mask = BIT(9),
101 		.hw.init = &(struct clk_init_data){
102 			.name = "gcc_gpll9",
103 			.parent_data = &(const struct clk_parent_data){
104 				.fw_name = "bi_tcxo",
105 			},
106 			.num_parents = 1,
107 			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
108 		},
109 	},
110 };
111 
112 static const struct parent_map gcc_parent_map_0[] = {
113 	{ P_BI_TCXO, 0 },
114 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
115 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
116 };
117 
118 static const struct clk_parent_data gcc_parent_data_0[] = {
119 	{ .fw_name = "bi_tcxo" },
120 	{ .hw = &gcc_gpll0.clkr.hw },
121 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
122 };
123 
124 static const struct parent_map gcc_parent_map_1[] = {
125 	{ P_BI_TCXO, 0 },
126 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
127 	{ P_SLEEP_CLK, 5 },
128 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
129 };
130 
131 static const struct clk_parent_data gcc_parent_data_1[] = {
132 	{ .fw_name = "bi_tcxo" },
133 	{ .hw = &gcc_gpll0.clkr.hw },
134 	{ .fw_name = "sleep_clk" },
135 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
136 };
137 
138 static const struct parent_map gcc_parent_map_2[] = {
139 	{ P_BI_TCXO, 0 },
140 	{ P_SLEEP_CLK, 5 },
141 };
142 
143 static const struct clk_parent_data gcc_parent_data_2[] = {
144 	{ .fw_name = "bi_tcxo" },
145 	{ .fw_name = "sleep_clk" },
146 };
147 
148 static const struct parent_map gcc_parent_map_3[] = {
149 	{ P_BI_TCXO, 0 },
150 };
151 
152 static const struct clk_parent_data gcc_parent_data_3[] = {
153 	{ .fw_name = "bi_tcxo" },
154 };
155 
156 static const struct parent_map gcc_parent_map_4[] = {
157 	{ P_PCIE_0_PIPE_CLK, 0 },
158 	{ P_BI_TCXO, 2 },
159 };
160 
161 static const struct clk_parent_data gcc_parent_data_4[] = {
162 	{ .fw_name = "pcie_0_pipe_clk", },
163 	{ .fw_name = "bi_tcxo", },
164 };
165 
166 static const struct parent_map gcc_parent_map_5[] = {
167 	{ P_PCIE_1_PHY_AUX_CLK, 0 },
168 	{ P_BI_TCXO, 2 },
169 };
170 
171 static const struct clk_parent_data gcc_parent_data_5[] = {
172 	{ .fw_name = "pcie_1_phy_aux_clk" },
173 	{ .fw_name = "bi_tcxo" },
174 };
175 
176 static const struct parent_map gcc_parent_map_6[] = {
177 	{ P_PCIE_1_PIPE_CLK, 0 },
178 	{ P_BI_TCXO, 2 },
179 };
180 
181 static const struct clk_parent_data gcc_parent_data_6[] = {
182 	{ .fw_name = "pcie_1_pipe_clk" },
183 	{ .fw_name = "bi_tcxo" },
184 };
185 
186 static const struct parent_map gcc_parent_map_7[] = {
187 	{ P_BI_TCXO, 0 },
188 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
189 	{ P_GCC_GPLL9_OUT_MAIN, 2 },
190 	{ P_GCC_GPLL4_OUT_MAIN, 5 },
191 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
192 };
193 
194 static const struct clk_parent_data gcc_parent_data_7[] = {
195 	{ .fw_name = "bi_tcxo" },
196 	{ .hw = &gcc_gpll0.clkr.hw },
197 	{ .hw = &gcc_gpll9.clkr.hw },
198 	{ .hw = &gcc_gpll4.clkr.hw },
199 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
200 };
201 
202 static const struct parent_map gcc_parent_map_8[] = {
203 	{ P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
204 	{ P_BI_TCXO, 2 },
205 };
206 
207 static const struct clk_parent_data gcc_parent_data_8[] = {
208 	{ .fw_name = "ufs_phy_rx_symbol_0_clk" },
209 	{ .fw_name = "bi_tcxo" },
210 };
211 
212 static const struct parent_map gcc_parent_map_9[] = {
213 	{ P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
214 	{ P_BI_TCXO, 2 },
215 };
216 
217 static const struct clk_parent_data gcc_parent_data_9[] = {
218 	{ .fw_name = "ufs_phy_rx_symbol_1_clk" },
219 	{ .fw_name = "bi_tcxo" },
220 };
221 
222 static const struct parent_map gcc_parent_map_10[] = {
223 	{ P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
224 	{ P_BI_TCXO, 2 },
225 };
226 
227 static const struct clk_parent_data gcc_parent_data_10[] = {
228 	{ .fw_name = "ufs_phy_tx_symbol_0_clk" },
229 	{ .fw_name = "bi_tcxo" },
230 };
231 
232 static const struct parent_map gcc_parent_map_11[] = {
233 	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
234 	{ P_BI_TCXO, 2 },
235 };
236 
237 static const struct clk_parent_data gcc_parent_data_11[] = {
238 	{ .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
239 	{ .fw_name = "bi_tcxo" },
240 };
241 
242 static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = {
243 	.reg = 0x7b060,
244 	.shift = 0,
245 	.width = 2,
246 	.parent_map = gcc_parent_map_4,
247 	.clkr = {
248 		.hw.init = &(struct clk_init_data){
249 			.name = "gcc_pcie_0_pipe_clk_src",
250 			.parent_data = gcc_parent_data_4,
251 			.num_parents = ARRAY_SIZE(gcc_parent_data_4),
252 			.ops = &clk_regmap_mux_closest_ops,
253 		},
254 	},
255 };
256 
257 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
258 	.reg = 0x9d080,
259 	.shift = 0,
260 	.width = 2,
261 	.parent_map = gcc_parent_map_5,
262 	.clkr = {
263 		.hw.init = &(struct clk_init_data){
264 			.name = "gcc_pcie_1_phy_aux_clk_src",
265 			.parent_data = gcc_parent_data_5,
266 			.num_parents = ARRAY_SIZE(gcc_parent_data_5),
267 			.ops = &clk_regmap_mux_closest_ops,
268 		},
269 	},
270 };
271 
272 static struct clk_regmap_mux gcc_pcie_1_pipe_clk_src = {
273 	.reg = 0x9d064,
274 	.shift = 0,
275 	.width = 2,
276 	.parent_map = gcc_parent_map_6,
277 	.clkr = {
278 		.hw.init = &(struct clk_init_data){
279 			.name = "gcc_pcie_1_pipe_clk_src",
280 			.parent_data = gcc_parent_data_6,
281 			.num_parents = ARRAY_SIZE(gcc_parent_data_6),
282 			.ops = &clk_regmap_mux_closest_ops,
283 		},
284 	},
285 };
286 
287 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
288 	.reg = 0x87060,
289 	.shift = 0,
290 	.width = 2,
291 	.parent_map = gcc_parent_map_8,
292 	.clkr = {
293 		.hw.init = &(struct clk_init_data){
294 			.name = "gcc_ufs_phy_rx_symbol_0_clk_src",
295 			.parent_data = gcc_parent_data_8,
296 			.num_parents = ARRAY_SIZE(gcc_parent_data_8),
297 			.ops = &clk_regmap_mux_closest_ops,
298 		},
299 	},
300 };
301 
302 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
303 	.reg = 0x870d0,
304 	.shift = 0,
305 	.width = 2,
306 	.parent_map = gcc_parent_map_9,
307 	.clkr = {
308 		.hw.init = &(struct clk_init_data){
309 			.name = "gcc_ufs_phy_rx_symbol_1_clk_src",
310 			.parent_data = gcc_parent_data_9,
311 			.num_parents = ARRAY_SIZE(gcc_parent_data_9),
312 			.ops = &clk_regmap_mux_closest_ops,
313 		},
314 	},
315 };
316 
317 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
318 	.reg = 0x87050,
319 	.shift = 0,
320 	.width = 2,
321 	.parent_map = gcc_parent_map_10,
322 	.clkr = {
323 		.hw.init = &(struct clk_init_data){
324 			.name = "gcc_ufs_phy_tx_symbol_0_clk_src",
325 			.parent_data = gcc_parent_data_10,
326 			.num_parents = ARRAY_SIZE(gcc_parent_data_10),
327 			.ops = &clk_regmap_mux_closest_ops,
328 		},
329 	},
330 };
331 
332 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
333 	.reg = 0x49068,
334 	.shift = 0,
335 	.width = 2,
336 	.parent_map = gcc_parent_map_11,
337 	.clkr = {
338 		.hw.init = &(struct clk_init_data){
339 			.name = "gcc_usb3_prim_phy_pipe_clk_src",
340 			.parent_data = gcc_parent_data_11,
341 			.num_parents = ARRAY_SIZE(gcc_parent_data_11),
342 			.ops = &clk_regmap_mux_closest_ops,
343 		},
344 	},
345 };
346 
347 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
348 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
349 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
350 	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
351 	{ }
352 };
353 
354 static struct clk_rcg2 gcc_gp1_clk_src = {
355 	.cmd_rcgr = 0x74004,
356 	.mnd_width = 8,
357 	.hid_width = 5,
358 	.parent_map = gcc_parent_map_1,
359 	.freq_tbl = ftbl_gcc_gp1_clk_src,
360 	.clkr.hw.init = &(struct clk_init_data){
361 		.name = "gcc_gp1_clk_src",
362 		.parent_data = gcc_parent_data_1,
363 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
364 		.flags = CLK_SET_RATE_PARENT,
365 		.ops = &clk_rcg2_ops,
366 	},
367 };
368 
369 static struct clk_rcg2 gcc_gp2_clk_src = {
370 	.cmd_rcgr = 0x75004,
371 	.mnd_width = 8,
372 	.hid_width = 5,
373 	.parent_map = gcc_parent_map_1,
374 	.freq_tbl = ftbl_gcc_gp1_clk_src,
375 	.clkr.hw.init = &(struct clk_init_data){
376 		.name = "gcc_gp2_clk_src",
377 		.parent_data = gcc_parent_data_1,
378 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
379 		.flags = CLK_SET_RATE_PARENT,
380 		.ops = &clk_rcg2_ops,
381 	},
382 };
383 
384 static struct clk_rcg2 gcc_gp3_clk_src = {
385 	.cmd_rcgr = 0x76004,
386 	.mnd_width = 8,
387 	.hid_width = 5,
388 	.parent_map = gcc_parent_map_1,
389 	.freq_tbl = ftbl_gcc_gp1_clk_src,
390 	.clkr.hw.init = &(struct clk_init_data){
391 		.name = "gcc_gp3_clk_src",
392 		.parent_data = gcc_parent_data_1,
393 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
394 		.flags = CLK_SET_RATE_PARENT,
395 		.ops = &clk_rcg2_ops,
396 	},
397 };
398 
399 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
400 	F(19200000, P_BI_TCXO, 1, 0, 0),
401 	{ }
402 };
403 
404 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
405 	.cmd_rcgr = 0x7b064,
406 	.mnd_width = 16,
407 	.hid_width = 5,
408 	.parent_map = gcc_parent_map_2,
409 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
410 	.clkr.hw.init = &(struct clk_init_data){
411 		.name = "gcc_pcie_0_aux_clk_src",
412 		.parent_data = gcc_parent_data_2,
413 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
414 		.flags = CLK_SET_RATE_PARENT,
415 		.ops = &clk_rcg2_ops,
416 	},
417 };
418 
419 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
420 	F(19200000, P_BI_TCXO, 1, 0, 0),
421 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
422 	{ }
423 };
424 
425 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
426 	.cmd_rcgr = 0x7b048,
427 	.mnd_width = 0,
428 	.hid_width = 5,
429 	.parent_map = gcc_parent_map_0,
430 	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
431 	.clkr.hw.init = &(struct clk_init_data){
432 		.name = "gcc_pcie_0_phy_rchng_clk_src",
433 		.parent_data = gcc_parent_data_0,
434 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
435 		.flags = CLK_SET_RATE_PARENT,
436 		.ops = &clk_rcg2_ops,
437 	},
438 };
439 
440 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
441 	.cmd_rcgr = 0x9d068,
442 	.mnd_width = 16,
443 	.hid_width = 5,
444 	.parent_map = gcc_parent_map_2,
445 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
446 	.clkr.hw.init = &(struct clk_init_data){
447 		.name = "gcc_pcie_1_aux_clk_src",
448 		.parent_data = gcc_parent_data_2,
449 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
450 		.flags = CLK_SET_RATE_PARENT,
451 		.ops = &clk_rcg2_ops,
452 	},
453 };
454 
455 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
456 	.cmd_rcgr = 0x9d04c,
457 	.mnd_width = 0,
458 	.hid_width = 5,
459 	.parent_map = gcc_parent_map_0,
460 	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
461 	.clkr.hw.init = &(struct clk_init_data){
462 		.name = "gcc_pcie_1_phy_rchng_clk_src",
463 		.parent_data = gcc_parent_data_0,
464 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
465 		.flags = CLK_SET_RATE_PARENT,
466 		.ops = &clk_rcg2_ops,
467 	},
468 };
469 
470 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
471 	F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
472 	{ }
473 };
474 
475 static struct clk_rcg2 gcc_pdm2_clk_src = {
476 	.cmd_rcgr = 0x43010,
477 	.mnd_width = 0,
478 	.hid_width = 5,
479 	.parent_map = gcc_parent_map_0,
480 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
481 	.clkr.hw.init = &(struct clk_init_data){
482 		.name = "gcc_pdm2_clk_src",
483 		.parent_data = gcc_parent_data_0,
484 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
485 		.flags = CLK_SET_RATE_PARENT,
486 		.ops = &clk_rcg2_ops,
487 	},
488 };
489 
490 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
491 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
492 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
493 	F(19200000, P_BI_TCXO, 1, 0, 0),
494 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
495 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
496 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
497 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
498 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
499 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
500 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
501 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
502 	{ }
503 };
504 
505 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
506 	.name = "gcc_qupv3_wrap0_s0_clk_src",
507 	.parent_data = gcc_parent_data_0,
508 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
509 	.flags = CLK_SET_RATE_PARENT,
510 	.ops = &clk_rcg2_ops,
511 };
512 
513 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
514 	.cmd_rcgr = 0x27014,
515 	.mnd_width = 16,
516 	.hid_width = 5,
517 	.parent_map = gcc_parent_map_0,
518 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
519 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
520 };
521 
522 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
523 	.name = "gcc_qupv3_wrap0_s1_clk_src",
524 	.parent_data = gcc_parent_data_0,
525 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
526 	.flags = CLK_SET_RATE_PARENT,
527 	.ops = &clk_rcg2_ops,
528 };
529 
530 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
531 	.cmd_rcgr = 0x27148,
532 	.mnd_width = 16,
533 	.hid_width = 5,
534 	.parent_map = gcc_parent_map_0,
535 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
536 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
537 };
538 
539 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
540 	.name = "gcc_qupv3_wrap0_s2_clk_src",
541 	.parent_data = gcc_parent_data_0,
542 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
543 	.flags = CLK_SET_RATE_PARENT,
544 	.ops = &clk_rcg2_ops,
545 };
546 
547 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
548 	.cmd_rcgr = 0x2727c,
549 	.mnd_width = 16,
550 	.hid_width = 5,
551 	.parent_map = gcc_parent_map_0,
552 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
553 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
554 };
555 
556 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
557 	.name = "gcc_qupv3_wrap0_s3_clk_src",
558 	.parent_data = gcc_parent_data_0,
559 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
560 	.flags = CLK_SET_RATE_PARENT,
561 	.ops = &clk_rcg2_ops,
562 };
563 
564 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
565 	.cmd_rcgr = 0x273b0,
566 	.mnd_width = 16,
567 	.hid_width = 5,
568 	.parent_map = gcc_parent_map_0,
569 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
570 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
571 };
572 
573 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
574 	.name = "gcc_qupv3_wrap0_s4_clk_src",
575 	.parent_data = gcc_parent_data_0,
576 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
577 	.flags = CLK_SET_RATE_PARENT,
578 	.ops = &clk_rcg2_ops,
579 };
580 
581 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
582 	.cmd_rcgr = 0x274e4,
583 	.mnd_width = 16,
584 	.hid_width = 5,
585 	.parent_map = gcc_parent_map_0,
586 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
587 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
588 };
589 
590 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
591 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
592 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
593 	F(19200000, P_BI_TCXO, 1, 0, 0),
594 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
595 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
596 	F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
597 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
598 	F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
599 	{ }
600 };
601 
602 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
603 	.name = "gcc_qupv3_wrap0_s5_clk_src",
604 	.parent_data = gcc_parent_data_0,
605 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
606 	.flags = CLK_SET_RATE_PARENT,
607 	.ops = &clk_rcg2_ops,
608 };
609 
610 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
611 	.cmd_rcgr = 0x27618,
612 	.mnd_width = 16,
613 	.hid_width = 5,
614 	.parent_map = gcc_parent_map_0,
615 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
616 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
617 };
618 
619 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
620 	.name = "gcc_qupv3_wrap0_s6_clk_src",
621 	.parent_data = gcc_parent_data_0,
622 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
623 	.flags = CLK_SET_RATE_PARENT,
624 	.ops = &clk_rcg2_ops,
625 };
626 
627 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
628 	.cmd_rcgr = 0x2774c,
629 	.mnd_width = 16,
630 	.hid_width = 5,
631 	.parent_map = gcc_parent_map_0,
632 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
633 	.clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
634 };
635 
636 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
637 	.name = "gcc_qupv3_wrap0_s7_clk_src",
638 	.parent_data = gcc_parent_data_0,
639 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
640 	.flags = CLK_SET_RATE_PARENT,
641 	.ops = &clk_rcg2_ops,
642 };
643 
644 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
645 	.cmd_rcgr = 0x27880,
646 	.mnd_width = 16,
647 	.hid_width = 5,
648 	.parent_map = gcc_parent_map_0,
649 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
650 	.clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
651 };
652 
653 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
654 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
655 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
656 	F(19200000, P_BI_TCXO, 1, 0, 0),
657 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
658 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
659 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
660 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
661 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
662 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
663 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
664 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
665 	F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
666 	F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
667 	F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
668 	F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
669 	{ }
670 };
671 
672 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
673 	.name = "gcc_qupv3_wrap1_s0_clk_src",
674 	.parent_data = gcc_parent_data_0,
675 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
676 	.flags = CLK_SET_RATE_PARENT,
677 	.ops = &clk_rcg2_ops,
678 };
679 
680 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
681 	.cmd_rcgr = 0x28014,
682 	.mnd_width = 16,
683 	.hid_width = 5,
684 	.parent_map = gcc_parent_map_0,
685 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
686 	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
687 };
688 
689 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
690 	.name = "gcc_qupv3_wrap1_s1_clk_src",
691 	.parent_data = gcc_parent_data_0,
692 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
693 	.flags = CLK_SET_RATE_PARENT,
694 	.ops = &clk_rcg2_ops,
695 };
696 
697 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
698 	.cmd_rcgr = 0x28148,
699 	.mnd_width = 16,
700 	.hid_width = 5,
701 	.parent_map = gcc_parent_map_0,
702 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
703 	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
704 };
705 
706 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
707 	.name = "gcc_qupv3_wrap1_s2_clk_src",
708 	.parent_data = gcc_parent_data_0,
709 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
710 	.flags = CLK_SET_RATE_PARENT,
711 	.ops = &clk_rcg2_ops,
712 };
713 
714 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
715 	.cmd_rcgr = 0x2827c,
716 	.mnd_width = 16,
717 	.hid_width = 5,
718 	.parent_map = gcc_parent_map_0,
719 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
720 	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
721 };
722 
723 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
724 	.name = "gcc_qupv3_wrap1_s3_clk_src",
725 	.parent_data = gcc_parent_data_0,
726 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
727 	.flags = CLK_SET_RATE_PARENT,
728 	.ops = &clk_rcg2_ops,
729 };
730 
731 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
732 	.cmd_rcgr = 0x283b0,
733 	.mnd_width = 16,
734 	.hid_width = 5,
735 	.parent_map = gcc_parent_map_0,
736 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
737 	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
738 };
739 
740 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
741 	.name = "gcc_qupv3_wrap1_s4_clk_src",
742 	.parent_data = gcc_parent_data_0,
743 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
744 	.flags = CLK_SET_RATE_PARENT,
745 	.ops = &clk_rcg2_ops,
746 };
747 
748 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
749 	.cmd_rcgr = 0x284e4,
750 	.mnd_width = 16,
751 	.hid_width = 5,
752 	.parent_map = gcc_parent_map_0,
753 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
754 	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
755 };
756 
757 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
758 	.name = "gcc_qupv3_wrap1_s5_clk_src",
759 	.parent_data = gcc_parent_data_0,
760 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
761 	.flags = CLK_SET_RATE_PARENT,
762 	.ops = &clk_rcg2_ops,
763 };
764 
765 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
766 	.cmd_rcgr = 0x28618,
767 	.mnd_width = 16,
768 	.hid_width = 5,
769 	.parent_map = gcc_parent_map_0,
770 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
771 	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
772 };
773 
774 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
775 	.name = "gcc_qupv3_wrap1_s6_clk_src",
776 	.parent_data = gcc_parent_data_0,
777 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
778 	.flags = CLK_SET_RATE_PARENT,
779 	.ops = &clk_rcg2_ops,
780 };
781 
782 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
783 	.cmd_rcgr = 0x2874c,
784 	.mnd_width = 16,
785 	.hid_width = 5,
786 	.parent_map = gcc_parent_map_0,
787 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
788 	.clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
789 };
790 
791 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
792 	.name = "gcc_qupv3_wrap2_s0_clk_src",
793 	.parent_data = gcc_parent_data_0,
794 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
795 	.flags = CLK_SET_RATE_PARENT,
796 	.ops = &clk_rcg2_ops,
797 };
798 
799 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
800 	.cmd_rcgr = 0x2e014,
801 	.mnd_width = 16,
802 	.hid_width = 5,
803 	.parent_map = gcc_parent_map_0,
804 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
805 	.clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
806 };
807 
808 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
809 	.name = "gcc_qupv3_wrap2_s1_clk_src",
810 	.parent_data = gcc_parent_data_0,
811 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
812 	.flags = CLK_SET_RATE_PARENT,
813 	.ops = &clk_rcg2_ops,
814 };
815 
816 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
817 	.cmd_rcgr = 0x2e148,
818 	.mnd_width = 16,
819 	.hid_width = 5,
820 	.parent_map = gcc_parent_map_0,
821 	.freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
822 	.clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
823 };
824 
825 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
826 	.name = "gcc_qupv3_wrap2_s2_clk_src",
827 	.parent_data = gcc_parent_data_0,
828 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
829 	.flags = CLK_SET_RATE_PARENT,
830 	.ops = &clk_rcg2_ops,
831 };
832 
833 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
834 	.cmd_rcgr = 0x2e27c,
835 	.mnd_width = 16,
836 	.hid_width = 5,
837 	.parent_map = gcc_parent_map_0,
838 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
839 	.clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
840 };
841 
842 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
843 	.name = "gcc_qupv3_wrap2_s3_clk_src",
844 	.parent_data = gcc_parent_data_0,
845 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
846 	.flags = CLK_SET_RATE_PARENT,
847 	.ops = &clk_rcg2_ops,
848 };
849 
850 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
851 	.cmd_rcgr = 0x2e3b0,
852 	.mnd_width = 16,
853 	.hid_width = 5,
854 	.parent_map = gcc_parent_map_0,
855 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
856 	.clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
857 };
858 
859 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
860 	.name = "gcc_qupv3_wrap2_s4_clk_src",
861 	.parent_data = gcc_parent_data_0,
862 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
863 	.flags = CLK_SET_RATE_PARENT,
864 	.ops = &clk_rcg2_ops,
865 };
866 
867 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
868 	.cmd_rcgr = 0x2e4e4,
869 	.mnd_width = 16,
870 	.hid_width = 5,
871 	.parent_map = gcc_parent_map_0,
872 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
873 	.clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
874 };
875 
876 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
877 	.name = "gcc_qupv3_wrap2_s5_clk_src",
878 	.parent_data = gcc_parent_data_0,
879 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
880 	.flags = CLK_SET_RATE_PARENT,
881 	.ops = &clk_rcg2_ops,
882 };
883 
884 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
885 	.cmd_rcgr = 0x2e618,
886 	.mnd_width = 16,
887 	.hid_width = 5,
888 	.parent_map = gcc_parent_map_0,
889 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
890 	.clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
891 };
892 
893 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
894 	.name = "gcc_qupv3_wrap2_s6_clk_src",
895 	.parent_data = gcc_parent_data_0,
896 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
897 	.flags = CLK_SET_RATE_PARENT,
898 	.ops = &clk_rcg2_ops,
899 };
900 
901 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
902 	.cmd_rcgr = 0x2e74c,
903 	.mnd_width = 16,
904 	.hid_width = 5,
905 	.parent_map = gcc_parent_map_0,
906 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
907 	.clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
908 };
909 
910 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
911 	F(400000, P_BI_TCXO, 12, 1, 4),
912 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
913 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
914 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
915 	F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
916 	{ }
917 };
918 
919 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
920 	.cmd_rcgr = 0x24014,
921 	.mnd_width = 8,
922 	.hid_width = 5,
923 	.parent_map = gcc_parent_map_7,
924 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
925 	.clkr.hw.init = &(struct clk_init_data){
926 		.name = "gcc_sdcc2_apps_clk_src",
927 		.parent_data = gcc_parent_data_7,
928 		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
929 		.flags = CLK_SET_RATE_PARENT,
930 		.ops = &clk_rcg2_ops,
931 	},
932 };
933 
934 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
935 	F(400000, P_BI_TCXO, 12, 1, 4),
936 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
937 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
938 	{ }
939 };
940 
941 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
942 	.cmd_rcgr = 0x26014,
943 	.mnd_width = 8,
944 	.hid_width = 5,
945 	.parent_map = gcc_parent_map_0,
946 	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
947 	.clkr.hw.init = &(struct clk_init_data){
948 		.name = "gcc_sdcc4_apps_clk_src",
949 		.parent_data = gcc_parent_data_0,
950 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
951 		.flags = CLK_SET_RATE_PARENT,
952 		.ops = &clk_rcg2_ops,
953 	},
954 };
955 
956 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
957 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
958 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
959 	F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
960 	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
961 	{ }
962 };
963 
964 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
965 	.cmd_rcgr = 0x8702c,
966 	.mnd_width = 8,
967 	.hid_width = 5,
968 	.parent_map = gcc_parent_map_0,
969 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
970 	.clkr.hw.init = &(struct clk_init_data){
971 		.name = "gcc_ufs_phy_axi_clk_src",
972 		.parent_data = gcc_parent_data_0,
973 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
974 		.flags = CLK_SET_RATE_PARENT,
975 		.ops = &clk_rcg2_ops,
976 	},
977 };
978 
979 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
980 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
981 	F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
982 	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
983 	{ }
984 };
985 
986 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
987 	.cmd_rcgr = 0x87074,
988 	.mnd_width = 0,
989 	.hid_width = 5,
990 	.parent_map = gcc_parent_map_0,
991 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
992 	.clkr.hw.init = &(struct clk_init_data){
993 		.name = "gcc_ufs_phy_ice_core_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_ops,
998 	},
999 };
1000 
1001 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1002 	F(9600000, P_BI_TCXO, 2, 0, 0),
1003 	F(19200000, P_BI_TCXO, 1, 0, 0),
1004 	{ }
1005 };
1006 
1007 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1008 	.cmd_rcgr = 0x870a8,
1009 	.mnd_width = 0,
1010 	.hid_width = 5,
1011 	.parent_map = gcc_parent_map_3,
1012 	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1013 	.clkr.hw.init = &(struct clk_init_data){
1014 		.name = "gcc_ufs_phy_phy_aux_clk_src",
1015 		.parent_data = gcc_parent_data_3,
1016 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1017 		.flags = CLK_SET_RATE_PARENT,
1018 		.ops = &clk_rcg2_ops,
1019 	},
1020 };
1021 
1022 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1023 	.cmd_rcgr = 0x8708c,
1024 	.mnd_width = 0,
1025 	.hid_width = 5,
1026 	.parent_map = gcc_parent_map_0,
1027 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1028 	.clkr.hw.init = &(struct clk_init_data){
1029 		.name = "gcc_ufs_phy_unipro_core_clk_src",
1030 		.parent_data = gcc_parent_data_0,
1031 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1032 		.flags = CLK_SET_RATE_PARENT,
1033 		.ops = &clk_rcg2_ops,
1034 	},
1035 };
1036 
1037 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1038 	F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1039 	F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1040 	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1041 	F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1042 	{ }
1043 };
1044 
1045 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1046 	.cmd_rcgr = 0x49028,
1047 	.mnd_width = 8,
1048 	.hid_width = 5,
1049 	.parent_map = gcc_parent_map_0,
1050 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1051 	.clkr.hw.init = &(struct clk_init_data){
1052 		.name = "gcc_usb30_prim_master_clk_src",
1053 		.parent_data = gcc_parent_data_0,
1054 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1055 		.flags = CLK_SET_RATE_PARENT,
1056 		.ops = &clk_rcg2_ops,
1057 	},
1058 };
1059 
1060 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1061 	.cmd_rcgr = 0x49040,
1062 	.mnd_width = 0,
1063 	.hid_width = 5,
1064 	.parent_map = gcc_parent_map_0,
1065 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1066 	.clkr.hw.init = &(struct clk_init_data){
1067 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1068 		.parent_data = gcc_parent_data_0,
1069 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1070 		.flags = CLK_SET_RATE_PARENT,
1071 		.ops = &clk_rcg2_ops,
1072 	},
1073 };
1074 
1075 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1076 	.cmd_rcgr = 0x4906c,
1077 	.mnd_width = 0,
1078 	.hid_width = 5,
1079 	.parent_map = gcc_parent_map_2,
1080 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1081 	.clkr.hw.init = &(struct clk_init_data){
1082 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1083 		.parent_data = gcc_parent_data_2,
1084 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1085 		.flags = CLK_SET_RATE_PARENT,
1086 		.ops = &clk_rcg2_ops,
1087 	},
1088 };
1089 
1090 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1091 	.reg = 0x49058,
1092 	.shift = 0,
1093 	.width = 4,
1094 	.clkr.hw.init = &(struct clk_init_data) {
1095 		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1096 		.parent_data = &(const struct clk_parent_data){
1097 			.hw = &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1098 		},
1099 		.num_parents = 1,
1100 		.flags = CLK_SET_RATE_PARENT,
1101 		.ops = &clk_regmap_div_ro_ops,
1102 	},
1103 };
1104 
1105 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1106 	.halt_reg = 0x7b08c,
1107 	.halt_check = BRANCH_HALT_SKIP,
1108 	.hwcg_reg = 0x7b08c,
1109 	.hwcg_bit = 1,
1110 	.clkr = {
1111 		.enable_reg = 0x62000,
1112 		.enable_mask = BIT(12),
1113 		.hw.init = &(struct clk_init_data){
1114 			.name = "gcc_aggre_noc_pcie_0_axi_clk",
1115 			.ops = &clk_branch2_ops,
1116 		},
1117 	},
1118 };
1119 
1120 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1121 	.halt_reg = 0x9d098,
1122 	.halt_check = BRANCH_HALT_SKIP,
1123 	.hwcg_reg = 0x9d098,
1124 	.hwcg_bit = 1,
1125 	.clkr = {
1126 		.enable_reg = 0x62000,
1127 		.enable_mask = BIT(11),
1128 		.hw.init = &(struct clk_init_data){
1129 			.name = "gcc_aggre_noc_pcie_1_axi_clk",
1130 			.ops = &clk_branch2_ops,
1131 		},
1132 	},
1133 };
1134 
1135 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1136 	.halt_reg = 0x870d4,
1137 	.halt_check = BRANCH_HALT_VOTED,
1138 	.hwcg_reg = 0x870d4,
1139 	.hwcg_bit = 1,
1140 	.clkr = {
1141 		.enable_reg = 0x870d4,
1142 		.enable_mask = BIT(0),
1143 		.hw.init = &(struct clk_init_data){
1144 			.name = "gcc_aggre_ufs_phy_axi_clk",
1145 			.parent_data = &(const struct clk_parent_data){
1146 				.hw = &gcc_ufs_phy_axi_clk_src.clkr.hw,
1147 			},
1148 			.num_parents = 1,
1149 			.flags = CLK_SET_RATE_PARENT,
1150 			.ops = &clk_branch2_ops,
1151 		},
1152 	},
1153 };
1154 
1155 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1156 	.halt_reg = 0x870d4,
1157 	.halt_check = BRANCH_HALT_VOTED,
1158 	.hwcg_reg = 0x870d4,
1159 	.hwcg_bit = 1,
1160 	.clkr = {
1161 		.enable_reg = 0x870d4,
1162 		.enable_mask = BIT(1),
1163 		.hw.init = &(struct clk_init_data){
1164 			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1165 			.parent_data = &(const struct clk_parent_data){
1166 				.hw = &gcc_ufs_phy_axi_clk_src.clkr.hw,
1167 			},
1168 			.num_parents = 1,
1169 			.flags = CLK_SET_RATE_PARENT,
1170 			.ops = &clk_branch2_ops,
1171 		},
1172 	},
1173 };
1174 
1175 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1176 	.halt_reg = 0x49088,
1177 	.halt_check = BRANCH_HALT_VOTED,
1178 	.hwcg_reg = 0x49088,
1179 	.hwcg_bit = 1,
1180 	.clkr = {
1181 		.enable_reg = 0x49088,
1182 		.enable_mask = BIT(0),
1183 		.hw.init = &(struct clk_init_data){
1184 			.name = "gcc_aggre_usb3_prim_axi_clk",
1185 			.parent_data = &(const struct clk_parent_data){
1186 				.hw = &gcc_usb30_prim_master_clk_src.clkr.hw,
1187 			},
1188 			.num_parents = 1,
1189 			.flags = CLK_SET_RATE_PARENT,
1190 			.ops = &clk_branch2_ops,
1191 		},
1192 	},
1193 };
1194 
1195 static struct clk_branch gcc_boot_rom_ahb_clk = {
1196 	.halt_reg = 0x48004,
1197 	.halt_check = BRANCH_HALT_VOTED,
1198 	.hwcg_reg = 0x48004,
1199 	.hwcg_bit = 1,
1200 	.clkr = {
1201 		.enable_reg = 0x62000,
1202 		.enable_mask = BIT(10),
1203 		.hw.init = &(struct clk_init_data){
1204 			.name = "gcc_boot_rom_ahb_clk",
1205 			.ops = &clk_branch2_ops,
1206 		},
1207 	},
1208 };
1209 
1210 static struct clk_branch gcc_camera_hf_axi_clk = {
1211 	.halt_reg = 0x36010,
1212 	.halt_check = BRANCH_HALT_SKIP,
1213 	.hwcg_reg = 0x36010,
1214 	.hwcg_bit = 1,
1215 	.clkr = {
1216 		.enable_reg = 0x36010,
1217 		.enable_mask = BIT(0),
1218 		.hw.init = &(struct clk_init_data){
1219 			.name = "gcc_camera_hf_axi_clk",
1220 			.ops = &clk_branch2_ops,
1221 		},
1222 	},
1223 };
1224 
1225 static struct clk_branch gcc_camera_sf_axi_clk = {
1226 	.halt_reg = 0x36018,
1227 	.halt_check = BRANCH_HALT_SKIP,
1228 	.hwcg_reg = 0x36018,
1229 	.hwcg_bit = 1,
1230 	.clkr = {
1231 		.enable_reg = 0x36018,
1232 		.enable_mask = BIT(0),
1233 		.hw.init = &(struct clk_init_data){
1234 			.name = "gcc_camera_sf_axi_clk",
1235 			.ops = &clk_branch2_ops,
1236 		},
1237 	},
1238 };
1239 
1240 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1241 	.halt_reg = 0x20030,
1242 	.halt_check = BRANCH_HALT_VOTED,
1243 	.hwcg_reg = 0x20030,
1244 	.hwcg_bit = 1,
1245 	.clkr = {
1246 		.enable_reg = 0x62000,
1247 		.enable_mask = BIT(20),
1248 		.hw.init = &(struct clk_init_data){
1249 			.name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1250 			.ops = &clk_branch2_ops,
1251 		},
1252 	},
1253 };
1254 
1255 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1256 	.halt_reg = 0x49084,
1257 	.halt_check = BRANCH_HALT_VOTED,
1258 	.hwcg_reg = 0x49084,
1259 	.hwcg_bit = 1,
1260 	.clkr = {
1261 		.enable_reg = 0x49084,
1262 		.enable_mask = BIT(0),
1263 		.hw.init = &(struct clk_init_data){
1264 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1265 			.parent_data = &(const struct clk_parent_data){
1266 				.hw = &gcc_usb30_prim_master_clk_src.clkr.hw,
1267 			},
1268 			.num_parents = 1,
1269 			.flags = CLK_SET_RATE_PARENT,
1270 			.ops = &clk_branch2_ops,
1271 		},
1272 	},
1273 };
1274 
1275 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1276 	.halt_reg = 0x81154,
1277 	.halt_check = BRANCH_HALT_SKIP,
1278 	.hwcg_reg = 0x81154,
1279 	.hwcg_bit = 1,
1280 	.clkr = {
1281 		.enable_reg = 0x81154,
1282 		.enable_mask = BIT(0),
1283 		.hw.init = &(struct clk_init_data){
1284 			.name = "gcc_ddrss_gpu_axi_clk",
1285 			.ops = &clk_branch2_aon_ops,
1286 		},
1287 	},
1288 };
1289 
1290 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1291 	.halt_reg = 0x9d094,
1292 	.halt_check = BRANCH_HALT_SKIP,
1293 	.hwcg_reg = 0x9d094,
1294 	.hwcg_bit = 1,
1295 	.clkr = {
1296 		.enable_reg = 0x62000,
1297 		.enable_mask = BIT(19),
1298 		.hw.init = &(struct clk_init_data){
1299 			.name = "gcc_ddrss_pcie_sf_tbu_clk",
1300 			.ops = &clk_branch2_ops,
1301 		},
1302 	},
1303 };
1304 
1305 static struct clk_branch gcc_disp_hf_axi_clk = {
1306 	.halt_reg = 0x3700c,
1307 	.halt_check = BRANCH_HALT_SKIP,
1308 	.hwcg_reg = 0x3700c,
1309 	.hwcg_bit = 1,
1310 	.clkr = {
1311 		.enable_reg = 0x3700c,
1312 		.enable_mask = BIT(0),
1313 		.hw.init = &(struct clk_init_data){
1314 			.name = "gcc_disp_hf_axi_clk",
1315 			.ops = &clk_branch2_ops,
1316 		},
1317 	},
1318 };
1319 
1320 static struct clk_branch gcc_disp_sf_axi_clk = {
1321 	.halt_reg = 0x37014,
1322 	.halt_check = BRANCH_HALT_SKIP,
1323 	.hwcg_reg = 0x37014,
1324 	.hwcg_bit = 1,
1325 	.clkr = {
1326 		.enable_reg = 0x37014,
1327 		.enable_mask = BIT(0),
1328 		.hw.init = &(struct clk_init_data){
1329 			.name = "gcc_disp_sf_axi_clk",
1330 			.ops = &clk_branch2_ops,
1331 		},
1332 	},
1333 };
1334 
1335 static struct clk_branch gcc_eusb3_0_clkref_en = {
1336 	.halt_reg = 0x9c00c,
1337 	.halt_check = BRANCH_HALT,
1338 	.clkr = {
1339 		.enable_reg = 0x9c00c,
1340 		.enable_mask = BIT(0),
1341 		.hw.init = &(struct clk_init_data){
1342 			.name = "gcc_eusb3_0_clkref_en",
1343 			.ops = &clk_branch2_ops,
1344 		},
1345 	},
1346 };
1347 
1348 static struct clk_branch gcc_gp1_clk = {
1349 	.halt_reg = 0x74000,
1350 	.halt_check = BRANCH_HALT,
1351 	.clkr = {
1352 		.enable_reg = 0x74000,
1353 		.enable_mask = BIT(0),
1354 		.hw.init = &(struct clk_init_data){
1355 			.name = "gcc_gp1_clk",
1356 			.parent_data = &(const struct clk_parent_data){
1357 				.hw = &gcc_gp1_clk_src.clkr.hw,
1358 			},
1359 			.num_parents = 1,
1360 			.flags = CLK_SET_RATE_PARENT,
1361 			.ops = &clk_branch2_ops,
1362 		},
1363 	},
1364 };
1365 
1366 static struct clk_branch gcc_gp2_clk = {
1367 	.halt_reg = 0x75000,
1368 	.halt_check = BRANCH_HALT,
1369 	.clkr = {
1370 		.enable_reg = 0x75000,
1371 		.enable_mask = BIT(0),
1372 		.hw.init = &(struct clk_init_data){
1373 			.name = "gcc_gp2_clk",
1374 			.parent_data = &(const struct clk_parent_data){
1375 				.hw = &gcc_gp2_clk_src.clkr.hw,
1376 			},
1377 			.num_parents = 1,
1378 			.flags = CLK_SET_RATE_PARENT,
1379 			.ops = &clk_branch2_ops,
1380 		},
1381 	},
1382 };
1383 
1384 static struct clk_branch gcc_gp3_clk = {
1385 	.halt_reg = 0x76000,
1386 	.halt_check = BRANCH_HALT,
1387 	.clkr = {
1388 		.enable_reg = 0x76000,
1389 		.enable_mask = BIT(0),
1390 		.hw.init = &(struct clk_init_data){
1391 			.name = "gcc_gp3_clk",
1392 			.parent_data = &(const struct clk_parent_data){
1393 				.hw = &gcc_gp3_clk_src.clkr.hw,
1394 			},
1395 			.num_parents = 1,
1396 			.flags = CLK_SET_RATE_PARENT,
1397 			.ops = &clk_branch2_ops,
1398 		},
1399 	},
1400 };
1401 
1402 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1403 	.halt_check = BRANCH_HALT_DELAY,
1404 	.clkr = {
1405 		.enable_reg = 0x62000,
1406 		.enable_mask = BIT(15),
1407 		.hw.init = &(struct clk_init_data){
1408 			.name = "gcc_gpu_gpll0_clk_src",
1409 			.parent_data = &(const struct clk_parent_data){
1410 				.hw = &gcc_gpll0.clkr.hw,
1411 			},
1412 			.num_parents = 1,
1413 			.flags = CLK_SET_RATE_PARENT,
1414 			.ops = &clk_branch2_ops,
1415 		},
1416 	},
1417 };
1418 
1419 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1420 	.halt_check = BRANCH_HALT_DELAY,
1421 	.clkr = {
1422 		.enable_reg = 0x62000,
1423 		.enable_mask = BIT(16),
1424 		.hw.init = &(struct clk_init_data){
1425 			.name = "gcc_gpu_gpll0_div_clk_src",
1426 			.parent_data = &(const struct clk_parent_data){
1427 				.hw = &gcc_gpll0_out_even.clkr.hw,
1428 			},
1429 			.num_parents = 1,
1430 			.flags = CLK_SET_RATE_PARENT,
1431 			.ops = &clk_branch2_ops,
1432 		},
1433 	},
1434 };
1435 
1436 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1437 	.halt_reg = 0x81010,
1438 	.halt_check = BRANCH_HALT_VOTED,
1439 	.hwcg_reg = 0x81010,
1440 	.hwcg_bit = 1,
1441 	.clkr = {
1442 		.enable_reg = 0x81010,
1443 		.enable_mask = BIT(0),
1444 		.hw.init = &(struct clk_init_data){
1445 			.name = "gcc_gpu_memnoc_gfx_clk",
1446 			.ops = &clk_branch2_ops,
1447 		},
1448 	},
1449 };
1450 
1451 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1452 	.halt_reg = 0x81018,
1453 	.halt_check = BRANCH_HALT_DELAY,
1454 	.clkr = {
1455 		.enable_reg = 0x81018,
1456 		.enable_mask = BIT(0),
1457 		.hw.init = &(struct clk_init_data){
1458 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1459 			.ops = &clk_branch2_ops,
1460 		},
1461 	},
1462 };
1463 
1464 static struct clk_branch gcc_pcie_0_aux_clk = {
1465 	.halt_reg = 0x7b034,
1466 	.halt_check = BRANCH_HALT_VOTED,
1467 	.clkr = {
1468 		.enable_reg = 0x62008,
1469 		.enable_mask = BIT(3),
1470 		.hw.init = &(struct clk_init_data){
1471 			.name = "gcc_pcie_0_aux_clk",
1472 			.parent_data = &(const struct clk_parent_data){
1473 				.hw = &gcc_pcie_0_aux_clk_src.clkr.hw,
1474 			},
1475 			.num_parents = 1,
1476 			.flags = CLK_SET_RATE_PARENT,
1477 			.ops = &clk_branch2_ops,
1478 		},
1479 	},
1480 };
1481 
1482 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1483 	.halt_reg = 0x7b030,
1484 	.halt_check = BRANCH_HALT_VOTED,
1485 	.hwcg_reg = 0x7b030,
1486 	.hwcg_bit = 1,
1487 	.clkr = {
1488 		.enable_reg = 0x62008,
1489 		.enable_mask = BIT(2),
1490 		.hw.init = &(struct clk_init_data){
1491 			.name = "gcc_pcie_0_cfg_ahb_clk",
1492 			.ops = &clk_branch2_ops,
1493 		},
1494 	},
1495 };
1496 
1497 static struct clk_branch gcc_pcie_0_clkref_en = {
1498 	.halt_reg = 0x9c004,
1499 	.halt_check = BRANCH_HALT,
1500 	.clkr = {
1501 		.enable_reg = 0x9c004,
1502 		.enable_mask = BIT(0),
1503 		.hw.init = &(struct clk_init_data){
1504 			.name = "gcc_pcie_0_clkref_en",
1505 			.ops = &clk_branch2_ops,
1506 		},
1507 	},
1508 };
1509 
1510 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1511 	.halt_reg = 0x7b028,
1512 	.halt_check = BRANCH_HALT_SKIP,
1513 	.clkr = {
1514 		.enable_reg = 0x62008,
1515 		.enable_mask = BIT(1),
1516 		.hw.init = &(struct clk_init_data){
1517 			.name = "gcc_pcie_0_mstr_axi_clk",
1518 			.ops = &clk_branch2_ops,
1519 		},
1520 	},
1521 };
1522 
1523 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1524 	.halt_reg = 0x7b044,
1525 	.halt_check = BRANCH_HALT_VOTED,
1526 	.clkr = {
1527 		.enable_reg = 0x62000,
1528 		.enable_mask = BIT(22),
1529 		.hw.init = &(struct clk_init_data){
1530 			.name = "gcc_pcie_0_phy_rchng_clk",
1531 			.parent_data = &(const struct clk_parent_data){
1532 				.hw = &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1533 			},
1534 			.num_parents = 1,
1535 			.flags = CLK_SET_RATE_PARENT,
1536 			.ops = &clk_branch2_ops,
1537 		},
1538 	},
1539 };
1540 
1541 static struct clk_branch gcc_pcie_0_pipe_clk = {
1542 	.halt_reg = 0x7b03c,
1543 	.halt_check = BRANCH_HALT_SKIP,
1544 	.clkr = {
1545 		.enable_reg = 0x62008,
1546 		.enable_mask = BIT(4),
1547 		.hw.init = &(struct clk_init_data){
1548 			.name = "gcc_pcie_0_pipe_clk",
1549 			.parent_data = &(const struct clk_parent_data){
1550 				.hw = &gcc_pcie_0_pipe_clk_src.clkr.hw,
1551 			},
1552 			.num_parents = 1,
1553 			.flags = CLK_SET_RATE_PARENT,
1554 			.ops = &clk_branch2_ops,
1555 		},
1556 	},
1557 };
1558 
1559 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1560 	.halt_reg = 0x7b020,
1561 	.halt_check = BRANCH_HALT_VOTED,
1562 	.hwcg_reg = 0x7b020,
1563 	.hwcg_bit = 1,
1564 	.clkr = {
1565 		.enable_reg = 0x62008,
1566 		.enable_mask = BIT(0),
1567 		.hw.init = &(struct clk_init_data){
1568 			.name = "gcc_pcie_0_slv_axi_clk",
1569 			.ops = &clk_branch2_ops,
1570 		},
1571 	},
1572 };
1573 
1574 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1575 	.halt_reg = 0x7b01c,
1576 	.halt_check = BRANCH_HALT_VOTED,
1577 	.clkr = {
1578 		.enable_reg = 0x62008,
1579 		.enable_mask = BIT(5),
1580 		.hw.init = &(struct clk_init_data){
1581 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1582 			.ops = &clk_branch2_ops,
1583 		},
1584 	},
1585 };
1586 
1587 static struct clk_branch gcc_pcie_1_aux_clk = {
1588 	.halt_reg = 0x9d030,
1589 	.halt_check = BRANCH_HALT_VOTED,
1590 	.clkr = {
1591 		.enable_reg = 0x62000,
1592 		.enable_mask = BIT(29),
1593 		.hw.init = &(struct clk_init_data){
1594 			.name = "gcc_pcie_1_aux_clk",
1595 			.parent_data = &(const struct clk_parent_data){
1596 				.hw = &gcc_pcie_1_aux_clk_src.clkr.hw,
1597 			},
1598 			.num_parents = 1,
1599 			.flags = CLK_SET_RATE_PARENT,
1600 			.ops = &clk_branch2_ops,
1601 		},
1602 	},
1603 };
1604 
1605 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1606 	.halt_reg = 0x9d02c,
1607 	.halt_check = BRANCH_HALT_VOTED,
1608 	.hwcg_reg = 0x9d02c,
1609 	.hwcg_bit = 1,
1610 	.clkr = {
1611 		.enable_reg = 0x62000,
1612 		.enable_mask = BIT(28),
1613 		.hw.init = &(struct clk_init_data){
1614 			.name = "gcc_pcie_1_cfg_ahb_clk",
1615 			.ops = &clk_branch2_ops,
1616 		},
1617 	},
1618 };
1619 
1620 static struct clk_branch gcc_pcie_1_clkref_en = {
1621 	.halt_reg = 0x9c008,
1622 	.halt_check = BRANCH_HALT,
1623 	.clkr = {
1624 		.enable_reg = 0x9c008,
1625 		.enable_mask = BIT(0),
1626 		.hw.init = &(struct clk_init_data){
1627 			.name = "gcc_pcie_1_clkref_en",
1628 			.ops = &clk_branch2_ops,
1629 		},
1630 	},
1631 };
1632 
1633 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1634 	.halt_reg = 0x9d024,
1635 	.halt_check = BRANCH_HALT_SKIP,
1636 	.clkr = {
1637 		.enable_reg = 0x62000,
1638 		.enable_mask = BIT(27),
1639 		.hw.init = &(struct clk_init_data){
1640 			.name = "gcc_pcie_1_mstr_axi_clk",
1641 			.ops = &clk_branch2_ops,
1642 		},
1643 	},
1644 };
1645 
1646 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1647 	.halt_reg = 0x9d038,
1648 	.halt_check = BRANCH_HALT_VOTED,
1649 	.clkr = {
1650 		.enable_reg = 0x62000,
1651 		.enable_mask = BIT(24),
1652 		.hw.init = &(struct clk_init_data){
1653 			.name = "gcc_pcie_1_phy_aux_clk",
1654 			.parent_data = &(const struct clk_parent_data){
1655 				.hw = &gcc_pcie_1_phy_aux_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_pcie_1_phy_rchng_clk = {
1665 	.halt_reg = 0x9d048,
1666 	.halt_check = BRANCH_HALT_VOTED,
1667 	.clkr = {
1668 		.enable_reg = 0x62000,
1669 		.enable_mask = BIT(23),
1670 		.hw.init = &(struct clk_init_data){
1671 			.name = "gcc_pcie_1_phy_rchng_clk",
1672 			.parent_data = &(const struct clk_parent_data){
1673 				.hw = &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1674 			},
1675 			.num_parents = 1,
1676 			.flags = CLK_SET_RATE_PARENT,
1677 			.ops = &clk_branch2_ops,
1678 		},
1679 	},
1680 };
1681 
1682 static struct clk_branch gcc_pcie_1_pipe_clk = {
1683 	.halt_reg = 0x9d040,
1684 	.halt_check = BRANCH_HALT_SKIP,
1685 	.clkr = {
1686 		.enable_reg = 0x62000,
1687 		.enable_mask = BIT(30),
1688 		.hw.init = &(struct clk_init_data){
1689 			.name = "gcc_pcie_1_pipe_clk",
1690 			.parent_data = &(const struct clk_parent_data){
1691 				.hw = &gcc_pcie_1_pipe_clk_src.clkr.hw,
1692 			},
1693 			.num_parents = 1,
1694 			.flags = CLK_SET_RATE_PARENT,
1695 			.ops = &clk_branch2_ops,
1696 		},
1697 	},
1698 };
1699 
1700 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1701 	.halt_reg = 0x9d01c,
1702 	.halt_check = BRANCH_HALT_VOTED,
1703 	.hwcg_reg = 0x9d01c,
1704 	.hwcg_bit = 1,
1705 	.clkr = {
1706 		.enable_reg = 0x62000,
1707 		.enable_mask = BIT(26),
1708 		.hw.init = &(struct clk_init_data){
1709 			.name = "gcc_pcie_1_slv_axi_clk",
1710 			.ops = &clk_branch2_ops,
1711 		},
1712 	},
1713 };
1714 
1715 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1716 	.halt_reg = 0x9d018,
1717 	.halt_check = BRANCH_HALT_VOTED,
1718 	.clkr = {
1719 		.enable_reg = 0x62000,
1720 		.enable_mask = BIT(25),
1721 		.hw.init = &(struct clk_init_data){
1722 			.name = "gcc_pcie_1_slv_q2a_axi_clk",
1723 			.ops = &clk_branch2_ops,
1724 		},
1725 	},
1726 };
1727 
1728 static struct clk_branch gcc_pdm2_clk = {
1729 	.halt_reg = 0x4300c,
1730 	.halt_check = BRANCH_HALT,
1731 	.clkr = {
1732 		.enable_reg = 0x4300c,
1733 		.enable_mask = BIT(0),
1734 		.hw.init = &(struct clk_init_data){
1735 			.name = "gcc_pdm2_clk",
1736 			.parent_data = &(const struct clk_parent_data){
1737 				.hw = &gcc_pdm2_clk_src.clkr.hw,
1738 			},
1739 			.num_parents = 1,
1740 			.flags = CLK_SET_RATE_PARENT,
1741 			.ops = &clk_branch2_ops,
1742 		},
1743 	},
1744 };
1745 
1746 static struct clk_branch gcc_pdm_ahb_clk = {
1747 	.halt_reg = 0x43004,
1748 	.halt_check = BRANCH_HALT_VOTED,
1749 	.hwcg_reg = 0x43004,
1750 	.hwcg_bit = 1,
1751 	.clkr = {
1752 		.enable_reg = 0x43004,
1753 		.enable_mask = BIT(0),
1754 		.hw.init = &(struct clk_init_data){
1755 			.name = "gcc_pdm_ahb_clk",
1756 			.ops = &clk_branch2_ops,
1757 		},
1758 	},
1759 };
1760 
1761 static struct clk_branch gcc_pdm_xo4_clk = {
1762 	.halt_reg = 0x43008,
1763 	.halt_check = BRANCH_HALT,
1764 	.clkr = {
1765 		.enable_reg = 0x43008,
1766 		.enable_mask = BIT(0),
1767 		.hw.init = &(struct clk_init_data){
1768 			.name = "gcc_pdm_xo4_clk",
1769 			.ops = &clk_branch2_ops,
1770 		},
1771 	},
1772 };
1773 
1774 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1775 	.halt_reg = 0x36008,
1776 	.halt_check = BRANCH_HALT_VOTED,
1777 	.hwcg_reg = 0x36008,
1778 	.hwcg_bit = 1,
1779 	.clkr = {
1780 		.enable_reg = 0x36008,
1781 		.enable_mask = BIT(0),
1782 		.hw.init = &(struct clk_init_data){
1783 			.name = "gcc_qmip_camera_nrt_ahb_clk",
1784 			.ops = &clk_branch2_ops,
1785 		},
1786 	},
1787 };
1788 
1789 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1790 	.halt_reg = 0x3600c,
1791 	.halt_check = BRANCH_HALT_VOTED,
1792 	.hwcg_reg = 0x3600c,
1793 	.hwcg_bit = 1,
1794 	.clkr = {
1795 		.enable_reg = 0x3600c,
1796 		.enable_mask = BIT(0),
1797 		.hw.init = &(struct clk_init_data){
1798 			.name = "gcc_qmip_camera_rt_ahb_clk",
1799 			.ops = &clk_branch2_ops,
1800 		},
1801 	},
1802 };
1803 
1804 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1805 	.halt_reg = 0x37008,
1806 	.halt_check = BRANCH_HALT_VOTED,
1807 	.hwcg_reg = 0x37008,
1808 	.hwcg_bit = 1,
1809 	.clkr = {
1810 		.enable_reg = 0x37008,
1811 		.enable_mask = BIT(0),
1812 		.hw.init = &(struct clk_init_data){
1813 			.name = "gcc_qmip_disp_ahb_clk",
1814 			.ops = &clk_branch2_ops,
1815 		},
1816 	},
1817 };
1818 
1819 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1820 	.halt_reg = 0x81008,
1821 	.halt_check = BRANCH_HALT_VOTED,
1822 	.hwcg_reg = 0x81008,
1823 	.hwcg_bit = 1,
1824 	.clkr = {
1825 		.enable_reg = 0x81008,
1826 		.enable_mask = BIT(0),
1827 		.hw.init = &(struct clk_init_data){
1828 			.name = "gcc_qmip_gpu_ahb_clk",
1829 			.ops = &clk_branch2_ops,
1830 		},
1831 	},
1832 };
1833 
1834 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1835 	.halt_reg = 0x7b018,
1836 	.halt_check = BRANCH_HALT_VOTED,
1837 	.hwcg_reg = 0x7b018,
1838 	.hwcg_bit = 1,
1839 	.clkr = {
1840 		.enable_reg = 0x7b018,
1841 		.enable_mask = BIT(0),
1842 		.hw.init = &(struct clk_init_data){
1843 			.name = "gcc_qmip_pcie_ahb_clk",
1844 			.ops = &clk_branch2_ops,
1845 		},
1846 	},
1847 };
1848 
1849 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
1850 	.halt_reg = 0x42014,
1851 	.halt_check = BRANCH_HALT_VOTED,
1852 	.hwcg_reg = 0x42014,
1853 	.hwcg_bit = 1,
1854 	.clkr = {
1855 		.enable_reg = 0x42014,
1856 		.enable_mask = BIT(0),
1857 		.hw.init = &(struct clk_init_data){
1858 			.name = "gcc_qmip_video_cv_cpu_ahb_clk",
1859 			.ops = &clk_branch2_ops,
1860 		},
1861 	},
1862 };
1863 
1864 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
1865 	.halt_reg = 0x42008,
1866 	.halt_check = BRANCH_HALT_VOTED,
1867 	.hwcg_reg = 0x42008,
1868 	.hwcg_bit = 1,
1869 	.clkr = {
1870 		.enable_reg = 0x42008,
1871 		.enable_mask = BIT(0),
1872 		.hw.init = &(struct clk_init_data){
1873 			.name = "gcc_qmip_video_cvp_ahb_clk",
1874 			.ops = &clk_branch2_ops,
1875 		},
1876 	},
1877 };
1878 
1879 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
1880 	.halt_reg = 0x42010,
1881 	.halt_check = BRANCH_HALT_VOTED,
1882 	.hwcg_reg = 0x42010,
1883 	.hwcg_bit = 1,
1884 	.clkr = {
1885 		.enable_reg = 0x42010,
1886 		.enable_mask = BIT(0),
1887 		.hw.init = &(struct clk_init_data){
1888 			.name = "gcc_qmip_video_v_cpu_ahb_clk",
1889 			.ops = &clk_branch2_ops,
1890 		},
1891 	},
1892 };
1893 
1894 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1895 	.halt_reg = 0x4200c,
1896 	.halt_check = BRANCH_HALT_VOTED,
1897 	.hwcg_reg = 0x4200c,
1898 	.hwcg_bit = 1,
1899 	.clkr = {
1900 		.enable_reg = 0x4200c,
1901 		.enable_mask = BIT(0),
1902 		.hw.init = &(struct clk_init_data){
1903 			.name = "gcc_qmip_video_vcodec_ahb_clk",
1904 			.ops = &clk_branch2_ops,
1905 		},
1906 	},
1907 };
1908 
1909 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1910 	.halt_reg = 0x3300c,
1911 	.halt_check = BRANCH_HALT_VOTED,
1912 	.clkr = {
1913 		.enable_reg = 0x62008,
1914 		.enable_mask = BIT(9),
1915 		.hw.init = &(struct clk_init_data){
1916 			.name = "gcc_qupv3_wrap0_core_2x_clk",
1917 			.ops = &clk_branch2_ops,
1918 		},
1919 	},
1920 };
1921 
1922 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1923 	.halt_reg = 0x33000,
1924 	.halt_check = BRANCH_HALT_VOTED,
1925 	.clkr = {
1926 		.enable_reg = 0x62008,
1927 		.enable_mask = BIT(8),
1928 		.hw.init = &(struct clk_init_data){
1929 			.name = "gcc_qupv3_wrap0_core_clk",
1930 			.ops = &clk_branch2_ops,
1931 		},
1932 	},
1933 };
1934 
1935 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1936 	.halt_reg = 0x2700c,
1937 	.halt_check = BRANCH_HALT_VOTED,
1938 	.clkr = {
1939 		.enable_reg = 0x62008,
1940 		.enable_mask = BIT(10),
1941 		.hw.init = &(struct clk_init_data){
1942 			.name = "gcc_qupv3_wrap0_s0_clk",
1943 			.parent_data = &(const struct clk_parent_data){
1944 				.hw = &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1945 			},
1946 			.num_parents = 1,
1947 			.flags = CLK_SET_RATE_PARENT,
1948 			.ops = &clk_branch2_ops,
1949 		},
1950 	},
1951 };
1952 
1953 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1954 	.halt_reg = 0x27140,
1955 	.halt_check = BRANCH_HALT_VOTED,
1956 	.clkr = {
1957 		.enable_reg = 0x62008,
1958 		.enable_mask = BIT(11),
1959 		.hw.init = &(struct clk_init_data){
1960 			.name = "gcc_qupv3_wrap0_s1_clk",
1961 			.parent_data = &(const struct clk_parent_data){
1962 				.hw = &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1963 			},
1964 			.num_parents = 1,
1965 			.flags = CLK_SET_RATE_PARENT,
1966 			.ops = &clk_branch2_ops,
1967 		},
1968 	},
1969 };
1970 
1971 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1972 	.halt_reg = 0x27274,
1973 	.halt_check = BRANCH_HALT_VOTED,
1974 	.clkr = {
1975 		.enable_reg = 0x62008,
1976 		.enable_mask = BIT(12),
1977 		.hw.init = &(struct clk_init_data){
1978 			.name = "gcc_qupv3_wrap0_s2_clk",
1979 			.parent_data = &(const struct clk_parent_data){
1980 				.hw = &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1981 			},
1982 			.num_parents = 1,
1983 			.flags = CLK_SET_RATE_PARENT,
1984 			.ops = &clk_branch2_ops,
1985 		},
1986 	},
1987 };
1988 
1989 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1990 	.halt_reg = 0x273a8,
1991 	.halt_check = BRANCH_HALT_VOTED,
1992 	.clkr = {
1993 		.enable_reg = 0x62008,
1994 		.enable_mask = BIT(13),
1995 		.hw.init = &(struct clk_init_data){
1996 			.name = "gcc_qupv3_wrap0_s3_clk",
1997 			.parent_data = &(const struct clk_parent_data){
1998 				.hw = &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1999 			},
2000 			.num_parents = 1,
2001 			.flags = CLK_SET_RATE_PARENT,
2002 			.ops = &clk_branch2_ops,
2003 		},
2004 	},
2005 };
2006 
2007 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2008 	.halt_reg = 0x274dc,
2009 	.halt_check = BRANCH_HALT_VOTED,
2010 	.clkr = {
2011 		.enable_reg = 0x62008,
2012 		.enable_mask = BIT(14),
2013 		.hw.init = &(struct clk_init_data){
2014 			.name = "gcc_qupv3_wrap0_s4_clk",
2015 			.parent_data = &(const struct clk_parent_data){
2016 				.hw = &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2017 			},
2018 			.num_parents = 1,
2019 			.flags = CLK_SET_RATE_PARENT,
2020 			.ops = &clk_branch2_ops,
2021 		},
2022 	},
2023 };
2024 
2025 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2026 	.halt_reg = 0x27610,
2027 	.halt_check = BRANCH_HALT_VOTED,
2028 	.clkr = {
2029 		.enable_reg = 0x62008,
2030 		.enable_mask = BIT(15),
2031 		.hw.init = &(struct clk_init_data){
2032 			.name = "gcc_qupv3_wrap0_s5_clk",
2033 			.parent_data = &(const struct clk_parent_data){
2034 				.hw = &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2035 			},
2036 			.num_parents = 1,
2037 			.flags = CLK_SET_RATE_PARENT,
2038 			.ops = &clk_branch2_ops,
2039 		},
2040 	},
2041 };
2042 
2043 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2044 	.halt_reg = 0x27744,
2045 	.halt_check = BRANCH_HALT_VOTED,
2046 	.clkr = {
2047 		.enable_reg = 0x62008,
2048 		.enable_mask = BIT(16),
2049 		.hw.init = &(struct clk_init_data){
2050 			.name = "gcc_qupv3_wrap0_s6_clk",
2051 			.parent_data = &(const struct clk_parent_data){
2052 				.hw = &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2053 			},
2054 			.num_parents = 1,
2055 			.flags = CLK_SET_RATE_PARENT,
2056 			.ops = &clk_branch2_ops,
2057 		},
2058 	},
2059 };
2060 
2061 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2062 	.halt_reg = 0x27878,
2063 	.halt_check = BRANCH_HALT_VOTED,
2064 	.clkr = {
2065 		.enable_reg = 0x62008,
2066 		.enable_mask = BIT(17),
2067 		.hw.init = &(struct clk_init_data){
2068 			.name = "gcc_qupv3_wrap0_s7_clk",
2069 			.parent_data = &(const struct clk_parent_data){
2070 				.hw = &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2071 			},
2072 			.num_parents = 1,
2073 			.flags = CLK_SET_RATE_PARENT,
2074 			.ops = &clk_branch2_ops,
2075 		},
2076 	},
2077 };
2078 
2079 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2080 	.halt_reg = 0x3314c,
2081 	.halt_check = BRANCH_HALT_VOTED,
2082 	.clkr = {
2083 		.enable_reg = 0x62008,
2084 		.enable_mask = BIT(18),
2085 		.hw.init = &(struct clk_init_data){
2086 			.name = "gcc_qupv3_wrap1_core_2x_clk",
2087 			.ops = &clk_branch2_ops,
2088 		},
2089 	},
2090 };
2091 
2092 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2093 	.halt_reg = 0x33140,
2094 	.halt_check = BRANCH_HALT_VOTED,
2095 	.clkr = {
2096 		.enable_reg = 0x62008,
2097 		.enable_mask = BIT(19),
2098 		.hw.init = &(struct clk_init_data){
2099 			.name = "gcc_qupv3_wrap1_core_clk",
2100 			.ops = &clk_branch2_ops,
2101 		},
2102 	},
2103 };
2104 
2105 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2106 	.halt_reg = 0x2800c,
2107 	.halt_check = BRANCH_HALT_VOTED,
2108 	.clkr = {
2109 		.enable_reg = 0x62008,
2110 		.enable_mask = BIT(22),
2111 		.hw.init = &(struct clk_init_data){
2112 			.name = "gcc_qupv3_wrap1_s0_clk",
2113 			.parent_data = &(const struct clk_parent_data){
2114 				.hw = &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2115 			},
2116 			.num_parents = 1,
2117 			.flags = CLK_SET_RATE_PARENT,
2118 			.ops = &clk_branch2_ops,
2119 		},
2120 	},
2121 };
2122 
2123 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2124 	.halt_reg = 0x28140,
2125 	.halt_check = BRANCH_HALT_VOTED,
2126 	.clkr = {
2127 		.enable_reg = 0x62008,
2128 		.enable_mask = BIT(23),
2129 		.hw.init = &(struct clk_init_data){
2130 			.name = "gcc_qupv3_wrap1_s1_clk",
2131 			.parent_data = &(const struct clk_parent_data){
2132 				.hw = &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2133 			},
2134 			.num_parents = 1,
2135 			.flags = CLK_SET_RATE_PARENT,
2136 			.ops = &clk_branch2_ops,
2137 		},
2138 	},
2139 };
2140 
2141 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2142 	.halt_reg = 0x28274,
2143 	.halt_check = BRANCH_HALT_VOTED,
2144 	.clkr = {
2145 		.enable_reg = 0x62008,
2146 		.enable_mask = BIT(24),
2147 		.hw.init = &(struct clk_init_data){
2148 			.name = "gcc_qupv3_wrap1_s2_clk",
2149 			.parent_data = &(const struct clk_parent_data){
2150 				.hw = &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2151 			},
2152 			.num_parents = 1,
2153 			.flags = CLK_SET_RATE_PARENT,
2154 			.ops = &clk_branch2_ops,
2155 		},
2156 	},
2157 };
2158 
2159 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2160 	.halt_reg = 0x283a8,
2161 	.halt_check = BRANCH_HALT_VOTED,
2162 	.clkr = {
2163 		.enable_reg = 0x62008,
2164 		.enable_mask = BIT(25),
2165 		.hw.init = &(struct clk_init_data){
2166 			.name = "gcc_qupv3_wrap1_s3_clk",
2167 			.parent_data = &(const struct clk_parent_data){
2168 				.hw = &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2169 			},
2170 			.num_parents = 1,
2171 			.flags = CLK_SET_RATE_PARENT,
2172 			.ops = &clk_branch2_ops,
2173 		},
2174 	},
2175 };
2176 
2177 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2178 	.halt_reg = 0x284dc,
2179 	.halt_check = BRANCH_HALT_VOTED,
2180 	.clkr = {
2181 		.enable_reg = 0x62008,
2182 		.enable_mask = BIT(26),
2183 		.hw.init = &(struct clk_init_data){
2184 			.name = "gcc_qupv3_wrap1_s4_clk",
2185 			.parent_data = &(const struct clk_parent_data){
2186 				.hw = &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2187 			},
2188 			.num_parents = 1,
2189 			.flags = CLK_SET_RATE_PARENT,
2190 			.ops = &clk_branch2_ops,
2191 		},
2192 	},
2193 };
2194 
2195 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2196 	.halt_reg = 0x28610,
2197 	.halt_check = BRANCH_HALT_VOTED,
2198 	.clkr = {
2199 		.enable_reg = 0x62008,
2200 		.enable_mask = BIT(27),
2201 		.hw.init = &(struct clk_init_data){
2202 			.name = "gcc_qupv3_wrap1_s5_clk",
2203 			.parent_data = &(const struct clk_parent_data){
2204 				.hw = &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2205 			},
2206 			.num_parents = 1,
2207 			.flags = CLK_SET_RATE_PARENT,
2208 			.ops = &clk_branch2_ops,
2209 		},
2210 	},
2211 };
2212 
2213 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2214 	.halt_reg = 0x28744,
2215 	.halt_check = BRANCH_HALT_VOTED,
2216 	.clkr = {
2217 		.enable_reg = 0x62008,
2218 		.enable_mask = BIT(28),
2219 		.hw.init = &(struct clk_init_data){
2220 			.name = "gcc_qupv3_wrap1_s6_clk",
2221 			.parent_data = &(const struct clk_parent_data){
2222 				.hw = &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2223 			},
2224 			.num_parents = 1,
2225 			.flags = CLK_SET_RATE_PARENT,
2226 			.ops = &clk_branch2_ops,
2227 		},
2228 	},
2229 };
2230 
2231 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2232 	.halt_reg = 0x3328c,
2233 	.halt_check = BRANCH_HALT_VOTED,
2234 	.clkr = {
2235 		.enable_reg = 0x62010,
2236 		.enable_mask = BIT(3),
2237 		.hw.init = &(struct clk_init_data){
2238 			.name = "gcc_qupv3_wrap2_core_2x_clk",
2239 			.ops = &clk_branch2_ops,
2240 		},
2241 	},
2242 };
2243 
2244 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2245 	.halt_reg = 0x33280,
2246 	.halt_check = BRANCH_HALT_VOTED,
2247 	.clkr = {
2248 		.enable_reg = 0x62010,
2249 		.enable_mask = BIT(0),
2250 		.hw.init = &(struct clk_init_data){
2251 			.name = "gcc_qupv3_wrap2_core_clk",
2252 			.ops = &clk_branch2_ops,
2253 		},
2254 	},
2255 };
2256 
2257 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2258 	.halt_reg = 0x2e00c,
2259 	.halt_check = BRANCH_HALT_VOTED,
2260 	.clkr = {
2261 		.enable_reg = 0x62010,
2262 		.enable_mask = BIT(4),
2263 		.hw.init = &(struct clk_init_data){
2264 			.name = "gcc_qupv3_wrap2_s0_clk",
2265 			.parent_data = &(const struct clk_parent_data){
2266 				.hw = &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2267 			},
2268 			.num_parents = 1,
2269 			.flags = CLK_SET_RATE_PARENT,
2270 			.ops = &clk_branch2_ops,
2271 		},
2272 	},
2273 };
2274 
2275 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2276 	.halt_reg = 0x2e140,
2277 	.halt_check = BRANCH_HALT_VOTED,
2278 	.clkr = {
2279 		.enable_reg = 0x62010,
2280 		.enable_mask = BIT(5),
2281 		.hw.init = &(struct clk_init_data){
2282 			.name = "gcc_qupv3_wrap2_s1_clk",
2283 			.parent_data = &(const struct clk_parent_data){
2284 				.hw = &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2285 			},
2286 			.num_parents = 1,
2287 			.flags = CLK_SET_RATE_PARENT,
2288 			.ops = &clk_branch2_ops,
2289 		},
2290 	},
2291 };
2292 
2293 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2294 	.halt_reg = 0x2e274,
2295 	.halt_check = BRANCH_HALT_VOTED,
2296 	.clkr = {
2297 		.enable_reg = 0x62010,
2298 		.enable_mask = BIT(6),
2299 		.hw.init = &(struct clk_init_data){
2300 			.name = "gcc_qupv3_wrap2_s2_clk",
2301 			.parent_data = &(const struct clk_parent_data){
2302 				.hw = &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2303 			},
2304 			.num_parents = 1,
2305 			.flags = CLK_SET_RATE_PARENT,
2306 			.ops = &clk_branch2_ops,
2307 		},
2308 	},
2309 };
2310 
2311 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2312 	.halt_reg = 0x2e3a8,
2313 	.halt_check = BRANCH_HALT_VOTED,
2314 	.clkr = {
2315 		.enable_reg = 0x62010,
2316 		.enable_mask = BIT(7),
2317 		.hw.init = &(struct clk_init_data){
2318 			.name = "gcc_qupv3_wrap2_s3_clk",
2319 			.parent_data = &(const struct clk_parent_data){
2320 				.hw = &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2321 			},
2322 			.num_parents = 1,
2323 			.flags = CLK_SET_RATE_PARENT,
2324 			.ops = &clk_branch2_ops,
2325 		},
2326 	},
2327 };
2328 
2329 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2330 	.halt_reg = 0x2e4dc,
2331 	.halt_check = BRANCH_HALT_VOTED,
2332 	.clkr = {
2333 		.enable_reg = 0x62010,
2334 		.enable_mask = BIT(8),
2335 		.hw.init = &(struct clk_init_data){
2336 			.name = "gcc_qupv3_wrap2_s4_clk",
2337 			.parent_data = &(const struct clk_parent_data){
2338 				.hw = &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2339 			},
2340 			.num_parents = 1,
2341 			.flags = CLK_SET_RATE_PARENT,
2342 			.ops = &clk_branch2_ops,
2343 		},
2344 	},
2345 };
2346 
2347 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2348 	.halt_reg = 0x2e610,
2349 	.halt_check = BRANCH_HALT_VOTED,
2350 	.clkr = {
2351 		.enable_reg = 0x62010,
2352 		.enable_mask = BIT(9),
2353 		.hw.init = &(struct clk_init_data){
2354 			.name = "gcc_qupv3_wrap2_s5_clk",
2355 			.parent_data = &(const struct clk_parent_data){
2356 				.hw = &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2357 			},
2358 			.num_parents = 1,
2359 			.flags = CLK_SET_RATE_PARENT,
2360 			.ops = &clk_branch2_ops,
2361 		},
2362 	},
2363 };
2364 
2365 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2366 	.halt_reg = 0x2e744,
2367 	.halt_check = BRANCH_HALT_VOTED,
2368 	.clkr = {
2369 		.enable_reg = 0x62010,
2370 		.enable_mask = BIT(10),
2371 		.hw.init = &(struct clk_init_data){
2372 			.name = "gcc_qupv3_wrap2_s6_clk",
2373 			.parent_data = &(const struct clk_parent_data){
2374 				.hw = &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2375 			},
2376 			.num_parents = 1,
2377 			.flags = CLK_SET_RATE_PARENT,
2378 			.ops = &clk_branch2_ops,
2379 		},
2380 	},
2381 };
2382 
2383 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2384 	.halt_reg = 0x27004,
2385 	.halt_check = BRANCH_HALT_VOTED,
2386 	.hwcg_reg = 0x27004,
2387 	.hwcg_bit = 1,
2388 	.clkr = {
2389 		.enable_reg = 0x62008,
2390 		.enable_mask = BIT(6),
2391 		.hw.init = &(struct clk_init_data){
2392 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2393 			.ops = &clk_branch2_ops,
2394 		},
2395 	},
2396 };
2397 
2398 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2399 	.halt_reg = 0x27008,
2400 	.halt_check = BRANCH_HALT_VOTED,
2401 	.hwcg_reg = 0x27008,
2402 	.hwcg_bit = 1,
2403 	.clkr = {
2404 		.enable_reg = 0x62008,
2405 		.enable_mask = BIT(7),
2406 		.hw.init = &(struct clk_init_data){
2407 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2408 			.ops = &clk_branch2_ops,
2409 		},
2410 	},
2411 };
2412 
2413 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2414 	.halt_reg = 0x28004,
2415 	.halt_check = BRANCH_HALT_VOTED,
2416 	.hwcg_reg = 0x28004,
2417 	.hwcg_bit = 1,
2418 	.clkr = {
2419 		.enable_reg = 0x62008,
2420 		.enable_mask = BIT(20),
2421 		.hw.init = &(struct clk_init_data){
2422 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2423 			.ops = &clk_branch2_ops,
2424 		},
2425 	},
2426 };
2427 
2428 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2429 	.halt_reg = 0x28008,
2430 	.halt_check = BRANCH_HALT_VOTED,
2431 	.hwcg_reg = 0x28008,
2432 	.hwcg_bit = 1,
2433 	.clkr = {
2434 		.enable_reg = 0x62008,
2435 		.enable_mask = BIT(21),
2436 		.hw.init = &(struct clk_init_data){
2437 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2438 			.ops = &clk_branch2_ops,
2439 		},
2440 	},
2441 };
2442 
2443 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2444 	.halt_reg = 0x2e004,
2445 	.halt_check = BRANCH_HALT_VOTED,
2446 	.hwcg_reg = 0x2e004,
2447 	.hwcg_bit = 1,
2448 	.clkr = {
2449 		.enable_reg = 0x62010,
2450 		.enable_mask = BIT(2),
2451 		.hw.init = &(struct clk_init_data){
2452 			.name = "gcc_qupv3_wrap_2_m_ahb_clk",
2453 			.ops = &clk_branch2_ops,
2454 		},
2455 	},
2456 };
2457 
2458 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2459 	.halt_reg = 0x2e008,
2460 	.halt_check = BRANCH_HALT_VOTED,
2461 	.hwcg_reg = 0x2e008,
2462 	.hwcg_bit = 1,
2463 	.clkr = {
2464 		.enable_reg = 0x62010,
2465 		.enable_mask = BIT(1),
2466 		.hw.init = &(struct clk_init_data){
2467 			.name = "gcc_qupv3_wrap_2_s_ahb_clk",
2468 			.ops = &clk_branch2_ops,
2469 		},
2470 	},
2471 };
2472 
2473 static struct clk_branch gcc_sdcc2_ahb_clk = {
2474 	.halt_reg = 0x2400c,
2475 	.halt_check = BRANCH_HALT,
2476 	.clkr = {
2477 		.enable_reg = 0x2400c,
2478 		.enable_mask = BIT(0),
2479 		.hw.init = &(struct clk_init_data){
2480 			.name = "gcc_sdcc2_ahb_clk",
2481 			.ops = &clk_branch2_ops,
2482 		},
2483 	},
2484 };
2485 
2486 static struct clk_branch gcc_sdcc2_apps_clk = {
2487 	.halt_reg = 0x24004,
2488 	.halt_check = BRANCH_HALT,
2489 	.clkr = {
2490 		.enable_reg = 0x24004,
2491 		.enable_mask = BIT(0),
2492 		.hw.init = &(struct clk_init_data){
2493 			.name = "gcc_sdcc2_apps_clk",
2494 			.parent_data = &(const struct clk_parent_data){
2495 				.hw = &gcc_sdcc2_apps_clk_src.clkr.hw,
2496 			},
2497 			.num_parents = 1,
2498 			.flags = CLK_SET_RATE_PARENT,
2499 			.ops = &clk_branch2_ops,
2500 		},
2501 	},
2502 };
2503 
2504 static struct clk_branch gcc_sdcc2_at_clk = {
2505 	.halt_reg = 0x24010,
2506 	.halt_check = BRANCH_HALT_VOTED,
2507 	.hwcg_reg = 0x24010,
2508 	.hwcg_bit = 1,
2509 	.clkr = {
2510 		.enable_reg = 0x24010,
2511 		.enable_mask = BIT(0),
2512 		.hw.init = &(struct clk_init_data){
2513 			.name = "gcc_sdcc2_at_clk",
2514 			.ops = &clk_branch2_ops,
2515 		},
2516 	},
2517 };
2518 
2519 static struct clk_branch gcc_sdcc4_ahb_clk = {
2520 	.halt_reg = 0x2600c,
2521 	.halt_check = BRANCH_HALT,
2522 	.clkr = {
2523 		.enable_reg = 0x2600c,
2524 		.enable_mask = BIT(0),
2525 		.hw.init = &(struct clk_init_data){
2526 			.name = "gcc_sdcc4_ahb_clk",
2527 			.ops = &clk_branch2_ops,
2528 		},
2529 	},
2530 };
2531 
2532 static struct clk_branch gcc_sdcc4_apps_clk = {
2533 	.halt_reg = 0x26004,
2534 	.halt_check = BRANCH_HALT,
2535 	.clkr = {
2536 		.enable_reg = 0x26004,
2537 		.enable_mask = BIT(0),
2538 		.hw.init = &(struct clk_init_data){
2539 			.name = "gcc_sdcc4_apps_clk",
2540 			.parent_data = &(const struct clk_parent_data){
2541 				.hw = &gcc_sdcc4_apps_clk_src.clkr.hw,
2542 			},
2543 			.num_parents = 1,
2544 			.flags = CLK_SET_RATE_PARENT,
2545 			.ops = &clk_branch2_ops,
2546 		},
2547 	},
2548 };
2549 
2550 static struct clk_branch gcc_sdcc4_at_clk = {
2551 	.halt_reg = 0x26010,
2552 	.halt_check = BRANCH_HALT_VOTED,
2553 	.hwcg_reg = 0x26010,
2554 	.hwcg_bit = 1,
2555 	.clkr = {
2556 		.enable_reg = 0x26010,
2557 		.enable_mask = BIT(0),
2558 		.hw.init = &(struct clk_init_data){
2559 			.name = "gcc_sdcc4_at_clk",
2560 			.ops = &clk_branch2_ops,
2561 		},
2562 	},
2563 };
2564 
2565 static struct clk_branch gcc_ufs_0_clkref_en = {
2566 	.halt_reg = 0x9c000,
2567 	.halt_check = BRANCH_HALT,
2568 	.clkr = {
2569 		.enable_reg = 0x9c000,
2570 		.enable_mask = BIT(0),
2571 		.hw.init = &(struct clk_init_data){
2572 			.name = "gcc_ufs_0_clkref_en",
2573 			.ops = &clk_branch2_ops,
2574 		},
2575 	},
2576 };
2577 
2578 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2579 	.halt_reg = 0x87020,
2580 	.halt_check = BRANCH_HALT_VOTED,
2581 	.hwcg_reg = 0x87020,
2582 	.hwcg_bit = 1,
2583 	.clkr = {
2584 		.enable_reg = 0x87020,
2585 		.enable_mask = BIT(0),
2586 		.hw.init = &(struct clk_init_data){
2587 			.name = "gcc_ufs_phy_ahb_clk",
2588 			.ops = &clk_branch2_ops,
2589 		},
2590 	},
2591 };
2592 
2593 static struct clk_branch gcc_ufs_phy_axi_clk = {
2594 	.halt_reg = 0x87018,
2595 	.halt_check = BRANCH_HALT_VOTED,
2596 	.hwcg_reg = 0x87018,
2597 	.hwcg_bit = 1,
2598 	.clkr = {
2599 		.enable_reg = 0x87018,
2600 		.enable_mask = BIT(0),
2601 		.hw.init = &(struct clk_init_data){
2602 			.name = "gcc_ufs_phy_axi_clk",
2603 			.parent_data = &(const struct clk_parent_data){
2604 				.hw = &gcc_ufs_phy_axi_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_ufs_phy_axi_hw_ctl_clk = {
2614 	.halt_reg = 0x87018,
2615 	.halt_check = BRANCH_HALT_VOTED,
2616 	.hwcg_reg = 0x87018,
2617 	.hwcg_bit = 1,
2618 	.clkr = {
2619 		.enable_reg = 0x87018,
2620 		.enable_mask = BIT(1),
2621 		.hw.init = &(struct clk_init_data){
2622 			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
2623 			.parent_data = &(const struct clk_parent_data){
2624 				.hw = &gcc_ufs_phy_axi_clk_src.clkr.hw,
2625 			},
2626 			.num_parents = 1,
2627 			.flags = CLK_SET_RATE_PARENT,
2628 			.ops = &clk_branch2_ops,
2629 		},
2630 	},
2631 };
2632 
2633 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2634 	.halt_reg = 0x8706c,
2635 	.halt_check = BRANCH_HALT_VOTED,
2636 	.hwcg_reg = 0x8706c,
2637 	.hwcg_bit = 1,
2638 	.clkr = {
2639 		.enable_reg = 0x8706c,
2640 		.enable_mask = BIT(0),
2641 		.hw.init = &(struct clk_init_data){
2642 			.name = "gcc_ufs_phy_ice_core_clk",
2643 			.parent_data = &(const struct clk_parent_data){
2644 				.hw = &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2645 			},
2646 			.num_parents = 1,
2647 			.flags = CLK_SET_RATE_PARENT,
2648 			.ops = &clk_branch2_ops,
2649 		},
2650 	},
2651 };
2652 
2653 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2654 	.halt_reg = 0x8706c,
2655 	.halt_check = BRANCH_HALT_VOTED,
2656 	.hwcg_reg = 0x8706c,
2657 	.hwcg_bit = 1,
2658 	.clkr = {
2659 		.enable_reg = 0x8706c,
2660 		.enable_mask = BIT(1),
2661 		.hw.init = &(struct clk_init_data){
2662 			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2663 			.parent_data = &(const struct clk_parent_data){
2664 				.hw = &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2665 			},
2666 			.num_parents = 1,
2667 			.flags = CLK_SET_RATE_PARENT,
2668 			.ops = &clk_branch2_ops,
2669 		},
2670 	},
2671 };
2672 
2673 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2674 	.halt_reg = 0x870a4,
2675 	.halt_check = BRANCH_HALT_VOTED,
2676 	.hwcg_reg = 0x870a4,
2677 	.hwcg_bit = 1,
2678 	.clkr = {
2679 		.enable_reg = 0x870a4,
2680 		.enable_mask = BIT(0),
2681 		.hw.init = &(struct clk_init_data){
2682 			.name = "gcc_ufs_phy_phy_aux_clk",
2683 			.parent_data = &(const struct clk_parent_data){
2684 				.hw = &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2685 			},
2686 			.num_parents = 1,
2687 			.flags = CLK_SET_RATE_PARENT,
2688 			.ops = &clk_branch2_ops,
2689 		},
2690 	},
2691 };
2692 
2693 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2694 	.halt_reg = 0x870a4,
2695 	.halt_check = BRANCH_HALT_VOTED,
2696 	.hwcg_reg = 0x870a4,
2697 	.hwcg_bit = 1,
2698 	.clkr = {
2699 		.enable_reg = 0x870a4,
2700 		.enable_mask = BIT(1),
2701 		.hw.init = &(struct clk_init_data){
2702 			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2703 			.parent_data = &(const struct clk_parent_data){
2704 				.hw = &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2705 			},
2706 			.num_parents = 1,
2707 			.flags = CLK_SET_RATE_PARENT,
2708 			.ops = &clk_branch2_ops,
2709 		},
2710 	},
2711 };
2712 
2713 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2714 	.halt_reg = 0x87028,
2715 	.halt_check = BRANCH_HALT_DELAY,
2716 	.clkr = {
2717 		.enable_reg = 0x87028,
2718 		.enable_mask = BIT(0),
2719 		.hw.init = &(struct clk_init_data){
2720 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2721 			.parent_data = &(const struct clk_parent_data){
2722 				.hw = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2723 			},
2724 			.num_parents = 1,
2725 			.flags = CLK_SET_RATE_PARENT,
2726 			.ops = &clk_branch2_ops,
2727 		},
2728 	},
2729 };
2730 
2731 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2732 	.halt_reg = 0x870c0,
2733 	.halt_check = BRANCH_HALT_DELAY,
2734 	.clkr = {
2735 		.enable_reg = 0x870c0,
2736 		.enable_mask = BIT(0),
2737 		.hw.init = &(struct clk_init_data){
2738 			.name = "gcc_ufs_phy_rx_symbol_1_clk",
2739 			.parent_data = &(const struct clk_parent_data){
2740 				.hw = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2741 			},
2742 			.num_parents = 1,
2743 			.flags = CLK_SET_RATE_PARENT,
2744 			.ops = &clk_branch2_ops,
2745 		},
2746 	},
2747 };
2748 
2749 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2750 	.halt_reg = 0x87024,
2751 	.halt_check = BRANCH_HALT_DELAY,
2752 	.clkr = {
2753 		.enable_reg = 0x87024,
2754 		.enable_mask = BIT(0),
2755 		.hw.init = &(struct clk_init_data){
2756 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2757 			.parent_data = &(const struct clk_parent_data){
2758 				.hw = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2759 			},
2760 			.num_parents = 1,
2761 			.flags = CLK_SET_RATE_PARENT,
2762 			.ops = &clk_branch2_ops,
2763 		},
2764 	},
2765 };
2766 
2767 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2768 	.halt_reg = 0x87064,
2769 	.halt_check = BRANCH_HALT_VOTED,
2770 	.hwcg_reg = 0x87064,
2771 	.hwcg_bit = 1,
2772 	.clkr = {
2773 		.enable_reg = 0x87064,
2774 		.enable_mask = BIT(0),
2775 		.hw.init = &(struct clk_init_data){
2776 			.name = "gcc_ufs_phy_unipro_core_clk",
2777 			.parent_data = &(const struct clk_parent_data){
2778 				.hw = &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2779 			},
2780 			.num_parents = 1,
2781 			.flags = CLK_SET_RATE_PARENT,
2782 			.ops = &clk_branch2_ops,
2783 		},
2784 	},
2785 };
2786 
2787 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2788 	.halt_reg = 0x87064,
2789 	.halt_check = BRANCH_HALT_VOTED,
2790 	.hwcg_reg = 0x87064,
2791 	.hwcg_bit = 1,
2792 	.clkr = {
2793 		.enable_reg = 0x87064,
2794 		.enable_mask = BIT(1),
2795 		.hw.init = &(struct clk_init_data){
2796 			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2797 			.parent_data = &(const struct clk_parent_data){
2798 				.hw = &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2799 			},
2800 			.num_parents = 1,
2801 			.flags = CLK_SET_RATE_PARENT,
2802 			.ops = &clk_branch2_ops,
2803 		},
2804 	},
2805 };
2806 
2807 static struct clk_branch gcc_usb30_prim_master_clk = {
2808 	.halt_reg = 0x49018,
2809 	.halt_check = BRANCH_HALT,
2810 	.clkr = {
2811 		.enable_reg = 0x49018,
2812 		.enable_mask = BIT(0),
2813 		.hw.init = &(struct clk_init_data){
2814 			.name = "gcc_usb30_prim_master_clk",
2815 			.parent_data = &(const struct clk_parent_data){
2816 				.hw = &gcc_usb30_prim_master_clk_src.clkr.hw,
2817 			},
2818 			.num_parents = 1,
2819 			.flags = CLK_SET_RATE_PARENT,
2820 			.ops = &clk_branch2_ops,
2821 		},
2822 	},
2823 };
2824 
2825 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2826 	.halt_reg = 0x49024,
2827 	.halt_check = BRANCH_HALT,
2828 	.clkr = {
2829 		.enable_reg = 0x49024,
2830 		.enable_mask = BIT(0),
2831 		.hw.init = &(struct clk_init_data){
2832 			.name = "gcc_usb30_prim_mock_utmi_clk",
2833 			.parent_data = &(const struct clk_parent_data){
2834 				.hw = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2835 			},
2836 			.num_parents = 1,
2837 			.flags = CLK_SET_RATE_PARENT,
2838 			.ops = &clk_branch2_ops,
2839 		},
2840 	},
2841 };
2842 
2843 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2844 	.halt_reg = 0x49020,
2845 	.halt_check = BRANCH_HALT,
2846 	.clkr = {
2847 		.enable_reg = 0x49020,
2848 		.enable_mask = BIT(0),
2849 		.hw.init = &(struct clk_init_data){
2850 			.name = "gcc_usb30_prim_sleep_clk",
2851 			.ops = &clk_branch2_ops,
2852 		},
2853 	},
2854 };
2855 
2856 static struct clk_branch gcc_usb3_0_clkref_en = {
2857 	.halt_reg = 0x9c010,
2858 	.halt_check = BRANCH_HALT,
2859 	.clkr = {
2860 		.enable_reg = 0x9c010,
2861 		.enable_mask = BIT(0),
2862 		.hw.init = &(struct clk_init_data){
2863 			.name = "gcc_usb3_0_clkref_en",
2864 			.ops = &clk_branch2_ops,
2865 		},
2866 	},
2867 };
2868 
2869 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2870 	.halt_reg = 0x4905c,
2871 	.halt_check = BRANCH_HALT,
2872 	.clkr = {
2873 		.enable_reg = 0x4905c,
2874 		.enable_mask = BIT(0),
2875 		.hw.init = &(struct clk_init_data){
2876 			.name = "gcc_usb3_prim_phy_aux_clk",
2877 			.parent_data = &(const struct clk_parent_data){
2878 				.hw = &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2879 			},
2880 			.num_parents = 1,
2881 			.flags = CLK_SET_RATE_PARENT,
2882 			.ops = &clk_branch2_ops,
2883 		},
2884 	},
2885 };
2886 
2887 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2888 	.halt_reg = 0x49060,
2889 	.halt_check = BRANCH_HALT,
2890 	.clkr = {
2891 		.enable_reg = 0x49060,
2892 		.enable_mask = BIT(0),
2893 		.hw.init = &(struct clk_init_data){
2894 			.name = "gcc_usb3_prim_phy_com_aux_clk",
2895 			.parent_data = &(const struct clk_parent_data){
2896 				.hw = &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2897 			},
2898 			.num_parents = 1,
2899 			.flags = CLK_SET_RATE_PARENT,
2900 			.ops = &clk_branch2_ops,
2901 		},
2902 	},
2903 };
2904 
2905 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2906 	.halt_reg = 0x49064,
2907 	.halt_check = BRANCH_HALT_DELAY,
2908 	.hwcg_reg = 0x49064,
2909 	.hwcg_bit = 1,
2910 	.clkr = {
2911 		.enable_reg = 0x49064,
2912 		.enable_mask = BIT(0),
2913 		.hw.init = &(struct clk_init_data){
2914 			.name = "gcc_usb3_prim_phy_pipe_clk",
2915 			.parent_data = &(const struct clk_parent_data){
2916 				.hw = &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2917 			},
2918 			.num_parents = 1,
2919 			.flags = CLK_SET_RATE_PARENT,
2920 			.ops = &clk_branch2_ops,
2921 		},
2922 	},
2923 };
2924 
2925 static struct clk_branch gcc_video_axi0_clk = {
2926 	.halt_reg = 0x42018,
2927 	.halt_check = BRANCH_HALT_SKIP,
2928 	.hwcg_reg = 0x42018,
2929 	.hwcg_bit = 1,
2930 	.clkr = {
2931 		.enable_reg = 0x42018,
2932 		.enable_mask = BIT(0),
2933 		.hw.init = &(struct clk_init_data){
2934 			.name = "gcc_video_axi0_clk",
2935 			.ops = &clk_branch2_ops,
2936 		},
2937 	},
2938 };
2939 
2940 static struct clk_branch gcc_video_axi1_clk = {
2941 	.halt_reg = 0x42020,
2942 	.halt_check = BRANCH_HALT_SKIP,
2943 	.hwcg_reg = 0x42020,
2944 	.hwcg_bit = 1,
2945 	.clkr = {
2946 		.enable_reg = 0x42020,
2947 		.enable_mask = BIT(0),
2948 		.hw.init = &(struct clk_init_data){
2949 			.name = "gcc_video_axi1_clk",
2950 			.ops = &clk_branch2_ops,
2951 		},
2952 	},
2953 };
2954 
2955 static struct gdsc pcie_0_gdsc = {
2956 	.gdscr = 0x7b004,
2957 	.pd = {
2958 		.name = "pcie_0_gdsc",
2959 	},
2960 	.pwrsts = PWRSTS_OFF_ON,
2961 };
2962 
2963 static struct gdsc pcie_1_gdsc = {
2964 	.gdscr = 0x9d004,
2965 	.pd = {
2966 		.name = "pcie_1_gdsc",
2967 	},
2968 	.pwrsts = PWRSTS_OFF_ON,
2969 };
2970 
2971 static struct gdsc ufs_phy_gdsc = {
2972 	.gdscr = 0x87004,
2973 	.pd = {
2974 		.name = "ufs_phy_gdsc",
2975 	},
2976 	.pwrsts = PWRSTS_OFF_ON,
2977 };
2978 
2979 static struct gdsc usb30_prim_gdsc = {
2980 	.gdscr = 0x49004,
2981 	.pd = {
2982 		.name = "usb30_prim_gdsc",
2983 	},
2984 	.pwrsts = PWRSTS_OFF_ON,
2985 };
2986 
2987 static struct clk_regmap *gcc_sm8450_clocks[] = {
2988 	[GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
2989 	[GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
2990 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2991 	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2992 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2993 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2994 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2995 	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
2996 	[GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
2997 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2998 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2999 	[GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
3000 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3001 	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3002 	[GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr,
3003 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3004 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3005 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3006 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3007 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3008 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3009 	[GCC_GPLL0] = &gcc_gpll0.clkr,
3010 	[GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3011 	[GCC_GPLL4] = &gcc_gpll4.clkr,
3012 	[GCC_GPLL9] = &gcc_gpll9.clkr,
3013 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3014 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3015 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3016 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3017 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3018 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3019 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3020 	[GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
3021 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3022 	[GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3023 	[GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3024 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3025 	[GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3026 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3027 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3028 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3029 	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3030 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3031 	[GCC_PCIE_1_CLKREF_EN] = &gcc_pcie_1_clkref_en.clkr,
3032 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3033 	[GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3034 	[GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3035 	[GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3036 	[GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3037 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3038 	[GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3039 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3040 	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3041 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3042 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3043 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3044 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3045 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3046 	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3047 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3048 	[GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3049 	[GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3050 	[GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3051 	[GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3052 	[GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3053 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3054 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3055 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3056 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3057 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3058 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3059 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3060 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3061 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3062 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3063 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3064 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3065 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3066 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3067 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3068 	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3069 	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3070 	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3071 	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3072 	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3073 	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3074 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3075 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3076 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3077 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3078 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3079 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3080 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3081 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3082 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3083 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3084 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3085 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3086 	[GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3087 	[GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3088 	[GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3089 	[GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3090 	[GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3091 	[GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3092 	[GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3093 	[GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3094 	[GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3095 	[GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3096 	[GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3097 	[GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3098 	[GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3099 	[GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3100 	[GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3101 	[GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3102 	[GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3103 	[GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3104 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3105 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3106 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3107 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3108 	[GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3109 	[GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3110 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3111 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3112 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3113 	[GCC_SDCC2_AT_CLK] = &gcc_sdcc2_at_clk.clkr,
3114 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3115 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3116 	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3117 	[GCC_SDCC4_AT_CLK] = &gcc_sdcc4_at_clk.clkr,
3118 	[GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr,
3119 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3120 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3121 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3122 	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3123 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3124 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3125 	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3126 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3127 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3128 	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3129 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3130 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3131 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3132 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3133 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3134 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3135 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3136 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3137 	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3138 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3139 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3140 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3141 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3142 	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3143 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3144 	[GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr,
3145 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3146 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3147 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3148 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3149 	[GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3150 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3151 	[GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3152 };
3153 
3154 static const struct qcom_reset_map gcc_sm8450_resets[] = {
3155 	[GCC_CAMERA_BCR] = { 0x36000 },
3156 	[GCC_DISPLAY_BCR] = { 0x37000 },
3157 	[GCC_GPU_BCR] = { 0x81000 },
3158 	[GCC_PCIE_0_BCR] = { 0x7b000 },
3159 	[GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 },
3160 	[GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 },
3161 	[GCC_PCIE_0_PHY_BCR] = { 0x7c01c },
3162 	[GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 },
3163 	[GCC_PCIE_1_BCR] = { 0x9d000 },
3164 	[GCC_PCIE_1_LINK_DOWN_BCR] = { 0x9e014 },
3165 	[GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x9e020 },
3166 	[GCC_PCIE_1_PHY_BCR] = { 0x9e01c },
3167 	[GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
3168 	[GCC_PCIE_PHY_BCR] = { 0x7f000 },
3169 	[GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
3170 	[GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
3171 	[GCC_PDM_BCR] = { 0x43000 },
3172 	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
3173 	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
3174 	[GCC_QUPV3_WRAPPER_2_BCR] = { 0x2e000 },
3175 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
3176 	[GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
3177 	[GCC_SDCC2_BCR] = { 0x24000 },
3178 	[GCC_SDCC4_BCR] = { 0x26000 },
3179 	[GCC_UFS_PHY_BCR] = { 0x87000 },
3180 	[GCC_USB30_PRIM_BCR] = { 0x49000 },
3181 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
3182 	[GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
3183 	[GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
3184 	[GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
3185 	[GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
3186 	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
3187 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
3188 	[GCC_VIDEO_AXI0_CLK_ARES] = { 0x42018, 2 },
3189 	[GCC_VIDEO_AXI1_CLK_ARES] = { 0x42020, 2 },
3190 	[GCC_VIDEO_BCR] = { 0x42000 },
3191 };
3192 
3193 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3194 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3195 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3196 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3197 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3198 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3199 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3200 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3201 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3202 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3203 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3204 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3205 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3206 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3207 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3208 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3209 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3210 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3211 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3212 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3213 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3214 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3215 	DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3216 };
3217 
3218 static struct gdsc *gcc_sm8450_gdscs[] = {
3219 	[PCIE_0_GDSC] = &pcie_0_gdsc,
3220 	[PCIE_1_GDSC] = &pcie_1_gdsc,
3221 	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
3222 	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3223 };
3224 
3225 static const struct regmap_config gcc_sm8450_regmap_config = {
3226 	.reg_bits = 32,
3227 	.reg_stride = 4,
3228 	.val_bits = 32,
3229 	.max_register = 0x1f1030,
3230 	.fast_io = true,
3231 };
3232 
3233 static const struct qcom_cc_desc gcc_sm8450_desc = {
3234 	.config = &gcc_sm8450_regmap_config,
3235 	.clks = gcc_sm8450_clocks,
3236 	.num_clks = ARRAY_SIZE(gcc_sm8450_clocks),
3237 	.resets = gcc_sm8450_resets,
3238 	.num_resets = ARRAY_SIZE(gcc_sm8450_resets),
3239 	.gdscs = gcc_sm8450_gdscs,
3240 	.num_gdscs = ARRAY_SIZE(gcc_sm8450_gdscs),
3241 };
3242 
3243 static const struct of_device_id gcc_sm8450_match_table[] = {
3244 	{ .compatible = "qcom,gcc-sm8450" },
3245 	{ }
3246 };
3247 MODULE_DEVICE_TABLE(of, gcc_sm8450_match_table);
3248 
3249 static int gcc_sm8450_probe(struct platform_device *pdev)
3250 {
3251 	struct regmap *regmap;
3252 	int ret;
3253 
3254 	regmap = qcom_cc_map(pdev, &gcc_sm8450_desc);
3255 	if (IS_ERR(regmap))
3256 		return PTR_ERR(regmap);
3257 
3258 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3259 				       ARRAY_SIZE(gcc_dfs_clocks));
3260 	if (ret)
3261 		return ret;
3262 
3263 	/* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3264 	regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3265 
3266 	/*
3267 	 * Keep the critical clock always-On
3268 	 * gcc_camera_ahb_clk, gcc_camera_xo_clk, gcc_disp_ahb_clk,
3269 	 * gcc_disp_xo_clk, gcc_gpu_cfg_ahb_clk, gcc_video_ahb_clk,
3270 	 * gcc_video_xo_clk
3271 	 */
3272 	regmap_update_bits(regmap, 0x36004, BIT(0), BIT(0));
3273 	regmap_update_bits(regmap, 0x36020, BIT(0), BIT(0));
3274 	regmap_update_bits(regmap, 0x37004, BIT(0), BIT(0));
3275 	regmap_update_bits(regmap, 0x3701c, BIT(0), BIT(0));
3276 	regmap_update_bits(regmap, 0x81004, BIT(0), BIT(0));
3277 	regmap_update_bits(regmap, 0x42004, BIT(0), BIT(0));
3278 	regmap_update_bits(regmap, 0x42028, BIT(0), BIT(0));
3279 
3280 	return qcom_cc_really_probe(pdev, &gcc_sm8450_desc, regmap);
3281 }
3282 
3283 static struct platform_driver gcc_sm8450_driver = {
3284 	.probe = gcc_sm8450_probe,
3285 	.driver = {
3286 		.name = "gcc-sm8450",
3287 		.of_match_table = gcc_sm8450_match_table,
3288 	},
3289 };
3290 
3291 static int __init gcc_sm8450_init(void)
3292 {
3293 	return platform_driver_register(&gcc_sm8450_driver);
3294 }
3295 subsys_initcall(gcc_sm8450_init);
3296 
3297 static void __exit gcc_sm8450_exit(void)
3298 {
3299 	platform_driver_unregister(&gcc_sm8450_driver);
3300 }
3301 module_exit(gcc_sm8450_exit);
3302 
3303 MODULE_DESCRIPTION("QTI GCC SM8450 Driver");
3304 MODULE_LICENSE("GPL v2");
3305