1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
6 #include <linux/kernel.h>
8 #include <linux/platform_device.h>
9 #include <linux/module.h>
11 #include <linux/of_device.h>
12 #include <linux/clk-provider.h>
13 #include <linux/regmap.h>
15 #include <dt-bindings/clock/qcom,gcc-ipq8074.h>
18 #include "clk-regmap.h"
21 #include "clk-branch.h"
22 #include "clk-alpha-pll.h"
23 #include "clk-regmap-divider.h"
24 #include "clk-regmap-mux.h"
52 static struct clk_alpha_pll gpll0_main = {
54 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
56 .enable_reg = 0x0b000,
57 .enable_mask = BIT(0),
58 .hw.init = &(struct clk_init_data){
60 .parent_data = &(const struct clk_parent_data){
65 .ops = &clk_alpha_pll_ops,
70 static struct clk_fixed_factor gpll0_out_main_div2 = {
73 .hw.init = &(struct clk_init_data){
74 .name = "gpll0_out_main_div2",
75 .parent_hws = (const struct clk_hw *[]){
76 &gpll0_main.clkr.hw },
78 .ops = &clk_fixed_factor_ops,
79 .flags = CLK_SET_RATE_PARENT,
83 static struct clk_alpha_pll_postdiv gpll0 = {
85 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
87 .clkr.hw.init = &(struct clk_init_data){
89 .parent_hws = (const struct clk_hw *[]){
90 &gpll0_main.clkr.hw },
92 .ops = &clk_alpha_pll_postdiv_ro_ops,
96 static struct clk_alpha_pll gpll2_main = {
98 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
100 .enable_reg = 0x0b000,
101 .enable_mask = BIT(2),
102 .hw.init = &(struct clk_init_data){
103 .name = "gpll2_main",
104 .parent_data = &(const struct clk_parent_data){
109 .ops = &clk_alpha_pll_ops,
110 .flags = CLK_IS_CRITICAL,
115 static struct clk_alpha_pll_postdiv gpll2 = {
117 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
119 .clkr.hw.init = &(struct clk_init_data){
121 .parent_hws = (const struct clk_hw *[]){
122 &gpll2_main.clkr.hw },
124 .ops = &clk_alpha_pll_postdiv_ro_ops,
125 .flags = CLK_SET_RATE_PARENT,
129 static struct clk_alpha_pll gpll4_main = {
131 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
133 .enable_reg = 0x0b000,
134 .enable_mask = BIT(5),
135 .hw.init = &(struct clk_init_data){
136 .name = "gpll4_main",
137 .parent_data = &(const struct clk_parent_data){
142 .ops = &clk_alpha_pll_ops,
143 .flags = CLK_IS_CRITICAL,
148 static struct clk_alpha_pll_postdiv gpll4 = {
150 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
152 .clkr.hw.init = &(struct clk_init_data){
154 .parent_hws = (const struct clk_hw *[]){
155 &gpll4_main.clkr.hw },
157 .ops = &clk_alpha_pll_postdiv_ro_ops,
158 .flags = CLK_SET_RATE_PARENT,
162 static struct clk_alpha_pll gpll6_main = {
164 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
165 .flags = SUPPORTS_DYNAMIC_UPDATE,
167 .enable_reg = 0x0b000,
168 .enable_mask = BIT(7),
169 .hw.init = &(struct clk_init_data){
170 .name = "gpll6_main",
171 .parent_data = &(const struct clk_parent_data){
176 .ops = &clk_alpha_pll_ops,
177 .flags = CLK_IS_CRITICAL,
182 static struct clk_alpha_pll_postdiv gpll6 = {
184 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
186 .clkr.hw.init = &(struct clk_init_data){
188 .parent_hws = (const struct clk_hw *[]){
189 &gpll6_main.clkr.hw },
191 .ops = &clk_alpha_pll_postdiv_ro_ops,
192 .flags = CLK_SET_RATE_PARENT,
196 static struct clk_fixed_factor gpll6_out_main_div2 = {
199 .hw.init = &(struct clk_init_data){
200 .name = "gpll6_out_main_div2",
201 .parent_hws = (const struct clk_hw *[]){
202 &gpll6_main.clkr.hw },
204 .ops = &clk_fixed_factor_ops,
205 .flags = CLK_SET_RATE_PARENT,
209 static struct clk_alpha_pll ubi32_pll_main = {
211 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
212 .flags = SUPPORTS_DYNAMIC_UPDATE,
214 .enable_reg = 0x0b000,
215 .enable_mask = BIT(6),
216 .hw.init = &(struct clk_init_data){
217 .name = "ubi32_pll_main",
218 .parent_data = &(const struct clk_parent_data){
223 .ops = &clk_alpha_pll_huayra_ops,
228 static struct clk_alpha_pll_postdiv ubi32_pll = {
230 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
232 .clkr.hw.init = &(struct clk_init_data){
234 .parent_hws = (const struct clk_hw *[]){
235 &ubi32_pll_main.clkr.hw },
237 .ops = &clk_alpha_pll_postdiv_ro_ops,
238 .flags = CLK_SET_RATE_PARENT,
242 static struct clk_alpha_pll nss_crypto_pll_main = {
244 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
246 .enable_reg = 0x0b000,
247 .enable_mask = BIT(4),
248 .hw.init = &(struct clk_init_data){
249 .name = "nss_crypto_pll_main",
250 .parent_data = &(const struct clk_parent_data){
255 .ops = &clk_alpha_pll_ops,
260 static struct clk_alpha_pll_postdiv nss_crypto_pll = {
262 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
264 .clkr.hw.init = &(struct clk_init_data){
265 .name = "nss_crypto_pll",
266 .parent_hws = (const struct clk_hw *[]){
267 &nss_crypto_pll_main.clkr.hw },
269 .ops = &clk_alpha_pll_postdiv_ro_ops,
270 .flags = CLK_SET_RATE_PARENT,
274 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
275 F(19200000, P_XO, 1, 0, 0),
276 F(50000000, P_GPLL0, 16, 0, 0),
277 F(100000000, P_GPLL0, 8, 0, 0),
281 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
282 { .fw_name = "xo", .name = "xo" },
283 { .hw = &gpll0.clkr.hw},
284 { .hw = &gpll0_out_main_div2.hw},
287 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
293 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
295 .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
297 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
298 .clkr.hw.init = &(struct clk_init_data){
299 .name = "pcnoc_bfdcd_clk_src",
300 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
301 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
302 .ops = &clk_rcg2_ops,
303 .flags = CLK_IS_CRITICAL,
307 static struct clk_fixed_factor pcnoc_clk_src = {
310 .hw.init = &(struct clk_init_data){
311 .name = "pcnoc_clk_src",
312 .parent_hws = (const struct clk_hw *[]){
313 &pcnoc_bfdcd_clk_src.clkr.hw },
315 .ops = &clk_fixed_factor_ops,
316 .flags = CLK_SET_RATE_PARENT,
320 static struct clk_branch gcc_sleep_clk_src = {
323 .enable_reg = 0x30000,
324 .enable_mask = BIT(1),
325 .hw.init = &(struct clk_init_data){
326 .name = "gcc_sleep_clk_src",
327 .parent_data = &(const struct clk_parent_data){
328 .fw_name = "sleep_clk",
332 .ops = &clk_branch2_ops,
333 .flags = CLK_IS_CRITICAL,
338 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
339 F(19200000, P_XO, 1, 0, 0),
340 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
341 F(50000000, P_GPLL0, 16, 0, 0),
345 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
347 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
349 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
350 .clkr.hw.init = &(struct clk_init_data){
351 .name = "blsp1_qup1_i2c_apps_clk_src",
352 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
353 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
354 .ops = &clk_rcg2_ops,
358 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
359 F(960000, P_XO, 10, 1, 2),
360 F(4800000, P_XO, 4, 0, 0),
361 F(9600000, P_XO, 2, 0, 0),
362 F(12500000, P_GPLL0_DIV2, 16, 1, 2),
363 F(16000000, P_GPLL0, 10, 1, 5),
364 F(19200000, P_XO, 1, 0, 0),
365 F(25000000, P_GPLL0, 16, 1, 2),
366 F(50000000, P_GPLL0, 16, 0, 0),
370 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
372 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
375 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
376 .clkr.hw.init = &(struct clk_init_data){
377 .name = "blsp1_qup1_spi_apps_clk_src",
378 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
379 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
380 .ops = &clk_rcg2_ops,
384 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
386 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
388 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
389 .clkr.hw.init = &(struct clk_init_data){
390 .name = "blsp1_qup2_i2c_apps_clk_src",
391 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
392 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
393 .ops = &clk_rcg2_ops,
397 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
399 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
402 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
403 .clkr.hw.init = &(struct clk_init_data){
404 .name = "blsp1_qup2_spi_apps_clk_src",
405 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
406 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
407 .ops = &clk_rcg2_ops,
411 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
413 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
415 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
416 .clkr.hw.init = &(struct clk_init_data){
417 .name = "blsp1_qup3_i2c_apps_clk_src",
418 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
419 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
420 .ops = &clk_rcg2_ops,
424 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
426 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
429 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
430 .clkr.hw.init = &(struct clk_init_data){
431 .name = "blsp1_qup3_spi_apps_clk_src",
432 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
433 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
434 .ops = &clk_rcg2_ops,
438 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
440 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
442 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
443 .clkr.hw.init = &(struct clk_init_data){
444 .name = "blsp1_qup4_i2c_apps_clk_src",
445 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
446 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
447 .ops = &clk_rcg2_ops,
451 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
453 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
456 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
457 .clkr.hw.init = &(struct clk_init_data){
458 .name = "blsp1_qup4_spi_apps_clk_src",
459 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
460 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
461 .ops = &clk_rcg2_ops,
465 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
467 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
469 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
470 .clkr.hw.init = &(struct clk_init_data){
471 .name = "blsp1_qup5_i2c_apps_clk_src",
472 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
473 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
474 .ops = &clk_rcg2_ops,
478 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
480 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
483 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
484 .clkr.hw.init = &(struct clk_init_data){
485 .name = "blsp1_qup5_spi_apps_clk_src",
486 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
487 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
488 .ops = &clk_rcg2_ops,
492 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
494 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
496 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
497 .clkr.hw.init = &(struct clk_init_data){
498 .name = "blsp1_qup6_i2c_apps_clk_src",
499 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
500 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
501 .ops = &clk_rcg2_ops,
505 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
507 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
510 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
511 .clkr.hw.init = &(struct clk_init_data){
512 .name = "blsp1_qup6_spi_apps_clk_src",
513 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
514 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
515 .ops = &clk_rcg2_ops,
519 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
520 F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
521 F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
522 F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
523 F(16000000, P_GPLL0_DIV2, 5, 1, 5),
524 F(19200000, P_XO, 1, 0, 0),
525 F(24000000, P_GPLL0, 1, 3, 100),
526 F(25000000, P_GPLL0, 16, 1, 2),
527 F(32000000, P_GPLL0, 1, 1, 25),
528 F(40000000, P_GPLL0, 1, 1, 20),
529 F(46400000, P_GPLL0, 1, 29, 500),
530 F(48000000, P_GPLL0, 1, 3, 50),
531 F(51200000, P_GPLL0, 1, 8, 125),
532 F(56000000, P_GPLL0, 1, 7, 100),
533 F(58982400, P_GPLL0, 1, 1152, 15625),
534 F(60000000, P_GPLL0, 1, 3, 40),
535 F(64000000, P_GPLL0, 12.5, 1, 1),
539 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
541 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
544 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
545 .clkr.hw.init = &(struct clk_init_data){
546 .name = "blsp1_uart1_apps_clk_src",
547 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
548 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
549 .ops = &clk_rcg2_ops,
553 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
555 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
558 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
559 .clkr.hw.init = &(struct clk_init_data){
560 .name = "blsp1_uart2_apps_clk_src",
561 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
562 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
563 .ops = &clk_rcg2_ops,
567 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
569 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
572 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
573 .clkr.hw.init = &(struct clk_init_data){
574 .name = "blsp1_uart3_apps_clk_src",
575 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
576 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
577 .ops = &clk_rcg2_ops,
581 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
583 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
586 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
587 .clkr.hw.init = &(struct clk_init_data){
588 .name = "blsp1_uart4_apps_clk_src",
589 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
590 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
591 .ops = &clk_rcg2_ops,
595 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
597 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
600 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
601 .clkr.hw.init = &(struct clk_init_data){
602 .name = "blsp1_uart5_apps_clk_src",
603 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
604 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
605 .ops = &clk_rcg2_ops,
609 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
611 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
614 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
615 .clkr.hw.init = &(struct clk_init_data){
616 .name = "blsp1_uart6_apps_clk_src",
617 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
618 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
619 .ops = &clk_rcg2_ops,
623 static const struct clk_parent_data gcc_xo_gpll0[] = {
625 { .hw = &gpll0.clkr.hw },
628 static const struct parent_map gcc_xo_gpll0_map[] = {
633 static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
634 F(19200000, P_XO, 1, 0, 0),
635 F(200000000, P_GPLL0, 4, 0, 0),
639 static struct clk_rcg2 pcie0_axi_clk_src = {
641 .freq_tbl = ftbl_pcie_axi_clk_src,
643 .parent_map = gcc_xo_gpll0_map,
644 .clkr.hw.init = &(struct clk_init_data){
645 .name = "pcie0_axi_clk_src",
646 .parent_data = gcc_xo_gpll0,
647 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
648 .ops = &clk_rcg2_ops,
652 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
653 F(19200000, P_XO, 1, 0, 0),
656 static const struct clk_parent_data gcc_xo_gpll0_sleep_clk[] = {
657 { .fw_name = "xo", .name = "xo" },
658 { .hw = &gpll0.clkr.hw },
659 { .fw_name = "sleep_clk", .name = "sleep_clk" },
662 static const struct parent_map gcc_xo_gpll0_sleep_clk_map[] = {
668 static struct clk_rcg2 pcie0_aux_clk_src = {
670 .freq_tbl = ftbl_pcie_aux_clk_src,
673 .parent_map = gcc_xo_gpll0_sleep_clk_map,
674 .clkr.hw.init = &(struct clk_init_data){
675 .name = "pcie0_aux_clk_src",
676 .parent_data = gcc_xo_gpll0_sleep_clk,
677 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
678 .ops = &clk_rcg2_ops,
682 static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
683 { .fw_name = "pcie0_pipe", .name = "pcie20_phy0_pipe_clk" },
684 { .fw_name = "xo", .name = "xo" },
687 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
688 { P_PCIE20_PHY0_PIPE, 0 },
692 static struct clk_regmap_mux pcie0_pipe_clk_src = {
696 .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
698 .hw.init = &(struct clk_init_data){
699 .name = "pcie0_pipe_clk_src",
700 .parent_data = gcc_pcie20_phy0_pipe_clk_xo,
701 .num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo),
702 .ops = &clk_regmap_mux_closest_ops,
703 .flags = CLK_SET_RATE_PARENT,
708 static struct clk_rcg2 pcie1_axi_clk_src = {
710 .freq_tbl = ftbl_pcie_axi_clk_src,
712 .parent_map = gcc_xo_gpll0_map,
713 .clkr.hw.init = &(struct clk_init_data){
714 .name = "pcie1_axi_clk_src",
715 .parent_data = gcc_xo_gpll0,
716 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
717 .ops = &clk_rcg2_ops,
721 static struct clk_rcg2 pcie1_aux_clk_src = {
723 .freq_tbl = ftbl_pcie_aux_clk_src,
726 .parent_map = gcc_xo_gpll0_sleep_clk_map,
727 .clkr.hw.init = &(struct clk_init_data){
728 .name = "pcie1_aux_clk_src",
729 .parent_data = gcc_xo_gpll0_sleep_clk,
730 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
731 .ops = &clk_rcg2_ops,
735 static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = {
736 { .fw_name = "pcie1_pipe", .name = "pcie20_phy1_pipe_clk" },
737 { .fw_name = "xo", .name = "xo" },
740 static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
741 { P_PCIE20_PHY1_PIPE, 0 },
745 static struct clk_regmap_mux pcie1_pipe_clk_src = {
749 .parent_map = gcc_pcie20_phy1_pipe_clk_xo_map,
751 .hw.init = &(struct clk_init_data){
752 .name = "pcie1_pipe_clk_src",
753 .parent_data = gcc_pcie20_phy1_pipe_clk_xo,
754 .num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo),
755 .ops = &clk_regmap_mux_closest_ops,
756 .flags = CLK_SET_RATE_PARENT,
761 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
762 F(144000, P_XO, 16, 3, 25),
763 F(400000, P_XO, 12, 1, 4),
764 F(24000000, P_GPLL2, 12, 1, 4),
765 F(48000000, P_GPLL2, 12, 1, 2),
766 F(96000000, P_GPLL2, 12, 0, 0),
767 F(177777778, P_GPLL0, 4.5, 0, 0),
768 F(192000000, P_GPLL2, 6, 0, 0),
769 F(384000000, P_GPLL2, 3, 0, 0),
773 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
774 { .fw_name = "xo", .name = "xo" },
775 { .hw = &gpll0.clkr.hw },
776 { .hw = &gpll2.clkr.hw },
777 { .hw = &gpll0_out_main_div2.hw },
780 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
787 static struct clk_rcg2 sdcc1_apps_clk_src = {
789 .freq_tbl = ftbl_sdcc_apps_clk_src,
792 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
793 .clkr.hw.init = &(struct clk_init_data){
794 .name = "sdcc1_apps_clk_src",
795 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
796 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
797 .ops = &clk_rcg2_floor_ops,
801 static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
802 F(19200000, P_XO, 1, 0, 0),
803 F(160000000, P_GPLL0, 5, 0, 0),
804 F(308570000, P_GPLL6, 3.5, 0, 0),
807 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
808 { .fw_name = "xo", .name = "xo" },
809 { .hw = &gpll0.clkr.hw },
810 { .hw = &gpll6.clkr.hw },
811 { .hw = &gpll0_out_main_div2.hw },
814 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
821 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
823 .freq_tbl = ftbl_sdcc_ice_core_clk_src,
826 .parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
827 .clkr.hw.init = &(struct clk_init_data){
828 .name = "sdcc1_ice_core_clk_src",
829 .parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
830 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_div2),
831 .ops = &clk_rcg2_ops,
835 static struct clk_rcg2 sdcc2_apps_clk_src = {
837 .freq_tbl = ftbl_sdcc_apps_clk_src,
840 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
841 .clkr.hw.init = &(struct clk_init_data){
842 .name = "sdcc2_apps_clk_src",
843 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
844 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
845 .ops = &clk_rcg2_floor_ops,
849 static const struct freq_tbl ftbl_usb_master_clk_src[] = {
850 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
851 F(100000000, P_GPLL0, 8, 0, 0),
852 F(133330000, P_GPLL0, 6, 0, 0),
856 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
857 { .fw_name = "xo", .name = "xo" },
858 { .hw = &gpll0_out_main_div2.hw },
859 { .hw = &gpll0.clkr.hw },
862 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
868 static struct clk_rcg2 usb0_master_clk_src = {
870 .freq_tbl = ftbl_usb_master_clk_src,
873 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
874 .clkr.hw.init = &(struct clk_init_data){
875 .name = "usb0_master_clk_src",
876 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
877 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
878 .ops = &clk_rcg2_ops,
882 static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
883 F(19200000, P_XO, 1, 0, 0),
887 static struct clk_rcg2 usb0_aux_clk_src = {
889 .freq_tbl = ftbl_usb_aux_clk_src,
892 .parent_map = gcc_xo_gpll0_sleep_clk_map,
893 .clkr.hw.init = &(struct clk_init_data){
894 .name = "usb0_aux_clk_src",
895 .parent_data = gcc_xo_gpll0_sleep_clk,
896 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
897 .ops = &clk_rcg2_ops,
901 static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
902 F(19200000, P_XO, 1, 0, 0),
903 F(20000000, P_GPLL6, 6, 1, 9),
904 F(60000000, P_GPLL6, 6, 1, 3),
908 static const struct clk_parent_data gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
909 { .fw_name = "xo", .name = "xo" },
910 { .hw = &gpll6.clkr.hw },
911 { .hw = &gpll0.clkr.hw },
912 { .hw = &gpll0_out_main_div2.hw },
915 static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
922 static struct clk_rcg2 usb0_mock_utmi_clk_src = {
924 .freq_tbl = ftbl_usb_mock_utmi_clk_src,
927 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
928 .clkr.hw.init = &(struct clk_init_data){
929 .name = "usb0_mock_utmi_clk_src",
930 .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
931 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_gpll0_out_main_div2),
932 .ops = &clk_rcg2_ops,
936 static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
937 { .fw_name = "usb3phy_0_cc_pipe_clk", .name = "usb3phy_0_cc_pipe_clk" },
938 { .fw_name = "xo", .name = "xo" },
941 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
942 { P_USB3PHY_0_PIPE, 0 },
946 static struct clk_regmap_mux usb0_pipe_clk_src = {
950 .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
952 .hw.init = &(struct clk_init_data){
953 .name = "usb0_pipe_clk_src",
954 .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
955 .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),
956 .ops = &clk_regmap_mux_closest_ops,
957 .flags = CLK_SET_RATE_PARENT,
962 static struct clk_rcg2 usb1_master_clk_src = {
964 .freq_tbl = ftbl_usb_master_clk_src,
967 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
968 .clkr.hw.init = &(struct clk_init_data){
969 .name = "usb1_master_clk_src",
970 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
971 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
972 .ops = &clk_rcg2_ops,
976 static struct clk_rcg2 usb1_aux_clk_src = {
978 .freq_tbl = ftbl_usb_aux_clk_src,
981 .parent_map = gcc_xo_gpll0_sleep_clk_map,
982 .clkr.hw.init = &(struct clk_init_data){
983 .name = "usb1_aux_clk_src",
984 .parent_data = gcc_xo_gpll0_sleep_clk,
985 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
986 .ops = &clk_rcg2_ops,
990 static struct clk_rcg2 usb1_mock_utmi_clk_src = {
992 .freq_tbl = ftbl_usb_mock_utmi_clk_src,
995 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
996 .clkr.hw.init = &(struct clk_init_data){
997 .name = "usb1_mock_utmi_clk_src",
998 .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
999 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_gpll0_out_main_div2),
1000 .ops = &clk_rcg2_ops,
1004 static const struct clk_parent_data gcc_usb3phy_1_cc_pipe_clk_xo[] = {
1005 { .fw_name = "usb3phy_1_cc_pipe_clk", .name = "usb3phy_1_cc_pipe_clk" },
1006 { .fw_name = "xo", .name = "xo" },
1009 static const struct parent_map gcc_usb3phy_1_cc_pipe_clk_xo_map[] = {
1010 { P_USB3PHY_1_PIPE, 0 },
1014 static struct clk_regmap_mux usb1_pipe_clk_src = {
1018 .parent_map = gcc_usb3phy_1_cc_pipe_clk_xo_map,
1020 .hw.init = &(struct clk_init_data){
1021 .name = "usb1_pipe_clk_src",
1022 .parent_data = gcc_usb3phy_1_cc_pipe_clk_xo,
1023 .num_parents = ARRAY_SIZE(gcc_usb3phy_1_cc_pipe_clk_xo),
1024 .ops = &clk_regmap_mux_closest_ops,
1025 .flags = CLK_SET_RATE_PARENT,
1030 static struct clk_branch gcc_xo_clk_src = {
1031 .halt_reg = 0x30018,
1033 .enable_reg = 0x30018,
1034 .enable_mask = BIT(1),
1035 .hw.init = &(struct clk_init_data){
1036 .name = "gcc_xo_clk_src",
1037 .parent_data = &(const struct clk_parent_data){
1042 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1043 .ops = &clk_branch2_ops,
1048 static struct clk_fixed_factor gcc_xo_div4_clk_src = {
1051 .hw.init = &(struct clk_init_data){
1052 .name = "gcc_xo_div4_clk_src",
1053 .parent_hws = (const struct clk_hw *[]){
1054 &gcc_xo_clk_src.clkr.hw },
1056 .ops = &clk_fixed_factor_ops,
1057 .flags = CLK_SET_RATE_PARENT,
1061 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1062 F(19200000, P_XO, 1, 0, 0),
1063 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1064 F(100000000, P_GPLL0, 8, 0, 0),
1065 F(133333333, P_GPLL0, 6, 0, 0),
1066 F(160000000, P_GPLL0, 5, 0, 0),
1067 F(200000000, P_GPLL0, 4, 0, 0),
1068 F(266666667, P_GPLL0, 3, 0, 0),
1072 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
1073 { .fw_name = "xo", .name = "xo" },
1074 { .hw = &gpll0.clkr.hw },
1075 { .hw = &gpll6.clkr.hw },
1076 { .hw = &gpll0_out_main_div2.hw },
1079 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
1083 { P_GPLL0_DIV2, 3 },
1086 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1087 .cmd_rcgr = 0x26004,
1088 .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1090 .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1091 .clkr.hw.init = &(struct clk_init_data){
1092 .name = "system_noc_bfdcd_clk_src",
1093 .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1094 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_out_main_div2),
1095 .ops = &clk_rcg2_ops,
1096 .flags = CLK_IS_CRITICAL,
1100 static struct clk_fixed_factor system_noc_clk_src = {
1103 .hw.init = &(struct clk_init_data){
1104 .name = "system_noc_clk_src",
1105 .parent_hws = (const struct clk_hw *[]){
1106 &system_noc_bfdcd_clk_src.clkr.hw },
1108 .ops = &clk_fixed_factor_ops,
1109 .flags = CLK_SET_RATE_PARENT,
1113 static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
1114 F(19200000, P_XO, 1, 0, 0),
1115 F(200000000, P_GPLL0, 4, 0, 0),
1119 static struct clk_rcg2 nss_ce_clk_src = {
1120 .cmd_rcgr = 0x68098,
1121 .freq_tbl = ftbl_nss_ce_clk_src,
1123 .parent_map = gcc_xo_gpll0_map,
1124 .clkr.hw.init = &(struct clk_init_data){
1125 .name = "nss_ce_clk_src",
1126 .parent_data = gcc_xo_gpll0,
1127 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1128 .ops = &clk_rcg2_ops,
1132 static const struct freq_tbl ftbl_nss_noc_bfdcd_clk_src[] = {
1133 F(19200000, P_XO, 1, 0, 0),
1134 F(461500000, P_BIAS_PLL_NSS_NOC, 1, 0, 0),
1138 static const struct clk_parent_data gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2[] = {
1139 { .fw_name = "xo", .name = "xo" },
1140 { .fw_name = "bias_pll_nss_noc_clk", .name = "bias_pll_nss_noc_clk" },
1141 { .hw = &gpll0.clkr.hw },
1142 { .hw = &gpll2.clkr.hw },
1145 static const struct parent_map gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map[] = {
1147 { P_BIAS_PLL_NSS_NOC, 1 },
1152 static struct clk_rcg2 nss_noc_bfdcd_clk_src = {
1153 .cmd_rcgr = 0x68088,
1154 .freq_tbl = ftbl_nss_noc_bfdcd_clk_src,
1156 .parent_map = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map,
1157 .clkr.hw.init = &(struct clk_init_data){
1158 .name = "nss_noc_bfdcd_clk_src",
1159 .parent_data = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2,
1160 .num_parents = ARRAY_SIZE(gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2),
1161 .ops = &clk_rcg2_ops,
1165 static struct clk_fixed_factor nss_noc_clk_src = {
1168 .hw.init = &(struct clk_init_data){
1169 .name = "nss_noc_clk_src",
1170 .parent_hws = (const struct clk_hw *[]){
1171 &nss_noc_bfdcd_clk_src.clkr.hw },
1173 .ops = &clk_fixed_factor_ops,
1174 .flags = CLK_SET_RATE_PARENT,
1178 static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
1179 F(19200000, P_XO, 1, 0, 0),
1180 F(600000000, P_NSS_CRYPTO_PLL, 1, 0, 0),
1184 static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
1185 { .fw_name = "xo", .name = "xo" },
1186 { .hw = &nss_crypto_pll.clkr.hw },
1187 { .hw = &gpll0.clkr.hw },
1190 static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
1192 { P_NSS_CRYPTO_PLL, 1 },
1196 static struct clk_rcg2 nss_crypto_clk_src = {
1197 .cmd_rcgr = 0x68144,
1198 .freq_tbl = ftbl_nss_crypto_clk_src,
1201 .parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
1202 .clkr.hw.init = &(struct clk_init_data){
1203 .name = "nss_crypto_clk_src",
1204 .parent_data = gcc_xo_nss_crypto_pll_gpll0,
1205 .num_parents = ARRAY_SIZE(gcc_xo_nss_crypto_pll_gpll0),
1206 .ops = &clk_rcg2_ops,
1210 static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1211 F(19200000, P_XO, 1, 0, 0),
1212 F(187200000, P_UBI32_PLL, 8, 0, 0),
1213 F(748800000, P_UBI32_PLL, 2, 0, 0),
1214 F(1497600000, P_UBI32_PLL, 1, 0, 0),
1215 F(1689600000, P_UBI32_PLL, 1, 0, 0),
1219 static const struct clk_parent_data gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
1220 { .fw_name = "xo", .name = "xo" },
1221 { .hw = &ubi32_pll.clkr.hw },
1222 { .hw = &gpll0.clkr.hw },
1223 { .hw = &gpll2.clkr.hw },
1224 { .hw = &gpll4.clkr.hw },
1225 { .hw = &gpll6.clkr.hw },
1228 static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
1237 static struct clk_rcg2 nss_ubi0_clk_src = {
1238 .cmd_rcgr = 0x68104,
1239 .freq_tbl = ftbl_nss_ubi_clk_src,
1241 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1242 .clkr.hw.init = &(struct clk_init_data){
1243 .name = "nss_ubi0_clk_src",
1244 .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1245 .num_parents = ARRAY_SIZE(gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6),
1246 .ops = &clk_rcg2_ops,
1247 .flags = CLK_SET_RATE_PARENT,
1251 static struct clk_regmap_div nss_ubi0_div_clk_src = {
1256 .hw.init = &(struct clk_init_data){
1257 .name = "nss_ubi0_div_clk_src",
1258 .parent_hws = (const struct clk_hw *[]){
1259 &nss_ubi0_clk_src.clkr.hw },
1261 .ops = &clk_regmap_div_ro_ops,
1262 .flags = CLK_SET_RATE_PARENT,
1267 static struct clk_rcg2 nss_ubi1_clk_src = {
1268 .cmd_rcgr = 0x68124,
1269 .freq_tbl = ftbl_nss_ubi_clk_src,
1271 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1272 .clkr.hw.init = &(struct clk_init_data){
1273 .name = "nss_ubi1_clk_src",
1274 .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1275 .num_parents = ARRAY_SIZE(gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6),
1276 .ops = &clk_rcg2_ops,
1277 .flags = CLK_SET_RATE_PARENT,
1281 static struct clk_regmap_div nss_ubi1_div_clk_src = {
1286 .hw.init = &(struct clk_init_data){
1287 .name = "nss_ubi1_div_clk_src",
1288 .parent_hws = (const struct clk_hw *[]){
1289 &nss_ubi1_clk_src.clkr.hw },
1291 .ops = &clk_regmap_div_ro_ops,
1292 .flags = CLK_SET_RATE_PARENT,
1297 static const struct freq_tbl ftbl_ubi_mpt_clk_src[] = {
1298 F(19200000, P_XO, 1, 0, 0),
1299 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1303 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2[] = {
1304 { .fw_name = "xo", .name = "xo" },
1305 { .hw = &gpll0_out_main_div2.hw },
1308 static const struct parent_map gcc_xo_gpll0_out_main_div2_map[] = {
1310 { P_GPLL0_DIV2, 1 },
1313 static struct clk_rcg2 ubi_mpt_clk_src = {
1314 .cmd_rcgr = 0x68090,
1315 .freq_tbl = ftbl_ubi_mpt_clk_src,
1317 .parent_map = gcc_xo_gpll0_out_main_div2_map,
1318 .clkr.hw.init = &(struct clk_init_data){
1319 .name = "ubi_mpt_clk_src",
1320 .parent_data = gcc_xo_gpll0_out_main_div2,
1321 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2),
1322 .ops = &clk_rcg2_ops,
1326 static const struct freq_tbl ftbl_nss_imem_clk_src[] = {
1327 F(19200000, P_XO, 1, 0, 0),
1328 F(400000000, P_GPLL0, 2, 0, 0),
1332 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
1333 { .fw_name = "xo", .name = "xo" },
1334 { .hw = &gpll0.clkr.hw },
1335 { .hw = &gpll4.clkr.hw },
1338 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
1344 static struct clk_rcg2 nss_imem_clk_src = {
1345 .cmd_rcgr = 0x68158,
1346 .freq_tbl = ftbl_nss_imem_clk_src,
1348 .parent_map = gcc_xo_gpll0_gpll4_map,
1349 .clkr.hw.init = &(struct clk_init_data){
1350 .name = "nss_imem_clk_src",
1351 .parent_data = gcc_xo_gpll0_gpll4,
1352 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
1353 .ops = &clk_rcg2_ops,
1357 static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
1358 F(19200000, P_XO, 1, 0, 0),
1359 F(300000000, P_BIAS_PLL, 1, 0, 0),
1363 static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
1364 { .fw_name = "xo", .name = "xo" },
1365 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1366 { .hw = &gpll0.clkr.hw },
1367 { .hw = &gpll4.clkr.hw },
1368 { .hw = &nss_crypto_pll.clkr.hw },
1369 { .hw = &ubi32_pll.clkr.hw },
1372 static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
1377 { P_NSS_CRYPTO_PLL, 4 },
1381 static struct clk_rcg2 nss_ppe_clk_src = {
1382 .cmd_rcgr = 0x68080,
1383 .freq_tbl = ftbl_nss_ppe_clk_src,
1385 .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
1386 .clkr.hw.init = &(struct clk_init_data){
1387 .name = "nss_ppe_clk_src",
1388 .parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
1389 .num_parents = ARRAY_SIZE(gcc_xo_bias_gpll0_gpll4_nss_ubi32),
1390 .ops = &clk_rcg2_ops,
1394 static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1397 .hw.init = &(struct clk_init_data){
1398 .name = "nss_ppe_cdiv_clk_src",
1399 .parent_hws = (const struct clk_hw *[]){
1400 &nss_ppe_clk_src.clkr.hw },
1402 .ops = &clk_fixed_factor_ops,
1403 .flags = CLK_SET_RATE_PARENT,
1407 static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
1408 F(19200000, P_XO, 1, 0, 0),
1409 F(25000000, P_UNIPHY0_RX, 5, 0, 0),
1410 F(125000000, P_UNIPHY0_RX, 1, 0, 0),
1414 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
1415 { .fw_name = "xo", .name = "xo" },
1416 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1417 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1418 { .hw = &ubi32_pll.clkr.hw },
1419 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1422 static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
1424 { P_UNIPHY0_RX, 1 },
1425 { P_UNIPHY0_TX, 2 },
1430 static struct clk_rcg2 nss_port1_rx_clk_src = {
1431 .cmd_rcgr = 0x68020,
1432 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1434 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1435 .clkr.hw.init = &(struct clk_init_data){
1436 .name = "nss_port1_rx_clk_src",
1437 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1438 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1439 .ops = &clk_rcg2_ops,
1443 static struct clk_regmap_div nss_port1_rx_div_clk_src = {
1448 .hw.init = &(struct clk_init_data){
1449 .name = "nss_port1_rx_div_clk_src",
1450 .parent_hws = (const struct clk_hw *[]){
1451 &nss_port1_rx_clk_src.clkr.hw },
1453 .ops = &clk_regmap_div_ops,
1454 .flags = CLK_SET_RATE_PARENT,
1459 static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
1460 F(19200000, P_XO, 1, 0, 0),
1461 F(25000000, P_UNIPHY0_TX, 5, 0, 0),
1462 F(125000000, P_UNIPHY0_TX, 1, 0, 0),
1466 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
1467 { .fw_name = "xo", .name = "xo" },
1468 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1469 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1470 { .hw = &ubi32_pll.clkr.hw },
1471 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1474 static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
1476 { P_UNIPHY0_TX, 1 },
1477 { P_UNIPHY0_RX, 2 },
1482 static struct clk_rcg2 nss_port1_tx_clk_src = {
1483 .cmd_rcgr = 0x68028,
1484 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1486 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1487 .clkr.hw.init = &(struct clk_init_data){
1488 .name = "nss_port1_tx_clk_src",
1489 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1490 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1491 .ops = &clk_rcg2_ops,
1495 static struct clk_regmap_div nss_port1_tx_div_clk_src = {
1500 .hw.init = &(struct clk_init_data){
1501 .name = "nss_port1_tx_div_clk_src",
1502 .parent_hws = (const struct clk_hw *[]){
1503 &nss_port1_tx_clk_src.clkr.hw },
1505 .ops = &clk_regmap_div_ops,
1506 .flags = CLK_SET_RATE_PARENT,
1511 static struct clk_rcg2 nss_port2_rx_clk_src = {
1512 .cmd_rcgr = 0x68030,
1513 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1515 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1516 .clkr.hw.init = &(struct clk_init_data){
1517 .name = "nss_port2_rx_clk_src",
1518 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1519 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1520 .ops = &clk_rcg2_ops,
1524 static struct clk_regmap_div nss_port2_rx_div_clk_src = {
1529 .hw.init = &(struct clk_init_data){
1530 .name = "nss_port2_rx_div_clk_src",
1531 .parent_hws = (const struct clk_hw *[]){
1532 &nss_port2_rx_clk_src.clkr.hw },
1534 .ops = &clk_regmap_div_ops,
1535 .flags = CLK_SET_RATE_PARENT,
1540 static struct clk_rcg2 nss_port2_tx_clk_src = {
1541 .cmd_rcgr = 0x68038,
1542 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1544 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1545 .clkr.hw.init = &(struct clk_init_data){
1546 .name = "nss_port2_tx_clk_src",
1547 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1548 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1549 .ops = &clk_rcg2_ops,
1553 static struct clk_regmap_div nss_port2_tx_div_clk_src = {
1558 .hw.init = &(struct clk_init_data){
1559 .name = "nss_port2_tx_div_clk_src",
1560 .parent_hws = (const struct clk_hw *[]){
1561 &nss_port2_tx_clk_src.clkr.hw },
1563 .ops = &clk_regmap_div_ops,
1564 .flags = CLK_SET_RATE_PARENT,
1569 static struct clk_rcg2 nss_port3_rx_clk_src = {
1570 .cmd_rcgr = 0x68040,
1571 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1573 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1574 .clkr.hw.init = &(struct clk_init_data){
1575 .name = "nss_port3_rx_clk_src",
1576 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1577 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1578 .ops = &clk_rcg2_ops,
1582 static struct clk_regmap_div nss_port3_rx_div_clk_src = {
1587 .hw.init = &(struct clk_init_data){
1588 .name = "nss_port3_rx_div_clk_src",
1589 .parent_hws = (const struct clk_hw *[]){
1590 &nss_port3_rx_clk_src.clkr.hw },
1592 .ops = &clk_regmap_div_ops,
1593 .flags = CLK_SET_RATE_PARENT,
1598 static struct clk_rcg2 nss_port3_tx_clk_src = {
1599 .cmd_rcgr = 0x68048,
1600 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1602 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1603 .clkr.hw.init = &(struct clk_init_data){
1604 .name = "nss_port3_tx_clk_src",
1605 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1606 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1607 .ops = &clk_rcg2_ops,
1611 static struct clk_regmap_div nss_port3_tx_div_clk_src = {
1616 .hw.init = &(struct clk_init_data){
1617 .name = "nss_port3_tx_div_clk_src",
1618 .parent_hws = (const struct clk_hw *[]){
1619 &nss_port3_tx_clk_src.clkr.hw },
1621 .ops = &clk_regmap_div_ops,
1622 .flags = CLK_SET_RATE_PARENT,
1627 static struct clk_rcg2 nss_port4_rx_clk_src = {
1628 .cmd_rcgr = 0x68050,
1629 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1631 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1632 .clkr.hw.init = &(struct clk_init_data){
1633 .name = "nss_port4_rx_clk_src",
1634 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1635 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1636 .ops = &clk_rcg2_ops,
1640 static struct clk_regmap_div nss_port4_rx_div_clk_src = {
1645 .hw.init = &(struct clk_init_data){
1646 .name = "nss_port4_rx_div_clk_src",
1647 .parent_hws = (const struct clk_hw *[]){
1648 &nss_port4_rx_clk_src.clkr.hw },
1650 .ops = &clk_regmap_div_ops,
1651 .flags = CLK_SET_RATE_PARENT,
1656 static struct clk_rcg2 nss_port4_tx_clk_src = {
1657 .cmd_rcgr = 0x68058,
1658 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1660 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1661 .clkr.hw.init = &(struct clk_init_data){
1662 .name = "nss_port4_tx_clk_src",
1663 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1664 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1665 .ops = &clk_rcg2_ops,
1669 static struct clk_regmap_div nss_port4_tx_div_clk_src = {
1674 .hw.init = &(struct clk_init_data){
1675 .name = "nss_port4_tx_div_clk_src",
1676 .parent_hws = (const struct clk_hw *[]){
1677 &nss_port4_tx_clk_src.clkr.hw },
1679 .ops = &clk_regmap_div_ops,
1680 .flags = CLK_SET_RATE_PARENT,
1685 static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
1686 F(19200000, P_XO, 1, 0, 0),
1687 F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
1688 F(25000000, P_UNIPHY0_RX, 5, 0, 0),
1689 F(78125000, P_UNIPHY1_RX, 4, 0, 0),
1690 F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
1691 F(125000000, P_UNIPHY0_RX, 1, 0, 0),
1692 F(156250000, P_UNIPHY1_RX, 2, 0, 0),
1693 F(312500000, P_UNIPHY1_RX, 1, 0, 0),
1697 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
1698 { .fw_name = "xo", .name = "xo" },
1699 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1700 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1701 { .fw_name = "uniphy1_gcc_rx_clk", .name = "uniphy1_gcc_rx_clk" },
1702 { .fw_name = "uniphy1_gcc_tx_clk", .name = "uniphy1_gcc_tx_clk" },
1703 { .hw = &ubi32_pll.clkr.hw },
1704 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1707 static const struct parent_map
1708 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
1710 { P_UNIPHY0_RX, 1 },
1711 { P_UNIPHY0_TX, 2 },
1712 { P_UNIPHY1_RX, 3 },
1713 { P_UNIPHY1_TX, 4 },
1718 static struct clk_rcg2 nss_port5_rx_clk_src = {
1719 .cmd_rcgr = 0x68060,
1720 .freq_tbl = ftbl_nss_port5_rx_clk_src,
1722 .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
1723 .clkr.hw.init = &(struct clk_init_data){
1724 .name = "nss_port5_rx_clk_src",
1725 .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
1726 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias),
1727 .ops = &clk_rcg2_ops,
1731 static struct clk_regmap_div nss_port5_rx_div_clk_src = {
1736 .hw.init = &(struct clk_init_data){
1737 .name = "nss_port5_rx_div_clk_src",
1738 .parent_hws = (const struct clk_hw *[]){
1739 &nss_port5_rx_clk_src.clkr.hw },
1741 .ops = &clk_regmap_div_ops,
1742 .flags = CLK_SET_RATE_PARENT,
1747 static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
1748 F(19200000, P_XO, 1, 0, 0),
1749 F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
1750 F(25000000, P_UNIPHY0_TX, 5, 0, 0),
1751 F(78125000, P_UNIPHY1_TX, 4, 0, 0),
1752 F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
1753 F(125000000, P_UNIPHY0_TX, 1, 0, 0),
1754 F(156250000, P_UNIPHY1_TX, 2, 0, 0),
1755 F(312500000, P_UNIPHY1_TX, 1, 0, 0),
1759 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
1760 { .fw_name = "xo", .name = "xo" },
1761 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1762 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1763 { .fw_name = "uniphy1_gcc_tx_clk", .name = "uniphy1_gcc_tx_clk" },
1764 { .fw_name = "uniphy1_gcc_rx_clk", .name = "uniphy1_gcc_rx_clk" },
1765 { .hw = &ubi32_pll.clkr.hw },
1766 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1769 static const struct parent_map
1770 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
1772 { P_UNIPHY0_TX, 1 },
1773 { P_UNIPHY0_RX, 2 },
1774 { P_UNIPHY1_TX, 3 },
1775 { P_UNIPHY1_RX, 4 },
1780 static struct clk_rcg2 nss_port5_tx_clk_src = {
1781 .cmd_rcgr = 0x68068,
1782 .freq_tbl = ftbl_nss_port5_tx_clk_src,
1784 .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
1785 .clkr.hw.init = &(struct clk_init_data){
1786 .name = "nss_port5_tx_clk_src",
1787 .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
1788 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias),
1789 .ops = &clk_rcg2_ops,
1793 static struct clk_regmap_div nss_port5_tx_div_clk_src = {
1798 .hw.init = &(struct clk_init_data){
1799 .name = "nss_port5_tx_div_clk_src",
1800 .parent_hws = (const struct clk_hw *[]){
1801 &nss_port5_tx_clk_src.clkr.hw },
1803 .ops = &clk_regmap_div_ops,
1804 .flags = CLK_SET_RATE_PARENT,
1809 static const struct freq_tbl ftbl_nss_port6_rx_clk_src[] = {
1810 F(19200000, P_XO, 1, 0, 0),
1811 F(25000000, P_UNIPHY2_RX, 5, 0, 0),
1812 F(25000000, P_UNIPHY2_RX, 12.5, 0, 0),
1813 F(78125000, P_UNIPHY2_RX, 4, 0, 0),
1814 F(125000000, P_UNIPHY2_RX, 1, 0, 0),
1815 F(125000000, P_UNIPHY2_RX, 2.5, 0, 0),
1816 F(156250000, P_UNIPHY2_RX, 2, 0, 0),
1817 F(312500000, P_UNIPHY2_RX, 1, 0, 0),
1821 static const struct clk_parent_data gcc_xo_uniphy2_rx_tx_ubi32_bias[] = {
1822 { .fw_name = "xo", .name = "xo" },
1823 { .fw_name = "uniphy2_gcc_rx_clk", .name = "uniphy2_gcc_rx_clk" },
1824 { .fw_name = "uniphy2_gcc_tx_clk", .name = "uniphy2_gcc_tx_clk" },
1825 { .hw = &ubi32_pll.clkr.hw },
1826 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1829 static const struct parent_map gcc_xo_uniphy2_rx_tx_ubi32_bias_map[] = {
1831 { P_UNIPHY2_RX, 1 },
1832 { P_UNIPHY2_TX, 2 },
1837 static struct clk_rcg2 nss_port6_rx_clk_src = {
1838 .cmd_rcgr = 0x68070,
1839 .freq_tbl = ftbl_nss_port6_rx_clk_src,
1841 .parent_map = gcc_xo_uniphy2_rx_tx_ubi32_bias_map,
1842 .clkr.hw.init = &(struct clk_init_data){
1843 .name = "nss_port6_rx_clk_src",
1844 .parent_data = gcc_xo_uniphy2_rx_tx_ubi32_bias,
1845 .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_rx_tx_ubi32_bias),
1846 .ops = &clk_rcg2_ops,
1850 static struct clk_regmap_div nss_port6_rx_div_clk_src = {
1855 .hw.init = &(struct clk_init_data){
1856 .name = "nss_port6_rx_div_clk_src",
1857 .parent_hws = (const struct clk_hw *[]){
1858 &nss_port6_rx_clk_src.clkr.hw },
1860 .ops = &clk_regmap_div_ops,
1861 .flags = CLK_SET_RATE_PARENT,
1866 static const struct freq_tbl ftbl_nss_port6_tx_clk_src[] = {
1867 F(19200000, P_XO, 1, 0, 0),
1868 F(25000000, P_UNIPHY2_TX, 5, 0, 0),
1869 F(25000000, P_UNIPHY2_TX, 12.5, 0, 0),
1870 F(78125000, P_UNIPHY2_TX, 4, 0, 0),
1871 F(125000000, P_UNIPHY2_TX, 1, 0, 0),
1872 F(125000000, P_UNIPHY2_TX, 2.5, 0, 0),
1873 F(156250000, P_UNIPHY2_TX, 2, 0, 0),
1874 F(312500000, P_UNIPHY2_TX, 1, 0, 0),
1878 static const struct clk_parent_data gcc_xo_uniphy2_tx_rx_ubi32_bias[] = {
1879 { .fw_name = "xo", .name = "xo" },
1880 { .fw_name = "uniphy2_gcc_tx_clk", .name = "uniphy2_gcc_tx_clk" },
1881 { .fw_name = "uniphy2_gcc_rx_clk", .name = "uniphy2_gcc_rx_clk" },
1882 { .hw = &ubi32_pll.clkr.hw },
1883 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1886 static const struct parent_map gcc_xo_uniphy2_tx_rx_ubi32_bias_map[] = {
1888 { P_UNIPHY2_TX, 1 },
1889 { P_UNIPHY2_RX, 2 },
1894 static struct clk_rcg2 nss_port6_tx_clk_src = {
1895 .cmd_rcgr = 0x68078,
1896 .freq_tbl = ftbl_nss_port6_tx_clk_src,
1898 .parent_map = gcc_xo_uniphy2_tx_rx_ubi32_bias_map,
1899 .clkr.hw.init = &(struct clk_init_data){
1900 .name = "nss_port6_tx_clk_src",
1901 .parent_data = gcc_xo_uniphy2_tx_rx_ubi32_bias,
1902 .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_tx_rx_ubi32_bias),
1903 .ops = &clk_rcg2_ops,
1907 static struct clk_regmap_div nss_port6_tx_div_clk_src = {
1912 .hw.init = &(struct clk_init_data){
1913 .name = "nss_port6_tx_div_clk_src",
1914 .parent_hws = (const struct clk_hw *[]){
1915 &nss_port6_tx_clk_src.clkr.hw },
1917 .ops = &clk_regmap_div_ops,
1918 .flags = CLK_SET_RATE_PARENT,
1923 static struct freq_tbl ftbl_crypto_clk_src[] = {
1924 F(40000000, P_GPLL0_DIV2, 10, 0, 0),
1925 F(80000000, P_GPLL0, 10, 0, 0),
1926 F(100000000, P_GPLL0, 8, 0, 0),
1927 F(160000000, P_GPLL0, 5, 0, 0),
1931 static struct clk_rcg2 crypto_clk_src = {
1932 .cmd_rcgr = 0x16004,
1933 .freq_tbl = ftbl_crypto_clk_src,
1935 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1936 .clkr.hw.init = &(struct clk_init_data){
1937 .name = "crypto_clk_src",
1938 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1939 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
1940 .ops = &clk_rcg2_ops,
1944 static struct freq_tbl ftbl_gp_clk_src[] = {
1945 F(19200000, P_XO, 1, 0, 0),
1949 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
1950 { .fw_name = "xo", .name = "xo" },
1951 { .hw = &gpll0.clkr.hw },
1952 { .hw = &gpll6.clkr.hw },
1953 { .hw = &gpll0_out_main_div2.hw },
1954 { .fw_name = "sleep_clk", .name = "sleep_clk" },
1957 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
1961 { P_GPLL0_DIV2, 4 },
1965 static struct clk_rcg2 gp1_clk_src = {
1966 .cmd_rcgr = 0x08004,
1967 .freq_tbl = ftbl_gp_clk_src,
1970 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1971 .clkr.hw.init = &(struct clk_init_data){
1972 .name = "gp1_clk_src",
1973 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1974 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
1975 .ops = &clk_rcg2_ops,
1979 static struct clk_rcg2 gp2_clk_src = {
1980 .cmd_rcgr = 0x09004,
1981 .freq_tbl = ftbl_gp_clk_src,
1984 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1985 .clkr.hw.init = &(struct clk_init_data){
1986 .name = "gp2_clk_src",
1987 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1988 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
1989 .ops = &clk_rcg2_ops,
1993 static struct clk_rcg2 gp3_clk_src = {
1994 .cmd_rcgr = 0x0a004,
1995 .freq_tbl = ftbl_gp_clk_src,
1998 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1999 .clkr.hw.init = &(struct clk_init_data){
2000 .name = "gp3_clk_src",
2001 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
2002 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
2003 .ops = &clk_rcg2_ops,
2007 static struct clk_branch gcc_blsp1_ahb_clk = {
2008 .halt_reg = 0x01008,
2010 .enable_reg = 0x01008,
2011 .enable_mask = BIT(0),
2012 .hw.init = &(struct clk_init_data){
2013 .name = "gcc_blsp1_ahb_clk",
2014 .parent_hws = (const struct clk_hw *[]){
2015 &pcnoc_clk_src.hw },
2017 .flags = CLK_SET_RATE_PARENT,
2018 .ops = &clk_branch2_ops,
2023 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
2024 .halt_reg = 0x02008,
2026 .enable_reg = 0x02008,
2027 .enable_mask = BIT(0),
2028 .hw.init = &(struct clk_init_data){
2029 .name = "gcc_blsp1_qup1_i2c_apps_clk",
2030 .parent_hws = (const struct clk_hw *[]){
2031 &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
2033 .flags = CLK_SET_RATE_PARENT,
2034 .ops = &clk_branch2_ops,
2039 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
2040 .halt_reg = 0x02004,
2042 .enable_reg = 0x02004,
2043 .enable_mask = BIT(0),
2044 .hw.init = &(struct clk_init_data){
2045 .name = "gcc_blsp1_qup1_spi_apps_clk",
2046 .parent_hws = (const struct clk_hw *[]){
2047 &blsp1_qup1_spi_apps_clk_src.clkr.hw },
2049 .flags = CLK_SET_RATE_PARENT,
2050 .ops = &clk_branch2_ops,
2055 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
2056 .halt_reg = 0x03010,
2058 .enable_reg = 0x03010,
2059 .enable_mask = BIT(0),
2060 .hw.init = &(struct clk_init_data){
2061 .name = "gcc_blsp1_qup2_i2c_apps_clk",
2062 .parent_hws = (const struct clk_hw *[]){
2063 &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
2065 .flags = CLK_SET_RATE_PARENT,
2066 .ops = &clk_branch2_ops,
2071 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2072 .halt_reg = 0x0300c,
2074 .enable_reg = 0x0300c,
2075 .enable_mask = BIT(0),
2076 .hw.init = &(struct clk_init_data){
2077 .name = "gcc_blsp1_qup2_spi_apps_clk",
2078 .parent_hws = (const struct clk_hw *[]){
2079 &blsp1_qup2_spi_apps_clk_src.clkr.hw },
2081 .flags = CLK_SET_RATE_PARENT,
2082 .ops = &clk_branch2_ops,
2087 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2088 .halt_reg = 0x04010,
2090 .enable_reg = 0x04010,
2091 .enable_mask = BIT(0),
2092 .hw.init = &(struct clk_init_data){
2093 .name = "gcc_blsp1_qup3_i2c_apps_clk",
2094 .parent_hws = (const struct clk_hw *[]){
2095 &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
2097 .flags = CLK_SET_RATE_PARENT,
2098 .ops = &clk_branch2_ops,
2103 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2104 .halt_reg = 0x0400c,
2106 .enable_reg = 0x0400c,
2107 .enable_mask = BIT(0),
2108 .hw.init = &(struct clk_init_data){
2109 .name = "gcc_blsp1_qup3_spi_apps_clk",
2110 .parent_hws = (const struct clk_hw *[]){
2111 &blsp1_qup3_spi_apps_clk_src.clkr.hw },
2113 .flags = CLK_SET_RATE_PARENT,
2114 .ops = &clk_branch2_ops,
2119 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2120 .halt_reg = 0x05010,
2122 .enable_reg = 0x05010,
2123 .enable_mask = BIT(0),
2124 .hw.init = &(struct clk_init_data){
2125 .name = "gcc_blsp1_qup4_i2c_apps_clk",
2126 .parent_hws = (const struct clk_hw *[]){
2127 &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
2129 .flags = CLK_SET_RATE_PARENT,
2130 .ops = &clk_branch2_ops,
2135 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2136 .halt_reg = 0x0500c,
2138 .enable_reg = 0x0500c,
2139 .enable_mask = BIT(0),
2140 .hw.init = &(struct clk_init_data){
2141 .name = "gcc_blsp1_qup4_spi_apps_clk",
2142 .parent_hws = (const struct clk_hw *[]){
2143 &blsp1_qup4_spi_apps_clk_src.clkr.hw },
2145 .flags = CLK_SET_RATE_PARENT,
2146 .ops = &clk_branch2_ops,
2151 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2152 .halt_reg = 0x06010,
2154 .enable_reg = 0x06010,
2155 .enable_mask = BIT(0),
2156 .hw.init = &(struct clk_init_data){
2157 .name = "gcc_blsp1_qup5_i2c_apps_clk",
2158 .parent_hws = (const struct clk_hw *[]){
2159 &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
2161 .flags = CLK_SET_RATE_PARENT,
2162 .ops = &clk_branch2_ops,
2167 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2168 .halt_reg = 0x0600c,
2170 .enable_reg = 0x0600c,
2171 .enable_mask = BIT(0),
2172 .hw.init = &(struct clk_init_data){
2173 .name = "gcc_blsp1_qup5_spi_apps_clk",
2174 .parent_hws = (const struct clk_hw *[]){
2175 &blsp1_qup5_spi_apps_clk_src.clkr.hw },
2177 .flags = CLK_SET_RATE_PARENT,
2178 .ops = &clk_branch2_ops,
2183 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
2184 .halt_reg = 0x07010,
2186 .enable_reg = 0x07010,
2187 .enable_mask = BIT(0),
2188 .hw.init = &(struct clk_init_data){
2189 .name = "gcc_blsp1_qup6_i2c_apps_clk",
2190 .parent_hws = (const struct clk_hw *[]){
2191 &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
2193 .flags = CLK_SET_RATE_PARENT,
2194 .ops = &clk_branch2_ops,
2199 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2200 .halt_reg = 0x0700c,
2202 .enable_reg = 0x0700c,
2203 .enable_mask = BIT(0),
2204 .hw.init = &(struct clk_init_data){
2205 .name = "gcc_blsp1_qup6_spi_apps_clk",
2206 .parent_hws = (const struct clk_hw *[]){
2207 &blsp1_qup6_spi_apps_clk_src.clkr.hw },
2209 .flags = CLK_SET_RATE_PARENT,
2210 .ops = &clk_branch2_ops,
2215 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2216 .halt_reg = 0x0203c,
2218 .enable_reg = 0x0203c,
2219 .enable_mask = BIT(0),
2220 .hw.init = &(struct clk_init_data){
2221 .name = "gcc_blsp1_uart1_apps_clk",
2222 .parent_hws = (const struct clk_hw *[]){
2223 &blsp1_uart1_apps_clk_src.clkr.hw },
2225 .flags = CLK_SET_RATE_PARENT,
2226 .ops = &clk_branch2_ops,
2231 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2232 .halt_reg = 0x0302c,
2234 .enable_reg = 0x0302c,
2235 .enable_mask = BIT(0),
2236 .hw.init = &(struct clk_init_data){
2237 .name = "gcc_blsp1_uart2_apps_clk",
2238 .parent_hws = (const struct clk_hw *[]){
2239 &blsp1_uart2_apps_clk_src.clkr.hw },
2241 .flags = CLK_SET_RATE_PARENT,
2242 .ops = &clk_branch2_ops,
2247 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
2248 .halt_reg = 0x0402c,
2250 .enable_reg = 0x0402c,
2251 .enable_mask = BIT(0),
2252 .hw.init = &(struct clk_init_data){
2253 .name = "gcc_blsp1_uart3_apps_clk",
2254 .parent_hws = (const struct clk_hw *[]){
2255 &blsp1_uart3_apps_clk_src.clkr.hw },
2257 .flags = CLK_SET_RATE_PARENT,
2258 .ops = &clk_branch2_ops,
2263 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
2264 .halt_reg = 0x0502c,
2266 .enable_reg = 0x0502c,
2267 .enable_mask = BIT(0),
2268 .hw.init = &(struct clk_init_data){
2269 .name = "gcc_blsp1_uart4_apps_clk",
2270 .parent_hws = (const struct clk_hw *[]){
2271 &blsp1_uart4_apps_clk_src.clkr.hw },
2273 .flags = CLK_SET_RATE_PARENT,
2274 .ops = &clk_branch2_ops,
2279 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
2280 .halt_reg = 0x0602c,
2282 .enable_reg = 0x0602c,
2283 .enable_mask = BIT(0),
2284 .hw.init = &(struct clk_init_data){
2285 .name = "gcc_blsp1_uart5_apps_clk",
2286 .parent_hws = (const struct clk_hw *[]){
2287 &blsp1_uart5_apps_clk_src.clkr.hw },
2289 .flags = CLK_SET_RATE_PARENT,
2290 .ops = &clk_branch2_ops,
2295 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
2296 .halt_reg = 0x0702c,
2298 .enable_reg = 0x0702c,
2299 .enable_mask = BIT(0),
2300 .hw.init = &(struct clk_init_data){
2301 .name = "gcc_blsp1_uart6_apps_clk",
2302 .parent_hws = (const struct clk_hw *[]){
2303 &blsp1_uart6_apps_clk_src.clkr.hw },
2305 .flags = CLK_SET_RATE_PARENT,
2306 .ops = &clk_branch2_ops,
2311 static struct clk_branch gcc_prng_ahb_clk = {
2312 .halt_reg = 0x13004,
2313 .halt_check = BRANCH_HALT_VOTED,
2315 .enable_reg = 0x0b004,
2316 .enable_mask = BIT(8),
2317 .hw.init = &(struct clk_init_data){
2318 .name = "gcc_prng_ahb_clk",
2319 .parent_hws = (const struct clk_hw *[]){
2320 &pcnoc_clk_src.hw },
2322 .flags = CLK_SET_RATE_PARENT,
2323 .ops = &clk_branch2_ops,
2328 static struct clk_branch gcc_qpic_ahb_clk = {
2329 .halt_reg = 0x57024,
2331 .enable_reg = 0x57024,
2332 .enable_mask = BIT(0),
2333 .hw.init = &(struct clk_init_data){
2334 .name = "gcc_qpic_ahb_clk",
2335 .parent_hws = (const struct clk_hw *[]){
2336 &pcnoc_clk_src.hw },
2338 .flags = CLK_SET_RATE_PARENT,
2339 .ops = &clk_branch2_ops,
2344 static struct clk_branch gcc_qpic_clk = {
2345 .halt_reg = 0x57020,
2347 .enable_reg = 0x57020,
2348 .enable_mask = BIT(0),
2349 .hw.init = &(struct clk_init_data){
2350 .name = "gcc_qpic_clk",
2351 .parent_hws = (const struct clk_hw *[]){
2352 &pcnoc_clk_src.hw },
2354 .flags = CLK_SET_RATE_PARENT,
2355 .ops = &clk_branch2_ops,
2360 static struct clk_branch gcc_pcie0_ahb_clk = {
2361 .halt_reg = 0x75010,
2363 .enable_reg = 0x75010,
2364 .enable_mask = BIT(0),
2365 .hw.init = &(struct clk_init_data){
2366 .name = "gcc_pcie0_ahb_clk",
2367 .parent_hws = (const struct clk_hw *[]){
2368 &pcnoc_clk_src.hw },
2370 .flags = CLK_SET_RATE_PARENT,
2371 .ops = &clk_branch2_ops,
2376 static struct clk_branch gcc_pcie0_aux_clk = {
2377 .halt_reg = 0x75014,
2379 .enable_reg = 0x75014,
2380 .enable_mask = BIT(0),
2381 .hw.init = &(struct clk_init_data){
2382 .name = "gcc_pcie0_aux_clk",
2383 .parent_hws = (const struct clk_hw *[]){
2384 &pcie0_aux_clk_src.clkr.hw },
2386 .flags = CLK_SET_RATE_PARENT,
2387 .ops = &clk_branch2_ops,
2392 static struct clk_branch gcc_pcie0_axi_m_clk = {
2393 .halt_reg = 0x75008,
2395 .enable_reg = 0x75008,
2396 .enable_mask = BIT(0),
2397 .hw.init = &(struct clk_init_data){
2398 .name = "gcc_pcie0_axi_m_clk",
2399 .parent_hws = (const struct clk_hw *[]){
2400 &pcie0_axi_clk_src.clkr.hw },
2402 .flags = CLK_SET_RATE_PARENT,
2403 .ops = &clk_branch2_ops,
2408 static struct clk_branch gcc_pcie0_axi_s_clk = {
2409 .halt_reg = 0x7500c,
2411 .enable_reg = 0x7500c,
2412 .enable_mask = BIT(0),
2413 .hw.init = &(struct clk_init_data){
2414 .name = "gcc_pcie0_axi_s_clk",
2415 .parent_hws = (const struct clk_hw *[]){
2416 &pcie0_axi_clk_src.clkr.hw },
2418 .flags = CLK_SET_RATE_PARENT,
2419 .ops = &clk_branch2_ops,
2424 static struct clk_branch gcc_pcie0_pipe_clk = {
2425 .halt_reg = 0x75018,
2426 .halt_check = BRANCH_HALT_DELAY,
2428 .enable_reg = 0x75018,
2429 .enable_mask = BIT(0),
2430 .hw.init = &(struct clk_init_data){
2431 .name = "gcc_pcie0_pipe_clk",
2432 .parent_hws = (const struct clk_hw *[]){
2433 &pcie0_pipe_clk_src.clkr.hw },
2435 .flags = CLK_SET_RATE_PARENT,
2436 .ops = &clk_branch2_ops,
2441 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
2442 .halt_reg = 0x26048,
2444 .enable_reg = 0x26048,
2445 .enable_mask = BIT(0),
2446 .hw.init = &(struct clk_init_data){
2447 .name = "gcc_sys_noc_pcie0_axi_clk",
2448 .parent_hws = (const struct clk_hw *[]){
2449 &pcie0_axi_clk_src.clkr.hw },
2451 .flags = CLK_SET_RATE_PARENT,
2452 .ops = &clk_branch2_ops,
2457 static struct clk_branch gcc_pcie1_ahb_clk = {
2458 .halt_reg = 0x76010,
2460 .enable_reg = 0x76010,
2461 .enable_mask = BIT(0),
2462 .hw.init = &(struct clk_init_data){
2463 .name = "gcc_pcie1_ahb_clk",
2464 .parent_hws = (const struct clk_hw *[]){
2465 &pcnoc_clk_src.hw },
2467 .flags = CLK_SET_RATE_PARENT,
2468 .ops = &clk_branch2_ops,
2473 static struct clk_branch gcc_pcie1_aux_clk = {
2474 .halt_reg = 0x76014,
2476 .enable_reg = 0x76014,
2477 .enable_mask = BIT(0),
2478 .hw.init = &(struct clk_init_data){
2479 .name = "gcc_pcie1_aux_clk",
2480 .parent_hws = (const struct clk_hw *[]){
2481 &pcie1_aux_clk_src.clkr.hw },
2483 .flags = CLK_SET_RATE_PARENT,
2484 .ops = &clk_branch2_ops,
2489 static struct clk_branch gcc_pcie1_axi_m_clk = {
2490 .halt_reg = 0x76008,
2492 .enable_reg = 0x76008,
2493 .enable_mask = BIT(0),
2494 .hw.init = &(struct clk_init_data){
2495 .name = "gcc_pcie1_axi_m_clk",
2496 .parent_hws = (const struct clk_hw *[]){
2497 &pcie1_axi_clk_src.clkr.hw },
2499 .flags = CLK_SET_RATE_PARENT,
2500 .ops = &clk_branch2_ops,
2505 static struct clk_branch gcc_pcie1_axi_s_clk = {
2506 .halt_reg = 0x7600c,
2508 .enable_reg = 0x7600c,
2509 .enable_mask = BIT(0),
2510 .hw.init = &(struct clk_init_data){
2511 .name = "gcc_pcie1_axi_s_clk",
2512 .parent_hws = (const struct clk_hw *[]){
2513 &pcie1_axi_clk_src.clkr.hw },
2515 .flags = CLK_SET_RATE_PARENT,
2516 .ops = &clk_branch2_ops,
2521 static struct clk_branch gcc_pcie1_pipe_clk = {
2522 .halt_reg = 0x76018,
2523 .halt_check = BRANCH_HALT_DELAY,
2525 .enable_reg = 0x76018,
2526 .enable_mask = BIT(0),
2527 .hw.init = &(struct clk_init_data){
2528 .name = "gcc_pcie1_pipe_clk",
2529 .parent_hws = (const struct clk_hw *[]){
2530 &pcie1_pipe_clk_src.clkr.hw },
2532 .flags = CLK_SET_RATE_PARENT,
2533 .ops = &clk_branch2_ops,
2538 static struct clk_branch gcc_sys_noc_pcie1_axi_clk = {
2539 .halt_reg = 0x2604c,
2541 .enable_reg = 0x2604c,
2542 .enable_mask = BIT(0),
2543 .hw.init = &(struct clk_init_data){
2544 .name = "gcc_sys_noc_pcie1_axi_clk",
2545 .parent_hws = (const struct clk_hw *[]){
2546 &pcie1_axi_clk_src.clkr.hw },
2548 .flags = CLK_SET_RATE_PARENT,
2549 .ops = &clk_branch2_ops,
2554 static struct clk_branch gcc_usb0_aux_clk = {
2555 .halt_reg = 0x3e044,
2557 .enable_reg = 0x3e044,
2558 .enable_mask = BIT(0),
2559 .hw.init = &(struct clk_init_data){
2560 .name = "gcc_usb0_aux_clk",
2561 .parent_hws = (const struct clk_hw *[]){
2562 &usb0_aux_clk_src.clkr.hw },
2564 .flags = CLK_SET_RATE_PARENT,
2565 .ops = &clk_branch2_ops,
2570 static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
2571 .halt_reg = 0x26040,
2573 .enable_reg = 0x26040,
2574 .enable_mask = BIT(0),
2575 .hw.init = &(struct clk_init_data){
2576 .name = "gcc_sys_noc_usb0_axi_clk",
2577 .parent_hws = (const struct clk_hw *[]){
2578 &usb0_master_clk_src.clkr.hw },
2580 .flags = CLK_SET_RATE_PARENT,
2581 .ops = &clk_branch2_ops,
2586 static struct clk_branch gcc_usb0_master_clk = {
2587 .halt_reg = 0x3e000,
2589 .enable_reg = 0x3e000,
2590 .enable_mask = BIT(0),
2591 .hw.init = &(struct clk_init_data){
2592 .name = "gcc_usb0_master_clk",
2593 .parent_hws = (const struct clk_hw *[]){
2594 &usb0_master_clk_src.clkr.hw },
2596 .flags = CLK_SET_RATE_PARENT,
2597 .ops = &clk_branch2_ops,
2602 static struct clk_branch gcc_usb0_mock_utmi_clk = {
2603 .halt_reg = 0x3e008,
2605 .enable_reg = 0x3e008,
2606 .enable_mask = BIT(0),
2607 .hw.init = &(struct clk_init_data){
2608 .name = "gcc_usb0_mock_utmi_clk",
2609 .parent_hws = (const struct clk_hw *[]){
2610 &usb0_mock_utmi_clk_src.clkr.hw },
2612 .flags = CLK_SET_RATE_PARENT,
2613 .ops = &clk_branch2_ops,
2618 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
2619 .halt_reg = 0x3e080,
2621 .enable_reg = 0x3e080,
2622 .enable_mask = BIT(0),
2623 .hw.init = &(struct clk_init_data){
2624 .name = "gcc_usb0_phy_cfg_ahb_clk",
2625 .parent_hws = (const struct clk_hw *[]){
2626 &pcnoc_clk_src.hw },
2628 .flags = CLK_SET_RATE_PARENT,
2629 .ops = &clk_branch2_ops,
2634 static struct clk_branch gcc_usb0_pipe_clk = {
2635 .halt_reg = 0x3e040,
2636 .halt_check = BRANCH_HALT_DELAY,
2638 .enable_reg = 0x3e040,
2639 .enable_mask = BIT(0),
2640 .hw.init = &(struct clk_init_data){
2641 .name = "gcc_usb0_pipe_clk",
2642 .parent_hws = (const struct clk_hw *[]){
2643 &usb0_pipe_clk_src.clkr.hw },
2645 .flags = CLK_SET_RATE_PARENT,
2646 .ops = &clk_branch2_ops,
2651 static struct clk_branch gcc_usb0_sleep_clk = {
2652 .halt_reg = 0x3e004,
2654 .enable_reg = 0x3e004,
2655 .enable_mask = BIT(0),
2656 .hw.init = &(struct clk_init_data){
2657 .name = "gcc_usb0_sleep_clk",
2658 .parent_hws = (const struct clk_hw *[]){
2659 &gcc_sleep_clk_src.clkr.hw },
2661 .flags = CLK_SET_RATE_PARENT,
2662 .ops = &clk_branch2_ops,
2667 static struct clk_branch gcc_usb1_aux_clk = {
2668 .halt_reg = 0x3f044,
2670 .enable_reg = 0x3f044,
2671 .enable_mask = BIT(0),
2672 .hw.init = &(struct clk_init_data){
2673 .name = "gcc_usb1_aux_clk",
2674 .parent_hws = (const struct clk_hw *[]){
2675 &usb1_aux_clk_src.clkr.hw },
2677 .flags = CLK_SET_RATE_PARENT,
2678 .ops = &clk_branch2_ops,
2683 static struct clk_branch gcc_sys_noc_usb1_axi_clk = {
2684 .halt_reg = 0x26044,
2686 .enable_reg = 0x26044,
2687 .enable_mask = BIT(0),
2688 .hw.init = &(struct clk_init_data){
2689 .name = "gcc_sys_noc_usb1_axi_clk",
2690 .parent_hws = (const struct clk_hw *[]){
2691 &usb1_master_clk_src.clkr.hw },
2693 .flags = CLK_SET_RATE_PARENT,
2694 .ops = &clk_branch2_ops,
2699 static struct clk_branch gcc_usb1_master_clk = {
2700 .halt_reg = 0x3f000,
2702 .enable_reg = 0x3f000,
2703 .enable_mask = BIT(0),
2704 .hw.init = &(struct clk_init_data){
2705 .name = "gcc_usb1_master_clk",
2706 .parent_hws = (const struct clk_hw *[]){
2707 &usb1_master_clk_src.clkr.hw },
2709 .flags = CLK_SET_RATE_PARENT,
2710 .ops = &clk_branch2_ops,
2715 static struct clk_branch gcc_usb1_mock_utmi_clk = {
2716 .halt_reg = 0x3f008,
2718 .enable_reg = 0x3f008,
2719 .enable_mask = BIT(0),
2720 .hw.init = &(struct clk_init_data){
2721 .name = "gcc_usb1_mock_utmi_clk",
2722 .parent_hws = (const struct clk_hw *[]){
2723 &usb1_mock_utmi_clk_src.clkr.hw },
2725 .flags = CLK_SET_RATE_PARENT,
2726 .ops = &clk_branch2_ops,
2731 static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
2732 .halt_reg = 0x3f080,
2734 .enable_reg = 0x3f080,
2735 .enable_mask = BIT(0),
2736 .hw.init = &(struct clk_init_data){
2737 .name = "gcc_usb1_phy_cfg_ahb_clk",
2738 .parent_hws = (const struct clk_hw *[]){
2739 &pcnoc_clk_src.hw },
2741 .flags = CLK_SET_RATE_PARENT,
2742 .ops = &clk_branch2_ops,
2747 static struct clk_branch gcc_usb1_pipe_clk = {
2748 .halt_reg = 0x3f040,
2749 .halt_check = BRANCH_HALT_DELAY,
2751 .enable_reg = 0x3f040,
2752 .enable_mask = BIT(0),
2753 .hw.init = &(struct clk_init_data){
2754 .name = "gcc_usb1_pipe_clk",
2755 .parent_hws = (const struct clk_hw *[]){
2756 &usb1_pipe_clk_src.clkr.hw },
2758 .flags = CLK_SET_RATE_PARENT,
2759 .ops = &clk_branch2_ops,
2764 static struct clk_branch gcc_usb1_sleep_clk = {
2765 .halt_reg = 0x3f004,
2767 .enable_reg = 0x3f004,
2768 .enable_mask = BIT(0),
2769 .hw.init = &(struct clk_init_data){
2770 .name = "gcc_usb1_sleep_clk",
2771 .parent_hws = (const struct clk_hw *[]){
2772 &gcc_sleep_clk_src.clkr.hw },
2774 .flags = CLK_SET_RATE_PARENT,
2775 .ops = &clk_branch2_ops,
2780 static struct clk_branch gcc_sdcc1_ahb_clk = {
2781 .halt_reg = 0x4201c,
2783 .enable_reg = 0x4201c,
2784 .enable_mask = BIT(0),
2785 .hw.init = &(struct clk_init_data){
2786 .name = "gcc_sdcc1_ahb_clk",
2787 .parent_hws = (const struct clk_hw *[]){
2788 &pcnoc_clk_src.hw },
2790 .flags = CLK_SET_RATE_PARENT,
2791 .ops = &clk_branch2_ops,
2796 static struct clk_branch gcc_sdcc1_apps_clk = {
2797 .halt_reg = 0x42018,
2799 .enable_reg = 0x42018,
2800 .enable_mask = BIT(0),
2801 .hw.init = &(struct clk_init_data){
2802 .name = "gcc_sdcc1_apps_clk",
2803 .parent_hws = (const struct clk_hw *[]){
2804 &sdcc1_apps_clk_src.clkr.hw },
2806 .flags = CLK_SET_RATE_PARENT,
2807 .ops = &clk_branch2_ops,
2812 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2813 .halt_reg = 0x5d014,
2815 .enable_reg = 0x5d014,
2816 .enable_mask = BIT(0),
2817 .hw.init = &(struct clk_init_data){
2818 .name = "gcc_sdcc1_ice_core_clk",
2819 .parent_hws = (const struct clk_hw *[]){
2820 &sdcc1_ice_core_clk_src.clkr.hw },
2822 .flags = CLK_SET_RATE_PARENT,
2823 .ops = &clk_branch2_ops,
2828 static struct clk_branch gcc_sdcc2_ahb_clk = {
2829 .halt_reg = 0x4301c,
2831 .enable_reg = 0x4301c,
2832 .enable_mask = BIT(0),
2833 .hw.init = &(struct clk_init_data){
2834 .name = "gcc_sdcc2_ahb_clk",
2835 .parent_hws = (const struct clk_hw *[]){
2836 &pcnoc_clk_src.hw },
2838 .flags = CLK_SET_RATE_PARENT,
2839 .ops = &clk_branch2_ops,
2844 static struct clk_branch gcc_sdcc2_apps_clk = {
2845 .halt_reg = 0x43018,
2847 .enable_reg = 0x43018,
2848 .enable_mask = BIT(0),
2849 .hw.init = &(struct clk_init_data){
2850 .name = "gcc_sdcc2_apps_clk",
2851 .parent_hws = (const struct clk_hw *[]){
2852 &sdcc2_apps_clk_src.clkr.hw },
2854 .flags = CLK_SET_RATE_PARENT,
2855 .ops = &clk_branch2_ops,
2860 static struct clk_branch gcc_mem_noc_nss_axi_clk = {
2861 .halt_reg = 0x1d03c,
2863 .enable_reg = 0x1d03c,
2864 .enable_mask = BIT(0),
2865 .hw.init = &(struct clk_init_data){
2866 .name = "gcc_mem_noc_nss_axi_clk",
2867 .parent_hws = (const struct clk_hw *[]){
2868 &nss_noc_clk_src.hw },
2870 .flags = CLK_SET_RATE_PARENT,
2871 .ops = &clk_branch2_ops,
2876 static struct clk_branch gcc_nss_ce_apb_clk = {
2877 .halt_reg = 0x68174,
2879 .enable_reg = 0x68174,
2880 .enable_mask = BIT(0),
2881 .hw.init = &(struct clk_init_data){
2882 .name = "gcc_nss_ce_apb_clk",
2883 .parent_hws = (const struct clk_hw *[]){
2884 &nss_ce_clk_src.clkr.hw },
2886 .flags = CLK_SET_RATE_PARENT,
2887 .ops = &clk_branch2_ops,
2892 static struct clk_branch gcc_nss_ce_axi_clk = {
2893 .halt_reg = 0x68170,
2895 .enable_reg = 0x68170,
2896 .enable_mask = BIT(0),
2897 .hw.init = &(struct clk_init_data){
2898 .name = "gcc_nss_ce_axi_clk",
2899 .parent_hws = (const struct clk_hw *[]){
2900 &nss_ce_clk_src.clkr.hw },
2902 .flags = CLK_SET_RATE_PARENT,
2903 .ops = &clk_branch2_ops,
2908 static struct clk_branch gcc_nss_cfg_clk = {
2909 .halt_reg = 0x68160,
2911 .enable_reg = 0x68160,
2912 .enable_mask = BIT(0),
2913 .hw.init = &(struct clk_init_data){
2914 .name = "gcc_nss_cfg_clk",
2915 .parent_hws = (const struct clk_hw *[]){
2916 &pcnoc_clk_src.hw },
2918 .flags = CLK_SET_RATE_PARENT,
2919 .ops = &clk_branch2_ops,
2924 static struct clk_branch gcc_nss_crypto_clk = {
2925 .halt_reg = 0x68164,
2927 .enable_reg = 0x68164,
2928 .enable_mask = BIT(0),
2929 .hw.init = &(struct clk_init_data){
2930 .name = "gcc_nss_crypto_clk",
2931 .parent_hws = (const struct clk_hw *[]){
2932 &nss_crypto_clk_src.clkr.hw },
2934 .flags = CLK_SET_RATE_PARENT,
2935 .ops = &clk_branch2_ops,
2940 static struct clk_branch gcc_nss_csr_clk = {
2941 .halt_reg = 0x68318,
2943 .enable_reg = 0x68318,
2944 .enable_mask = BIT(0),
2945 .hw.init = &(struct clk_init_data){
2946 .name = "gcc_nss_csr_clk",
2947 .parent_hws = (const struct clk_hw *[]){
2948 &nss_ce_clk_src.clkr.hw },
2950 .flags = CLK_SET_RATE_PARENT,
2951 .ops = &clk_branch2_ops,
2956 static struct clk_branch gcc_nss_edma_cfg_clk = {
2957 .halt_reg = 0x6819c,
2959 .enable_reg = 0x6819c,
2960 .enable_mask = BIT(0),
2961 .hw.init = &(struct clk_init_data){
2962 .name = "gcc_nss_edma_cfg_clk",
2963 .parent_hws = (const struct clk_hw *[]){
2964 &nss_ppe_clk_src.clkr.hw },
2966 .flags = CLK_SET_RATE_PARENT,
2967 .ops = &clk_branch2_ops,
2972 static struct clk_branch gcc_nss_edma_clk = {
2973 .halt_reg = 0x68198,
2975 .enable_reg = 0x68198,
2976 .enable_mask = BIT(0),
2977 .hw.init = &(struct clk_init_data){
2978 .name = "gcc_nss_edma_clk",
2979 .parent_hws = (const struct clk_hw *[]){
2980 &nss_ppe_clk_src.clkr.hw },
2982 .flags = CLK_SET_RATE_PARENT,
2983 .ops = &clk_branch2_ops,
2988 static struct clk_branch gcc_nss_imem_clk = {
2989 .halt_reg = 0x68178,
2991 .enable_reg = 0x68178,
2992 .enable_mask = BIT(0),
2993 .hw.init = &(struct clk_init_data){
2994 .name = "gcc_nss_imem_clk",
2995 .parent_hws = (const struct clk_hw *[]){
2996 &nss_imem_clk_src.clkr.hw },
2998 .flags = CLK_SET_RATE_PARENT,
2999 .ops = &clk_branch2_ops,
3004 static struct clk_branch gcc_nss_noc_clk = {
3005 .halt_reg = 0x68168,
3007 .enable_reg = 0x68168,
3008 .enable_mask = BIT(0),
3009 .hw.init = &(struct clk_init_data){
3010 .name = "gcc_nss_noc_clk",
3011 .parent_hws = (const struct clk_hw *[]){
3012 &nss_noc_clk_src.hw },
3014 .flags = CLK_SET_RATE_PARENT,
3015 .ops = &clk_branch2_ops,
3020 static struct clk_branch gcc_nss_ppe_btq_clk = {
3021 .halt_reg = 0x6833c,
3023 .enable_reg = 0x6833c,
3024 .enable_mask = BIT(0),
3025 .hw.init = &(struct clk_init_data){
3026 .name = "gcc_nss_ppe_btq_clk",
3027 .parent_hws = (const struct clk_hw *[]){
3028 &nss_ppe_clk_src.clkr.hw },
3030 .flags = CLK_SET_RATE_PARENT,
3031 .ops = &clk_branch2_ops,
3036 static struct clk_branch gcc_nss_ppe_cfg_clk = {
3037 .halt_reg = 0x68194,
3039 .enable_reg = 0x68194,
3040 .enable_mask = BIT(0),
3041 .hw.init = &(struct clk_init_data){
3042 .name = "gcc_nss_ppe_cfg_clk",
3043 .parent_hws = (const struct clk_hw *[]){
3044 &nss_ppe_clk_src.clkr.hw },
3046 .flags = CLK_SET_RATE_PARENT,
3047 .ops = &clk_branch2_ops,
3052 static struct clk_branch gcc_nss_ppe_clk = {
3053 .halt_reg = 0x68190,
3055 .enable_reg = 0x68190,
3056 .enable_mask = BIT(0),
3057 .hw.init = &(struct clk_init_data){
3058 .name = "gcc_nss_ppe_clk",
3059 .parent_hws = (const struct clk_hw *[]){
3060 &nss_ppe_clk_src.clkr.hw },
3062 .flags = CLK_SET_RATE_PARENT,
3063 .ops = &clk_branch2_ops,
3068 static struct clk_branch gcc_nss_ppe_ipe_clk = {
3069 .halt_reg = 0x68338,
3071 .enable_reg = 0x68338,
3072 .enable_mask = BIT(0),
3073 .hw.init = &(struct clk_init_data){
3074 .name = "gcc_nss_ppe_ipe_clk",
3075 .parent_hws = (const struct clk_hw *[]){
3076 &nss_ppe_clk_src.clkr.hw },
3078 .flags = CLK_SET_RATE_PARENT,
3079 .ops = &clk_branch2_ops,
3084 static struct clk_branch gcc_nss_ptp_ref_clk = {
3085 .halt_reg = 0x6816c,
3087 .enable_reg = 0x6816c,
3088 .enable_mask = BIT(0),
3089 .hw.init = &(struct clk_init_data){
3090 .name = "gcc_nss_ptp_ref_clk",
3091 .parent_hws = (const struct clk_hw *[]){
3092 &nss_ppe_cdiv_clk_src.hw },
3094 .flags = CLK_SET_RATE_PARENT,
3095 .ops = &clk_branch2_ops,
3100 static struct clk_branch gcc_crypto_ppe_clk = {
3101 .halt_reg = 0x68310,
3104 .enable_reg = 0x68310,
3105 .enable_mask = BIT(0),
3106 .hw.init = &(struct clk_init_data){
3107 .name = "gcc_crypto_ppe_clk",
3108 .parent_hws = (const struct clk_hw *[]){
3109 &nss_ppe_clk_src.clkr.hw },
3111 .flags = CLK_SET_RATE_PARENT,
3112 .ops = &clk_branch2_ops,
3117 static struct clk_branch gcc_nssnoc_ce_apb_clk = {
3118 .halt_reg = 0x6830c,
3120 .enable_reg = 0x6830c,
3121 .enable_mask = BIT(0),
3122 .hw.init = &(struct clk_init_data){
3123 .name = "gcc_nssnoc_ce_apb_clk",
3124 .parent_hws = (const struct clk_hw *[]){
3125 &nss_ce_clk_src.clkr.hw },
3127 .flags = CLK_SET_RATE_PARENT,
3128 .ops = &clk_branch2_ops,
3133 static struct clk_branch gcc_nssnoc_ce_axi_clk = {
3134 .halt_reg = 0x68308,
3136 .enable_reg = 0x68308,
3137 .enable_mask = BIT(0),
3138 .hw.init = &(struct clk_init_data){
3139 .name = "gcc_nssnoc_ce_axi_clk",
3140 .parent_hws = (const struct clk_hw *[]){
3141 &nss_ce_clk_src.clkr.hw },
3143 .flags = CLK_SET_RATE_PARENT,
3144 .ops = &clk_branch2_ops,
3149 static struct clk_branch gcc_nssnoc_crypto_clk = {
3150 .halt_reg = 0x68314,
3152 .enable_reg = 0x68314,
3153 .enable_mask = BIT(0),
3154 .hw.init = &(struct clk_init_data){
3155 .name = "gcc_nssnoc_crypto_clk",
3156 .parent_hws = (const struct clk_hw *[]){
3157 &nss_crypto_clk_src.clkr.hw },
3159 .flags = CLK_SET_RATE_PARENT,
3160 .ops = &clk_branch2_ops,
3165 static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
3166 .halt_reg = 0x68304,
3168 .enable_reg = 0x68304,
3169 .enable_mask = BIT(0),
3170 .hw.init = &(struct clk_init_data){
3171 .name = "gcc_nssnoc_ppe_cfg_clk",
3172 .parent_hws = (const struct clk_hw *[]){
3173 &nss_ppe_clk_src.clkr.hw },
3175 .flags = CLK_SET_RATE_PARENT,
3176 .ops = &clk_branch2_ops,
3181 static struct clk_branch gcc_nssnoc_ppe_clk = {
3182 .halt_reg = 0x68300,
3184 .enable_reg = 0x68300,
3185 .enable_mask = BIT(0),
3186 .hw.init = &(struct clk_init_data){
3187 .name = "gcc_nssnoc_ppe_clk",
3188 .parent_hws = (const struct clk_hw *[]){
3189 &nss_ppe_clk_src.clkr.hw },
3191 .flags = CLK_SET_RATE_PARENT,
3192 .ops = &clk_branch2_ops,
3197 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
3198 .halt_reg = 0x68180,
3200 .enable_reg = 0x68180,
3201 .enable_mask = BIT(0),
3202 .hw.init = &(struct clk_init_data){
3203 .name = "gcc_nssnoc_qosgen_ref_clk",
3204 .parent_hws = (const struct clk_hw *[]){
3205 &gcc_xo_clk_src.clkr.hw },
3207 .flags = CLK_SET_RATE_PARENT,
3208 .ops = &clk_branch2_ops,
3213 static struct clk_branch gcc_nssnoc_snoc_clk = {
3214 .halt_reg = 0x68188,
3216 .enable_reg = 0x68188,
3217 .enable_mask = BIT(0),
3218 .hw.init = &(struct clk_init_data){
3219 .name = "gcc_nssnoc_snoc_clk",
3220 .parent_hws = (const struct clk_hw *[]){
3221 &system_noc_clk_src.hw },
3223 .flags = CLK_SET_RATE_PARENT,
3224 .ops = &clk_branch2_ops,
3229 static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
3230 .halt_reg = 0x68184,
3232 .enable_reg = 0x68184,
3233 .enable_mask = BIT(0),
3234 .hw.init = &(struct clk_init_data){
3235 .name = "gcc_nssnoc_timeout_ref_clk",
3236 .parent_hws = (const struct clk_hw *[]){
3237 &gcc_xo_div4_clk_src.hw },
3239 .flags = CLK_SET_RATE_PARENT,
3240 .ops = &clk_branch2_ops,
3245 static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
3246 .halt_reg = 0x68270,
3248 .enable_reg = 0x68270,
3249 .enable_mask = BIT(0),
3250 .hw.init = &(struct clk_init_data){
3251 .name = "gcc_nssnoc_ubi0_ahb_clk",
3252 .parent_hws = (const struct clk_hw *[]){
3253 &nss_ce_clk_src.clkr.hw },
3255 .flags = CLK_SET_RATE_PARENT,
3256 .ops = &clk_branch2_ops,
3261 static struct clk_branch gcc_nssnoc_ubi1_ahb_clk = {
3262 .halt_reg = 0x68274,
3264 .enable_reg = 0x68274,
3265 .enable_mask = BIT(0),
3266 .hw.init = &(struct clk_init_data){
3267 .name = "gcc_nssnoc_ubi1_ahb_clk",
3268 .parent_hws = (const struct clk_hw *[]){
3269 &nss_ce_clk_src.clkr.hw },
3271 .flags = CLK_SET_RATE_PARENT,
3272 .ops = &clk_branch2_ops,
3277 static struct clk_branch gcc_ubi0_ahb_clk = {
3278 .halt_reg = 0x6820c,
3279 .halt_check = BRANCH_HALT_DELAY,
3281 .enable_reg = 0x6820c,
3282 .enable_mask = BIT(0),
3283 .hw.init = &(struct clk_init_data){
3284 .name = "gcc_ubi0_ahb_clk",
3285 .parent_hws = (const struct clk_hw *[]){
3286 &nss_ce_clk_src.clkr.hw },
3288 .flags = CLK_SET_RATE_PARENT,
3289 .ops = &clk_branch2_ops,
3294 static struct clk_branch gcc_ubi0_axi_clk = {
3295 .halt_reg = 0x68200,
3296 .halt_check = BRANCH_HALT_DELAY,
3298 .enable_reg = 0x68200,
3299 .enable_mask = BIT(0),
3300 .hw.init = &(struct clk_init_data){
3301 .name = "gcc_ubi0_axi_clk",
3302 .parent_hws = (const struct clk_hw *[]){
3303 &nss_noc_clk_src.hw },
3305 .flags = CLK_SET_RATE_PARENT,
3306 .ops = &clk_branch2_ops,
3311 static struct clk_branch gcc_ubi0_nc_axi_clk = {
3312 .halt_reg = 0x68204,
3313 .halt_check = BRANCH_HALT_DELAY,
3315 .enable_reg = 0x68204,
3316 .enable_mask = BIT(0),
3317 .hw.init = &(struct clk_init_data){
3318 .name = "gcc_ubi0_nc_axi_clk",
3319 .parent_hws = (const struct clk_hw *[]){
3320 &nss_noc_clk_src.hw },
3322 .flags = CLK_SET_RATE_PARENT,
3323 .ops = &clk_branch2_ops,
3328 static struct clk_branch gcc_ubi0_core_clk = {
3329 .halt_reg = 0x68210,
3330 .halt_check = BRANCH_HALT_DELAY,
3332 .enable_reg = 0x68210,
3333 .enable_mask = BIT(0),
3334 .hw.init = &(struct clk_init_data){
3335 .name = "gcc_ubi0_core_clk",
3336 .parent_hws = (const struct clk_hw *[]){
3337 &nss_ubi0_div_clk_src.clkr.hw },
3339 .flags = CLK_SET_RATE_PARENT,
3340 .ops = &clk_branch2_ops,
3345 static struct clk_branch gcc_ubi0_mpt_clk = {
3346 .halt_reg = 0x68208,
3347 .halt_check = BRANCH_HALT_DELAY,
3349 .enable_reg = 0x68208,
3350 .enable_mask = BIT(0),
3351 .hw.init = &(struct clk_init_data){
3352 .name = "gcc_ubi0_mpt_clk",
3353 .parent_hws = (const struct clk_hw *[]){
3354 &ubi_mpt_clk_src.clkr.hw },
3356 .flags = CLK_SET_RATE_PARENT,
3357 .ops = &clk_branch2_ops,
3362 static struct clk_branch gcc_ubi1_ahb_clk = {
3363 .halt_reg = 0x6822c,
3364 .halt_check = BRANCH_HALT_DELAY,
3366 .enable_reg = 0x6822c,
3367 .enable_mask = BIT(0),
3368 .hw.init = &(struct clk_init_data){
3369 .name = "gcc_ubi1_ahb_clk",
3370 .parent_hws = (const struct clk_hw *[]){
3371 &nss_ce_clk_src.clkr.hw },
3373 .flags = CLK_SET_RATE_PARENT,
3374 .ops = &clk_branch2_ops,
3379 static struct clk_branch gcc_ubi1_axi_clk = {
3380 .halt_reg = 0x68220,
3381 .halt_check = BRANCH_HALT_DELAY,
3383 .enable_reg = 0x68220,
3384 .enable_mask = BIT(0),
3385 .hw.init = &(struct clk_init_data){
3386 .name = "gcc_ubi1_axi_clk",
3387 .parent_hws = (const struct clk_hw *[]){
3388 &nss_noc_clk_src.hw },
3390 .flags = CLK_SET_RATE_PARENT,
3391 .ops = &clk_branch2_ops,
3396 static struct clk_branch gcc_ubi1_nc_axi_clk = {
3397 .halt_reg = 0x68224,
3398 .halt_check = BRANCH_HALT_DELAY,
3400 .enable_reg = 0x68224,
3401 .enable_mask = BIT(0),
3402 .hw.init = &(struct clk_init_data){
3403 .name = "gcc_ubi1_nc_axi_clk",
3404 .parent_hws = (const struct clk_hw *[]){
3405 &nss_noc_clk_src.hw },
3407 .flags = CLK_SET_RATE_PARENT,
3408 .ops = &clk_branch2_ops,
3413 static struct clk_branch gcc_ubi1_core_clk = {
3414 .halt_reg = 0x68230,
3415 .halt_check = BRANCH_HALT_DELAY,
3417 .enable_reg = 0x68230,
3418 .enable_mask = BIT(0),
3419 .hw.init = &(struct clk_init_data){
3420 .name = "gcc_ubi1_core_clk",
3421 .parent_hws = (const struct clk_hw *[]){
3422 &nss_ubi1_div_clk_src.clkr.hw },
3424 .flags = CLK_SET_RATE_PARENT,
3425 .ops = &clk_branch2_ops,
3430 static struct clk_branch gcc_ubi1_mpt_clk = {
3431 .halt_reg = 0x68228,
3432 .halt_check = BRANCH_HALT_DELAY,
3434 .enable_reg = 0x68228,
3435 .enable_mask = BIT(0),
3436 .hw.init = &(struct clk_init_data){
3437 .name = "gcc_ubi1_mpt_clk",
3438 .parent_hws = (const struct clk_hw *[]){
3439 &ubi_mpt_clk_src.clkr.hw },
3441 .flags = CLK_SET_RATE_PARENT,
3442 .ops = &clk_branch2_ops,
3447 static struct clk_branch gcc_cmn_12gpll_ahb_clk = {
3448 .halt_reg = 0x56308,
3450 .enable_reg = 0x56308,
3451 .enable_mask = BIT(0),
3452 .hw.init = &(struct clk_init_data){
3453 .name = "gcc_cmn_12gpll_ahb_clk",
3454 .parent_hws = (const struct clk_hw *[]){
3455 &pcnoc_clk_src.hw },
3457 .flags = CLK_SET_RATE_PARENT,
3458 .ops = &clk_branch2_ops,
3463 static struct clk_branch gcc_cmn_12gpll_sys_clk = {
3464 .halt_reg = 0x5630c,
3466 .enable_reg = 0x5630c,
3467 .enable_mask = BIT(0),
3468 .hw.init = &(struct clk_init_data){
3469 .name = "gcc_cmn_12gpll_sys_clk",
3470 .parent_hws = (const struct clk_hw *[]){
3471 &gcc_xo_clk_src.clkr.hw },
3473 .flags = CLK_SET_RATE_PARENT,
3474 .ops = &clk_branch2_ops,
3479 static struct clk_branch gcc_mdio_ahb_clk = {
3480 .halt_reg = 0x58004,
3482 .enable_reg = 0x58004,
3483 .enable_mask = BIT(0),
3484 .hw.init = &(struct clk_init_data){
3485 .name = "gcc_mdio_ahb_clk",
3486 .parent_hws = (const struct clk_hw *[]){
3487 &pcnoc_clk_src.hw },
3489 .flags = CLK_SET_RATE_PARENT,
3490 .ops = &clk_branch2_ops,
3495 static struct clk_branch gcc_uniphy0_ahb_clk = {
3496 .halt_reg = 0x56008,
3498 .enable_reg = 0x56008,
3499 .enable_mask = BIT(0),
3500 .hw.init = &(struct clk_init_data){
3501 .name = "gcc_uniphy0_ahb_clk",
3502 .parent_hws = (const struct clk_hw *[]){
3503 &pcnoc_clk_src.hw },
3505 .flags = CLK_SET_RATE_PARENT,
3506 .ops = &clk_branch2_ops,
3511 static struct clk_branch gcc_uniphy0_sys_clk = {
3512 .halt_reg = 0x5600c,
3514 .enable_reg = 0x5600c,
3515 .enable_mask = BIT(0),
3516 .hw.init = &(struct clk_init_data){
3517 .name = "gcc_uniphy0_sys_clk",
3518 .parent_hws = (const struct clk_hw *[]){
3519 &gcc_xo_clk_src.clkr.hw },
3521 .flags = CLK_SET_RATE_PARENT,
3522 .ops = &clk_branch2_ops,
3527 static struct clk_branch gcc_uniphy1_ahb_clk = {
3528 .halt_reg = 0x56108,
3530 .enable_reg = 0x56108,
3531 .enable_mask = BIT(0),
3532 .hw.init = &(struct clk_init_data){
3533 .name = "gcc_uniphy1_ahb_clk",
3534 .parent_hws = (const struct clk_hw *[]){
3535 &pcnoc_clk_src.hw },
3537 .flags = CLK_SET_RATE_PARENT,
3538 .ops = &clk_branch2_ops,
3543 static struct clk_branch gcc_uniphy1_sys_clk = {
3544 .halt_reg = 0x5610c,
3546 .enable_reg = 0x5610c,
3547 .enable_mask = BIT(0),
3548 .hw.init = &(struct clk_init_data){
3549 .name = "gcc_uniphy1_sys_clk",
3550 .parent_hws = (const struct clk_hw *[]){
3551 &gcc_xo_clk_src.clkr.hw },
3553 .flags = CLK_SET_RATE_PARENT,
3554 .ops = &clk_branch2_ops,
3559 static struct clk_branch gcc_uniphy2_ahb_clk = {
3560 .halt_reg = 0x56208,
3562 .enable_reg = 0x56208,
3563 .enable_mask = BIT(0),
3564 .hw.init = &(struct clk_init_data){
3565 .name = "gcc_uniphy2_ahb_clk",
3566 .parent_hws = (const struct clk_hw *[]){
3567 &pcnoc_clk_src.hw },
3569 .flags = CLK_SET_RATE_PARENT,
3570 .ops = &clk_branch2_ops,
3575 static struct clk_branch gcc_uniphy2_sys_clk = {
3576 .halt_reg = 0x5620c,
3578 .enable_reg = 0x5620c,
3579 .enable_mask = BIT(0),
3580 .hw.init = &(struct clk_init_data){
3581 .name = "gcc_uniphy2_sys_clk",
3582 .parent_hws = (const struct clk_hw *[]){
3583 &gcc_xo_clk_src.clkr.hw },
3585 .flags = CLK_SET_RATE_PARENT,
3586 .ops = &clk_branch2_ops,
3591 static struct clk_branch gcc_nss_port1_rx_clk = {
3592 .halt_reg = 0x68240,
3594 .enable_reg = 0x68240,
3595 .enable_mask = BIT(0),
3596 .hw.init = &(struct clk_init_data){
3597 .name = "gcc_nss_port1_rx_clk",
3598 .parent_hws = (const struct clk_hw *[]){
3599 &nss_port1_rx_div_clk_src.clkr.hw },
3601 .flags = CLK_SET_RATE_PARENT,
3602 .ops = &clk_branch2_ops,
3607 static struct clk_branch gcc_nss_port1_tx_clk = {
3608 .halt_reg = 0x68244,
3610 .enable_reg = 0x68244,
3611 .enable_mask = BIT(0),
3612 .hw.init = &(struct clk_init_data){
3613 .name = "gcc_nss_port1_tx_clk",
3614 .parent_hws = (const struct clk_hw *[]){
3615 &nss_port1_tx_div_clk_src.clkr.hw },
3617 .flags = CLK_SET_RATE_PARENT,
3618 .ops = &clk_branch2_ops,
3623 static struct clk_branch gcc_nss_port2_rx_clk = {
3624 .halt_reg = 0x68248,
3626 .enable_reg = 0x68248,
3627 .enable_mask = BIT(0),
3628 .hw.init = &(struct clk_init_data){
3629 .name = "gcc_nss_port2_rx_clk",
3630 .parent_hws = (const struct clk_hw *[]){
3631 &nss_port2_rx_div_clk_src.clkr.hw },
3633 .flags = CLK_SET_RATE_PARENT,
3634 .ops = &clk_branch2_ops,
3639 static struct clk_branch gcc_nss_port2_tx_clk = {
3640 .halt_reg = 0x6824c,
3642 .enable_reg = 0x6824c,
3643 .enable_mask = BIT(0),
3644 .hw.init = &(struct clk_init_data){
3645 .name = "gcc_nss_port2_tx_clk",
3646 .parent_hws = (const struct clk_hw *[]){
3647 &nss_port2_tx_div_clk_src.clkr.hw },
3649 .flags = CLK_SET_RATE_PARENT,
3650 .ops = &clk_branch2_ops,
3655 static struct clk_branch gcc_nss_port3_rx_clk = {
3656 .halt_reg = 0x68250,
3658 .enable_reg = 0x68250,
3659 .enable_mask = BIT(0),
3660 .hw.init = &(struct clk_init_data){
3661 .name = "gcc_nss_port3_rx_clk",
3662 .parent_hws = (const struct clk_hw *[]){
3663 &nss_port3_rx_div_clk_src.clkr.hw },
3665 .flags = CLK_SET_RATE_PARENT,
3666 .ops = &clk_branch2_ops,
3671 static struct clk_branch gcc_nss_port3_tx_clk = {
3672 .halt_reg = 0x68254,
3674 .enable_reg = 0x68254,
3675 .enable_mask = BIT(0),
3676 .hw.init = &(struct clk_init_data){
3677 .name = "gcc_nss_port3_tx_clk",
3678 .parent_hws = (const struct clk_hw *[]){
3679 &nss_port3_tx_div_clk_src.clkr.hw },
3681 .flags = CLK_SET_RATE_PARENT,
3682 .ops = &clk_branch2_ops,
3687 static struct clk_branch gcc_nss_port4_rx_clk = {
3688 .halt_reg = 0x68258,
3690 .enable_reg = 0x68258,
3691 .enable_mask = BIT(0),
3692 .hw.init = &(struct clk_init_data){
3693 .name = "gcc_nss_port4_rx_clk",
3694 .parent_hws = (const struct clk_hw *[]){
3695 &nss_port4_rx_div_clk_src.clkr.hw },
3697 .flags = CLK_SET_RATE_PARENT,
3698 .ops = &clk_branch2_ops,
3703 static struct clk_branch gcc_nss_port4_tx_clk = {
3704 .halt_reg = 0x6825c,
3706 .enable_reg = 0x6825c,
3707 .enable_mask = BIT(0),
3708 .hw.init = &(struct clk_init_data){
3709 .name = "gcc_nss_port4_tx_clk",
3710 .parent_hws = (const struct clk_hw *[]){
3711 &nss_port4_tx_div_clk_src.clkr.hw },
3713 .flags = CLK_SET_RATE_PARENT,
3714 .ops = &clk_branch2_ops,
3719 static struct clk_branch gcc_nss_port5_rx_clk = {
3720 .halt_reg = 0x68260,
3722 .enable_reg = 0x68260,
3723 .enable_mask = BIT(0),
3724 .hw.init = &(struct clk_init_data){
3725 .name = "gcc_nss_port5_rx_clk",
3726 .parent_hws = (const struct clk_hw *[]){
3727 &nss_port5_rx_div_clk_src.clkr.hw },
3729 .flags = CLK_SET_RATE_PARENT,
3730 .ops = &clk_branch2_ops,
3735 static struct clk_branch gcc_nss_port5_tx_clk = {
3736 .halt_reg = 0x68264,
3738 .enable_reg = 0x68264,
3739 .enable_mask = BIT(0),
3740 .hw.init = &(struct clk_init_data){
3741 .name = "gcc_nss_port5_tx_clk",
3742 .parent_hws = (const struct clk_hw *[]){
3743 &nss_port5_tx_div_clk_src.clkr.hw },
3745 .flags = CLK_SET_RATE_PARENT,
3746 .ops = &clk_branch2_ops,
3751 static struct clk_branch gcc_nss_port6_rx_clk = {
3752 .halt_reg = 0x68268,
3754 .enable_reg = 0x68268,
3755 .enable_mask = BIT(0),
3756 .hw.init = &(struct clk_init_data){
3757 .name = "gcc_nss_port6_rx_clk",
3758 .parent_hws = (const struct clk_hw *[]){
3759 &nss_port6_rx_div_clk_src.clkr.hw },
3761 .flags = CLK_SET_RATE_PARENT,
3762 .ops = &clk_branch2_ops,
3767 static struct clk_branch gcc_nss_port6_tx_clk = {
3768 .halt_reg = 0x6826c,
3770 .enable_reg = 0x6826c,
3771 .enable_mask = BIT(0),
3772 .hw.init = &(struct clk_init_data){
3773 .name = "gcc_nss_port6_tx_clk",
3774 .parent_hws = (const struct clk_hw *[]){
3775 &nss_port6_tx_div_clk_src.clkr.hw },
3777 .flags = CLK_SET_RATE_PARENT,
3778 .ops = &clk_branch2_ops,
3783 static struct clk_branch gcc_port1_mac_clk = {
3784 .halt_reg = 0x68320,
3786 .enable_reg = 0x68320,
3787 .enable_mask = BIT(0),
3788 .hw.init = &(struct clk_init_data){
3789 .name = "gcc_port1_mac_clk",
3790 .parent_hws = (const struct clk_hw *[]){
3791 &nss_ppe_clk_src.clkr.hw },
3793 .flags = CLK_SET_RATE_PARENT,
3794 .ops = &clk_branch2_ops,
3799 static struct clk_branch gcc_port2_mac_clk = {
3800 .halt_reg = 0x68324,
3802 .enable_reg = 0x68324,
3803 .enable_mask = BIT(0),
3804 .hw.init = &(struct clk_init_data){
3805 .name = "gcc_port2_mac_clk",
3806 .parent_hws = (const struct clk_hw *[]){
3807 &nss_ppe_clk_src.clkr.hw },
3809 .flags = CLK_SET_RATE_PARENT,
3810 .ops = &clk_branch2_ops,
3815 static struct clk_branch gcc_port3_mac_clk = {
3816 .halt_reg = 0x68328,
3818 .enable_reg = 0x68328,
3819 .enable_mask = BIT(0),
3820 .hw.init = &(struct clk_init_data){
3821 .name = "gcc_port3_mac_clk",
3822 .parent_hws = (const struct clk_hw *[]){
3823 &nss_ppe_clk_src.clkr.hw },
3825 .flags = CLK_SET_RATE_PARENT,
3826 .ops = &clk_branch2_ops,
3831 static struct clk_branch gcc_port4_mac_clk = {
3832 .halt_reg = 0x6832c,
3834 .enable_reg = 0x6832c,
3835 .enable_mask = BIT(0),
3836 .hw.init = &(struct clk_init_data){
3837 .name = "gcc_port4_mac_clk",
3838 .parent_hws = (const struct clk_hw *[]){
3839 &nss_ppe_clk_src.clkr.hw },
3841 .flags = CLK_SET_RATE_PARENT,
3842 .ops = &clk_branch2_ops,
3847 static struct clk_branch gcc_port5_mac_clk = {
3848 .halt_reg = 0x68330,
3850 .enable_reg = 0x68330,
3851 .enable_mask = BIT(0),
3852 .hw.init = &(struct clk_init_data){
3853 .name = "gcc_port5_mac_clk",
3854 .parent_hws = (const struct clk_hw *[]){
3855 &nss_ppe_clk_src.clkr.hw },
3857 .flags = CLK_SET_RATE_PARENT,
3858 .ops = &clk_branch2_ops,
3863 static struct clk_branch gcc_port6_mac_clk = {
3864 .halt_reg = 0x68334,
3866 .enable_reg = 0x68334,
3867 .enable_mask = BIT(0),
3868 .hw.init = &(struct clk_init_data){
3869 .name = "gcc_port6_mac_clk",
3870 .parent_hws = (const struct clk_hw *[]){
3871 &nss_ppe_clk_src.clkr.hw },
3873 .flags = CLK_SET_RATE_PARENT,
3874 .ops = &clk_branch2_ops,
3879 static struct clk_branch gcc_uniphy0_port1_rx_clk = {
3880 .halt_reg = 0x56010,
3882 .enable_reg = 0x56010,
3883 .enable_mask = BIT(0),
3884 .hw.init = &(struct clk_init_data){
3885 .name = "gcc_uniphy0_port1_rx_clk",
3886 .parent_hws = (const struct clk_hw *[]){
3887 &nss_port1_rx_div_clk_src.clkr.hw },
3889 .flags = CLK_SET_RATE_PARENT,
3890 .ops = &clk_branch2_ops,
3895 static struct clk_branch gcc_uniphy0_port1_tx_clk = {
3896 .halt_reg = 0x56014,
3898 .enable_reg = 0x56014,
3899 .enable_mask = BIT(0),
3900 .hw.init = &(struct clk_init_data){
3901 .name = "gcc_uniphy0_port1_tx_clk",
3902 .parent_hws = (const struct clk_hw *[]){
3903 &nss_port1_tx_div_clk_src.clkr.hw },
3905 .flags = CLK_SET_RATE_PARENT,
3906 .ops = &clk_branch2_ops,
3911 static struct clk_branch gcc_uniphy0_port2_rx_clk = {
3912 .halt_reg = 0x56018,
3914 .enable_reg = 0x56018,
3915 .enable_mask = BIT(0),
3916 .hw.init = &(struct clk_init_data){
3917 .name = "gcc_uniphy0_port2_rx_clk",
3918 .parent_hws = (const struct clk_hw *[]){
3919 &nss_port2_rx_div_clk_src.clkr.hw },
3921 .flags = CLK_SET_RATE_PARENT,
3922 .ops = &clk_branch2_ops,
3927 static struct clk_branch gcc_uniphy0_port2_tx_clk = {
3928 .halt_reg = 0x5601c,
3930 .enable_reg = 0x5601c,
3931 .enable_mask = BIT(0),
3932 .hw.init = &(struct clk_init_data){
3933 .name = "gcc_uniphy0_port2_tx_clk",
3934 .parent_hws = (const struct clk_hw *[]){
3935 &nss_port2_tx_div_clk_src.clkr.hw },
3937 .flags = CLK_SET_RATE_PARENT,
3938 .ops = &clk_branch2_ops,
3943 static struct clk_branch gcc_uniphy0_port3_rx_clk = {
3944 .halt_reg = 0x56020,
3946 .enable_reg = 0x56020,
3947 .enable_mask = BIT(0),
3948 .hw.init = &(struct clk_init_data){
3949 .name = "gcc_uniphy0_port3_rx_clk",
3950 .parent_hws = (const struct clk_hw *[]){
3951 &nss_port3_rx_div_clk_src.clkr.hw },
3953 .flags = CLK_SET_RATE_PARENT,
3954 .ops = &clk_branch2_ops,
3959 static struct clk_branch gcc_uniphy0_port3_tx_clk = {
3960 .halt_reg = 0x56024,
3962 .enable_reg = 0x56024,
3963 .enable_mask = BIT(0),
3964 .hw.init = &(struct clk_init_data){
3965 .name = "gcc_uniphy0_port3_tx_clk",
3966 .parent_hws = (const struct clk_hw *[]){
3967 &nss_port3_tx_div_clk_src.clkr.hw },
3969 .flags = CLK_SET_RATE_PARENT,
3970 .ops = &clk_branch2_ops,
3975 static struct clk_branch gcc_uniphy0_port4_rx_clk = {
3976 .halt_reg = 0x56028,
3978 .enable_reg = 0x56028,
3979 .enable_mask = BIT(0),
3980 .hw.init = &(struct clk_init_data){
3981 .name = "gcc_uniphy0_port4_rx_clk",
3982 .parent_hws = (const struct clk_hw *[]){
3983 &nss_port4_rx_div_clk_src.clkr.hw },
3985 .flags = CLK_SET_RATE_PARENT,
3986 .ops = &clk_branch2_ops,
3991 static struct clk_branch gcc_uniphy0_port4_tx_clk = {
3992 .halt_reg = 0x5602c,
3994 .enable_reg = 0x5602c,
3995 .enable_mask = BIT(0),
3996 .hw.init = &(struct clk_init_data){
3997 .name = "gcc_uniphy0_port4_tx_clk",
3998 .parent_hws = (const struct clk_hw *[]){
3999 &nss_port4_tx_div_clk_src.clkr.hw },
4001 .flags = CLK_SET_RATE_PARENT,
4002 .ops = &clk_branch2_ops,
4007 static struct clk_branch gcc_uniphy0_port5_rx_clk = {
4008 .halt_reg = 0x56030,
4010 .enable_reg = 0x56030,
4011 .enable_mask = BIT(0),
4012 .hw.init = &(struct clk_init_data){
4013 .name = "gcc_uniphy0_port5_rx_clk",
4014 .parent_hws = (const struct clk_hw *[]){
4015 &nss_port5_rx_div_clk_src.clkr.hw },
4017 .flags = CLK_SET_RATE_PARENT,
4018 .ops = &clk_branch2_ops,
4023 static struct clk_branch gcc_uniphy0_port5_tx_clk = {
4024 .halt_reg = 0x56034,
4026 .enable_reg = 0x56034,
4027 .enable_mask = BIT(0),
4028 .hw.init = &(struct clk_init_data){
4029 .name = "gcc_uniphy0_port5_tx_clk",
4030 .parent_hws = (const struct clk_hw *[]){
4031 &nss_port5_tx_div_clk_src.clkr.hw },
4033 .flags = CLK_SET_RATE_PARENT,
4034 .ops = &clk_branch2_ops,
4039 static struct clk_branch gcc_uniphy1_port5_rx_clk = {
4040 .halt_reg = 0x56110,
4042 .enable_reg = 0x56110,
4043 .enable_mask = BIT(0),
4044 .hw.init = &(struct clk_init_data){
4045 .name = "gcc_uniphy1_port5_rx_clk",
4046 .parent_hws = (const struct clk_hw *[]){
4047 &nss_port5_rx_div_clk_src.clkr.hw },
4049 .flags = CLK_SET_RATE_PARENT,
4050 .ops = &clk_branch2_ops,
4055 static struct clk_branch gcc_uniphy1_port5_tx_clk = {
4056 .halt_reg = 0x56114,
4058 .enable_reg = 0x56114,
4059 .enable_mask = BIT(0),
4060 .hw.init = &(struct clk_init_data){
4061 .name = "gcc_uniphy1_port5_tx_clk",
4062 .parent_hws = (const struct clk_hw *[]){
4063 &nss_port5_tx_div_clk_src.clkr.hw },
4065 .flags = CLK_SET_RATE_PARENT,
4066 .ops = &clk_branch2_ops,
4071 static struct clk_branch gcc_uniphy2_port6_rx_clk = {
4072 .halt_reg = 0x56210,
4074 .enable_reg = 0x56210,
4075 .enable_mask = BIT(0),
4076 .hw.init = &(struct clk_init_data){
4077 .name = "gcc_uniphy2_port6_rx_clk",
4078 .parent_hws = (const struct clk_hw *[]){
4079 &nss_port6_rx_div_clk_src.clkr.hw },
4081 .flags = CLK_SET_RATE_PARENT,
4082 .ops = &clk_branch2_ops,
4087 static struct clk_branch gcc_uniphy2_port6_tx_clk = {
4088 .halt_reg = 0x56214,
4090 .enable_reg = 0x56214,
4091 .enable_mask = BIT(0),
4092 .hw.init = &(struct clk_init_data){
4093 .name = "gcc_uniphy2_port6_tx_clk",
4094 .parent_hws = (const struct clk_hw *[]){
4095 &nss_port6_tx_div_clk_src.clkr.hw },
4097 .flags = CLK_SET_RATE_PARENT,
4098 .ops = &clk_branch2_ops,
4103 static struct clk_branch gcc_crypto_ahb_clk = {
4104 .halt_reg = 0x16024,
4105 .halt_check = BRANCH_HALT_VOTED,
4107 .enable_reg = 0x0b004,
4108 .enable_mask = BIT(0),
4109 .hw.init = &(struct clk_init_data){
4110 .name = "gcc_crypto_ahb_clk",
4111 .parent_hws = (const struct clk_hw *[]){
4112 &pcnoc_clk_src.hw },
4114 .flags = CLK_SET_RATE_PARENT,
4115 .ops = &clk_branch2_ops,
4120 static struct clk_branch gcc_crypto_axi_clk = {
4121 .halt_reg = 0x16020,
4122 .halt_check = BRANCH_HALT_VOTED,
4124 .enable_reg = 0x0b004,
4125 .enable_mask = BIT(1),
4126 .hw.init = &(struct clk_init_data){
4127 .name = "gcc_crypto_axi_clk",
4128 .parent_hws = (const struct clk_hw *[]){
4129 &pcnoc_clk_src.hw },
4131 .flags = CLK_SET_RATE_PARENT,
4132 .ops = &clk_branch2_ops,
4137 static struct clk_branch gcc_crypto_clk = {
4138 .halt_reg = 0x1601c,
4139 .halt_check = BRANCH_HALT_VOTED,
4141 .enable_reg = 0x0b004,
4142 .enable_mask = BIT(2),
4143 .hw.init = &(struct clk_init_data){
4144 .name = "gcc_crypto_clk",
4145 .parent_hws = (const struct clk_hw *[]){
4146 &crypto_clk_src.clkr.hw },
4148 .flags = CLK_SET_RATE_PARENT,
4149 .ops = &clk_branch2_ops,
4154 static struct clk_branch gcc_gp1_clk = {
4155 .halt_reg = 0x08000,
4157 .enable_reg = 0x08000,
4158 .enable_mask = BIT(0),
4159 .hw.init = &(struct clk_init_data){
4160 .name = "gcc_gp1_clk",
4161 .parent_hws = (const struct clk_hw *[]){
4162 &gp1_clk_src.clkr.hw },
4164 .flags = CLK_SET_RATE_PARENT,
4165 .ops = &clk_branch2_ops,
4170 static struct clk_branch gcc_gp2_clk = {
4171 .halt_reg = 0x09000,
4173 .enable_reg = 0x09000,
4174 .enable_mask = BIT(0),
4175 .hw.init = &(struct clk_init_data){
4176 .name = "gcc_gp2_clk",
4177 .parent_hws = (const struct clk_hw *[]){
4178 &gp2_clk_src.clkr.hw },
4180 .flags = CLK_SET_RATE_PARENT,
4181 .ops = &clk_branch2_ops,
4186 static struct clk_branch gcc_gp3_clk = {
4187 .halt_reg = 0x0a000,
4189 .enable_reg = 0x0a000,
4190 .enable_mask = BIT(0),
4191 .hw.init = &(struct clk_init_data){
4192 .name = "gcc_gp3_clk",
4193 .parent_hws = (const struct clk_hw *[]){
4194 &gp3_clk_src.clkr.hw },
4196 .flags = CLK_SET_RATE_PARENT,
4197 .ops = &clk_branch2_ops,
4202 static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
4203 F(19200000, P_XO, 1, 0, 0),
4204 F(100000000, P_GPLL0, 8, 0, 0),
4208 static struct clk_rcg2 pcie0_rchng_clk_src = {
4209 .cmd_rcgr = 0x75070,
4210 .freq_tbl = ftbl_pcie_rchng_clk_src,
4212 .parent_map = gcc_xo_gpll0_map,
4213 .clkr.hw.init = &(struct clk_init_data){
4214 .name = "pcie0_rchng_clk_src",
4215 .parent_data = gcc_xo_gpll0,
4216 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
4217 .ops = &clk_rcg2_ops,
4221 static struct clk_branch gcc_pcie0_rchng_clk = {
4222 .halt_reg = 0x75070,
4225 .enable_reg = 0x75070,
4226 .enable_mask = BIT(1),
4227 .hw.init = &(struct clk_init_data){
4228 .name = "gcc_pcie0_rchng_clk",
4229 .parent_hws = (const struct clk_hw *[]){
4230 &pcie0_rchng_clk_src.clkr.hw,
4233 .flags = CLK_SET_RATE_PARENT,
4234 .ops = &clk_branch2_ops,
4239 static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
4240 .halt_reg = 0x75048,
4243 .enable_reg = 0x75048,
4244 .enable_mask = BIT(0),
4245 .hw.init = &(struct clk_init_data){
4246 .name = "gcc_pcie0_axi_s_bridge_clk",
4247 .parent_hws = (const struct clk_hw *[]){
4248 &pcie0_axi_clk_src.clkr.hw,
4251 .flags = CLK_SET_RATE_PARENT,
4252 .ops = &clk_branch2_ops,
4257 static struct gdsc usb0_gdsc = {
4260 .name = "usb0_gdsc",
4262 .pwrsts = PWRSTS_OFF_ON,
4265 static struct gdsc usb1_gdsc = {
4268 .name = "usb1_gdsc",
4270 .pwrsts = PWRSTS_OFF_ON,
4273 static const struct alpha_pll_config ubi32_pll_config = {
4275 .config_ctl_val = 0x200d4aa8,
4276 .config_ctl_hi_val = 0x3c2,
4277 .main_output_mask = BIT(0),
4278 .aux_output_mask = BIT(1),
4280 .pre_div_mask = BIT(12),
4281 .post_div_val = 0x0,
4282 .post_div_mask = GENMASK(9, 8),
4285 static const struct alpha_pll_config nss_crypto_pll_config = {
4289 .config_ctl_val = 0x4001055b,
4290 .main_output_mask = BIT(0),
4292 .pre_div_mask = GENMASK(14, 12),
4293 .post_div_val = 0x1 << 8,
4294 .post_div_mask = GENMASK(11, 8),
4295 .vco_mask = GENMASK(21, 20),
4297 .alpha_en_mask = BIT(24),
4300 static struct clk_hw *gcc_ipq8074_hws[] = {
4301 &gpll0_out_main_div2.hw,
4302 &gpll6_out_main_div2.hw,
4304 &system_noc_clk_src.hw,
4305 &gcc_xo_div4_clk_src.hw,
4306 &nss_noc_clk_src.hw,
4307 &nss_ppe_cdiv_clk_src.hw,
4310 static struct clk_regmap *gcc_ipq8074_clks[] = {
4311 [GPLL0_MAIN] = &gpll0_main.clkr,
4312 [GPLL0] = &gpll0.clkr,
4313 [GPLL2_MAIN] = &gpll2_main.clkr,
4314 [GPLL2] = &gpll2.clkr,
4315 [GPLL4_MAIN] = &gpll4_main.clkr,
4316 [GPLL4] = &gpll4.clkr,
4317 [GPLL6_MAIN] = &gpll6_main.clkr,
4318 [GPLL6] = &gpll6.clkr,
4319 [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
4320 [UBI32_PLL] = &ubi32_pll.clkr,
4321 [NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
4322 [NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
4323 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
4324 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
4325 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4326 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4327 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4328 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4329 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4330 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4331 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4332 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4333 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
4334 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
4335 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
4336 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
4337 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4338 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4339 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
4340 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
4341 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
4342 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
4343 [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
4344 [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
4345 [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
4346 [PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr,
4347 [PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr,
4348 [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,
4349 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4350 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4351 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4352 [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
4353 [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
4354 [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
4355 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
4356 [USB1_MASTER_CLK_SRC] = &usb1_master_clk_src.clkr,
4357 [USB1_AUX_CLK_SRC] = &usb1_aux_clk_src.clkr,
4358 [USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
4359 [USB1_PIPE_CLK_SRC] = &usb1_pipe_clk_src.clkr,
4360 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
4361 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
4362 [NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
4363 [NSS_NOC_BFDCD_CLK_SRC] = &nss_noc_bfdcd_clk_src.clkr,
4364 [NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
4365 [NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
4366 [NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
4367 [NSS_UBI1_CLK_SRC] = &nss_ubi1_clk_src.clkr,
4368 [NSS_UBI1_DIV_CLK_SRC] = &nss_ubi1_div_clk_src.clkr,
4369 [UBI_MPT_CLK_SRC] = &ubi_mpt_clk_src.clkr,
4370 [NSS_IMEM_CLK_SRC] = &nss_imem_clk_src.clkr,
4371 [NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
4372 [NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr,
4373 [NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr,
4374 [NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr,
4375 [NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr,
4376 [NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr,
4377 [NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr,
4378 [NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr,
4379 [NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr,
4380 [NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr,
4381 [NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr,
4382 [NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr,
4383 [NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr,
4384 [NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr,
4385 [NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr,
4386 [NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr,
4387 [NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr,
4388 [NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr,
4389 [NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr,
4390 [NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr,
4391 [NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr,
4392 [NSS_PORT6_RX_CLK_SRC] = &nss_port6_rx_clk_src.clkr,
4393 [NSS_PORT6_RX_DIV_CLK_SRC] = &nss_port6_rx_div_clk_src.clkr,
4394 [NSS_PORT6_TX_CLK_SRC] = &nss_port6_tx_clk_src.clkr,
4395 [NSS_PORT6_TX_DIV_CLK_SRC] = &nss_port6_tx_div_clk_src.clkr,
4396 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4397 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4398 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4399 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4400 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
4401 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4402 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4403 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4404 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4405 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4406 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4407 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4408 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4409 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
4410 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
4411 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
4412 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
4413 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4414 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4415 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
4416 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
4417 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
4418 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
4419 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4420 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
4421 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
4422 [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
4423 [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
4424 [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
4425 [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
4426 [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
4427 [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
4428 [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,
4429 [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,
4430 [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,
4431 [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,
4432 [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,
4433 [GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr,
4434 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
4435 [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
4436 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
4437 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
4438 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
4439 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
4440 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
4441 [GCC_USB1_AUX_CLK] = &gcc_usb1_aux_clk.clkr,
4442 [GCC_SYS_NOC_USB1_AXI_CLK] = &gcc_sys_noc_usb1_axi_clk.clkr,
4443 [GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
4444 [GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
4445 [GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
4446 [GCC_USB1_PIPE_CLK] = &gcc_usb1_pipe_clk.clkr,
4447 [GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
4448 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4449 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4450 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4451 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4452 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4453 [GCC_MEM_NOC_NSS_AXI_CLK] = &gcc_mem_noc_nss_axi_clk.clkr,
4454 [GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
4455 [GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
4456 [GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
4457 [GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
4458 [GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
4459 [GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
4460 [GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
4461 [GCC_NSS_IMEM_CLK] = &gcc_nss_imem_clk.clkr,
4462 [GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
4463 [GCC_NSS_PPE_BTQ_CLK] = &gcc_nss_ppe_btq_clk.clkr,
4464 [GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
4465 [GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
4466 [GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
4467 [GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
4468 [GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
4469 [GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
4470 [GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
4471 [GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
4472 [GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
4473 [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
4474 [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
4475 [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
4476 [GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
4477 [GCC_NSSNOC_UBI1_AHB_CLK] = &gcc_nssnoc_ubi1_ahb_clk.clkr,
4478 [GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
4479 [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
4480 [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
4481 [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
4482 [GCC_UBI0_MPT_CLK] = &gcc_ubi0_mpt_clk.clkr,
4483 [GCC_UBI1_AHB_CLK] = &gcc_ubi1_ahb_clk.clkr,
4484 [GCC_UBI1_AXI_CLK] = &gcc_ubi1_axi_clk.clkr,
4485 [GCC_UBI1_NC_AXI_CLK] = &gcc_ubi1_nc_axi_clk.clkr,
4486 [GCC_UBI1_CORE_CLK] = &gcc_ubi1_core_clk.clkr,
4487 [GCC_UBI1_MPT_CLK] = &gcc_ubi1_mpt_clk.clkr,
4488 [GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,
4489 [GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,
4490 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
4491 [GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,
4492 [GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,
4493 [GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,
4494 [GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,
4495 [GCC_UNIPHY2_AHB_CLK] = &gcc_uniphy2_ahb_clk.clkr,
4496 [GCC_UNIPHY2_SYS_CLK] = &gcc_uniphy2_sys_clk.clkr,
4497 [GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr,
4498 [GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr,
4499 [GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr,
4500 [GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr,
4501 [GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr,
4502 [GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr,
4503 [GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr,
4504 [GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr,
4505 [GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr,
4506 [GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr,
4507 [GCC_NSS_PORT6_RX_CLK] = &gcc_nss_port6_rx_clk.clkr,
4508 [GCC_NSS_PORT6_TX_CLK] = &gcc_nss_port6_tx_clk.clkr,
4509 [GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr,
4510 [GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr,
4511 [GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr,
4512 [GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr,
4513 [GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr,
4514 [GCC_PORT6_MAC_CLK] = &gcc_port6_mac_clk.clkr,
4515 [GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr,
4516 [GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr,
4517 [GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr,
4518 [GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr,
4519 [GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr,
4520 [GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr,
4521 [GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr,
4522 [GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr,
4523 [GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr,
4524 [GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr,
4525 [GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr,
4526 [GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr,
4527 [GCC_UNIPHY2_PORT6_RX_CLK] = &gcc_uniphy2_port6_rx_clk.clkr,
4528 [GCC_UNIPHY2_PORT6_TX_CLK] = &gcc_uniphy2_port6_tx_clk.clkr,
4529 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
4530 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
4531 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
4532 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4533 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4534 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4535 [GCC_PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,
4536 [GCC_PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,
4537 [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
4538 [GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr,
4541 static const struct qcom_reset_map gcc_ipq8074_resets[] = {
4542 [GCC_BLSP1_BCR] = { 0x01000, 0 },
4543 [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
4544 [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
4545 [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
4546 [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
4547 [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
4548 [GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
4549 [GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
4550 [GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
4551 [GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
4552 [GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
4553 [GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
4554 [GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
4555 [GCC_IMEM_BCR] = { 0x0e000, 0 },
4556 [GCC_SMMU_BCR] = { 0x12000, 0 },
4557 [GCC_APSS_TCU_BCR] = { 0x12050, 0 },
4558 [GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
4559 [GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
4560 [GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
4561 [GCC_PRNG_BCR] = { 0x13000, 0 },
4562 [GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
4563 [GCC_CRYPTO_BCR] = { 0x16000, 0 },
4564 [GCC_WCSS_BCR] = { 0x18000, 0 },
4565 [GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
4566 [GCC_NSS_BCR] = { 0x19000, 0 },
4567 [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
4568 [GCC_ADSS_BCR] = { 0x1c000, 0 },
4569 [GCC_DDRSS_BCR] = { 0x1e000, 0 },
4570 [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
4571 [GCC_PCNOC_BCR] = { 0x27018, 0 },
4572 [GCC_TCSR_BCR] = { 0x28000, 0 },
4573 [GCC_QDSS_BCR] = { 0x29000, 0 },
4574 [GCC_DCD_BCR] = { 0x2a000, 0 },
4575 [GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
4576 [GCC_MPM_BCR] = { 0x2c000, 0 },
4577 [GCC_SPMI_BCR] = { 0x2e000, 0 },
4578 [GCC_SPDM_BCR] = { 0x2f000, 0 },
4579 [GCC_RBCPR_BCR] = { 0x33000, 0 },
4580 [GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
4581 [GCC_TLMM_BCR] = { 0x34000, 0 },
4582 [GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
4583 [GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
4584 [GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
4585 [GCC_USB0_BCR] = { 0x3e070, 0 },
4586 [GCC_USB1_PHY_BCR] = { 0x3f034, 0 },
4587 [GCC_USB3PHY_1_PHY_BCR] = { 0x3f03c, 0 },
4588 [GCC_USB1_BCR] = { 0x3f070, 0 },
4589 [GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
4590 [GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
4591 [GCC_SDCC1_BCR] = { 0x42000, 0 },
4592 [GCC_SDCC2_BCR] = { 0x43000, 0 },
4593 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
4594 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47008, 0 },
4595 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x47010, 0 },
4596 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
4597 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
4598 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
4599 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
4600 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
4601 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
4602 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
4603 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
4604 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
4605 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
4606 [GCC_UNIPHY0_BCR] = { 0x56000, 0 },
4607 [GCC_UNIPHY1_BCR] = { 0x56100, 0 },
4608 [GCC_UNIPHY2_BCR] = { 0x56200, 0 },
4609 [GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
4610 [GCC_QPIC_BCR] = { 0x57018, 0 },
4611 [GCC_MDIO_BCR] = { 0x58000, 0 },
4612 [GCC_PCIE1_TBU_BCR] = { 0x65000, 0 },
4613 [GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
4614 [GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
4615 [GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
4616 [GCC_USB1_TBU_BCR] = { 0x6a004, 0 },
4617 [GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
4618 [GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
4619 [GCC_PCIE0_BCR] = { 0x75004, 0 },
4620 [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
4621 [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
4622 [GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
4623 [GCC_PCIE1_BCR] = { 0x76004, 0 },
4624 [GCC_PCIE1_PHY_BCR] = { 0x76038, 0 },
4625 [GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 },
4626 [GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 },
4627 [GCC_DCC_BCR] = { 0x77000, 0 },
4628 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
4629 [GCC_APC1_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x79000, 0 },
4630 [GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
4631 [GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
4632 [GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
4633 [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
4634 [GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
4635 [GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 },
4636 [GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 },
4637 [GCC_UBI1_AXI_ARES] = { 0x68010, 8 },
4638 [GCC_UBI1_AHB_ARES] = { 0x68010, 9 },
4639 [GCC_UBI1_NC_AXI_ARES] = { 0x68010, 10 },
4640 [GCC_UBI1_DBG_ARES] = { 0x68010, 11 },
4641 [GCC_UBI1_CORE_CLAMP_ENABLE] = { 0x68010, 12 },
4642 [GCC_UBI1_CLKRST_CLAMP_ENABLE] = { 0x68010, 13 },
4643 [GCC_NSS_CFG_ARES] = { 0x68010, 16 },
4644 [GCC_NSS_IMEM_ARES] = { 0x68010, 17 },
4645 [GCC_NSS_NOC_ARES] = { 0x68010, 18 },
4646 [GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 },
4647 [GCC_NSS_CSR_ARES] = { 0x68010, 20 },
4648 [GCC_NSS_CE_APB_ARES] = { 0x68010, 21 },
4649 [GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 },
4650 [GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 },
4651 [GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 },
4652 [GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 },
4653 [GCC_NSSNOC_UBI1_AHB_ARES] = { 0x68010, 26 },
4654 [GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 },
4655 [GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 },
4656 [GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 },
4657 [GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 },
4658 [GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 },
4659 [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
4660 [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
4661 [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
4662 [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
4663 [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
4664 [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
4665 [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
4666 [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
4667 [GCC_PCIE1_PIPE_ARES] = { 0x76040, 0 },
4668 [GCC_PCIE1_SLEEP_ARES] = { 0x76040, 1 },
4669 [GCC_PCIE1_CORE_STICKY_ARES] = { 0x76040, 2 },
4670 [GCC_PCIE1_AXI_MASTER_ARES] = { 0x76040, 3 },
4671 [GCC_PCIE1_AXI_SLAVE_ARES] = { 0x76040, 4 },
4672 [GCC_PCIE1_AHB_ARES] = { 0x76040, 5 },
4673 [GCC_PCIE1_AXI_MASTER_STICKY_ARES] = { 0x76040, 6 },
4674 [GCC_PPE_FULL_RESET] = { .reg = 0x68014, .bitmask = GENMASK(19, 16) },
4675 [GCC_UNIPHY0_SOFT_RESET] = { .reg = 0x56004, .bitmask = GENMASK(13, 4) | BIT(1) },
4676 [GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
4677 [GCC_UNIPHY1_SOFT_RESET] = { .reg = 0x56104, .bitmask = GENMASK(5, 4) | BIT(1) },
4678 [GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
4679 [GCC_UNIPHY2_SOFT_RESET] = { .reg = 0x56204, .bitmask = GENMASK(5, 4) | BIT(1) },
4680 [GCC_UNIPHY2_XPCS_RESET] = { 0x56204, 2 },
4681 [GCC_EDMA_HW_RESET] = { .reg = 0x68014, .bitmask = GENMASK(21, 20) },
4682 [GCC_NSSPORT1_RESET] = { .reg = 0x68014, .bitmask = BIT(24) | GENMASK(1, 0) },
4683 [GCC_NSSPORT2_RESET] = { .reg = 0x68014, .bitmask = BIT(25) | GENMASK(3, 2) },
4684 [GCC_NSSPORT3_RESET] = { .reg = 0x68014, .bitmask = BIT(26) | GENMASK(5, 4) },
4685 [GCC_NSSPORT4_RESET] = { .reg = 0x68014, .bitmask = BIT(27) | GENMASK(9, 8) },
4686 [GCC_NSSPORT5_RESET] = { .reg = 0x68014, .bitmask = BIT(28) | GENMASK(11, 10) },
4687 [GCC_NSSPORT6_RESET] = { .reg = 0x68014, .bitmask = BIT(29) | GENMASK(13, 12) },
4690 static struct gdsc *gcc_ipq8074_gdscs[] = {
4691 [USB0_GDSC] = &usb0_gdsc,
4692 [USB1_GDSC] = &usb1_gdsc,
4695 static const struct of_device_id gcc_ipq8074_match_table[] = {
4696 { .compatible = "qcom,gcc-ipq8074" },
4699 MODULE_DEVICE_TABLE(of, gcc_ipq8074_match_table);
4701 static const struct regmap_config gcc_ipq8074_regmap_config = {
4705 .max_register = 0x7fffc,
4709 static const struct qcom_cc_desc gcc_ipq8074_desc = {
4710 .config = &gcc_ipq8074_regmap_config,
4711 .clks = gcc_ipq8074_clks,
4712 .num_clks = ARRAY_SIZE(gcc_ipq8074_clks),
4713 .resets = gcc_ipq8074_resets,
4714 .num_resets = ARRAY_SIZE(gcc_ipq8074_resets),
4715 .clk_hws = gcc_ipq8074_hws,
4716 .num_clk_hws = ARRAY_SIZE(gcc_ipq8074_hws),
4717 .gdscs = gcc_ipq8074_gdscs,
4718 .num_gdscs = ARRAY_SIZE(gcc_ipq8074_gdscs),
4721 static int gcc_ipq8074_probe(struct platform_device *pdev)
4723 struct regmap *regmap;
4725 regmap = qcom_cc_map(pdev, &gcc_ipq8074_desc);
4727 return PTR_ERR(regmap);
4729 /* SW Workaround for UBI32 Huayra PLL */
4730 regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26));
4732 clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
4733 clk_alpha_pll_configure(&nss_crypto_pll_main, regmap,
4734 &nss_crypto_pll_config);
4736 return qcom_cc_really_probe(pdev, &gcc_ipq8074_desc, regmap);
4739 static struct platform_driver gcc_ipq8074_driver = {
4740 .probe = gcc_ipq8074_probe,
4742 .name = "qcom,gcc-ipq8074",
4743 .of_match_table = gcc_ipq8074_match_table,
4747 static int __init gcc_ipq8074_init(void)
4749 return platform_driver_register(&gcc_ipq8074_driver);
4751 core_initcall(gcc_ipq8074_init);
4753 static void __exit gcc_ipq8074_exit(void)
4755 platform_driver_unregister(&gcc_ipq8074_driver);
4757 module_exit(gcc_ipq8074_exit);
4759 MODULE_DESCRIPTION("QCOM GCC IPQ8074 Driver");
4760 MODULE_LICENSE("GPL v2");
4761 MODULE_ALIAS("platform:gcc-ipq8074");