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