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