1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
5 * Copyright (c) 2023, Linaro Limited
8 #include <linux/clk-provider.h>
9 #include <linux/mod_devicetable.h>
10 #include <linux/module.h>
11 #include <linux/platform_device.h>
12 #include <linux/regmap.h>
14 #include <dt-bindings/clock/qcom,sm8650-gcc.h>
16 #include "clk-alpha-pll.h"
17 #include "clk-branch.h"
19 #include "clk-regmap.h"
20 #include "clk-regmap-divider.h"
21 #include "clk-regmap-mux.h"
22 #include "clk-regmap-phy-mux.h"
26 /* Need to match the order of clocks in DT binding */
36 DT_UFS_PHY_RX_SYMBOL_0,
37 DT_UFS_PHY_RX_SYMBOL_1,
38 DT_UFS_PHY_TX_SYMBOL_0,
40 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE,
57 P_UFS_PHY_RX_SYMBOL_0_CLK,
58 P_UFS_PHY_RX_SYMBOL_1_CLK,
59 P_UFS_PHY_TX_SYMBOL_0_CLK,
60 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
63 static struct clk_alpha_pll gcc_gpll0 = {
65 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
67 .enable_reg = 0x52020,
68 .enable_mask = BIT(0),
69 .hw.init = &(const struct clk_init_data) {
71 .parent_data = &(const struct clk_parent_data) {
75 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
80 static struct clk_alpha_pll gcc_gpll0_ao = {
82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
84 .enable_reg = 0x57020,
85 .enable_mask = BIT(0),
86 .hw.init = &(const struct clk_init_data) {
87 .name = "gcc_gpll0_ao",
88 .parent_data = &(const struct clk_parent_data) {
89 .index = DT_BI_TCXO_AO,
92 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
97 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
102 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
104 .post_div_shift = 10,
105 .post_div_table = post_div_table_gcc_gpll0_out_even,
106 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
108 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
109 .clkr.hw.init = &(const struct clk_init_data) {
110 .name = "gcc_gpll0_out_even",
111 .parent_hws = (const struct clk_hw*[]) {
115 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
119 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even_ao = {
121 .post_div_shift = 10,
122 .post_div_table = post_div_table_gcc_gpll0_out_even,
123 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
125 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
126 .clkr.hw.init = &(const struct clk_init_data) {
127 .name = "gcc_gpll0_out_even_ao",
128 .parent_hws = (const struct clk_hw*[]) {
129 &gcc_gpll0_ao.clkr.hw,
132 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
136 static struct clk_alpha_pll gcc_gpll1 = {
138 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
140 .enable_reg = 0x52020,
141 .enable_mask = BIT(1),
142 .hw.init = &(const struct clk_init_data) {
144 .parent_data = &(const struct clk_parent_data) {
148 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
153 static struct clk_alpha_pll gcc_gpll1_ao = {
155 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
157 .enable_reg = 0x57020,
158 .enable_mask = BIT(1),
159 .hw.init = &(const struct clk_init_data) {
160 .name = "gcc_gpll1_ao",
161 .parent_data = &(const struct clk_parent_data) {
162 .index = DT_BI_TCXO_AO,
165 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
170 static struct clk_alpha_pll gcc_gpll3 = {
172 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
174 .enable_reg = 0x52020,
175 .enable_mask = BIT(3),
176 .hw.init = &(const struct clk_init_data) {
178 .parent_data = &(const struct clk_parent_data) {
182 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
187 static struct clk_alpha_pll gcc_gpll3_ao = {
189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
191 .enable_reg = 0x57020,
192 .enable_mask = BIT(3),
193 .hw.init = &(const struct clk_init_data) {
194 .name = "gcc_gpll3_ao",
195 .parent_data = &(const struct clk_parent_data) {
196 .index = DT_BI_TCXO_AO,
199 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
204 static struct clk_alpha_pll gcc_gpll4 = {
206 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
208 .enable_reg = 0x52020,
209 .enable_mask = BIT(4),
210 .hw.init = &(const struct clk_init_data) {
212 .parent_data = &(const struct clk_parent_data) {
216 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
221 static struct clk_alpha_pll gcc_gpll4_ao = {
223 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
225 .enable_reg = 0x57020,
226 .enable_mask = BIT(4),
227 .hw.init = &(const struct clk_init_data) {
228 .name = "gcc_gpll4_ao",
229 .parent_data = &(const struct clk_parent_data) {
230 .index = DT_BI_TCXO_AO,
233 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
238 static struct clk_alpha_pll gcc_gpll6 = {
240 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
242 .enable_reg = 0x52020,
243 .enable_mask = BIT(6),
244 .hw.init = &(const struct clk_init_data) {
246 .parent_data = &(const struct clk_parent_data) {
250 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
255 static struct clk_alpha_pll gcc_gpll6_ao = {
257 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
259 .enable_reg = 0x57020,
260 .enable_mask = BIT(6),
261 .hw.init = &(const struct clk_init_data) {
262 .name = "gcc_gpll6_ao",
263 .parent_data = &(const struct clk_parent_data) {
264 .index = DT_BI_TCXO_AO,
267 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
272 static struct clk_alpha_pll gcc_gpll7 = {
274 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
276 .enable_reg = 0x52020,
277 .enable_mask = BIT(7),
278 .hw.init = &(const struct clk_init_data) {
280 .parent_data = &(const struct clk_parent_data) {
284 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
289 static struct clk_alpha_pll gcc_gpll9 = {
291 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
293 .enable_reg = 0x52020,
294 .enable_mask = BIT(9),
295 .hw.init = &(const struct clk_init_data) {
297 .parent_data = &(const struct clk_parent_data) {
301 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
306 static const struct parent_map gcc_parent_map_0[] = {
308 { P_GCC_GPLL0_OUT_MAIN, 1 },
309 { P_GCC_GPLL0_OUT_EVEN, 6 },
312 static const struct clk_parent_data gcc_parent_data_0[] = {
313 { .index = DT_BI_TCXO },
314 { .hw = &gcc_gpll0.clkr.hw },
315 { .hw = &gcc_gpll0_out_even.clkr.hw },
318 static const struct parent_map gcc_parent_map_1[] = {
320 { P_GCC_GPLL0_OUT_MAIN, 1 },
322 { P_GCC_GPLL0_OUT_EVEN, 6 },
325 static const struct clk_parent_data gcc_parent_data_1[] = {
326 { .index = DT_BI_TCXO },
327 { .hw = &gcc_gpll0.clkr.hw },
328 { .index = DT_SLEEP_CLK },
329 { .hw = &gcc_gpll0_out_even.clkr.hw },
332 static const struct parent_map gcc_parent_map_2[] = {
334 { P_GCC_GPLL0_OUT_MAIN, 1 },
335 { P_GCC_GPLL1_OUT_MAIN, 4 },
336 { P_GCC_GPLL4_OUT_MAIN, 5 },
337 { P_GCC_GPLL0_OUT_EVEN, 6 },
340 static const struct clk_parent_data gcc_parent_data_2[] = {
341 { .index = DT_BI_TCXO },
342 { .hw = &gcc_gpll0.clkr.hw },
343 { .hw = &gcc_gpll1.clkr.hw },
344 { .hw = &gcc_gpll4.clkr.hw },
345 { .hw = &gcc_gpll0_out_even.clkr.hw },
348 static const struct parent_map gcc_parent_map_3[] = {
350 { P_GCC_GPLL0_OUT_MAIN, 1 },
351 { P_GCC_GPLL4_OUT_MAIN, 5 },
352 { P_GCC_GPLL0_OUT_EVEN, 6 },
355 static const struct clk_parent_data gcc_parent_data_3[] = {
356 { .index = DT_BI_TCXO },
357 { .hw = &gcc_gpll0.clkr.hw },
358 { .hw = &gcc_gpll4.clkr.hw },
359 { .hw = &gcc_gpll0_out_even.clkr.hw },
362 static const struct parent_map gcc_parent_map_4[] = {
367 static const struct clk_parent_data gcc_parent_data_4[] = {
368 { .index = DT_BI_TCXO },
369 { .index = DT_SLEEP_CLK },
372 static const struct parent_map gcc_parent_map_5[] = {
376 static const struct clk_parent_data gcc_parent_data_5[] = {
377 { .index = DT_BI_TCXO },
380 static const struct parent_map gcc_parent_map_8[] = {
381 { P_PCIE_1_PHY_AUX_CLK, 0 },
385 static const struct clk_parent_data gcc_parent_data_8[] = {
386 { .index = DT_PCIE_1_PHY_AUX },
387 { .index = DT_BI_TCXO },
390 static const struct parent_map gcc_parent_map_10[] = {
392 { P_GCC_GPLL0_OUT_MAIN, 1 },
393 { P_GCC_GPLL7_OUT_MAIN, 2 },
394 { P_GCC_GPLL0_OUT_EVEN, 6 },
397 static const struct clk_parent_data gcc_parent_data_10[] = {
398 { .index = DT_BI_TCXO },
399 { .hw = &gcc_gpll0.clkr.hw },
400 { .hw = &gcc_gpll7.clkr.hw },
401 { .hw = &gcc_gpll0_out_even.clkr.hw },
404 static const struct parent_map gcc_parent_map_11[] = {
406 { P_GCC_GPLL0_OUT_MAIN, 1 },
407 { P_GCC_GPLL9_OUT_MAIN, 2 },
408 { P_GCC_GPLL4_OUT_MAIN, 5 },
409 { P_GCC_GPLL0_OUT_EVEN, 6 },
412 static const struct clk_parent_data gcc_parent_data_11[] = {
413 { .index = DT_BI_TCXO },
414 { .hw = &gcc_gpll0.clkr.hw },
415 { .hw = &gcc_gpll9.clkr.hw },
416 { .hw = &gcc_gpll4.clkr.hw },
417 { .hw = &gcc_gpll0_out_even.clkr.hw },
420 static const struct parent_map gcc_parent_map_12[] = {
421 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
425 static const struct clk_parent_data gcc_parent_data_12[] = {
426 { .index = DT_UFS_PHY_RX_SYMBOL_0 },
427 { .index = DT_BI_TCXO },
430 static const struct parent_map gcc_parent_map_13[] = {
431 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
435 static const struct clk_parent_data gcc_parent_data_13[] = {
436 { .index = DT_UFS_PHY_RX_SYMBOL_1 },
437 { .index = DT_BI_TCXO },
440 static const struct parent_map gcc_parent_map_14[] = {
441 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
445 static const struct clk_parent_data gcc_parent_data_14[] = {
446 { .index = DT_UFS_PHY_TX_SYMBOL_0 },
447 { .index = DT_BI_TCXO },
450 static const struct parent_map gcc_parent_map_15[] = {
451 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
455 static const struct clk_parent_data gcc_parent_data_15[] = {
456 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE },
457 { .index = DT_BI_TCXO },
460 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
463 .hw.init = &(const struct clk_init_data) {
464 .name = "gcc_pcie_0_pipe_clk_src",
465 .parent_data = &(const struct clk_parent_data){
466 .index = DT_PCIE_0_PIPE,
469 .ops = &clk_regmap_phy_mux_ops,
474 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
478 .parent_map = gcc_parent_map_8,
480 .hw.init = &(const struct clk_init_data) {
481 .name = "gcc_pcie_1_phy_aux_clk_src",
482 .parent_data = gcc_parent_data_8,
483 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
484 .ops = &clk_regmap_mux_closest_ops,
489 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
492 .hw.init = &(const struct clk_init_data) {
493 .name = "gcc_pcie_1_pipe_clk_src",
494 .parent_data = &(const struct clk_parent_data){
495 .index = DT_PCIE_1_PIPE,
498 .ops = &clk_regmap_phy_mux_ops,
503 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
507 .parent_map = gcc_parent_map_12,
509 .hw.init = &(const struct clk_init_data) {
510 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
511 .parent_data = gcc_parent_data_12,
512 .num_parents = ARRAY_SIZE(gcc_parent_data_12),
513 .ops = &clk_regmap_mux_closest_ops,
518 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
522 .parent_map = gcc_parent_map_13,
524 .hw.init = &(const struct clk_init_data) {
525 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
526 .parent_data = gcc_parent_data_13,
527 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
528 .ops = &clk_regmap_mux_closest_ops,
533 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
537 .parent_map = gcc_parent_map_14,
539 .hw.init = &(const struct clk_init_data) {
540 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
541 .parent_data = gcc_parent_data_14,
542 .num_parents = ARRAY_SIZE(gcc_parent_data_14),
543 .ops = &clk_regmap_mux_closest_ops,
548 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
552 .parent_map = gcc_parent_map_15,
554 .hw.init = &(const struct clk_init_data) {
555 .name = "gcc_usb3_prim_phy_pipe_clk_src",
556 .parent_data = gcc_parent_data_15,
557 .num_parents = ARRAY_SIZE(gcc_parent_data_15),
558 .ops = &clk_regmap_mux_closest_ops,
563 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
564 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
565 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
566 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
570 static struct clk_rcg2 gcc_gp1_clk_src = {
574 .parent_map = gcc_parent_map_1,
575 .freq_tbl = ftbl_gcc_gp1_clk_src,
576 .clkr.hw.init = &(const struct clk_init_data) {
577 .name = "gcc_gp1_clk_src",
578 .parent_data = gcc_parent_data_1,
579 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
580 .flags = CLK_SET_RATE_PARENT,
581 .ops = &clk_rcg2_shared_ops,
585 static struct clk_rcg2 gcc_gp2_clk_src = {
589 .parent_map = gcc_parent_map_1,
590 .freq_tbl = ftbl_gcc_gp1_clk_src,
591 .clkr.hw.init = &(const struct clk_init_data) {
592 .name = "gcc_gp2_clk_src",
593 .parent_data = gcc_parent_data_1,
594 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
595 .flags = CLK_SET_RATE_PARENT,
596 .ops = &clk_rcg2_shared_ops,
600 static struct clk_rcg2 gcc_gp3_clk_src = {
604 .parent_map = gcc_parent_map_1,
605 .freq_tbl = ftbl_gcc_gp1_clk_src,
606 .clkr.hw.init = &(const struct clk_init_data) {
607 .name = "gcc_gp3_clk_src",
608 .parent_data = gcc_parent_data_1,
609 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
610 .flags = CLK_SET_RATE_PARENT,
611 .ops = &clk_rcg2_shared_ops,
615 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
616 F(19200000, P_BI_TCXO, 1, 0, 0),
620 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
624 .parent_map = gcc_parent_map_4,
625 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
626 .clkr.hw.init = &(const struct clk_init_data) {
627 .name = "gcc_pcie_0_aux_clk_src",
628 .parent_data = gcc_parent_data_4,
629 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
630 .flags = CLK_SET_RATE_PARENT,
631 .ops = &clk_rcg2_shared_ops,
635 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
636 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
640 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
644 .parent_map = gcc_parent_map_0,
645 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
646 .clkr.hw.init = &(const struct clk_init_data) {
647 .name = "gcc_pcie_0_phy_rchng_clk_src",
648 .parent_data = gcc_parent_data_0,
649 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
650 .flags = CLK_SET_RATE_PARENT,
651 .ops = &clk_rcg2_shared_ops,
655 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
659 .parent_map = gcc_parent_map_4,
660 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
661 .clkr.hw.init = &(const struct clk_init_data) {
662 .name = "gcc_pcie_1_aux_clk_src",
663 .parent_data = gcc_parent_data_4,
664 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
665 .flags = CLK_SET_RATE_PARENT,
666 .ops = &clk_rcg2_shared_ops,
670 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
674 .parent_map = gcc_parent_map_0,
675 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
676 .clkr.hw.init = &(const struct clk_init_data) {
677 .name = "gcc_pcie_1_phy_rchng_clk_src",
678 .parent_data = gcc_parent_data_0,
679 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
680 .flags = CLK_SET_RATE_PARENT,
681 .ops = &clk_rcg2_shared_ops,
685 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
686 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
690 static struct clk_rcg2 gcc_pdm2_clk_src = {
694 .parent_map = gcc_parent_map_0,
695 .freq_tbl = ftbl_gcc_pdm2_clk_src,
696 .clkr.hw.init = &(const struct clk_init_data) {
697 .name = "gcc_pdm2_clk_src",
698 .parent_data = gcc_parent_data_0,
699 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
700 .flags = CLK_SET_RATE_PARENT,
701 .ops = &clk_rcg2_shared_ops,
705 static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {
709 .parent_map = gcc_parent_map_0,
710 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
711 .clkr.hw.init = &(const struct clk_init_data) {
712 .name = "gcc_qupv3_i2c_s0_clk_src",
713 .parent_data = gcc_parent_data_0,
714 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
715 .flags = CLK_SET_RATE_PARENT,
716 .ops = &clk_rcg2_ops,
720 static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {
724 .parent_map = gcc_parent_map_0,
725 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
726 .clkr.hw.init = &(const struct clk_init_data) {
727 .name = "gcc_qupv3_i2c_s1_clk_src",
728 .parent_data = gcc_parent_data_0,
729 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
730 .flags = CLK_SET_RATE_PARENT,
731 .ops = &clk_rcg2_ops,
735 static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {
739 .parent_map = gcc_parent_map_0,
740 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
741 .clkr.hw.init = &(const struct clk_init_data) {
742 .name = "gcc_qupv3_i2c_s2_clk_src",
743 .parent_data = gcc_parent_data_0,
744 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
745 .flags = CLK_SET_RATE_PARENT,
746 .ops = &clk_rcg2_ops,
750 static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {
754 .parent_map = gcc_parent_map_0,
755 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
756 .clkr.hw.init = &(const struct clk_init_data) {
757 .name = "gcc_qupv3_i2c_s3_clk_src",
758 .parent_data = gcc_parent_data_0,
759 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
760 .flags = CLK_SET_RATE_PARENT,
761 .ops = &clk_rcg2_ops,
765 static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {
769 .parent_map = gcc_parent_map_0,
770 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
771 .clkr.hw.init = &(const struct clk_init_data) {
772 .name = "gcc_qupv3_i2c_s4_clk_src",
773 .parent_data = gcc_parent_data_0,
774 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
775 .flags = CLK_SET_RATE_PARENT,
776 .ops = &clk_rcg2_ops,
780 static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = {
784 .parent_map = gcc_parent_map_0,
785 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
786 .clkr.hw.init = &(const struct clk_init_data) {
787 .name = "gcc_qupv3_i2c_s5_clk_src",
788 .parent_data = gcc_parent_data_0,
789 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
790 .flags = CLK_SET_RATE_PARENT,
791 .ops = &clk_rcg2_ops,
795 static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = {
799 .parent_map = gcc_parent_map_0,
800 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
801 .clkr.hw.init = &(const struct clk_init_data) {
802 .name = "gcc_qupv3_i2c_s6_clk_src",
803 .parent_data = gcc_parent_data_0,
804 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
805 .flags = CLK_SET_RATE_PARENT,
806 .ops = &clk_rcg2_ops,
810 static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = {
814 .parent_map = gcc_parent_map_0,
815 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
816 .clkr.hw.init = &(const struct clk_init_data) {
817 .name = "gcc_qupv3_i2c_s7_clk_src",
818 .parent_data = gcc_parent_data_0,
819 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
820 .flags = CLK_SET_RATE_PARENT,
821 .ops = &clk_rcg2_ops,
825 static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = {
829 .parent_map = gcc_parent_map_0,
830 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
831 .clkr.hw.init = &(const struct clk_init_data) {
832 .name = "gcc_qupv3_i2c_s8_clk_src",
833 .parent_data = gcc_parent_data_0,
834 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
835 .flags = CLK_SET_RATE_PARENT,
836 .ops = &clk_rcg2_ops,
840 static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = {
844 .parent_map = gcc_parent_map_0,
845 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
846 .clkr.hw.init = &(const struct clk_init_data) {
847 .name = "gcc_qupv3_i2c_s9_clk_src",
848 .parent_data = gcc_parent_data_0,
849 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
850 .flags = CLK_SET_RATE_PARENT,
851 .ops = &clk_rcg2_ops,
855 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src[] = {
856 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
857 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
861 static struct clk_init_data gcc_qupv3_wrap1_qspi_ref_clk_src_init = {
862 .name = "gcc_qupv3_wrap1_qspi_ref_clk_src",
863 .parent_data = gcc_parent_data_0,
864 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
865 .flags = CLK_SET_RATE_PARENT,
866 .ops = &clk_rcg2_ops,
869 static struct clk_rcg2 gcc_qupv3_wrap1_qspi_ref_clk_src = {
873 .parent_map = gcc_parent_map_0,
874 .freq_tbl = ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src,
875 .clkr.hw.init = &gcc_qupv3_wrap1_qspi_ref_clk_src_init,
878 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
879 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
880 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
881 F(19200000, P_BI_TCXO, 1, 0, 0),
882 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
883 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
884 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
885 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
886 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
887 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
888 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
889 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
890 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
891 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
892 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
893 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
897 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
898 .name = "gcc_qupv3_wrap1_s0_clk_src",
899 .parent_data = gcc_parent_data_0,
900 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
901 .flags = CLK_SET_RATE_PARENT,
902 .ops = &clk_rcg2_ops,
905 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
909 .parent_map = gcc_parent_map_0,
910 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
911 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
914 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
915 .name = "gcc_qupv3_wrap1_s1_clk_src",
916 .parent_data = gcc_parent_data_0,
917 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
918 .flags = CLK_SET_RATE_PARENT,
919 .ops = &clk_rcg2_ops,
922 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
926 .parent_map = gcc_parent_map_0,
927 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
928 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
931 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s3_clk_src[] = {
932 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
933 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
934 F(19200000, P_BI_TCXO, 1, 0, 0),
935 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
936 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
937 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
938 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
939 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
940 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
941 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
942 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
946 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
947 .name = "gcc_qupv3_wrap1_s3_clk_src",
948 .parent_data = gcc_parent_data_0,
949 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
950 .flags = CLK_SET_RATE_PARENT,
951 .ops = &clk_rcg2_ops,
954 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
958 .parent_map = gcc_parent_map_0,
959 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
960 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
963 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s4_clk_src[] = {
964 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
965 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
966 F(19200000, P_BI_TCXO, 1, 0, 0),
967 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
968 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
969 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
970 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
971 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
972 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
973 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
974 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
978 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
979 .name = "gcc_qupv3_wrap1_s4_clk_src",
980 .parent_data = gcc_parent_data_0,
981 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
982 .flags = CLK_SET_RATE_PARENT,
983 .ops = &clk_rcg2_ops,
986 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
990 .parent_map = gcc_parent_map_0,
991 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
992 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
995 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
996 .name = "gcc_qupv3_wrap1_s5_clk_src",
997 .parent_data = gcc_parent_data_0,
998 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
999 .flags = CLK_SET_RATE_PARENT,
1000 .ops = &clk_rcg2_ops,
1003 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
1004 .cmd_rcgr = 0x18500,
1007 .parent_map = gcc_parent_map_0,
1008 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
1009 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
1012 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
1013 .name = "gcc_qupv3_wrap1_s6_clk_src",
1014 .parent_data = gcc_parent_data_0,
1015 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1016 .flags = CLK_SET_RATE_PARENT,
1017 .ops = &clk_rcg2_ops,
1020 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
1021 .cmd_rcgr = 0x18638,
1024 .parent_map = gcc_parent_map_0,
1025 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1026 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
1029 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
1030 .name = "gcc_qupv3_wrap1_s7_clk_src",
1031 .parent_data = gcc_parent_data_0,
1032 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1033 .flags = CLK_SET_RATE_PARENT,
1034 .ops = &clk_rcg2_ops,
1037 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
1038 .cmd_rcgr = 0x18770,
1041 .parent_map = gcc_parent_map_0,
1042 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
1043 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
1046 static const struct freq_tbl ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src[] = {
1047 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1051 static struct clk_rcg2 gcc_qupv3_wrap2_ibi_ctrl_0_clk_src = {
1052 .cmd_rcgr = 0x1e9d4,
1055 .parent_map = gcc_parent_map_2,
1056 .freq_tbl = ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src,
1057 .clkr.hw.init = &(const struct clk_init_data) {
1058 .name = "gcc_qupv3_wrap2_ibi_ctrl_0_clk_src",
1059 .parent_data = gcc_parent_data_2,
1060 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1061 .flags = CLK_SET_RATE_PARENT,
1062 .ops = &clk_rcg2_ops,
1066 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
1067 .name = "gcc_qupv3_wrap2_s0_clk_src",
1068 .parent_data = gcc_parent_data_0,
1069 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1070 .flags = CLK_SET_RATE_PARENT,
1071 .ops = &clk_rcg2_ops,
1074 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
1075 .cmd_rcgr = 0x1e010,
1078 .parent_map = gcc_parent_map_0,
1079 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1080 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
1083 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
1084 .name = "gcc_qupv3_wrap2_s1_clk_src",
1085 .parent_data = gcc_parent_data_0,
1086 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1087 .flags = CLK_SET_RATE_PARENT,
1088 .ops = &clk_rcg2_ops,
1091 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
1092 .cmd_rcgr = 0x1e148,
1095 .parent_map = gcc_parent_map_0,
1096 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1097 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
1100 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
1101 .name = "gcc_qupv3_wrap2_s2_clk_src",
1102 .parent_data = gcc_parent_data_0,
1103 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1104 .flags = CLK_SET_RATE_PARENT,
1105 .ops = &clk_rcg2_ops,
1108 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
1109 .cmd_rcgr = 0x1e280,
1112 .parent_map = gcc_parent_map_0,
1113 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1114 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
1117 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
1118 .name = "gcc_qupv3_wrap2_s3_clk_src",
1119 .parent_data = gcc_parent_data_0,
1120 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1121 .flags = CLK_SET_RATE_PARENT,
1122 .ops = &clk_rcg2_ops,
1125 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
1126 .cmd_rcgr = 0x1e3b8,
1129 .parent_map = gcc_parent_map_0,
1130 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1131 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
1134 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
1135 .name = "gcc_qupv3_wrap2_s4_clk_src",
1136 .parent_data = gcc_parent_data_0,
1137 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1138 .flags = CLK_SET_RATE_PARENT,
1139 .ops = &clk_rcg2_ops,
1142 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
1143 .cmd_rcgr = 0x1e4f0,
1146 .parent_map = gcc_parent_map_0,
1147 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
1148 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
1151 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
1152 .name = "gcc_qupv3_wrap2_s5_clk_src",
1153 .parent_data = gcc_parent_data_0,
1154 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1155 .flags = CLK_SET_RATE_PARENT,
1156 .ops = &clk_rcg2_ops,
1159 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
1160 .cmd_rcgr = 0x1e628,
1163 .parent_map = gcc_parent_map_0,
1164 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
1165 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
1168 static const struct freq_tbl ftbl_gcc_qupv3_wrap2_s6_clk_src[] = {
1169 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
1170 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
1171 F(19200000, P_BI_TCXO, 1, 0, 0),
1172 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
1173 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
1174 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
1175 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
1176 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1177 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
1178 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
1179 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
1180 F(128000000, P_GCC_GPLL0_OUT_MAIN, 1, 16, 75),
1184 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
1185 .name = "gcc_qupv3_wrap2_s6_clk_src",
1186 .parent_data = gcc_parent_data_10,
1187 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
1188 .flags = CLK_SET_RATE_PARENT,
1189 .ops = &clk_rcg2_ops,
1192 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
1193 .cmd_rcgr = 0x1e760,
1196 .parent_map = gcc_parent_map_10,
1197 .freq_tbl = ftbl_gcc_qupv3_wrap2_s6_clk_src,
1198 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
1201 static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = {
1202 .name = "gcc_qupv3_wrap2_s7_clk_src",
1203 .parent_data = gcc_parent_data_0,
1204 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1205 .flags = CLK_SET_RATE_PARENT,
1206 .ops = &clk_rcg2_ops,
1209 static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = {
1210 .cmd_rcgr = 0x1e898,
1213 .parent_map = gcc_parent_map_0,
1214 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,
1215 .clkr.hw.init = &gcc_qupv3_wrap2_s7_clk_src_init,
1218 static const struct freq_tbl ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src[] = {
1219 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1220 F(400000000, P_GCC_GPLL0_OUT_MAIN, 1.5, 0, 0),
1224 static struct clk_init_data gcc_qupv3_wrap3_qspi_ref_clk_src_init = {
1225 .name = "gcc_qupv3_wrap3_qspi_ref_clk_src",
1226 .parent_data = gcc_parent_data_0,
1227 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1228 .flags = CLK_SET_RATE_PARENT,
1229 .ops = &clk_rcg2_ops,
1232 static struct clk_rcg2 gcc_qupv3_wrap3_qspi_ref_clk_src = {
1233 .cmd_rcgr = 0x19018,
1236 .parent_map = gcc_parent_map_0,
1237 .freq_tbl = ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src,
1238 .clkr.hw.init = &gcc_qupv3_wrap3_qspi_ref_clk_src_init,
1241 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1242 F(400000, P_BI_TCXO, 12, 1, 4),
1243 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1244 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1245 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1249 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1250 .cmd_rcgr = 0x14018,
1253 .parent_map = gcc_parent_map_11,
1254 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1255 .clkr.hw.init = &(const struct clk_init_data) {
1256 .name = "gcc_sdcc2_apps_clk_src",
1257 .parent_data = gcc_parent_data_11,
1258 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
1259 .flags = CLK_SET_RATE_PARENT,
1260 .ops = &clk_rcg2_shared_ops,
1264 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1265 F(400000, P_BI_TCXO, 12, 1, 4),
1266 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1267 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1271 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1272 .cmd_rcgr = 0x16018,
1275 .parent_map = gcc_parent_map_0,
1276 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1277 .clkr.hw.init = &(const struct clk_init_data) {
1278 .name = "gcc_sdcc4_apps_clk_src",
1279 .parent_data = gcc_parent_data_0,
1280 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1281 .flags = CLK_SET_RATE_PARENT,
1282 .ops = &clk_rcg2_shared_ops,
1286 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1287 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1288 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1289 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
1290 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1294 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1295 .cmd_rcgr = 0x77030,
1298 .parent_map = gcc_parent_map_3,
1299 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1300 .clkr.hw.init = &(const struct clk_init_data) {
1301 .name = "gcc_ufs_phy_axi_clk_src",
1302 .parent_data = gcc_parent_data_3,
1303 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1304 .flags = CLK_SET_RATE_PARENT,
1305 .ops = &clk_rcg2_shared_ops,
1309 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1310 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1311 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
1312 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1316 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1317 .cmd_rcgr = 0x77080,
1320 .parent_map = gcc_parent_map_3,
1321 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1322 .clkr.hw.init = &(const struct clk_init_data) {
1323 .name = "gcc_ufs_phy_ice_core_clk_src",
1324 .parent_data = gcc_parent_data_3,
1325 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1326 .flags = CLK_SET_RATE_PARENT,
1327 .ops = &clk_rcg2_shared_ops,
1331 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1332 F(9600000, P_BI_TCXO, 2, 0, 0),
1333 F(19200000, P_BI_TCXO, 1, 0, 0),
1337 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1338 .cmd_rcgr = 0x770b4,
1341 .parent_map = gcc_parent_map_5,
1342 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1343 .clkr.hw.init = &(const struct clk_init_data) {
1344 .name = "gcc_ufs_phy_phy_aux_clk_src",
1345 .parent_data = gcc_parent_data_5,
1346 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1347 .flags = CLK_SET_RATE_PARENT,
1348 .ops = &clk_rcg2_shared_ops,
1352 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1353 .cmd_rcgr = 0x77098,
1356 .parent_map = gcc_parent_map_3,
1357 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1358 .clkr.hw.init = &(const struct clk_init_data) {
1359 .name = "gcc_ufs_phy_unipro_core_clk_src",
1360 .parent_data = gcc_parent_data_3,
1361 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1362 .flags = CLK_SET_RATE_PARENT,
1363 .ops = &clk_rcg2_shared_ops,
1367 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1368 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1369 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1370 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1371 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1375 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1376 .cmd_rcgr = 0x3902c,
1379 .parent_map = gcc_parent_map_0,
1380 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1381 .clkr.hw.init = &(const struct clk_init_data) {
1382 .name = "gcc_usb30_prim_master_clk_src",
1383 .parent_data = gcc_parent_data_0,
1384 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1385 .flags = CLK_SET_RATE_PARENT,
1386 .ops = &clk_rcg2_shared_ops,
1390 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1391 .cmd_rcgr = 0x39044,
1394 .parent_map = gcc_parent_map_0,
1395 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1396 .clkr.hw.init = &(const struct clk_init_data) {
1397 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1398 .parent_data = gcc_parent_data_0,
1399 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1400 .flags = CLK_SET_RATE_PARENT,
1401 .ops = &clk_rcg2_shared_ops,
1405 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1406 .cmd_rcgr = 0x39070,
1409 .parent_map = gcc_parent_map_4,
1410 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1411 .clkr.hw.init = &(const struct clk_init_data) {
1412 .name = "gcc_usb3_prim_phy_aux_clk_src",
1413 .parent_data = gcc_parent_data_4,
1414 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1415 .flags = CLK_SET_RATE_PARENT,
1416 .ops = &clk_rcg2_shared_ops,
1420 static struct clk_regmap_div gcc_qupv3_wrap1_s2_clk_src = {
1424 .clkr.hw.init = &(const struct clk_init_data) {
1425 .name = "gcc_qupv3_wrap1_s2_clk_src",
1426 .parent_hws = (const struct clk_hw*[]) {
1427 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
1430 .flags = CLK_SET_RATE_PARENT,
1431 .ops = &clk_regmap_div_ro_ops,
1435 static struct clk_regmap_div gcc_qupv3_wrap3_s0_clk_src = {
1439 .clkr.hw.init = &(const struct clk_init_data) {
1440 .name = "gcc_qupv3_wrap3_s0_clk_src",
1441 .parent_hws = (const struct clk_hw*[]) {
1442 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
1445 .flags = CLK_SET_RATE_PARENT,
1446 .ops = &clk_regmap_div_ro_ops,
1450 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1454 .clkr.hw.init = &(const struct clk_init_data) {
1455 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1456 .parent_hws = (const struct clk_hw*[]) {
1457 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1460 .flags = CLK_SET_RATE_PARENT,
1461 .ops = &clk_regmap_div_ro_ops,
1465 static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {
1466 .halt_reg = 0x10064,
1467 .halt_check = BRANCH_HALT_SKIP,
1468 .hwcg_reg = 0x10064,
1471 .enable_reg = 0x52000,
1472 .enable_mask = BIT(12),
1473 .hw.init = &(const struct clk_init_data) {
1474 .name = "gcc_aggre_noc_pcie_axi_clk",
1475 .ops = &clk_branch2_ops,
1480 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1481 .halt_reg = 0x770e4,
1482 .halt_check = BRANCH_HALT_VOTED,
1483 .hwcg_reg = 0x770e4,
1486 .enable_reg = 0x770e4,
1487 .enable_mask = BIT(0),
1488 .hw.init = &(const struct clk_init_data) {
1489 .name = "gcc_aggre_ufs_phy_axi_clk",
1490 .parent_hws = (const struct clk_hw*[]) {
1491 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1494 .flags = CLK_SET_RATE_PARENT,
1495 .ops = &clk_branch2_ops,
1500 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1501 .halt_reg = 0x770e4,
1502 .halt_check = BRANCH_HALT_VOTED,
1503 .hwcg_reg = 0x770e4,
1506 .enable_reg = 0x770e4,
1507 .enable_mask = BIT(1),
1508 .hw.init = &(const struct clk_init_data) {
1509 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1510 .parent_hws = (const struct clk_hw*[]) {
1511 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1514 .flags = CLK_SET_RATE_PARENT,
1515 .ops = &clk_branch2_ops,
1520 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1521 .halt_reg = 0x3908c,
1522 .halt_check = BRANCH_HALT_VOTED,
1523 .hwcg_reg = 0x3908c,
1526 .enable_reg = 0x3908c,
1527 .enable_mask = BIT(0),
1528 .hw.init = &(const struct clk_init_data) {
1529 .name = "gcc_aggre_usb3_prim_axi_clk",
1530 .parent_hws = (const struct clk_hw*[]) {
1531 &gcc_usb30_prim_master_clk_src.clkr.hw,
1534 .flags = CLK_SET_RATE_PARENT,
1535 .ops = &clk_branch2_ops,
1540 static struct clk_branch gcc_boot_rom_ahb_clk = {
1541 .halt_reg = 0x38004,
1542 .halt_check = BRANCH_HALT_VOTED,
1543 .hwcg_reg = 0x38004,
1546 .enable_reg = 0x52000,
1547 .enable_mask = BIT(10),
1548 .hw.init = &(const struct clk_init_data) {
1549 .name = "gcc_boot_rom_ahb_clk",
1550 .ops = &clk_branch2_ops,
1555 static struct clk_branch gcc_camera_hf_axi_clk = {
1556 .halt_reg = 0x26010,
1557 .halt_check = BRANCH_HALT_SKIP,
1558 .hwcg_reg = 0x26010,
1561 .enable_reg = 0x26010,
1562 .enable_mask = BIT(0),
1563 .hw.init = &(const struct clk_init_data) {
1564 .name = "gcc_camera_hf_axi_clk",
1565 .ops = &clk_branch2_ops,
1570 static struct clk_branch gcc_camera_sf_axi_clk = {
1571 .halt_reg = 0x2601c,
1572 .halt_check = BRANCH_HALT_SKIP,
1573 .hwcg_reg = 0x2601c,
1576 .enable_reg = 0x2601c,
1577 .enable_mask = BIT(0),
1578 .hw.init = &(const struct clk_init_data) {
1579 .name = "gcc_camera_sf_axi_clk",
1580 .ops = &clk_branch2_ops,
1585 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1586 .halt_reg = 0x10050,
1587 .halt_check = BRANCH_HALT_SKIP,
1588 .hwcg_reg = 0x10050,
1591 .enable_reg = 0x52000,
1592 .enable_mask = BIT(20),
1593 .hw.init = &(const struct clk_init_data) {
1594 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1595 .ops = &clk_branch2_ops,
1600 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1601 .halt_reg = 0x39088,
1602 .halt_check = BRANCH_HALT_VOTED,
1603 .hwcg_reg = 0x39088,
1606 .enable_reg = 0x39088,
1607 .enable_mask = BIT(0),
1608 .hw.init = &(const struct clk_init_data) {
1609 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1610 .parent_hws = (const struct clk_hw*[]) {
1611 &gcc_usb30_prim_master_clk_src.clkr.hw,
1614 .flags = CLK_SET_RATE_PARENT,
1615 .ops = &clk_branch2_ops,
1620 static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {
1621 .halt_reg = 0x10058,
1622 .halt_check = BRANCH_HALT_VOTED,
1623 .hwcg_reg = 0x10058,
1626 .enable_reg = 0x52008,
1627 .enable_mask = BIT(6),
1628 .hw.init = &(const struct clk_init_data) {
1629 .name = "gcc_cnoc_pcie_sf_axi_clk",
1630 .ops = &clk_branch2_ops,
1635 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1636 .halt_reg = 0x71154,
1637 .halt_check = BRANCH_HALT_SKIP,
1638 .hwcg_reg = 0x71154,
1641 .enable_reg = 0x71154,
1642 .enable_mask = BIT(0),
1643 .hw.init = &(const struct clk_init_data) {
1644 .name = "gcc_ddrss_gpu_axi_clk",
1645 .ops = &clk_branch2_aon_ops,
1650 static struct clk_branch gcc_ddrss_pcie_sf_qtb_clk = {
1651 .halt_reg = 0x10074,
1652 .halt_check = BRANCH_HALT_SKIP,
1653 .hwcg_reg = 0x10074,
1656 .enable_reg = 0x52000,
1657 .enable_mask = BIT(19),
1658 .hw.init = &(const struct clk_init_data) {
1659 .name = "gcc_ddrss_pcie_sf_qtb_clk",
1660 .ops = &clk_branch2_ops,
1665 static struct clk_branch gcc_disp_hf_axi_clk = {
1666 .halt_reg = 0x2700c,
1667 .halt_check = BRANCH_HALT_SKIP,
1668 .hwcg_reg = 0x2700c,
1671 .enable_reg = 0x2700c,
1672 .enable_mask = BIT(0),
1673 .hw.init = &(const struct clk_init_data) {
1674 .name = "gcc_disp_hf_axi_clk",
1675 .ops = &clk_branch2_ops,
1680 static struct clk_branch gcc_gp1_clk = {
1681 .halt_reg = 0x64000,
1682 .halt_check = BRANCH_HALT,
1684 .enable_reg = 0x64000,
1685 .enable_mask = BIT(0),
1686 .hw.init = &(const struct clk_init_data) {
1687 .name = "gcc_gp1_clk",
1688 .parent_hws = (const struct clk_hw*[]) {
1689 &gcc_gp1_clk_src.clkr.hw,
1692 .flags = CLK_SET_RATE_PARENT,
1693 .ops = &clk_branch2_ops,
1698 static struct clk_branch gcc_gp2_clk = {
1699 .halt_reg = 0x65000,
1700 .halt_check = BRANCH_HALT,
1702 .enable_reg = 0x65000,
1703 .enable_mask = BIT(0),
1704 .hw.init = &(const struct clk_init_data) {
1705 .name = "gcc_gp2_clk",
1706 .parent_hws = (const struct clk_hw*[]) {
1707 &gcc_gp2_clk_src.clkr.hw,
1710 .flags = CLK_SET_RATE_PARENT,
1711 .ops = &clk_branch2_ops,
1716 static struct clk_branch gcc_gp3_clk = {
1717 .halt_reg = 0x66000,
1718 .halt_check = BRANCH_HALT,
1720 .enable_reg = 0x66000,
1721 .enable_mask = BIT(0),
1722 .hw.init = &(const struct clk_init_data) {
1723 .name = "gcc_gp3_clk",
1724 .parent_hws = (const struct clk_hw*[]) {
1725 &gcc_gp3_clk_src.clkr.hw,
1728 .flags = CLK_SET_RATE_PARENT,
1729 .ops = &clk_branch2_ops,
1734 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1735 .halt_check = BRANCH_HALT_DELAY,
1737 .enable_reg = 0x52000,
1738 .enable_mask = BIT(15),
1739 .hw.init = &(const struct clk_init_data) {
1740 .name = "gcc_gpu_gpll0_clk_src",
1741 .parent_hws = (const struct clk_hw*[]) {
1745 .flags = CLK_SET_RATE_PARENT,
1746 .ops = &clk_branch2_ops,
1751 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1752 .halt_check = BRANCH_HALT_DELAY,
1754 .enable_reg = 0x52000,
1755 .enable_mask = BIT(16),
1756 .hw.init = &(const struct clk_init_data) {
1757 .name = "gcc_gpu_gpll0_div_clk_src",
1758 .parent_hws = (const struct clk_hw*[]) {
1759 &gcc_gpll0_out_even.clkr.hw,
1762 .flags = CLK_SET_RATE_PARENT,
1763 .ops = &clk_branch2_ops,
1768 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1769 .halt_reg = 0x71010,
1770 .halt_check = BRANCH_HALT_VOTED,
1771 .hwcg_reg = 0x71010,
1774 .enable_reg = 0x71010,
1775 .enable_mask = BIT(0),
1776 .hw.init = &(const struct clk_init_data) {
1777 .name = "gcc_gpu_memnoc_gfx_clk",
1778 .ops = &clk_branch2_ops,
1783 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1784 .halt_reg = 0x71018,
1785 .halt_check = BRANCH_HALT_DELAY,
1787 .enable_reg = 0x71018,
1788 .enable_mask = BIT(0),
1789 .hw.init = &(const struct clk_init_data) {
1790 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1791 .ops = &clk_branch2_ops,
1796 static struct clk_branch gcc_pcie_0_aux_clk = {
1797 .halt_reg = 0x6b03c,
1798 .halt_check = BRANCH_HALT_VOTED,
1800 .enable_reg = 0x52008,
1801 .enable_mask = BIT(3),
1802 .hw.init = &(const struct clk_init_data) {
1803 .name = "gcc_pcie_0_aux_clk",
1804 .parent_hws = (const struct clk_hw*[]) {
1805 &gcc_pcie_0_aux_clk_src.clkr.hw,
1808 .flags = CLK_SET_RATE_PARENT,
1809 .ops = &clk_branch2_ops,
1814 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1815 .halt_reg = 0x6b038,
1816 .halt_check = BRANCH_HALT_VOTED,
1817 .hwcg_reg = 0x6b038,
1820 .enable_reg = 0x52008,
1821 .enable_mask = BIT(2),
1822 .hw.init = &(const struct clk_init_data) {
1823 .name = "gcc_pcie_0_cfg_ahb_clk",
1824 .ops = &clk_branch2_ops,
1829 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1830 .halt_reg = 0x6b02c,
1831 .halt_check = BRANCH_HALT_SKIP,
1832 .hwcg_reg = 0x6b02c,
1835 .enable_reg = 0x52008,
1836 .enable_mask = BIT(1),
1837 .hw.init = &(const struct clk_init_data) {
1838 .name = "gcc_pcie_0_mstr_axi_clk",
1839 .ops = &clk_branch2_ops,
1844 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1845 .halt_reg = 0x6b054,
1846 .halt_check = BRANCH_HALT_VOTED,
1848 .enable_reg = 0x52000,
1849 .enable_mask = BIT(22),
1850 .hw.init = &(const struct clk_init_data) {
1851 .name = "gcc_pcie_0_phy_rchng_clk",
1852 .parent_hws = (const struct clk_hw*[]) {
1853 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1856 .flags = CLK_SET_RATE_PARENT,
1857 .ops = &clk_branch2_ops,
1862 static struct clk_branch gcc_pcie_0_pipe_clk = {
1863 .halt_reg = 0x6b048,
1864 .halt_check = BRANCH_HALT_SKIP,
1866 .enable_reg = 0x52008,
1867 .enable_mask = BIT(4),
1868 .hw.init = &(const struct clk_init_data) {
1869 .name = "gcc_pcie_0_pipe_clk",
1870 .parent_hws = (const struct clk_hw*[]) {
1871 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1874 .flags = CLK_SET_RATE_PARENT,
1875 .ops = &clk_branch2_ops,
1880 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1881 .halt_reg = 0x6b020,
1882 .halt_check = BRANCH_HALT_VOTED,
1883 .hwcg_reg = 0x6b020,
1886 .enable_reg = 0x52008,
1887 .enable_mask = BIT(0),
1888 .hw.init = &(const struct clk_init_data) {
1889 .name = "gcc_pcie_0_slv_axi_clk",
1890 .ops = &clk_branch2_ops,
1895 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1896 .halt_reg = 0x6b01c,
1897 .halt_check = BRANCH_HALT_VOTED,
1899 .enable_reg = 0x52008,
1900 .enable_mask = BIT(5),
1901 .hw.init = &(const struct clk_init_data) {
1902 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1903 .ops = &clk_branch2_ops,
1908 static struct clk_branch gcc_pcie_1_aux_clk = {
1909 .halt_reg = 0x8d038,
1910 .halt_check = BRANCH_HALT_VOTED,
1912 .enable_reg = 0x52000,
1913 .enable_mask = BIT(29),
1914 .hw.init = &(const struct clk_init_data) {
1915 .name = "gcc_pcie_1_aux_clk",
1916 .parent_hws = (const struct clk_hw*[]) {
1917 &gcc_pcie_1_aux_clk_src.clkr.hw,
1920 .flags = CLK_SET_RATE_PARENT,
1921 .ops = &clk_branch2_ops,
1926 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1927 .halt_reg = 0x8d034,
1928 .halt_check = BRANCH_HALT_VOTED,
1929 .hwcg_reg = 0x8d034,
1932 .enable_reg = 0x52000,
1933 .enable_mask = BIT(28),
1934 .hw.init = &(const struct clk_init_data) {
1935 .name = "gcc_pcie_1_cfg_ahb_clk",
1936 .ops = &clk_branch2_ops,
1941 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1942 .halt_reg = 0x8d028,
1943 .halt_check = BRANCH_HALT_SKIP,
1944 .hwcg_reg = 0x8d028,
1947 .enable_reg = 0x52000,
1948 .enable_mask = BIT(27),
1949 .hw.init = &(const struct clk_init_data) {
1950 .name = "gcc_pcie_1_mstr_axi_clk",
1951 .ops = &clk_branch2_ops,
1956 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1957 .halt_reg = 0x8d044,
1958 .halt_check = BRANCH_HALT_VOTED,
1960 .enable_reg = 0x52000,
1961 .enable_mask = BIT(24),
1962 .hw.init = &(const struct clk_init_data) {
1963 .name = "gcc_pcie_1_phy_aux_clk",
1964 .parent_hws = (const struct clk_hw*[]) {
1965 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1968 .flags = CLK_SET_RATE_PARENT,
1969 .ops = &clk_branch2_ops,
1974 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1975 .halt_reg = 0x8d05c,
1976 .halt_check = BRANCH_HALT_VOTED,
1978 .enable_reg = 0x52000,
1979 .enable_mask = BIT(23),
1980 .hw.init = &(const struct clk_init_data) {
1981 .name = "gcc_pcie_1_phy_rchng_clk",
1982 .parent_hws = (const struct clk_hw*[]) {
1983 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1986 .flags = CLK_SET_RATE_PARENT,
1987 .ops = &clk_branch2_ops,
1992 static struct clk_branch gcc_pcie_1_pipe_clk = {
1993 .halt_reg = 0x8d050,
1994 .halt_check = BRANCH_HALT_SKIP,
1996 .enable_reg = 0x52000,
1997 .enable_mask = BIT(30),
1998 .hw.init = &(const struct clk_init_data) {
1999 .name = "gcc_pcie_1_pipe_clk",
2000 .parent_hws = (const struct clk_hw*[]) {
2001 &gcc_pcie_1_pipe_clk_src.clkr.hw,
2004 .flags = CLK_SET_RATE_PARENT,
2005 .ops = &clk_branch2_ops,
2010 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2011 .halt_reg = 0x8d01c,
2012 .halt_check = BRANCH_HALT_VOTED,
2013 .hwcg_reg = 0x8d01c,
2016 .enable_reg = 0x52000,
2017 .enable_mask = BIT(26),
2018 .hw.init = &(const struct clk_init_data) {
2019 .name = "gcc_pcie_1_slv_axi_clk",
2020 .ops = &clk_branch2_ops,
2025 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2026 .halt_reg = 0x8d018,
2027 .halt_check = BRANCH_HALT_VOTED,
2029 .enable_reg = 0x52000,
2030 .enable_mask = BIT(25),
2031 .hw.init = &(const struct clk_init_data) {
2032 .name = "gcc_pcie_1_slv_q2a_axi_clk",
2033 .ops = &clk_branch2_ops,
2038 static struct clk_branch gcc_pdm2_clk = {
2039 .halt_reg = 0x3300c,
2040 .halt_check = BRANCH_HALT,
2042 .enable_reg = 0x3300c,
2043 .enable_mask = BIT(0),
2044 .hw.init = &(const struct clk_init_data) {
2045 .name = "gcc_pdm2_clk",
2046 .parent_hws = (const struct clk_hw*[]) {
2047 &gcc_pdm2_clk_src.clkr.hw,
2050 .flags = CLK_SET_RATE_PARENT,
2051 .ops = &clk_branch2_ops,
2056 static struct clk_branch gcc_pdm_ahb_clk = {
2057 .halt_reg = 0x33004,
2058 .halt_check = BRANCH_HALT_VOTED,
2059 .hwcg_reg = 0x33004,
2062 .enable_reg = 0x33004,
2063 .enable_mask = BIT(0),
2064 .hw.init = &(const struct clk_init_data) {
2065 .name = "gcc_pdm_ahb_clk",
2066 .ops = &clk_branch2_ops,
2071 static struct clk_branch gcc_pdm_xo4_clk = {
2072 .halt_reg = 0x33008,
2073 .halt_check = BRANCH_HALT,
2075 .enable_reg = 0x33008,
2076 .enable_mask = BIT(0),
2077 .hw.init = &(const struct clk_init_data) {
2078 .name = "gcc_pdm_xo4_clk",
2079 .ops = &clk_branch2_ops,
2084 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2085 .halt_reg = 0x26008,
2086 .halt_check = BRANCH_HALT_VOTED,
2087 .hwcg_reg = 0x26008,
2090 .enable_reg = 0x26008,
2091 .enable_mask = BIT(0),
2092 .hw.init = &(const struct clk_init_data) {
2093 .name = "gcc_qmip_camera_nrt_ahb_clk",
2094 .ops = &clk_branch2_ops,
2099 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2100 .halt_reg = 0x2600c,
2101 .halt_check = BRANCH_HALT_VOTED,
2102 .hwcg_reg = 0x2600c,
2105 .enable_reg = 0x2600c,
2106 .enable_mask = BIT(0),
2107 .hw.init = &(const struct clk_init_data) {
2108 .name = "gcc_qmip_camera_rt_ahb_clk",
2109 .ops = &clk_branch2_ops,
2114 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2115 .halt_reg = 0x27008,
2116 .halt_check = BRANCH_HALT_VOTED,
2117 .hwcg_reg = 0x27008,
2120 .enable_reg = 0x27008,
2121 .enable_mask = BIT(0),
2122 .hw.init = &(const struct clk_init_data) {
2123 .name = "gcc_qmip_disp_ahb_clk",
2124 .ops = &clk_branch2_ops,
2129 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
2130 .halt_reg = 0x71008,
2131 .halt_check = BRANCH_HALT_VOTED,
2132 .hwcg_reg = 0x71008,
2135 .enable_reg = 0x71008,
2136 .enable_mask = BIT(0),
2137 .hw.init = &(const struct clk_init_data) {
2138 .name = "gcc_qmip_gpu_ahb_clk",
2139 .ops = &clk_branch2_ops,
2144 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
2145 .halt_reg = 0x6b018,
2146 .halt_check = BRANCH_HALT_VOTED,
2147 .hwcg_reg = 0x6b018,
2150 .enable_reg = 0x52000,
2151 .enable_mask = BIT(11),
2152 .hw.init = &(const struct clk_init_data) {
2153 .name = "gcc_qmip_pcie_ahb_clk",
2154 .ops = &clk_branch2_ops,
2159 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
2160 .halt_reg = 0x32014,
2161 .halt_check = BRANCH_HALT_VOTED,
2162 .hwcg_reg = 0x32014,
2165 .enable_reg = 0x32014,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(const struct clk_init_data) {
2168 .name = "gcc_qmip_video_cv_cpu_ahb_clk",
2169 .ops = &clk_branch2_ops,
2174 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2175 .halt_reg = 0x32008,
2176 .halt_check = BRANCH_HALT_VOTED,
2177 .hwcg_reg = 0x32008,
2180 .enable_reg = 0x32008,
2181 .enable_mask = BIT(0),
2182 .hw.init = &(const struct clk_init_data) {
2183 .name = "gcc_qmip_video_cvp_ahb_clk",
2184 .ops = &clk_branch2_ops,
2189 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
2190 .halt_reg = 0x32010,
2191 .halt_check = BRANCH_HALT_VOTED,
2192 .hwcg_reg = 0x32010,
2195 .enable_reg = 0x32010,
2196 .enable_mask = BIT(0),
2197 .hw.init = &(const struct clk_init_data) {
2198 .name = "gcc_qmip_video_v_cpu_ahb_clk",
2199 .ops = &clk_branch2_ops,
2204 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2205 .halt_reg = 0x3200c,
2206 .halt_check = BRANCH_HALT_VOTED,
2207 .hwcg_reg = 0x3200c,
2210 .enable_reg = 0x3200c,
2211 .enable_mask = BIT(0),
2212 .hw.init = &(const struct clk_init_data) {
2213 .name = "gcc_qmip_video_vcodec_ahb_clk",
2214 .ops = &clk_branch2_ops,
2219 static struct clk_branch gcc_qupv3_i2c_core_clk = {
2220 .halt_reg = 0x23004,
2221 .halt_check = BRANCH_HALT_VOTED,
2223 .enable_reg = 0x52008,
2224 .enable_mask = BIT(8),
2225 .hw.init = &(const struct clk_init_data) {
2226 .name = "gcc_qupv3_i2c_core_clk",
2227 .ops = &clk_branch2_ops,
2232 static struct clk_branch gcc_qupv3_i2c_s0_clk = {
2233 .halt_reg = 0x17004,
2234 .halt_check = BRANCH_HALT_VOTED,
2236 .enable_reg = 0x52008,
2237 .enable_mask = BIT(10),
2238 .hw.init = &(const struct clk_init_data) {
2239 .name = "gcc_qupv3_i2c_s0_clk",
2240 .parent_hws = (const struct clk_hw*[]) {
2241 &gcc_qupv3_i2c_s0_clk_src.clkr.hw,
2244 .flags = CLK_SET_RATE_PARENT,
2245 .ops = &clk_branch2_ops,
2250 static struct clk_branch gcc_qupv3_i2c_s1_clk = {
2251 .halt_reg = 0x17020,
2252 .halt_check = BRANCH_HALT_VOTED,
2254 .enable_reg = 0x52008,
2255 .enable_mask = BIT(11),
2256 .hw.init = &(const struct clk_init_data) {
2257 .name = "gcc_qupv3_i2c_s1_clk",
2258 .parent_hws = (const struct clk_hw*[]) {
2259 &gcc_qupv3_i2c_s1_clk_src.clkr.hw,
2262 .flags = CLK_SET_RATE_PARENT,
2263 .ops = &clk_branch2_ops,
2268 static struct clk_branch gcc_qupv3_i2c_s2_clk = {
2269 .halt_reg = 0x1703c,
2270 .halt_check = BRANCH_HALT_VOTED,
2272 .enable_reg = 0x52008,
2273 .enable_mask = BIT(12),
2274 .hw.init = &(const struct clk_init_data) {
2275 .name = "gcc_qupv3_i2c_s2_clk",
2276 .parent_hws = (const struct clk_hw*[]) {
2277 &gcc_qupv3_i2c_s2_clk_src.clkr.hw,
2280 .flags = CLK_SET_RATE_PARENT,
2281 .ops = &clk_branch2_ops,
2286 static struct clk_branch gcc_qupv3_i2c_s3_clk = {
2287 .halt_reg = 0x17058,
2288 .halt_check = BRANCH_HALT_VOTED,
2290 .enable_reg = 0x52008,
2291 .enable_mask = BIT(13),
2292 .hw.init = &(const struct clk_init_data) {
2293 .name = "gcc_qupv3_i2c_s3_clk",
2294 .parent_hws = (const struct clk_hw*[]) {
2295 &gcc_qupv3_i2c_s3_clk_src.clkr.hw,
2298 .flags = CLK_SET_RATE_PARENT,
2299 .ops = &clk_branch2_ops,
2304 static struct clk_branch gcc_qupv3_i2c_s4_clk = {
2305 .halt_reg = 0x17074,
2306 .halt_check = BRANCH_HALT_VOTED,
2308 .enable_reg = 0x52008,
2309 .enable_mask = BIT(14),
2310 .hw.init = &(const struct clk_init_data) {
2311 .name = "gcc_qupv3_i2c_s4_clk",
2312 .parent_hws = (const struct clk_hw*[]) {
2313 &gcc_qupv3_i2c_s4_clk_src.clkr.hw,
2316 .flags = CLK_SET_RATE_PARENT,
2317 .ops = &clk_branch2_ops,
2322 static struct clk_branch gcc_qupv3_i2c_s5_clk = {
2323 .halt_reg = 0x17090,
2324 .halt_check = BRANCH_HALT_VOTED,
2326 .enable_reg = 0x52008,
2327 .enable_mask = BIT(15),
2328 .hw.init = &(const struct clk_init_data) {
2329 .name = "gcc_qupv3_i2c_s5_clk",
2330 .parent_hws = (const struct clk_hw*[]) {
2331 &gcc_qupv3_i2c_s5_clk_src.clkr.hw,
2334 .flags = CLK_SET_RATE_PARENT,
2335 .ops = &clk_branch2_ops,
2340 static struct clk_branch gcc_qupv3_i2c_s6_clk = {
2341 .halt_reg = 0x170ac,
2342 .halt_check = BRANCH_HALT_VOTED,
2344 .enable_reg = 0x52008,
2345 .enable_mask = BIT(16),
2346 .hw.init = &(const struct clk_init_data) {
2347 .name = "gcc_qupv3_i2c_s6_clk",
2348 .parent_hws = (const struct clk_hw*[]) {
2349 &gcc_qupv3_i2c_s6_clk_src.clkr.hw,
2352 .flags = CLK_SET_RATE_PARENT,
2353 .ops = &clk_branch2_ops,
2358 static struct clk_branch gcc_qupv3_i2c_s7_clk = {
2359 .halt_reg = 0x170c8,
2360 .halt_check = BRANCH_HALT_VOTED,
2362 .enable_reg = 0x52008,
2363 .enable_mask = BIT(17),
2364 .hw.init = &(const struct clk_init_data) {
2365 .name = "gcc_qupv3_i2c_s7_clk",
2366 .parent_hws = (const struct clk_hw*[]) {
2367 &gcc_qupv3_i2c_s7_clk_src.clkr.hw,
2370 .flags = CLK_SET_RATE_PARENT,
2371 .ops = &clk_branch2_ops,
2376 static struct clk_branch gcc_qupv3_i2c_s8_clk = {
2377 .halt_reg = 0x170e4,
2378 .halt_check = BRANCH_HALT_VOTED,
2380 .enable_reg = 0x52010,
2381 .enable_mask = BIT(14),
2382 .hw.init = &(const struct clk_init_data) {
2383 .name = "gcc_qupv3_i2c_s8_clk",
2384 .parent_hws = (const struct clk_hw*[]) {
2385 &gcc_qupv3_i2c_s8_clk_src.clkr.hw,
2388 .flags = CLK_SET_RATE_PARENT,
2389 .ops = &clk_branch2_ops,
2394 static struct clk_branch gcc_qupv3_i2c_s9_clk = {
2395 .halt_reg = 0x17100,
2396 .halt_check = BRANCH_HALT_VOTED,
2398 .enable_reg = 0x52010,
2399 .enable_mask = BIT(15),
2400 .hw.init = &(const struct clk_init_data) {
2401 .name = "gcc_qupv3_i2c_s9_clk",
2402 .parent_hws = (const struct clk_hw*[]) {
2403 &gcc_qupv3_i2c_s9_clk_src.clkr.hw,
2406 .flags = CLK_SET_RATE_PARENT,
2407 .ops = &clk_branch2_ops,
2412 static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {
2413 .halt_reg = 0x23000,
2414 .halt_check = BRANCH_HALT_VOTED,
2415 .hwcg_reg = 0x23000,
2418 .enable_reg = 0x52008,
2419 .enable_mask = BIT(7),
2420 .hw.init = &(const struct clk_init_data) {
2421 .name = "gcc_qupv3_i2c_s_ahb_clk",
2422 .ops = &clk_branch2_ops,
2427 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2428 .halt_reg = 0x23154,
2429 .halt_check = BRANCH_HALT_VOTED,
2431 .enable_reg = 0x52008,
2432 .enable_mask = BIT(18),
2433 .hw.init = &(const struct clk_init_data) {
2434 .name = "gcc_qupv3_wrap1_core_2x_clk",
2435 .ops = &clk_branch2_ops,
2440 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2441 .halt_reg = 0x23144,
2442 .halt_check = BRANCH_HALT_VOTED,
2444 .enable_reg = 0x52008,
2445 .enable_mask = BIT(19),
2446 .hw.init = &(const struct clk_init_data) {
2447 .name = "gcc_qupv3_wrap1_core_clk",
2448 .ops = &clk_branch2_ops,
2453 static struct clk_branch gcc_qupv3_wrap1_qspi_ref_clk = {
2454 .halt_reg = 0x1889c,
2455 .halt_check = BRANCH_HALT_VOTED,
2457 .enable_reg = 0x52010,
2458 .enable_mask = BIT(29),
2459 .hw.init = &(const struct clk_init_data) {
2460 .name = "gcc_qupv3_wrap1_qspi_ref_clk",
2461 .parent_hws = (const struct clk_hw*[]) {
2462 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
2465 .flags = CLK_SET_RATE_PARENT,
2466 .ops = &clk_branch2_ops,
2471 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2472 .halt_reg = 0x18004,
2473 .halt_check = BRANCH_HALT_VOTED,
2475 .enable_reg = 0x52008,
2476 .enable_mask = BIT(22),
2477 .hw.init = &(const struct clk_init_data) {
2478 .name = "gcc_qupv3_wrap1_s0_clk",
2479 .parent_hws = (const struct clk_hw*[]) {
2480 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2483 .flags = CLK_SET_RATE_PARENT,
2484 .ops = &clk_branch2_ops,
2489 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2490 .halt_reg = 0x1813c,
2491 .halt_check = BRANCH_HALT_VOTED,
2493 .enable_reg = 0x52008,
2494 .enable_mask = BIT(23),
2495 .hw.init = &(const struct clk_init_data) {
2496 .name = "gcc_qupv3_wrap1_s1_clk",
2497 .parent_hws = (const struct clk_hw*[]) {
2498 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2501 .flags = CLK_SET_RATE_PARENT,
2502 .ops = &clk_branch2_ops,
2507 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2508 .halt_reg = 0x18274,
2509 .halt_check = BRANCH_HALT_VOTED,
2511 .enable_reg = 0x52008,
2512 .enable_mask = BIT(24),
2513 .hw.init = &(const struct clk_init_data) {
2514 .name = "gcc_qupv3_wrap1_s2_clk",
2515 .parent_hws = (const struct clk_hw*[]) {
2516 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2519 .flags = CLK_SET_RATE_PARENT,
2520 .ops = &clk_branch2_ops,
2525 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2526 .halt_reg = 0x18284,
2527 .halt_check = BRANCH_HALT_VOTED,
2529 .enable_reg = 0x52008,
2530 .enable_mask = BIT(25),
2531 .hw.init = &(const struct clk_init_data) {
2532 .name = "gcc_qupv3_wrap1_s3_clk",
2533 .parent_hws = (const struct clk_hw*[]) {
2534 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2537 .flags = CLK_SET_RATE_PARENT,
2538 .ops = &clk_branch2_ops,
2543 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2544 .halt_reg = 0x183bc,
2545 .halt_check = BRANCH_HALT_VOTED,
2547 .enable_reg = 0x52008,
2548 .enable_mask = BIT(26),
2549 .hw.init = &(const struct clk_init_data) {
2550 .name = "gcc_qupv3_wrap1_s4_clk",
2551 .parent_hws = (const struct clk_hw*[]) {
2552 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2555 .flags = CLK_SET_RATE_PARENT,
2556 .ops = &clk_branch2_ops,
2561 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2562 .halt_reg = 0x184f4,
2563 .halt_check = BRANCH_HALT_VOTED,
2565 .enable_reg = 0x52008,
2566 .enable_mask = BIT(27),
2567 .hw.init = &(const struct clk_init_data) {
2568 .name = "gcc_qupv3_wrap1_s5_clk",
2569 .parent_hws = (const struct clk_hw*[]) {
2570 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2573 .flags = CLK_SET_RATE_PARENT,
2574 .ops = &clk_branch2_ops,
2579 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2580 .halt_reg = 0x1862c,
2581 .halt_check = BRANCH_HALT_VOTED,
2583 .enable_reg = 0x52008,
2584 .enable_mask = BIT(28),
2585 .hw.init = &(const struct clk_init_data) {
2586 .name = "gcc_qupv3_wrap1_s6_clk",
2587 .parent_hws = (const struct clk_hw*[]) {
2588 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2591 .flags = CLK_SET_RATE_PARENT,
2592 .ops = &clk_branch2_ops,
2597 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2598 .halt_reg = 0x18764,
2599 .halt_check = BRANCH_HALT_VOTED,
2601 .enable_reg = 0x52010,
2602 .enable_mask = BIT(16),
2603 .hw.init = &(const struct clk_init_data) {
2604 .name = "gcc_qupv3_wrap1_s7_clk",
2605 .parent_hws = (const struct clk_hw*[]) {
2606 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2609 .flags = CLK_SET_RATE_PARENT,
2610 .ops = &clk_branch2_ops,
2615 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2616 .halt_reg = 0x232a4,
2617 .halt_check = BRANCH_HALT_VOTED,
2619 .enable_reg = 0x52010,
2620 .enable_mask = BIT(3),
2621 .hw.init = &(const struct clk_init_data) {
2622 .name = "gcc_qupv3_wrap2_core_2x_clk",
2623 .ops = &clk_branch2_ops,
2628 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2629 .halt_reg = 0x23294,
2630 .halt_check = BRANCH_HALT_VOTED,
2632 .enable_reg = 0x52010,
2633 .enable_mask = BIT(0),
2634 .hw.init = &(const struct clk_init_data) {
2635 .name = "gcc_qupv3_wrap2_core_clk",
2636 .ops = &clk_branch2_ops,
2641 static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_2_clk = {
2642 .halt_reg = 0x1e9cc,
2643 .halt_check = BRANCH_HALT_VOTED,
2644 .hwcg_reg = 0x1e9cc,
2647 .enable_reg = 0x52010,
2648 .enable_mask = BIT(27),
2649 .hw.init = &(const struct clk_init_data) {
2650 .name = "gcc_qupv3_wrap2_ibi_ctrl_2_clk",
2651 .parent_hws = (const struct clk_hw*[]) {
2652 &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw,
2655 .flags = CLK_SET_RATE_PARENT,
2656 .ops = &clk_branch2_ops,
2661 static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_3_clk = {
2662 .halt_reg = 0x1e9d0,
2663 .halt_check = BRANCH_HALT_VOTED,
2664 .hwcg_reg = 0x1e9d0,
2667 .enable_reg = 0x52010,
2668 .enable_mask = BIT(28),
2669 .hw.init = &(const struct clk_init_data) {
2670 .name = "gcc_qupv3_wrap2_ibi_ctrl_3_clk",
2671 .parent_hws = (const struct clk_hw*[]) {
2672 &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw,
2675 .flags = CLK_SET_RATE_PARENT,
2676 .ops = &clk_branch2_ops,
2681 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2682 .halt_reg = 0x1e004,
2683 .halt_check = BRANCH_HALT_VOTED,
2685 .enable_reg = 0x52010,
2686 .enable_mask = BIT(4),
2687 .hw.init = &(const struct clk_init_data) {
2688 .name = "gcc_qupv3_wrap2_s0_clk",
2689 .parent_hws = (const struct clk_hw*[]) {
2690 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2693 .flags = CLK_SET_RATE_PARENT,
2694 .ops = &clk_branch2_ops,
2699 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2700 .halt_reg = 0x1e13c,
2701 .halt_check = BRANCH_HALT_VOTED,
2703 .enable_reg = 0x52010,
2704 .enable_mask = BIT(5),
2705 .hw.init = &(const struct clk_init_data) {
2706 .name = "gcc_qupv3_wrap2_s1_clk",
2707 .parent_hws = (const struct clk_hw*[]) {
2708 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2711 .flags = CLK_SET_RATE_PARENT,
2712 .ops = &clk_branch2_ops,
2717 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2718 .halt_reg = 0x1e274,
2719 .halt_check = BRANCH_HALT_VOTED,
2721 .enable_reg = 0x52010,
2722 .enable_mask = BIT(6),
2723 .hw.init = &(const struct clk_init_data) {
2724 .name = "gcc_qupv3_wrap2_s2_clk",
2725 .parent_hws = (const struct clk_hw*[]) {
2726 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2729 .flags = CLK_SET_RATE_PARENT,
2730 .ops = &clk_branch2_ops,
2735 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2736 .halt_reg = 0x1e3ac,
2737 .halt_check = BRANCH_HALT_VOTED,
2739 .enable_reg = 0x52010,
2740 .enable_mask = BIT(7),
2741 .hw.init = &(const struct clk_init_data) {
2742 .name = "gcc_qupv3_wrap2_s3_clk",
2743 .parent_hws = (const struct clk_hw*[]) {
2744 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2747 .flags = CLK_SET_RATE_PARENT,
2748 .ops = &clk_branch2_ops,
2753 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2754 .halt_reg = 0x1e4e4,
2755 .halt_check = BRANCH_HALT_VOTED,
2757 .enable_reg = 0x52010,
2758 .enable_mask = BIT(8),
2759 .hw.init = &(const struct clk_init_data) {
2760 .name = "gcc_qupv3_wrap2_s4_clk",
2761 .parent_hws = (const struct clk_hw*[]) {
2762 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2765 .flags = CLK_SET_RATE_PARENT,
2766 .ops = &clk_branch2_ops,
2771 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2772 .halt_reg = 0x1e61c,
2773 .halt_check = BRANCH_HALT_VOTED,
2775 .enable_reg = 0x52010,
2776 .enable_mask = BIT(9),
2777 .hw.init = &(const struct clk_init_data) {
2778 .name = "gcc_qupv3_wrap2_s5_clk",
2779 .parent_hws = (const struct clk_hw*[]) {
2780 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2783 .flags = CLK_SET_RATE_PARENT,
2784 .ops = &clk_branch2_ops,
2789 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2790 .halt_reg = 0x1e754,
2791 .halt_check = BRANCH_HALT_VOTED,
2793 .enable_reg = 0x52010,
2794 .enable_mask = BIT(10),
2795 .hw.init = &(const struct clk_init_data) {
2796 .name = "gcc_qupv3_wrap2_s6_clk",
2797 .parent_hws = (const struct clk_hw*[]) {
2798 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2801 .flags = CLK_SET_RATE_PARENT,
2802 .ops = &clk_branch2_ops,
2807 static struct clk_branch gcc_qupv3_wrap2_s7_clk = {
2808 .halt_reg = 0x1e88c,
2809 .halt_check = BRANCH_HALT_VOTED,
2811 .enable_reg = 0x52010,
2812 .enable_mask = BIT(17),
2813 .hw.init = &(const struct clk_init_data) {
2814 .name = "gcc_qupv3_wrap2_s7_clk",
2815 .parent_hws = (const struct clk_hw*[]) {
2816 &gcc_qupv3_wrap2_s7_clk_src.clkr.hw,
2819 .flags = CLK_SET_RATE_PARENT,
2820 .ops = &clk_branch2_ops,
2825 static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {
2826 .halt_reg = 0x233f4,
2827 .halt_check = BRANCH_HALT_VOTED,
2829 .enable_reg = 0x52018,
2830 .enable_mask = BIT(1),
2831 .hw.init = &(const struct clk_init_data) {
2832 .name = "gcc_qupv3_wrap3_core_2x_clk",
2833 .ops = &clk_branch2_ops,
2838 static struct clk_branch gcc_qupv3_wrap3_core_clk = {
2839 .halt_reg = 0x233e4,
2840 .halt_check = BRANCH_HALT_VOTED,
2842 .enable_reg = 0x52018,
2843 .enable_mask = BIT(0),
2844 .hw.init = &(const struct clk_init_data) {
2845 .name = "gcc_qupv3_wrap3_core_clk",
2846 .ops = &clk_branch2_ops,
2851 static struct clk_branch gcc_qupv3_wrap3_qspi_ref_clk = {
2852 .halt_reg = 0x19014,
2853 .halt_check = BRANCH_HALT_VOTED,
2855 .enable_reg = 0x52018,
2856 .enable_mask = BIT(3),
2857 .hw.init = &(const struct clk_init_data) {
2858 .name = "gcc_qupv3_wrap3_qspi_ref_clk",
2859 .parent_hws = (const struct clk_hw*[]) {
2860 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
2863 .flags = CLK_SET_RATE_PARENT,
2864 .ops = &clk_branch2_ops,
2869 static struct clk_branch gcc_qupv3_wrap3_s0_clk = {
2870 .halt_reg = 0x19004,
2871 .halt_check = BRANCH_HALT_VOTED,
2873 .enable_reg = 0x52018,
2874 .enable_mask = BIT(2),
2875 .hw.init = &(const struct clk_init_data) {
2876 .name = "gcc_qupv3_wrap3_s0_clk",
2877 .parent_hws = (const struct clk_hw*[]) {
2878 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
2881 .flags = CLK_SET_RATE_PARENT,
2882 .ops = &clk_branch2_ops,
2887 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2888 .halt_reg = 0x2313c,
2889 .halt_check = BRANCH_HALT_VOTED,
2890 .hwcg_reg = 0x2313c,
2893 .enable_reg = 0x52008,
2894 .enable_mask = BIT(20),
2895 .hw.init = &(const struct clk_init_data) {
2896 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2897 .ops = &clk_branch2_ops,
2902 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2903 .halt_reg = 0x23140,
2904 .halt_check = BRANCH_HALT_VOTED,
2905 .hwcg_reg = 0x23140,
2908 .enable_reg = 0x52008,
2909 .enable_mask = BIT(21),
2910 .hw.init = &(const struct clk_init_data) {
2911 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2912 .ops = &clk_branch2_ops,
2917 static struct clk_branch gcc_qupv3_wrap_2_ibi_2_ahb_clk = {
2918 .halt_reg = 0x1e9c4,
2919 .halt_check = BRANCH_HALT_VOTED,
2920 .hwcg_reg = 0x1e9c4,
2923 .enable_reg = 0x52010,
2924 .enable_mask = BIT(25),
2925 .hw.init = &(const struct clk_init_data) {
2926 .name = "gcc_qupv3_wrap_2_ibi_2_ahb_clk",
2927 .ops = &clk_branch2_ops,
2932 static struct clk_branch gcc_qupv3_wrap_2_ibi_3_ahb_clk = {
2933 .halt_reg = 0x1e9c8,
2934 .halt_check = BRANCH_HALT_VOTED,
2935 .hwcg_reg = 0x1e9c8,
2938 .enable_reg = 0x52010,
2939 .enable_mask = BIT(26),
2940 .hw.init = &(const struct clk_init_data) {
2941 .name = "gcc_qupv3_wrap_2_ibi_3_ahb_clk",
2942 .ops = &clk_branch2_ops,
2947 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2948 .halt_reg = 0x2328c,
2949 .halt_check = BRANCH_HALT_VOTED,
2950 .hwcg_reg = 0x2328c,
2953 .enable_reg = 0x52010,
2954 .enable_mask = BIT(2),
2955 .hw.init = &(const struct clk_init_data) {
2956 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2957 .ops = &clk_branch2_ops,
2962 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2963 .halt_reg = 0x23290,
2964 .halt_check = BRANCH_HALT_VOTED,
2965 .hwcg_reg = 0x23290,
2968 .enable_reg = 0x52010,
2969 .enable_mask = BIT(1),
2970 .hw.init = &(const struct clk_init_data) {
2971 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2972 .ops = &clk_branch2_ops,
2977 static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {
2978 .halt_reg = 0x233dc,
2979 .halt_check = BRANCH_HALT_VOTED,
2980 .hwcg_reg = 0x233dc,
2983 .enable_reg = 0x52010,
2984 .enable_mask = BIT(30),
2985 .hw.init = &(const struct clk_init_data) {
2986 .name = "gcc_qupv3_wrap_3_m_ahb_clk",
2987 .ops = &clk_branch2_ops,
2992 static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {
2993 .halt_reg = 0x233e0,
2994 .halt_check = BRANCH_HALT_VOTED,
2995 .hwcg_reg = 0x233e0,
2998 .enable_reg = 0x52010,
2999 .enable_mask = BIT(31),
3000 .hw.init = &(const struct clk_init_data) {
3001 .name = "gcc_qupv3_wrap_3_s_ahb_clk",
3002 .ops = &clk_branch2_ops,
3007 static struct clk_branch gcc_sdcc2_ahb_clk = {
3008 .halt_reg = 0x14010,
3009 .halt_check = BRANCH_HALT,
3011 .enable_reg = 0x14010,
3012 .enable_mask = BIT(0),
3013 .hw.init = &(const struct clk_init_data) {
3014 .name = "gcc_sdcc2_ahb_clk",
3015 .ops = &clk_branch2_ops,
3020 static struct clk_branch gcc_sdcc2_apps_clk = {
3021 .halt_reg = 0x14004,
3022 .halt_check = BRANCH_HALT,
3024 .enable_reg = 0x14004,
3025 .enable_mask = BIT(0),
3026 .hw.init = &(const struct clk_init_data) {
3027 .name = "gcc_sdcc2_apps_clk",
3028 .parent_hws = (const struct clk_hw*[]) {
3029 &gcc_sdcc2_apps_clk_src.clkr.hw,
3032 .flags = CLK_SET_RATE_PARENT,
3033 .ops = &clk_branch2_ops,
3038 static struct clk_branch gcc_sdcc4_ahb_clk = {
3039 .halt_reg = 0x16010,
3040 .halt_check = BRANCH_HALT,
3042 .enable_reg = 0x16010,
3043 .enable_mask = BIT(0),
3044 .hw.init = &(const struct clk_init_data) {
3045 .name = "gcc_sdcc4_ahb_clk",
3046 .ops = &clk_branch2_ops,
3051 static struct clk_branch gcc_sdcc4_apps_clk = {
3052 .halt_reg = 0x16004,
3053 .halt_check = BRANCH_HALT,
3055 .enable_reg = 0x16004,
3056 .enable_mask = BIT(0),
3057 .hw.init = &(const struct clk_init_data) {
3058 .name = "gcc_sdcc4_apps_clk",
3059 .parent_hws = (const struct clk_hw*[]) {
3060 &gcc_sdcc4_apps_clk_src.clkr.hw,
3063 .flags = CLK_SET_RATE_PARENT,
3064 .ops = &clk_branch2_ops,
3069 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3070 .halt_reg = 0x77024,
3071 .halt_check = BRANCH_HALT_VOTED,
3072 .hwcg_reg = 0x77024,
3075 .enable_reg = 0x77024,
3076 .enable_mask = BIT(0),
3077 .hw.init = &(const struct clk_init_data) {
3078 .name = "gcc_ufs_phy_ahb_clk",
3079 .ops = &clk_branch2_ops,
3084 static struct clk_branch gcc_ufs_phy_axi_clk = {
3085 .halt_reg = 0x77018,
3086 .halt_check = BRANCH_HALT_VOTED,
3087 .hwcg_reg = 0x77018,
3090 .enable_reg = 0x77018,
3091 .enable_mask = BIT(0),
3092 .hw.init = &(const struct clk_init_data) {
3093 .name = "gcc_ufs_phy_axi_clk",
3094 .parent_hws = (const struct clk_hw*[]) {
3095 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3098 .flags = CLK_SET_RATE_PARENT,
3099 .ops = &clk_branch2_ops,
3104 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
3105 .halt_reg = 0x77018,
3106 .halt_check = BRANCH_HALT_VOTED,
3107 .hwcg_reg = 0x77018,
3110 .enable_reg = 0x77018,
3111 .enable_mask = BIT(1),
3112 .hw.init = &(const struct clk_init_data) {
3113 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
3114 .parent_hws = (const struct clk_hw*[]) {
3115 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3118 .flags = CLK_SET_RATE_PARENT,
3119 .ops = &clk_branch2_ops,
3124 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3125 .halt_reg = 0x77074,
3126 .halt_check = BRANCH_HALT_VOTED,
3127 .hwcg_reg = 0x77074,
3130 .enable_reg = 0x77074,
3131 .enable_mask = BIT(0),
3132 .hw.init = &(const struct clk_init_data) {
3133 .name = "gcc_ufs_phy_ice_core_clk",
3134 .parent_hws = (const struct clk_hw*[]) {
3135 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3138 .flags = CLK_SET_RATE_PARENT,
3139 .ops = &clk_branch2_ops,
3144 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3145 .halt_reg = 0x77074,
3146 .halt_check = BRANCH_HALT_VOTED,
3147 .hwcg_reg = 0x77074,
3150 .enable_reg = 0x77074,
3151 .enable_mask = BIT(1),
3152 .hw.init = &(const struct clk_init_data) {
3153 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3154 .parent_hws = (const struct clk_hw*[]) {
3155 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3158 .flags = CLK_SET_RATE_PARENT,
3159 .ops = &clk_branch2_ops,
3164 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3165 .halt_reg = 0x770b0,
3166 .halt_check = BRANCH_HALT_VOTED,
3167 .hwcg_reg = 0x770b0,
3170 .enable_reg = 0x770b0,
3171 .enable_mask = BIT(0),
3172 .hw.init = &(const struct clk_init_data) {
3173 .name = "gcc_ufs_phy_phy_aux_clk",
3174 .parent_hws = (const struct clk_hw*[]) {
3175 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3178 .flags = CLK_SET_RATE_PARENT,
3179 .ops = &clk_branch2_ops,
3184 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3185 .halt_reg = 0x770b0,
3186 .halt_check = BRANCH_HALT_VOTED,
3187 .hwcg_reg = 0x770b0,
3190 .enable_reg = 0x770b0,
3191 .enable_mask = BIT(1),
3192 .hw.init = &(const struct clk_init_data) {
3193 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3194 .parent_hws = (const struct clk_hw*[]) {
3195 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3198 .flags = CLK_SET_RATE_PARENT,
3199 .ops = &clk_branch2_ops,
3204 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3205 .halt_reg = 0x7702c,
3206 .halt_check = BRANCH_HALT_DELAY,
3208 .enable_reg = 0x7702c,
3209 .enable_mask = BIT(0),
3210 .hw.init = &(const struct clk_init_data) {
3211 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3212 .parent_hws = (const struct clk_hw*[]) {
3213 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
3216 .flags = CLK_SET_RATE_PARENT,
3217 .ops = &clk_branch2_ops,
3222 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3223 .halt_reg = 0x770cc,
3224 .halt_check = BRANCH_HALT_DELAY,
3226 .enable_reg = 0x770cc,
3227 .enable_mask = BIT(0),
3228 .hw.init = &(const struct clk_init_data) {
3229 .name = "gcc_ufs_phy_rx_symbol_1_clk",
3230 .parent_hws = (const struct clk_hw*[]) {
3231 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
3234 .flags = CLK_SET_RATE_PARENT,
3235 .ops = &clk_branch2_ops,
3240 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3241 .halt_reg = 0x77028,
3242 .halt_check = BRANCH_HALT_DELAY,
3244 .enable_reg = 0x77028,
3245 .enable_mask = BIT(0),
3246 .hw.init = &(const struct clk_init_data) {
3247 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3248 .parent_hws = (const struct clk_hw*[]) {
3249 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
3252 .flags = CLK_SET_RATE_PARENT,
3253 .ops = &clk_branch2_ops,
3258 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3259 .halt_reg = 0x77068,
3260 .halt_check = BRANCH_HALT_VOTED,
3261 .hwcg_reg = 0x77068,
3264 .enable_reg = 0x77068,
3265 .enable_mask = BIT(0),
3266 .hw.init = &(const struct clk_init_data) {
3267 .name = "gcc_ufs_phy_unipro_core_clk",
3268 .parent_hws = (const struct clk_hw*[]) {
3269 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3272 .flags = CLK_SET_RATE_PARENT,
3273 .ops = &clk_branch2_ops,
3278 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3279 .halt_reg = 0x77068,
3280 .halt_check = BRANCH_HALT_VOTED,
3281 .hwcg_reg = 0x77068,
3284 .enable_reg = 0x77068,
3285 .enable_mask = BIT(1),
3286 .hw.init = &(const struct clk_init_data) {
3287 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3288 .parent_hws = (const struct clk_hw*[]) {
3289 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3292 .flags = CLK_SET_RATE_PARENT,
3293 .ops = &clk_branch2_ops,
3298 static struct clk_branch gcc_usb30_prim_master_clk = {
3299 .halt_reg = 0x39018,
3300 .halt_check = BRANCH_HALT,
3302 .enable_reg = 0x39018,
3303 .enable_mask = BIT(0),
3304 .hw.init = &(const struct clk_init_data) {
3305 .name = "gcc_usb30_prim_master_clk",
3306 .parent_hws = (const struct clk_hw*[]) {
3307 &gcc_usb30_prim_master_clk_src.clkr.hw,
3310 .flags = CLK_SET_RATE_PARENT,
3311 .ops = &clk_branch2_ops,
3316 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3317 .halt_reg = 0x39028,
3318 .halt_check = BRANCH_HALT,
3320 .enable_reg = 0x39028,
3321 .enable_mask = BIT(0),
3322 .hw.init = &(const struct clk_init_data) {
3323 .name = "gcc_usb30_prim_mock_utmi_clk",
3324 .parent_hws = (const struct clk_hw*[]) {
3325 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3328 .flags = CLK_SET_RATE_PARENT,
3329 .ops = &clk_branch2_ops,
3334 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3335 .halt_reg = 0x39024,
3336 .halt_check = BRANCH_HALT,
3338 .enable_reg = 0x39024,
3339 .enable_mask = BIT(0),
3340 .hw.init = &(const struct clk_init_data) {
3341 .name = "gcc_usb30_prim_sleep_clk",
3342 .ops = &clk_branch2_ops,
3347 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3348 .halt_reg = 0x39060,
3349 .halt_check = BRANCH_HALT,
3351 .enable_reg = 0x39060,
3352 .enable_mask = BIT(0),
3353 .hw.init = &(const struct clk_init_data) {
3354 .name = "gcc_usb3_prim_phy_aux_clk",
3355 .parent_hws = (const struct clk_hw*[]) {
3356 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3359 .flags = CLK_SET_RATE_PARENT,
3360 .ops = &clk_branch2_ops,
3365 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3366 .halt_reg = 0x39064,
3367 .halt_check = BRANCH_HALT,
3369 .enable_reg = 0x39064,
3370 .enable_mask = BIT(0),
3371 .hw.init = &(const struct clk_init_data) {
3372 .name = "gcc_usb3_prim_phy_com_aux_clk",
3373 .parent_hws = (const struct clk_hw*[]) {
3374 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3377 .flags = CLK_SET_RATE_PARENT,
3378 .ops = &clk_branch2_ops,
3383 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3384 .halt_reg = 0x39068,
3385 .halt_check = BRANCH_HALT_DELAY,
3386 .hwcg_reg = 0x39068,
3389 .enable_reg = 0x39068,
3390 .enable_mask = BIT(0),
3391 .hw.init = &(const struct clk_init_data) {
3392 .name = "gcc_usb3_prim_phy_pipe_clk",
3393 .parent_hws = (const struct clk_hw*[]) {
3394 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3397 .flags = CLK_SET_RATE_PARENT,
3398 .ops = &clk_branch2_ops,
3403 static struct clk_branch gcc_video_axi0_clk = {
3404 .halt_reg = 0x32018,
3405 .halt_check = BRANCH_HALT_SKIP,
3406 .hwcg_reg = 0x32018,
3409 .enable_reg = 0x32018,
3410 .enable_mask = BIT(0),
3411 .hw.init = &(const struct clk_init_data) {
3412 .name = "gcc_video_axi0_clk",
3413 .ops = &clk_branch2_ops,
3418 static struct clk_branch gcc_video_axi1_clk = {
3419 .halt_reg = 0x32024,
3420 .halt_check = BRANCH_HALT_SKIP,
3421 .hwcg_reg = 0x32024,
3424 .enable_reg = 0x32024,
3425 .enable_mask = BIT(0),
3426 .hw.init = &(const struct clk_init_data) {
3427 .name = "gcc_video_axi1_clk",
3428 .ops = &clk_branch2_ops,
3433 static struct gdsc pcie_0_gdsc = {
3435 .collapse_ctrl = 0x5214c,
3436 .collapse_mask = BIT(0),
3438 .name = "pcie_0_gdsc",
3440 .pwrsts = PWRSTS_OFF_ON,
3441 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3444 static struct gdsc pcie_0_phy_gdsc = {
3446 .collapse_ctrl = 0x5214c,
3447 .collapse_mask = BIT(3),
3449 .name = "pcie_0_phy_gdsc",
3451 .pwrsts = PWRSTS_OFF_ON,
3452 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3455 static struct gdsc pcie_1_gdsc = {
3457 .collapse_ctrl = 0x5214c,
3458 .collapse_mask = BIT(1),
3460 .name = "pcie_1_gdsc",
3462 .pwrsts = PWRSTS_OFF_ON,
3463 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3466 static struct gdsc pcie_1_phy_gdsc = {
3468 .collapse_ctrl = 0x5214c,
3469 .collapse_mask = BIT(4),
3471 .name = "pcie_1_phy_gdsc",
3473 .pwrsts = PWRSTS_OFF_ON,
3474 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3477 static struct gdsc ufs_phy_gdsc = {
3480 .name = "ufs_phy_gdsc",
3482 .pwrsts = PWRSTS_OFF_ON,
3483 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3486 static struct gdsc ufs_mem_phy_gdsc = {
3489 .name = "ufs_mem_phy_gdsc",
3491 .pwrsts = PWRSTS_OFF_ON,
3492 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3495 static struct gdsc usb30_prim_gdsc = {
3498 .name = "usb30_prim_gdsc",
3500 .pwrsts = PWRSTS_OFF_ON,
3501 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3504 static struct gdsc usb3_phy_gdsc = {
3507 .name = "usb3_phy_gdsc",
3509 .pwrsts = PWRSTS_OFF_ON,
3510 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3513 static struct clk_regmap *gcc_sm8650_clocks[] = {
3514 [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,
3515 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3516 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3517 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3518 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3519 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3520 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3521 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3522 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3523 [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,
3524 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3525 [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr,
3526 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3527 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3528 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3529 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3530 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3531 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3532 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3533 [GCC_GPLL0] = &gcc_gpll0.clkr,
3534 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3535 [GCC_GPLL1] = &gcc_gpll1.clkr,
3536 [GCC_GPLL3] = &gcc_gpll3.clkr,
3537 [GCC_GPLL4] = &gcc_gpll4.clkr,
3538 [GCC_GPLL6] = &gcc_gpll6.clkr,
3539 [GCC_GPLL7] = &gcc_gpll7.clkr,
3540 [GCC_GPLL9] = &gcc_gpll9.clkr,
3541 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3542 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3543 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3544 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3545 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3546 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3547 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3548 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3549 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3550 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3551 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3552 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3553 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3554 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3555 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3556 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3557 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3558 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3559 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3560 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3561 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3562 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3563 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3564 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3565 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3566 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3567 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3568 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3569 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3570 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3571 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3572 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3573 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3574 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3575 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3576 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3577 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3578 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3579 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3580 [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,
3581 [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,
3582 [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,
3583 [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,
3584 [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,
3585 [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,
3586 [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,
3587 [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,
3588 [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,
3589 [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,
3590 [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,
3591 [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr,
3592 [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr,
3593 [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr,
3594 [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr,
3595 [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr,
3596 [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr,
3597 [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr,
3598 [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr,
3599 [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr,
3600 [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr,
3601 [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,
3602 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3603 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3604 [GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr,
3605 [GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr,
3606 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3607 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3608 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3609 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3610 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3611 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3612 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3613 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3614 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3615 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3616 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3617 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3618 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3619 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3620 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3621 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3622 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3623 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3624 [GCC_QUPV3_WRAP2_IBI_CTRL_0_CLK_SRC] = &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr,
3625 [GCC_QUPV3_WRAP2_IBI_CTRL_2_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_2_clk.clkr,
3626 [GCC_QUPV3_WRAP2_IBI_CTRL_3_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_3_clk.clkr,
3627 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3628 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3629 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3630 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3631 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3632 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3633 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3634 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3635 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3636 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3637 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3638 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3639 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3640 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3641 [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr,
3642 [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr,
3643 [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,
3644 [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,
3645 [GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr,
3646 [GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr,
3647 [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,
3648 [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,
3649 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3650 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3651 [GCC_QUPV3_WRAP_2_IBI_2_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_2_ahb_clk.clkr,
3652 [GCC_QUPV3_WRAP_2_IBI_3_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_3_ahb_clk.clkr,
3653 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3654 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3655 [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,
3656 [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,
3657 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3658 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3659 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3660 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3661 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3662 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3663 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3664 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3665 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3666 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3667 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3668 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3669 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3670 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3671 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3672 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3673 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3674 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3675 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3676 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3677 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3678 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3679 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3680 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3681 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3682 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3683 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3684 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3685 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3686 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3687 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3688 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3689 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3690 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3691 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3692 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3693 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3694 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3695 [GCC_GPLL0_AO] = &gcc_gpll0_ao.clkr,
3696 [GCC_GPLL0_OUT_EVEN_AO] = &gcc_gpll0_out_even_ao.clkr,
3697 [GCC_GPLL1_AO] = &gcc_gpll1_ao.clkr,
3698 [GCC_GPLL3_AO] = &gcc_gpll3_ao.clkr,
3699 [GCC_GPLL4_AO] = &gcc_gpll4_ao.clkr,
3700 [GCC_GPLL6_AO] = &gcc_gpll6_ao.clkr,
3703 static const struct qcom_reset_map gcc_sm8650_resets[] = {
3704 [GCC_CAMERA_BCR] = { 0x26000 },
3705 [GCC_DISPLAY_BCR] = { 0x27000 },
3706 [GCC_GPU_BCR] = { 0x71000 },
3707 [GCC_PCIE_0_BCR] = { 0x6b000 },
3708 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
3709 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
3710 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3711 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
3712 [GCC_PCIE_1_BCR] = { 0x8d000 },
3713 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
3714 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
3715 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3716 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },
3717 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3718 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
3719 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
3720 [GCC_PDM_BCR] = { 0x33000 },
3721 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3722 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3723 [GCC_QUPV3_WRAPPER_3_BCR] = { 0x19000 },
3724 [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },
3725 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3726 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3727 [GCC_SDCC2_BCR] = { 0x14000 },
3728 [GCC_SDCC4_BCR] = { 0x16000 },
3729 [GCC_UFS_PHY_BCR] = { 0x77000 },
3730 [GCC_USB30_PRIM_BCR] = { 0x39000 },
3731 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3732 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3733 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3734 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3735 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3736 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3737 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x32018, .bit = 2, .udelay = 1000 },
3738 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x32024, .bit = 2, .udelay = 1000 },
3739 [GCC_VIDEO_BCR] = { 0x32000 },
3742 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3743 DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),
3744 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3745 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3746 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3747 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3748 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3749 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3750 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3751 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3752 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3753 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3754 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3755 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3756 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3757 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3758 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src),
3759 DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),
3762 static struct gdsc *gcc_sm8650_gdscs[] = {
3763 [PCIE_0_GDSC] = &pcie_0_gdsc,
3764 [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,
3765 [PCIE_1_GDSC] = &pcie_1_gdsc,
3766 [PCIE_1_PHY_GDSC] = &pcie_1_phy_gdsc,
3767 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3768 [UFS_MEM_PHY_GDSC] = &ufs_mem_phy_gdsc,
3769 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3770 [USB3_PHY_GDSC] = &usb3_phy_gdsc,
3773 static const struct regmap_config gcc_sm8650_regmap_config = {
3777 .max_register = 0x1f41f0,
3781 static const struct qcom_cc_desc gcc_sm8650_desc = {
3782 .config = &gcc_sm8650_regmap_config,
3783 .clks = gcc_sm8650_clocks,
3784 .num_clks = ARRAY_SIZE(gcc_sm8650_clocks),
3785 .resets = gcc_sm8650_resets,
3786 .num_resets = ARRAY_SIZE(gcc_sm8650_resets),
3787 .gdscs = gcc_sm8650_gdscs,
3788 .num_gdscs = ARRAY_SIZE(gcc_sm8650_gdscs),
3791 static const struct of_device_id gcc_sm8650_match_table[] = {
3792 { .compatible = "qcom,sm8650-gcc" },
3795 MODULE_DEVICE_TABLE(of, gcc_sm8650_match_table);
3797 static int gcc_sm8650_probe(struct platform_device *pdev)
3799 struct regmap *regmap;
3802 regmap = qcom_cc_map(pdev, &gcc_sm8650_desc);
3804 return PTR_ERR(regmap);
3806 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3807 ARRAY_SIZE(gcc_dfs_clocks));
3811 /* Keep some clocks always-on */
3812 qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */
3813 qcom_branch_set_clk_en(regmap, 0x26028); /* GCC_CAMERA_XO_CLK */
3814 qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */
3815 qcom_branch_set_clk_en(regmap, 0x27018); /* GCC_DISP_XO_CLK */
3816 qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
3817 qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_VIDEO_AHB_CLK */
3818 qcom_branch_set_clk_en(regmap, 0x32030); /* GCC_VIDEO_XO_CLK */
3820 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
3822 /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
3823 regmap_write(regmap, 0x52150, 0x0);
3825 return qcom_cc_really_probe(&pdev->dev, &gcc_sm8650_desc, regmap);
3828 static struct platform_driver gcc_sm8650_driver = {
3829 .probe = gcc_sm8650_probe,
3831 .name = "gcc-sm8650",
3832 .of_match_table = gcc_sm8650_match_table,
3836 static int __init gcc_sm8650_init(void)
3838 return platform_driver_register(&gcc_sm8650_driver);
3840 subsys_initcall(gcc_sm8650_init);
3842 static void __exit gcc_sm8650_exit(void)
3844 platform_driver_unregister(&gcc_sm8650_driver);
3846 module_exit(gcc_sm8650_exit);
3848 MODULE_DESCRIPTION("QTI GCC SM8650 Driver");
3849 MODULE_LICENSE("GPL");