2 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
14 #include <linux/kernel.h>
15 #include <linux/err.h>
16 #include <linux/platform_device.h>
17 #include <linux/module.h>
19 #include <linux/of_device.h>
20 #include <linux/clk-provider.h>
21 #include <linux/regmap.h>
23 #include <dt-bindings/clock/qcom,gcc-ipq8074.h>
26 #include "clk-regmap.h"
29 #include "clk-branch.h"
30 #include "clk-alpha-pll.h"
31 #include "clk-regmap-divider.h"
32 #include "clk-regmap-mux.h"
35 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
55 static const char * const gcc_xo_gpll0_gpll0_out_main_div2[] = {
58 "gpll0_out_main_div2",
61 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
67 static const char * const gcc_xo_gpll0[] = {
72 static const struct parent_map gcc_xo_gpll0_map[] = {
77 static const char * const gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
81 "gpll0_out_main_div2",
84 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
91 static const char * const gcc_xo_gpll0_sleep_clk[] = {
97 static const struct parent_map gcc_xo_gpll0_sleep_clk_map[] = {
103 static const char * const gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
107 "gpll0_out_main_div2",
110 static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
117 static const char * const gcc_xo_gpll0_out_main_div2_gpll0[] = {
119 "gpll0_out_main_div2",
123 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
129 static const char * const gcc_usb3phy_0_cc_pipe_clk_xo[] = {
130 "usb3phy_0_cc_pipe_clk",
134 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
135 { P_USB3PHY_0_PIPE, 0 },
139 static const char * const gcc_usb3phy_1_cc_pipe_clk_xo[] = {
140 "usb3phy_1_cc_pipe_clk",
144 static const struct parent_map gcc_usb3phy_1_cc_pipe_clk_xo_map[] = {
145 { P_USB3PHY_1_PIPE, 0 },
149 static const char * const gcc_pcie20_phy0_pipe_clk_xo[] = {
150 "pcie20_phy0_pipe_clk",
154 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
155 { P_PCIE20_PHY0_PIPE, 0 },
159 static const char * const gcc_pcie20_phy1_pipe_clk_xo[] = {
160 "pcie20_phy1_pipe_clk",
164 static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
165 { P_PCIE20_PHY1_PIPE, 0 },
169 static const char * const gcc_xo_gpll0_gpll6_gpll0_div2[] = {
173 "gpll0_out_main_div2",
176 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
183 static const char * const gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
187 "gpll0_out_main_div2",
190 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
197 static const char * const gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2[] = {
199 "bias_pll_nss_noc_clk",
204 static const struct parent_map gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map[] = {
206 { P_BIAS_PLL_NSS_NOC, 1 },
211 static const char * const gcc_xo_nss_crypto_pll_gpll0[] = {
217 static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
219 { P_NSS_CRYPTO_PLL, 1 },
223 static const char * const gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
232 static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
241 static const char * const gcc_xo_gpll0_out_main_div2[] = {
243 "gpll0_out_main_div2",
246 static const struct parent_map gcc_xo_gpll0_out_main_div2_map[] = {
251 static const char * const gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
260 static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
265 { P_NSS_CRYPTO_PLL, 4 },
269 static const char * const gcc_xo_gpll0_gpll4[] = {
275 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
281 static struct clk_alpha_pll gpll0_main = {
283 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
285 .enable_reg = 0x0b000,
286 .enable_mask = BIT(0),
287 .hw.init = &(struct clk_init_data){
288 .name = "gpll0_main",
289 .parent_names = (const char *[]){
293 .ops = &clk_alpha_pll_ops,
298 static struct clk_fixed_factor gpll0_out_main_div2 = {
301 .hw.init = &(struct clk_init_data){
302 .name = "gpll0_out_main_div2",
303 .parent_names = (const char *[]){
307 .ops = &clk_fixed_factor_ops,
308 .flags = CLK_SET_RATE_PARENT,
312 static struct clk_alpha_pll_postdiv gpll0 = {
314 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
316 .clkr.hw.init = &(struct clk_init_data){
318 .parent_names = (const char *[]){
322 .ops = &clk_alpha_pll_postdiv_ro_ops,
326 static struct clk_alpha_pll gpll2_main = {
328 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
330 .enable_reg = 0x0b000,
331 .enable_mask = BIT(2),
332 .hw.init = &(struct clk_init_data){
333 .name = "gpll2_main",
334 .parent_names = (const char *[]){
338 .ops = &clk_alpha_pll_ops,
339 .flags = CLK_IS_CRITICAL,
344 static struct clk_alpha_pll_postdiv gpll2 = {
346 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
348 .clkr.hw.init = &(struct clk_init_data){
350 .parent_names = (const char *[]){
354 .ops = &clk_alpha_pll_postdiv_ro_ops,
355 .flags = CLK_SET_RATE_PARENT,
359 static struct clk_alpha_pll gpll4_main = {
361 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
363 .enable_reg = 0x0b000,
364 .enable_mask = BIT(5),
365 .hw.init = &(struct clk_init_data){
366 .name = "gpll4_main",
367 .parent_names = (const char *[]){
371 .ops = &clk_alpha_pll_ops,
372 .flags = CLK_IS_CRITICAL,
377 static struct clk_alpha_pll_postdiv gpll4 = {
379 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
381 .clkr.hw.init = &(struct clk_init_data){
383 .parent_names = (const char *[]){
387 .ops = &clk_alpha_pll_postdiv_ro_ops,
388 .flags = CLK_SET_RATE_PARENT,
392 static struct clk_alpha_pll gpll6_main = {
394 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
395 .flags = SUPPORTS_DYNAMIC_UPDATE,
397 .enable_reg = 0x0b000,
398 .enable_mask = BIT(7),
399 .hw.init = &(struct clk_init_data){
400 .name = "gpll6_main",
401 .parent_names = (const char *[]){
405 .ops = &clk_alpha_pll_ops,
406 .flags = CLK_IS_CRITICAL,
411 static struct clk_alpha_pll_postdiv gpll6 = {
413 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
415 .clkr.hw.init = &(struct clk_init_data){
417 .parent_names = (const char *[]){
421 .ops = &clk_alpha_pll_postdiv_ro_ops,
422 .flags = CLK_SET_RATE_PARENT,
426 static struct clk_fixed_factor gpll6_out_main_div2 = {
429 .hw.init = &(struct clk_init_data){
430 .name = "gpll6_out_main_div2",
431 .parent_names = (const char *[]){
435 .ops = &clk_fixed_factor_ops,
436 .flags = CLK_SET_RATE_PARENT,
440 static struct clk_alpha_pll ubi32_pll_main = {
442 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
443 .flags = SUPPORTS_DYNAMIC_UPDATE,
445 .enable_reg = 0x0b000,
446 .enable_mask = BIT(6),
447 .hw.init = &(struct clk_init_data){
448 .name = "ubi32_pll_main",
449 .parent_names = (const char *[]){
453 .ops = &clk_alpha_pll_huayra_ops,
458 static struct clk_alpha_pll_postdiv ubi32_pll = {
460 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
462 .clkr.hw.init = &(struct clk_init_data){
464 .parent_names = (const char *[]){
468 .ops = &clk_alpha_pll_postdiv_ro_ops,
469 .flags = CLK_SET_RATE_PARENT,
473 static struct clk_alpha_pll nss_crypto_pll_main = {
475 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
477 .enable_reg = 0x0b000,
478 .enable_mask = BIT(4),
479 .hw.init = &(struct clk_init_data){
480 .name = "nss_crypto_pll_main",
481 .parent_names = (const char *[]){
485 .ops = &clk_alpha_pll_ops,
490 static struct clk_alpha_pll_postdiv nss_crypto_pll = {
492 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
494 .clkr.hw.init = &(struct clk_init_data){
495 .name = "nss_crypto_pll",
496 .parent_names = (const char *[]){
497 "nss_crypto_pll_main"
500 .ops = &clk_alpha_pll_postdiv_ro_ops,
501 .flags = CLK_SET_RATE_PARENT,
505 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
506 F(19200000, P_XO, 1, 0, 0),
507 F(50000000, P_GPLL0, 16, 0, 0),
508 F(100000000, P_GPLL0, 8, 0, 0),
512 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
514 .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
516 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
517 .clkr.hw.init = &(struct clk_init_data){
518 .name = "pcnoc_bfdcd_clk_src",
519 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
521 .ops = &clk_rcg2_ops,
522 .flags = CLK_IS_CRITICAL,
526 static struct clk_fixed_factor pcnoc_clk_src = {
529 .hw.init = &(struct clk_init_data){
530 .name = "pcnoc_clk_src",
531 .parent_names = (const char *[]){
532 "pcnoc_bfdcd_clk_src"
535 .ops = &clk_fixed_factor_ops,
536 .flags = CLK_SET_RATE_PARENT,
540 static struct clk_branch gcc_sleep_clk_src = {
543 .enable_reg = 0x30000,
544 .enable_mask = BIT(1),
545 .hw.init = &(struct clk_init_data){
546 .name = "gcc_sleep_clk_src",
547 .parent_names = (const char *[]){
551 .ops = &clk_branch2_ops,
556 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
557 F(19200000, P_XO, 1, 0, 0),
558 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
559 F(50000000, P_GPLL0, 16, 0, 0),
563 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
565 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
567 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
568 .clkr.hw.init = &(struct clk_init_data){
569 .name = "blsp1_qup1_i2c_apps_clk_src",
570 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
572 .ops = &clk_rcg2_ops,
576 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
577 F(960000, P_XO, 10, 1, 2),
578 F(4800000, P_XO, 4, 0, 0),
579 F(9600000, P_XO, 2, 0, 0),
580 F(12500000, P_GPLL0_DIV2, 16, 1, 2),
581 F(16000000, P_GPLL0, 10, 1, 5),
582 F(19200000, P_XO, 1, 0, 0),
583 F(25000000, P_GPLL0, 16, 1, 2),
584 F(50000000, P_GPLL0, 16, 0, 0),
588 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
590 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
593 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
594 .clkr.hw.init = &(struct clk_init_data){
595 .name = "blsp1_qup1_spi_apps_clk_src",
596 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
598 .ops = &clk_rcg2_ops,
602 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
604 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
606 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
607 .clkr.hw.init = &(struct clk_init_data){
608 .name = "blsp1_qup2_i2c_apps_clk_src",
609 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
611 .ops = &clk_rcg2_ops,
615 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
617 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
620 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
621 .clkr.hw.init = &(struct clk_init_data){
622 .name = "blsp1_qup2_spi_apps_clk_src",
623 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
625 .ops = &clk_rcg2_ops,
629 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
631 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
633 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
634 .clkr.hw.init = &(struct clk_init_data){
635 .name = "blsp1_qup3_i2c_apps_clk_src",
636 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
638 .ops = &clk_rcg2_ops,
642 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
644 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
647 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
648 .clkr.hw.init = &(struct clk_init_data){
649 .name = "blsp1_qup3_spi_apps_clk_src",
650 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
652 .ops = &clk_rcg2_ops,
656 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
658 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
660 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
661 .clkr.hw.init = &(struct clk_init_data){
662 .name = "blsp1_qup4_i2c_apps_clk_src",
663 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
665 .ops = &clk_rcg2_ops,
669 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
671 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
674 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
675 .clkr.hw.init = &(struct clk_init_data){
676 .name = "blsp1_qup4_spi_apps_clk_src",
677 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
679 .ops = &clk_rcg2_ops,
683 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
685 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
687 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
688 .clkr.hw.init = &(struct clk_init_data){
689 .name = "blsp1_qup5_i2c_apps_clk_src",
690 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
692 .ops = &clk_rcg2_ops,
696 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
698 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
701 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
702 .clkr.hw.init = &(struct clk_init_data){
703 .name = "blsp1_qup5_spi_apps_clk_src",
704 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
706 .ops = &clk_rcg2_ops,
710 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
712 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
714 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
715 .clkr.hw.init = &(struct clk_init_data){
716 .name = "blsp1_qup6_i2c_apps_clk_src",
717 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
719 .ops = &clk_rcg2_ops,
723 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
725 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
728 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
729 .clkr.hw.init = &(struct clk_init_data){
730 .name = "blsp1_qup6_spi_apps_clk_src",
731 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
733 .ops = &clk_rcg2_ops,
737 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
738 F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
739 F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
740 F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
741 F(16000000, P_GPLL0_DIV2, 5, 1, 5),
742 F(19200000, P_XO, 1, 0, 0),
743 F(24000000, P_GPLL0, 1, 3, 100),
744 F(25000000, P_GPLL0, 16, 1, 2),
745 F(32000000, P_GPLL0, 1, 1, 25),
746 F(40000000, P_GPLL0, 1, 1, 20),
747 F(46400000, P_GPLL0, 1, 29, 500),
748 F(48000000, P_GPLL0, 1, 3, 50),
749 F(51200000, P_GPLL0, 1, 8, 125),
750 F(56000000, P_GPLL0, 1, 7, 100),
751 F(58982400, P_GPLL0, 1, 1152, 15625),
752 F(60000000, P_GPLL0, 1, 3, 40),
753 F(64000000, P_GPLL0, 12.5, 1, 1),
757 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
759 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
762 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
763 .clkr.hw.init = &(struct clk_init_data){
764 .name = "blsp1_uart1_apps_clk_src",
765 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
767 .ops = &clk_rcg2_ops,
771 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
773 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
776 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
777 .clkr.hw.init = &(struct clk_init_data){
778 .name = "blsp1_uart2_apps_clk_src",
779 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
781 .ops = &clk_rcg2_ops,
785 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
787 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
790 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
791 .clkr.hw.init = &(struct clk_init_data){
792 .name = "blsp1_uart3_apps_clk_src",
793 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
795 .ops = &clk_rcg2_ops,
799 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
801 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
804 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
805 .clkr.hw.init = &(struct clk_init_data){
806 .name = "blsp1_uart4_apps_clk_src",
807 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
809 .ops = &clk_rcg2_ops,
813 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
815 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
818 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
819 .clkr.hw.init = &(struct clk_init_data){
820 .name = "blsp1_uart5_apps_clk_src",
821 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
823 .ops = &clk_rcg2_ops,
827 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
829 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
832 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
833 .clkr.hw.init = &(struct clk_init_data){
834 .name = "blsp1_uart6_apps_clk_src",
835 .parent_names = gcc_xo_gpll0_gpll0_out_main_div2,
837 .ops = &clk_rcg2_ops,
841 static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
842 F(19200000, P_XO, 1, 0, 0),
843 F(200000000, P_GPLL0, 4, 0, 0),
847 static struct clk_rcg2 pcie0_axi_clk_src = {
849 .freq_tbl = ftbl_pcie_axi_clk_src,
851 .parent_map = gcc_xo_gpll0_map,
852 .clkr.hw.init = &(struct clk_init_data){
853 .name = "pcie0_axi_clk_src",
854 .parent_names = gcc_xo_gpll0,
856 .ops = &clk_rcg2_ops,
860 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
861 F(19200000, P_XO, 1, 0, 0),
864 static struct clk_rcg2 pcie0_aux_clk_src = {
866 .freq_tbl = ftbl_pcie_aux_clk_src,
869 .parent_map = gcc_xo_gpll0_sleep_clk_map,
870 .clkr.hw.init = &(struct clk_init_data){
871 .name = "pcie0_aux_clk_src",
872 .parent_names = gcc_xo_gpll0_sleep_clk,
874 .ops = &clk_rcg2_ops,
878 static struct clk_regmap_mux pcie0_pipe_clk_src = {
882 .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
884 .hw.init = &(struct clk_init_data){
885 .name = "pcie0_pipe_clk_src",
886 .parent_names = gcc_pcie20_phy0_pipe_clk_xo,
888 .ops = &clk_regmap_mux_closest_ops,
889 .flags = CLK_SET_RATE_PARENT,
894 static struct clk_rcg2 pcie1_axi_clk_src = {
896 .freq_tbl = ftbl_pcie_axi_clk_src,
898 .parent_map = gcc_xo_gpll0_map,
899 .clkr.hw.init = &(struct clk_init_data){
900 .name = "pcie1_axi_clk_src",
901 .parent_names = gcc_xo_gpll0,
903 .ops = &clk_rcg2_ops,
907 static struct clk_rcg2 pcie1_aux_clk_src = {
909 .freq_tbl = ftbl_pcie_aux_clk_src,
912 .parent_map = gcc_xo_gpll0_sleep_clk_map,
913 .clkr.hw.init = &(struct clk_init_data){
914 .name = "pcie1_aux_clk_src",
915 .parent_names = gcc_xo_gpll0_sleep_clk,
917 .ops = &clk_rcg2_ops,
921 static struct clk_regmap_mux pcie1_pipe_clk_src = {
925 .parent_map = gcc_pcie20_phy1_pipe_clk_xo_map,
927 .hw.init = &(struct clk_init_data){
928 .name = "pcie1_pipe_clk_src",
929 .parent_names = gcc_pcie20_phy1_pipe_clk_xo,
931 .ops = &clk_regmap_mux_closest_ops,
932 .flags = CLK_SET_RATE_PARENT,
937 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
938 F(144000, P_XO, 16, 3, 25),
939 F(400000, P_XO, 12, 1, 4),
940 F(24000000, P_GPLL2, 12, 1, 4),
941 F(48000000, P_GPLL2, 12, 1, 2),
942 F(96000000, P_GPLL2, 12, 0, 0),
943 F(177777778, P_GPLL0, 4.5, 0, 0),
944 F(192000000, P_GPLL2, 6, 0, 0),
945 F(384000000, P_GPLL2, 3, 0, 0),
949 static struct clk_rcg2 sdcc1_apps_clk_src = {
951 .freq_tbl = ftbl_sdcc_apps_clk_src,
954 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
955 .clkr.hw.init = &(struct clk_init_data){
956 .name = "sdcc1_apps_clk_src",
957 .parent_names = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
959 .ops = &clk_rcg2_ops,
963 static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
964 F(19200000, P_XO, 1, 0, 0),
965 F(160000000, P_GPLL0, 5, 0, 0),
966 F(308570000, P_GPLL6, 3.5, 0, 0),
969 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
971 .freq_tbl = ftbl_sdcc_ice_core_clk_src,
974 .parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
975 .clkr.hw.init = &(struct clk_init_data){
976 .name = "sdcc1_ice_core_clk_src",
977 .parent_names = gcc_xo_gpll0_gpll6_gpll0_div2,
979 .ops = &clk_rcg2_ops,
983 static struct clk_rcg2 sdcc2_apps_clk_src = {
985 .freq_tbl = ftbl_sdcc_apps_clk_src,
988 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
989 .clkr.hw.init = &(struct clk_init_data){
990 .name = "sdcc2_apps_clk_src",
991 .parent_names = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
993 .ops = &clk_rcg2_ops,
997 static const struct freq_tbl ftbl_usb_master_clk_src[] = {
998 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
999 F(100000000, P_GPLL0, 8, 0, 0),
1000 F(133330000, P_GPLL0, 6, 0, 0),
1004 static struct clk_rcg2 usb0_master_clk_src = {
1005 .cmd_rcgr = 0x3e00c,
1006 .freq_tbl = ftbl_usb_master_clk_src,
1009 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
1010 .clkr.hw.init = &(struct clk_init_data){
1011 .name = "usb0_master_clk_src",
1012 .parent_names = gcc_xo_gpll0_out_main_div2_gpll0,
1014 .ops = &clk_rcg2_ops,
1018 static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
1019 F(19200000, P_XO, 1, 0, 0),
1023 static struct clk_rcg2 usb0_aux_clk_src = {
1024 .cmd_rcgr = 0x3e05c,
1025 .freq_tbl = ftbl_usb_aux_clk_src,
1028 .parent_map = gcc_xo_gpll0_sleep_clk_map,
1029 .clkr.hw.init = &(struct clk_init_data){
1030 .name = "usb0_aux_clk_src",
1031 .parent_names = gcc_xo_gpll0_sleep_clk,
1033 .ops = &clk_rcg2_ops,
1037 static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
1038 F(19200000, P_XO, 1, 0, 0),
1039 F(20000000, P_GPLL6, 6, 1, 9),
1040 F(60000000, P_GPLL6, 6, 1, 3),
1044 static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1045 .cmd_rcgr = 0x3e020,
1046 .freq_tbl = ftbl_usb_mock_utmi_clk_src,
1049 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1050 .clkr.hw.init = &(struct clk_init_data){
1051 .name = "usb0_mock_utmi_clk_src",
1052 .parent_names = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1054 .ops = &clk_rcg2_ops,
1058 static struct clk_regmap_mux usb0_pipe_clk_src = {
1062 .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1064 .hw.init = &(struct clk_init_data){
1065 .name = "usb0_pipe_clk_src",
1066 .parent_names = gcc_usb3phy_0_cc_pipe_clk_xo,
1068 .ops = &clk_regmap_mux_closest_ops,
1069 .flags = CLK_SET_RATE_PARENT,
1074 static struct clk_rcg2 usb1_master_clk_src = {
1075 .cmd_rcgr = 0x3f00c,
1076 .freq_tbl = ftbl_usb_master_clk_src,
1079 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
1080 .clkr.hw.init = &(struct clk_init_data){
1081 .name = "usb1_master_clk_src",
1082 .parent_names = gcc_xo_gpll0_out_main_div2_gpll0,
1084 .ops = &clk_rcg2_ops,
1088 static struct clk_rcg2 usb1_aux_clk_src = {
1089 .cmd_rcgr = 0x3f05c,
1090 .freq_tbl = ftbl_usb_aux_clk_src,
1093 .parent_map = gcc_xo_gpll0_sleep_clk_map,
1094 .clkr.hw.init = &(struct clk_init_data){
1095 .name = "usb1_aux_clk_src",
1096 .parent_names = gcc_xo_gpll0_sleep_clk,
1098 .ops = &clk_rcg2_ops,
1102 static struct clk_rcg2 usb1_mock_utmi_clk_src = {
1103 .cmd_rcgr = 0x3f020,
1104 .freq_tbl = ftbl_usb_mock_utmi_clk_src,
1107 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1108 .clkr.hw.init = &(struct clk_init_data){
1109 .name = "usb1_mock_utmi_clk_src",
1110 .parent_names = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1112 .ops = &clk_rcg2_ops,
1116 static struct clk_regmap_mux usb1_pipe_clk_src = {
1120 .parent_map = gcc_usb3phy_1_cc_pipe_clk_xo_map,
1122 .hw.init = &(struct clk_init_data){
1123 .name = "usb1_pipe_clk_src",
1124 .parent_names = gcc_usb3phy_1_cc_pipe_clk_xo,
1126 .ops = &clk_regmap_mux_closest_ops,
1127 .flags = CLK_SET_RATE_PARENT,
1132 static struct clk_branch gcc_xo_clk_src = {
1133 .halt_reg = 0x30018,
1135 .enable_reg = 0x30018,
1136 .enable_mask = BIT(1),
1137 .hw.init = &(struct clk_init_data){
1138 .name = "gcc_xo_clk_src",
1139 .parent_names = (const char *[]){
1143 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1144 .ops = &clk_branch2_ops,
1149 static struct clk_fixed_factor gcc_xo_div4_clk_src = {
1152 .hw.init = &(struct clk_init_data){
1153 .name = "gcc_xo_div4_clk_src",
1154 .parent_names = (const char *[]){
1158 .ops = &clk_fixed_factor_ops,
1159 .flags = CLK_SET_RATE_PARENT,
1163 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1164 F(19200000, P_XO, 1, 0, 0),
1165 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1166 F(100000000, P_GPLL0, 8, 0, 0),
1167 F(133333333, P_GPLL0, 6, 0, 0),
1168 F(160000000, P_GPLL0, 5, 0, 0),
1169 F(200000000, P_GPLL0, 4, 0, 0),
1170 F(266666667, P_GPLL0, 3, 0, 0),
1174 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1175 .cmd_rcgr = 0x26004,
1176 .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1178 .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1179 .clkr.hw.init = &(struct clk_init_data){
1180 .name = "system_noc_bfdcd_clk_src",
1181 .parent_names = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1183 .ops = &clk_rcg2_ops,
1184 .flags = CLK_IS_CRITICAL,
1188 static struct clk_fixed_factor system_noc_clk_src = {
1191 .hw.init = &(struct clk_init_data){
1192 .name = "system_noc_clk_src",
1193 .parent_names = (const char *[]){
1194 "system_noc_bfdcd_clk_src"
1197 .ops = &clk_fixed_factor_ops,
1198 .flags = CLK_SET_RATE_PARENT,
1202 static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
1203 F(19200000, P_XO, 1, 0, 0),
1204 F(200000000, P_GPLL0, 4, 0, 0),
1208 static struct clk_rcg2 nss_ce_clk_src = {
1209 .cmd_rcgr = 0x68098,
1210 .freq_tbl = ftbl_nss_ce_clk_src,
1212 .parent_map = gcc_xo_gpll0_map,
1213 .clkr.hw.init = &(struct clk_init_data){
1214 .name = "nss_ce_clk_src",
1215 .parent_names = gcc_xo_gpll0,
1217 .ops = &clk_rcg2_ops,
1221 static const struct freq_tbl ftbl_nss_noc_bfdcd_clk_src[] = {
1222 F(19200000, P_XO, 1, 0, 0),
1223 F(461500000, P_BIAS_PLL_NSS_NOC, 1, 0, 0),
1227 static struct clk_rcg2 nss_noc_bfdcd_clk_src = {
1228 .cmd_rcgr = 0x68088,
1229 .freq_tbl = ftbl_nss_noc_bfdcd_clk_src,
1231 .parent_map = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map,
1232 .clkr.hw.init = &(struct clk_init_data){
1233 .name = "nss_noc_bfdcd_clk_src",
1234 .parent_names = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2,
1236 .ops = &clk_rcg2_ops,
1240 static struct clk_fixed_factor nss_noc_clk_src = {
1243 .hw.init = &(struct clk_init_data){
1244 .name = "nss_noc_clk_src",
1245 .parent_names = (const char *[]){
1246 "nss_noc_bfdcd_clk_src"
1249 .ops = &clk_fixed_factor_ops,
1250 .flags = CLK_SET_RATE_PARENT,
1254 static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
1255 F(19200000, P_XO, 1, 0, 0),
1256 F(600000000, P_NSS_CRYPTO_PLL, 1, 0, 0),
1260 static struct clk_rcg2 nss_crypto_clk_src = {
1261 .cmd_rcgr = 0x68144,
1262 .freq_tbl = ftbl_nss_crypto_clk_src,
1265 .parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
1266 .clkr.hw.init = &(struct clk_init_data){
1267 .name = "nss_crypto_clk_src",
1268 .parent_names = gcc_xo_nss_crypto_pll_gpll0,
1270 .ops = &clk_rcg2_ops,
1274 static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1275 F(19200000, P_XO, 1, 0, 0),
1276 F(187200000, P_UBI32_PLL, 8, 0, 0),
1277 F(748800000, P_UBI32_PLL, 2, 0, 0),
1278 F(1497600000, P_UBI32_PLL, 1, 0, 0),
1279 F(1689600000, P_UBI32_PLL, 1, 0, 0),
1283 static struct clk_rcg2 nss_ubi0_clk_src = {
1284 .cmd_rcgr = 0x68104,
1285 .freq_tbl = ftbl_nss_ubi_clk_src,
1287 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1288 .clkr.hw.init = &(struct clk_init_data){
1289 .name = "nss_ubi0_clk_src",
1290 .parent_names = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1292 .ops = &clk_rcg2_ops,
1293 .flags = CLK_SET_RATE_PARENT,
1297 static struct clk_regmap_div nss_ubi0_div_clk_src = {
1302 .hw.init = &(struct clk_init_data){
1303 .name = "nss_ubi0_div_clk_src",
1304 .parent_names = (const char *[]){
1308 .ops = &clk_regmap_div_ro_ops,
1309 .flags = CLK_SET_RATE_PARENT,
1314 static struct clk_rcg2 nss_ubi1_clk_src = {
1315 .cmd_rcgr = 0x68124,
1316 .freq_tbl = ftbl_nss_ubi_clk_src,
1318 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1319 .clkr.hw.init = &(struct clk_init_data){
1320 .name = "nss_ubi1_clk_src",
1321 .parent_names = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1323 .ops = &clk_rcg2_ops,
1324 .flags = CLK_SET_RATE_PARENT,
1328 static struct clk_regmap_div nss_ubi1_div_clk_src = {
1333 .hw.init = &(struct clk_init_data){
1334 .name = "nss_ubi1_div_clk_src",
1335 .parent_names = (const char *[]){
1339 .ops = &clk_regmap_div_ro_ops,
1340 .flags = CLK_SET_RATE_PARENT,
1345 static const struct freq_tbl ftbl_ubi_mpt_clk_src[] = {
1346 F(19200000, P_XO, 1, 0, 0),
1347 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1351 static struct clk_rcg2 ubi_mpt_clk_src = {
1352 .cmd_rcgr = 0x68090,
1353 .freq_tbl = ftbl_ubi_mpt_clk_src,
1355 .parent_map = gcc_xo_gpll0_out_main_div2_map,
1356 .clkr.hw.init = &(struct clk_init_data){
1357 .name = "ubi_mpt_clk_src",
1358 .parent_names = gcc_xo_gpll0_out_main_div2,
1360 .ops = &clk_rcg2_ops,
1364 static const struct freq_tbl ftbl_nss_imem_clk_src[] = {
1365 F(19200000, P_XO, 1, 0, 0),
1366 F(400000000, P_GPLL0, 2, 0, 0),
1370 static struct clk_rcg2 nss_imem_clk_src = {
1371 .cmd_rcgr = 0x68158,
1372 .freq_tbl = ftbl_nss_imem_clk_src,
1374 .parent_map = gcc_xo_gpll0_gpll4_map,
1375 .clkr.hw.init = &(struct clk_init_data){
1376 .name = "nss_imem_clk_src",
1377 .parent_names = gcc_xo_gpll0_gpll4,
1379 .ops = &clk_rcg2_ops,
1383 static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
1384 F(19200000, P_XO, 1, 0, 0),
1385 F(300000000, P_BIAS_PLL, 1, 0, 0),
1389 static struct clk_rcg2 nss_ppe_clk_src = {
1390 .cmd_rcgr = 0x68080,
1391 .freq_tbl = ftbl_nss_ppe_clk_src,
1393 .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
1394 .clkr.hw.init = &(struct clk_init_data){
1395 .name = "nss_ppe_clk_src",
1396 .parent_names = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
1398 .ops = &clk_rcg2_ops,
1402 static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1405 .hw.init = &(struct clk_init_data){
1406 .name = "nss_ppe_cdiv_clk_src",
1407 .parent_names = (const char *[]){
1411 .ops = &clk_fixed_factor_ops,
1412 .flags = CLK_SET_RATE_PARENT,
1416 static struct clk_branch gcc_blsp1_ahb_clk = {
1417 .halt_reg = 0x01008,
1419 .enable_reg = 0x01008,
1420 .enable_mask = BIT(0),
1421 .hw.init = &(struct clk_init_data){
1422 .name = "gcc_blsp1_ahb_clk",
1423 .parent_names = (const char *[]){
1427 .flags = CLK_SET_RATE_PARENT,
1428 .ops = &clk_branch2_ops,
1433 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1434 .halt_reg = 0x02008,
1436 .enable_reg = 0x02008,
1437 .enable_mask = BIT(0),
1438 .hw.init = &(struct clk_init_data){
1439 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1440 .parent_names = (const char *[]){
1441 "blsp1_qup1_i2c_apps_clk_src"
1444 .flags = CLK_SET_RATE_PARENT,
1445 .ops = &clk_branch2_ops,
1450 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1451 .halt_reg = 0x02004,
1453 .enable_reg = 0x02004,
1454 .enable_mask = BIT(0),
1455 .hw.init = &(struct clk_init_data){
1456 .name = "gcc_blsp1_qup1_spi_apps_clk",
1457 .parent_names = (const char *[]){
1458 "blsp1_qup1_spi_apps_clk_src"
1461 .flags = CLK_SET_RATE_PARENT,
1462 .ops = &clk_branch2_ops,
1467 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1468 .halt_reg = 0x03010,
1470 .enable_reg = 0x03010,
1471 .enable_mask = BIT(0),
1472 .hw.init = &(struct clk_init_data){
1473 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1474 .parent_names = (const char *[]){
1475 "blsp1_qup2_i2c_apps_clk_src"
1478 .flags = CLK_SET_RATE_PARENT,
1479 .ops = &clk_branch2_ops,
1484 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1485 .halt_reg = 0x0300c,
1487 .enable_reg = 0x0300c,
1488 .enable_mask = BIT(0),
1489 .hw.init = &(struct clk_init_data){
1490 .name = "gcc_blsp1_qup2_spi_apps_clk",
1491 .parent_names = (const char *[]){
1492 "blsp1_qup2_spi_apps_clk_src"
1495 .flags = CLK_SET_RATE_PARENT,
1496 .ops = &clk_branch2_ops,
1501 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1502 .halt_reg = 0x04010,
1504 .enable_reg = 0x04010,
1505 .enable_mask = BIT(0),
1506 .hw.init = &(struct clk_init_data){
1507 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1508 .parent_names = (const char *[]){
1509 "blsp1_qup3_i2c_apps_clk_src"
1512 .flags = CLK_SET_RATE_PARENT,
1513 .ops = &clk_branch2_ops,
1518 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1519 .halt_reg = 0x0400c,
1521 .enable_reg = 0x0400c,
1522 .enable_mask = BIT(0),
1523 .hw.init = &(struct clk_init_data){
1524 .name = "gcc_blsp1_qup3_spi_apps_clk",
1525 .parent_names = (const char *[]){
1526 "blsp1_qup3_spi_apps_clk_src"
1529 .flags = CLK_SET_RATE_PARENT,
1530 .ops = &clk_branch2_ops,
1535 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1536 .halt_reg = 0x05010,
1538 .enable_reg = 0x05010,
1539 .enable_mask = BIT(0),
1540 .hw.init = &(struct clk_init_data){
1541 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1542 .parent_names = (const char *[]){
1543 "blsp1_qup4_i2c_apps_clk_src"
1546 .flags = CLK_SET_RATE_PARENT,
1547 .ops = &clk_branch2_ops,
1552 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1553 .halt_reg = 0x0500c,
1555 .enable_reg = 0x0500c,
1556 .enable_mask = BIT(0),
1557 .hw.init = &(struct clk_init_data){
1558 .name = "gcc_blsp1_qup4_spi_apps_clk",
1559 .parent_names = (const char *[]){
1560 "blsp1_qup4_spi_apps_clk_src"
1563 .flags = CLK_SET_RATE_PARENT,
1564 .ops = &clk_branch2_ops,
1569 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1570 .halt_reg = 0x06010,
1572 .enable_reg = 0x06010,
1573 .enable_mask = BIT(0),
1574 .hw.init = &(struct clk_init_data){
1575 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1576 .parent_names = (const char *[]){
1577 "blsp1_qup5_i2c_apps_clk_src"
1580 .flags = CLK_SET_RATE_PARENT,
1581 .ops = &clk_branch2_ops,
1586 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1587 .halt_reg = 0x0600c,
1589 .enable_reg = 0x0600c,
1590 .enable_mask = BIT(0),
1591 .hw.init = &(struct clk_init_data){
1592 .name = "gcc_blsp1_qup5_spi_apps_clk",
1593 .parent_names = (const char *[]){
1594 "blsp1_qup5_spi_apps_clk_src"
1597 .flags = CLK_SET_RATE_PARENT,
1598 .ops = &clk_branch2_ops,
1603 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1604 .halt_reg = 0x07010,
1606 .enable_reg = 0x07010,
1607 .enable_mask = BIT(0),
1608 .hw.init = &(struct clk_init_data){
1609 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1610 .parent_names = (const char *[]){
1611 "blsp1_qup6_i2c_apps_clk_src"
1614 .flags = CLK_SET_RATE_PARENT,
1615 .ops = &clk_branch2_ops,
1620 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1621 .halt_reg = 0x0700c,
1623 .enable_reg = 0x0700c,
1624 .enable_mask = BIT(0),
1625 .hw.init = &(struct clk_init_data){
1626 .name = "gcc_blsp1_qup6_spi_apps_clk",
1627 .parent_names = (const char *[]){
1628 "blsp1_qup6_spi_apps_clk_src"
1631 .flags = CLK_SET_RATE_PARENT,
1632 .ops = &clk_branch2_ops,
1637 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1638 .halt_reg = 0x0203c,
1640 .enable_reg = 0x0203c,
1641 .enable_mask = BIT(0),
1642 .hw.init = &(struct clk_init_data){
1643 .name = "gcc_blsp1_uart1_apps_clk",
1644 .parent_names = (const char *[]){
1645 "blsp1_uart1_apps_clk_src"
1648 .flags = CLK_SET_RATE_PARENT,
1649 .ops = &clk_branch2_ops,
1654 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1655 .halt_reg = 0x0302c,
1657 .enable_reg = 0x0302c,
1658 .enable_mask = BIT(0),
1659 .hw.init = &(struct clk_init_data){
1660 .name = "gcc_blsp1_uart2_apps_clk",
1661 .parent_names = (const char *[]){
1662 "blsp1_uart2_apps_clk_src"
1665 .flags = CLK_SET_RATE_PARENT,
1666 .ops = &clk_branch2_ops,
1671 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1672 .halt_reg = 0x0402c,
1674 .enable_reg = 0x0402c,
1675 .enable_mask = BIT(0),
1676 .hw.init = &(struct clk_init_data){
1677 .name = "gcc_blsp1_uart3_apps_clk",
1678 .parent_names = (const char *[]){
1679 "blsp1_uart3_apps_clk_src"
1682 .flags = CLK_SET_RATE_PARENT,
1683 .ops = &clk_branch2_ops,
1688 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1689 .halt_reg = 0x0502c,
1691 .enable_reg = 0x0502c,
1692 .enable_mask = BIT(0),
1693 .hw.init = &(struct clk_init_data){
1694 .name = "gcc_blsp1_uart4_apps_clk",
1695 .parent_names = (const char *[]){
1696 "blsp1_uart4_apps_clk_src"
1699 .flags = CLK_SET_RATE_PARENT,
1700 .ops = &clk_branch2_ops,
1705 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1706 .halt_reg = 0x0602c,
1708 .enable_reg = 0x0602c,
1709 .enable_mask = BIT(0),
1710 .hw.init = &(struct clk_init_data){
1711 .name = "gcc_blsp1_uart5_apps_clk",
1712 .parent_names = (const char *[]){
1713 "blsp1_uart5_apps_clk_src"
1716 .flags = CLK_SET_RATE_PARENT,
1717 .ops = &clk_branch2_ops,
1722 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1723 .halt_reg = 0x0702c,
1725 .enable_reg = 0x0702c,
1726 .enable_mask = BIT(0),
1727 .hw.init = &(struct clk_init_data){
1728 .name = "gcc_blsp1_uart6_apps_clk",
1729 .parent_names = (const char *[]){
1730 "blsp1_uart6_apps_clk_src"
1733 .flags = CLK_SET_RATE_PARENT,
1734 .ops = &clk_branch2_ops,
1739 static struct clk_branch gcc_prng_ahb_clk = {
1740 .halt_reg = 0x13004,
1741 .halt_check = BRANCH_HALT_VOTED,
1743 .enable_reg = 0x0b004,
1744 .enable_mask = BIT(8),
1745 .hw.init = &(struct clk_init_data){
1746 .name = "gcc_prng_ahb_clk",
1747 .parent_names = (const char *[]){
1751 .flags = CLK_SET_RATE_PARENT,
1752 .ops = &clk_branch2_ops,
1757 static struct clk_branch gcc_qpic_ahb_clk = {
1758 .halt_reg = 0x57024,
1760 .enable_reg = 0x57024,
1761 .enable_mask = BIT(0),
1762 .hw.init = &(struct clk_init_data){
1763 .name = "gcc_qpic_ahb_clk",
1764 .parent_names = (const char *[]){
1768 .flags = CLK_SET_RATE_PARENT,
1769 .ops = &clk_branch2_ops,
1774 static struct clk_branch gcc_qpic_clk = {
1775 .halt_reg = 0x57020,
1777 .enable_reg = 0x57020,
1778 .enable_mask = BIT(0),
1779 .hw.init = &(struct clk_init_data){
1780 .name = "gcc_qpic_clk",
1781 .parent_names = (const char *[]){
1785 .flags = CLK_SET_RATE_PARENT,
1786 .ops = &clk_branch2_ops,
1791 static struct clk_branch gcc_pcie0_ahb_clk = {
1792 .halt_reg = 0x75010,
1794 .enable_reg = 0x75010,
1795 .enable_mask = BIT(0),
1796 .hw.init = &(struct clk_init_data){
1797 .name = "gcc_pcie0_ahb_clk",
1798 .parent_names = (const char *[]){
1802 .flags = CLK_SET_RATE_PARENT,
1803 .ops = &clk_branch2_ops,
1808 static struct clk_branch gcc_pcie0_aux_clk = {
1809 .halt_reg = 0x75014,
1811 .enable_reg = 0x75014,
1812 .enable_mask = BIT(0),
1813 .hw.init = &(struct clk_init_data){
1814 .name = "gcc_pcie0_aux_clk",
1815 .parent_names = (const char *[]){
1819 .flags = CLK_SET_RATE_PARENT,
1820 .ops = &clk_branch2_ops,
1825 static struct clk_branch gcc_pcie0_axi_m_clk = {
1826 .halt_reg = 0x75008,
1828 .enable_reg = 0x75008,
1829 .enable_mask = BIT(0),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "gcc_pcie0_axi_m_clk",
1832 .parent_names = (const char *[]){
1836 .flags = CLK_SET_RATE_PARENT,
1837 .ops = &clk_branch2_ops,
1842 static struct clk_branch gcc_pcie0_axi_s_clk = {
1843 .halt_reg = 0x7500c,
1845 .enable_reg = 0x7500c,
1846 .enable_mask = BIT(0),
1847 .hw.init = &(struct clk_init_data){
1848 .name = "gcc_pcie0_axi_s_clk",
1849 .parent_names = (const char *[]){
1853 .flags = CLK_SET_RATE_PARENT,
1854 .ops = &clk_branch2_ops,
1859 static struct clk_branch gcc_pcie0_pipe_clk = {
1860 .halt_reg = 0x75018,
1861 .halt_check = BRANCH_HALT_DELAY,
1863 .enable_reg = 0x75018,
1864 .enable_mask = BIT(0),
1865 .hw.init = &(struct clk_init_data){
1866 .name = "gcc_pcie0_pipe_clk",
1867 .parent_names = (const char *[]){
1868 "pcie0_pipe_clk_src"
1871 .flags = CLK_SET_RATE_PARENT,
1872 .ops = &clk_branch2_ops,
1877 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
1878 .halt_reg = 0x26048,
1880 .enable_reg = 0x26048,
1881 .enable_mask = BIT(0),
1882 .hw.init = &(struct clk_init_data){
1883 .name = "gcc_sys_noc_pcie0_axi_clk",
1884 .parent_names = (const char *[]){
1888 .flags = CLK_SET_RATE_PARENT,
1889 .ops = &clk_branch2_ops,
1894 static struct clk_branch gcc_pcie1_ahb_clk = {
1895 .halt_reg = 0x76010,
1897 .enable_reg = 0x76010,
1898 .enable_mask = BIT(0),
1899 .hw.init = &(struct clk_init_data){
1900 .name = "gcc_pcie1_ahb_clk",
1901 .parent_names = (const char *[]){
1905 .flags = CLK_SET_RATE_PARENT,
1906 .ops = &clk_branch2_ops,
1911 static struct clk_branch gcc_pcie1_aux_clk = {
1912 .halt_reg = 0x76014,
1914 .enable_reg = 0x76014,
1915 .enable_mask = BIT(0),
1916 .hw.init = &(struct clk_init_data){
1917 .name = "gcc_pcie1_aux_clk",
1918 .parent_names = (const char *[]){
1922 .flags = CLK_SET_RATE_PARENT,
1923 .ops = &clk_branch2_ops,
1928 static struct clk_branch gcc_pcie1_axi_m_clk = {
1929 .halt_reg = 0x76008,
1931 .enable_reg = 0x76008,
1932 .enable_mask = BIT(0),
1933 .hw.init = &(struct clk_init_data){
1934 .name = "gcc_pcie1_axi_m_clk",
1935 .parent_names = (const char *[]){
1939 .flags = CLK_SET_RATE_PARENT,
1940 .ops = &clk_branch2_ops,
1945 static struct clk_branch gcc_pcie1_axi_s_clk = {
1946 .halt_reg = 0x7600c,
1948 .enable_reg = 0x7600c,
1949 .enable_mask = BIT(0),
1950 .hw.init = &(struct clk_init_data){
1951 .name = "gcc_pcie1_axi_s_clk",
1952 .parent_names = (const char *[]){
1956 .flags = CLK_SET_RATE_PARENT,
1957 .ops = &clk_branch2_ops,
1962 static struct clk_branch gcc_pcie1_pipe_clk = {
1963 .halt_reg = 0x76018,
1964 .halt_check = BRANCH_HALT_DELAY,
1966 .enable_reg = 0x76018,
1967 .enable_mask = BIT(0),
1968 .hw.init = &(struct clk_init_data){
1969 .name = "gcc_pcie1_pipe_clk",
1970 .parent_names = (const char *[]){
1971 "pcie1_pipe_clk_src"
1974 .flags = CLK_SET_RATE_PARENT,
1975 .ops = &clk_branch2_ops,
1980 static struct clk_branch gcc_sys_noc_pcie1_axi_clk = {
1981 .halt_reg = 0x2604c,
1983 .enable_reg = 0x2604c,
1984 .enable_mask = BIT(0),
1985 .hw.init = &(struct clk_init_data){
1986 .name = "gcc_sys_noc_pcie1_axi_clk",
1987 .parent_names = (const char *[]){
1991 .flags = CLK_SET_RATE_PARENT,
1992 .ops = &clk_branch2_ops,
1997 static struct clk_branch gcc_usb0_aux_clk = {
1998 .halt_reg = 0x3e044,
2000 .enable_reg = 0x3e044,
2001 .enable_mask = BIT(0),
2002 .hw.init = &(struct clk_init_data){
2003 .name = "gcc_usb0_aux_clk",
2004 .parent_names = (const char *[]){
2008 .flags = CLK_SET_RATE_PARENT,
2009 .ops = &clk_branch2_ops,
2014 static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
2015 .halt_reg = 0x26040,
2017 .enable_reg = 0x26040,
2018 .enable_mask = BIT(0),
2019 .hw.init = &(struct clk_init_data){
2020 .name = "gcc_sys_noc_usb0_axi_clk",
2021 .parent_names = (const char *[]){
2022 "usb0_master_clk_src"
2025 .flags = CLK_SET_RATE_PARENT,
2026 .ops = &clk_branch2_ops,
2031 static struct clk_branch gcc_usb0_master_clk = {
2032 .halt_reg = 0x3e000,
2034 .enable_reg = 0x3e000,
2035 .enable_mask = BIT(0),
2036 .hw.init = &(struct clk_init_data){
2037 .name = "gcc_usb0_master_clk",
2038 .parent_names = (const char *[]){
2039 "usb0_master_clk_src"
2042 .flags = CLK_SET_RATE_PARENT,
2043 .ops = &clk_branch2_ops,
2048 static struct clk_branch gcc_usb0_mock_utmi_clk = {
2049 .halt_reg = 0x3e008,
2051 .enable_reg = 0x3e008,
2052 .enable_mask = BIT(0),
2053 .hw.init = &(struct clk_init_data){
2054 .name = "gcc_usb0_mock_utmi_clk",
2055 .parent_names = (const char *[]){
2056 "usb0_mock_utmi_clk_src"
2059 .flags = CLK_SET_RATE_PARENT,
2060 .ops = &clk_branch2_ops,
2065 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
2066 .halt_reg = 0x3e080,
2068 .enable_reg = 0x3e080,
2069 .enable_mask = BIT(0),
2070 .hw.init = &(struct clk_init_data){
2071 .name = "gcc_usb0_phy_cfg_ahb_clk",
2072 .parent_names = (const char *[]){
2076 .flags = CLK_SET_RATE_PARENT,
2077 .ops = &clk_branch2_ops,
2082 static struct clk_branch gcc_usb0_pipe_clk = {
2083 .halt_reg = 0x3e040,
2084 .halt_check = BRANCH_HALT_DELAY,
2086 .enable_reg = 0x3e040,
2087 .enable_mask = BIT(0),
2088 .hw.init = &(struct clk_init_data){
2089 .name = "gcc_usb0_pipe_clk",
2090 .parent_names = (const char *[]){
2094 .flags = CLK_SET_RATE_PARENT,
2095 .ops = &clk_branch2_ops,
2100 static struct clk_branch gcc_usb0_sleep_clk = {
2101 .halt_reg = 0x3e004,
2103 .enable_reg = 0x3e004,
2104 .enable_mask = BIT(0),
2105 .hw.init = &(struct clk_init_data){
2106 .name = "gcc_usb0_sleep_clk",
2107 .parent_names = (const char *[]){
2111 .flags = CLK_SET_RATE_PARENT,
2112 .ops = &clk_branch2_ops,
2117 static struct clk_branch gcc_usb1_aux_clk = {
2118 .halt_reg = 0x3f044,
2120 .enable_reg = 0x3f044,
2121 .enable_mask = BIT(0),
2122 .hw.init = &(struct clk_init_data){
2123 .name = "gcc_usb1_aux_clk",
2124 .parent_names = (const char *[]){
2128 .flags = CLK_SET_RATE_PARENT,
2129 .ops = &clk_branch2_ops,
2134 static struct clk_branch gcc_sys_noc_usb1_axi_clk = {
2135 .halt_reg = 0x26044,
2137 .enable_reg = 0x26044,
2138 .enable_mask = BIT(0),
2139 .hw.init = &(struct clk_init_data){
2140 .name = "gcc_sys_noc_usb1_axi_clk",
2141 .parent_names = (const char *[]){
2142 "usb1_master_clk_src"
2145 .flags = CLK_SET_RATE_PARENT,
2146 .ops = &clk_branch2_ops,
2151 static struct clk_branch gcc_usb1_master_clk = {
2152 .halt_reg = 0x3f000,
2154 .enable_reg = 0x3f000,
2155 .enable_mask = BIT(0),
2156 .hw.init = &(struct clk_init_data){
2157 .name = "gcc_usb1_master_clk",
2158 .parent_names = (const char *[]){
2159 "usb1_master_clk_src"
2162 .flags = CLK_SET_RATE_PARENT,
2163 .ops = &clk_branch2_ops,
2168 static struct clk_branch gcc_usb1_mock_utmi_clk = {
2169 .halt_reg = 0x3f008,
2171 .enable_reg = 0x3f008,
2172 .enable_mask = BIT(0),
2173 .hw.init = &(struct clk_init_data){
2174 .name = "gcc_usb1_mock_utmi_clk",
2175 .parent_names = (const char *[]){
2176 "usb1_mock_utmi_clk_src"
2179 .flags = CLK_SET_RATE_PARENT,
2180 .ops = &clk_branch2_ops,
2185 static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
2186 .halt_reg = 0x3f080,
2188 .enable_reg = 0x3f080,
2189 .enable_mask = BIT(0),
2190 .hw.init = &(struct clk_init_data){
2191 .name = "gcc_usb1_phy_cfg_ahb_clk",
2192 .parent_names = (const char *[]){
2196 .flags = CLK_SET_RATE_PARENT,
2197 .ops = &clk_branch2_ops,
2202 static struct clk_branch gcc_usb1_pipe_clk = {
2203 .halt_reg = 0x3f040,
2204 .halt_check = BRANCH_HALT_DELAY,
2206 .enable_reg = 0x3f040,
2207 .enable_mask = BIT(0),
2208 .hw.init = &(struct clk_init_data){
2209 .name = "gcc_usb1_pipe_clk",
2210 .parent_names = (const char *[]){
2214 .flags = CLK_SET_RATE_PARENT,
2215 .ops = &clk_branch2_ops,
2220 static struct clk_branch gcc_usb1_sleep_clk = {
2221 .halt_reg = 0x3f004,
2223 .enable_reg = 0x3f004,
2224 .enable_mask = BIT(0),
2225 .hw.init = &(struct clk_init_data){
2226 .name = "gcc_usb1_sleep_clk",
2227 .parent_names = (const char *[]){
2231 .flags = CLK_SET_RATE_PARENT,
2232 .ops = &clk_branch2_ops,
2237 static struct clk_branch gcc_sdcc1_ahb_clk = {
2238 .halt_reg = 0x4201c,
2240 .enable_reg = 0x4201c,
2241 .enable_mask = BIT(0),
2242 .hw.init = &(struct clk_init_data){
2243 .name = "gcc_sdcc1_ahb_clk",
2244 .parent_names = (const char *[]){
2248 .flags = CLK_SET_RATE_PARENT,
2249 .ops = &clk_branch2_ops,
2254 static struct clk_branch gcc_sdcc1_apps_clk = {
2255 .halt_reg = 0x42018,
2257 .enable_reg = 0x42018,
2258 .enable_mask = BIT(0),
2259 .hw.init = &(struct clk_init_data){
2260 .name = "gcc_sdcc1_apps_clk",
2261 .parent_names = (const char *[]){
2262 "sdcc1_apps_clk_src"
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2271 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2272 .halt_reg = 0x5d014,
2274 .enable_reg = 0x5d014,
2275 .enable_mask = BIT(0),
2276 .hw.init = &(struct clk_init_data){
2277 .name = "gcc_sdcc1_ice_core_clk",
2278 .parent_names = (const char *[]){
2279 "sdcc1_ice_core_clk_src"
2282 .flags = CLK_SET_RATE_PARENT,
2283 .ops = &clk_branch2_ops,
2288 static struct clk_branch gcc_sdcc2_ahb_clk = {
2289 .halt_reg = 0x4301c,
2291 .enable_reg = 0x4301c,
2292 .enable_mask = BIT(0),
2293 .hw.init = &(struct clk_init_data){
2294 .name = "gcc_sdcc2_ahb_clk",
2295 .parent_names = (const char *[]){
2299 .flags = CLK_SET_RATE_PARENT,
2300 .ops = &clk_branch2_ops,
2305 static struct clk_branch gcc_sdcc2_apps_clk = {
2306 .halt_reg = 0x43018,
2308 .enable_reg = 0x43018,
2309 .enable_mask = BIT(0),
2310 .hw.init = &(struct clk_init_data){
2311 .name = "gcc_sdcc2_apps_clk",
2312 .parent_names = (const char *[]){
2313 "sdcc2_apps_clk_src"
2316 .flags = CLK_SET_RATE_PARENT,
2317 .ops = &clk_branch2_ops,
2322 static struct clk_branch gcc_mem_noc_nss_axi_clk = {
2323 .halt_reg = 0x1d03c,
2325 .enable_reg = 0x1d03c,
2326 .enable_mask = BIT(0),
2327 .hw.init = &(struct clk_init_data){
2328 .name = "gcc_mem_noc_nss_axi_clk",
2329 .parent_names = (const char *[]){
2333 .flags = CLK_SET_RATE_PARENT,
2334 .ops = &clk_branch2_ops,
2339 static struct clk_branch gcc_nss_ce_apb_clk = {
2340 .halt_reg = 0x68174,
2342 .enable_reg = 0x68174,
2343 .enable_mask = BIT(0),
2344 .hw.init = &(struct clk_init_data){
2345 .name = "gcc_nss_ce_apb_clk",
2346 .parent_names = (const char *[]){
2350 .flags = CLK_SET_RATE_PARENT,
2351 .ops = &clk_branch2_ops,
2356 static struct clk_branch gcc_nss_ce_axi_clk = {
2357 .halt_reg = 0x68170,
2359 .enable_reg = 0x68170,
2360 .enable_mask = BIT(0),
2361 .hw.init = &(struct clk_init_data){
2362 .name = "gcc_nss_ce_axi_clk",
2363 .parent_names = (const char *[]){
2367 .flags = CLK_SET_RATE_PARENT,
2368 .ops = &clk_branch2_ops,
2373 static struct clk_branch gcc_nss_cfg_clk = {
2374 .halt_reg = 0x68160,
2376 .enable_reg = 0x68160,
2377 .enable_mask = BIT(0),
2378 .hw.init = &(struct clk_init_data){
2379 .name = "gcc_nss_cfg_clk",
2380 .parent_names = (const char *[]){
2384 .flags = CLK_SET_RATE_PARENT,
2385 .ops = &clk_branch2_ops,
2390 static struct clk_branch gcc_nss_crypto_clk = {
2391 .halt_reg = 0x68164,
2393 .enable_reg = 0x68164,
2394 .enable_mask = BIT(0),
2395 .hw.init = &(struct clk_init_data){
2396 .name = "gcc_nss_crypto_clk",
2397 .parent_names = (const char *[]){
2398 "nss_crypto_clk_src"
2401 .flags = CLK_SET_RATE_PARENT,
2402 .ops = &clk_branch2_ops,
2407 static struct clk_branch gcc_nss_csr_clk = {
2408 .halt_reg = 0x68318,
2410 .enable_reg = 0x68318,
2411 .enable_mask = BIT(0),
2412 .hw.init = &(struct clk_init_data){
2413 .name = "gcc_nss_csr_clk",
2414 .parent_names = (const char *[]){
2418 .flags = CLK_SET_RATE_PARENT,
2419 .ops = &clk_branch2_ops,
2424 static struct clk_branch gcc_nss_edma_cfg_clk = {
2425 .halt_reg = 0x6819c,
2427 .enable_reg = 0x6819c,
2428 .enable_mask = BIT(0),
2429 .hw.init = &(struct clk_init_data){
2430 .name = "gcc_nss_edma_cfg_clk",
2431 .parent_names = (const char *[]){
2435 .flags = CLK_SET_RATE_PARENT,
2436 .ops = &clk_branch2_ops,
2441 static struct clk_branch gcc_nss_edma_clk = {
2442 .halt_reg = 0x68198,
2444 .enable_reg = 0x68198,
2445 .enable_mask = BIT(0),
2446 .hw.init = &(struct clk_init_data){
2447 .name = "gcc_nss_edma_clk",
2448 .parent_names = (const char *[]){
2452 .flags = CLK_SET_RATE_PARENT,
2453 .ops = &clk_branch2_ops,
2458 static struct clk_branch gcc_nss_imem_clk = {
2459 .halt_reg = 0x68178,
2461 .enable_reg = 0x68178,
2462 .enable_mask = BIT(0),
2463 .hw.init = &(struct clk_init_data){
2464 .name = "gcc_nss_imem_clk",
2465 .parent_names = (const char *[]){
2469 .flags = CLK_SET_RATE_PARENT,
2470 .ops = &clk_branch2_ops,
2475 static struct clk_branch gcc_nss_noc_clk = {
2476 .halt_reg = 0x68168,
2478 .enable_reg = 0x68168,
2479 .enable_mask = BIT(0),
2480 .hw.init = &(struct clk_init_data){
2481 .name = "gcc_nss_noc_clk",
2482 .parent_names = (const char *[]){
2486 .flags = CLK_SET_RATE_PARENT,
2487 .ops = &clk_branch2_ops,
2492 static struct clk_branch gcc_nss_ppe_btq_clk = {
2493 .halt_reg = 0x6833c,
2495 .enable_reg = 0x6833c,
2496 .enable_mask = BIT(0),
2497 .hw.init = &(struct clk_init_data){
2498 .name = "gcc_nss_ppe_btq_clk",
2499 .parent_names = (const char *[]){
2503 .flags = CLK_SET_RATE_PARENT,
2504 .ops = &clk_branch2_ops,
2509 static struct clk_branch gcc_nss_ppe_cfg_clk = {
2510 .halt_reg = 0x68194,
2512 .enable_reg = 0x68194,
2513 .enable_mask = BIT(0),
2514 .hw.init = &(struct clk_init_data){
2515 .name = "gcc_nss_ppe_cfg_clk",
2516 .parent_names = (const char *[]){
2520 .flags = CLK_SET_RATE_PARENT,
2521 .ops = &clk_branch2_ops,
2526 static struct clk_branch gcc_nss_ppe_clk = {
2527 .halt_reg = 0x68190,
2529 .enable_reg = 0x68190,
2530 .enable_mask = BIT(0),
2531 .hw.init = &(struct clk_init_data){
2532 .name = "gcc_nss_ppe_clk",
2533 .parent_names = (const char *[]){
2537 .flags = CLK_SET_RATE_PARENT,
2538 .ops = &clk_branch2_ops,
2543 static struct clk_branch gcc_nss_ppe_ipe_clk = {
2544 .halt_reg = 0x68338,
2546 .enable_reg = 0x68338,
2547 .enable_mask = BIT(0),
2548 .hw.init = &(struct clk_init_data){
2549 .name = "gcc_nss_ppe_ipe_clk",
2550 .parent_names = (const char *[]){
2554 .flags = CLK_SET_RATE_PARENT,
2555 .ops = &clk_branch2_ops,
2560 static struct clk_branch gcc_nss_ptp_ref_clk = {
2561 .halt_reg = 0x6816c,
2563 .enable_reg = 0x6816c,
2564 .enable_mask = BIT(0),
2565 .hw.init = &(struct clk_init_data){
2566 .name = "gcc_nss_ptp_ref_clk",
2567 .parent_names = (const char *[]){
2568 "nss_ppe_cdiv_clk_src"
2571 .flags = CLK_SET_RATE_PARENT,
2572 .ops = &clk_branch2_ops,
2577 static struct clk_branch gcc_nssnoc_ce_apb_clk = {
2578 .halt_reg = 0x6830c,
2580 .enable_reg = 0x6830c,
2581 .enable_mask = BIT(0),
2582 .hw.init = &(struct clk_init_data){
2583 .name = "gcc_nssnoc_ce_apb_clk",
2584 .parent_names = (const char *[]){
2588 .flags = CLK_SET_RATE_PARENT,
2589 .ops = &clk_branch2_ops,
2594 static struct clk_branch gcc_nssnoc_ce_axi_clk = {
2595 .halt_reg = 0x68308,
2597 .enable_reg = 0x68308,
2598 .enable_mask = BIT(0),
2599 .hw.init = &(struct clk_init_data){
2600 .name = "gcc_nssnoc_ce_axi_clk",
2601 .parent_names = (const char *[]){
2605 .flags = CLK_SET_RATE_PARENT,
2606 .ops = &clk_branch2_ops,
2611 static struct clk_branch gcc_nssnoc_crypto_clk = {
2612 .halt_reg = 0x68314,
2614 .enable_reg = 0x68314,
2615 .enable_mask = BIT(0),
2616 .hw.init = &(struct clk_init_data){
2617 .name = "gcc_nssnoc_crypto_clk",
2618 .parent_names = (const char *[]){
2619 "nss_crypto_clk_src"
2622 .flags = CLK_SET_RATE_PARENT,
2623 .ops = &clk_branch2_ops,
2628 static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
2629 .halt_reg = 0x68304,
2631 .enable_reg = 0x68304,
2632 .enable_mask = BIT(0),
2633 .hw.init = &(struct clk_init_data){
2634 .name = "gcc_nssnoc_ppe_cfg_clk",
2635 .parent_names = (const char *[]){
2639 .flags = CLK_SET_RATE_PARENT,
2640 .ops = &clk_branch2_ops,
2645 static struct clk_branch gcc_nssnoc_ppe_clk = {
2646 .halt_reg = 0x68300,
2648 .enable_reg = 0x68300,
2649 .enable_mask = BIT(0),
2650 .hw.init = &(struct clk_init_data){
2651 .name = "gcc_nssnoc_ppe_clk",
2652 .parent_names = (const char *[]){
2656 .flags = CLK_SET_RATE_PARENT,
2657 .ops = &clk_branch2_ops,
2662 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
2663 .halt_reg = 0x68180,
2665 .enable_reg = 0x68180,
2666 .enable_mask = BIT(0),
2667 .hw.init = &(struct clk_init_data){
2668 .name = "gcc_nssnoc_qosgen_ref_clk",
2669 .parent_names = (const char *[]){
2673 .flags = CLK_SET_RATE_PARENT,
2674 .ops = &clk_branch2_ops,
2679 static struct clk_branch gcc_nssnoc_snoc_clk = {
2680 .halt_reg = 0x68188,
2682 .enable_reg = 0x68188,
2683 .enable_mask = BIT(0),
2684 .hw.init = &(struct clk_init_data){
2685 .name = "gcc_nssnoc_snoc_clk",
2686 .parent_names = (const char *[]){
2687 "system_noc_clk_src"
2690 .flags = CLK_SET_RATE_PARENT,
2691 .ops = &clk_branch2_ops,
2696 static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
2697 .halt_reg = 0x68184,
2699 .enable_reg = 0x68184,
2700 .enable_mask = BIT(0),
2701 .hw.init = &(struct clk_init_data){
2702 .name = "gcc_nssnoc_timeout_ref_clk",
2703 .parent_names = (const char *[]){
2704 "gcc_xo_div4_clk_src"
2707 .flags = CLK_SET_RATE_PARENT,
2708 .ops = &clk_branch2_ops,
2713 static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
2714 .halt_reg = 0x68270,
2716 .enable_reg = 0x68270,
2717 .enable_mask = BIT(0),
2718 .hw.init = &(struct clk_init_data){
2719 .name = "gcc_nssnoc_ubi0_ahb_clk",
2720 .parent_names = (const char *[]){
2724 .flags = CLK_SET_RATE_PARENT,
2725 .ops = &clk_branch2_ops,
2730 static struct clk_branch gcc_nssnoc_ubi1_ahb_clk = {
2731 .halt_reg = 0x68274,
2733 .enable_reg = 0x68274,
2734 .enable_mask = BIT(0),
2735 .hw.init = &(struct clk_init_data){
2736 .name = "gcc_nssnoc_ubi1_ahb_clk",
2737 .parent_names = (const char *[]){
2741 .flags = CLK_SET_RATE_PARENT,
2742 .ops = &clk_branch2_ops,
2747 static struct clk_branch gcc_ubi0_ahb_clk = {
2748 .halt_reg = 0x6820c,
2750 .enable_reg = 0x6820c,
2751 .enable_mask = BIT(0),
2752 .hw.init = &(struct clk_init_data){
2753 .name = "gcc_ubi0_ahb_clk",
2754 .parent_names = (const char *[]){
2758 .flags = CLK_SET_RATE_PARENT,
2759 .ops = &clk_branch2_ops,
2764 static struct clk_branch gcc_ubi0_axi_clk = {
2765 .halt_reg = 0x68200,
2767 .enable_reg = 0x68200,
2768 .enable_mask = BIT(0),
2769 .hw.init = &(struct clk_init_data){
2770 .name = "gcc_ubi0_axi_clk",
2771 .parent_names = (const char *[]){
2775 .flags = CLK_SET_RATE_PARENT,
2776 .ops = &clk_branch2_ops,
2781 static struct clk_branch gcc_ubi0_nc_axi_clk = {
2782 .halt_reg = 0x68204,
2784 .enable_reg = 0x68204,
2785 .enable_mask = BIT(0),
2786 .hw.init = &(struct clk_init_data){
2787 .name = "gcc_ubi0_nc_axi_clk",
2788 .parent_names = (const char *[]){
2792 .flags = CLK_SET_RATE_PARENT,
2793 .ops = &clk_branch2_ops,
2798 static struct clk_branch gcc_ubi0_core_clk = {
2799 .halt_reg = 0x68210,
2801 .enable_reg = 0x68210,
2802 .enable_mask = BIT(0),
2803 .hw.init = &(struct clk_init_data){
2804 .name = "gcc_ubi0_core_clk",
2805 .parent_names = (const char *[]){
2806 "nss_ubi0_div_clk_src"
2809 .flags = CLK_SET_RATE_PARENT,
2810 .ops = &clk_branch2_ops,
2815 static struct clk_branch gcc_ubi0_mpt_clk = {
2816 .halt_reg = 0x68208,
2818 .enable_reg = 0x68208,
2819 .enable_mask = BIT(0),
2820 .hw.init = &(struct clk_init_data){
2821 .name = "gcc_ubi0_mpt_clk",
2822 .parent_names = (const char *[]){
2826 .flags = CLK_SET_RATE_PARENT,
2827 .ops = &clk_branch2_ops,
2832 static struct clk_branch gcc_ubi1_ahb_clk = {
2833 .halt_reg = 0x6822c,
2835 .enable_reg = 0x6822c,
2836 .enable_mask = BIT(0),
2837 .hw.init = &(struct clk_init_data){
2838 .name = "gcc_ubi1_ahb_clk",
2839 .parent_names = (const char *[]){
2843 .flags = CLK_SET_RATE_PARENT,
2844 .ops = &clk_branch2_ops,
2849 static struct clk_branch gcc_ubi1_axi_clk = {
2850 .halt_reg = 0x68220,
2852 .enable_reg = 0x68220,
2853 .enable_mask = BIT(0),
2854 .hw.init = &(struct clk_init_data){
2855 .name = "gcc_ubi1_axi_clk",
2856 .parent_names = (const char *[]){
2860 .flags = CLK_SET_RATE_PARENT,
2861 .ops = &clk_branch2_ops,
2866 static struct clk_branch gcc_ubi1_nc_axi_clk = {
2867 .halt_reg = 0x68224,
2869 .enable_reg = 0x68224,
2870 .enable_mask = BIT(0),
2871 .hw.init = &(struct clk_init_data){
2872 .name = "gcc_ubi1_nc_axi_clk",
2873 .parent_names = (const char *[]){
2877 .flags = CLK_SET_RATE_PARENT,
2878 .ops = &clk_branch2_ops,
2883 static struct clk_branch gcc_ubi1_core_clk = {
2884 .halt_reg = 0x68230,
2886 .enable_reg = 0x68230,
2887 .enable_mask = BIT(0),
2888 .hw.init = &(struct clk_init_data){
2889 .name = "gcc_ubi1_core_clk",
2890 .parent_names = (const char *[]){
2891 "nss_ubi1_div_clk_src"
2894 .flags = CLK_SET_RATE_PARENT,
2895 .ops = &clk_branch2_ops,
2900 static struct clk_branch gcc_ubi1_mpt_clk = {
2901 .halt_reg = 0x68228,
2903 .enable_reg = 0x68228,
2904 .enable_mask = BIT(0),
2905 .hw.init = &(struct clk_init_data){
2906 .name = "gcc_ubi1_mpt_clk",
2907 .parent_names = (const char *[]){
2911 .flags = CLK_SET_RATE_PARENT,
2912 .ops = &clk_branch2_ops,
2917 static struct clk_hw *gcc_ipq8074_hws[] = {
2918 &gpll0_out_main_div2.hw,
2919 &gpll6_out_main_div2.hw,
2921 &system_noc_clk_src.hw,
2922 &gcc_xo_div4_clk_src.hw,
2923 &nss_noc_clk_src.hw,
2924 &nss_ppe_cdiv_clk_src.hw,
2927 static struct clk_regmap *gcc_ipq8074_clks[] = {
2928 [GPLL0_MAIN] = &gpll0_main.clkr,
2929 [GPLL0] = &gpll0.clkr,
2930 [GPLL2_MAIN] = &gpll2_main.clkr,
2931 [GPLL2] = &gpll2.clkr,
2932 [GPLL4_MAIN] = &gpll4_main.clkr,
2933 [GPLL4] = &gpll4.clkr,
2934 [GPLL6_MAIN] = &gpll6_main.clkr,
2935 [GPLL6] = &gpll6.clkr,
2936 [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
2937 [UBI32_PLL] = &ubi32_pll.clkr,
2938 [NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
2939 [NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
2940 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
2941 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
2942 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2943 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2944 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2945 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2946 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2947 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2948 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2949 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2950 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2951 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2952 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2953 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2954 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2955 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2956 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2957 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2958 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2959 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2960 [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
2961 [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
2962 [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
2963 [PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr,
2964 [PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr,
2965 [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,
2966 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2967 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2968 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2969 [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
2970 [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
2971 [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
2972 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
2973 [USB1_MASTER_CLK_SRC] = &usb1_master_clk_src.clkr,
2974 [USB1_AUX_CLK_SRC] = &usb1_aux_clk_src.clkr,
2975 [USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
2976 [USB1_PIPE_CLK_SRC] = &usb1_pipe_clk_src.clkr,
2977 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
2978 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
2979 [NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
2980 [NSS_NOC_BFDCD_CLK_SRC] = &nss_noc_bfdcd_clk_src.clkr,
2981 [NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
2982 [NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
2983 [NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
2984 [NSS_UBI1_CLK_SRC] = &nss_ubi1_clk_src.clkr,
2985 [NSS_UBI1_DIV_CLK_SRC] = &nss_ubi1_div_clk_src.clkr,
2986 [UBI_MPT_CLK_SRC] = &ubi_mpt_clk_src.clkr,
2987 [NSS_IMEM_CLK_SRC] = &nss_imem_clk_src.clkr,
2988 [NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
2989 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2990 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2991 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2992 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2993 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2994 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2995 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2996 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2997 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2998 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2999 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3000 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3001 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3002 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3003 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3004 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
3005 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
3006 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
3007 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
3008 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3009 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
3010 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
3011 [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
3012 [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
3013 [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
3014 [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
3015 [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
3016 [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
3017 [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,
3018 [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,
3019 [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,
3020 [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,
3021 [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,
3022 [GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr,
3023 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
3024 [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
3025 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
3026 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
3027 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
3028 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
3029 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
3030 [GCC_USB1_AUX_CLK] = &gcc_usb1_aux_clk.clkr,
3031 [GCC_SYS_NOC_USB1_AXI_CLK] = &gcc_sys_noc_usb1_axi_clk.clkr,
3032 [GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
3033 [GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
3034 [GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
3035 [GCC_USB1_PIPE_CLK] = &gcc_usb1_pipe_clk.clkr,
3036 [GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
3037 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3038 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3039 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3040 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3041 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3042 [GCC_MEM_NOC_NSS_AXI_CLK] = &gcc_mem_noc_nss_axi_clk.clkr,
3043 [GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
3044 [GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
3045 [GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
3046 [GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
3047 [GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
3048 [GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
3049 [GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
3050 [GCC_NSS_IMEM_CLK] = &gcc_nss_imem_clk.clkr,
3051 [GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
3052 [GCC_NSS_PPE_BTQ_CLK] = &gcc_nss_ppe_btq_clk.clkr,
3053 [GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
3054 [GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
3055 [GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
3056 [GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
3057 [GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
3058 [GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
3059 [GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
3060 [GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
3061 [GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
3062 [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
3063 [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
3064 [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
3065 [GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
3066 [GCC_NSSNOC_UBI1_AHB_CLK] = &gcc_nssnoc_ubi1_ahb_clk.clkr,
3067 [GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
3068 [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
3069 [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
3070 [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
3071 [GCC_UBI0_MPT_CLK] = &gcc_ubi0_mpt_clk.clkr,
3072 [GCC_UBI1_AHB_CLK] = &gcc_ubi1_ahb_clk.clkr,
3073 [GCC_UBI1_AXI_CLK] = &gcc_ubi1_axi_clk.clkr,
3074 [GCC_UBI1_NC_AXI_CLK] = &gcc_ubi1_nc_axi_clk.clkr,
3075 [GCC_UBI1_CORE_CLK] = &gcc_ubi1_core_clk.clkr,
3076 [GCC_UBI1_MPT_CLK] = &gcc_ubi1_mpt_clk.clkr,
3079 static const struct qcom_reset_map gcc_ipq8074_resets[] = {
3080 [GCC_BLSP1_BCR] = { 0x01000, 0 },
3081 [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
3082 [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
3083 [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
3084 [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
3085 [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
3086 [GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
3087 [GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
3088 [GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
3089 [GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
3090 [GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
3091 [GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
3092 [GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
3093 [GCC_IMEM_BCR] = { 0x0e000, 0 },
3094 [GCC_SMMU_BCR] = { 0x12000, 0 },
3095 [GCC_APSS_TCU_BCR] = { 0x12050, 0 },
3096 [GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
3097 [GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
3098 [GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
3099 [GCC_PRNG_BCR] = { 0x13000, 0 },
3100 [GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
3101 [GCC_CRYPTO_BCR] = { 0x16000, 0 },
3102 [GCC_WCSS_BCR] = { 0x18000, 0 },
3103 [GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
3104 [GCC_NSS_BCR] = { 0x19000, 0 },
3105 [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
3106 [GCC_ADSS_BCR] = { 0x1c000, 0 },
3107 [GCC_DDRSS_BCR] = { 0x1e000, 0 },
3108 [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
3109 [GCC_PCNOC_BCR] = { 0x27018, 0 },
3110 [GCC_TCSR_BCR] = { 0x28000, 0 },
3111 [GCC_QDSS_BCR] = { 0x29000, 0 },
3112 [GCC_DCD_BCR] = { 0x2a000, 0 },
3113 [GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
3114 [GCC_MPM_BCR] = { 0x2c000, 0 },
3115 [GCC_SPMI_BCR] = { 0x2e000, 0 },
3116 [GCC_SPDM_BCR] = { 0x2f000, 0 },
3117 [GCC_RBCPR_BCR] = { 0x33000, 0 },
3118 [GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
3119 [GCC_TLMM_BCR] = { 0x34000, 0 },
3120 [GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
3121 [GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
3122 [GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
3123 [GCC_USB0_BCR] = { 0x3e070, 0 },
3124 [GCC_USB1_PHY_BCR] = { 0x3f034, 0 },
3125 [GCC_USB3PHY_1_PHY_BCR] = { 0x3f03c, 0 },
3126 [GCC_USB1_BCR] = { 0x3f070, 0 },
3127 [GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
3128 [GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
3129 [GCC_SDCC1_BCR] = { 0x42000, 0 },
3130 [GCC_SDCC2_BCR] = { 0x43000, 0 },
3131 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
3132 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47008, 0 },
3133 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x47010, 0 },
3134 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
3135 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
3136 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
3137 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
3138 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
3139 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
3140 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
3141 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
3142 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
3143 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
3144 [GCC_UNIPHY0_BCR] = { 0x56000, 0 },
3145 [GCC_UNIPHY1_BCR] = { 0x56100, 0 },
3146 [GCC_UNIPHY2_BCR] = { 0x56200, 0 },
3147 [GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
3148 [GCC_QPIC_BCR] = { 0x57018, 0 },
3149 [GCC_MDIO_BCR] = { 0x58000, 0 },
3150 [GCC_PCIE1_TBU_BCR] = { 0x65000, 0 },
3151 [GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
3152 [GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
3153 [GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
3154 [GCC_USB1_TBU_BCR] = { 0x6a004, 0 },
3155 [GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
3156 [GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
3157 [GCC_PCIE0_BCR] = { 0x75004, 0 },
3158 [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
3159 [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
3160 [GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
3161 [GCC_PCIE1_BCR] = { 0x76004, 0 },
3162 [GCC_PCIE1_PHY_BCR] = { 0x76038, 0 },
3163 [GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 },
3164 [GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 },
3165 [GCC_DCC_BCR] = { 0x77000, 0 },
3166 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
3167 [GCC_APC1_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x79000, 0 },
3168 [GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
3171 static const struct of_device_id gcc_ipq8074_match_table[] = {
3172 { .compatible = "qcom,gcc-ipq8074" },
3175 MODULE_DEVICE_TABLE(of, gcc_ipq8074_match_table);
3177 static const struct regmap_config gcc_ipq8074_regmap_config = {
3181 .max_register = 0x7fffc,
3185 static const struct qcom_cc_desc gcc_ipq8074_desc = {
3186 .config = &gcc_ipq8074_regmap_config,
3187 .clks = gcc_ipq8074_clks,
3188 .num_clks = ARRAY_SIZE(gcc_ipq8074_clks),
3189 .resets = gcc_ipq8074_resets,
3190 .num_resets = ARRAY_SIZE(gcc_ipq8074_resets),
3193 static int gcc_ipq8074_probe(struct platform_device *pdev)
3197 for (i = 0; i < ARRAY_SIZE(gcc_ipq8074_hws); i++) {
3198 ret = devm_clk_hw_register(&pdev->dev, gcc_ipq8074_hws[i]);
3203 return qcom_cc_probe(pdev, &gcc_ipq8074_desc);
3206 static struct platform_driver gcc_ipq8074_driver = {
3207 .probe = gcc_ipq8074_probe,
3209 .name = "qcom,gcc-ipq8074",
3210 .of_match_table = gcc_ipq8074_match_table,
3214 static int __init gcc_ipq8074_init(void)
3216 return platform_driver_register(&gcc_ipq8074_driver);
3218 core_initcall(gcc_ipq8074_init);
3220 static void __exit gcc_ipq8074_exit(void)
3222 platform_driver_unregister(&gcc_ipq8074_driver);
3224 module_exit(gcc_ipq8074_exit);
3226 MODULE_DESCRIPTION("QCOM GCC IPQ8074 Driver");
3227 MODULE_LICENSE("GPL v2");
3228 MODULE_ALIAS("platform:gcc-ipq8074");