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