1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4  */
5 
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/mod_devicetable.h>
9 #include <linux/of.h>
10 #include <linux/platform_device.h>
11 #include <linux/regmap.h>
12 
13 #include <dt-bindings/clock/qcom,qcs615-gcc.h>
14 
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.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 "common.h"
22 #include "gdsc.h"
23 #include "reset.h"
24 
25 enum {
26 	DT_BI_TCXO,
27 	DT_BI_TCXO_AO,
28 	DT_SLEEP_CLK,
29 };
30 
31 enum {
32 	P_BI_TCXO,
33 	P_GPLL0_OUT_AUX2_DIV,
34 	P_GPLL0_OUT_MAIN,
35 	P_GPLL3_OUT_MAIN,
36 	P_GPLL3_OUT_MAIN_DIV,
37 	P_GPLL4_OUT_MAIN,
38 	P_GPLL6_OUT_MAIN,
39 	P_GPLL7_OUT_MAIN,
40 	P_GPLL8_OUT_MAIN,
41 	P_SLEEP_CLK,
42 };
43 
44 static struct clk_alpha_pll gpll0 = {
45 	.offset = 0x0,
46 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
47 	.clkr = {
48 		.enable_reg = 0x52000,
49 		.enable_mask = BIT(0),
50 		.hw.init = &(const struct clk_init_data) {
51 			.name = "gpll0",
52 			.parent_data = &(const struct clk_parent_data) {
53 				.index = DT_BI_TCXO,
54 			},
55 			.num_parents = 1,
56 			.ops = &clk_alpha_pll_ops,
57 		},
58 	},
59 };
60 
61 /* Fixed divider clock of GPLL0 instead of PLL normal postdiv */
62 static struct clk_fixed_factor gpll0_out_aux2_div = {
63 	.mult = 1,
64 	.div = 2,
65 	.hw.init = &(struct clk_init_data) {
66 		.name = "gpll0_out_aux2_div",
67 		.parent_data = &(const struct clk_parent_data) {
68 			.hw = &gpll0.clkr.hw,
69 		},
70 		.num_parents = 1,
71 		.ops = &clk_fixed_factor_ops,
72 	},
73 };
74 
75 static struct clk_alpha_pll gpll3 = {
76 	.offset = 0x3000,
77 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
78 	.clkr = {
79 		.enable_reg = 0x52000,
80 		.enable_mask = BIT(3),
81 		.hw.init = &(const struct clk_init_data) {
82 			.name = "gpll3",
83 			.parent_data = &(const struct clk_parent_data) {
84 				.index = DT_BI_TCXO,
85 			},
86 			.num_parents = 1,
87 			.ops = &clk_alpha_pll_ops,
88 		},
89 	},
90 };
91 
92 /* Fixed divider clock of GPLL3 instead of PLL normal postdiv */
93 static struct clk_fixed_factor gpll3_out_aux2_div = {
94 	.mult = 1,
95 	.div = 2,
96 	.hw.init = &(struct clk_init_data) {
97 		.name = "gpll3_out_aux2_div",
98 		.parent_data = &(const struct clk_parent_data) {
99 			.hw = &gpll3.clkr.hw,
100 		},
101 		.num_parents = 1,
102 		.ops = &clk_fixed_factor_ops,
103 	},
104 };
105 
106 static struct clk_alpha_pll gpll4 = {
107 	.offset = 0x76000,
108 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
109 	.clkr = {
110 		.enable_reg = 0x52000,
111 		.enable_mask = BIT(4),
112 		.hw.init = &(const struct clk_init_data) {
113 			.name = "gpll4",
114 			.parent_data = &(const struct clk_parent_data) {
115 				.index = DT_BI_TCXO,
116 			},
117 			.num_parents = 1,
118 			.ops = &clk_alpha_pll_ops,
119 		},
120 	},
121 };
122 
123 static struct clk_alpha_pll gpll6 = {
124 	.offset = 0x13000,
125 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
126 	.clkr = {
127 		.enable_reg = 0x52000,
128 		.enable_mask = BIT(6),
129 		.hw.init = &(const struct clk_init_data) {
130 			.name = "gpll6",
131 			.parent_data = &(const struct clk_parent_data) {
132 				.index = DT_BI_TCXO,
133 			},
134 			.num_parents = 1,
135 			.ops = &clk_alpha_pll_ops,
136 		},
137 	},
138 };
139 
140 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
141 	{ 0x1, 2 },
142 	{ }
143 };
144 
145 static struct clk_alpha_pll_postdiv gpll6_out_main = {
146 	.offset = 0x13000,
147 	.post_div_shift = 8,
148 	.post_div_table = post_div_table_gpll6_out_main,
149 	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
150 	.width = 4,
151 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
152 	.clkr.hw.init = &(const struct clk_init_data) {
153 		.name = "gpll6_out_main",
154 		.parent_hws = (const struct clk_hw*[]) {
155 			&gpll6.clkr.hw,
156 		},
157 		.num_parents = 1,
158 		.ops = &clk_alpha_pll_postdiv_ops,
159 	},
160 };
161 
162 static struct clk_alpha_pll gpll7 = {
163 	.offset = 0x1a000,
164 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
165 	.clkr = {
166 		.enable_reg = 0x52000,
167 		.enable_mask = BIT(7),
168 		.hw.init = &(const struct clk_init_data) {
169 			.name = "gpll7",
170 			.parent_data = &(const struct clk_parent_data) {
171 				.index = DT_BI_TCXO,
172 			},
173 			.num_parents = 1,
174 			.ops = &clk_alpha_pll_ops,
175 		},
176 	},
177 };
178 
179 static struct clk_alpha_pll gpll8 = {
180 	.offset = 0x1b000,
181 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
182 	.clkr = {
183 		.enable_reg = 0x52000,
184 		.enable_mask = BIT(8),
185 		.hw.init = &(const struct clk_init_data) {
186 			.name = "gpll8",
187 			.parent_data = &(const struct clk_parent_data) {
188 				.index = DT_BI_TCXO,
189 			},
190 			.num_parents = 1,
191 			.ops = &clk_alpha_pll_ops,
192 		},
193 	},
194 };
195 
196 static const struct clk_div_table post_div_table_gpll8_out_main[] = {
197 	{ 0x1, 2 },
198 	{ }
199 };
200 
201 static struct clk_alpha_pll_postdiv gpll8_out_main = {
202 	.offset = 0x1b000,
203 	.post_div_shift = 8,
204 	.post_div_table = post_div_table_gpll8_out_main,
205 	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
206 	.width = 4,
207 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
208 	.clkr.hw.init = &(const struct clk_init_data) {
209 		.name = "gpll8_out_main",
210 		.parent_hws = (const struct clk_hw*[]) {
211 			&gpll8.clkr.hw,
212 		},
213 		.num_parents = 1,
214 		.ops = &clk_alpha_pll_postdiv_ops,
215 	},
216 };
217 
218 static const struct parent_map gcc_parent_map_0[] = {
219 	{ P_BI_TCXO, 0 },
220 	{ P_GPLL0_OUT_MAIN, 1 },
221 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
222 };
223 
224 static const struct clk_parent_data gcc_parent_data_0[] = {
225 	{ .index = DT_BI_TCXO },
226 	{ .hw = &gpll0.clkr.hw },
227 	{ .hw = &gpll0_out_aux2_div.hw },
228 };
229 
230 static const struct clk_parent_data gcc_parent_data_0_ao[] = {
231 	{ .index = DT_BI_TCXO_AO },
232 	{ .hw = &gpll0.clkr.hw },
233 	{ .hw = &gpll0.clkr.hw },
234 };
235 
236 static const struct parent_map gcc_parent_map_1[] = {
237 	{ P_BI_TCXO, 0 },
238 	{ P_GPLL0_OUT_MAIN, 1 },
239 	{ P_GPLL6_OUT_MAIN, 2 },
240 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
241 };
242 
243 static const struct clk_parent_data gcc_parent_data_1[] = {
244 	{ .index = DT_BI_TCXO },
245 	{ .hw = &gpll0.clkr.hw },
246 	{ .hw = &gpll6_out_main.clkr.hw },
247 	{ .hw = &gpll0_out_aux2_div.hw },
248 };
249 
250 static const struct parent_map gcc_parent_map_2[] = {
251 	{ P_BI_TCXO, 0 },
252 	{ P_GPLL0_OUT_MAIN, 1 },
253 	{ P_SLEEP_CLK, 5 },
254 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
255 };
256 
257 static const struct clk_parent_data gcc_parent_data_2[] = {
258 	{ .index = DT_BI_TCXO },
259 	{ .hw = &gpll0.clkr.hw },
260 	{ .index = DT_SLEEP_CLK },
261 	{ .hw = &gpll0_out_aux2_div.hw },
262 };
263 
264 static const struct parent_map gcc_parent_map_3[] = {
265 	{ P_BI_TCXO, 0 },
266 	{ P_SLEEP_CLK, 5 },
267 };
268 
269 static const struct clk_parent_data gcc_parent_data_3[] = {
270 	{ .index = DT_BI_TCXO },
271 	{ .index = DT_SLEEP_CLK },
272 };
273 
274 static const struct parent_map gcc_parent_map_4[] = {
275 	{ P_BI_TCXO, 0 },
276 };
277 
278 static const struct clk_parent_data gcc_parent_data_4[] = {
279 	{ .index = DT_BI_TCXO },
280 };
281 
282 static const struct parent_map gcc_parent_map_5[] = {
283 	{ P_BI_TCXO, 0 },
284 	{ P_GPLL0_OUT_MAIN, 1 },
285 	{ P_GPLL7_OUT_MAIN, 3 },
286 	{ P_GPLL4_OUT_MAIN, 5 },
287 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
288 };
289 
290 static const struct clk_parent_data gcc_parent_data_5[] = {
291 	{ .index = DT_BI_TCXO },
292 	{ .hw = &gpll0.clkr.hw },
293 	{ .hw = &gpll7.clkr.hw },
294 	{ .hw = &gpll4.clkr.hw },
295 	{ .hw = &gpll0_out_aux2_div.hw },
296 };
297 
298 static const struct parent_map gcc_parent_map_6[] = {
299 	{ P_BI_TCXO, 0 },
300 	{ P_GPLL0_OUT_MAIN, 1 },
301 	{ P_GPLL7_OUT_MAIN, 3 },
302 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
303 };
304 
305 static const struct clk_parent_data gcc_parent_data_6[] = {
306 	{ .index = DT_BI_TCXO },
307 	{ .hw = &gpll0.clkr.hw },
308 	{ .hw = &gpll7.clkr.hw },
309 	{ .hw = &gpll0_out_aux2_div.hw },
310 };
311 
312 static const struct parent_map gcc_parent_map_7[] = {
313 	{ P_BI_TCXO, 0 },
314 	{ P_GPLL0_OUT_MAIN, 1 },
315 	{ P_GPLL3_OUT_MAIN_DIV, 4 },
316 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
317 };
318 
319 static const struct clk_parent_data gcc_parent_data_7[] = {
320 	{ .index = DT_BI_TCXO },
321 	{ .hw = &gpll0.clkr.hw },
322 	{ .hw = &gpll3_out_aux2_div.hw },
323 	{ .hw = &gpll0_out_aux2_div.hw },
324 };
325 
326 static const struct parent_map gcc_parent_map_8[] = {
327 	{ P_BI_TCXO, 0 },
328 	{ P_GPLL0_OUT_MAIN, 1 },
329 	{ P_GPLL8_OUT_MAIN, 2 },
330 	{ P_GPLL4_OUT_MAIN, 5 },
331 	{ P_GPLL0_OUT_AUX2_DIV, 6 },
332 };
333 
334 static const struct clk_parent_data gcc_parent_data_8[] = {
335 	{ .index = DT_BI_TCXO },
336 	{ .hw = &gpll0.clkr.hw },
337 	{ .hw = &gpll8_out_main.clkr.hw },
338 	{ .hw = &gpll4.clkr.hw },
339 	{ .hw = &gpll0_out_aux2_div.hw },
340 };
341 
342 static const struct parent_map gcc_parent_map_9[] = {
343 	{ P_BI_TCXO, 0 },
344 	{ P_GPLL0_OUT_MAIN, 1 },
345 	{ P_GPLL3_OUT_MAIN, 4 },
346 };
347 
348 static const struct clk_parent_data gcc_parent_data_9[] = {
349 	{ .index = DT_BI_TCXO },
350 	{ .hw = &gpll0.clkr.hw },
351 	{ .hw = &gpll3.clkr.hw },
352 };
353 
354 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
355 	F(19200000, P_BI_TCXO, 1, 0, 0),
356 	{ }
357 };
358 
359 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
360 	.cmd_rcgr = 0x48014,
361 	.mnd_width = 0,
362 	.hid_width = 5,
363 	.parent_map = gcc_parent_map_0,
364 	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
365 	.clkr.hw.init = &(const struct clk_init_data) {
366 		.name = "gcc_cpuss_ahb_clk_src",
367 		.parent_data = gcc_parent_data_0_ao,
368 		.num_parents = ARRAY_SIZE(gcc_parent_data_0_ao),
369 		.ops = &clk_rcg2_ops,
370 	},
371 };
372 
373 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
374 	F(19200000, P_BI_TCXO, 1, 0, 0),
375 	F(50000000, P_GPLL0_OUT_AUX2_DIV, 6, 0, 0),
376 	F(75000000, P_GPLL0_OUT_AUX2_DIV, 4, 0, 0),
377 	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
378 	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
379 	{ }
380 };
381 
382 static struct clk_rcg2 gcc_emac_ptp_clk_src = {
383 	.cmd_rcgr = 0x6038,
384 	.mnd_width = 0,
385 	.hid_width = 5,
386 	.parent_map = gcc_parent_map_5,
387 	.freq_tbl = ftbl_gcc_emac_ptp_clk_src,
388 	.clkr.hw.init = &(const struct clk_init_data) {
389 		.name = "gcc_emac_ptp_clk_src",
390 		.parent_data = gcc_parent_data_5,
391 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
392 		.ops = &clk_rcg2_ops,
393 	},
394 };
395 
396 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
397 	F(2500000, P_BI_TCXO, 1, 25, 192),
398 	F(5000000, P_BI_TCXO, 1, 25, 96),
399 	F(19200000, P_BI_TCXO, 1, 0, 0),
400 	F(25000000, P_GPLL0_OUT_AUX2_DIV, 12, 0, 0),
401 	F(50000000, P_GPLL0_OUT_AUX2_DIV, 6, 0, 0),
402 	F(75000000, P_GPLL0_OUT_AUX2_DIV, 4, 0, 0),
403 	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
404 	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
405 	{ }
406 };
407 
408 static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
409 	.cmd_rcgr = 0x601c,
410 	.mnd_width = 8,
411 	.hid_width = 5,
412 	.parent_map = gcc_parent_map_6,
413 	.freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
414 	.clkr.hw.init = &(const struct clk_init_data) {
415 		.name = "gcc_emac_rgmii_clk_src",
416 		.parent_data = gcc_parent_data_6,
417 		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
418 		.ops = &clk_rcg2_ops,
419 	},
420 };
421 
422 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
423 	F(25000000, P_GPLL0_OUT_AUX2_DIV, 12, 0, 0),
424 	F(50000000, P_GPLL0_OUT_AUX2_DIV, 6, 0, 0),
425 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
426 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
427 	{ }
428 };
429 
430 static struct clk_rcg2 gcc_gp1_clk_src = {
431 	.cmd_rcgr = 0x64004,
432 	.mnd_width = 8,
433 	.hid_width = 5,
434 	.parent_map = gcc_parent_map_2,
435 	.freq_tbl = ftbl_gcc_gp1_clk_src,
436 	.clkr.hw.init = &(const struct clk_init_data) {
437 		.name = "gcc_gp1_clk_src",
438 		.parent_data = gcc_parent_data_2,
439 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
440 		.ops = &clk_rcg2_ops,
441 	},
442 };
443 
444 static struct clk_rcg2 gcc_gp2_clk_src = {
445 	.cmd_rcgr = 0x65004,
446 	.mnd_width = 8,
447 	.hid_width = 5,
448 	.parent_map = gcc_parent_map_2,
449 	.freq_tbl = ftbl_gcc_gp1_clk_src,
450 	.clkr.hw.init = &(const struct clk_init_data) {
451 		.name = "gcc_gp2_clk_src",
452 		.parent_data = gcc_parent_data_2,
453 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
454 		.ops = &clk_rcg2_ops,
455 	},
456 };
457 
458 static struct clk_rcg2 gcc_gp3_clk_src = {
459 	.cmd_rcgr = 0x66004,
460 	.mnd_width = 8,
461 	.hid_width = 5,
462 	.parent_map = gcc_parent_map_2,
463 	.freq_tbl = ftbl_gcc_gp1_clk_src,
464 	.clkr.hw.init = &(const struct clk_init_data) {
465 		.name = "gcc_gp3_clk_src",
466 		.parent_data = gcc_parent_data_2,
467 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
468 		.ops = &clk_rcg2_ops,
469 	},
470 };
471 
472 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
473 	F(9600000, P_BI_TCXO, 2, 0, 0),
474 	F(19200000, P_BI_TCXO, 1, 0, 0),
475 	{ }
476 };
477 
478 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
479 	.cmd_rcgr = 0x6b02c,
480 	.mnd_width = 16,
481 	.hid_width = 5,
482 	.parent_map = gcc_parent_map_3,
483 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
484 	.clkr.hw.init = &(const struct clk_init_data) {
485 		.name = "gcc_pcie_0_aux_clk_src",
486 		.parent_data = gcc_parent_data_3,
487 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
488 		.ops = &clk_rcg2_shared_ops,
489 	},
490 };
491 
492 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
493 	F(19200000, P_BI_TCXO, 1, 0, 0),
494 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
495 	{ }
496 };
497 
498 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
499 	.cmd_rcgr = 0x6f014,
500 	.mnd_width = 0,
501 	.hid_width = 5,
502 	.parent_map = gcc_parent_map_0,
503 	.freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
504 	.clkr.hw.init = &(const struct clk_init_data) {
505 		.name = "gcc_pcie_phy_refgen_clk_src",
506 		.parent_data = gcc_parent_data_0,
507 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
508 		.ops = &clk_rcg2_ops,
509 	},
510 };
511 
512 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
513 	F(19200000, P_BI_TCXO, 1, 0, 0),
514 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
515 	{ }
516 };
517 
518 static struct clk_rcg2 gcc_pdm2_clk_src = {
519 	.cmd_rcgr = 0x33010,
520 	.mnd_width = 0,
521 	.hid_width = 5,
522 	.parent_map = gcc_parent_map_0,
523 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
524 	.clkr.hw.init = &(const struct clk_init_data) {
525 		.name = "gcc_pdm2_clk_src",
526 		.parent_data = gcc_parent_data_0,
527 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
528 		.ops = &clk_rcg2_ops,
529 	},
530 };
531 
532 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
533 	F(60000000, P_GPLL0_OUT_AUX2_DIV, 5, 0, 0),
534 	F(133250000, P_GPLL3_OUT_MAIN_DIV, 4, 0, 0),
535 	F(266500000, P_GPLL3_OUT_MAIN_DIV, 2, 0, 0),
536 	{ }
537 };
538 
539 static struct clk_rcg2 gcc_qspi_core_clk_src = {
540 	.cmd_rcgr = 0x4b008,
541 	.mnd_width = 0,
542 	.hid_width = 5,
543 	.parent_map = gcc_parent_map_7,
544 	.freq_tbl = ftbl_gcc_qspi_core_clk_src,
545 	.clkr.hw.init = &(const struct clk_init_data) {
546 		.name = "gcc_qspi_core_clk_src",
547 		.parent_data = gcc_parent_data_7,
548 		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
549 		.ops = &clk_rcg2_ops,
550 	},
551 };
552 
553 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
554 	F(7372800, P_GPLL0_OUT_AUX2_DIV, 1, 384, 15625),
555 	F(14745600, P_GPLL0_OUT_AUX2_DIV, 1, 768, 15625),
556 	F(19200000, P_BI_TCXO, 1, 0, 0),
557 	F(29491200, P_GPLL0_OUT_AUX2_DIV, 1, 1536, 15625),
558 	F(32000000, P_GPLL0_OUT_AUX2_DIV, 1, 8, 75),
559 	F(48000000, P_GPLL0_OUT_AUX2_DIV, 1, 4, 25),
560 	F(64000000, P_GPLL0_OUT_AUX2_DIV, 1, 16, 75),
561 	F(75000000, P_GPLL0_OUT_AUX2_DIV, 4, 0, 0),
562 	F(80000000, P_GPLL0_OUT_AUX2_DIV, 1, 4, 15),
563 	F(96000000, P_GPLL0_OUT_AUX2_DIV, 1, 8, 25),
564 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
565 	F(102400000, P_GPLL0_OUT_AUX2_DIV, 1, 128, 375),
566 	F(112000000, P_GPLL0_OUT_AUX2_DIV, 1, 28, 75),
567 	F(117964800, P_GPLL0_OUT_AUX2_DIV, 1, 6144, 15625),
568 	F(120000000, P_GPLL0_OUT_AUX2_DIV, 2.5, 0, 0),
569 	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
570 	{ }
571 };
572 
573 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
574 	.name = "gcc_qupv3_wrap0_s0_clk_src",
575 	.parent_data = gcc_parent_data_1,
576 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
577 	.ops = &clk_rcg2_ops,
578 };
579 
580 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
581 	.cmd_rcgr = 0x17148,
582 	.mnd_width = 16,
583 	.hid_width = 5,
584 	.parent_map = gcc_parent_map_1,
585 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
586 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
587 };
588 
589 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
590 	.name = "gcc_qupv3_wrap0_s1_clk_src",
591 	.parent_data = gcc_parent_data_1,
592 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
593 	.ops = &clk_rcg2_ops,
594 };
595 
596 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
597 	.cmd_rcgr = 0x17278,
598 	.mnd_width = 16,
599 	.hid_width = 5,
600 	.parent_map = gcc_parent_map_1,
601 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
602 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
603 };
604 
605 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
606 	.name = "gcc_qupv3_wrap0_s2_clk_src",
607 	.parent_data = gcc_parent_data_1,
608 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
609 	.ops = &clk_rcg2_ops,
610 };
611 
612 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
613 	.cmd_rcgr = 0x173a8,
614 	.mnd_width = 16,
615 	.hid_width = 5,
616 	.parent_map = gcc_parent_map_1,
617 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
618 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
619 };
620 
621 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
622 	.name = "gcc_qupv3_wrap0_s3_clk_src",
623 	.parent_data = gcc_parent_data_1,
624 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
625 	.ops = &clk_rcg2_ops,
626 };
627 
628 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
629 	.cmd_rcgr = 0x174d8,
630 	.mnd_width = 16,
631 	.hid_width = 5,
632 	.parent_map = gcc_parent_map_1,
633 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
634 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
635 };
636 
637 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
638 	.name = "gcc_qupv3_wrap0_s4_clk_src",
639 	.parent_data = gcc_parent_data_1,
640 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
641 	.ops = &clk_rcg2_ops,
642 };
643 
644 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
645 	.cmd_rcgr = 0x17608,
646 	.mnd_width = 16,
647 	.hid_width = 5,
648 	.parent_map = gcc_parent_map_1,
649 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
650 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
651 };
652 
653 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
654 	.name = "gcc_qupv3_wrap0_s5_clk_src",
655 	.parent_data = gcc_parent_data_1,
656 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
657 	.ops = &clk_rcg2_ops,
658 };
659 
660 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
661 	.cmd_rcgr = 0x17738,
662 	.mnd_width = 16,
663 	.hid_width = 5,
664 	.parent_map = gcc_parent_map_1,
665 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
666 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
667 };
668 
669 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
670 	.name = "gcc_qupv3_wrap1_s0_clk_src",
671 	.parent_data = gcc_parent_data_1,
672 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
673 	.ops = &clk_rcg2_ops,
674 };
675 
676 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
677 	.cmd_rcgr = 0x18148,
678 	.mnd_width = 16,
679 	.hid_width = 5,
680 	.parent_map = gcc_parent_map_1,
681 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
682 	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
683 };
684 
685 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
686 	.name = "gcc_qupv3_wrap1_s1_clk_src",
687 	.parent_data = gcc_parent_data_1,
688 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
689 	.ops = &clk_rcg2_ops,
690 };
691 
692 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
693 	.cmd_rcgr = 0x18278,
694 	.mnd_width = 16,
695 	.hid_width = 5,
696 	.parent_map = gcc_parent_map_1,
697 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
698 	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
699 };
700 
701 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
702 	.name = "gcc_qupv3_wrap1_s2_clk_src",
703 	.parent_data = gcc_parent_data_1,
704 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
705 	.ops = &clk_rcg2_ops,
706 };
707 
708 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
709 	.cmd_rcgr = 0x183a8,
710 	.mnd_width = 16,
711 	.hid_width = 5,
712 	.parent_map = gcc_parent_map_1,
713 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
714 	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
715 };
716 
717 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
718 	.name = "gcc_qupv3_wrap1_s3_clk_src",
719 	.parent_data = gcc_parent_data_1,
720 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
721 	.ops = &clk_rcg2_ops,
722 };
723 
724 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
725 	.cmd_rcgr = 0x184d8,
726 	.mnd_width = 16,
727 	.hid_width = 5,
728 	.parent_map = gcc_parent_map_1,
729 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
730 	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
731 };
732 
733 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
734 	.name = "gcc_qupv3_wrap1_s4_clk_src",
735 	.parent_data = gcc_parent_data_1,
736 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
737 	.ops = &clk_rcg2_ops,
738 };
739 
740 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
741 	.cmd_rcgr = 0x18608,
742 	.mnd_width = 16,
743 	.hid_width = 5,
744 	.parent_map = gcc_parent_map_1,
745 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
746 	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
747 };
748 
749 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
750 	.name = "gcc_qupv3_wrap1_s5_clk_src",
751 	.parent_data = gcc_parent_data_1,
752 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
753 	.ops = &clk_rcg2_ops,
754 };
755 
756 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
757 	.cmd_rcgr = 0x18738,
758 	.mnd_width = 16,
759 	.hid_width = 5,
760 	.parent_map = gcc_parent_map_1,
761 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
762 	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
763 };
764 
765 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
766 	F(144000, P_BI_TCXO, 16, 3, 25),
767 	F(400000, P_BI_TCXO, 12, 1, 4),
768 	F(20000000, P_GPLL0_OUT_AUX2_DIV, 5, 1, 3),
769 	F(25000000, P_GPLL0_OUT_AUX2_DIV, 6, 1, 2),
770 	F(50000000, P_GPLL0_OUT_AUX2_DIV, 6, 0, 0),
771 	F(100000000, P_GPLL0_OUT_AUX2_DIV, 3, 0, 0),
772 	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
773 	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
774 	{ }
775 };
776 
777 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
778 	.cmd_rcgr = 0x12028,
779 	.mnd_width = 8,
780 	.hid_width = 5,
781 	.parent_map = gcc_parent_map_1,
782 	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
783 	.clkr.hw.init = &(const struct clk_init_data) {
784 		.name = "gcc_sdcc1_apps_clk_src",
785 		.parent_data = gcc_parent_data_1,
786 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
787 		.ops = &clk_rcg2_floor_ops,
788 	},
789 };
790 
791 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
792 	F(75000000, P_GPLL0_OUT_AUX2_DIV, 4, 0, 0),
793 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
794 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
795 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
796 	{ }
797 };
798 
799 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
800 	.cmd_rcgr = 0x12010,
801 	.mnd_width = 0,
802 	.hid_width = 5,
803 	.parent_map = gcc_parent_map_0,
804 	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
805 	.clkr.hw.init = &(const struct clk_init_data) {
806 		.name = "gcc_sdcc1_ice_core_clk_src",
807 		.parent_data = gcc_parent_data_0,
808 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
809 		.ops = &clk_rcg2_floor_ops,
810 	},
811 };
812 
813 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
814 	F(400000, P_BI_TCXO, 12, 1, 4),
815 	F(19200000, P_BI_TCXO, 1, 0, 0),
816 	F(25000000, P_GPLL0_OUT_AUX2_DIV, 12, 0, 0),
817 	F(50000000, P_GPLL0_OUT_AUX2_DIV, 6, 0, 0),
818 	F(100000000, P_GPLL0_OUT_AUX2_DIV, 3, 0, 0),
819 	F(202000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
820 	{ }
821 };
822 
823 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
824 	.cmd_rcgr = 0x1400c,
825 	.mnd_width = 8,
826 	.hid_width = 5,
827 	.parent_map = gcc_parent_map_8,
828 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
829 	.clkr.hw.init = &(const struct clk_init_data) {
830 		.name = "gcc_sdcc2_apps_clk_src",
831 		.parent_data = gcc_parent_data_8,
832 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
833 		.ops = &clk_rcg2_floor_ops,
834 	},
835 };
836 
837 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
838 	F(25000000, P_GPLL0_OUT_AUX2_DIV, 12, 0, 0),
839 	F(50000000, P_GPLL0_OUT_AUX2_DIV, 6, 0, 0),
840 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
841 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
842 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
843 	{ }
844 };
845 
846 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
847 	.cmd_rcgr = 0x77020,
848 	.mnd_width = 8,
849 	.hid_width = 5,
850 	.parent_map = gcc_parent_map_0,
851 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
852 	.clkr.hw.init = &(const struct clk_init_data) {
853 		.name = "gcc_ufs_phy_axi_clk_src",
854 		.parent_data = gcc_parent_data_0,
855 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
856 		.ops = &clk_rcg2_ops,
857 	},
858 };
859 
860 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
861 	F(37500000, P_GPLL0_OUT_AUX2_DIV, 8, 0, 0),
862 	F(75000000, P_GPLL0_OUT_AUX2_DIV, 4, 0, 0),
863 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
864 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
865 	{ }
866 };
867 
868 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
869 	.cmd_rcgr = 0x77048,
870 	.mnd_width = 0,
871 	.hid_width = 5,
872 	.parent_map = gcc_parent_map_0,
873 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
874 	.clkr.hw.init = &(const struct clk_init_data) {
875 		.name = "gcc_ufs_phy_ice_core_clk_src",
876 		.parent_data = gcc_parent_data_0,
877 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
878 		.ops = &clk_rcg2_ops,
879 	},
880 };
881 
882 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
883 	.cmd_rcgr = 0x7707c,
884 	.mnd_width = 0,
885 	.hid_width = 5,
886 	.parent_map = gcc_parent_map_4,
887 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
888 	.clkr.hw.init = &(const struct clk_init_data) {
889 		.name = "gcc_ufs_phy_phy_aux_clk_src",
890 		.parent_data = gcc_parent_data_4,
891 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
892 		.ops = &clk_rcg2_ops,
893 	},
894 };
895 
896 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
897 	F(37500000, P_GPLL0_OUT_AUX2_DIV, 8, 0, 0),
898 	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
899 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
900 	{ }
901 };
902 
903 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
904 	.cmd_rcgr = 0x77060,
905 	.mnd_width = 0,
906 	.hid_width = 5,
907 	.parent_map = gcc_parent_map_0,
908 	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
909 	.clkr.hw.init = &(const struct clk_init_data) {
910 		.name = "gcc_ufs_phy_unipro_core_clk_src",
911 		.parent_data = gcc_parent_data_0,
912 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
913 		.ops = &clk_rcg2_ops,
914 	},
915 };
916 
917 static const struct freq_tbl ftbl_gcc_usb20_sec_master_clk_src[] = {
918 	F(19200000, P_BI_TCXO, 1, 0, 0),
919 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
920 	F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
921 	{ }
922 };
923 
924 static struct clk_rcg2 gcc_usb20_sec_master_clk_src = {
925 	.cmd_rcgr = 0xa601c,
926 	.mnd_width = 8,
927 	.hid_width = 5,
928 	.parent_map = gcc_parent_map_0,
929 	.freq_tbl = ftbl_gcc_usb20_sec_master_clk_src,
930 	.clkr.hw.init = &(const struct clk_init_data) {
931 		.name = "gcc_usb20_sec_master_clk_src",
932 		.parent_data = gcc_parent_data_0,
933 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
934 		.ops = &clk_rcg2_ops,
935 	},
936 };
937 
938 static struct clk_rcg2 gcc_usb20_sec_mock_utmi_clk_src = {
939 	.cmd_rcgr = 0xa6034,
940 	.mnd_width = 0,
941 	.hid_width = 5,
942 	.parent_map = gcc_parent_map_0,
943 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
944 	.clkr.hw.init = &(const struct clk_init_data) {
945 		.name = "gcc_usb20_sec_mock_utmi_clk_src",
946 		.parent_data = gcc_parent_data_0,
947 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
948 		.ops = &clk_rcg2_ops,
949 	},
950 };
951 
952 static const struct freq_tbl ftbl_gcc_usb2_sec_phy_aux_clk_src[] = {
953 	F(19200000, P_BI_TCXO, 1, 0, 0),
954 	{ }
955 };
956 
957 static struct clk_rcg2 gcc_usb2_sec_phy_aux_clk_src = {
958 	.cmd_rcgr = 0xa6060,
959 	.mnd_width = 0,
960 	.hid_width = 5,
961 	.parent_map = gcc_parent_map_3,
962 	.freq_tbl = ftbl_gcc_usb2_sec_phy_aux_clk_src,
963 	.clkr.hw.init = &(const struct clk_init_data) {
964 		.name = "gcc_usb2_sec_phy_aux_clk_src",
965 		.parent_data = gcc_parent_data_3,
966 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
967 		.ops = &clk_rcg2_ops,
968 	},
969 };
970 
971 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
972 	F(66666667, P_GPLL0_OUT_AUX2_DIV, 4.5, 0, 0),
973 	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
974 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
975 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
976 	{ }
977 };
978 
979 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
980 	.cmd_rcgr = 0xf01c,
981 	.mnd_width = 8,
982 	.hid_width = 5,
983 	.parent_map = gcc_parent_map_0,
984 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
985 	.clkr.hw.init = &(const struct clk_init_data) {
986 		.name = "gcc_usb30_prim_master_clk_src",
987 		.parent_data = gcc_parent_data_0,
988 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
989 		.ops = &clk_rcg2_ops,
990 	},
991 };
992 
993 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
994 	F(19200000, P_BI_TCXO, 1, 0, 0),
995 	F(20000000, P_GPLL0_OUT_AUX2_DIV, 15, 0, 0),
996 	F(40000000, P_GPLL0_OUT_AUX2_DIV, 7.5, 0, 0),
997 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
998 	{ }
999 };
1000 
1001 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1002 	.cmd_rcgr = 0xf034,
1003 	.mnd_width = 0,
1004 	.hid_width = 5,
1005 	.parent_map = gcc_parent_map_0,
1006 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1007 	.clkr.hw.init = &(const struct clk_init_data) {
1008 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1009 		.parent_data = gcc_parent_data_0,
1010 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1011 		.ops = &clk_rcg2_ops,
1012 	},
1013 };
1014 
1015 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1016 	.cmd_rcgr = 0xf060,
1017 	.mnd_width = 0,
1018 	.hid_width = 5,
1019 	.parent_map = gcc_parent_map_3,
1020 	.freq_tbl = ftbl_gcc_usb2_sec_phy_aux_clk_src,
1021 	.clkr.hw.init = &(const struct clk_init_data) {
1022 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1023 		.parent_data = gcc_parent_data_3,
1024 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1025 		.ops = &clk_rcg2_ops,
1026 	},
1027 };
1028 
1029 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
1030 	F(19200000, P_BI_TCXO, 1, 0, 0),
1031 	F(400000000, P_GPLL0_OUT_MAIN, 1.5, 0, 0),
1032 	{ }
1033 };
1034 
1035 static struct clk_rcg2 gcc_vsensor_clk_src = {
1036 	.cmd_rcgr = 0x7a018,
1037 	.mnd_width = 0,
1038 	.hid_width = 5,
1039 	.parent_map = gcc_parent_map_9,
1040 	.freq_tbl = ftbl_gcc_vsensor_clk_src,
1041 	.clkr.hw.init = &(const struct clk_init_data) {
1042 		.name = "gcc_vsensor_clk_src",
1043 		.parent_data = gcc_parent_data_9,
1044 		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
1045 		.ops = &clk_rcg2_ops,
1046 	},
1047 };
1048 
1049 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1050 	.halt_reg = 0x770c0,
1051 	.halt_check = BRANCH_HALT_VOTED,
1052 	.hwcg_reg = 0x770c0,
1053 	.hwcg_bit = 1,
1054 	.clkr = {
1055 		.enable_reg = 0x770c0,
1056 		.enable_mask = BIT(0),
1057 		.hw.init = &(const struct clk_init_data) {
1058 			.name = "gcc_aggre_ufs_phy_axi_clk",
1059 			.parent_hws = (const struct clk_hw*[]) {
1060 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
1061 			},
1062 			.num_parents = 1,
1063 			.flags = CLK_SET_RATE_PARENT,
1064 			.ops = &clk_branch2_ops,
1065 		},
1066 	},
1067 };
1068 
1069 static struct clk_branch gcc_aggre_usb2_sec_axi_clk = {
1070 	.halt_reg = 0xa6084,
1071 	.halt_check = BRANCH_HALT_VOTED,
1072 	.clkr = {
1073 		.enable_reg = 0xa6084,
1074 		.enable_mask = BIT(0),
1075 		.hw.init = &(const struct clk_init_data) {
1076 			.name = "gcc_aggre_usb2_sec_axi_clk",
1077 			.parent_hws = (const struct clk_hw*[]) {
1078 				&gcc_usb20_sec_master_clk_src.clkr.hw,
1079 			},
1080 			.num_parents = 1,
1081 			.flags = CLK_SET_RATE_PARENT,
1082 			.ops = &clk_branch2_ops,
1083 		},
1084 	},
1085 };
1086 
1087 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1088 	.halt_reg = 0xf07c,
1089 	.halt_check = BRANCH_HALT_VOTED,
1090 	.clkr = {
1091 		.enable_reg = 0xf07c,
1092 		.enable_mask = BIT(0),
1093 		.hw.init = &(const struct clk_init_data) {
1094 			.name = "gcc_aggre_usb3_prim_axi_clk",
1095 			.parent_hws = (const struct clk_hw*[]) {
1096 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1097 			},
1098 			.num_parents = 1,
1099 			.flags = CLK_SET_RATE_PARENT,
1100 			.ops = &clk_branch2_ops,
1101 		},
1102 	},
1103 };
1104 
1105 static struct clk_branch gcc_ahb2phy_east_clk = {
1106 	.halt_reg = 0x6a008,
1107 	.halt_check = BRANCH_HALT_VOTED,
1108 	.hwcg_reg = 0x6a008,
1109 	.hwcg_bit = 1,
1110 	.clkr = {
1111 		.enable_reg = 0x6a008,
1112 		.enable_mask = BIT(0),
1113 		.hw.init = &(const struct clk_init_data) {
1114 			.name = "gcc_ahb2phy_east_clk",
1115 			.ops = &clk_branch2_ops,
1116 		},
1117 	},
1118 };
1119 
1120 static struct clk_branch gcc_ahb2phy_west_clk = {
1121 	.halt_reg = 0x6a004,
1122 	.halt_check = BRANCH_HALT_VOTED,
1123 	.hwcg_reg = 0x6a004,
1124 	.hwcg_bit = 1,
1125 	.clkr = {
1126 		.enable_reg = 0x6a004,
1127 		.enable_mask = BIT(0),
1128 		.hw.init = &(const struct clk_init_data) {
1129 			.name = "gcc_ahb2phy_west_clk",
1130 			.ops = &clk_branch2_ops,
1131 		},
1132 	},
1133 };
1134 
1135 static struct clk_branch gcc_boot_rom_ahb_clk = {
1136 	.halt_reg = 0x38004,
1137 	.halt_check = BRANCH_HALT_VOTED,
1138 	.hwcg_reg = 0x38004,
1139 	.hwcg_bit = 1,
1140 	.clkr = {
1141 		.enable_reg = 0x52004,
1142 		.enable_mask = BIT(10),
1143 		.hw.init = &(const struct clk_init_data) {
1144 			.name = "gcc_boot_rom_ahb_clk",
1145 			.ops = &clk_branch2_ops,
1146 		},
1147 	},
1148 };
1149 
1150 static struct clk_branch gcc_camera_hf_axi_clk = {
1151 	.halt_reg = 0xb030,
1152 	.halt_check = BRANCH_HALT_VOTED,
1153 	.clkr = {
1154 		.enable_reg = 0xb030,
1155 		.enable_mask = BIT(0),
1156 		.hw.init = &(const struct clk_init_data) {
1157 			.name = "gcc_camera_hf_axi_clk",
1158 			.ops = &clk_branch2_ops,
1159 		},
1160 	},
1161 };
1162 
1163 static struct clk_branch gcc_ce1_ahb_clk = {
1164 	.halt_reg = 0x4100c,
1165 	.halt_check = BRANCH_HALT_VOTED,
1166 	.hwcg_reg = 0x4100c,
1167 	.hwcg_bit = 1,
1168 	.clkr = {
1169 		.enable_reg = 0x52004,
1170 		.enable_mask = BIT(3),
1171 		.hw.init = &(const struct clk_init_data) {
1172 			.name = "gcc_ce1_ahb_clk",
1173 			.ops = &clk_branch2_ops,
1174 		},
1175 	},
1176 };
1177 
1178 static struct clk_branch gcc_ce1_axi_clk = {
1179 	.halt_reg = 0x41008,
1180 	.halt_check = BRANCH_HALT_VOTED,
1181 	.clkr = {
1182 		.enable_reg = 0x52004,
1183 		.enable_mask = BIT(4),
1184 		.hw.init = &(const struct clk_init_data) {
1185 			.name = "gcc_ce1_axi_clk",
1186 			.ops = &clk_branch2_ops,
1187 		},
1188 	},
1189 };
1190 
1191 static struct clk_branch gcc_ce1_clk = {
1192 	.halt_reg = 0x41004,
1193 	.halt_check = BRANCH_HALT_VOTED,
1194 	.clkr = {
1195 		.enable_reg = 0x52004,
1196 		.enable_mask = BIT(5),
1197 		.hw.init = &(const struct clk_init_data) {
1198 			.name = "gcc_ce1_clk",
1199 			.ops = &clk_branch2_ops,
1200 		},
1201 	},
1202 };
1203 
1204 static struct clk_branch gcc_cfg_noc_usb2_sec_axi_clk = {
1205 	.halt_reg = 0xa609c,
1206 	.halt_check = BRANCH_HALT_VOTED,
1207 	.clkr = {
1208 		.enable_reg = 0xa609c,
1209 		.enable_mask = BIT(0),
1210 		.hw.init = &(const struct clk_init_data) {
1211 			.name = "gcc_cfg_noc_usb2_sec_axi_clk",
1212 			.parent_hws = (const struct clk_hw*[]) {
1213 				&gcc_usb20_sec_master_clk_src.clkr.hw,
1214 			},
1215 			.num_parents = 1,
1216 			.flags = CLK_SET_RATE_PARENT,
1217 			.ops = &clk_branch2_ops,
1218 		},
1219 	},
1220 };
1221 
1222 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1223 	.halt_reg = 0xf078,
1224 	.halt_check = BRANCH_HALT_VOTED,
1225 	.clkr = {
1226 		.enable_reg = 0xf078,
1227 		.enable_mask = BIT(0),
1228 		.hw.init = &(const struct clk_init_data) {
1229 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1230 			.parent_hws = (const struct clk_hw*[]) {
1231 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1232 			},
1233 			.num_parents = 1,
1234 			.flags = CLK_SET_RATE_PARENT,
1235 			.ops = &clk_branch2_ops,
1236 		},
1237 	},
1238 };
1239 
1240 static struct clk_branch gcc_cpuss_ahb_clk = {
1241 	.halt_reg = 0x48000,
1242 	.halt_check = BRANCH_HALT_VOTED,
1243 	.clkr = {
1244 		.enable_reg = 0x52004,
1245 		.enable_mask = BIT(21),
1246 		.hw.init = &(const struct clk_init_data) {
1247 			.name = "gcc_cpuss_ahb_clk",
1248 			.parent_hws = (const struct clk_hw*[]) {
1249 				&gcc_cpuss_ahb_clk_src.clkr.hw,
1250 			},
1251 			.num_parents = 1,
1252 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1253 			.ops = &clk_branch2_ops,
1254 		},
1255 	},
1256 };
1257 
1258 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1259 	.halt_reg = 0x71154,
1260 	.halt_check = BRANCH_HALT_VOTED,
1261 	.clkr = {
1262 		.enable_reg = 0x71154,
1263 		.enable_mask = BIT(0),
1264 		.hw.init = &(const struct clk_init_data) {
1265 			.name = "gcc_ddrss_gpu_axi_clk",
1266 			.ops = &clk_branch2_ops,
1267 		},
1268 	},
1269 };
1270 
1271 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1272 	.halt_check = BRANCH_HALT_DELAY,
1273 	.clkr = {
1274 		.enable_reg = 0x52004,
1275 		.enable_mask = BIT(20),
1276 		.hw.init = &(const struct clk_init_data) {
1277 			.name = "gcc_disp_gpll0_div_clk_src",
1278 			.parent_hws = (const struct clk_hw*[]) {
1279 				&gpll0_out_aux2_div.hw,
1280 			},
1281 			.num_parents = 1,
1282 			.ops = &clk_branch2_ops,
1283 		},
1284 	},
1285 };
1286 
1287 static struct clk_branch gcc_disp_hf_axi_clk = {
1288 	.halt_reg = 0xb038,
1289 	.halt_check = BRANCH_HALT_VOTED,
1290 	.clkr = {
1291 		.enable_reg = 0xb038,
1292 		.enable_mask = BIT(0),
1293 		.hw.init = &(const struct clk_init_data) {
1294 			.name = "gcc_disp_hf_axi_clk",
1295 			.ops = &clk_branch2_ops,
1296 		},
1297 	},
1298 };
1299 
1300 static struct clk_branch gcc_emac_axi_clk = {
1301 	.halt_reg = 0x6010,
1302 	.halt_check = BRANCH_HALT,
1303 	.clkr = {
1304 		.enable_reg = 0x6010,
1305 		.enable_mask = BIT(0),
1306 		.hw.init = &(const struct clk_init_data) {
1307 			.name = "gcc_emac_axi_clk",
1308 			.ops = &clk_branch2_ops,
1309 		},
1310 	},
1311 };
1312 
1313 static struct clk_branch gcc_emac_ptp_clk = {
1314 	.halt_reg = 0x6034,
1315 	.halt_check = BRANCH_HALT,
1316 	.clkr = {
1317 		.enable_reg = 0x6034,
1318 		.enable_mask = BIT(0),
1319 		.hw.init = &(const struct clk_init_data) {
1320 			.name = "gcc_emac_ptp_clk",
1321 			.parent_hws = (const struct clk_hw*[]) {
1322 				&gcc_emac_ptp_clk_src.clkr.hw,
1323 			},
1324 			.num_parents = 1,
1325 			.flags = CLK_SET_RATE_PARENT,
1326 			.ops = &clk_branch2_ops,
1327 		},
1328 	},
1329 };
1330 
1331 static struct clk_branch gcc_emac_rgmii_clk = {
1332 	.halt_reg = 0x6018,
1333 	.halt_check = BRANCH_HALT,
1334 	.clkr = {
1335 		.enable_reg = 0x6018,
1336 		.enable_mask = BIT(0),
1337 		.hw.init = &(const struct clk_init_data) {
1338 			.name = "gcc_emac_rgmii_clk",
1339 			.parent_hws = (const struct clk_hw*[]) {
1340 				&gcc_emac_rgmii_clk_src.clkr.hw,
1341 			},
1342 			.num_parents = 1,
1343 			.flags = CLK_SET_RATE_PARENT,
1344 			.ops = &clk_branch2_ops,
1345 		},
1346 	},
1347 };
1348 
1349 static struct clk_branch gcc_emac_slv_ahb_clk = {
1350 	.halt_reg = 0x6014,
1351 	.halt_check = BRANCH_HALT,
1352 	.hwcg_reg = 0x6014,
1353 	.hwcg_bit = 1,
1354 	.clkr = {
1355 		.enable_reg = 0x6014,
1356 		.enable_mask = BIT(0),
1357 		.hw.init = &(const struct clk_init_data) {
1358 			.name = "gcc_emac_slv_ahb_clk",
1359 			.ops = &clk_branch2_ops,
1360 		},
1361 	},
1362 };
1363 
1364 static struct clk_branch gcc_gp1_clk = {
1365 	.halt_reg = 0x64000,
1366 	.halt_check = BRANCH_HALT,
1367 	.clkr = {
1368 		.enable_reg = 0x64000,
1369 		.enable_mask = BIT(0),
1370 		.hw.init = &(const struct clk_init_data) {
1371 			.name = "gcc_gp1_clk",
1372 			.parent_hws = (const struct clk_hw*[]) {
1373 				&gcc_gp1_clk_src.clkr.hw,
1374 			},
1375 			.num_parents = 1,
1376 			.flags = CLK_SET_RATE_PARENT,
1377 			.ops = &clk_branch2_ops,
1378 		},
1379 	},
1380 };
1381 
1382 static struct clk_branch gcc_gp2_clk = {
1383 	.halt_reg = 0x65000,
1384 	.halt_check = BRANCH_HALT,
1385 	.clkr = {
1386 		.enable_reg = 0x65000,
1387 		.enable_mask = BIT(0),
1388 		.hw.init = &(const struct clk_init_data) {
1389 			.name = "gcc_gp2_clk",
1390 			.parent_hws = (const struct clk_hw*[]) {
1391 				&gcc_gp2_clk_src.clkr.hw,
1392 			},
1393 			.num_parents = 1,
1394 			.flags = CLK_SET_RATE_PARENT,
1395 			.ops = &clk_branch2_ops,
1396 		},
1397 	},
1398 };
1399 
1400 static struct clk_branch gcc_gp3_clk = {
1401 	.halt_reg = 0x66000,
1402 	.halt_check = BRANCH_HALT,
1403 	.clkr = {
1404 		.enable_reg = 0x66000,
1405 		.enable_mask = BIT(0),
1406 		.hw.init = &(const struct clk_init_data) {
1407 			.name = "gcc_gp3_clk",
1408 			.parent_hws = (const struct clk_hw*[]) {
1409 				&gcc_gp3_clk_src.clkr.hw,
1410 			},
1411 			.num_parents = 1,
1412 			.flags = CLK_SET_RATE_PARENT,
1413 			.ops = &clk_branch2_ops,
1414 		},
1415 	},
1416 };
1417 
1418 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1419 	.halt_check = BRANCH_HALT_DELAY,
1420 	.clkr = {
1421 		.enable_reg = 0x52004,
1422 		.enable_mask = BIT(15),
1423 		.hw.init = &(const struct clk_init_data) {
1424 			.name = "gcc_gpu_gpll0_clk_src",
1425 			.parent_hws = (const struct clk_hw*[]) {
1426 				&gpll0.clkr.hw,
1427 			},
1428 			.num_parents = 1,
1429 			.ops = &clk_branch2_ops,
1430 		},
1431 	},
1432 };
1433 
1434 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1435 	.halt_check = BRANCH_HALT_DELAY,
1436 	.clkr = {
1437 		.enable_reg = 0x52004,
1438 		.enable_mask = BIT(16),
1439 		.hw.init = &(const struct clk_init_data) {
1440 			.name = "gcc_gpu_gpll0_div_clk_src",
1441 			.parent_hws = (const struct clk_hw*[]) {
1442 				&gpll0_out_aux2_div.hw,
1443 			},
1444 			.num_parents = 1,
1445 			.ops = &clk_branch2_ops,
1446 		},
1447 	},
1448 };
1449 
1450 static struct clk_branch gcc_gpu_iref_clk = {
1451 	.halt_reg = 0x8c010,
1452 	.halt_check = BRANCH_HALT,
1453 	.clkr = {
1454 		.enable_reg = 0x8c010,
1455 		.enable_mask = BIT(0),
1456 		.hw.init = &(const struct clk_init_data) {
1457 			.name = "gcc_gpu_iref_clk",
1458 			.ops = &clk_branch2_ops,
1459 		},
1460 	},
1461 };
1462 
1463 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1464 	.halt_reg = 0x7100c,
1465 	.halt_check = BRANCH_HALT_VOTED,
1466 	.clkr = {
1467 		.enable_reg = 0x7100c,
1468 		.enable_mask = BIT(0),
1469 		.hw.init = &(const struct clk_init_data) {
1470 			.name = "gcc_gpu_memnoc_gfx_clk",
1471 			.ops = &clk_branch2_ops,
1472 		},
1473 	},
1474 };
1475 
1476 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1477 	.halt_reg = 0x71018,
1478 	.halt_check = BRANCH_HALT,
1479 	.clkr = {
1480 		.enable_reg = 0x71018,
1481 		.enable_mask = BIT(0),
1482 		.hw.init = &(const struct clk_init_data) {
1483 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1484 			.ops = &clk_branch2_ops,
1485 		},
1486 	},
1487 };
1488 
1489 static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1490 	.halt_reg = 0x6f02c,
1491 	.halt_check = BRANCH_HALT,
1492 	.clkr = {
1493 		.enable_reg = 0x6f02c,
1494 		.enable_mask = BIT(0),
1495 		.hw.init = &(const struct clk_init_data) {
1496 			.name = "gcc_pcie0_phy_refgen_clk",
1497 			.parent_hws = (const struct clk_hw*[]) {
1498 				&gcc_pcie_phy_refgen_clk_src.clkr.hw,
1499 			},
1500 			.num_parents = 1,
1501 			.flags = CLK_SET_RATE_PARENT,
1502 			.ops = &clk_branch2_ops,
1503 		},
1504 	},
1505 };
1506 
1507 static struct clk_branch gcc_pcie_0_aux_clk = {
1508 	.halt_reg = 0x6b020,
1509 	.halt_check = BRANCH_HALT_VOTED,
1510 	.clkr = {
1511 		.enable_reg = 0x5200c,
1512 		.enable_mask = BIT(3),
1513 		.hw.init = &(const struct clk_init_data) {
1514 			.name = "gcc_pcie_0_aux_clk",
1515 			.parent_hws = (const struct clk_hw*[]) {
1516 				&gcc_pcie_0_aux_clk_src.clkr.hw,
1517 			},
1518 			.num_parents = 1,
1519 			.flags = CLK_SET_RATE_PARENT,
1520 			.ops = &clk_branch2_ops,
1521 		},
1522 	},
1523 };
1524 
1525 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1526 	.halt_reg = 0x6b01c,
1527 	.halt_check = BRANCH_HALT_VOTED,
1528 	.hwcg_reg = 0x6b01c,
1529 	.hwcg_bit = 1,
1530 	.clkr = {
1531 		.enable_reg = 0x5200c,
1532 		.enable_mask = BIT(2),
1533 		.hw.init = &(const struct clk_init_data) {
1534 			.name = "gcc_pcie_0_cfg_ahb_clk",
1535 			.ops = &clk_branch2_ops,
1536 		},
1537 	},
1538 };
1539 
1540 static struct clk_branch gcc_pcie_0_clkref_clk = {
1541 	.halt_reg = 0x8c00c,
1542 	.halt_check = BRANCH_HALT,
1543 	.clkr = {
1544 		.enable_reg = 0x8c00c,
1545 		.enable_mask = BIT(0),
1546 		.hw.init = &(const struct clk_init_data) {
1547 			.name = "gcc_pcie_0_clkref_clk",
1548 			.ops = &clk_branch2_ops,
1549 		},
1550 	},
1551 };
1552 
1553 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1554 	.halt_reg = 0x6b018,
1555 	.halt_check = BRANCH_HALT_VOTED,
1556 	.clkr = {
1557 		.enable_reg = 0x5200c,
1558 		.enable_mask = BIT(1),
1559 		.hw.init = &(const struct clk_init_data) {
1560 			.name = "gcc_pcie_0_mstr_axi_clk",
1561 			.ops = &clk_branch2_ops,
1562 		},
1563 	},
1564 };
1565 
1566 static struct clk_branch gcc_pcie_0_pipe_clk = {
1567 	.halt_reg = 0x6b024,
1568 	.halt_check = BRANCH_HALT_SKIP,
1569 	.clkr = {
1570 		.enable_reg = 0x5200c,
1571 		.enable_mask = BIT(4),
1572 		.hw.init = &(const struct clk_init_data) {
1573 			.name = "gcc_pcie_0_pipe_clk",
1574 			.ops = &clk_branch2_ops,
1575 		},
1576 	},
1577 };
1578 
1579 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1580 	.halt_reg = 0x6b014,
1581 	.halt_check = BRANCH_HALT_VOTED,
1582 	.hwcg_reg = 0x6b014,
1583 	.hwcg_bit = 1,
1584 	.clkr = {
1585 		.enable_reg = 0x5200c,
1586 		.enable_mask = BIT(0),
1587 		.hw.init = &(const struct clk_init_data) {
1588 			.name = "gcc_pcie_0_slv_axi_clk",
1589 			.ops = &clk_branch2_ops,
1590 		},
1591 	},
1592 };
1593 
1594 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1595 	.halt_reg = 0x6b010,
1596 	.halt_check = BRANCH_HALT_VOTED,
1597 	.clkr = {
1598 		.enable_reg = 0x5200c,
1599 		.enable_mask = BIT(5),
1600 		.hw.init = &(const struct clk_init_data) {
1601 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1602 			.ops = &clk_branch2_ops,
1603 		},
1604 	},
1605 };
1606 
1607 static struct clk_branch gcc_pcie_phy_aux_clk = {
1608 	.halt_reg = 0x6f004,
1609 	.halt_check = BRANCH_HALT,
1610 	.clkr = {
1611 		.enable_reg = 0x6f004,
1612 		.enable_mask = BIT(0),
1613 		.hw.init = &(const struct clk_init_data) {
1614 			.name = "gcc_pcie_phy_aux_clk",
1615 			.parent_hws = (const struct clk_hw*[]) {
1616 				&gcc_pcie_0_aux_clk_src.clkr.hw,
1617 			},
1618 			.num_parents = 1,
1619 			.flags = CLK_SET_RATE_PARENT,
1620 			.ops = &clk_branch2_ops,
1621 		},
1622 	},
1623 };
1624 
1625 static struct clk_branch gcc_pdm2_clk = {
1626 	.halt_reg = 0x3300c,
1627 	.halt_check = BRANCH_HALT,
1628 	.clkr = {
1629 		.enable_reg = 0x3300c,
1630 		.enable_mask = BIT(0),
1631 		.hw.init = &(const struct clk_init_data) {
1632 			.name = "gcc_pdm2_clk",
1633 			.parent_hws = (const struct clk_hw*[]) {
1634 				&gcc_pdm2_clk_src.clkr.hw,
1635 			},
1636 			.num_parents = 1,
1637 			.flags = CLK_SET_RATE_PARENT,
1638 			.ops = &clk_branch2_ops,
1639 		},
1640 	},
1641 };
1642 
1643 static struct clk_branch gcc_pdm_ahb_clk = {
1644 	.halt_reg = 0x33004,
1645 	.halt_check = BRANCH_HALT,
1646 	.hwcg_reg = 0x33004,
1647 	.hwcg_bit = 1,
1648 	.clkr = {
1649 		.enable_reg = 0x33004,
1650 		.enable_mask = BIT(0),
1651 		.hw.init = &(const struct clk_init_data) {
1652 			.name = "gcc_pdm_ahb_clk",
1653 			.ops = &clk_branch2_ops,
1654 		},
1655 	},
1656 };
1657 
1658 static struct clk_branch gcc_pdm_xo4_clk = {
1659 	.halt_reg = 0x33008,
1660 	.halt_check = BRANCH_HALT,
1661 	.clkr = {
1662 		.enable_reg = 0x33008,
1663 		.enable_mask = BIT(0),
1664 		.hw.init = &(const struct clk_init_data) {
1665 			.name = "gcc_pdm_xo4_clk",
1666 			.ops = &clk_branch2_ops,
1667 		},
1668 	},
1669 };
1670 
1671 static struct clk_branch gcc_prng_ahb_clk = {
1672 	.halt_reg = 0x34004,
1673 	.halt_check = BRANCH_HALT_VOTED,
1674 	.hwcg_reg = 0x34004,
1675 	.hwcg_bit = 1,
1676 	.clkr = {
1677 		.enable_reg = 0x52004,
1678 		.enable_mask = BIT(13),
1679 		.hw.init = &(const struct clk_init_data) {
1680 			.name = "gcc_prng_ahb_clk",
1681 			.ops = &clk_branch2_ops,
1682 		},
1683 	},
1684 };
1685 
1686 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1687 	.halt_reg = 0xb018,
1688 	.halt_check = BRANCH_HALT_VOTED,
1689 	.hwcg_reg = 0xb018,
1690 	.hwcg_bit = 1,
1691 	.clkr = {
1692 		.enable_reg = 0xb018,
1693 		.enable_mask = BIT(0),
1694 		.hw.init = &(const struct clk_init_data) {
1695 			.name = "gcc_qmip_camera_nrt_ahb_clk",
1696 			.ops = &clk_branch2_ops,
1697 		},
1698 	},
1699 };
1700 
1701 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1702 	.halt_reg = 0xb020,
1703 	.halt_check = BRANCH_HALT_VOTED,
1704 	.hwcg_reg = 0xb020,
1705 	.hwcg_bit = 1,
1706 	.clkr = {
1707 		.enable_reg = 0xb020,
1708 		.enable_mask = BIT(0),
1709 		.hw.init = &(const struct clk_init_data) {
1710 			.name = "gcc_qmip_disp_ahb_clk",
1711 			.ops = &clk_branch2_ops,
1712 		},
1713 	},
1714 };
1715 
1716 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1717 	.halt_reg = 0x6b044,
1718 	.halt_check = BRANCH_HALT_VOTED,
1719 	.hwcg_reg = 0x6b044,
1720 	.hwcg_bit = 1,
1721 	.clkr = {
1722 		.enable_reg = 0x5200c,
1723 		.enable_mask = BIT(28),
1724 		.hw.init = &(const struct clk_init_data) {
1725 			.name = "gcc_qmip_pcie_ahb_clk",
1726 			.ops = &clk_branch2_ops,
1727 		},
1728 	},
1729 };
1730 
1731 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1732 	.halt_reg = 0xb014,
1733 	.halt_check = BRANCH_HALT_VOTED,
1734 	.hwcg_reg = 0xb014,
1735 	.hwcg_bit = 1,
1736 	.clkr = {
1737 		.enable_reg = 0xb014,
1738 		.enable_mask = BIT(0),
1739 		.hw.init = &(const struct clk_init_data) {
1740 			.name = "gcc_qmip_video_vcodec_ahb_clk",
1741 			.ops = &clk_branch2_ops,
1742 		},
1743 	},
1744 };
1745 
1746 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
1747 	.halt_reg = 0x4b000,
1748 	.halt_check = BRANCH_HALT_VOTED,
1749 	.clkr = {
1750 		.enable_reg = 0x4b000,
1751 		.enable_mask = BIT(0),
1752 		.hw.init = &(const struct clk_init_data) {
1753 			.name = "gcc_qspi_cnoc_periph_ahb_clk",
1754 			.ops = &clk_branch2_ops,
1755 		},
1756 	},
1757 };
1758 
1759 static struct clk_branch gcc_qspi_core_clk = {
1760 	.halt_reg = 0x4b004,
1761 	.halt_check = BRANCH_HALT,
1762 	.clkr = {
1763 		.enable_reg = 0x4b004,
1764 		.enable_mask = BIT(0),
1765 		.hw.init = &(const struct clk_init_data) {
1766 			.name = "gcc_qspi_core_clk",
1767 			.parent_hws = (const struct clk_hw*[]) {
1768 				&gcc_qspi_core_clk_src.clkr.hw,
1769 			},
1770 			.num_parents = 1,
1771 			.flags = CLK_SET_RATE_PARENT,
1772 			.ops = &clk_branch2_ops,
1773 		},
1774 	},
1775 };
1776 
1777 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1778 	.halt_reg = 0x17014,
1779 	.halt_check = BRANCH_HALT_VOTED,
1780 	.clkr = {
1781 		.enable_reg = 0x5200c,
1782 		.enable_mask = BIT(9),
1783 		.hw.init = &(const struct clk_init_data) {
1784 			.name = "gcc_qupv3_wrap0_core_2x_clk",
1785 			.ops = &clk_branch2_ops,
1786 		},
1787 	},
1788 };
1789 
1790 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1791 	.halt_reg = 0x1700c,
1792 	.halt_check = BRANCH_HALT_VOTED,
1793 	.clkr = {
1794 		.enable_reg = 0x5200c,
1795 		.enable_mask = BIT(8),
1796 		.hw.init = &(const struct clk_init_data) {
1797 			.name = "gcc_qupv3_wrap0_core_clk",
1798 			.ops = &clk_branch2_ops,
1799 		},
1800 	},
1801 };
1802 
1803 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1804 	.halt_reg = 0x17144,
1805 	.halt_check = BRANCH_HALT_VOTED,
1806 	.clkr = {
1807 		.enable_reg = 0x5200c,
1808 		.enable_mask = BIT(10),
1809 		.hw.init = &(const struct clk_init_data) {
1810 			.name = "gcc_qupv3_wrap0_s0_clk",
1811 			.parent_hws = (const struct clk_hw*[]) {
1812 				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1813 			},
1814 			.num_parents = 1,
1815 			.flags = CLK_SET_RATE_PARENT,
1816 			.ops = &clk_branch2_ops,
1817 		},
1818 	},
1819 };
1820 
1821 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1822 	.halt_reg = 0x17274,
1823 	.halt_check = BRANCH_HALT_VOTED,
1824 	.clkr = {
1825 		.enable_reg = 0x5200c,
1826 		.enable_mask = BIT(11),
1827 		.hw.init = &(const struct clk_init_data) {
1828 			.name = "gcc_qupv3_wrap0_s1_clk",
1829 			.parent_hws = (const struct clk_hw*[]) {
1830 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1831 			},
1832 			.num_parents = 1,
1833 			.flags = CLK_SET_RATE_PARENT,
1834 			.ops = &clk_branch2_ops,
1835 		},
1836 	},
1837 };
1838 
1839 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1840 	.halt_reg = 0x173a4,
1841 	.halt_check = BRANCH_HALT_VOTED,
1842 	.clkr = {
1843 		.enable_reg = 0x5200c,
1844 		.enable_mask = BIT(12),
1845 		.hw.init = &(const struct clk_init_data) {
1846 			.name = "gcc_qupv3_wrap0_s2_clk",
1847 			.parent_hws = (const struct clk_hw*[]) {
1848 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1849 			},
1850 			.num_parents = 1,
1851 			.flags = CLK_SET_RATE_PARENT,
1852 			.ops = &clk_branch2_ops,
1853 		},
1854 	},
1855 };
1856 
1857 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1858 	.halt_reg = 0x174d4,
1859 	.halt_check = BRANCH_HALT_VOTED,
1860 	.clkr = {
1861 		.enable_reg = 0x5200c,
1862 		.enable_mask = BIT(13),
1863 		.hw.init = &(const struct clk_init_data) {
1864 			.name = "gcc_qupv3_wrap0_s3_clk",
1865 			.parent_hws = (const struct clk_hw*[]) {
1866 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1867 			},
1868 			.num_parents = 1,
1869 			.flags = CLK_SET_RATE_PARENT,
1870 			.ops = &clk_branch2_ops,
1871 		},
1872 	},
1873 };
1874 
1875 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1876 	.halt_reg = 0x17604,
1877 	.halt_check = BRANCH_HALT_VOTED,
1878 	.clkr = {
1879 		.enable_reg = 0x5200c,
1880 		.enable_mask = BIT(14),
1881 		.hw.init = &(const struct clk_init_data) {
1882 			.name = "gcc_qupv3_wrap0_s4_clk",
1883 			.parent_hws = (const struct clk_hw*[]) {
1884 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1885 			},
1886 			.num_parents = 1,
1887 			.flags = CLK_SET_RATE_PARENT,
1888 			.ops = &clk_branch2_ops,
1889 		},
1890 	},
1891 };
1892 
1893 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1894 	.halt_reg = 0x17734,
1895 	.halt_check = BRANCH_HALT_VOTED,
1896 	.clkr = {
1897 		.enable_reg = 0x5200c,
1898 		.enable_mask = BIT(15),
1899 		.hw.init = &(const struct clk_init_data) {
1900 			.name = "gcc_qupv3_wrap0_s5_clk",
1901 			.parent_hws = (const struct clk_hw*[]) {
1902 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1903 			},
1904 			.num_parents = 1,
1905 			.flags = CLK_SET_RATE_PARENT,
1906 			.ops = &clk_branch2_ops,
1907 		},
1908 	},
1909 };
1910 
1911 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1912 	.halt_reg = 0x18014,
1913 	.halt_check = BRANCH_HALT_VOTED,
1914 	.clkr = {
1915 		.enable_reg = 0x5200c,
1916 		.enable_mask = BIT(18),
1917 		.hw.init = &(const struct clk_init_data) {
1918 			.name = "gcc_qupv3_wrap1_core_2x_clk",
1919 			.ops = &clk_branch2_ops,
1920 		},
1921 	},
1922 };
1923 
1924 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1925 	.halt_reg = 0x1800c,
1926 	.halt_check = BRANCH_HALT_VOTED,
1927 	.clkr = {
1928 		.enable_reg = 0x5200c,
1929 		.enable_mask = BIT(19),
1930 		.hw.init = &(const struct clk_init_data) {
1931 			.name = "gcc_qupv3_wrap1_core_clk",
1932 			.ops = &clk_branch2_ops,
1933 		},
1934 	},
1935 };
1936 
1937 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1938 	.halt_reg = 0x18144,
1939 	.halt_check = BRANCH_HALT_VOTED,
1940 	.clkr = {
1941 		.enable_reg = 0x5200c,
1942 		.enable_mask = BIT(22),
1943 		.hw.init = &(const struct clk_init_data) {
1944 			.name = "gcc_qupv3_wrap1_s0_clk",
1945 			.parent_hws = (const struct clk_hw*[]) {
1946 				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1947 			},
1948 			.num_parents = 1,
1949 			.flags = CLK_SET_RATE_PARENT,
1950 			.ops = &clk_branch2_ops,
1951 		},
1952 	},
1953 };
1954 
1955 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1956 	.halt_reg = 0x18274,
1957 	.halt_check = BRANCH_HALT_VOTED,
1958 	.clkr = {
1959 		.enable_reg = 0x5200c,
1960 		.enable_mask = BIT(23),
1961 		.hw.init = &(const struct clk_init_data) {
1962 			.name = "gcc_qupv3_wrap1_s1_clk",
1963 			.parent_hws = (const struct clk_hw*[]) {
1964 				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1965 			},
1966 			.num_parents = 1,
1967 			.flags = CLK_SET_RATE_PARENT,
1968 			.ops = &clk_branch2_ops,
1969 		},
1970 	},
1971 };
1972 
1973 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1974 	.halt_reg = 0x183a4,
1975 	.halt_check = BRANCH_HALT_VOTED,
1976 	.clkr = {
1977 		.enable_reg = 0x5200c,
1978 		.enable_mask = BIT(24),
1979 		.hw.init = &(const struct clk_init_data) {
1980 			.name = "gcc_qupv3_wrap1_s2_clk",
1981 			.parent_hws = (const struct clk_hw*[]) {
1982 				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1983 			},
1984 			.num_parents = 1,
1985 			.flags = CLK_SET_RATE_PARENT,
1986 			.ops = &clk_branch2_ops,
1987 		},
1988 	},
1989 };
1990 
1991 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1992 	.halt_reg = 0x184d4,
1993 	.halt_check = BRANCH_HALT_VOTED,
1994 	.clkr = {
1995 		.enable_reg = 0x5200c,
1996 		.enable_mask = BIT(25),
1997 		.hw.init = &(const struct clk_init_data) {
1998 			.name = "gcc_qupv3_wrap1_s3_clk",
1999 			.parent_hws = (const struct clk_hw*[]) {
2000 				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2001 			},
2002 			.num_parents = 1,
2003 			.flags = CLK_SET_RATE_PARENT,
2004 			.ops = &clk_branch2_ops,
2005 		},
2006 	},
2007 };
2008 
2009 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2010 	.halt_reg = 0x18604,
2011 	.halt_check = BRANCH_HALT_VOTED,
2012 	.clkr = {
2013 		.enable_reg = 0x5200c,
2014 		.enable_mask = BIT(26),
2015 		.hw.init = &(const struct clk_init_data) {
2016 			.name = "gcc_qupv3_wrap1_s4_clk",
2017 			.parent_hws = (const struct clk_hw*[]) {
2018 				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2019 			},
2020 			.num_parents = 1,
2021 			.flags = CLK_SET_RATE_PARENT,
2022 			.ops = &clk_branch2_ops,
2023 		},
2024 	},
2025 };
2026 
2027 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2028 	.halt_reg = 0x18734,
2029 	.halt_check = BRANCH_HALT_VOTED,
2030 	.clkr = {
2031 		.enable_reg = 0x5200c,
2032 		.enable_mask = BIT(27),
2033 		.hw.init = &(const struct clk_init_data) {
2034 			.name = "gcc_qupv3_wrap1_s5_clk",
2035 			.parent_hws = (const struct clk_hw*[]) {
2036 				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2037 			},
2038 			.num_parents = 1,
2039 			.flags = CLK_SET_RATE_PARENT,
2040 			.ops = &clk_branch2_ops,
2041 		},
2042 	},
2043 };
2044 
2045 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2046 	.halt_reg = 0x17004,
2047 	.halt_check = BRANCH_HALT_VOTED,
2048 	.clkr = {
2049 		.enable_reg = 0x5200c,
2050 		.enable_mask = BIT(6),
2051 		.hw.init = &(const struct clk_init_data) {
2052 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2053 			.ops = &clk_branch2_ops,
2054 		},
2055 	},
2056 };
2057 
2058 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2059 	.halt_reg = 0x17008,
2060 	.halt_check = BRANCH_HALT_VOTED,
2061 	.hwcg_reg = 0x17008,
2062 	.hwcg_bit = 1,
2063 	.clkr = {
2064 		.enable_reg = 0x5200c,
2065 		.enable_mask = BIT(7),
2066 		.hw.init = &(const struct clk_init_data) {
2067 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2068 			.ops = &clk_branch2_ops,
2069 		},
2070 	},
2071 };
2072 
2073 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2074 	.halt_reg = 0x18004,
2075 	.halt_check = BRANCH_HALT_VOTED,
2076 	.clkr = {
2077 		.enable_reg = 0x5200c,
2078 		.enable_mask = BIT(20),
2079 		.hw.init = &(const struct clk_init_data) {
2080 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2081 			.ops = &clk_branch2_ops,
2082 		},
2083 	},
2084 };
2085 
2086 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2087 	.halt_reg = 0x18008,
2088 	.halt_check = BRANCH_HALT_VOTED,
2089 	.hwcg_reg = 0x18008,
2090 	.hwcg_bit = 1,
2091 	.clkr = {
2092 		.enable_reg = 0x5200c,
2093 		.enable_mask = BIT(21),
2094 		.hw.init = &(const struct clk_init_data) {
2095 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2096 			.ops = &clk_branch2_ops,
2097 		},
2098 	},
2099 };
2100 
2101 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
2102 	.halt_reg = 0x8c030,
2103 	.halt_check = BRANCH_HALT,
2104 	.clkr = {
2105 		.enable_reg = 0x8c030,
2106 		.enable_mask = BIT(0),
2107 		.hw.init = &(const struct clk_init_data) {
2108 			.name = "gcc_rx1_usb2_clkref_clk",
2109 			.ops = &clk_branch2_ops,
2110 		},
2111 	},
2112 };
2113 
2114 static struct clk_branch gcc_rx3_usb2_clkref_clk = {
2115 	.halt_reg = 0x8c038,
2116 	.halt_check = BRANCH_HALT_VOTED,
2117 	.clkr = {
2118 		.enable_reg = 0x8c038,
2119 		.enable_mask = BIT(0),
2120 		.hw.init = &(const struct clk_init_data) {
2121 			.name = "gcc_rx3_usb2_clkref_clk",
2122 			.ops = &clk_branch2_ops,
2123 		},
2124 	},
2125 };
2126 
2127 static struct clk_branch gcc_sdcc1_ahb_clk = {
2128 	.halt_reg = 0x12008,
2129 	.halt_check = BRANCH_HALT,
2130 	.clkr = {
2131 		.enable_reg = 0x12008,
2132 		.enable_mask = BIT(0),
2133 		.hw.init = &(const struct clk_init_data) {
2134 			.name = "gcc_sdcc1_ahb_clk",
2135 			.ops = &clk_branch2_ops,
2136 		},
2137 	},
2138 };
2139 
2140 static struct clk_branch gcc_sdcc1_apps_clk = {
2141 	.halt_reg = 0x12004,
2142 	.halt_check = BRANCH_HALT,
2143 	.clkr = {
2144 		.enable_reg = 0x12004,
2145 		.enable_mask = BIT(0),
2146 		.hw.init = &(const struct clk_init_data) {
2147 			.name = "gcc_sdcc1_apps_clk",
2148 			.parent_hws = (const struct clk_hw*[]) {
2149 				&gcc_sdcc1_apps_clk_src.clkr.hw,
2150 			},
2151 			.num_parents = 1,
2152 			.flags = CLK_SET_RATE_PARENT,
2153 			.ops = &clk_branch2_ops,
2154 		},
2155 	},
2156 };
2157 
2158 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2159 	.halt_reg = 0x1200c,
2160 	.halt_check = BRANCH_HALT,
2161 	.clkr = {
2162 		.enable_reg = 0x1200c,
2163 		.enable_mask = BIT(0),
2164 		.hw.init = &(const struct clk_init_data) {
2165 			.name = "gcc_sdcc1_ice_core_clk",
2166 			.parent_hws = (const struct clk_hw*[]) {
2167 				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
2168 			},
2169 			.num_parents = 1,
2170 			.flags = CLK_SET_RATE_PARENT,
2171 			.ops = &clk_branch2_ops,
2172 		},
2173 	},
2174 };
2175 
2176 static struct clk_branch gcc_sdcc2_ahb_clk = {
2177 	.halt_reg = 0x14008,
2178 	.halt_check = BRANCH_HALT,
2179 	.clkr = {
2180 		.enable_reg = 0x14008,
2181 		.enable_mask = BIT(0),
2182 		.hw.init = &(const struct clk_init_data) {
2183 			.name = "gcc_sdcc2_ahb_clk",
2184 			.ops = &clk_branch2_ops,
2185 		},
2186 	},
2187 };
2188 
2189 static struct clk_branch gcc_sdcc2_apps_clk = {
2190 	.halt_reg = 0x14004,
2191 	.halt_check = BRANCH_HALT,
2192 	.clkr = {
2193 		.enable_reg = 0x14004,
2194 		.enable_mask = BIT(0),
2195 		.hw.init = &(const struct clk_init_data) {
2196 			.name = "gcc_sdcc2_apps_clk",
2197 			.parent_hws = (const struct clk_hw*[]) {
2198 				&gcc_sdcc2_apps_clk_src.clkr.hw,
2199 			},
2200 			.num_parents = 1,
2201 			.flags = CLK_SET_RATE_PARENT,
2202 			.ops = &clk_branch2_ops,
2203 		},
2204 	},
2205 };
2206 
2207 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2208 	.halt_reg = 0x4819c,
2209 	.halt_check = BRANCH_HALT_VOTED,
2210 	.clkr = {
2211 		.enable_reg = 0x52004,
2212 		.enable_mask = BIT(0),
2213 		.hw.init = &(struct clk_init_data) {
2214 			.name = "gcc_sys_noc_cpuss_ahb_clk",
2215 			.parent_data = &(const struct clk_parent_data) {
2216 				.hw = &gcc_cpuss_ahb_clk_src.clkr.hw,
2217 			},
2218 			.num_parents = 1,
2219 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2220 			.ops = &clk_branch2_ops,
2221 		},
2222 	},
2223 };
2224 
2225 static struct clk_branch gcc_ufs_card_clkref_clk = {
2226 	.halt_reg = 0x8c004,
2227 	.halt_check = BRANCH_HALT_VOTED,
2228 	.clkr = {
2229 		.enable_reg = 0x8c004,
2230 		.enable_mask = BIT(0),
2231 		.hw.init = &(const struct clk_init_data) {
2232 			.name = "gcc_ufs_card_clkref_clk",
2233 			.ops = &clk_branch2_ops,
2234 		},
2235 	},
2236 };
2237 
2238 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2239 	.halt_reg = 0x8c000,
2240 	.halt_check = BRANCH_HALT,
2241 	.clkr = {
2242 		.enable_reg = 0x8c000,
2243 		.enable_mask = BIT(0),
2244 		.hw.init = &(const struct clk_init_data) {
2245 			.name = "gcc_ufs_mem_clkref_clk",
2246 			.ops = &clk_branch2_ops,
2247 		},
2248 	},
2249 };
2250 
2251 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2252 	.halt_reg = 0x77014,
2253 	.halt_check = BRANCH_HALT_VOTED,
2254 	.hwcg_reg = 0x77014,
2255 	.hwcg_bit = 1,
2256 	.clkr = {
2257 		.enable_reg = 0x77014,
2258 		.enable_mask = BIT(0),
2259 		.hw.init = &(const struct clk_init_data) {
2260 			.name = "gcc_ufs_phy_ahb_clk",
2261 			.ops = &clk_branch2_ops,
2262 		},
2263 	},
2264 };
2265 
2266 static struct clk_branch gcc_ufs_phy_axi_clk = {
2267 	.halt_reg = 0x77010,
2268 	.halt_check = BRANCH_HALT,
2269 	.hwcg_reg = 0x77010,
2270 	.hwcg_bit = 1,
2271 	.clkr = {
2272 		.enable_reg = 0x77010,
2273 		.enable_mask = BIT(0),
2274 		.hw.init = &(const struct clk_init_data) {
2275 			.name = "gcc_ufs_phy_axi_clk",
2276 			.parent_hws = (const struct clk_hw*[]) {
2277 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2278 			},
2279 			.num_parents = 1,
2280 			.flags = CLK_SET_RATE_PARENT,
2281 			.ops = &clk_branch2_ops,
2282 		},
2283 	},
2284 };
2285 
2286 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2287 	.halt_reg = 0x77044,
2288 	.halt_check = BRANCH_HALT,
2289 	.hwcg_reg = 0x77044,
2290 	.hwcg_bit = 1,
2291 	.clkr = {
2292 		.enable_reg = 0x77044,
2293 		.enable_mask = BIT(0),
2294 		.hw.init = &(const struct clk_init_data) {
2295 			.name = "gcc_ufs_phy_ice_core_clk",
2296 			.parent_hws = (const struct clk_hw*[]) {
2297 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2298 			},
2299 			.num_parents = 1,
2300 			.flags = CLK_SET_RATE_PARENT,
2301 			.ops = &clk_branch2_ops,
2302 		},
2303 	},
2304 };
2305 
2306 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2307 	.halt_reg = 0x77078,
2308 	.halt_check = BRANCH_HALT,
2309 	.hwcg_reg = 0x77078,
2310 	.hwcg_bit = 1,
2311 	.clkr = {
2312 		.enable_reg = 0x77078,
2313 		.enable_mask = BIT(0),
2314 		.hw.init = &(const struct clk_init_data) {
2315 			.name = "gcc_ufs_phy_phy_aux_clk",
2316 			.parent_hws = (const struct clk_hw*[]) {
2317 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2318 			},
2319 			.num_parents = 1,
2320 			.flags = CLK_SET_RATE_PARENT,
2321 			.ops = &clk_branch2_ops,
2322 		},
2323 	},
2324 };
2325 
2326 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2327 	.halt_reg = 0x7701c,
2328 	.halt_check = BRANCH_HALT_DELAY,
2329 	.clkr = {
2330 		.enable_reg = 0x7701c,
2331 		.enable_mask = BIT(0),
2332 		.hw.init = &(const struct clk_init_data) {
2333 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2334 			.ops = &clk_branch2_ops,
2335 		},
2336 	},
2337 };
2338 
2339 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2340 	.halt_reg = 0x77018,
2341 	.halt_check = BRANCH_HALT_DELAY,
2342 	.clkr = {
2343 		.enable_reg = 0x77018,
2344 		.enable_mask = BIT(0),
2345 		.hw.init = &(const struct clk_init_data) {
2346 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2347 			.ops = &clk_branch2_ops,
2348 		},
2349 	},
2350 };
2351 
2352 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2353 	.halt_reg = 0x77040,
2354 	.halt_check = BRANCH_HALT,
2355 	.hwcg_reg = 0x77040,
2356 	.hwcg_bit = 1,
2357 	.clkr = {
2358 		.enable_reg = 0x77040,
2359 		.enable_mask = BIT(0),
2360 		.hw.init = &(const struct clk_init_data) {
2361 			.name = "gcc_ufs_phy_unipro_core_clk",
2362 			.parent_hws = (const struct clk_hw*[]) {
2363 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2364 			},
2365 			.num_parents = 1,
2366 			.flags = CLK_SET_RATE_PARENT,
2367 			.ops = &clk_branch2_ops,
2368 		},
2369 	},
2370 };
2371 
2372 static struct clk_branch gcc_usb20_sec_master_clk = {
2373 	.halt_reg = 0xa6010,
2374 	.halt_check = BRANCH_HALT_VOTED,
2375 	.clkr = {
2376 		.enable_reg = 0xa6010,
2377 		.enable_mask = BIT(0),
2378 		.hw.init = &(const struct clk_init_data) {
2379 			.name = "gcc_usb20_sec_master_clk",
2380 			.parent_hws = (const struct clk_hw*[]) {
2381 				&gcc_usb20_sec_master_clk_src.clkr.hw,
2382 			},
2383 			.num_parents = 1,
2384 			.flags = CLK_SET_RATE_PARENT,
2385 			.ops = &clk_branch2_ops,
2386 		},
2387 	},
2388 };
2389 
2390 static struct clk_branch gcc_usb20_sec_mock_utmi_clk = {
2391 	.halt_reg = 0xa6018,
2392 	.halt_check = BRANCH_HALT,
2393 	.clkr = {
2394 		.enable_reg = 0xa6018,
2395 		.enable_mask = BIT(0),
2396 		.hw.init = &(const struct clk_init_data) {
2397 			.name = "gcc_usb20_sec_mock_utmi_clk",
2398 			.parent_hws = (const struct clk_hw*[]) {
2399 				&gcc_usb20_sec_mock_utmi_clk_src.clkr.hw,
2400 			},
2401 			.num_parents = 1,
2402 			.flags = CLK_SET_RATE_PARENT,
2403 			.ops = &clk_branch2_ops,
2404 		},
2405 	},
2406 };
2407 
2408 static struct clk_branch gcc_usb20_sec_sleep_clk = {
2409 	.halt_reg = 0xa6014,
2410 	.halt_check = BRANCH_HALT,
2411 	.clkr = {
2412 		.enable_reg = 0xa6014,
2413 		.enable_mask = BIT(0),
2414 		.hw.init = &(const struct clk_init_data) {
2415 			.name = "gcc_usb20_sec_sleep_clk",
2416 			.ops = &clk_branch2_ops,
2417 		},
2418 	},
2419 };
2420 
2421 static struct clk_branch gcc_usb2_prim_clkref_clk = {
2422 	.halt_reg = 0x8c028,
2423 	.halt_check = BRANCH_HALT_VOTED,
2424 	.clkr = {
2425 		.enable_reg = 0x8c028,
2426 		.enable_mask = BIT(0),
2427 		.hw.init = &(const struct clk_init_data) {
2428 			.name = "gcc_usb2_prim_clkref_clk",
2429 			.ops = &clk_branch2_ops,
2430 		},
2431 	},
2432 };
2433 
2434 static struct clk_branch gcc_usb2_sec_clkref_clk = {
2435 	.halt_reg = 0x8c018,
2436 	.halt_check = BRANCH_HALT_VOTED,
2437 	.clkr = {
2438 		.enable_reg = 0x8c018,
2439 		.enable_mask = BIT(0),
2440 		.hw.init = &(const struct clk_init_data) {
2441 			.name = "gcc_usb2_sec_clkref_clk",
2442 			.ops = &clk_branch2_ops,
2443 		},
2444 	},
2445 };
2446 
2447 static struct clk_branch gcc_usb2_sec_phy_aux_clk = {
2448 	.halt_reg = 0xa6050,
2449 	.halt_check = BRANCH_HALT,
2450 	.clkr = {
2451 		.enable_reg = 0xa6050,
2452 		.enable_mask = BIT(0),
2453 		.hw.init = &(const struct clk_init_data) {
2454 			.name = "gcc_usb2_sec_phy_aux_clk",
2455 			.parent_hws = (const struct clk_hw*[]) {
2456 				&gcc_usb2_sec_phy_aux_clk_src.clkr.hw,
2457 			},
2458 			.num_parents = 1,
2459 			.flags = CLK_SET_RATE_PARENT,
2460 			.ops = &clk_branch2_ops,
2461 		},
2462 	},
2463 };
2464 
2465 static struct clk_branch gcc_usb2_sec_phy_com_aux_clk = {
2466 	.halt_reg = 0xa6054,
2467 	.halt_check = BRANCH_HALT,
2468 	.clkr = {
2469 		.enable_reg = 0xa6054,
2470 		.enable_mask = BIT(0),
2471 		.hw.init = &(const struct clk_init_data) {
2472 			.name = "gcc_usb2_sec_phy_com_aux_clk",
2473 			.parent_hws = (const struct clk_hw*[]) {
2474 				&gcc_usb2_sec_phy_aux_clk_src.clkr.hw,
2475 			},
2476 			.num_parents = 1,
2477 			.flags = CLK_SET_RATE_PARENT,
2478 			.ops = &clk_branch2_ops,
2479 		},
2480 	},
2481 };
2482 
2483 static struct clk_branch gcc_usb2_sec_phy_pipe_clk = {
2484 	.halt_reg = 0xa6058,
2485 	.halt_check = BRANCH_HALT_SKIP,
2486 	.clkr = {
2487 		.enable_reg = 0xa6058,
2488 		.enable_mask = BIT(0),
2489 		.hw.init = &(const struct clk_init_data) {
2490 			.name = "gcc_usb2_sec_phy_pipe_clk",
2491 			.ops = &clk_branch2_ops,
2492 		},
2493 	},
2494 };
2495 
2496 static struct clk_branch gcc_usb30_prim_master_clk = {
2497 	.halt_reg = 0xf010,
2498 	.halt_check = BRANCH_HALT_VOTED,
2499 	.clkr = {
2500 		.enable_reg = 0xf010,
2501 		.enable_mask = BIT(0),
2502 		.hw.init = &(const struct clk_init_data) {
2503 			.name = "gcc_usb30_prim_master_clk",
2504 			.parent_hws = (const struct clk_hw*[]) {
2505 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2506 			},
2507 			.num_parents = 1,
2508 			.flags = CLK_SET_RATE_PARENT,
2509 			.ops = &clk_branch2_ops,
2510 		},
2511 	},
2512 };
2513 
2514 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2515 	.halt_reg = 0xf018,
2516 	.halt_check = BRANCH_HALT,
2517 	.clkr = {
2518 		.enable_reg = 0xf018,
2519 		.enable_mask = BIT(0),
2520 		.hw.init = &(const struct clk_init_data) {
2521 			.name = "gcc_usb30_prim_mock_utmi_clk",
2522 			.parent_hws = (const struct clk_hw*[]) {
2523 				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2524 			},
2525 			.num_parents = 1,
2526 			.flags = CLK_SET_RATE_PARENT,
2527 			.ops = &clk_branch2_ops,
2528 		},
2529 	},
2530 };
2531 
2532 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2533 	.halt_reg = 0xf014,
2534 	.halt_check = BRANCH_HALT,
2535 	.clkr = {
2536 		.enable_reg = 0xf014,
2537 		.enable_mask = BIT(0),
2538 		.hw.init = &(const struct clk_init_data) {
2539 			.name = "gcc_usb30_prim_sleep_clk",
2540 			.ops = &clk_branch2_ops,
2541 		},
2542 	},
2543 };
2544 
2545 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2546 	.halt_reg = 0x8c014,
2547 	.halt_check = BRANCH_HALT_DELAY,
2548 	.clkr = {
2549 		.enable_reg = 0x8c014,
2550 		.enable_mask = BIT(0),
2551 		.hw.init = &(const struct clk_init_data) {
2552 			.name = "gcc_usb3_prim_clkref_clk",
2553 			.ops = &clk_branch2_ops,
2554 		},
2555 	},
2556 };
2557 
2558 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2559 	.halt_reg = 0xf050,
2560 	.halt_check = BRANCH_HALT,
2561 	.clkr = {
2562 		.enable_reg = 0xf050,
2563 		.enable_mask = BIT(0),
2564 		.hw.init = &(const struct clk_init_data) {
2565 			.name = "gcc_usb3_prim_phy_aux_clk",
2566 			.parent_hws = (const struct clk_hw*[]) {
2567 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2568 			},
2569 			.num_parents = 1,
2570 			.flags = CLK_SET_RATE_PARENT,
2571 			.ops = &clk_branch2_ops,
2572 		},
2573 	},
2574 };
2575 
2576 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2577 	.halt_reg = 0xf054,
2578 	.halt_check = BRANCH_HALT,
2579 	.clkr = {
2580 		.enable_reg = 0xf054,
2581 		.enable_mask = BIT(0),
2582 		.hw.init = &(const struct clk_init_data) {
2583 			.name = "gcc_usb3_prim_phy_com_aux_clk",
2584 			.parent_hws = (const struct clk_hw*[]) {
2585 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2586 			},
2587 			.num_parents = 1,
2588 			.flags = CLK_SET_RATE_PARENT,
2589 			.ops = &clk_branch2_ops,
2590 		},
2591 	},
2592 };
2593 
2594 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2595 	.halt_reg = 0xf058,
2596 	.halt_check = BRANCH_HALT_SKIP,
2597 	.clkr = {
2598 		.enable_reg = 0xf058,
2599 		.enable_mask = BIT(0),
2600 		.hw.init = &(const struct clk_init_data) {
2601 			.name = "gcc_usb3_prim_phy_pipe_clk",
2602 			.ops = &clk_branch2_ops,
2603 		},
2604 	},
2605 };
2606 
2607 static struct clk_branch gcc_usb3_sec_clkref_clk = {
2608 	.halt_reg = 0x8c008,
2609 	.halt_check = BRANCH_HALT_DELAY,
2610 	.clkr = {
2611 		.enable_reg = 0x8c008,
2612 		.enable_mask = BIT(0),
2613 		.hw.init = &(const struct clk_init_data) {
2614 			.name = "gcc_usb3_sec_clkref_clk",
2615 			.ops = &clk_branch2_ops,
2616 		},
2617 	},
2618 };
2619 
2620 static struct clk_branch gcc_video_axi0_clk = {
2621 	.halt_reg = 0xb024,
2622 	.halt_check = BRANCH_HALT_VOTED,
2623 	.clkr = {
2624 		.enable_reg = 0xb024,
2625 		.enable_mask = BIT(0),
2626 		.hw.init = &(const struct clk_init_data) {
2627 			.name = "gcc_video_axi0_clk",
2628 			.ops = &clk_branch2_ops,
2629 		},
2630 	},
2631 };
2632 
2633 static struct clk_hw *gcc_qcs615_hws[] = {
2634 	[GPLL0_OUT_AUX2_DIV] = &gpll0_out_aux2_div.hw,
2635 	[GPLL3_OUT_AUX2_DIV] = &gpll3_out_aux2_div.hw,
2636 };
2637 
2638 static struct gdsc emac_gdsc = {
2639 	.gdscr = 0x6004,
2640 	.en_rest_wait_val = 0x2,
2641 	.en_few_wait_val = 0x2,
2642 	.clk_dis_wait_val = 0x2,
2643 	.pd = {
2644 		.name = "emac_gdsc",
2645 	},
2646 	.pwrsts = PWRSTS_OFF_ON,
2647 };
2648 
2649 static struct gdsc pcie_0_gdsc = {
2650 	.gdscr = 0x6b004,
2651 	.en_rest_wait_val = 0x2,
2652 	.en_few_wait_val = 0x2,
2653 	.clk_dis_wait_val = 0x2,
2654 	.pd = {
2655 		.name = "pcie_0_gdsc",
2656 	},
2657 	.pwrsts = PWRSTS_OFF_ON,
2658 };
2659 
2660 static struct gdsc ufs_phy_gdsc = {
2661 	.gdscr = 0x77004,
2662 	.en_rest_wait_val = 0x2,
2663 	.en_few_wait_val = 0x2,
2664 	.clk_dis_wait_val = 0x2,
2665 	.pd = {
2666 		.name = "ufs_phy_gdsc",
2667 	},
2668 	.pwrsts = PWRSTS_OFF_ON,
2669 };
2670 
2671 static struct gdsc usb20_sec_gdsc = {
2672 	.gdscr = 0xa6004,
2673 	.en_rest_wait_val = 0x2,
2674 	.en_few_wait_val = 0x2,
2675 	.clk_dis_wait_val = 0x2,
2676 	.pd = {
2677 		.name = "usb20_sec_gdsc",
2678 	},
2679 	.pwrsts = PWRSTS_OFF_ON,
2680 };
2681 
2682 static struct gdsc usb30_prim_gdsc = {
2683 	.gdscr = 0xf004,
2684 	.en_rest_wait_val = 0x2,
2685 	.en_few_wait_val = 0x2,
2686 	.clk_dis_wait_val = 0x2,
2687 	.pd = {
2688 		.name = "usb30_prim_gdsc",
2689 	},
2690 	.pwrsts = PWRSTS_OFF_ON,
2691 };
2692 
2693 static struct gdsc hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc = {
2694 	.gdscr = 0x7d040,
2695 	.pd = {
2696 		.name = "hlos1_vote_aggre_noc_mmu_audio_tbu",
2697 	},
2698 	.pwrsts = PWRSTS_OFF_ON,
2699 	.flags = VOTABLE,
2700 };
2701 
2702 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu1_gdsc = {
2703 	.gdscr = 0x7d044,
2704 	.pd = {
2705 		.name = "hlos1_vote_aggre_noc_mmu_tbu1",
2706 	},
2707 	.pwrsts = PWRSTS_OFF_ON,
2708 	.flags = VOTABLE,
2709 };
2710 
2711 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu2_gdsc = {
2712 	.gdscr = 0x7d048,
2713 	.pd = {
2714 		.name = "hlos1_vote_aggre_noc_mmu_tbu2",
2715 	},
2716 	.pwrsts = PWRSTS_OFF_ON,
2717 	.flags = VOTABLE,
2718 };
2719 
2720 static struct gdsc hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc = {
2721 	.gdscr = 0x7d04c,
2722 	.pd = {
2723 		.name = "hlos1_vote_aggre_noc_mmu_pcie_tbu",
2724 	},
2725 	.pwrsts = PWRSTS_OFF_ON,
2726 	.flags = VOTABLE,
2727 };
2728 
2729 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2730 	.gdscr = 0x7d050,
2731 	.pd = {
2732 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2733 	},
2734 	.pwrsts = PWRSTS_OFF_ON,
2735 	.flags = VOTABLE,
2736 };
2737 
2738 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
2739 	.gdscr = 0x7d054,
2740 	.pd = {
2741 		.name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc",
2742 	},
2743 	.pwrsts = PWRSTS_OFF_ON,
2744 	.flags = VOTABLE,
2745 };
2746 
2747 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2748 	.gdscr = 0x7d058,
2749 	.pd = {
2750 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2751 	},
2752 	.pwrsts = PWRSTS_OFF_ON,
2753 	.flags = VOTABLE,
2754 };
2755 
2756 static struct clk_regmap *gcc_qcs615_clocks[] = {
2757 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2758 	[GCC_AGGRE_USB2_SEC_AXI_CLK] = &gcc_aggre_usb2_sec_axi_clk.clkr,
2759 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2760 	[GCC_AHB2PHY_EAST_CLK] = &gcc_ahb2phy_east_clk.clkr,
2761 	[GCC_AHB2PHY_WEST_CLK] = &gcc_ahb2phy_west_clk.clkr,
2762 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2763 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2764 	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2765 	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2766 	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2767 	[GCC_CFG_NOC_USB2_SEC_AXI_CLK] = &gcc_cfg_noc_usb2_sec_axi_clk.clkr,
2768 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2769 	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2770 	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2771 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2772 	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
2773 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2774 	[GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
2775 	[GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
2776 	[GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
2777 	[GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
2778 	[GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
2779 	[GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
2780 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2781 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2782 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2783 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2784 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2785 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2786 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2787 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2788 	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
2789 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2790 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2791 	[GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
2792 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2793 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2794 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2795 	[GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
2796 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2797 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2798 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2799 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2800 	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
2801 	[GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
2802 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2803 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2804 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2805 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2806 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2807 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
2808 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
2809 	[GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
2810 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
2811 	[GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
2812 	[GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
2813 	[GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
2814 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2815 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2816 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2817 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2818 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2819 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2820 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2821 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2822 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2823 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2824 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2825 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2826 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2827 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2828 	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2829 	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2830 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2831 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2832 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2833 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2834 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2835 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2836 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2837 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2838 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2839 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2840 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2841 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2842 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2843 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2844 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2845 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2846 	[GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
2847 	[GCC_RX3_USB2_CLKREF_CLK] = &gcc_rx3_usb2_clkref_clk.clkr,
2848 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2849 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2850 	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2851 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2852 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2853 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2854 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2855 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2856 	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2857 	[GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
2858 	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2859 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2860 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2861 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2862 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2863 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2864 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2865 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2866 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2867 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2868 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2869 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
2870 	[GCC_USB20_SEC_MASTER_CLK] = &gcc_usb20_sec_master_clk.clkr,
2871 	[GCC_USB20_SEC_MASTER_CLK_SRC] = &gcc_usb20_sec_master_clk_src.clkr,
2872 	[GCC_USB20_SEC_MOCK_UTMI_CLK] = &gcc_usb20_sec_mock_utmi_clk.clkr,
2873 	[GCC_USB20_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb20_sec_mock_utmi_clk_src.clkr,
2874 	[GCC_USB20_SEC_SLEEP_CLK] = &gcc_usb20_sec_sleep_clk.clkr,
2875 	[GCC_USB2_PRIM_CLKREF_CLK] = &gcc_usb2_prim_clkref_clk.clkr,
2876 	[GCC_USB2_SEC_CLKREF_CLK] = &gcc_usb2_sec_clkref_clk.clkr,
2877 	[GCC_USB2_SEC_PHY_AUX_CLK] = &gcc_usb2_sec_phy_aux_clk.clkr,
2878 	[GCC_USB2_SEC_PHY_AUX_CLK_SRC] = &gcc_usb2_sec_phy_aux_clk_src.clkr,
2879 	[GCC_USB2_SEC_PHY_COM_AUX_CLK] = &gcc_usb2_sec_phy_com_aux_clk.clkr,
2880 	[GCC_USB2_SEC_PHY_PIPE_CLK] = &gcc_usb2_sec_phy_pipe_clk.clkr,
2881 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2882 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2883 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2884 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2885 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2886 	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2887 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2888 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2889 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2890 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2891 	[GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
2892 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
2893 	[GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
2894 	[GPLL0] = &gpll0.clkr,
2895 	[GPLL3] = &gpll3.clkr,
2896 	[GPLL4] = &gpll4.clkr,
2897 	[GPLL6] = &gpll6.clkr,
2898 	[GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
2899 	[GPLL7] = &gpll7.clkr,
2900 	[GPLL8] = &gpll8.clkr,
2901 	[GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
2902 };
2903 
2904 static struct gdsc *gcc_qcs615_gdscs[] = {
2905 	[EMAC_GDSC] = &emac_gdsc,
2906 	[PCIE_0_GDSC] = &pcie_0_gdsc,
2907 	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
2908 	[USB20_SEC_GDSC] = &usb20_sec_gdsc,
2909 	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2910 	[HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_GDSC] = &hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc,
2911 	[HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_GDSC] = &hlos1_vote_aggre_noc_mmu_tbu1_gdsc,
2912 	[HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_GDSC] = &hlos1_vote_aggre_noc_mmu_tbu2_gdsc,
2913 	[HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_GDSC] = &hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc,
2914 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2915 	[HLOS1_VOTE_MMNOC_MMU_TBU_SF_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf_gdsc,
2916 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2917 };
2918 
2919 static const struct qcom_reset_map gcc_qcs615_resets[] = {
2920 	[GCC_EMAC_BCR] = { 0x6000 },
2921 	[GCC_QUSB2PHY_PRIM_BCR] = { 0xd000 },
2922 	[GCC_QUSB2PHY_SEC_BCR] = { 0xd004 },
2923 	[GCC_USB30_PRIM_BCR] = { 0xf000 },
2924 	[GCC_USB2_PHY_SEC_BCR] = { 0x50018 },
2925 	[GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 },
2926 	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c },
2927 	[GCC_PCIE_0_BCR] = { 0x6b000 },
2928 	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
2929 	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
2930 	[GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
2931 	[GCC_UFS_PHY_BCR] = { 0x77000 },
2932 	[GCC_USB20_SEC_BCR] = { 0xa6000 },
2933 	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x50008 },
2934 	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x50000 },
2935 	[GCC_SDCC1_BCR] = { 0x12000 },
2936 	[GCC_SDCC2_BCR] = { 0x14000 },
2937 };
2938 
2939 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2940 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2941 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2942 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2943 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2944 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2945 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2946 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2947 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2948 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2949 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2950 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2951 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2952 };
2953 
2954 static const struct regmap_config gcc_qcs615_regmap_config = {
2955 	.reg_bits = 32,
2956 	.reg_stride = 4,
2957 	.val_bits = 32,
2958 	.max_register = 0xa609c,
2959 	.fast_io = true,
2960 };
2961 
2962 static const struct qcom_cc_desc gcc_qcs615_desc = {
2963 	.config = &gcc_qcs615_regmap_config,
2964 	.clk_hws = gcc_qcs615_hws,
2965 	.num_clk_hws = ARRAY_SIZE(gcc_qcs615_hws),
2966 	.clks = gcc_qcs615_clocks,
2967 	.num_clks = ARRAY_SIZE(gcc_qcs615_clocks),
2968 	.resets = gcc_qcs615_resets,
2969 	.num_resets = ARRAY_SIZE(gcc_qcs615_resets),
2970 	.gdscs = gcc_qcs615_gdscs,
2971 	.num_gdscs = ARRAY_SIZE(gcc_qcs615_gdscs),
2972 };
2973 
2974 static const struct of_device_id gcc_qcs615_match_table[] = {
2975 	{ .compatible = "qcom,qcs615-gcc" },
2976 	{ }
2977 };
2978 MODULE_DEVICE_TABLE(of, gcc_qcs615_match_table);
2979 
gcc_qcs615_probe(struct platform_device * pdev)2980 static int gcc_qcs615_probe(struct platform_device *pdev)
2981 {
2982 	struct regmap *regmap;
2983 	int ret;
2984 
2985 	regmap = qcom_cc_map(pdev, &gcc_qcs615_desc);
2986 	if (IS_ERR(regmap))
2987 		return PTR_ERR(regmap);
2988 	/*
2989 	 * Disable the GPLL0 active input to MM blocks and GPU
2990 	 * via MISC registers.
2991 	 */
2992 	regmap_update_bits(regmap, 0x0b084, BIT(0), BIT(0));
2993 	regmap_update_bits(regmap, 0x9b000, BIT(0), BIT(0));
2994 
2995 	/* Keep some clocks always enabled */
2996 	qcom_branch_set_clk_en(regmap, 0xb008); /* GCC_CAMERA_AHB_CLK */
2997 	qcom_branch_set_clk_en(regmap, 0xb044); /* GCC_CAMERA_XO_CLK */
2998 	qcom_branch_set_clk_en(regmap, 0xb00c); /* GCC_DISP_AHB_CLK */
2999 	qcom_branch_set_clk_en(regmap, 0xb048); /* GCC_DISP_XO_CLK */
3000 	qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
3001 	qcom_branch_set_clk_en(regmap, 0xb004); /* GCC_VIDEO_AHB_CLK */
3002 	qcom_branch_set_clk_en(regmap, 0xb040); /* GCC_VIDEO_XO_CLK */
3003 	qcom_branch_set_clk_en(regmap, 0x480040); /* GCC_CPUSS_GNOC_CLK */
3004 
3005 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3006 				       ARRAY_SIZE(gcc_dfs_clocks));
3007 	if (ret)
3008 		return ret;
3009 
3010 	return qcom_cc_really_probe(&pdev->dev, &gcc_qcs615_desc, regmap);
3011 }
3012 
3013 static struct platform_driver gcc_qcs615_driver = {
3014 	.probe = gcc_qcs615_probe,
3015 	.driver = {
3016 		.name = "gcc-qcs615",
3017 		.of_match_table = gcc_qcs615_match_table,
3018 	},
3019 };
3020 
gcc_qcs615_init(void)3021 static int __init gcc_qcs615_init(void)
3022 {
3023 	return platform_driver_register(&gcc_qcs615_driver);
3024 }
3025 subsys_initcall(gcc_qcs615_init);
3026 
gcc_qcs615_exit(void)3027 static void __exit gcc_qcs615_exit(void)
3028 {
3029 	platform_driver_unregister(&gcc_qcs615_driver);
3030 }
3031 module_exit(gcc_qcs615_exit);
3032 
3033 MODULE_DESCRIPTION("QTI GCC QCS615 Driver");
3034 MODULE_LICENSE("GPL");
3035