xref: /openbmc/linux/drivers/clk/qcom/gcc-ipq6018.c (revision 15d5761a)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/err.h>
8 #include <linux/platform_device.h>
9 #include <linux/module.h>
10 #include <linux/of.h>
11 #include <linux/of_device.h>
12 #include <linux/clk-provider.h>
13 #include <linux/regmap.h>
14 
15 #include <linux/reset-controller.h>
16 #include <dt-bindings/clock/qcom,gcc-ipq6018.h>
17 #include <dt-bindings/reset/qcom,gcc-ipq6018.h>
18 
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-pll.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
24 #include "clk-alpha-pll.h"
25 #include "clk-regmap-divider.h"
26 #include "clk-regmap-mux.h"
27 #include "reset.h"
28 
29 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
30 
31 enum {
32 	P_XO,
33 	P_BIAS_PLL,
34 	P_UNIPHY0_RX,
35 	P_UNIPHY0_TX,
36 	P_UNIPHY1_RX,
37 	P_BIAS_PLL_NSS_NOC,
38 	P_UNIPHY1_TX,
39 	P_PCIE20_PHY0_PIPE,
40 	P_USB3PHY_0_PIPE,
41 	P_GPLL0,
42 	P_GPLL0_DIV2,
43 	P_GPLL2,
44 	P_GPLL4,
45 	P_GPLL6,
46 	P_SLEEP_CLK,
47 	P_UBI32_PLL,
48 	P_NSS_CRYPTO_PLL,
49 	P_PI_SLEEP,
50 };
51 
52 static struct clk_alpha_pll gpll0_main = {
53 	.offset = 0x21000,
54 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
55 	.clkr = {
56 		.enable_reg = 0x0b000,
57 		.enable_mask = BIT(0),
58 		.hw.init = &(struct clk_init_data){
59 			.name = "gpll0_main",
60 			.parent_data = &(const struct clk_parent_data){
61 				.fw_name = "xo",
62 			},
63 			.num_parents = 1,
64 			.ops = &clk_alpha_pll_ops,
65 		},
66 	},
67 };
68 
69 static struct clk_fixed_factor gpll0_out_main_div2 = {
70 	.mult = 1,
71 	.div = 2,
72 	.hw.init = &(struct clk_init_data){
73 		.name = "gpll0_out_main_div2",
74 		.parent_hws = (const struct clk_hw *[]){
75 				&gpll0_main.clkr.hw },
76 		.num_parents = 1,
77 		.ops = &clk_fixed_factor_ops,
78 		.flags = CLK_SET_RATE_PARENT,
79 	},
80 };
81 
82 static struct clk_alpha_pll_postdiv gpll0 = {
83 	.offset = 0x21000,
84 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
85 	.width = 4,
86 	.clkr.hw.init = &(struct clk_init_data){
87 		.name = "gpll0",
88 		.parent_hws = (const struct clk_hw *[]){
89 				&gpll0_main.clkr.hw },
90 		.num_parents = 1,
91 		.ops = &clk_alpha_pll_postdiv_ro_ops,
92 		.flags = CLK_SET_RATE_PARENT,
93 	},
94 };
95 
96 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
97 	{ .fw_name = "xo" },
98 	{ .hw = &gpll0.clkr.hw},
99 	{ .hw = &gpll0_out_main_div2.hw},
100 };
101 
102 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
103 	{ P_XO, 0 },
104 	{ P_GPLL0, 1 },
105 	{ P_GPLL0_DIV2, 4 },
106 };
107 
108 static struct clk_alpha_pll ubi32_pll_main = {
109 	.offset = 0x25000,
110 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
111 	.flags = SUPPORTS_DYNAMIC_UPDATE,
112 	.clkr = {
113 		.enable_reg = 0x0b000,
114 		.enable_mask = BIT(6),
115 		.hw.init = &(struct clk_init_data){
116 			.name = "ubi32_pll_main",
117 			.parent_data = &(const struct clk_parent_data){
118 				.fw_name = "xo",
119 			},
120 			.num_parents = 1,
121 			.ops = &clk_alpha_pll_huayra_ops,
122 		},
123 	},
124 };
125 
126 static struct clk_alpha_pll_postdiv ubi32_pll = {
127 	.offset = 0x25000,
128 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
129 	.width = 2,
130 	.clkr.hw.init = &(struct clk_init_data){
131 		.name = "ubi32_pll",
132 		.parent_hws = (const struct clk_hw *[]){
133 				&ubi32_pll_main.clkr.hw },
134 		.num_parents = 1,
135 		.ops = &clk_alpha_pll_postdiv_ro_ops,
136 		.flags = CLK_SET_RATE_PARENT,
137 	},
138 };
139 
140 static struct clk_alpha_pll gpll6_main = {
141 	.offset = 0x37000,
142 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
143 	.clkr = {
144 		.enable_reg = 0x0b000,
145 		.enable_mask = BIT(7),
146 		.hw.init = &(struct clk_init_data){
147 			.name = "gpll6_main",
148 			.parent_data = &(const struct clk_parent_data){
149 				.fw_name = "xo",
150 			},
151 			.num_parents = 1,
152 			.ops = &clk_alpha_pll_ops,
153 		},
154 	},
155 };
156 
157 static struct clk_alpha_pll_postdiv gpll6 = {
158 	.offset = 0x37000,
159 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
160 	.width = 2,
161 	.clkr.hw.init = &(struct clk_init_data){
162 		.name = "gpll6",
163 		.parent_hws = (const struct clk_hw *[]){
164 				&gpll6_main.clkr.hw },
165 		.num_parents = 1,
166 		.ops = &clk_alpha_pll_postdiv_ro_ops,
167 		.flags = CLK_SET_RATE_PARENT,
168 	},
169 };
170 
171 static struct clk_alpha_pll gpll4_main = {
172 	.offset = 0x24000,
173 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
174 	.clkr = {
175 		.enable_reg = 0x0b000,
176 		.enable_mask = BIT(5),
177 		.hw.init = &(struct clk_init_data){
178 			.name = "gpll4_main",
179 			.parent_data = &(const struct clk_parent_data){
180 				.fw_name = "xo",
181 			},
182 			.num_parents = 1,
183 			.ops = &clk_alpha_pll_ops,
184 		},
185 	},
186 };
187 
188 static struct clk_alpha_pll_postdiv gpll4 = {
189 	.offset = 0x24000,
190 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
191 	.width = 4,
192 	.clkr.hw.init = &(struct clk_init_data){
193 		.name = "gpll4",
194 		.parent_hws = (const struct clk_hw *[]){
195 				&gpll4_main.clkr.hw },
196 		.num_parents = 1,
197 		.ops = &clk_alpha_pll_postdiv_ro_ops,
198 		.flags = CLK_SET_RATE_PARENT,
199 	},
200 };
201 
202 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
203 	F(24000000, P_XO, 1, 0, 0),
204 	F(50000000, P_GPLL0, 16, 0, 0),
205 	F(100000000, P_GPLL0, 8, 0, 0),
206 	{ }
207 };
208 
209 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
210 	.cmd_rcgr = 0x27000,
211 	.freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
212 	.hid_width = 5,
213 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
214 	.clkr.hw.init = &(struct clk_init_data){
215 		.name = "pcnoc_bfdcd_clk_src",
216 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
217 		.num_parents = 3,
218 		.ops = &clk_rcg2_ops,
219 	},
220 };
221 
222 static struct clk_alpha_pll gpll2_main = {
223 	.offset = 0x4a000,
224 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
225 	.clkr = {
226 		.enable_reg = 0x0b000,
227 		.enable_mask = BIT(2),
228 		.hw.init = &(struct clk_init_data){
229 			.name = "gpll2_main",
230 			.parent_data = &(const struct clk_parent_data){
231 				.fw_name = "xo",
232 			},
233 			.num_parents = 1,
234 			.ops = &clk_alpha_pll_ops,
235 		},
236 	},
237 };
238 
239 static struct clk_alpha_pll_postdiv gpll2 = {
240 	.offset = 0x4a000,
241 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
242 	.width = 4,
243 	.clkr.hw.init = &(struct clk_init_data){
244 		.name = "gpll2",
245 		.parent_hws = (const struct clk_hw *[]){
246 				&gpll2_main.clkr.hw },
247 		.num_parents = 1,
248 		.ops = &clk_alpha_pll_postdiv_ro_ops,
249 		.flags = CLK_SET_RATE_PARENT,
250 	},
251 };
252 
253 static struct clk_alpha_pll nss_crypto_pll_main = {
254 	.offset = 0x22000,
255 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
256 	.clkr = {
257 		.enable_reg = 0x0b000,
258 		.enable_mask = BIT(4),
259 		.hw.init = &(struct clk_init_data){
260 			.name = "nss_crypto_pll_main",
261 			.parent_data = &(const struct clk_parent_data){
262 				.fw_name = "xo",
263 			},
264 			.num_parents = 1,
265 			.ops = &clk_alpha_pll_ops,
266 		},
267 	},
268 };
269 
270 static struct clk_alpha_pll_postdiv nss_crypto_pll = {
271 	.offset = 0x22000,
272 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
273 	.width = 4,
274 	.clkr.hw.init = &(struct clk_init_data){
275 		.name = "nss_crypto_pll",
276 		.parent_hws = (const struct clk_hw *[]){
277 				&nss_crypto_pll_main.clkr.hw },
278 		.num_parents = 1,
279 		.ops = &clk_alpha_pll_postdiv_ro_ops,
280 		.flags = CLK_SET_RATE_PARENT,
281 	},
282 };
283 
284 static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
285 	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
286 	F(320000000, P_GPLL0, 2.5, 0, 0),
287 	F(600000000, P_GPLL4, 2, 0, 0),
288 	{ }
289 };
290 
291 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = {
292 	{ .fw_name = "xo" },
293 	{ .hw = &gpll4.clkr.hw },
294 	{ .hw = &gpll0.clkr.hw },
295 	{ .hw = &gpll6.clkr.hw },
296 	{ .hw = &gpll0_out_main_div2.hw },
297 };
298 
299 static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = {
300 	{ P_XO, 0 },
301 	{ P_GPLL4, 1 },
302 	{ P_GPLL0, 2 },
303 	{ P_GPLL6, 3 },
304 	{ P_GPLL0_DIV2, 4 },
305 };
306 
307 static struct clk_rcg2 qdss_tsctr_clk_src = {
308 	.cmd_rcgr = 0x29064,
309 	.freq_tbl = ftbl_qdss_tsctr_clk_src,
310 	.hid_width = 5,
311 	.parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
312 	.clkr.hw.init = &(struct clk_init_data){
313 		.name = "qdss_tsctr_clk_src",
314 		.parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
315 		.num_parents = 5,
316 		.ops = &clk_rcg2_ops,
317 	},
318 };
319 
320 static struct clk_fixed_factor qdss_dap_sync_clk_src = {
321 	.mult = 1,
322 	.div = 4,
323 	.hw.init = &(struct clk_init_data){
324 		.name = "qdss_dap_sync_clk_src",
325 		.parent_hws = (const struct clk_hw *[]){
326 				&qdss_tsctr_clk_src.clkr.hw },
327 		.num_parents = 1,
328 		.ops = &clk_fixed_factor_ops,
329 	},
330 };
331 
332 static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
333 	F(66670000, P_GPLL0_DIV2, 6, 0, 0),
334 	F(240000000, P_GPLL4, 5, 0, 0),
335 	{ }
336 };
337 
338 static struct clk_rcg2 qdss_at_clk_src = {
339 	.cmd_rcgr = 0x2900c,
340 	.freq_tbl = ftbl_qdss_at_clk_src,
341 	.hid_width = 5,
342 	.parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
343 	.clkr.hw.init = &(struct clk_init_data){
344 		.name = "qdss_at_clk_src",
345 		.parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
346 		.num_parents = 5,
347 		.ops = &clk_rcg2_ops,
348 	},
349 };
350 
351 static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
352 	.mult = 1,
353 	.div = 2,
354 	.hw.init = &(struct clk_init_data){
355 		.name = "qdss_tsctr_div2_clk_src",
356 		.parent_hws = (const struct clk_hw *[]){
357 				&qdss_tsctr_clk_src.clkr.hw },
358 		.num_parents = 1,
359 		.flags = CLK_SET_RATE_PARENT,
360 		.ops = &clk_fixed_factor_ops,
361 	},
362 };
363 
364 static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
365 	F(24000000, P_XO, 1, 0, 0),
366 	F(300000000, P_BIAS_PLL, 1, 0, 0),
367 	{ }
368 };
369 
370 static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
371 	{ .fw_name = "xo" },
372 	{ .fw_name = "bias_pll_cc_clk" },
373 	{ .hw = &gpll0.clkr.hw },
374 	{ .hw = &gpll4.clkr.hw },
375 	{ .hw = &nss_crypto_pll.clkr.hw },
376 	{ .hw = &ubi32_pll.clkr.hw },
377 };
378 
379 static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
380 	{ P_XO, 0 },
381 	{ P_BIAS_PLL, 1 },
382 	{ P_GPLL0, 2 },
383 	{ P_GPLL4, 3 },
384 	{ P_NSS_CRYPTO_PLL, 4 },
385 	{ P_UBI32_PLL, 5 },
386 };
387 
388 static struct clk_rcg2 nss_ppe_clk_src = {
389 	.cmd_rcgr = 0x68080,
390 	.freq_tbl = ftbl_nss_ppe_clk_src,
391 	.hid_width = 5,
392 	.parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
393 	.clkr.hw.init = &(struct clk_init_data){
394 		.name = "nss_ppe_clk_src",
395 		.parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
396 		.num_parents = 6,
397 		.ops = &clk_rcg2_ops,
398 	},
399 };
400 
401 static struct clk_branch gcc_xo_clk_src = {
402 	.halt_reg = 0x30018,
403 	.clkr = {
404 		.enable_reg = 0x30018,
405 		.enable_mask = BIT(1),
406 		.hw.init = &(struct clk_init_data){
407 			.name = "gcc_xo_clk_src",
408 			.parent_data = &(const struct clk_parent_data){
409 				.fw_name = "xo",
410 			},
411 			.num_parents = 1,
412 			.flags = CLK_SET_RATE_PARENT,
413 			.ops = &clk_branch2_ops,
414 		},
415 	},
416 };
417 
418 static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
419 	F(24000000, P_XO, 1, 0, 0),
420 	F(200000000, P_GPLL0, 4, 0, 0),
421 	{ }
422 };
423 
424 static const struct clk_parent_data gcc_xo_gpll0[] = {
425 	{ .fw_name = "xo" },
426 	{ .hw = &gpll0.clkr.hw },
427 };
428 
429 static const struct parent_map gcc_xo_gpll0_map[] = {
430 	{ P_XO, 0 },
431 	{ P_GPLL0, 1 },
432 };
433 
434 static struct clk_rcg2 nss_ce_clk_src = {
435 	.cmd_rcgr = 0x68098,
436 	.freq_tbl = ftbl_nss_ce_clk_src,
437 	.hid_width = 5,
438 	.parent_map = gcc_xo_gpll0_map,
439 	.clkr.hw.init = &(struct clk_init_data){
440 		.name = "nss_ce_clk_src",
441 		.parent_data = gcc_xo_gpll0,
442 		.num_parents = 2,
443 		.ops = &clk_rcg2_ops,
444 	},
445 };
446 
447 static struct clk_branch gcc_sleep_clk_src = {
448 	.halt_reg = 0x30000,
449 	.clkr = {
450 		.enable_reg = 0x30000,
451 		.enable_mask = BIT(1),
452 		.hw.init = &(struct clk_init_data){
453 			.name = "gcc_sleep_clk_src",
454 			.parent_data = &(const struct clk_parent_data){
455 				.fw_name = "sleep_clk",
456 			},
457 			.num_parents = 1,
458 			.ops = &clk_branch2_ops,
459 		},
460 	},
461 };
462 
463 static const struct freq_tbl ftbl_snoc_nssnoc_bfdcd_clk_src[] = {
464 	F(24000000, P_XO, 1, 0, 0),
465 	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
466 	F(100000000, P_GPLL0, 8, 0, 0),
467 	F(133333333, P_GPLL0, 6, 0, 0),
468 	F(160000000, P_GPLL0, 5, 0, 0),
469 	F(200000000, P_GPLL0, 4, 0, 0),
470 	F(266666667, P_GPLL0, 3, 0, 0),
471 	{ }
472 };
473 
474 static const struct clk_parent_data
475 			gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
476 	{ .fw_name = "xo" },
477 	{ .hw = &gpll0.clkr.hw },
478 	{ .hw = &gpll6.clkr.hw },
479 	{ .hw = &gpll0_out_main_div2.hw },
480 };
481 
482 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
483 	{ P_XO, 0 },
484 	{ P_GPLL0, 1 },
485 	{ P_GPLL6, 2 },
486 	{ P_GPLL0_DIV2, 3 },
487 };
488 
489 static struct clk_rcg2 snoc_nssnoc_bfdcd_clk_src = {
490 	.cmd_rcgr = 0x76054,
491 	.freq_tbl = ftbl_snoc_nssnoc_bfdcd_clk_src,
492 	.hid_width = 5,
493 	.parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
494 	.clkr.hw.init = &(struct clk_init_data){
495 		.name = "snoc_nssnoc_bfdcd_clk_src",
496 		.parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
497 		.num_parents = 4,
498 		.ops = &clk_rcg2_ops,
499 	},
500 };
501 
502 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
503 	F(24000000, P_XO, 1, 0, 0),
504 	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
505 	F(50000000, P_GPLL0, 16, 0, 0),
506 	F(100000000, P_GPLL0, 8, 0, 0),
507 	{ }
508 };
509 
510 static struct clk_rcg2 apss_ahb_clk_src = {
511 	.cmd_rcgr = 0x46000,
512 	.freq_tbl = ftbl_apss_ahb_clk_src,
513 	.hid_width = 5,
514 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
515 	.clkr.hw.init = &(struct clk_init_data){
516 		.name = "apss_ahb_clk_src",
517 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
518 		.num_parents = 3,
519 		.ops = &clk_rcg2_ops,
520 	},
521 };
522 
523 static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
524 	F(24000000, P_XO, 1, 0, 0),
525 	F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
526 	F(25000000, P_UNIPHY0_RX, 5, 0, 0),
527 	F(78125000, P_UNIPHY1_RX, 4, 0, 0),
528 	F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
529 	F(125000000, P_UNIPHY0_RX, 1, 0, 0),
530 	F(156250000, P_UNIPHY1_RX, 2, 0, 0),
531 	F(312500000, P_UNIPHY1_RX, 1, 0, 0),
532 	{ }
533 };
534 
535 static const struct clk_parent_data
536 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
537 	{ .fw_name = "xo" },
538 	{ .fw_name = "uniphy0_gcc_rx_clk" },
539 	{ .fw_name = "uniphy0_gcc_tx_clk" },
540 	{ .fw_name = "uniphy1_gcc_rx_clk" },
541 	{ .fw_name = "uniphy1_gcc_tx_clk" },
542 	{ .hw = &ubi32_pll.clkr.hw },
543 	{ .fw_name = "bias_pll_cc_clk" },
544 };
545 
546 static const struct parent_map
547 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
548 	{ P_XO, 0 },
549 	{ P_UNIPHY0_RX, 1 },
550 	{ P_UNIPHY0_TX, 2 },
551 	{ P_UNIPHY1_RX, 3 },
552 	{ P_UNIPHY1_TX, 4 },
553 	{ P_UBI32_PLL, 5 },
554 	{ P_BIAS_PLL, 6 },
555 };
556 
557 static struct clk_rcg2 nss_port5_rx_clk_src = {
558 	.cmd_rcgr = 0x68060,
559 	.freq_tbl = ftbl_nss_port5_rx_clk_src,
560 	.hid_width = 5,
561 	.parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
562 	.clkr.hw.init = &(struct clk_init_data){
563 		.name = "nss_port5_rx_clk_src",
564 		.parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
565 		.num_parents = 7,
566 		.ops = &clk_rcg2_ops,
567 	},
568 };
569 
570 static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
571 	F(24000000, P_XO, 1, 0, 0),
572 	F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
573 	F(25000000, P_UNIPHY0_TX, 5, 0, 0),
574 	F(78125000, P_UNIPHY1_TX, 4, 0, 0),
575 	F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
576 	F(125000000, P_UNIPHY0_TX, 1, 0, 0),
577 	F(156250000, P_UNIPHY1_TX, 2, 0, 0),
578 	F(312500000, P_UNIPHY1_TX, 1, 0, 0),
579 	{ }
580 };
581 
582 static const struct clk_parent_data
583 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
584 	{ .fw_name = "xo" },
585 	{ .fw_name = "uniphy0_gcc_tx_clk" },
586 	{ .fw_name = "uniphy0_gcc_rx_clk" },
587 	{ .fw_name = "uniphy1_gcc_tx_clk" },
588 	{ .fw_name = "uniphy1_gcc_rx_clk" },
589 	{ .hw = &ubi32_pll.clkr.hw },
590 	{ .fw_name = "bias_pll_cc_clk" },
591 };
592 
593 static const struct parent_map
594 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
595 	{ P_XO, 0 },
596 	{ P_UNIPHY0_TX, 1 },
597 	{ P_UNIPHY0_RX, 2 },
598 	{ P_UNIPHY1_TX, 3 },
599 	{ P_UNIPHY1_RX, 4 },
600 	{ P_UBI32_PLL, 5 },
601 	{ P_BIAS_PLL, 6 },
602 };
603 
604 static struct clk_rcg2 nss_port5_tx_clk_src = {
605 	.cmd_rcgr = 0x68068,
606 	.freq_tbl = ftbl_nss_port5_tx_clk_src,
607 	.hid_width = 5,
608 	.parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
609 	.clkr.hw.init = &(struct clk_init_data){
610 		.name = "nss_port5_tx_clk_src",
611 		.parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
612 		.num_parents = 7,
613 		.ops = &clk_rcg2_ops,
614 	},
615 };
616 
617 static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
618 	F(24000000, P_XO, 1, 0, 0),
619 	F(200000000, P_GPLL0, 4, 0, 0),
620 	F(240000000, P_GPLL4, 5, 0, 0),
621 	{ }
622 };
623 
624 static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
625 	F(24000000, P_XO, 1, 0, 0),
626 	F(100000000, P_GPLL0, 8, 0, 0),
627 	{ }
628 };
629 
630 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
631 	{ .fw_name = "xo" },
632 	{ .hw = &gpll0.clkr.hw },
633 	{ .hw = &gpll4.clkr.hw },
634 };
635 
636 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
637 	{ P_XO, 0 },
638 	{ P_GPLL0, 1 },
639 	{ P_GPLL4, 2 },
640 };
641 
642 static struct clk_rcg2 pcie0_axi_clk_src = {
643 	.cmd_rcgr = 0x75054,
644 	.freq_tbl = ftbl_pcie_axi_clk_src,
645 	.hid_width = 5,
646 	.parent_map = gcc_xo_gpll0_gpll4_map,
647 	.clkr.hw.init = &(struct clk_init_data){
648 		.name = "pcie0_axi_clk_src",
649 		.parent_data = gcc_xo_gpll0_gpll4,
650 		.num_parents = 3,
651 		.ops = &clk_rcg2_ops,
652 	},
653 };
654 
655 static const struct freq_tbl ftbl_usb0_master_clk_src[] = {
656 	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
657 	F(100000000, P_GPLL0, 8, 0, 0),
658 	F(133330000, P_GPLL0, 6, 0, 0),
659 	F(200000000, P_GPLL0, 4, 0, 0),
660 	{ }
661 };
662 
663 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
664 	{ .fw_name = "xo" },
665 	{ .hw = &gpll0_out_main_div2.hw },
666 	{ .hw = &gpll0.clkr.hw },
667 };
668 
669 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
670 	{ P_XO, 0 },
671 	{ P_GPLL0_DIV2, 2 },
672 	{ P_GPLL0, 1 },
673 };
674 
675 static struct clk_rcg2 usb0_master_clk_src = {
676 	.cmd_rcgr = 0x3e00c,
677 	.freq_tbl = ftbl_usb0_master_clk_src,
678 	.mnd_width = 8,
679 	.hid_width = 5,
680 	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
681 	.clkr.hw.init = &(struct clk_init_data){
682 		.name = "usb0_master_clk_src",
683 		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
684 		.num_parents = 3,
685 		.ops = &clk_rcg2_ops,
686 	},
687 };
688 
689 static struct clk_regmap_div apss_ahb_postdiv_clk_src = {
690 	.reg = 0x46018,
691 	.shift = 4,
692 	.width = 4,
693 	.clkr = {
694 		.hw.init = &(struct clk_init_data){
695 			.name = "apss_ahb_postdiv_clk_src",
696 			.parent_hws = (const struct clk_hw *[]){
697 					&apss_ahb_clk_src.clkr.hw },
698 			.num_parents = 1,
699 			.ops = &clk_regmap_div_ops,
700 		},
701 	},
702 };
703 
704 static struct clk_fixed_factor gcc_xo_div4_clk_src = {
705 	.mult = 1,
706 	.div = 4,
707 	.hw.init = &(struct clk_init_data){
708 		.name = "gcc_xo_div4_clk_src",
709 		.parent_hws = (const struct clk_hw *[]){
710 				&gcc_xo_clk_src.clkr.hw },
711 		.num_parents = 1,
712 		.ops = &clk_fixed_factor_ops,
713 		.flags = CLK_SET_RATE_PARENT,
714 	},
715 };
716 
717 static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
718 	F(24000000, P_XO, 1, 0, 0),
719 	F(25000000, P_UNIPHY0_RX, 5, 0, 0),
720 	F(125000000, P_UNIPHY0_RX, 1, 0, 0),
721 	{ }
722 };
723 
724 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
725 	{ .fw_name = "xo" },
726 	{ .fw_name = "uniphy0_gcc_rx_clk" },
727 	{ .fw_name = "uniphy0_gcc_tx_clk" },
728 	{ .hw = &ubi32_pll.clkr.hw },
729 	{ .fw_name = "bias_pll_cc_clk" },
730 };
731 
732 static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
733 	{ P_XO, 0 },
734 	{ P_UNIPHY0_RX, 1 },
735 	{ P_UNIPHY0_TX, 2 },
736 	{ P_UBI32_PLL, 5 },
737 	{ P_BIAS_PLL, 6 },
738 };
739 
740 static struct clk_rcg2 nss_port1_rx_clk_src = {
741 	.cmd_rcgr = 0x68020,
742 	.freq_tbl = ftbl_nss_port1_rx_clk_src,
743 	.hid_width = 5,
744 	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
745 	.clkr.hw.init = &(struct clk_init_data){
746 		.name = "nss_port1_rx_clk_src",
747 		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
748 		.num_parents = 5,
749 		.ops = &clk_rcg2_ops,
750 	},
751 };
752 
753 static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
754 	F(24000000, P_XO, 1, 0, 0),
755 	F(25000000, P_UNIPHY0_TX, 5, 0, 0),
756 	F(125000000, P_UNIPHY0_TX, 1, 0, 0),
757 	{ }
758 };
759 
760 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
761 	{ .fw_name = "xo" },
762 	{ .fw_name = "uniphy0_gcc_tx_clk" },
763 	{ .fw_name = "uniphy0_gcc_rx_clk" },
764 	{ .hw = &ubi32_pll.clkr.hw },
765 	{ .fw_name = "bias_pll_cc_clk" },
766 };
767 
768 static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
769 	{ P_XO, 0 },
770 	{ P_UNIPHY0_TX, 1 },
771 	{ P_UNIPHY0_RX, 2 },
772 	{ P_UBI32_PLL, 5 },
773 	{ P_BIAS_PLL, 6 },
774 };
775 
776 static struct clk_rcg2 nss_port1_tx_clk_src = {
777 	.cmd_rcgr = 0x68028,
778 	.freq_tbl = ftbl_nss_port1_tx_clk_src,
779 	.hid_width = 5,
780 	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
781 	.clkr.hw.init = &(struct clk_init_data){
782 		.name = "nss_port1_tx_clk_src",
783 		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
784 		.num_parents = 5,
785 		.ops = &clk_rcg2_ops,
786 	},
787 };
788 
789 static struct clk_rcg2 nss_port2_rx_clk_src = {
790 	.cmd_rcgr = 0x68030,
791 	.freq_tbl = ftbl_nss_port1_rx_clk_src,
792 	.hid_width = 5,
793 	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
794 	.clkr.hw.init = &(struct clk_init_data){
795 		.name = "nss_port2_rx_clk_src",
796 		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
797 		.num_parents = 5,
798 		.ops = &clk_rcg2_ops,
799 	},
800 };
801 
802 static struct clk_rcg2 nss_port2_tx_clk_src = {
803 	.cmd_rcgr = 0x68038,
804 	.freq_tbl = ftbl_nss_port1_tx_clk_src,
805 	.hid_width = 5,
806 	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
807 	.clkr.hw.init = &(struct clk_init_data){
808 		.name = "nss_port2_tx_clk_src",
809 		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
810 		.num_parents = 5,
811 		.ops = &clk_rcg2_ops,
812 	},
813 };
814 
815 static struct clk_rcg2 nss_port3_rx_clk_src = {
816 	.cmd_rcgr = 0x68040,
817 	.freq_tbl = ftbl_nss_port1_rx_clk_src,
818 	.hid_width = 5,
819 	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
820 	.clkr.hw.init = &(struct clk_init_data){
821 		.name = "nss_port3_rx_clk_src",
822 		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
823 		.num_parents = 5,
824 		.ops = &clk_rcg2_ops,
825 	},
826 };
827 
828 static struct clk_rcg2 nss_port3_tx_clk_src = {
829 	.cmd_rcgr = 0x68048,
830 	.freq_tbl = ftbl_nss_port1_tx_clk_src,
831 	.hid_width = 5,
832 	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
833 	.clkr.hw.init = &(struct clk_init_data){
834 		.name = "nss_port3_tx_clk_src",
835 		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
836 		.num_parents = 5,
837 		.ops = &clk_rcg2_ops,
838 	},
839 };
840 
841 static struct clk_rcg2 nss_port4_rx_clk_src = {
842 	.cmd_rcgr = 0x68050,
843 	.freq_tbl = ftbl_nss_port1_rx_clk_src,
844 	.hid_width = 5,
845 	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
846 	.clkr.hw.init = &(struct clk_init_data){
847 		.name = "nss_port4_rx_clk_src",
848 		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
849 		.num_parents = 5,
850 		.ops = &clk_rcg2_ops,
851 	},
852 };
853 
854 static struct clk_rcg2 nss_port4_tx_clk_src = {
855 	.cmd_rcgr = 0x68058,
856 	.freq_tbl = ftbl_nss_port1_tx_clk_src,
857 	.hid_width = 5,
858 	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
859 	.clkr.hw.init = &(struct clk_init_data){
860 		.name = "nss_port4_tx_clk_src",
861 		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
862 		.num_parents = 5,
863 		.ops = &clk_rcg2_ops,
864 	},
865 };
866 
867 static struct clk_regmap_div nss_port5_rx_div_clk_src = {
868 	.reg = 0x68440,
869 	.shift = 0,
870 	.width = 4,
871 	.clkr = {
872 		.hw.init = &(struct clk_init_data){
873 			.name = "nss_port5_rx_div_clk_src",
874 			.parent_hws = (const struct clk_hw *[]){
875 					&nss_port5_rx_clk_src.clkr.hw },
876 			.num_parents = 1,
877 			.ops = &clk_regmap_div_ops,
878 			.flags = CLK_SET_RATE_PARENT,
879 		},
880 	},
881 };
882 
883 static struct clk_regmap_div nss_port5_tx_div_clk_src = {
884 	.reg = 0x68444,
885 	.shift = 0,
886 	.width = 4,
887 	.clkr = {
888 		.hw.init = &(struct clk_init_data){
889 			.name = "nss_port5_tx_div_clk_src",
890 			.parent_hws = (const struct clk_hw *[]){
891 					&nss_port5_tx_clk_src.clkr.hw },
892 			.num_parents = 1,
893 			.ops = &clk_regmap_div_ops,
894 			.flags = CLK_SET_RATE_PARENT,
895 		},
896 	},
897 };
898 
899 static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
900 	F(24000000, P_XO, 1, 0, 0),
901 	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
902 	F(200000000, P_GPLL0, 4, 0, 0),
903 	F(308570000, P_GPLL6, 3.5, 0, 0),
904 	F(400000000, P_GPLL0, 2, 0, 0),
905 	F(533000000, P_GPLL0, 1.5, 0, 0),
906 	{ }
907 };
908 
909 static const struct clk_parent_data gcc_xo_gpll0_gpll6_ubi32_gpll0_div2[] = {
910 	{ .fw_name = "xo" },
911 	{ .hw = &gpll0.clkr.hw },
912 	{ .hw = &gpll6.clkr.hw },
913 	{ .hw = &ubi32_pll.clkr.hw },
914 	{ .hw = &gpll0_out_main_div2.hw },
915 };
916 
917 static const struct parent_map
918 gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map[] = {
919 	{ P_XO, 0 },
920 	{ P_GPLL0, 1 },
921 	{ P_GPLL6, 2 },
922 	{ P_UBI32_PLL, 3 },
923 	{ P_GPLL0_DIV2, 6 },
924 };
925 
926 static struct clk_rcg2 apss_axi_clk_src = {
927 	.cmd_rcgr = 0x38048,
928 	.freq_tbl = ftbl_apss_axi_clk_src,
929 	.hid_width = 5,
930 	.parent_map = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map,
931 	.clkr.hw.init = &(struct clk_init_data){
932 		.name = "apss_axi_clk_src",
933 		.parent_data = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2,
934 		.num_parents = 5,
935 		.ops = &clk_rcg2_ops,
936 	},
937 };
938 
939 static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
940 	F(24000000, P_XO, 1, 0, 0),
941 	F(300000000, P_NSS_CRYPTO_PLL, 2, 0, 0),
942 	{ }
943 };
944 
945 static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
946 	{ .fw_name = "xo" },
947 	{ .hw = &nss_crypto_pll.clkr.hw },
948 	{ .hw = &gpll0.clkr.hw },
949 };
950 
951 static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
952 	{ P_XO, 0 },
953 	{ P_NSS_CRYPTO_PLL, 1 },
954 	{ P_GPLL0, 2 },
955 };
956 
957 static struct clk_rcg2 nss_crypto_clk_src = {
958 	.cmd_rcgr = 0x68144,
959 	.freq_tbl = ftbl_nss_crypto_clk_src,
960 	.mnd_width = 16,
961 	.hid_width = 5,
962 	.parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
963 	.clkr.hw.init = &(struct clk_init_data){
964 		.name = "nss_crypto_clk_src",
965 		.parent_data = gcc_xo_nss_crypto_pll_gpll0,
966 		.num_parents = 3,
967 		.ops = &clk_rcg2_ops,
968 	},
969 };
970 
971 static struct clk_regmap_div nss_port1_rx_div_clk_src = {
972 	.reg = 0x68400,
973 	.shift = 0,
974 	.width = 4,
975 	.clkr = {
976 		.hw.init = &(struct clk_init_data){
977 			.name = "nss_port1_rx_div_clk_src",
978 			.parent_hws = (const struct clk_hw *[]){
979 				&nss_port1_rx_clk_src.clkr.hw },
980 			.num_parents = 1,
981 			.ops = &clk_regmap_div_ops,
982 			.flags = CLK_SET_RATE_PARENT,
983 		},
984 	},
985 };
986 
987 static struct clk_regmap_div nss_port1_tx_div_clk_src = {
988 	.reg = 0x68404,
989 	.shift = 0,
990 	.width = 4,
991 	.clkr = {
992 		.hw.init = &(struct clk_init_data){
993 			.name = "nss_port1_tx_div_clk_src",
994 			.parent_hws = (const struct clk_hw *[]){
995 					&nss_port1_tx_clk_src.clkr.hw },
996 			.num_parents = 1,
997 			.ops = &clk_regmap_div_ops,
998 			.flags = CLK_SET_RATE_PARENT,
999 		},
1000 	},
1001 };
1002 
1003 static struct clk_regmap_div nss_port2_rx_div_clk_src = {
1004 	.reg = 0x68410,
1005 	.shift = 0,
1006 	.width = 4,
1007 	.clkr = {
1008 		.hw.init = &(struct clk_init_data){
1009 			.name = "nss_port2_rx_div_clk_src",
1010 			.parent_hws = (const struct clk_hw *[]){
1011 					&nss_port2_rx_clk_src.clkr.hw },
1012 			.num_parents = 1,
1013 			.ops = &clk_regmap_div_ops,
1014 			.flags = CLK_SET_RATE_PARENT,
1015 		},
1016 	},
1017 };
1018 
1019 static struct clk_regmap_div nss_port2_tx_div_clk_src = {
1020 	.reg = 0x68414,
1021 	.shift = 0,
1022 	.width = 4,
1023 	.clkr = {
1024 		.hw.init = &(struct clk_init_data){
1025 			.name = "nss_port2_tx_div_clk_src",
1026 			.parent_hws = (const struct clk_hw *[]){
1027 					&nss_port2_tx_clk_src.clkr.hw },
1028 			.num_parents = 1,
1029 			.ops = &clk_regmap_div_ops,
1030 			.flags = CLK_SET_RATE_PARENT,
1031 		},
1032 	},
1033 };
1034 
1035 static struct clk_regmap_div nss_port3_rx_div_clk_src = {
1036 	.reg = 0x68420,
1037 	.shift = 0,
1038 	.width = 4,
1039 	.clkr = {
1040 		.hw.init = &(struct clk_init_data){
1041 			.name = "nss_port3_rx_div_clk_src",
1042 			.parent_hws = (const struct clk_hw *[]){
1043 					&nss_port3_rx_clk_src.clkr.hw },
1044 			.num_parents = 1,
1045 			.ops = &clk_regmap_div_ops,
1046 			.flags = CLK_SET_RATE_PARENT,
1047 		},
1048 	},
1049 };
1050 
1051 static struct clk_regmap_div nss_port3_tx_div_clk_src = {
1052 	.reg = 0x68424,
1053 	.shift = 0,
1054 	.width = 4,
1055 	.clkr = {
1056 		.hw.init = &(struct clk_init_data){
1057 			.name = "nss_port3_tx_div_clk_src",
1058 			.parent_hws = (const struct clk_hw *[]){
1059 					&nss_port3_tx_clk_src.clkr.hw },
1060 			.num_parents = 1,
1061 			.ops = &clk_regmap_div_ops,
1062 			.flags = CLK_SET_RATE_PARENT,
1063 		},
1064 	},
1065 };
1066 
1067 static struct clk_regmap_div nss_port4_rx_div_clk_src = {
1068 	.reg = 0x68430,
1069 	.shift = 0,
1070 	.width = 4,
1071 	.clkr = {
1072 		.hw.init = &(struct clk_init_data){
1073 			.name = "nss_port4_rx_div_clk_src",
1074 			.parent_hws = (const struct clk_hw *[]){
1075 					&nss_port4_rx_clk_src.clkr.hw },
1076 			.num_parents = 1,
1077 			.ops = &clk_regmap_div_ops,
1078 			.flags = CLK_SET_RATE_PARENT,
1079 		},
1080 	},
1081 };
1082 
1083 static struct clk_regmap_div nss_port4_tx_div_clk_src = {
1084 	.reg = 0x68434,
1085 	.shift = 0,
1086 	.width = 4,
1087 	.clkr = {
1088 		.hw.init = &(struct clk_init_data){
1089 			.name = "nss_port4_tx_div_clk_src",
1090 			.parent_hws = (const struct clk_hw *[]){
1091 					&nss_port4_tx_clk_src.clkr.hw },
1092 			.num_parents = 1,
1093 			.ops = &clk_regmap_div_ops,
1094 			.flags = CLK_SET_RATE_PARENT,
1095 		},
1096 	},
1097 };
1098 
1099 static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1100 	F(24000000, P_XO, 1, 0, 0),
1101 	F(149760000, P_UBI32_PLL, 10, 0, 0),
1102 	F(187200000, P_UBI32_PLL, 8, 0, 0),
1103 	F(249600000, P_UBI32_PLL, 6, 0, 0),
1104 	F(374400000, P_UBI32_PLL, 4, 0, 0),
1105 	F(748800000, P_UBI32_PLL, 2, 0, 0),
1106 	F(1497600000, P_UBI32_PLL, 1, 0, 0),
1107 	{ }
1108 };
1109 
1110 static const struct clk_parent_data
1111 			gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
1112 	{ .fw_name = "xo" },
1113 	{ .hw = &ubi32_pll.clkr.hw },
1114 	{ .hw = &gpll0.clkr.hw },
1115 	{ .hw = &gpll2.clkr.hw },
1116 	{ .hw = &gpll4.clkr.hw },
1117 	{ .hw = &gpll6.clkr.hw },
1118 };
1119 
1120 static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
1121 	{ P_XO, 0 },
1122 	{ P_UBI32_PLL, 1 },
1123 	{ P_GPLL0, 2 },
1124 	{ P_GPLL2, 3 },
1125 	{ P_GPLL4, 4 },
1126 	{ P_GPLL6, 5 },
1127 };
1128 
1129 static struct clk_rcg2 nss_ubi0_clk_src = {
1130 	.cmd_rcgr = 0x68104,
1131 	.freq_tbl = ftbl_nss_ubi_clk_src,
1132 	.hid_width = 5,
1133 	.parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1134 	.clkr.hw.init = &(struct clk_init_data){
1135 		.name = "nss_ubi0_clk_src",
1136 		.parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1137 		.num_parents = 6,
1138 		.ops = &clk_rcg2_ops,
1139 		.flags = CLK_SET_RATE_PARENT,
1140 	},
1141 };
1142 
1143 static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
1144 	F(24000000, P_XO, 1, 0, 0),
1145 	F(100000000, P_GPLL0, 8, 0, 0),
1146 	{ }
1147 };
1148 
1149 static struct clk_rcg2 adss_pwm_clk_src = {
1150 	.cmd_rcgr = 0x1c008,
1151 	.freq_tbl = ftbl_adss_pwm_clk_src,
1152 	.hid_width = 5,
1153 	.parent_map = gcc_xo_gpll0_map,
1154 	.clkr.hw.init = &(struct clk_init_data){
1155 		.name = "adss_pwm_clk_src",
1156 		.parent_data = gcc_xo_gpll0,
1157 		.num_parents = 2,
1158 		.ops = &clk_rcg2_ops,
1159 	},
1160 };
1161 
1162 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
1163 	F(24000000, P_XO, 1, 0, 0),
1164 	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1165 	F(50000000, P_GPLL0, 16, 0, 0),
1166 	{ }
1167 };
1168 
1169 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
1170 	.cmd_rcgr = 0x0200c,
1171 	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1172 	.hid_width = 5,
1173 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1174 	.clkr.hw.init = &(struct clk_init_data){
1175 		.name = "blsp1_qup1_i2c_apps_clk_src",
1176 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1177 		.num_parents = 3,
1178 		.ops = &clk_rcg2_ops,
1179 	},
1180 };
1181 
1182 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
1183 	F(960000, P_XO, 10, 2, 5),
1184 	F(4800000, P_XO, 5, 0, 0),
1185 	F(9600000, P_XO, 2, 4, 5),
1186 	F(12500000, P_GPLL0_DIV2, 16, 1, 2),
1187 	F(16000000, P_GPLL0, 10, 1, 5),
1188 	F(24000000, P_XO, 1, 0, 0),
1189 	F(25000000, P_GPLL0, 16, 1, 2),
1190 	F(50000000, P_GPLL0, 16, 0, 0),
1191 	{ }
1192 };
1193 
1194 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
1195 	.cmd_rcgr = 0x02024,
1196 	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1197 	.mnd_width = 8,
1198 	.hid_width = 5,
1199 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1200 	.clkr.hw.init = &(struct clk_init_data){
1201 		.name = "blsp1_qup1_spi_apps_clk_src",
1202 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1203 		.num_parents = 3,
1204 		.ops = &clk_rcg2_ops,
1205 	},
1206 };
1207 
1208 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
1209 	.cmd_rcgr = 0x03000,
1210 	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1211 	.hid_width = 5,
1212 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1213 	.clkr.hw.init = &(struct clk_init_data){
1214 		.name = "blsp1_qup2_i2c_apps_clk_src",
1215 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1216 		.num_parents = 3,
1217 		.ops = &clk_rcg2_ops,
1218 	},
1219 };
1220 
1221 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
1222 	.cmd_rcgr = 0x03014,
1223 	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1224 	.mnd_width = 8,
1225 	.hid_width = 5,
1226 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1227 	.clkr.hw.init = &(struct clk_init_data){
1228 		.name = "blsp1_qup2_spi_apps_clk_src",
1229 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1230 		.num_parents = 3,
1231 		.ops = &clk_rcg2_ops,
1232 	},
1233 };
1234 
1235 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
1236 	.cmd_rcgr = 0x04000,
1237 	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1238 	.hid_width = 5,
1239 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1240 	.clkr.hw.init = &(struct clk_init_data){
1241 		.name = "blsp1_qup3_i2c_apps_clk_src",
1242 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1243 		.num_parents = 3,
1244 		.ops = &clk_rcg2_ops,
1245 	},
1246 };
1247 
1248 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
1249 	.cmd_rcgr = 0x04014,
1250 	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1251 	.mnd_width = 8,
1252 	.hid_width = 5,
1253 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1254 	.clkr.hw.init = &(struct clk_init_data){
1255 		.name = "blsp1_qup3_spi_apps_clk_src",
1256 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1257 		.num_parents = 3,
1258 		.ops = &clk_rcg2_ops,
1259 	},
1260 };
1261 
1262 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
1263 	.cmd_rcgr = 0x05000,
1264 	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1265 	.hid_width = 5,
1266 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1267 	.clkr.hw.init = &(struct clk_init_data){
1268 		.name = "blsp1_qup4_i2c_apps_clk_src",
1269 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1270 		.num_parents = 3,
1271 		.ops = &clk_rcg2_ops,
1272 	},
1273 };
1274 
1275 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
1276 	.cmd_rcgr = 0x05014,
1277 	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1278 	.mnd_width = 8,
1279 	.hid_width = 5,
1280 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1281 	.clkr.hw.init = &(struct clk_init_data){
1282 		.name = "blsp1_qup4_spi_apps_clk_src",
1283 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1284 		.num_parents = 3,
1285 		.ops = &clk_rcg2_ops,
1286 	},
1287 };
1288 
1289 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
1290 	.cmd_rcgr = 0x06000,
1291 	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1292 	.hid_width = 5,
1293 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1294 	.clkr.hw.init = &(struct clk_init_data){
1295 		.name = "blsp1_qup5_i2c_apps_clk_src",
1296 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1297 		.num_parents = 3,
1298 		.ops = &clk_rcg2_ops,
1299 	},
1300 };
1301 
1302 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
1303 	.cmd_rcgr = 0x06014,
1304 	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1305 	.mnd_width = 8,
1306 	.hid_width = 5,
1307 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1308 	.clkr.hw.init = &(struct clk_init_data){
1309 		.name = "blsp1_qup5_spi_apps_clk_src",
1310 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1311 		.num_parents = 3,
1312 		.ops = &clk_rcg2_ops,
1313 	},
1314 };
1315 
1316 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
1317 	.cmd_rcgr = 0x07000,
1318 	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1319 	.hid_width = 5,
1320 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1321 	.clkr.hw.init = &(struct clk_init_data){
1322 		.name = "blsp1_qup6_i2c_apps_clk_src",
1323 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1324 		.num_parents = 3,
1325 		.ops = &clk_rcg2_ops,
1326 	},
1327 };
1328 
1329 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
1330 	.cmd_rcgr = 0x07014,
1331 	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1332 	.mnd_width = 8,
1333 	.hid_width = 5,
1334 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1335 	.clkr.hw.init = &(struct clk_init_data){
1336 		.name = "blsp1_qup6_spi_apps_clk_src",
1337 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1338 		.num_parents = 3,
1339 		.ops = &clk_rcg2_ops,
1340 	},
1341 };
1342 
1343 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
1344 	F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
1345 	F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
1346 	F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
1347 	F(16000000, P_GPLL0_DIV2, 5, 1, 5),
1348 	F(24000000, P_XO, 1, 0, 0),
1349 	F(24000000, P_GPLL0, 1, 3, 100),
1350 	F(25000000, P_GPLL0, 16, 1, 2),
1351 	F(32000000, P_GPLL0, 1, 1, 25),
1352 	F(40000000, P_GPLL0, 1, 1, 20),
1353 	F(46400000, P_GPLL0, 1, 29, 500),
1354 	F(48000000, P_GPLL0, 1, 3, 50),
1355 	F(51200000, P_GPLL0, 1, 8, 125),
1356 	F(56000000, P_GPLL0, 1, 7, 100),
1357 	F(58982400, P_GPLL0, 1, 1152, 15625),
1358 	F(60000000, P_GPLL0, 1, 3, 40),
1359 	F(64000000, P_GPLL0, 12.5, 1, 1),
1360 	{ }
1361 };
1362 
1363 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
1364 	.cmd_rcgr = 0x02044,
1365 	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1366 	.mnd_width = 16,
1367 	.hid_width = 5,
1368 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1369 	.clkr.hw.init = &(struct clk_init_data){
1370 		.name = "blsp1_uart1_apps_clk_src",
1371 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1372 		.num_parents = 3,
1373 		.ops = &clk_rcg2_ops,
1374 	},
1375 };
1376 
1377 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
1378 	.cmd_rcgr = 0x03034,
1379 	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1380 	.mnd_width = 16,
1381 	.hid_width = 5,
1382 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1383 	.clkr.hw.init = &(struct clk_init_data){
1384 		.name = "blsp1_uart2_apps_clk_src",
1385 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1386 		.num_parents = 3,
1387 		.ops = &clk_rcg2_ops,
1388 	},
1389 };
1390 
1391 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
1392 	.cmd_rcgr = 0x04034,
1393 	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1394 	.mnd_width = 16,
1395 	.hid_width = 5,
1396 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1397 	.clkr.hw.init = &(struct clk_init_data){
1398 		.name = "blsp1_uart3_apps_clk_src",
1399 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1400 		.num_parents = 3,
1401 		.ops = &clk_rcg2_ops,
1402 	},
1403 };
1404 
1405 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
1406 	.cmd_rcgr = 0x05034,
1407 	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1408 	.mnd_width = 16,
1409 	.hid_width = 5,
1410 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1411 	.clkr.hw.init = &(struct clk_init_data){
1412 		.name = "blsp1_uart4_apps_clk_src",
1413 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1414 		.num_parents = 3,
1415 		.ops = &clk_rcg2_ops,
1416 	},
1417 };
1418 
1419 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
1420 	.cmd_rcgr = 0x06034,
1421 	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1422 	.mnd_width = 16,
1423 	.hid_width = 5,
1424 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1425 	.clkr.hw.init = &(struct clk_init_data){
1426 		.name = "blsp1_uart5_apps_clk_src",
1427 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1428 		.num_parents = 3,
1429 		.ops = &clk_rcg2_ops,
1430 	},
1431 };
1432 
1433 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
1434 	.cmd_rcgr = 0x07034,
1435 	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1436 	.mnd_width = 16,
1437 	.hid_width = 5,
1438 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1439 	.clkr.hw.init = &(struct clk_init_data){
1440 		.name = "blsp1_uart6_apps_clk_src",
1441 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1442 		.num_parents = 3,
1443 		.ops = &clk_rcg2_ops,
1444 	},
1445 };
1446 
1447 static const struct freq_tbl ftbl_crypto_clk_src[] = {
1448 	F(40000000, P_GPLL0_DIV2, 10, 0, 0),
1449 	F(80000000, P_GPLL0, 10, 0, 0),
1450 	F(100000000, P_GPLL0, 8, 0, 0),
1451 	F(160000000, P_GPLL0, 5, 0, 0),
1452 	{ }
1453 };
1454 
1455 static struct clk_rcg2 crypto_clk_src = {
1456 	.cmd_rcgr = 0x16004,
1457 	.freq_tbl = ftbl_crypto_clk_src,
1458 	.hid_width = 5,
1459 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1460 	.clkr.hw.init = &(struct clk_init_data){
1461 		.name = "crypto_clk_src",
1462 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1463 		.num_parents = 3,
1464 		.ops = &clk_rcg2_ops,
1465 	},
1466 };
1467 
1468 static const struct freq_tbl ftbl_gp_clk_src[] = {
1469 	F(24000000, P_XO, 1, 0, 0),
1470 	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1471 	F(100000000, P_GPLL0, 8, 0, 0),
1472 	F(200000000, P_GPLL0, 4, 0, 0),
1473 	F(266666666, P_GPLL0, 3, 0, 0),
1474 	{ }
1475 };
1476 
1477 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
1478 	{ .fw_name = "xo" },
1479 	{ .hw = &gpll0.clkr.hw },
1480 	{ .hw = &gpll6.clkr.hw },
1481 	{ .hw = &gpll0_out_main_div2.hw },
1482 	{ .fw_name = "sleep_clk" },
1483 };
1484 
1485 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
1486 	{ P_XO, 0 },
1487 	{ P_GPLL0, 1 },
1488 	{ P_GPLL6, 2 },
1489 	{ P_GPLL0_DIV2, 4 },
1490 	{ P_SLEEP_CLK, 6 },
1491 };
1492 
1493 static struct clk_rcg2 gp1_clk_src = {
1494 	.cmd_rcgr = 0x08004,
1495 	.freq_tbl = ftbl_gp_clk_src,
1496 	.mnd_width = 8,
1497 	.hid_width = 5,
1498 	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1499 	.clkr.hw.init = &(struct clk_init_data){
1500 		.name = "gp1_clk_src",
1501 		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1502 		.num_parents = 5,
1503 		.ops = &clk_rcg2_ops,
1504 	},
1505 };
1506 
1507 static struct clk_rcg2 gp2_clk_src = {
1508 	.cmd_rcgr = 0x09004,
1509 	.freq_tbl = ftbl_gp_clk_src,
1510 	.mnd_width = 8,
1511 	.hid_width = 5,
1512 	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1513 	.clkr.hw.init = &(struct clk_init_data){
1514 		.name = "gp2_clk_src",
1515 		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1516 		.num_parents = 5,
1517 		.ops = &clk_rcg2_ops,
1518 	},
1519 };
1520 
1521 static struct clk_rcg2 gp3_clk_src = {
1522 	.cmd_rcgr = 0x0a004,
1523 	.freq_tbl = ftbl_gp_clk_src,
1524 	.mnd_width = 8,
1525 	.hid_width = 5,
1526 	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1527 	.clkr.hw.init = &(struct clk_init_data){
1528 		.name = "gp3_clk_src",
1529 		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1530 		.num_parents = 5,
1531 		.ops = &clk_rcg2_ops,
1532 	},
1533 };
1534 
1535 static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1536 	.mult = 1,
1537 	.div = 4,
1538 	.hw.init = &(struct clk_init_data){
1539 		.name = "nss_ppe_cdiv_clk_src",
1540 		.parent_hws = (const struct clk_hw *[]){
1541 				&nss_ppe_clk_src.clkr.hw },
1542 		.num_parents = 1,
1543 		.ops = &clk_fixed_factor_ops,
1544 		.flags = CLK_SET_RATE_PARENT,
1545 	},
1546 };
1547 
1548 static struct clk_regmap_div nss_ubi0_div_clk_src = {
1549 	.reg = 0x68118,
1550 	.shift = 0,
1551 	.width = 4,
1552 	.clkr = {
1553 		.hw.init = &(struct clk_init_data){
1554 			.name = "nss_ubi0_div_clk_src",
1555 			.parent_hws = (const struct clk_hw *[]){
1556 				&nss_ubi0_clk_src.clkr.hw },
1557 			.num_parents = 1,
1558 			.ops = &clk_regmap_div_ro_ops,
1559 			.flags = CLK_SET_RATE_PARENT,
1560 		},
1561 	},
1562 };
1563 
1564 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1565 	F(24000000, P_XO, 1, 0, 0),
1566 };
1567 
1568 static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
1569 	{ .fw_name = "xo" },
1570 	{ .hw = &gpll0.clkr.hw },
1571 	{ .fw_name = "sleep_clk" },
1572 };
1573 
1574 static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
1575 	{ P_XO, 0 },
1576 	{ P_GPLL0, 2 },
1577 	{ P_PI_SLEEP, 6 },
1578 };
1579 
1580 static struct clk_rcg2 pcie0_aux_clk_src = {
1581 	.cmd_rcgr = 0x75024,
1582 	.freq_tbl = ftbl_pcie_aux_clk_src,
1583 	.mnd_width = 16,
1584 	.hid_width = 5,
1585 	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1586 	.clkr.hw.init = &(struct clk_init_data){
1587 		.name = "pcie0_aux_clk_src",
1588 		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1589 		.num_parents = 3,
1590 		.ops = &clk_rcg2_ops,
1591 	},
1592 };
1593 
1594 static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
1595 	{ .fw_name = "pcie20_phy0_pipe_clk" },
1596 	{ .fw_name = "xo" },
1597 };
1598 
1599 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
1600 	{ P_PCIE20_PHY0_PIPE, 0 },
1601 	{ P_XO, 2 },
1602 };
1603 
1604 static struct clk_regmap_mux pcie0_pipe_clk_src = {
1605 	.reg = 0x7501c,
1606 	.shift = 8,
1607 	.width = 2,
1608 	.parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
1609 	.clkr = {
1610 		.hw.init = &(struct clk_init_data){
1611 			.name = "pcie0_pipe_clk_src",
1612 			.parent_data = gcc_pcie20_phy0_pipe_clk_xo,
1613 			.num_parents = 2,
1614 			.ops = &clk_regmap_mux_closest_ops,
1615 			.flags = CLK_SET_RATE_PARENT,
1616 		},
1617 	},
1618 };
1619 
1620 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
1621 	F(144000, P_XO, 16, 12, 125),
1622 	F(400000, P_XO, 12, 1, 5),
1623 	F(24000000, P_GPLL2, 12, 1, 4),
1624 	F(48000000, P_GPLL2, 12, 1, 2),
1625 	F(96000000, P_GPLL2, 12, 0, 0),
1626 	F(177777778, P_GPLL0, 4.5, 0, 0),
1627 	F(192000000, P_GPLL2, 6, 0, 0),
1628 	F(384000000, P_GPLL2, 3, 0, 0),
1629 	{ }
1630 };
1631 
1632 static const struct clk_parent_data
1633 			gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
1634 	{ .fw_name = "xo" },
1635 	{ .hw = &gpll0.clkr.hw },
1636 	{ .hw = &gpll2.clkr.hw },
1637 	{ .hw = &gpll0_out_main_div2.hw },
1638 };
1639 
1640 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
1641 	{ P_XO, 0 },
1642 	{ P_GPLL0, 1 },
1643 	{ P_GPLL2, 2 },
1644 	{ P_GPLL0_DIV2, 4 },
1645 };
1646 
1647 static struct clk_rcg2 sdcc1_apps_clk_src = {
1648 	.cmd_rcgr = 0x42004,
1649 	.freq_tbl = ftbl_sdcc_apps_clk_src,
1650 	.mnd_width = 8,
1651 	.hid_width = 5,
1652 	.parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1653 	.clkr.hw.init = &(struct clk_init_data){
1654 		.name = "sdcc1_apps_clk_src",
1655 		.parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1656 		.num_parents = 4,
1657 		.ops = &clk_rcg2_ops,
1658 	},
1659 };
1660 
1661 static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
1662 	F(24000000, P_XO, 1, 0, 0),
1663 	{ }
1664 };
1665 
1666 static struct clk_rcg2 usb0_aux_clk_src = {
1667 	.cmd_rcgr = 0x3e05c,
1668 	.freq_tbl = ftbl_usb_aux_clk_src,
1669 	.mnd_width = 16,
1670 	.hid_width = 5,
1671 	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1672 	.clkr.hw.init = &(struct clk_init_data){
1673 		.name = "usb0_aux_clk_src",
1674 		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1675 		.num_parents = 3,
1676 		.ops = &clk_rcg2_ops,
1677 	},
1678 };
1679 
1680 static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
1681 	F(24000000, P_XO, 1, 0, 0),
1682 	F(60000000, P_GPLL6, 6, 1, 3),
1683 	{ }
1684 };
1685 
1686 static const struct clk_parent_data
1687 			gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
1688 	{ .fw_name = "xo" },
1689 	{ .hw = &gpll6.clkr.hw },
1690 	{ .hw = &gpll0.clkr.hw },
1691 	{ .hw = &gpll0_out_main_div2.hw },
1692 };
1693 
1694 static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
1695 	{ P_XO, 0 },
1696 	{ P_GPLL6, 1 },
1697 	{ P_GPLL0, 3 },
1698 	{ P_GPLL0_DIV2, 4 },
1699 };
1700 
1701 static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1702 	.cmd_rcgr = 0x3e020,
1703 	.freq_tbl = ftbl_usb_mock_utmi_clk_src,
1704 	.mnd_width = 8,
1705 	.hid_width = 5,
1706 	.parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1707 	.clkr.hw.init = &(struct clk_init_data){
1708 		.name = "usb0_mock_utmi_clk_src",
1709 		.parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1710 		.num_parents = 4,
1711 		.ops = &clk_rcg2_ops,
1712 	},
1713 };
1714 
1715 static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
1716 	{ .fw_name = "usb3phy_0_cc_pipe_clk" },
1717 	{ .fw_name = "xo" },
1718 };
1719 
1720 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
1721 	{ P_USB3PHY_0_PIPE, 0 },
1722 	{ P_XO, 2 },
1723 };
1724 
1725 static struct clk_regmap_mux usb0_pipe_clk_src = {
1726 	.reg = 0x3e048,
1727 	.shift = 8,
1728 	.width = 2,
1729 	.parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1730 	.clkr = {
1731 		.hw.init = &(struct clk_init_data){
1732 			.name = "usb0_pipe_clk_src",
1733 			.parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
1734 			.num_parents = 2,
1735 			.ops = &clk_regmap_mux_closest_ops,
1736 			.flags = CLK_SET_RATE_PARENT,
1737 		},
1738 	},
1739 };
1740 
1741 static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
1742 	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1743 	F(160000000, P_GPLL0, 5, 0, 0),
1744 	F(216000000, P_GPLL6, 5, 0, 0),
1745 	F(308570000, P_GPLL6, 3.5, 0, 0),
1746 };
1747 
1748 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
1749 	{ .fw_name = "xo"},
1750 	{ .hw = &gpll0.clkr.hw },
1751 	{ .hw = &gpll6.clkr.hw },
1752 	{ .hw = &gpll0_out_main_div2.hw },
1753 };
1754 
1755 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
1756 	{ P_XO, 0 },
1757 	{ P_GPLL0, 1 },
1758 	{ P_GPLL6, 2 },
1759 	{ P_GPLL0_DIV2, 4 },
1760 };
1761 
1762 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1763 	.cmd_rcgr = 0x5d000,
1764 	.freq_tbl = ftbl_sdcc_ice_core_clk_src,
1765 	.mnd_width = 8,
1766 	.hid_width = 5,
1767 	.parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
1768 	.clkr.hw.init = &(struct clk_init_data){
1769 		.name = "sdcc1_ice_core_clk_src",
1770 		.parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
1771 		.num_parents = 4,
1772 		.ops = &clk_rcg2_ops,
1773 	},
1774 };
1775 
1776 static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
1777 	F(24000000, P_XO, 1, 0, 0),
1778 	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1779 	F(100000000, P_GPLL0, 8, 0, 0),
1780 	F(200000000, P_GPLL0, 4, 0, 0),
1781 	{ }
1782 };
1783 
1784 static struct clk_rcg2 qdss_stm_clk_src = {
1785 	.cmd_rcgr = 0x2902C,
1786 	.freq_tbl = ftbl_qdss_stm_clk_src,
1787 	.hid_width = 5,
1788 	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1789 	.clkr.hw.init = &(struct clk_init_data){
1790 		.name = "qdss_stm_clk_src",
1791 		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1792 		.num_parents = 3,
1793 		.ops = &clk_rcg2_ops,
1794 	},
1795 };
1796 
1797 static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
1798 	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1799 	F(160000000, P_GPLL0, 5, 0, 0),
1800 	F(300000000, P_GPLL4, 4, 0, 0),
1801 	{ }
1802 };
1803 
1804 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_div2[] = {
1805 	{ .fw_name = "xo" },
1806 	{ .hw = &gpll4.clkr.hw },
1807 	{ .hw = &gpll0.clkr.hw },
1808 	{ .hw = &gpll0_out_main_div2.hw },
1809 };
1810 
1811 static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_div2_map[] = {
1812 	{ P_XO, 0 },
1813 	{ P_GPLL4, 1 },
1814 	{ P_GPLL0, 2 },
1815 	{ P_GPLL0_DIV2, 4 },
1816 };
1817 
1818 static struct clk_rcg2 qdss_traceclkin_clk_src = {
1819 	.cmd_rcgr = 0x29048,
1820 	.freq_tbl = ftbl_qdss_traceclkin_clk_src,
1821 	.hid_width = 5,
1822 	.parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,
1823 	.clkr.hw.init = &(struct clk_init_data){
1824 		.name = "qdss_traceclkin_clk_src",
1825 		.parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,
1826 		.num_parents = 4,
1827 		.ops = &clk_rcg2_ops,
1828 	},
1829 };
1830 
1831 static struct clk_rcg2 usb1_mock_utmi_clk_src = {
1832 	.cmd_rcgr = 0x3f020,
1833 	.freq_tbl = ftbl_usb_mock_utmi_clk_src,
1834 	.mnd_width = 8,
1835 	.hid_width = 5,
1836 	.parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1837 	.clkr.hw.init = &(struct clk_init_data){
1838 		.name = "usb1_mock_utmi_clk_src",
1839 		.parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1840 		.num_parents = 4,
1841 		.ops = &clk_rcg2_ops,
1842 	},
1843 };
1844 
1845 static struct clk_branch gcc_adss_pwm_clk = {
1846 	.halt_reg = 0x1c020,
1847 	.clkr = {
1848 		.enable_reg = 0x1c020,
1849 		.enable_mask = BIT(0),
1850 		.hw.init = &(struct clk_init_data){
1851 			.name = "gcc_adss_pwm_clk",
1852 			.parent_hws = (const struct clk_hw *[]){
1853 					&adss_pwm_clk_src.clkr.hw },
1854 			.num_parents = 1,
1855 			.flags = CLK_SET_RATE_PARENT,
1856 			.ops = &clk_branch2_ops,
1857 		},
1858 	},
1859 };
1860 
1861 static struct clk_branch gcc_apss_ahb_clk = {
1862 	.halt_reg = 0x4601c,
1863 	.halt_check = BRANCH_HALT_VOTED,
1864 	.clkr = {
1865 		.enable_reg = 0x0b004,
1866 		.enable_mask = BIT(14),
1867 		.hw.init = &(struct clk_init_data){
1868 			.name = "gcc_apss_ahb_clk",
1869 			.parent_hws = (const struct clk_hw *[]){
1870 					&apss_ahb_postdiv_clk_src.clkr.hw },
1871 			.num_parents = 1,
1872 			.flags = CLK_SET_RATE_PARENT,
1873 			.ops = &clk_branch2_ops,
1874 		},
1875 	},
1876 };
1877 
1878 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1879 	F(24000000, P_XO, 1, 0, 0),
1880 	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1881 	F(100000000, P_GPLL0, 8, 0, 0),
1882 	F(133333333, P_GPLL0, 6, 0, 0),
1883 	F(160000000, P_GPLL0, 5, 0, 0),
1884 	F(200000000, P_GPLL0, 4, 0, 0),
1885 	F(266666667, P_GPLL0, 3, 0, 0),
1886 	{ }
1887 };
1888 
1889 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1890 	.cmd_rcgr = 0x26004,
1891 	.freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1892 	.hid_width = 5,
1893 	.parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1894 	.clkr.hw.init = &(struct clk_init_data){
1895 		.name = "system_noc_bfdcd_clk_src",
1896 		.parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1897 		.num_parents = 4,
1898 		.ops = &clk_rcg2_ops,
1899 	},
1900 };
1901 
1902 static const struct freq_tbl ftbl_ubi32_mem_noc_bfdcd_clk_src[] = {
1903 	F(24000000, P_XO, 1, 0, 0),
1904 	F(307670000, P_BIAS_PLL_NSS_NOC, 1.5, 0, 0),
1905 	F(533333333, P_GPLL0, 1.5, 0, 0),
1906 	{ }
1907 };
1908 
1909 static const struct clk_parent_data
1910 			gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk[] = {
1911 	{ .fw_name = "xo" },
1912 	{ .hw = &gpll0.clkr.hw },
1913 	{ .hw = &gpll2.clkr.hw },
1914 	{ .fw_name = "bias_pll_nss_noc_clk" },
1915 };
1916 
1917 static const struct parent_map gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map[] = {
1918 	{ P_XO, 0 },
1919 	{ P_GPLL0, 1 },
1920 	{ P_GPLL2, 3 },
1921 	{ P_BIAS_PLL_NSS_NOC, 4 },
1922 };
1923 
1924 static struct clk_rcg2 ubi32_mem_noc_bfdcd_clk_src = {
1925 	.cmd_rcgr = 0x68088,
1926 	.freq_tbl = ftbl_ubi32_mem_noc_bfdcd_clk_src,
1927 	.hid_width = 5,
1928 	.parent_map = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map,
1929 	.clkr.hw.init = &(struct clk_init_data){
1930 		.name = "ubi32_mem_noc_bfdcd_clk_src",
1931 		.parent_data = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk,
1932 		.num_parents = 4,
1933 		.ops = &clk_rcg2_ops,
1934 	},
1935 };
1936 
1937 static struct clk_branch gcc_apss_axi_clk = {
1938 	.halt_reg = 0x46020,
1939 	.halt_check = BRANCH_HALT_VOTED,
1940 	.clkr = {
1941 		.enable_reg = 0x0b004,
1942 		.enable_mask = BIT(13),
1943 		.hw.init = &(struct clk_init_data){
1944 			.name = "gcc_apss_axi_clk",
1945 			.parent_hws = (const struct clk_hw *[]){
1946 					&apss_axi_clk_src.clkr.hw },
1947 			.num_parents = 1,
1948 			.flags = CLK_SET_RATE_PARENT,
1949 			.ops = &clk_branch2_ops,
1950 		},
1951 	},
1952 };
1953 
1954 static struct clk_branch gcc_blsp1_ahb_clk = {
1955 	.halt_reg = 0x01008,
1956 	.halt_check = BRANCH_HALT_VOTED,
1957 	.clkr = {
1958 		.enable_reg = 0x0b004,
1959 		.enable_mask = BIT(10),
1960 		.hw.init = &(struct clk_init_data){
1961 			.name = "gcc_blsp1_ahb_clk",
1962 			.parent_hws = (const struct clk_hw *[]){
1963 					&pcnoc_bfdcd_clk_src.clkr.hw },
1964 			.num_parents = 1,
1965 			.flags = CLK_SET_RATE_PARENT,
1966 			.ops = &clk_branch2_ops,
1967 		},
1968 	},
1969 };
1970 
1971 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1972 	.halt_reg = 0x02008,
1973 	.clkr = {
1974 		.enable_reg = 0x02008,
1975 		.enable_mask = BIT(0),
1976 		.hw.init = &(struct clk_init_data){
1977 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1978 			.parent_hws = (const struct clk_hw *[]){
1979 					&blsp1_qup1_i2c_apps_clk_src.clkr.hw },
1980 			.num_parents = 1,
1981 			.flags = CLK_SET_RATE_PARENT,
1982 			.ops = &clk_branch2_ops,
1983 		},
1984 	},
1985 };
1986 
1987 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1988 	.halt_reg = 0x02004,
1989 	.clkr = {
1990 		.enable_reg = 0x02004,
1991 		.enable_mask = BIT(0),
1992 		.hw.init = &(struct clk_init_data){
1993 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1994 			.parent_hws = (const struct clk_hw *[]){
1995 					&blsp1_qup1_spi_apps_clk_src.clkr.hw },
1996 			.num_parents = 1,
1997 			.flags = CLK_SET_RATE_PARENT,
1998 			.ops = &clk_branch2_ops,
1999 		},
2000 	},
2001 };
2002 
2003 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
2004 	.halt_reg = 0x03010,
2005 	.clkr = {
2006 		.enable_reg = 0x03010,
2007 		.enable_mask = BIT(0),
2008 		.hw.init = &(struct clk_init_data){
2009 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
2010 			.parent_hws = (const struct clk_hw *[]){
2011 					&blsp1_qup2_i2c_apps_clk_src.clkr.hw },
2012 			.num_parents = 1,
2013 			.flags = CLK_SET_RATE_PARENT,
2014 			.ops = &clk_branch2_ops,
2015 		},
2016 	},
2017 };
2018 
2019 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2020 	.halt_reg = 0x0300c,
2021 	.clkr = {
2022 		.enable_reg = 0x0300c,
2023 		.enable_mask = BIT(0),
2024 		.hw.init = &(struct clk_init_data){
2025 			.name = "gcc_blsp1_qup2_spi_apps_clk",
2026 			.parent_hws = (const struct clk_hw *[]){
2027 					&blsp1_qup2_spi_apps_clk_src.clkr.hw },
2028 			.num_parents = 1,
2029 			.flags = CLK_SET_RATE_PARENT,
2030 			.ops = &clk_branch2_ops,
2031 		},
2032 	},
2033 };
2034 
2035 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2036 	.halt_reg = 0x04010,
2037 	.clkr = {
2038 		.enable_reg = 0x04010,
2039 		.enable_mask = BIT(0),
2040 		.hw.init = &(struct clk_init_data){
2041 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
2042 			.parent_hws = (const struct clk_hw *[]){
2043 					&blsp1_qup3_i2c_apps_clk_src.clkr.hw },
2044 			.num_parents = 1,
2045 			.flags = CLK_SET_RATE_PARENT,
2046 			.ops = &clk_branch2_ops,
2047 		},
2048 	},
2049 };
2050 
2051 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2052 	.halt_reg = 0x0400c,
2053 	.clkr = {
2054 		.enable_reg = 0x0400c,
2055 		.enable_mask = BIT(0),
2056 		.hw.init = &(struct clk_init_data){
2057 			.name = "gcc_blsp1_qup3_spi_apps_clk",
2058 			.parent_hws = (const struct clk_hw *[]){
2059 					&blsp1_qup3_spi_apps_clk_src.clkr.hw },
2060 			.num_parents = 1,
2061 			.flags = CLK_SET_RATE_PARENT,
2062 			.ops = &clk_branch2_ops,
2063 		},
2064 	},
2065 };
2066 
2067 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2068 	.halt_reg = 0x05010,
2069 	.clkr = {
2070 		.enable_reg = 0x05010,
2071 		.enable_mask = BIT(0),
2072 		.hw.init = &(struct clk_init_data){
2073 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
2074 			.parent_hws = (const struct clk_hw *[]){
2075 					&blsp1_qup4_i2c_apps_clk_src.clkr.hw },
2076 			.num_parents = 1,
2077 			.flags = CLK_SET_RATE_PARENT,
2078 			.ops = &clk_branch2_ops,
2079 		},
2080 	},
2081 };
2082 
2083 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2084 	.halt_reg = 0x0500c,
2085 	.clkr = {
2086 		.enable_reg = 0x0500c,
2087 		.enable_mask = BIT(0),
2088 		.hw.init = &(struct clk_init_data){
2089 			.name = "gcc_blsp1_qup4_spi_apps_clk",
2090 			.parent_hws = (const struct clk_hw *[]){
2091 					&blsp1_qup4_spi_apps_clk_src.clkr.hw },
2092 			.num_parents = 1,
2093 			.flags = CLK_SET_RATE_PARENT,
2094 			.ops = &clk_branch2_ops,
2095 		},
2096 	},
2097 };
2098 
2099 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2100 	.halt_reg = 0x06010,
2101 	.clkr = {
2102 		.enable_reg = 0x06010,
2103 		.enable_mask = BIT(0),
2104 		.hw.init = &(struct clk_init_data){
2105 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
2106 			.parent_hws = (const struct clk_hw *[]){
2107 					&blsp1_qup5_i2c_apps_clk_src.clkr.hw },
2108 			.num_parents = 1,
2109 			.flags = CLK_SET_RATE_PARENT,
2110 			.ops = &clk_branch2_ops,
2111 		},
2112 	},
2113 };
2114 
2115 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2116 	.halt_reg = 0x0600c,
2117 	.clkr = {
2118 		.enable_reg = 0x0600c,
2119 		.enable_mask = BIT(0),
2120 		.hw.init = &(struct clk_init_data){
2121 			.name = "gcc_blsp1_qup5_spi_apps_clk",
2122 			.parent_hws = (const struct clk_hw *[]){
2123 					&blsp1_qup5_spi_apps_clk_src.clkr.hw },
2124 			.num_parents = 1,
2125 			.flags = CLK_SET_RATE_PARENT,
2126 			.ops = &clk_branch2_ops,
2127 		},
2128 	},
2129 };
2130 
2131 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2132 	.halt_reg = 0x0700c,
2133 	.clkr = {
2134 		.enable_reg = 0x0700c,
2135 		.enable_mask = BIT(0),
2136 		.hw.init = &(struct clk_init_data){
2137 			.name = "gcc_blsp1_qup6_spi_apps_clk",
2138 			.parent_hws = (const struct clk_hw *[]){
2139 					&blsp1_qup6_spi_apps_clk_src.clkr.hw },
2140 			.num_parents = 1,
2141 			.flags = CLK_SET_RATE_PARENT,
2142 			.ops = &clk_branch2_ops,
2143 		},
2144 	},
2145 };
2146 
2147 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2148 	.halt_reg = 0x0203c,
2149 	.clkr = {
2150 		.enable_reg = 0x0203c,
2151 		.enable_mask = BIT(0),
2152 		.hw.init = &(struct clk_init_data){
2153 			.name = "gcc_blsp1_uart1_apps_clk",
2154 			.parent_hws = (const struct clk_hw *[]){
2155 					&blsp1_uart1_apps_clk_src.clkr.hw },
2156 			.num_parents = 1,
2157 			.flags = CLK_SET_RATE_PARENT,
2158 			.ops = &clk_branch2_ops,
2159 		},
2160 	},
2161 };
2162 
2163 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2164 	.halt_reg = 0x0302c,
2165 	.clkr = {
2166 		.enable_reg = 0x0302c,
2167 		.enable_mask = BIT(0),
2168 		.hw.init = &(struct clk_init_data){
2169 			.name = "gcc_blsp1_uart2_apps_clk",
2170 			.parent_hws = (const struct clk_hw *[]){
2171 					&blsp1_uart2_apps_clk_src.clkr.hw },
2172 			.num_parents = 1,
2173 			.flags = CLK_SET_RATE_PARENT,
2174 			.ops = &clk_branch2_ops,
2175 		},
2176 	},
2177 };
2178 
2179 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
2180 	.halt_reg = 0x0402c,
2181 	.clkr = {
2182 		.enable_reg = 0x0402c,
2183 		.enable_mask = BIT(0),
2184 		.hw.init = &(struct clk_init_data){
2185 			.name = "gcc_blsp1_uart3_apps_clk",
2186 			.parent_hws = (const struct clk_hw *[]){
2187 					&blsp1_uart3_apps_clk_src.clkr.hw },
2188 			.num_parents = 1,
2189 			.flags = CLK_SET_RATE_PARENT,
2190 			.ops = &clk_branch2_ops,
2191 		},
2192 	},
2193 };
2194 
2195 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
2196 	.halt_reg = 0x0502c,
2197 	.clkr = {
2198 		.enable_reg = 0x0502c,
2199 		.enable_mask = BIT(0),
2200 		.hw.init = &(struct clk_init_data){
2201 			.name = "gcc_blsp1_uart4_apps_clk",
2202 			.parent_hws = (const struct clk_hw *[]){
2203 					&blsp1_uart4_apps_clk_src.clkr.hw },
2204 			.num_parents = 1,
2205 			.flags = CLK_SET_RATE_PARENT,
2206 			.ops = &clk_branch2_ops,
2207 		},
2208 	},
2209 };
2210 
2211 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
2212 	.halt_reg = 0x0602c,
2213 	.clkr = {
2214 		.enable_reg = 0x0602c,
2215 		.enable_mask = BIT(0),
2216 		.hw.init = &(struct clk_init_data){
2217 			.name = "gcc_blsp1_uart5_apps_clk",
2218 			.parent_hws = (const struct clk_hw *[]){
2219 					&blsp1_uart5_apps_clk_src.clkr.hw },
2220 			.num_parents = 1,
2221 			.flags = CLK_SET_RATE_PARENT,
2222 			.ops = &clk_branch2_ops,
2223 		},
2224 	},
2225 };
2226 
2227 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
2228 	.halt_reg = 0x0702c,
2229 	.clkr = {
2230 		.enable_reg = 0x0702c,
2231 		.enable_mask = BIT(0),
2232 		.hw.init = &(struct clk_init_data){
2233 			.name = "gcc_blsp1_uart6_apps_clk",
2234 			.parent_hws = (const struct clk_hw *[]){
2235 					&blsp1_uart6_apps_clk_src.clkr.hw },
2236 			.num_parents = 1,
2237 			.flags = CLK_SET_RATE_PARENT,
2238 			.ops = &clk_branch2_ops,
2239 		},
2240 	},
2241 };
2242 
2243 static struct clk_branch gcc_crypto_ahb_clk = {
2244 	.halt_reg = 0x16024,
2245 	.halt_check = BRANCH_HALT_VOTED,
2246 	.clkr = {
2247 		.enable_reg = 0x0b004,
2248 		.enable_mask = BIT(0),
2249 		.hw.init = &(struct clk_init_data){
2250 			.name = "gcc_crypto_ahb_clk",
2251 			.parent_hws = (const struct clk_hw *[]){
2252 					&pcnoc_bfdcd_clk_src.clkr.hw },
2253 			.num_parents = 1,
2254 			.flags = CLK_SET_RATE_PARENT,
2255 			.ops = &clk_branch2_ops,
2256 		},
2257 	},
2258 };
2259 
2260 static struct clk_branch gcc_crypto_axi_clk = {
2261 	.halt_reg = 0x16020,
2262 	.halt_check = BRANCH_HALT_VOTED,
2263 	.clkr = {
2264 		.enable_reg = 0x0b004,
2265 		.enable_mask = BIT(1),
2266 		.hw.init = &(struct clk_init_data){
2267 			.name = "gcc_crypto_axi_clk",
2268 			.parent_hws = (const struct clk_hw *[]){
2269 					&pcnoc_bfdcd_clk_src.clkr.hw },
2270 			.num_parents = 1,
2271 			.flags = CLK_SET_RATE_PARENT,
2272 			.ops = &clk_branch2_ops,
2273 		},
2274 	},
2275 };
2276 
2277 static struct clk_branch gcc_crypto_clk = {
2278 	.halt_reg = 0x1601c,
2279 	.halt_check = BRANCH_HALT_VOTED,
2280 	.clkr = {
2281 		.enable_reg = 0x0b004,
2282 		.enable_mask = BIT(2),
2283 		.hw.init = &(struct clk_init_data){
2284 			.name = "gcc_crypto_clk",
2285 			.parent_hws = (const struct clk_hw *[]){
2286 					&crypto_clk_src.clkr.hw },
2287 			.num_parents = 1,
2288 			.flags = CLK_SET_RATE_PARENT,
2289 			.ops = &clk_branch2_ops,
2290 		},
2291 	},
2292 };
2293 
2294 static struct clk_fixed_factor gpll6_out_main_div2 = {
2295 	.mult = 1,
2296 	.div = 2,
2297 	.hw.init = &(struct clk_init_data){
2298 		.name = "gpll6_out_main_div2",
2299 		.parent_hws = (const struct clk_hw *[]){
2300 				&gpll6_main.clkr.hw },
2301 		.num_parents = 1,
2302 		.ops = &clk_fixed_factor_ops,
2303 		.flags = CLK_SET_RATE_PARENT,
2304 	},
2305 };
2306 
2307 static struct clk_branch gcc_xo_clk = {
2308 	.halt_reg = 0x30030,
2309 	.clkr = {
2310 		.enable_reg = 0x30030,
2311 		.enable_mask = BIT(0),
2312 		.hw.init = &(struct clk_init_data){
2313 			.name = "gcc_xo_clk",
2314 			.parent_hws = (const struct clk_hw *[]){
2315 					&gcc_xo_clk_src.clkr.hw },
2316 			.num_parents = 1,
2317 			.flags = CLK_SET_RATE_PARENT,
2318 			.ops = &clk_branch2_ops,
2319 		},
2320 	},
2321 };
2322 
2323 static struct clk_branch gcc_gp1_clk = {
2324 	.halt_reg = 0x08000,
2325 	.clkr = {
2326 		.enable_reg = 0x08000,
2327 		.enable_mask = BIT(0),
2328 		.hw.init = &(struct clk_init_data){
2329 			.name = "gcc_gp1_clk",
2330 			.parent_hws = (const struct clk_hw *[]){
2331 					&gp1_clk_src.clkr.hw },
2332 			.num_parents = 1,
2333 			.flags = CLK_SET_RATE_PARENT,
2334 			.ops = &clk_branch2_ops,
2335 		},
2336 	},
2337 };
2338 
2339 static struct clk_branch gcc_gp2_clk = {
2340 	.halt_reg = 0x09000,
2341 	.clkr = {
2342 		.enable_reg = 0x09000,
2343 		.enable_mask = BIT(0),
2344 		.hw.init = &(struct clk_init_data){
2345 			.name = "gcc_gp2_clk",
2346 			.parent_hws = (const struct clk_hw *[]){
2347 					&gp2_clk_src.clkr.hw },
2348 			.num_parents = 1,
2349 			.flags = CLK_SET_RATE_PARENT,
2350 			.ops = &clk_branch2_ops,
2351 		},
2352 	},
2353 };
2354 
2355 static struct clk_branch gcc_gp3_clk = {
2356 	.halt_reg = 0x0a000,
2357 	.clkr = {
2358 		.enable_reg = 0x0a000,
2359 		.enable_mask = BIT(0),
2360 		.hw.init = &(struct clk_init_data){
2361 			.name = "gcc_gp3_clk",
2362 			.parent_hws = (const struct clk_hw *[]){
2363 					&gp3_clk_src.clkr.hw },
2364 			.num_parents = 1,
2365 			.flags = CLK_SET_RATE_PARENT,
2366 			.ops = &clk_branch2_ops,
2367 		},
2368 	},
2369 };
2370 
2371 static struct clk_branch gcc_mdio_ahb_clk = {
2372 	.halt_reg = 0x58004,
2373 	.clkr = {
2374 		.enable_reg = 0x58004,
2375 		.enable_mask = BIT(0),
2376 		.hw.init = &(struct clk_init_data){
2377 			.name = "gcc_mdio_ahb_clk",
2378 			.parent_hws = (const struct clk_hw *[]){
2379 					&pcnoc_bfdcd_clk_src.clkr.hw },
2380 			.num_parents = 1,
2381 			.flags = CLK_SET_RATE_PARENT,
2382 			.ops = &clk_branch2_ops,
2383 		},
2384 	},
2385 };
2386 
2387 static struct clk_branch gcc_crypto_ppe_clk = {
2388 	.halt_reg = 0x68310,
2389 	.clkr = {
2390 		.enable_reg = 0x68310,
2391 		.enable_mask = BIT(0),
2392 		.hw.init = &(struct clk_init_data){
2393 			.name = "gcc_crypto_ppe_clk",
2394 			.parent_hws = (const struct clk_hw *[]){
2395 					&nss_ppe_clk_src.clkr.hw },
2396 			.num_parents = 1,
2397 			.flags = CLK_SET_RATE_PARENT,
2398 			.ops = &clk_branch2_ops,
2399 		},
2400 	},
2401 };
2402 
2403 static struct clk_branch gcc_nss_ce_apb_clk = {
2404 	.halt_reg = 0x68174,
2405 	.clkr = {
2406 		.enable_reg = 0x68174,
2407 		.enable_mask = BIT(0),
2408 		.hw.init = &(struct clk_init_data){
2409 			.name = "gcc_nss_ce_apb_clk",
2410 			.parent_hws = (const struct clk_hw *[]){
2411 					&nss_ce_clk_src.clkr.hw },
2412 			.num_parents = 1,
2413 			.flags = CLK_SET_RATE_PARENT,
2414 			.ops = &clk_branch2_ops,
2415 		},
2416 	},
2417 };
2418 
2419 static struct clk_branch gcc_nss_ce_axi_clk = {
2420 	.halt_reg = 0x68170,
2421 	.clkr = {
2422 		.enable_reg = 0x68170,
2423 		.enable_mask = BIT(0),
2424 		.hw.init = &(struct clk_init_data){
2425 			.name = "gcc_nss_ce_axi_clk",
2426 			.parent_hws = (const struct clk_hw *[]){
2427 					&nss_ce_clk_src.clkr.hw },
2428 			.num_parents = 1,
2429 			.flags = CLK_SET_RATE_PARENT,
2430 			.ops = &clk_branch2_ops,
2431 		},
2432 	},
2433 };
2434 
2435 static struct clk_branch gcc_nss_cfg_clk = {
2436 	.halt_reg = 0x68160,
2437 	.clkr = {
2438 		.enable_reg = 0x68160,
2439 		.enable_mask = BIT(0),
2440 		.hw.init = &(struct clk_init_data){
2441 			.name = "gcc_nss_cfg_clk",
2442 			.parent_hws = (const struct clk_hw *[]){
2443 					&pcnoc_bfdcd_clk_src.clkr.hw },
2444 			.num_parents = 1,
2445 			.flags = CLK_SET_RATE_PARENT,
2446 			.ops = &clk_branch2_ops,
2447 		},
2448 	},
2449 };
2450 
2451 static struct clk_branch gcc_nss_crypto_clk = {
2452 	.halt_reg = 0x68164,
2453 	.clkr = {
2454 		.enable_reg = 0x68164,
2455 		.enable_mask = BIT(0),
2456 		.hw.init = &(struct clk_init_data){
2457 			.name = "gcc_nss_crypto_clk",
2458 			.parent_hws = (const struct clk_hw *[]){
2459 					&nss_crypto_clk_src.clkr.hw },
2460 			.num_parents = 1,
2461 			.flags = CLK_SET_RATE_PARENT,
2462 			.ops = &clk_branch2_ops,
2463 		},
2464 	},
2465 };
2466 
2467 static struct clk_branch gcc_nss_csr_clk = {
2468 	.halt_reg = 0x68318,
2469 	.clkr = {
2470 		.enable_reg = 0x68318,
2471 		.enable_mask = BIT(0),
2472 		.hw.init = &(struct clk_init_data){
2473 			.name = "gcc_nss_csr_clk",
2474 			.parent_hws = (const struct clk_hw *[]){
2475 					&nss_ce_clk_src.clkr.hw },
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_nss_edma_cfg_clk = {
2484 	.halt_reg = 0x6819C,
2485 	.clkr = {
2486 		.enable_reg = 0x6819C,
2487 		.enable_mask = BIT(0),
2488 		.hw.init = &(struct clk_init_data){
2489 			.name = "gcc_nss_edma_cfg_clk",
2490 			.parent_hws = (const struct clk_hw *[]){
2491 					&nss_ppe_clk_src.clkr.hw },
2492 			.num_parents = 1,
2493 			.flags = CLK_SET_RATE_PARENT,
2494 			.ops = &clk_branch2_ops,
2495 		},
2496 	},
2497 };
2498 
2499 static struct clk_branch gcc_nss_edma_clk = {
2500 	.halt_reg = 0x68198,
2501 	.clkr = {
2502 		.enable_reg = 0x68198,
2503 		.enable_mask = BIT(0),
2504 		.hw.init = &(struct clk_init_data){
2505 			.name = "gcc_nss_edma_clk",
2506 			.parent_hws = (const struct clk_hw *[]){
2507 					&nss_ppe_clk_src.clkr.hw },
2508 			.num_parents = 1,
2509 			.flags = CLK_SET_RATE_PARENT,
2510 			.ops = &clk_branch2_ops,
2511 		},
2512 	},
2513 };
2514 
2515 static struct clk_branch gcc_nss_noc_clk = {
2516 	.halt_reg = 0x68168,
2517 	.clkr = {
2518 		.enable_reg = 0x68168,
2519 		.enable_mask = BIT(0),
2520 		.hw.init = &(struct clk_init_data){
2521 			.name = "gcc_nss_noc_clk",
2522 			.parent_hws = (const struct clk_hw *[]){
2523 					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2524 			.num_parents = 1,
2525 			.flags = CLK_SET_RATE_PARENT,
2526 			.ops = &clk_branch2_ops,
2527 		},
2528 	},
2529 };
2530 
2531 static struct clk_branch gcc_ubi0_utcm_clk = {
2532 	.halt_reg = 0x2606c,
2533 	.clkr = {
2534 		.enable_reg = 0x2606c,
2535 		.enable_mask = BIT(0),
2536 		.hw.init = &(struct clk_init_data){
2537 			.name = "gcc_ubi0_utcm_clk",
2538 			.parent_hws = (const struct clk_hw *[]){
2539 					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2540 			.num_parents = 1,
2541 			.flags = CLK_SET_RATE_PARENT,
2542 			.ops = &clk_branch2_ops,
2543 		},
2544 	},
2545 };
2546 
2547 static struct clk_branch gcc_snoc_nssnoc_clk = {
2548 	.halt_reg = 0x26070,
2549 	.clkr = {
2550 		.enable_reg = 0x26070,
2551 		.enable_mask = BIT(0),
2552 		.hw.init = &(struct clk_init_data){
2553 			.name = "gcc_snoc_nssnoc_clk",
2554 			.parent_hws = (const struct clk_hw *[]){
2555 					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2556 			.num_parents = 1,
2557 			.flags = CLK_SET_RATE_PARENT,
2558 			.ops = &clk_branch2_ops,
2559 		},
2560 	},
2561 };
2562 
2563 static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
2564 	F(24000000, P_XO, 1, 0, 0),
2565 	F(133333333, P_GPLL0, 6, 0, 0),
2566 	{ }
2567 };
2568 
2569 static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
2570 	F(24000000, P_XO, 1, 0, 0),
2571 	F(400000000, P_GPLL0, 2, 0, 0),
2572 	{ }
2573 };
2574 
2575 static struct clk_rcg2 wcss_ahb_clk_src = {
2576 	.cmd_rcgr = 0x59020,
2577 	.freq_tbl = ftbl_wcss_ahb_clk_src,
2578 	.hid_width = 5,
2579 	.parent_map = gcc_xo_gpll0_map,
2580 	.clkr.hw.init = &(struct clk_init_data){
2581 		.name = "wcss_ahb_clk_src",
2582 		.parent_data = gcc_xo_gpll0,
2583 		.num_parents = 2,
2584 		.ops = &clk_rcg2_ops,
2585 	},
2586 };
2587 
2588 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_gpll6[] = {
2589 	{ .fw_name = "xo" },
2590 	{ .hw = &gpll0.clkr.hw },
2591 	{ .hw = &gpll2.clkr.hw },
2592 	{ .hw = &gpll4.clkr.hw },
2593 	{ .hw = &gpll6.clkr.hw },
2594 };
2595 
2596 static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_gpll6_map[] = {
2597 	{ P_XO, 0 },
2598 	{ P_GPLL0, 1 },
2599 	{ P_GPLL2, 2 },
2600 	{ P_GPLL4, 3 },
2601 	{ P_GPLL6, 4 },
2602 };
2603 
2604 static struct clk_rcg2 q6_axi_clk_src = {
2605 	.cmd_rcgr = 0x59120,
2606 	.freq_tbl = ftbl_q6_axi_clk_src,
2607 	.hid_width = 5,
2608 	.parent_map = gcc_xo_gpll0_gpll2_gpll4_gpll6_map,
2609 	.clkr.hw.init = &(struct clk_init_data){
2610 		.name = "q6_axi_clk_src",
2611 		.parent_data = gcc_xo_gpll0_gpll2_gpll4_gpll6,
2612 		.num_parents = 5,
2613 		.ops = &clk_rcg2_ops,
2614 	},
2615 };
2616 
2617 static const struct freq_tbl ftbl_lpass_core_axim_clk_src[] = {
2618 	F(24000000, P_XO, 1, 0, 0),
2619 	F(100000000, P_GPLL0, 8, 0, 0),
2620 	{ }
2621 };
2622 
2623 static struct clk_rcg2 lpass_core_axim_clk_src = {
2624 	.cmd_rcgr = 0x1F020,
2625 	.freq_tbl = ftbl_lpass_core_axim_clk_src,
2626 	.hid_width = 5,
2627 	.parent_map = gcc_xo_gpll0_map,
2628 	.clkr.hw.init = &(struct clk_init_data){
2629 		.name = "lpass_core_axim_clk_src",
2630 		.parent_data = gcc_xo_gpll0,
2631 		.num_parents = 2,
2632 		.ops = &clk_rcg2_ops,
2633 	},
2634 };
2635 
2636 static const struct freq_tbl ftbl_lpass_snoc_cfg_clk_src[] = {
2637 	F(24000000, P_XO, 1, 0, 0),
2638 	F(266666667, P_GPLL0, 3, 0, 0),
2639 	{ }
2640 };
2641 
2642 static struct clk_rcg2 lpass_snoc_cfg_clk_src = {
2643 	.cmd_rcgr = 0x1F040,
2644 	.freq_tbl = ftbl_lpass_snoc_cfg_clk_src,
2645 	.hid_width = 5,
2646 	.parent_map = gcc_xo_gpll0_map,
2647 	.clkr.hw.init = &(struct clk_init_data){
2648 		.name = "lpass_snoc_cfg_clk_src",
2649 		.parent_data = gcc_xo_gpll0,
2650 		.num_parents = 2,
2651 		.ops = &clk_rcg2_ops,
2652 	},
2653 };
2654 
2655 static const struct freq_tbl ftbl_lpass_q6_axim_clk_src[] = {
2656 	F(24000000, P_XO, 1, 0, 0),
2657 	F(400000000, P_GPLL0, 2, 0, 0),
2658 	{ }
2659 };
2660 
2661 static struct clk_rcg2 lpass_q6_axim_clk_src = {
2662 	.cmd_rcgr = 0x1F008,
2663 	.freq_tbl = ftbl_lpass_q6_axim_clk_src,
2664 	.hid_width = 5,
2665 	.parent_map = gcc_xo_gpll0_map,
2666 	.clkr.hw.init = &(struct clk_init_data){
2667 		.name = "lpass_q6_axim_clk_src",
2668 		.parent_data = gcc_xo_gpll0,
2669 		.num_parents = 2,
2670 		.ops = &clk_rcg2_ops,
2671 	},
2672 };
2673 
2674 static struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = {
2675 	F(24000000, P_XO, 1, 0, 0),
2676 	F(50000000, P_GPLL0, 16, 0, 0),
2677 	{ }
2678 };
2679 
2680 static struct clk_rcg2 rbcpr_wcss_clk_src = {
2681 	.cmd_rcgr = 0x3a00c,
2682 	.freq_tbl = ftbl_rbcpr_wcss_clk_src,
2683 	.hid_width = 5,
2684 	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
2685 	.clkr.hw.init = &(struct clk_init_data){
2686 		.name = "rbcpr_wcss_clk_src",
2687 		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
2688 		.num_parents = 3,
2689 		.ops = &clk_rcg2_ops,
2690 	},
2691 };
2692 
2693 static struct clk_branch gcc_lpass_core_axim_clk = {
2694 	.halt_reg = 0x1F028,
2695 	.clkr = {
2696 		.enable_reg = 0x1F028,
2697 		.enable_mask = BIT(0),
2698 		.hw.init = &(struct clk_init_data){
2699 			.name = "gcc_lpass_core_axim_clk",
2700 			.parent_hws = (const struct clk_hw *[]){
2701 					&lpass_core_axim_clk_src.clkr.hw },
2702 			.num_parents = 1,
2703 			.flags = CLK_SET_RATE_PARENT,
2704 			.ops = &clk_branch2_ops,
2705 		},
2706 	},
2707 };
2708 
2709 static struct clk_branch gcc_lpass_snoc_cfg_clk = {
2710 	.halt_reg = 0x1F048,
2711 	.clkr = {
2712 		.enable_reg = 0x1F048,
2713 		.enable_mask = BIT(0),
2714 		.hw.init = &(struct clk_init_data){
2715 			.name = "gcc_lpass_snoc_cfg_clk",
2716 			.parent_hws = (const struct clk_hw *[]){
2717 					&lpass_snoc_cfg_clk_src.clkr.hw },
2718 			.num_parents = 1,
2719 			.flags = CLK_SET_RATE_PARENT,
2720 			.ops = &clk_branch2_ops,
2721 		},
2722 	},
2723 };
2724 
2725 static struct clk_branch gcc_lpass_q6_axim_clk = {
2726 	.halt_reg = 0x1F010,
2727 	.clkr = {
2728 		.enable_reg = 0x1F010,
2729 		.enable_mask = BIT(0),
2730 		.hw.init = &(struct clk_init_data){
2731 			.name = "gcc_lpass_q6_axim_clk",
2732 			.parent_hws = (const struct clk_hw *[]){
2733 					&lpass_q6_axim_clk_src.clkr.hw },
2734 			.num_parents = 1,
2735 			.flags = CLK_SET_RATE_PARENT,
2736 			.ops = &clk_branch2_ops,
2737 		},
2738 	},
2739 };
2740 
2741 static struct clk_branch gcc_lpass_q6_atbm_at_clk = {
2742 	.halt_reg = 0x1F018,
2743 	.clkr = {
2744 		.enable_reg = 0x1F018,
2745 		.enable_mask = BIT(0),
2746 		.hw.init = &(struct clk_init_data){
2747 			.name = "gcc_lpass_q6_atbm_at_clk",
2748 			.parent_hws = (const struct clk_hw *[]){
2749 					&qdss_at_clk_src.clkr.hw },
2750 			.num_parents = 1,
2751 			.flags = CLK_SET_RATE_PARENT,
2752 			.ops = &clk_branch2_ops,
2753 		},
2754 	},
2755 };
2756 
2757 static struct clk_branch gcc_lpass_q6_pclkdbg_clk = {
2758 	.halt_reg = 0x1F01C,
2759 	.clkr = {
2760 		.enable_reg = 0x1F01C,
2761 		.enable_mask = BIT(0),
2762 		.hw.init = &(struct clk_init_data){
2763 			.name = "gcc_lpass_q6_pclkdbg_clk",
2764 			.parent_hws = (const struct clk_hw *[]){
2765 					&qdss_dap_sync_clk_src.hw },
2766 			.num_parents = 1,
2767 			.flags = CLK_SET_RATE_PARENT,
2768 			.ops = &clk_branch2_ops,
2769 		},
2770 	},
2771 };
2772 
2773 static struct clk_branch gcc_lpass_q6ss_tsctr_1to2_clk = {
2774 	.halt_reg = 0x1F014,
2775 	.clkr = {
2776 		.enable_reg = 0x1F014,
2777 		.enable_mask = BIT(0),
2778 		.hw.init = &(struct clk_init_data){
2779 			.name = "gcc_lpass_q6ss_tsctr_1to2_clk",
2780 			.parent_hws = (const struct clk_hw *[]){
2781 					&qdss_tsctr_div2_clk_src.hw },
2782 			.num_parents = 1,
2783 			.flags = CLK_SET_RATE_PARENT,
2784 			.ops = &clk_branch2_ops,
2785 		},
2786 	},
2787 };
2788 
2789 static struct clk_branch gcc_lpass_q6ss_trig_clk = {
2790 	.halt_reg = 0x1F038,
2791 	.clkr = {
2792 		.enable_reg = 0x1F038,
2793 		.enable_mask = BIT(0),
2794 		.hw.init = &(struct clk_init_data){
2795 			.name = "gcc_lpass_q6ss_trig_clk",
2796 			.parent_hws = (const struct clk_hw *[]){
2797 					&qdss_dap_sync_clk_src.hw },
2798 			.num_parents = 1,
2799 			.flags = CLK_SET_RATE_PARENT,
2800 			.ops = &clk_branch2_ops,
2801 		},
2802 	},
2803 };
2804 
2805 static struct clk_branch gcc_lpass_tbu_clk = {
2806 	.halt_reg = 0x12094,
2807 	.clkr = {
2808 		.enable_reg = 0xb00c,
2809 		.enable_mask = BIT(10),
2810 		.hw.init = &(struct clk_init_data){
2811 			.name = "gcc_lpass_tbu_clk",
2812 			.parent_hws = (const struct clk_hw *[]){
2813 					&lpass_q6_axim_clk_src.clkr.hw },
2814 			.num_parents = 1,
2815 			.flags = CLK_SET_RATE_PARENT,
2816 			.ops = &clk_branch2_ops,
2817 		},
2818 	},
2819 };
2820 
2821 static struct clk_branch gcc_pcnoc_lpass_clk = {
2822 	.halt_reg = 0x27020,
2823 	.clkr = {
2824 		.enable_reg = 0x27020,
2825 		.enable_mask = BIT(0),
2826 		.hw.init = &(struct clk_init_data){
2827 			.name = "gcc_pcnoc_lpass_clk",
2828 			.parent_hws = (const struct clk_hw *[]){
2829 					&lpass_core_axim_clk_src.clkr.hw },
2830 			.num_parents = 1,
2831 			.flags = CLK_SET_RATE_PARENT,
2832 			.ops = &clk_branch2_ops,
2833 		},
2834 	},
2835 };
2836 
2837 static struct clk_branch gcc_mem_noc_lpass_clk = {
2838 	.halt_reg = 0x1D044,
2839 	.clkr = {
2840 		.enable_reg = 0x1D044,
2841 		.enable_mask = BIT(0),
2842 		.hw.init = &(struct clk_init_data){
2843 			.name = "gcc_mem_noc_lpass_clk",
2844 			.parent_hws = (const struct clk_hw *[]){
2845 					&lpass_q6_axim_clk_src.clkr.hw },
2846 			.num_parents = 1,
2847 			.flags = CLK_SET_RATE_PARENT,
2848 			.ops = &clk_branch2_ops,
2849 		},
2850 	},
2851 };
2852 
2853 static struct clk_branch gcc_snoc_lpass_cfg_clk = {
2854 	.halt_reg = 0x26074,
2855 	.clkr = {
2856 		.enable_reg = 0x26074,
2857 		.enable_mask = BIT(0),
2858 		.hw.init = &(struct clk_init_data){
2859 			.name = "gcc_snoc_lpass_cfg_clk",
2860 			.parent_hws = (const struct clk_hw *[]){
2861 					&lpass_snoc_cfg_clk_src.clkr.hw },
2862 			.num_parents = 1,
2863 			.flags = CLK_SET_RATE_PARENT,
2864 			.ops = &clk_branch2_ops,
2865 		},
2866 	},
2867 };
2868 
2869 static struct clk_branch gcc_mem_noc_ubi32_clk = {
2870 	.halt_reg = 0x1D03C,
2871 	.clkr = {
2872 		.enable_reg = 0x1D03C,
2873 		.enable_mask = BIT(0),
2874 		.hw.init = &(struct clk_init_data){
2875 			.name = "gcc_mem_noc_ubi32_clk",
2876 			.parent_hws = (const struct clk_hw *[]){
2877 					&ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
2878 			.num_parents = 1,
2879 			.flags = CLK_SET_RATE_PARENT,
2880 			.ops = &clk_branch2_ops,
2881 		},
2882 	},
2883 };
2884 
2885 static struct clk_branch gcc_nss_port1_rx_clk = {
2886 	.halt_reg = 0x68240,
2887 	.clkr = {
2888 		.enable_reg = 0x68240,
2889 		.enable_mask = BIT(0),
2890 		.hw.init = &(struct clk_init_data){
2891 			.name = "gcc_nss_port1_rx_clk",
2892 			.parent_hws = (const struct clk_hw *[]){
2893 					&nss_port1_rx_div_clk_src.clkr.hw },
2894 			.num_parents = 1,
2895 			.flags = CLK_SET_RATE_PARENT,
2896 			.ops = &clk_branch2_ops,
2897 		},
2898 	},
2899 };
2900 
2901 static struct clk_branch gcc_nss_port1_tx_clk = {
2902 	.halt_reg = 0x68244,
2903 	.clkr = {
2904 		.enable_reg = 0x68244,
2905 		.enable_mask = BIT(0),
2906 		.hw.init = &(struct clk_init_data){
2907 			.name = "gcc_nss_port1_tx_clk",
2908 			.parent_hws = (const struct clk_hw *[]){
2909 					&nss_port1_tx_div_clk_src.clkr.hw },
2910 			.num_parents = 1,
2911 			.flags = CLK_SET_RATE_PARENT,
2912 			.ops = &clk_branch2_ops,
2913 		},
2914 	},
2915 };
2916 
2917 static struct clk_branch gcc_nss_port2_rx_clk = {
2918 	.halt_reg = 0x68248,
2919 	.clkr = {
2920 		.enable_reg = 0x68248,
2921 		.enable_mask = BIT(0),
2922 		.hw.init = &(struct clk_init_data){
2923 			.name = "gcc_nss_port2_rx_clk",
2924 			.parent_hws = (const struct clk_hw *[]){
2925 					&nss_port2_rx_div_clk_src.clkr.hw },
2926 			.num_parents = 1,
2927 			.flags = CLK_SET_RATE_PARENT,
2928 			.ops = &clk_branch2_ops,
2929 		},
2930 	},
2931 };
2932 
2933 static struct clk_branch gcc_nss_port2_tx_clk = {
2934 	.halt_reg = 0x6824c,
2935 	.clkr = {
2936 		.enable_reg = 0x6824c,
2937 		.enable_mask = BIT(0),
2938 		.hw.init = &(struct clk_init_data){
2939 			.name = "gcc_nss_port2_tx_clk",
2940 			.parent_hws = (const struct clk_hw *[]){
2941 					&nss_port2_tx_div_clk_src.clkr.hw },
2942 			.num_parents = 1,
2943 			.flags = CLK_SET_RATE_PARENT,
2944 			.ops = &clk_branch2_ops,
2945 		},
2946 	},
2947 };
2948 
2949 static struct clk_branch gcc_nss_port3_rx_clk = {
2950 	.halt_reg = 0x68250,
2951 	.clkr = {
2952 		.enable_reg = 0x68250,
2953 		.enable_mask = BIT(0),
2954 		.hw.init = &(struct clk_init_data){
2955 			.name = "gcc_nss_port3_rx_clk",
2956 			.parent_hws = (const struct clk_hw *[]){
2957 					&nss_port3_rx_div_clk_src.clkr.hw },
2958 			.num_parents = 1,
2959 			.flags = CLK_SET_RATE_PARENT,
2960 			.ops = &clk_branch2_ops,
2961 		},
2962 	},
2963 };
2964 
2965 static struct clk_branch gcc_nss_port3_tx_clk = {
2966 	.halt_reg = 0x68254,
2967 	.clkr = {
2968 		.enable_reg = 0x68254,
2969 		.enable_mask = BIT(0),
2970 		.hw.init = &(struct clk_init_data){
2971 			.name = "gcc_nss_port3_tx_clk",
2972 			.parent_hws = (const struct clk_hw *[]){
2973 					&nss_port3_tx_div_clk_src.clkr.hw },
2974 			.num_parents = 1,
2975 			.flags = CLK_SET_RATE_PARENT,
2976 			.ops = &clk_branch2_ops,
2977 		},
2978 	},
2979 };
2980 
2981 static struct clk_branch gcc_nss_port4_rx_clk = {
2982 	.halt_reg = 0x68258,
2983 	.clkr = {
2984 		.enable_reg = 0x68258,
2985 		.enable_mask = BIT(0),
2986 		.hw.init = &(struct clk_init_data){
2987 			.name = "gcc_nss_port4_rx_clk",
2988 			.parent_hws = (const struct clk_hw *[]){
2989 					&nss_port4_rx_div_clk_src.clkr.hw },
2990 			.num_parents = 1,
2991 			.flags = CLK_SET_RATE_PARENT,
2992 			.ops = &clk_branch2_ops,
2993 		},
2994 	},
2995 };
2996 
2997 static struct clk_branch gcc_nss_port4_tx_clk = {
2998 	.halt_reg = 0x6825c,
2999 	.clkr = {
3000 		.enable_reg = 0x6825c,
3001 		.enable_mask = BIT(0),
3002 		.hw.init = &(struct clk_init_data){
3003 			.name = "gcc_nss_port4_tx_clk",
3004 			.parent_hws = (const struct clk_hw *[]){
3005 					&nss_port4_tx_div_clk_src.clkr.hw },
3006 			.num_parents = 1,
3007 			.flags = CLK_SET_RATE_PARENT,
3008 			.ops = &clk_branch2_ops,
3009 		},
3010 	},
3011 };
3012 
3013 static struct clk_branch gcc_nss_port5_rx_clk = {
3014 	.halt_reg = 0x68260,
3015 	.clkr = {
3016 		.enable_reg = 0x68260,
3017 		.enable_mask = BIT(0),
3018 		.hw.init = &(struct clk_init_data){
3019 			.name = "gcc_nss_port5_rx_clk",
3020 			.parent_hws = (const struct clk_hw *[]){
3021 					&nss_port5_rx_div_clk_src.clkr.hw },
3022 			.num_parents = 1,
3023 			.flags = CLK_SET_RATE_PARENT,
3024 			.ops = &clk_branch2_ops,
3025 		},
3026 	},
3027 };
3028 
3029 static struct clk_branch gcc_nss_port5_tx_clk = {
3030 	.halt_reg = 0x68264,
3031 	.clkr = {
3032 		.enable_reg = 0x68264,
3033 		.enable_mask = BIT(0),
3034 		.hw.init = &(struct clk_init_data){
3035 			.name = "gcc_nss_port5_tx_clk",
3036 			.parent_hws = (const struct clk_hw *[]){
3037 					&nss_port5_tx_div_clk_src.clkr.hw },
3038 			.num_parents = 1,
3039 			.flags = CLK_SET_RATE_PARENT,
3040 			.ops = &clk_branch2_ops,
3041 		},
3042 	},
3043 };
3044 
3045 static struct clk_branch gcc_nss_ppe_cfg_clk = {
3046 	.halt_reg = 0x68194,
3047 	.clkr = {
3048 		.enable_reg = 0x68194,
3049 		.enable_mask = BIT(0),
3050 		.hw.init = &(struct clk_init_data){
3051 			.name = "gcc_nss_ppe_cfg_clk",
3052 			.parent_hws = (const struct clk_hw *[]){
3053 					&nss_ppe_clk_src.clkr.hw },
3054 			.num_parents = 1,
3055 			.flags = CLK_SET_RATE_PARENT,
3056 			.ops = &clk_branch2_ops,
3057 		},
3058 	},
3059 };
3060 
3061 static struct clk_branch gcc_nss_ppe_clk = {
3062 	.halt_reg = 0x68190,
3063 	.clkr = {
3064 		.enable_reg = 0x68190,
3065 		.enable_mask = BIT(0),
3066 		.hw.init = &(struct clk_init_data){
3067 			.name = "gcc_nss_ppe_clk",
3068 			.parent_hws = (const struct clk_hw *[]){
3069 					&nss_ppe_clk_src.clkr.hw },
3070 			.num_parents = 1,
3071 			.flags = CLK_SET_RATE_PARENT,
3072 			.ops = &clk_branch2_ops,
3073 		},
3074 	},
3075 };
3076 
3077 static struct clk_branch gcc_nss_ppe_ipe_clk = {
3078 	.halt_reg = 0x68338,
3079 	.clkr = {
3080 		.enable_reg = 0x68338,
3081 		.enable_mask = BIT(0),
3082 		.hw.init = &(struct clk_init_data){
3083 			.name = "gcc_nss_ppe_ipe_clk",
3084 			.parent_hws = (const struct clk_hw *[]){
3085 					&nss_ppe_clk_src.clkr.hw },
3086 			.num_parents = 1,
3087 			.flags = CLK_SET_RATE_PARENT,
3088 			.ops = &clk_branch2_ops,
3089 		},
3090 	},
3091 };
3092 
3093 static struct clk_branch gcc_nss_ptp_ref_clk = {
3094 	.halt_reg = 0x6816C,
3095 	.clkr = {
3096 		.enable_reg = 0x6816C,
3097 		.enable_mask = BIT(0),
3098 		.hw.init = &(struct clk_init_data){
3099 			.name = "gcc_nss_ptp_ref_clk",
3100 			.parent_hws = (const struct clk_hw *[]){
3101 					&nss_ppe_cdiv_clk_src.hw },
3102 			.num_parents = 1,
3103 			.flags = CLK_SET_RATE_PARENT,
3104 			.ops = &clk_branch2_ops,
3105 		},
3106 	},
3107 };
3108 
3109 static struct clk_branch gcc_nssnoc_ce_apb_clk = {
3110 	.halt_reg = 0x6830C,
3111 	.clkr = {
3112 		.enable_reg = 0x6830C,
3113 		.enable_mask = BIT(0),
3114 		.hw.init = &(struct clk_init_data){
3115 			.name = "gcc_nssnoc_ce_apb_clk",
3116 			.parent_hws = (const struct clk_hw *[]){
3117 					&nss_ce_clk_src.clkr.hw },
3118 			.num_parents = 1,
3119 			.flags = CLK_SET_RATE_PARENT,
3120 			.ops = &clk_branch2_ops,
3121 		},
3122 	},
3123 };
3124 
3125 static struct clk_branch gcc_nssnoc_ce_axi_clk = {
3126 	.halt_reg = 0x68308,
3127 	.clkr = {
3128 		.enable_reg = 0x68308,
3129 		.enable_mask = BIT(0),
3130 		.hw.init = &(struct clk_init_data){
3131 			.name = "gcc_nssnoc_ce_axi_clk",
3132 			.parent_hws = (const struct clk_hw *[]){
3133 					&nss_ce_clk_src.clkr.hw },
3134 			.num_parents = 1,
3135 			.flags = CLK_SET_RATE_PARENT,
3136 			.ops = &clk_branch2_ops,
3137 		},
3138 	},
3139 };
3140 
3141 static struct clk_branch gcc_nssnoc_crypto_clk = {
3142 	.halt_reg = 0x68314,
3143 	.clkr = {
3144 		.enable_reg = 0x68314,
3145 		.enable_mask = BIT(0),
3146 		.hw.init = &(struct clk_init_data){
3147 			.name = "gcc_nssnoc_crypto_clk",
3148 			.parent_hws = (const struct clk_hw *[]){
3149 					&nss_crypto_clk_src.clkr.hw },
3150 			.num_parents = 1,
3151 			.flags = CLK_SET_RATE_PARENT,
3152 			.ops = &clk_branch2_ops,
3153 		},
3154 	},
3155 };
3156 
3157 static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
3158 	.halt_reg = 0x68304,
3159 	.clkr = {
3160 		.enable_reg = 0x68304,
3161 		.enable_mask = BIT(0),
3162 		.hw.init = &(struct clk_init_data){
3163 			.name = "gcc_nssnoc_ppe_cfg_clk",
3164 			.parent_hws = (const struct clk_hw *[]){
3165 					&nss_ppe_clk_src.clkr.hw },
3166 			.flags = CLK_SET_RATE_PARENT,
3167 			.ops = &clk_branch2_ops,
3168 		},
3169 	},
3170 };
3171 
3172 static struct clk_branch gcc_nssnoc_ppe_clk = {
3173 	.halt_reg = 0x68300,
3174 	.clkr = {
3175 		.enable_reg = 0x68300,
3176 		.enable_mask = BIT(0),
3177 		.hw.init = &(struct clk_init_data){
3178 			.name = "gcc_nssnoc_ppe_clk",
3179 			.parent_hws = (const struct clk_hw *[]){
3180 					&nss_ppe_clk_src.clkr.hw },
3181 			.num_parents = 1,
3182 			.flags = CLK_SET_RATE_PARENT,
3183 			.ops = &clk_branch2_ops,
3184 		},
3185 	},
3186 };
3187 
3188 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
3189 	.halt_reg = 0x68180,
3190 	.clkr = {
3191 		.enable_reg = 0x68180,
3192 		.enable_mask = BIT(0),
3193 		.hw.init = &(struct clk_init_data){
3194 			.name = "gcc_nssnoc_qosgen_ref_clk",
3195 			.parent_hws = (const struct clk_hw *[]){
3196 					&gcc_xo_clk_src.clkr.hw },
3197 			.num_parents = 1,
3198 			.flags = CLK_SET_RATE_PARENT,
3199 			.ops = &clk_branch2_ops,
3200 		},
3201 	},
3202 };
3203 
3204 static struct clk_branch gcc_nssnoc_snoc_clk = {
3205 	.halt_reg = 0x68188,
3206 	.clkr = {
3207 		.enable_reg = 0x68188,
3208 		.enable_mask = BIT(0),
3209 		.hw.init = &(struct clk_init_data){
3210 			.name = "gcc_nssnoc_snoc_clk",
3211 			.parent_hws = (const struct clk_hw *[]){
3212 					&system_noc_bfdcd_clk_src.clkr.hw },
3213 			.num_parents = 1,
3214 			.flags = CLK_SET_RATE_PARENT,
3215 			.ops = &clk_branch2_ops,
3216 		},
3217 	},
3218 };
3219 
3220 static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
3221 	.halt_reg = 0x68184,
3222 	.clkr = {
3223 		.enable_reg = 0x68184,
3224 		.enable_mask = BIT(0),
3225 		.hw.init = &(struct clk_init_data){
3226 			.name = "gcc_nssnoc_timeout_ref_clk",
3227 			.parent_hws = (const struct clk_hw *[]){
3228 					&gcc_xo_div4_clk_src.hw },
3229 			.num_parents = 1,
3230 			.flags = CLK_SET_RATE_PARENT,
3231 			.ops = &clk_branch2_ops,
3232 		},
3233 	},
3234 };
3235 
3236 static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
3237 	.halt_reg = 0x68270,
3238 	.clkr = {
3239 		.enable_reg = 0x68270,
3240 		.enable_mask = BIT(0),
3241 		.hw.init = &(struct clk_init_data){
3242 			.name = "gcc_nssnoc_ubi0_ahb_clk",
3243 			.parent_hws = (const struct clk_hw *[]){
3244 					&nss_ce_clk_src.clkr.hw },
3245 			.num_parents = 1,
3246 			.flags = CLK_SET_RATE_PARENT,
3247 			.ops = &clk_branch2_ops,
3248 		},
3249 	},
3250 };
3251 
3252 static struct clk_branch gcc_port1_mac_clk = {
3253 	.halt_reg = 0x68320,
3254 	.clkr = {
3255 		.enable_reg = 0x68320,
3256 		.enable_mask = BIT(0),
3257 		.hw.init = &(struct clk_init_data){
3258 			.name = "gcc_port1_mac_clk",
3259 			.parent_hws = (const struct clk_hw *[]){
3260 					&nss_ppe_clk_src.clkr.hw },
3261 			.num_parents = 1,
3262 			.flags = CLK_SET_RATE_PARENT,
3263 			.ops = &clk_branch2_ops,
3264 		},
3265 	},
3266 };
3267 
3268 static struct clk_branch gcc_port2_mac_clk = {
3269 	.halt_reg = 0x68324,
3270 	.clkr = {
3271 		.enable_reg = 0x68324,
3272 		.enable_mask = BIT(0),
3273 		.hw.init = &(struct clk_init_data){
3274 			.name = "gcc_port2_mac_clk",
3275 			.parent_hws = (const struct clk_hw *[]){
3276 					&nss_ppe_clk_src.clkr.hw },
3277 			.num_parents = 1,
3278 			.flags = CLK_SET_RATE_PARENT,
3279 			.ops = &clk_branch2_ops,
3280 		},
3281 	},
3282 };
3283 
3284 static struct clk_branch gcc_port3_mac_clk = {
3285 	.halt_reg = 0x68328,
3286 	.clkr = {
3287 		.enable_reg = 0x68328,
3288 		.enable_mask = BIT(0),
3289 		.hw.init = &(struct clk_init_data){
3290 			.name = "gcc_port3_mac_clk",
3291 			.parent_hws = (const struct clk_hw *[]){
3292 					&nss_ppe_clk_src.clkr.hw },
3293 			.num_parents = 1,
3294 			.flags = CLK_SET_RATE_PARENT,
3295 			.ops = &clk_branch2_ops,
3296 		},
3297 	},
3298 };
3299 
3300 static struct clk_branch gcc_port4_mac_clk = {
3301 	.halt_reg = 0x6832c,
3302 	.clkr = {
3303 		.enable_reg = 0x6832c,
3304 		.enable_mask = BIT(0),
3305 		.hw.init = &(struct clk_init_data){
3306 			.name = "gcc_port4_mac_clk",
3307 			.parent_hws = (const struct clk_hw *[]){
3308 					&nss_ppe_clk_src.clkr.hw },
3309 			.num_parents = 1,
3310 			.flags = CLK_SET_RATE_PARENT,
3311 			.ops = &clk_branch2_ops,
3312 		},
3313 	},
3314 };
3315 
3316 static struct clk_branch gcc_port5_mac_clk = {
3317 	.halt_reg = 0x68330,
3318 	.clkr = {
3319 		.enable_reg = 0x68330,
3320 		.enable_mask = BIT(0),
3321 		.hw.init = &(struct clk_init_data){
3322 			.name = "gcc_port5_mac_clk",
3323 			.parent_hws = (const struct clk_hw *[]){
3324 					&nss_ppe_clk_src.clkr.hw },
3325 			.num_parents = 1,
3326 			.flags = CLK_SET_RATE_PARENT,
3327 			.ops = &clk_branch2_ops,
3328 		},
3329 	},
3330 };
3331 
3332 static struct clk_branch gcc_ubi0_ahb_clk = {
3333 	.halt_reg = 0x6820C,
3334 	.halt_check = BRANCH_HALT_DELAY,
3335 	.clkr = {
3336 		.enable_reg = 0x6820C,
3337 		.enable_mask = BIT(0),
3338 		.hw.init = &(struct clk_init_data){
3339 			.name = "gcc_ubi0_ahb_clk",
3340 			.parent_hws = (const struct clk_hw *[]){
3341 					&nss_ce_clk_src.clkr.hw },
3342 			.num_parents = 1,
3343 			.flags = CLK_SET_RATE_PARENT,
3344 			.ops = &clk_branch2_ops,
3345 		},
3346 	},
3347 };
3348 
3349 static struct clk_branch gcc_ubi0_axi_clk = {
3350 	.halt_reg = 0x68200,
3351 	.halt_check = BRANCH_HALT_DELAY,
3352 	.clkr = {
3353 		.enable_reg = 0x68200,
3354 		.enable_mask = BIT(0),
3355 		.hw.init = &(struct clk_init_data){
3356 			.name = "gcc_ubi0_axi_clk",
3357 			.parent_hws = (const struct clk_hw *[]){
3358 					&ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
3359 			.num_parents = 1,
3360 			.flags = CLK_SET_RATE_PARENT,
3361 			.ops = &clk_branch2_ops,
3362 		},
3363 	},
3364 };
3365 
3366 static struct clk_branch gcc_ubi0_nc_axi_clk = {
3367 	.halt_reg = 0x68204,
3368 	.halt_check = BRANCH_HALT_DELAY,
3369 	.clkr = {
3370 		.enable_reg = 0x68204,
3371 		.enable_mask = BIT(0),
3372 		.hw.init = &(struct clk_init_data){
3373 			.name = "gcc_ubi0_nc_axi_clk",
3374 			.parent_hws = (const struct clk_hw *[]){
3375 					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
3376 			.num_parents = 1,
3377 			.flags = CLK_SET_RATE_PARENT,
3378 			.ops = &clk_branch2_ops,
3379 		},
3380 	},
3381 };
3382 
3383 static struct clk_branch gcc_ubi0_core_clk = {
3384 	.halt_reg = 0x68210,
3385 	.halt_check = BRANCH_HALT_DELAY,
3386 	.clkr = {
3387 		.enable_reg = 0x68210,
3388 		.enable_mask = BIT(0),
3389 		.hw.init = &(struct clk_init_data){
3390 			.name = "gcc_ubi0_core_clk",
3391 			.parent_hws = (const struct clk_hw *[]){
3392 					&nss_ubi0_div_clk_src.clkr.hw },
3393 			.num_parents = 1,
3394 			.flags = CLK_SET_RATE_PARENT,
3395 			.ops = &clk_branch2_ops,
3396 		},
3397 	},
3398 };
3399 
3400 static struct clk_branch gcc_pcie0_ahb_clk = {
3401 	.halt_reg = 0x75010,
3402 	.clkr = {
3403 		.enable_reg = 0x75010,
3404 		.enable_mask = BIT(0),
3405 		.hw.init = &(struct clk_init_data){
3406 			.name = "gcc_pcie0_ahb_clk",
3407 			.parent_hws = (const struct clk_hw *[]){
3408 					&pcnoc_bfdcd_clk_src.clkr.hw },
3409 			.num_parents = 1,
3410 			.flags = CLK_SET_RATE_PARENT,
3411 			.ops = &clk_branch2_ops,
3412 		},
3413 	},
3414 };
3415 
3416 static struct clk_branch gcc_pcie0_aux_clk = {
3417 	.halt_reg = 0x75014,
3418 	.clkr = {
3419 		.enable_reg = 0x75014,
3420 		.enable_mask = BIT(0),
3421 		.hw.init = &(struct clk_init_data){
3422 			.name = "gcc_pcie0_aux_clk",
3423 			.parent_hws = (const struct clk_hw *[]){
3424 					&pcie0_aux_clk_src.clkr.hw },
3425 			.num_parents = 1,
3426 			.flags = CLK_SET_RATE_PARENT,
3427 			.ops = &clk_branch2_ops,
3428 		},
3429 	},
3430 };
3431 
3432 static struct clk_branch gcc_pcie0_axi_m_clk = {
3433 	.halt_reg = 0x75008,
3434 	.clkr = {
3435 		.enable_reg = 0x75008,
3436 		.enable_mask = BIT(0),
3437 		.hw.init = &(struct clk_init_data){
3438 			.name = "gcc_pcie0_axi_m_clk",
3439 			.parent_hws = (const struct clk_hw *[]){
3440 					&pcie0_axi_clk_src.clkr.hw },
3441 			.num_parents = 1,
3442 			.flags = CLK_SET_RATE_PARENT,
3443 			.ops = &clk_branch2_ops,
3444 		},
3445 	},
3446 };
3447 
3448 static struct clk_branch gcc_pcie0_axi_s_clk = {
3449 	.halt_reg = 0x7500c,
3450 	.clkr = {
3451 		.enable_reg = 0x7500c,
3452 		.enable_mask = BIT(0),
3453 		.hw.init = &(struct clk_init_data){
3454 			.name = "gcc_pcie0_axi_s_clk",
3455 			.parent_hws = (const struct clk_hw *[]){
3456 					&pcie0_axi_clk_src.clkr.hw },
3457 			.num_parents = 1,
3458 			.flags = CLK_SET_RATE_PARENT,
3459 			.ops = &clk_branch2_ops,
3460 		},
3461 	},
3462 };
3463 
3464 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
3465 	.halt_reg = 0x26048,
3466 	.clkr = {
3467 		.enable_reg = 0x26048,
3468 		.enable_mask = BIT(0),
3469 		.hw.init = &(struct clk_init_data){
3470 			.name = "gcc_sys_noc_pcie0_axi_clk",
3471 			.parent_hws = (const struct clk_hw *[]){
3472 					&pcie0_axi_clk_src.clkr.hw },
3473 			.num_parents = 1,
3474 			.flags = CLK_SET_RATE_PARENT,
3475 			.ops = &clk_branch2_ops,
3476 		},
3477 	},
3478 };
3479 
3480 static struct clk_branch gcc_pcie0_pipe_clk = {
3481 	.halt_reg = 0x75018,
3482 	.halt_check = BRANCH_HALT_DELAY,
3483 	.clkr = {
3484 		.enable_reg = 0x75018,
3485 		.enable_mask = BIT(0),
3486 		.hw.init = &(struct clk_init_data){
3487 			.name = "gcc_pcie0_pipe_clk",
3488 			.parent_hws = (const struct clk_hw *[]){
3489 					&pcie0_pipe_clk_src.clkr.hw },
3490 			.num_parents = 1,
3491 			.flags = CLK_SET_RATE_PARENT,
3492 			.ops = &clk_branch2_ops,
3493 		},
3494 	},
3495 };
3496 
3497 static struct clk_branch gcc_prng_ahb_clk = {
3498 	.halt_reg = 0x13004,
3499 	.halt_check = BRANCH_HALT_VOTED,
3500 	.clkr = {
3501 		.enable_reg = 0x0b004,
3502 		.enable_mask = BIT(8),
3503 		.hw.init = &(struct clk_init_data){
3504 			.name = "gcc_prng_ahb_clk",
3505 			.parent_hws = (const struct clk_hw *[]){
3506 					&pcnoc_bfdcd_clk_src.clkr.hw },
3507 			.num_parents = 1,
3508 			.flags = CLK_SET_RATE_PARENT,
3509 			.ops = &clk_branch2_ops,
3510 		},
3511 	},
3512 };
3513 
3514 static struct clk_branch gcc_qdss_dap_clk = {
3515 	.halt_reg = 0x29084,
3516 	.clkr = {
3517 		.enable_reg = 0x29084,
3518 		.enable_mask = BIT(0),
3519 		.hw.init = &(struct clk_init_data){
3520 			.name = "gcc_qdss_dap_clk",
3521 			.parent_hws = (const struct clk_hw *[]){
3522 					&qdss_dap_sync_clk_src.hw },
3523 			.num_parents = 1,
3524 			.flags = CLK_SET_RATE_PARENT,
3525 			.ops = &clk_branch2_ops,
3526 		},
3527 	},
3528 };
3529 
3530 static struct clk_branch gcc_qpic_ahb_clk = {
3531 	.halt_reg = 0x57024,
3532 	.clkr = {
3533 		.enable_reg = 0x57024,
3534 		.enable_mask = BIT(0),
3535 		.hw.init = &(struct clk_init_data){
3536 			.name = "gcc_qpic_ahb_clk",
3537 			.parent_hws = (const struct clk_hw *[]){
3538 					&pcnoc_bfdcd_clk_src.clkr.hw },
3539 			.num_parents = 1,
3540 			.flags = CLK_SET_RATE_PARENT,
3541 			.ops = &clk_branch2_ops,
3542 		},
3543 	},
3544 };
3545 
3546 static struct clk_branch gcc_qpic_clk = {
3547 	.halt_reg = 0x57020,
3548 	.clkr = {
3549 		.enable_reg = 0x57020,
3550 		.enable_mask = BIT(0),
3551 		.hw.init = &(struct clk_init_data){
3552 			.name = "gcc_qpic_clk",
3553 			.parent_hws = (const struct clk_hw *[]){
3554 					&pcnoc_bfdcd_clk_src.clkr.hw },
3555 			.num_parents = 1,
3556 			.flags = CLK_SET_RATE_PARENT,
3557 			.ops = &clk_branch2_ops,
3558 		},
3559 	},
3560 };
3561 
3562 static struct clk_branch gcc_sdcc1_ahb_clk = {
3563 	.halt_reg = 0x4201c,
3564 	.clkr = {
3565 		.enable_reg = 0x4201c,
3566 		.enable_mask = BIT(0),
3567 		.hw.init = &(struct clk_init_data){
3568 			.name = "gcc_sdcc1_ahb_clk",
3569 			.parent_hws = (const struct clk_hw *[]){
3570 					&pcnoc_bfdcd_clk_src.clkr.hw },
3571 			.num_parents = 1,
3572 			.flags = CLK_SET_RATE_PARENT,
3573 			.ops = &clk_branch2_ops,
3574 		},
3575 	},
3576 };
3577 
3578 static struct clk_branch gcc_sdcc1_apps_clk = {
3579 	.halt_reg = 0x42018,
3580 	.clkr = {
3581 		.enable_reg = 0x42018,
3582 		.enable_mask = BIT(0),
3583 		.hw.init = &(struct clk_init_data){
3584 			.name = "gcc_sdcc1_apps_clk",
3585 			.parent_hws = (const struct clk_hw *[]){
3586 					&sdcc1_apps_clk_src.clkr.hw },
3587 			.num_parents = 1,
3588 			.flags = CLK_SET_RATE_PARENT,
3589 			.ops = &clk_branch2_ops,
3590 		},
3591 	},
3592 };
3593 
3594 static struct clk_branch gcc_uniphy0_ahb_clk = {
3595 	.halt_reg = 0x56008,
3596 	.clkr = {
3597 		.enable_reg = 0x56008,
3598 		.enable_mask = BIT(0),
3599 		.hw.init = &(struct clk_init_data){
3600 			.name = "gcc_uniphy0_ahb_clk",
3601 			.parent_hws = (const struct clk_hw *[]){
3602 					&pcnoc_bfdcd_clk_src.clkr.hw },
3603 			.num_parents = 1,
3604 			.flags = CLK_SET_RATE_PARENT,
3605 			.ops = &clk_branch2_ops,
3606 		},
3607 	},
3608 };
3609 
3610 static struct clk_branch gcc_uniphy0_port1_rx_clk = {
3611 	.halt_reg = 0x56010,
3612 	.clkr = {
3613 		.enable_reg = 0x56010,
3614 		.enable_mask = BIT(0),
3615 		.hw.init = &(struct clk_init_data){
3616 			.name = "gcc_uniphy0_port1_rx_clk",
3617 			.parent_hws = (const struct clk_hw *[]){
3618 					&nss_port1_rx_div_clk_src.clkr.hw },
3619 			.num_parents = 1,
3620 			.flags = CLK_SET_RATE_PARENT,
3621 			.ops = &clk_branch2_ops,
3622 		},
3623 	},
3624 };
3625 
3626 static struct clk_branch gcc_uniphy0_port1_tx_clk = {
3627 	.halt_reg = 0x56014,
3628 	.clkr = {
3629 		.enable_reg = 0x56014,
3630 		.enable_mask = BIT(0),
3631 		.hw.init = &(struct clk_init_data){
3632 			.name = "gcc_uniphy0_port1_tx_clk",
3633 			.parent_hws = (const struct clk_hw *[]){
3634 					&nss_port1_tx_div_clk_src.clkr.hw },
3635 			.num_parents = 1,
3636 			.flags = CLK_SET_RATE_PARENT,
3637 			.ops = &clk_branch2_ops,
3638 		},
3639 	},
3640 };
3641 
3642 static struct clk_branch gcc_uniphy0_port2_rx_clk = {
3643 	.halt_reg = 0x56018,
3644 	.clkr = {
3645 		.enable_reg = 0x56018,
3646 		.enable_mask = BIT(0),
3647 		.hw.init = &(struct clk_init_data){
3648 			.name = "gcc_uniphy0_port2_rx_clk",
3649 			.parent_hws = (const struct clk_hw *[]){
3650 					&nss_port2_rx_div_clk_src.clkr.hw },
3651 			.num_parents = 1,
3652 			.flags = CLK_SET_RATE_PARENT,
3653 			.ops = &clk_branch2_ops,
3654 		},
3655 	},
3656 };
3657 
3658 static struct clk_branch gcc_uniphy0_port2_tx_clk = {
3659 	.halt_reg = 0x5601c,
3660 	.clkr = {
3661 		.enable_reg = 0x5601c,
3662 		.enable_mask = BIT(0),
3663 		.hw.init = &(struct clk_init_data){
3664 			.name = "gcc_uniphy0_port2_tx_clk",
3665 			.parent_hws = (const struct clk_hw *[]){
3666 					&nss_port2_tx_div_clk_src.clkr.hw },
3667 			.num_parents = 1,
3668 			.flags = CLK_SET_RATE_PARENT,
3669 			.ops = &clk_branch2_ops,
3670 		},
3671 	},
3672 };
3673 
3674 static struct clk_branch gcc_uniphy0_port3_rx_clk = {
3675 	.halt_reg = 0x56020,
3676 	.clkr = {
3677 		.enable_reg = 0x56020,
3678 		.enable_mask = BIT(0),
3679 		.hw.init = &(struct clk_init_data){
3680 			.name = "gcc_uniphy0_port3_rx_clk",
3681 			.parent_hws = (const struct clk_hw *[]){
3682 					&nss_port3_rx_div_clk_src.clkr.hw },
3683 			.num_parents = 1,
3684 			.flags = CLK_SET_RATE_PARENT,
3685 			.ops = &clk_branch2_ops,
3686 		},
3687 	},
3688 };
3689 
3690 static struct clk_branch gcc_uniphy0_port3_tx_clk = {
3691 	.halt_reg = 0x56024,
3692 	.clkr = {
3693 		.enable_reg = 0x56024,
3694 		.enable_mask = BIT(0),
3695 		.hw.init = &(struct clk_init_data){
3696 			.name = "gcc_uniphy0_port3_tx_clk",
3697 			.parent_hws = (const struct clk_hw *[]){
3698 					&nss_port3_tx_div_clk_src.clkr.hw },
3699 			.num_parents = 1,
3700 			.flags = CLK_SET_RATE_PARENT,
3701 			.ops = &clk_branch2_ops,
3702 		},
3703 	},
3704 };
3705 
3706 static struct clk_branch gcc_uniphy0_port4_rx_clk = {
3707 	.halt_reg = 0x56028,
3708 	.clkr = {
3709 		.enable_reg = 0x56028,
3710 		.enable_mask = BIT(0),
3711 		.hw.init = &(struct clk_init_data){
3712 			.name = "gcc_uniphy0_port4_rx_clk",
3713 			.parent_hws = (const struct clk_hw *[]){
3714 					&nss_port4_rx_div_clk_src.clkr.hw },
3715 			.num_parents = 1,
3716 			.flags = CLK_SET_RATE_PARENT,
3717 			.ops = &clk_branch2_ops,
3718 		},
3719 	},
3720 };
3721 
3722 static struct clk_branch gcc_uniphy0_port4_tx_clk = {
3723 	.halt_reg = 0x5602c,
3724 	.clkr = {
3725 		.enable_reg = 0x5602c,
3726 		.enable_mask = BIT(0),
3727 		.hw.init = &(struct clk_init_data){
3728 			.name = "gcc_uniphy0_port4_tx_clk",
3729 			.parent_hws = (const struct clk_hw *[]){
3730 					&nss_port4_tx_div_clk_src.clkr.hw },
3731 			.num_parents = 1,
3732 			.flags = CLK_SET_RATE_PARENT,
3733 			.ops = &clk_branch2_ops,
3734 		},
3735 	},
3736 };
3737 
3738 static struct clk_branch gcc_uniphy0_port5_rx_clk = {
3739 	.halt_reg = 0x56030,
3740 	.clkr = {
3741 		.enable_reg = 0x56030,
3742 		.enable_mask = BIT(0),
3743 		.hw.init = &(struct clk_init_data){
3744 			.name = "gcc_uniphy0_port5_rx_clk",
3745 			.parent_hws = (const struct clk_hw *[]){
3746 					&nss_port5_rx_div_clk_src.clkr.hw },
3747 			.num_parents = 1,
3748 			.flags = CLK_SET_RATE_PARENT,
3749 			.ops = &clk_branch2_ops,
3750 		},
3751 	},
3752 };
3753 
3754 static struct clk_branch gcc_uniphy0_port5_tx_clk = {
3755 	.halt_reg = 0x56034,
3756 	.clkr = {
3757 		.enable_reg = 0x56034,
3758 		.enable_mask = BIT(0),
3759 		.hw.init = &(struct clk_init_data){
3760 			.name = "gcc_uniphy0_port5_tx_clk",
3761 			.parent_hws = (const struct clk_hw *[]){
3762 					&nss_port5_tx_div_clk_src.clkr.hw },
3763 			.num_parents = 1,
3764 			.flags = CLK_SET_RATE_PARENT,
3765 			.ops = &clk_branch2_ops,
3766 		},
3767 	},
3768 };
3769 
3770 static struct clk_branch gcc_uniphy0_sys_clk = {
3771 	.halt_reg = 0x5600C,
3772 	.clkr = {
3773 		.enable_reg = 0x5600C,
3774 		.enable_mask = BIT(0),
3775 		.hw.init = &(struct clk_init_data){
3776 			.name = "gcc_uniphy0_sys_clk",
3777 			.parent_hws = (const struct clk_hw *[]){
3778 					&gcc_xo_clk_src.clkr.hw },
3779 			.num_parents = 1,
3780 			.flags = CLK_SET_RATE_PARENT,
3781 			.ops = &clk_branch2_ops,
3782 		},
3783 	},
3784 };
3785 
3786 static struct clk_branch gcc_uniphy1_ahb_clk = {
3787 	.halt_reg = 0x56108,
3788 	.clkr = {
3789 		.enable_reg = 0x56108,
3790 		.enable_mask = BIT(0),
3791 		.hw.init = &(struct clk_init_data){
3792 			.name = "gcc_uniphy1_ahb_clk",
3793 			.parent_hws = (const struct clk_hw *[]){
3794 					&pcnoc_bfdcd_clk_src.clkr.hw },
3795 			.num_parents = 1,
3796 			.flags = CLK_SET_RATE_PARENT,
3797 			.ops = &clk_branch2_ops,
3798 		},
3799 	},
3800 };
3801 
3802 static struct clk_branch gcc_uniphy1_port5_rx_clk = {
3803 	.halt_reg = 0x56110,
3804 	.clkr = {
3805 		.enable_reg = 0x56110,
3806 		.enable_mask = BIT(0),
3807 		.hw.init = &(struct clk_init_data){
3808 			.name = "gcc_uniphy1_port5_rx_clk",
3809 			.parent_hws = (const struct clk_hw *[]){
3810 					&nss_port5_rx_div_clk_src.clkr.hw },
3811 			.num_parents = 1,
3812 			.flags = CLK_SET_RATE_PARENT,
3813 			.ops = &clk_branch2_ops,
3814 		},
3815 	},
3816 };
3817 
3818 static struct clk_branch gcc_uniphy1_port5_tx_clk = {
3819 	.halt_reg = 0x56114,
3820 	.clkr = {
3821 		.enable_reg = 0x56114,
3822 		.enable_mask = BIT(0),
3823 		.hw.init = &(struct clk_init_data){
3824 			.name = "gcc_uniphy1_port5_tx_clk",
3825 			.parent_hws = (const struct clk_hw *[]){
3826 					&nss_port5_tx_div_clk_src.clkr.hw },
3827 			.num_parents = 1,
3828 			.flags = CLK_SET_RATE_PARENT,
3829 			.ops = &clk_branch2_ops,
3830 		},
3831 	},
3832 };
3833 
3834 static struct clk_branch gcc_uniphy1_sys_clk = {
3835 	.halt_reg = 0x5610C,
3836 	.clkr = {
3837 		.enable_reg = 0x5610C,
3838 		.enable_mask = BIT(0),
3839 		.hw.init = &(struct clk_init_data){
3840 			.name = "gcc_uniphy1_sys_clk",
3841 			.parent_hws = (const struct clk_hw *[]){
3842 					&gcc_xo_clk_src.clkr.hw },
3843 			.num_parents = 1,
3844 			.flags = CLK_SET_RATE_PARENT,
3845 			.ops = &clk_branch2_ops,
3846 		},
3847 	},
3848 };
3849 
3850 static struct clk_branch gcc_usb0_aux_clk = {
3851 	.halt_reg = 0x3e044,
3852 	.clkr = {
3853 		.enable_reg = 0x3e044,
3854 		.enable_mask = BIT(0),
3855 		.hw.init = &(struct clk_init_data){
3856 			.name = "gcc_usb0_aux_clk",
3857 			.parent_hws = (const struct clk_hw *[]){
3858 					&usb0_aux_clk_src.clkr.hw },
3859 			.num_parents = 1,
3860 			.flags = CLK_SET_RATE_PARENT,
3861 			.ops = &clk_branch2_ops,
3862 		},
3863 	},
3864 };
3865 
3866 static struct clk_branch gcc_usb0_master_clk = {
3867 	.halt_reg = 0x3e000,
3868 	.clkr = {
3869 		.enable_reg = 0x3e000,
3870 		.enable_mask = BIT(0),
3871 		.hw.init = &(struct clk_init_data){
3872 			.name = "gcc_usb0_master_clk",
3873 			.parent_hws = (const struct clk_hw *[]){
3874 					&usb0_master_clk_src.clkr.hw },
3875 			.num_parents = 1,
3876 			.flags = CLK_SET_RATE_PARENT,
3877 			.ops = &clk_branch2_ops,
3878 		},
3879 	},
3880 };
3881 
3882 static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = {
3883 	.halt_reg = 0x47014,
3884 	.clkr = {
3885 		.enable_reg = 0x47014,
3886 		.enable_mask = BIT(0),
3887 		.hw.init = &(struct clk_init_data){
3888 			.name = "gcc_snoc_bus_timeout2_ahb_clk",
3889 			.parent_hws = (const struct clk_hw *[]){
3890 					&usb0_master_clk_src.clkr.hw },
3891 			.num_parents = 1,
3892 			.flags = CLK_SET_RATE_PARENT,
3893 			.ops = &clk_branch2_ops,
3894 		},
3895 	},
3896 };
3897 
3898 static struct clk_rcg2 pcie0_rchng_clk_src = {
3899 	.cmd_rcgr = 0x75070,
3900 	.freq_tbl = ftbl_pcie_rchng_clk_src,
3901 	.hid_width = 5,
3902 	.parent_map = gcc_xo_gpll0_map,
3903 	.clkr.hw.init = &(struct clk_init_data){
3904 		.name = "pcie0_rchng_clk_src",
3905 		.parent_data = gcc_xo_gpll0,
3906 		.num_parents = 2,
3907 		.ops = &clk_rcg2_ops,
3908 	},
3909 };
3910 
3911 static struct clk_branch gcc_pcie0_rchng_clk = {
3912 	.halt_reg = 0x75070,
3913 	.clkr = {
3914 		.enable_reg = 0x75070,
3915 		.enable_mask = BIT(1),
3916 		.hw.init = &(struct clk_init_data){
3917 			.name = "gcc_pcie0_rchng_clk",
3918 			.parent_hws = (const struct clk_hw *[]){
3919 					&pcie0_rchng_clk_src.clkr.hw },
3920 			.num_parents = 1,
3921 			.flags = CLK_SET_RATE_PARENT,
3922 			.ops = &clk_branch2_ops,
3923 		},
3924 	},
3925 };
3926 
3927 static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
3928 	.halt_reg = 0x75048,
3929 	.clkr = {
3930 		.enable_reg = 0x75048,
3931 		.enable_mask = BIT(0),
3932 		.hw.init = &(struct clk_init_data){
3933 			.name = "gcc_pcie0_axi_s_bridge_clk",
3934 			.parent_hws = (const struct clk_hw *[]){
3935 					&pcie0_axi_clk_src.clkr.hw },
3936 			.num_parents = 1,
3937 			.flags = CLK_SET_RATE_PARENT,
3938 			.ops = &clk_branch2_ops,
3939 		},
3940 	},
3941 };
3942 
3943 static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
3944 	.halt_reg = 0x26040,
3945 	.clkr = {
3946 		.enable_reg = 0x26040,
3947 		.enable_mask = BIT(0),
3948 		.hw.init = &(struct clk_init_data){
3949 			.name = "gcc_sys_noc_usb0_axi_clk",
3950 			.parent_hws = (const struct clk_hw *[]){
3951 					&usb0_master_clk_src.clkr.hw },
3952 			.num_parents = 1,
3953 			.flags = CLK_SET_RATE_PARENT,
3954 			.ops = &clk_branch2_ops,
3955 		},
3956 	},
3957 };
3958 
3959 static struct clk_branch gcc_usb0_mock_utmi_clk = {
3960 	.halt_reg = 0x3e008,
3961 	.clkr = {
3962 		.enable_reg = 0x3e008,
3963 		.enable_mask = BIT(0),
3964 		.hw.init = &(struct clk_init_data){
3965 			.name = "gcc_usb0_mock_utmi_clk",
3966 			.parent_hws = (const struct clk_hw *[]){
3967 					&usb0_mock_utmi_clk_src.clkr.hw },
3968 			.num_parents = 1,
3969 			.flags = CLK_SET_RATE_PARENT,
3970 			.ops = &clk_branch2_ops,
3971 		},
3972 	},
3973 };
3974 
3975 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
3976 	.halt_reg = 0x3e080,
3977 	.clkr = {
3978 		.enable_reg = 0x3e080,
3979 		.enable_mask = BIT(0),
3980 		.hw.init = &(struct clk_init_data){
3981 			.name = "gcc_usb0_phy_cfg_ahb_clk",
3982 			.parent_hws = (const struct clk_hw *[]){
3983 					&pcnoc_bfdcd_clk_src.clkr.hw },
3984 			.num_parents = 1,
3985 			.flags = CLK_SET_RATE_PARENT,
3986 			.ops = &clk_branch2_ops,
3987 		},
3988 	},
3989 };
3990 
3991 static struct clk_branch gcc_usb0_pipe_clk = {
3992 	.halt_reg = 0x3e040,
3993 	.halt_check = BRANCH_HALT_DELAY,
3994 	.clkr = {
3995 		.enable_reg = 0x3e040,
3996 		.enable_mask = BIT(0),
3997 		.hw.init = &(struct clk_init_data){
3998 			.name = "gcc_usb0_pipe_clk",
3999 			.parent_hws = (const struct clk_hw *[]){
4000 					&usb0_pipe_clk_src.clkr.hw },
4001 			.num_parents = 1,
4002 			.flags = CLK_SET_RATE_PARENT,
4003 			.ops = &clk_branch2_ops,
4004 		},
4005 	},
4006 };
4007 
4008 static struct clk_branch gcc_usb0_sleep_clk = {
4009 	.halt_reg = 0x3e004,
4010 	.clkr = {
4011 		.enable_reg = 0x3e004,
4012 		.enable_mask = BIT(0),
4013 		.hw.init = &(struct clk_init_data){
4014 			.name = "gcc_usb0_sleep_clk",
4015 			.parent_hws = (const struct clk_hw *[]){
4016 					&gcc_sleep_clk_src.clkr.hw },
4017 			.num_parents = 1,
4018 			.flags = CLK_SET_RATE_PARENT,
4019 			.ops = &clk_branch2_ops,
4020 		},
4021 	},
4022 };
4023 
4024 static struct clk_branch gcc_usb1_master_clk = {
4025 	.halt_reg = 0x3f000,
4026 	.clkr = {
4027 		.enable_reg = 0x3f000,
4028 		.enable_mask = BIT(0),
4029 		.hw.init = &(struct clk_init_data){
4030 			.name = "gcc_usb1_master_clk",
4031 			.parent_hws = (const struct clk_hw *[]){
4032 					&pcnoc_bfdcd_clk_src.clkr.hw },
4033 			.num_parents = 1,
4034 			.flags = CLK_SET_RATE_PARENT,
4035 			.ops = &clk_branch2_ops,
4036 		},
4037 	},
4038 };
4039 
4040 static struct clk_branch gcc_usb1_mock_utmi_clk = {
4041 	.halt_reg = 0x3f008,
4042 	.clkr = {
4043 		.enable_reg = 0x3f008,
4044 		.enable_mask = BIT(0),
4045 		.hw.init = &(struct clk_init_data){
4046 			.name = "gcc_usb1_mock_utmi_clk",
4047 			.parent_hws = (const struct clk_hw *[]){
4048 					&usb1_mock_utmi_clk_src.clkr.hw },
4049 			.num_parents = 1,
4050 			.flags = CLK_SET_RATE_PARENT,
4051 			.ops = &clk_branch2_ops,
4052 		},
4053 	},
4054 };
4055 
4056 static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
4057 	.halt_reg = 0x3f080,
4058 	.clkr = {
4059 		.enable_reg = 0x3f080,
4060 		.enable_mask = BIT(0),
4061 		.hw.init = &(struct clk_init_data){
4062 			.name = "gcc_usb1_phy_cfg_ahb_clk",
4063 			.parent_hws = (const struct clk_hw *[]){
4064 					&pcnoc_bfdcd_clk_src.clkr.hw },
4065 			.num_parents = 1,
4066 			.flags = CLK_SET_RATE_PARENT,
4067 			.ops = &clk_branch2_ops,
4068 		},
4069 	},
4070 };
4071 
4072 static struct clk_branch gcc_usb1_sleep_clk = {
4073 	.halt_reg = 0x3f004,
4074 	.clkr = {
4075 		.enable_reg = 0x3f004,
4076 		.enable_mask = BIT(0),
4077 		.hw.init = &(struct clk_init_data){
4078 			.name = "gcc_usb1_sleep_clk",
4079 			.parent_hws = (const struct clk_hw *[]){
4080 					&gcc_sleep_clk_src.clkr.hw },
4081 			.num_parents = 1,
4082 			.flags = CLK_SET_RATE_PARENT,
4083 			.ops = &clk_branch2_ops,
4084 		},
4085 	},
4086 };
4087 
4088 static struct clk_branch gcc_cmn_12gpll_ahb_clk = {
4089 	.halt_reg = 0x56308,
4090 	.clkr = {
4091 		.enable_reg = 0x56308,
4092 		.enable_mask = BIT(0),
4093 		.hw.init = &(struct clk_init_data){
4094 			.name = "gcc_cmn_12gpll_ahb_clk",
4095 			.parent_hws = (const struct clk_hw *[]){
4096 					&pcnoc_bfdcd_clk_src.clkr.hw },
4097 			.num_parents = 1,
4098 			.flags = CLK_SET_RATE_PARENT,
4099 			.ops = &clk_branch2_ops,
4100 		},
4101 	},
4102 };
4103 
4104 static struct clk_branch gcc_cmn_12gpll_sys_clk = {
4105 	.halt_reg = 0x5630c,
4106 	.clkr = {
4107 		.enable_reg = 0x5630c,
4108 		.enable_mask = BIT(0),
4109 		.hw.init = &(struct clk_init_data){
4110 			.name = "gcc_cmn_12gpll_sys_clk",
4111 			.parent_hws = (const struct clk_hw *[]){
4112 					&gcc_xo_clk_src.clkr.hw },
4113 			.num_parents = 1,
4114 			.flags = CLK_SET_RATE_PARENT,
4115 			.ops = &clk_branch2_ops,
4116 		},
4117 	},
4118 };
4119 
4120 static struct clk_branch gcc_sdcc1_ice_core_clk = {
4121 	.halt_reg = 0x5d014,
4122 	.clkr = {
4123 		.enable_reg = 0x5d014,
4124 		.enable_mask = BIT(0),
4125 		.hw.init = &(struct clk_init_data){
4126 			.name = "gcc_sdcc1_ice_core_clk",
4127 			.parent_hws = (const struct clk_hw *[]){
4128 					&sdcc1_ice_core_clk_src.clkr.hw },
4129 			.num_parents = 1,
4130 			.flags = CLK_SET_RATE_PARENT,
4131 			.ops = &clk_branch2_ops,
4132 		},
4133 	},
4134 };
4135 
4136 static struct clk_branch gcc_dcc_clk = {
4137 	.halt_reg = 0x77004,
4138 	.clkr = {
4139 		.enable_reg = 0x77004,
4140 		.enable_mask = BIT(0),
4141 		.hw.init = &(struct clk_init_data){
4142 			.name = "gcc_dcc_clk",
4143 			.parent_hws = (const struct clk_hw *[]){
4144 					&pcnoc_bfdcd_clk_src.clkr.hw },
4145 			.num_parents = 1,
4146 			.flags = CLK_SET_RATE_PARENT,
4147 			.ops = &clk_branch2_ops,
4148 		},
4149 	},
4150 };
4151 
4152 static const struct alpha_pll_config ubi32_pll_config = {
4153 	.l = 0x3e,
4154 	.alpha = 0x57,
4155 	.config_ctl_val = 0x240d6aa8,
4156 	.config_ctl_hi_val = 0x3c2,
4157 	.main_output_mask = BIT(0),
4158 	.aux_output_mask = BIT(1),
4159 	.pre_div_val = 0x0,
4160 	.pre_div_mask = BIT(12),
4161 	.post_div_val = 0x0,
4162 	.post_div_mask = GENMASK(9, 8),
4163 };
4164 
4165 static const struct alpha_pll_config nss_crypto_pll_config = {
4166 	.l = 0x32,
4167 	.alpha = 0x0,
4168 	.alpha_hi = 0x0,
4169 	.config_ctl_val = 0x4001055b,
4170 	.main_output_mask = BIT(0),
4171 	.pre_div_val = 0x0,
4172 	.pre_div_mask = GENMASK(14, 12),
4173 	.post_div_val = 0x1 << 8,
4174 	.post_div_mask = GENMASK(11, 8),
4175 	.vco_mask = GENMASK(21, 20),
4176 	.vco_val = 0x0,
4177 	.alpha_en_mask = BIT(24),
4178 };
4179 
4180 static struct clk_hw *gcc_ipq6018_hws[] = {
4181 	&gpll0_out_main_div2.hw,
4182 	&gcc_xo_div4_clk_src.hw,
4183 	&nss_ppe_cdiv_clk_src.hw,
4184 	&gpll6_out_main_div2.hw,
4185 	&qdss_dap_sync_clk_src.hw,
4186 	&qdss_tsctr_div2_clk_src.hw,
4187 };
4188 
4189 static struct clk_regmap *gcc_ipq6018_clks[] = {
4190 	[GPLL0_MAIN] = &gpll0_main.clkr,
4191 	[GPLL0] = &gpll0.clkr,
4192 	[UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
4193 	[UBI32_PLL] = &ubi32_pll.clkr,
4194 	[GPLL6_MAIN] = &gpll6_main.clkr,
4195 	[GPLL6] = &gpll6.clkr,
4196 	[GPLL4_MAIN] = &gpll4_main.clkr,
4197 	[GPLL4] = &gpll4.clkr,
4198 	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
4199 	[GPLL2_MAIN] = &gpll2_main.clkr,
4200 	[GPLL2] = &gpll2.clkr,
4201 	[NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
4202 	[NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
4203 	[QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
4204 	[QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
4205 	[NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
4206 	[GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
4207 	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
4208 	[SNOC_NSSNOC_BFDCD_CLK_SRC] = &snoc_nssnoc_bfdcd_clk_src.clkr,
4209 	[NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
4210 	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
4211 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
4212 	[NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr,
4213 	[NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr,
4214 	[UBI32_MEM_NOC_BFDCD_CLK_SRC] = &ubi32_mem_noc_bfdcd_clk_src.clkr,
4215 	[PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
4216 	[USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
4217 	[APSS_AHB_POSTDIV_CLK_SRC] = &apss_ahb_postdiv_clk_src.clkr,
4218 	[NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr,
4219 	[NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr,
4220 	[NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr,
4221 	[NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr,
4222 	[NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr,
4223 	[NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr,
4224 	[NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr,
4225 	[NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr,
4226 	[NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr,
4227 	[NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr,
4228 	[APSS_AXI_CLK_SRC] = &apss_axi_clk_src.clkr,
4229 	[NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
4230 	[NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr,
4231 	[NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr,
4232 	[NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr,
4233 	[NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr,
4234 	[NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr,
4235 	[NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr,
4236 	[NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr,
4237 	[NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr,
4238 	[NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
4239 	[ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
4240 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4241 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4242 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4243 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4244 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4245 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4246 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4247 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4248 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
4249 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
4250 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
4251 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
4252 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4253 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4254 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
4255 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
4256 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
4257 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
4258 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4259 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
4260 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
4261 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
4262 	[NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
4263 	[PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
4264 	[PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
4265 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4266 	[USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
4267 	[USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
4268 	[USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
4269 	[USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
4270 	[GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
4271 	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
4272 	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
4273 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
4274 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4275 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4276 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4277 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4278 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4279 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4280 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4281 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4282 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
4283 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
4284 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
4285 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4286 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4287 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
4288 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
4289 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
4290 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
4291 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
4292 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
4293 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
4294 	[GCC_XO_CLK] = &gcc_xo_clk.clkr,
4295 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4296 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4297 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4298 	[GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
4299 	[GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr,
4300 	[GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
4301 	[GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
4302 	[GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
4303 	[GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
4304 	[GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
4305 	[GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
4306 	[GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
4307 	[GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
4308 	[GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
4309 	[GCC_SNOC_NSSNOC_CLK] = &gcc_snoc_nssnoc_clk.clkr,
4310 	[GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr,
4311 	[GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr,
4312 	[GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr,
4313 	[GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr,
4314 	[GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr,
4315 	[GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr,
4316 	[GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr,
4317 	[GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr,
4318 	[GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr,
4319 	[GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr,
4320 	[GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
4321 	[GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
4322 	[GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
4323 	[GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
4324 	[GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
4325 	[GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
4326 	[GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
4327 	[GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
4328 	[GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
4329 	[GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
4330 	[GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
4331 	[GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
4332 	[GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
4333 	[GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr,
4334 	[GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr,
4335 	[GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr,
4336 	[GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr,
4337 	[GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr,
4338 	[GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
4339 	[GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
4340 	[GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
4341 	[GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
4342 	[GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
4343 	[GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
4344 	[GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
4345 	[GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
4346 	[GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
4347 	[GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
4348 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4349 	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
4350 	[GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
4351 	[GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
4352 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4353 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4354 	[GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,
4355 	[GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr,
4356 	[GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr,
4357 	[GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr,
4358 	[GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr,
4359 	[GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr,
4360 	[GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr,
4361 	[GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr,
4362 	[GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr,
4363 	[GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr,
4364 	[GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr,
4365 	[GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,
4366 	[GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,
4367 	[GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr,
4368 	[GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr,
4369 	[GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,
4370 	[GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
4371 	[GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
4372 	[GCC_SNOC_BUS_TIMEOUT2_AHB_CLK] = &gcc_snoc_bus_timeout2_ahb_clk.clkr,
4373 	[GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
4374 	[GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
4375 	[GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
4376 	[GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
4377 	[GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
4378 	[GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
4379 	[GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
4380 	[GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
4381 	[GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
4382 	[GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,
4383 	[GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,
4384 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4385 	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4386 	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4387 	[PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,
4388 	[GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
4389 	[PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,
4390 	[WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
4391 	[Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
4392 	[RBCPR_WCSS_CLK_SRC] = &rbcpr_wcss_clk_src.clkr,
4393 	[GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
4394 	[LPASS_CORE_AXIM_CLK_SRC] = &lpass_core_axim_clk_src.clkr,
4395 	[GCC_LPASS_SNOC_CFG_CLK] = &gcc_lpass_snoc_cfg_clk.clkr,
4396 	[LPASS_SNOC_CFG_CLK_SRC] = &lpass_snoc_cfg_clk_src.clkr,
4397 	[GCC_LPASS_Q6_AXIM_CLK] = &gcc_lpass_q6_axim_clk.clkr,
4398 	[LPASS_Q6_AXIM_CLK_SRC] = &lpass_q6_axim_clk_src.clkr,
4399 	[GCC_LPASS_Q6_ATBM_AT_CLK] = &gcc_lpass_q6_atbm_at_clk.clkr,
4400 	[GCC_LPASS_Q6_PCLKDBG_CLK] = &gcc_lpass_q6_pclkdbg_clk.clkr,
4401 	[GCC_LPASS_Q6SS_TSCTR_1TO2_CLK] = &gcc_lpass_q6ss_tsctr_1to2_clk.clkr,
4402 	[GCC_LPASS_Q6SS_TRIG_CLK] = &gcc_lpass_q6ss_trig_clk.clkr,
4403 	[GCC_LPASS_TBU_CLK] = &gcc_lpass_tbu_clk.clkr,
4404 	[GCC_PCNOC_LPASS_CLK] = &gcc_pcnoc_lpass_clk.clkr,
4405 	[GCC_MEM_NOC_UBI32_CLK] = &gcc_mem_noc_ubi32_clk.clkr,
4406 	[GCC_MEM_NOC_LPASS_CLK] = &gcc_mem_noc_lpass_clk.clkr,
4407 	[GCC_SNOC_LPASS_CFG_CLK] = &gcc_snoc_lpass_cfg_clk.clkr,
4408 	[QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
4409 	[QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
4410 };
4411 
4412 static const struct qcom_reset_map gcc_ipq6018_resets[] = {
4413 	[GCC_BLSP1_BCR] = { 0x01000, 0 },
4414 	[GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
4415 	[GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
4416 	[GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
4417 	[GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
4418 	[GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
4419 	[GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
4420 	[GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
4421 	[GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
4422 	[GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
4423 	[GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
4424 	[GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
4425 	[GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
4426 	[GCC_IMEM_BCR] = { 0x0e000, 0 },
4427 	[GCC_SMMU_BCR] = { 0x12000, 0 },
4428 	[GCC_APSS_TCU_BCR] = { 0x12050, 0 },
4429 	[GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
4430 	[GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
4431 	[GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
4432 	[GCC_PRNG_BCR] = { 0x13000, 0 },
4433 	[GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
4434 	[GCC_CRYPTO_BCR] = { 0x16000, 0 },
4435 	[GCC_WCSS_BCR] = { 0x18000, 0 },
4436 	[GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
4437 	[GCC_NSS_BCR] = { 0x19000, 0 },
4438 	[GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
4439 	[GCC_ADSS_BCR] = { 0x1c000, 0 },
4440 	[GCC_DDRSS_BCR] = { 0x1e000, 0 },
4441 	[GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
4442 	[GCC_PCNOC_BCR] = { 0x27018, 0 },
4443 	[GCC_TCSR_BCR] = { 0x28000, 0 },
4444 	[GCC_QDSS_BCR] = { 0x29000, 0 },
4445 	[GCC_DCD_BCR] = { 0x2a000, 0 },
4446 	[GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
4447 	[GCC_MPM_BCR] = { 0x2c000, 0 },
4448 	[GCC_SPDM_BCR] = { 0x2f000, 0 },
4449 	[GCC_RBCPR_BCR] = { 0x33000, 0 },
4450 	[GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
4451 	[GCC_TLMM_BCR] = { 0x34000, 0 },
4452 	[GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
4453 	[GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
4454 	[GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
4455 	[GCC_USB0_BCR] = { 0x3e070, 0 },
4456 	[GCC_USB1_BCR] = { 0x3f070, 0 },
4457 	[GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
4458 	[GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
4459 	[GCC_SDCC1_BCR] = { 0x42000, 0 },
4460 	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
4461 	[GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x47008, 0 },
4462 	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47010, 0 },
4463 	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
4464 	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
4465 	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
4466 	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
4467 	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
4468 	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
4469 	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
4470 	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
4471 	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
4472 	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
4473 	[GCC_UNIPHY0_BCR] = { 0x56000, 0 },
4474 	[GCC_UNIPHY1_BCR] = { 0x56100, 0 },
4475 	[GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
4476 	[GCC_QPIC_BCR] = { 0x57018, 0 },
4477 	[GCC_MDIO_BCR] = { 0x58000, 0 },
4478 	[GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
4479 	[GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
4480 	[GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
4481 	[GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
4482 	[GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
4483 	[GCC_PCIE0_BCR] = { 0x75004, 0 },
4484 	[GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
4485 	[GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
4486 	[GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
4487 	[GCC_DCC_BCR] = { 0x77000, 0 },
4488 	[GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
4489 	[GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
4490 	[GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
4491 	[GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
4492 	[GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
4493 	[GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
4494 	[GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 },
4495 	[GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 },
4496 	[GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
4497 	[GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
4498 	[GCC_NSS_CFG_ARES] = { 0x68010, 16 },
4499 	[GCC_NSS_NOC_ARES] = { 0x68010, 18 },
4500 	[GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 },
4501 	[GCC_NSS_CSR_ARES] = { 0x68010, 20 },
4502 	[GCC_NSS_CE_APB_ARES] = { 0x68010, 21 },
4503 	[GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 },
4504 	[GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 },
4505 	[GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 },
4506 	[GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 },
4507 	[GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 },
4508 	[GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 },
4509 	[GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 },
4510 	[GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 },
4511 	[GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 },
4512 	[GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
4513 	[GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
4514 	[GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
4515 	[GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
4516 	[GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
4517 	[GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
4518 	[GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
4519 	[GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
4520 	[GCC_PPE_FULL_RESET] = { 0x68014, 0 },
4521 	[GCC_UNIPHY0_SOFT_RESET] = { 0x56004, 0 },
4522 	[GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
4523 	[GCC_UNIPHY1_SOFT_RESET] = { 0x56104, 0 },
4524 	[GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
4525 	[GCC_EDMA_HW_RESET] = { 0x68014, 0 },
4526 	[GCC_NSSPORT1_RESET] = { 0x68014, 0 },
4527 	[GCC_NSSPORT2_RESET] = { 0x68014, 0 },
4528 	[GCC_NSSPORT3_RESET] = { 0x68014, 0 },
4529 	[GCC_NSSPORT4_RESET] = { 0x68014, 0 },
4530 	[GCC_NSSPORT5_RESET] = { 0x68014, 0 },
4531 	[GCC_UNIPHY0_PORT1_ARES] = { 0x56004, 0 },
4532 	[GCC_UNIPHY0_PORT2_ARES] = { 0x56004, 0 },
4533 	[GCC_UNIPHY0_PORT3_ARES] = { 0x56004, 0 },
4534 	[GCC_UNIPHY0_PORT4_ARES] = { 0x56004, 0 },
4535 	[GCC_UNIPHY0_PORT5_ARES] = { 0x56004, 0 },
4536 	[GCC_UNIPHY0_PORT_4_5_RESET] = { 0x56004, 0 },
4537 	[GCC_UNIPHY0_PORT_4_RESET] = { 0x56004, 0 },
4538 	[GCC_LPASS_BCR] = {0x1F000, 0},
4539 	[GCC_UBI32_TBU_BCR] = {0x65000, 0},
4540 	[GCC_LPASS_TBU_BCR] = {0x6C000, 0},
4541 	[GCC_WCSSAON_RESET] = {0x59010, 0},
4542 	[GCC_LPASS_Q6_AXIM_ARES] = {0x1F004, 0},
4543 	[GCC_LPASS_Q6SS_TSCTR_1TO2_ARES] = {0x1F004, 1},
4544 	[GCC_LPASS_Q6SS_TRIG_ARES] = {0x1F004, 2},
4545 	[GCC_LPASS_Q6_ATBM_AT_ARES] = {0x1F004, 3},
4546 	[GCC_LPASS_Q6_PCLKDBG_ARES] = {0x1F004, 4},
4547 	[GCC_LPASS_CORE_AXIM_ARES] = {0x1F004, 5},
4548 	[GCC_LPASS_SNOC_CFG_ARES] = {0x1F004, 6},
4549 	[GCC_WCSS_DBG_ARES] = {0x59008, 0},
4550 	[GCC_WCSS_ECAHB_ARES] = {0x59008, 1},
4551 	[GCC_WCSS_ACMT_ARES] = {0x59008, 2},
4552 	[GCC_WCSS_DBG_BDG_ARES] = {0x59008, 3},
4553 	[GCC_WCSS_AHB_S_ARES] = {0x59008, 4},
4554 	[GCC_WCSS_AXI_M_ARES] = {0x59008, 5},
4555 	[GCC_Q6SS_DBG_ARES] = {0x59110, 0},
4556 	[GCC_Q6_AHB_S_ARES] = {0x59110, 1},
4557 	[GCC_Q6_AHB_ARES] = {0x59110, 2},
4558 	[GCC_Q6_AXIM2_ARES] = {0x59110, 3},
4559 	[GCC_Q6_AXIM_ARES] = {0x59110, 4},
4560 };
4561 
4562 static const struct of_device_id gcc_ipq6018_match_table[] = {
4563 	{ .compatible = "qcom,gcc-ipq6018" },
4564 	{ }
4565 };
4566 MODULE_DEVICE_TABLE(of, gcc_ipq6018_match_table);
4567 
4568 static const struct regmap_config gcc_ipq6018_regmap_config = {
4569 	.reg_bits       = 32,
4570 	.reg_stride     = 4,
4571 	.val_bits       = 32,
4572 	.max_register   = 0x7fffc,
4573 	.fast_io	= true,
4574 };
4575 
4576 static const struct qcom_cc_desc gcc_ipq6018_desc = {
4577 	.config = &gcc_ipq6018_regmap_config,
4578 	.clks = gcc_ipq6018_clks,
4579 	.num_clks = ARRAY_SIZE(gcc_ipq6018_clks),
4580 	.resets = gcc_ipq6018_resets,
4581 	.num_resets = ARRAY_SIZE(gcc_ipq6018_resets),
4582 	.clk_hws = gcc_ipq6018_hws,
4583 	.num_clk_hws = ARRAY_SIZE(gcc_ipq6018_hws),
4584 };
4585 
4586 static int gcc_ipq6018_probe(struct platform_device *pdev)
4587 {
4588 	struct regmap *regmap;
4589 
4590 	regmap = qcom_cc_map(pdev, &gcc_ipq6018_desc);
4591 	if (IS_ERR(regmap))
4592 		return PTR_ERR(regmap);
4593 
4594 	/* Disable SW_COLLAPSE for USB0 GDSCR */
4595 	regmap_update_bits(regmap, 0x3e078, BIT(0), 0x0);
4596 	/* Enable SW_OVERRIDE for USB0 GDSCR */
4597 	regmap_update_bits(regmap, 0x3e078, BIT(2), BIT(2));
4598 	/* Disable SW_COLLAPSE for USB1 GDSCR */
4599 	regmap_update_bits(regmap, 0x3f078, BIT(0), 0x0);
4600 	/* Enable SW_OVERRIDE for USB1 GDSCR */
4601 	regmap_update_bits(regmap, 0x3f078, BIT(2), BIT(2));
4602 
4603 	/* SW Workaround for UBI Huyara PLL */
4604 	regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26));
4605 
4606 	clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
4607 
4608 	clk_alpha_pll_configure(&nss_crypto_pll_main, regmap,
4609 				&nss_crypto_pll_config);
4610 
4611 	return qcom_cc_really_probe(pdev, &gcc_ipq6018_desc, regmap);
4612 }
4613 
4614 static struct platform_driver gcc_ipq6018_driver = {
4615 	.probe = gcc_ipq6018_probe,
4616 	.driver = {
4617 		.name   = "qcom,gcc-ipq6018",
4618 		.of_match_table = gcc_ipq6018_match_table,
4619 	},
4620 };
4621 
4622 static int __init gcc_ipq6018_init(void)
4623 {
4624 	return platform_driver_register(&gcc_ipq6018_driver);
4625 }
4626 core_initcall(gcc_ipq6018_init);
4627 
4628 static void __exit gcc_ipq6018_exit(void)
4629 {
4630 	platform_driver_unregister(&gcc_ipq6018_driver);
4631 }
4632 module_exit(gcc_ipq6018_exit);
4633 
4634 MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ6018 Driver");
4635 MODULE_LICENSE("GPL v2");
4636