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