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