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