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