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