1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2021-2022, 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4 * Copyright (c) 2023, Linaro Limited
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/mod_devicetable.h>
11 #include <linux/platform_device.h>
12 #include <linux/regmap.h>
14 #include <dt-bindings/clock/qcom,sa8775p-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"
27 /* Need to match the order of clocks in DT binding */
31 DT_UFS_PHY_RX_SYMBOL_0_CLK,
32 DT_UFS_PHY_RX_SYMBOL_1_CLK,
33 DT_UFS_PHY_TX_SYMBOL_0_CLK,
34 DT_UFS_CARD_RX_SYMBOL_0_CLK,
35 DT_UFS_CARD_RX_SYMBOL_1_CLK,
36 DT_UFS_CARD_TX_SYMBOL_0_CLK,
37 DT_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK,
38 DT_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK,
61 P_UFS_CARD_RX_SYMBOL_0_CLK,
62 P_UFS_CARD_RX_SYMBOL_1_CLK,
63 P_UFS_CARD_TX_SYMBOL_0_CLK,
64 P_UFS_PHY_RX_SYMBOL_0_CLK,
65 P_UFS_PHY_RX_SYMBOL_1_CLK,
66 P_UFS_PHY_TX_SYMBOL_0_CLK,
67 P_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK,
68 P_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK,
71 static const struct clk_parent_data gcc_parent_data_tcxo = { .index = DT_BI_TCXO };
73 static struct clk_alpha_pll gcc_gpll0 = {
75 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
77 .enable_reg = 0x4b028,
78 .enable_mask = BIT(0),
79 .hw.init = &(const struct clk_init_data){
81 .parent_data = &gcc_parent_data_tcxo,
83 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
88 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
93 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
96 .post_div_table = post_div_table_gcc_gpll0_out_even,
97 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
99 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
100 .clkr.hw.init = &(const struct clk_init_data){
101 .name = "gcc_gpll0_out_even",
102 .parent_hws = (const struct clk_hw*[]){
106 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
110 static struct clk_alpha_pll gcc_gpll1 = {
112 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
114 .enable_reg = 0x4b028,
115 .enable_mask = BIT(1),
116 .hw.init = &(const struct clk_init_data){
118 .parent_data = &gcc_parent_data_tcxo,
120 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
125 static struct clk_alpha_pll gcc_gpll4 = {
127 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
129 .enable_reg = 0x4b028,
130 .enable_mask = BIT(4),
131 .hw.init = &(const struct clk_init_data){
133 .parent_data = &gcc_parent_data_tcxo,
135 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
140 static struct clk_alpha_pll gcc_gpll5 = {
142 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
144 .enable_reg = 0x4b028,
145 .enable_mask = BIT(5),
146 .hw.init = &(const struct clk_init_data){
148 .parent_data = &gcc_parent_data_tcxo,
150 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
155 static struct clk_alpha_pll gcc_gpll7 = {
157 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
159 .enable_reg = 0x4b028,
160 .enable_mask = BIT(7),
161 .hw.init = &(const struct clk_init_data){
163 .parent_data = &gcc_parent_data_tcxo,
165 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
170 static struct clk_alpha_pll gcc_gpll9 = {
172 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
174 .enable_reg = 0x4b028,
175 .enable_mask = BIT(9),
176 .hw.init = &(const struct clk_init_data){
178 .parent_data = &gcc_parent_data_tcxo,
180 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
185 static const struct parent_map gcc_parent_map_0[] = {
187 { P_GCC_GPLL0_OUT_MAIN, 1 },
188 { P_GCC_GPLL0_OUT_EVEN, 6 },
191 static const struct clk_parent_data gcc_parent_data_0[] = {
192 { .index = DT_BI_TCXO },
193 { .hw = &gcc_gpll0.clkr.hw },
194 { .hw = &gcc_gpll0_out_even.clkr.hw },
197 static const struct parent_map gcc_parent_map_1[] = {
199 { P_GCC_GPLL0_OUT_MAIN, 1 },
200 { P_GCC_GPLL4_OUT_MAIN, 5 },
201 { P_GCC_GPLL0_OUT_EVEN, 6 },
204 static const struct clk_parent_data gcc_parent_data_1[] = {
205 { .index = DT_BI_TCXO },
206 { .hw = &gcc_gpll0.clkr.hw },
207 { .hw = &gcc_gpll4.clkr.hw },
208 { .hw = &gcc_gpll0_out_even.clkr.hw },
211 static const struct parent_map gcc_parent_map_2[] = {
213 { P_GCC_GPLL0_OUT_MAIN, 1 },
215 { P_GCC_GPLL0_OUT_EVEN, 6 },
218 static const struct clk_parent_data gcc_parent_data_2[] = {
219 { .index = DT_BI_TCXO },
220 { .hw = &gcc_gpll0.clkr.hw },
221 { .index = DT_SLEEP_CLK },
222 { .hw = &gcc_gpll0_out_even.clkr.hw },
225 static const struct parent_map gcc_parent_map_3[] = {
230 static const struct clk_parent_data gcc_parent_data_3[] = {
231 { .index = DT_BI_TCXO },
232 { .index = DT_SLEEP_CLK },
235 static const struct parent_map gcc_parent_map_4[] = {
237 { P_GCC_GPLL0_OUT_MAIN, 1 },
238 { P_GCC_GPLL1_OUT_MAIN, 4 },
239 { P_GCC_GPLL4_OUT_MAIN, 5 },
240 { P_GCC_GPLL0_OUT_EVEN, 6 },
243 static const struct clk_parent_data gcc_parent_data_4[] = {
244 { .index = DT_BI_TCXO },
245 { .hw = &gcc_gpll0.clkr.hw },
246 { .hw = &gcc_gpll1.clkr.hw },
247 { .hw = &gcc_gpll4.clkr.hw },
248 { .hw = &gcc_gpll0_out_even.clkr.hw },
251 static const struct parent_map gcc_parent_map_5[] = {
255 static const struct clk_parent_data gcc_parent_data_5[] = {
256 { .index = DT_BI_TCXO },
259 static const struct parent_map gcc_parent_map_6[] = {
261 { P_GCC_GPLL7_OUT_MAIN, 2 },
262 { P_GCC_GPLL4_OUT_MAIN, 5 },
263 { P_GCC_GPLL0_OUT_EVEN, 6 },
266 static const struct clk_parent_data gcc_parent_data_6[] = {
267 { .index = DT_BI_TCXO },
268 { .hw = &gcc_gpll7.clkr.hw },
269 { .hw = &gcc_gpll4.clkr.hw },
270 { .hw = &gcc_gpll0_out_even.clkr.hw },
273 static const struct parent_map gcc_parent_map_7[] = {
275 { P_GCC_GPLL7_OUT_MAIN, 2 },
276 { P_RXC0_REF_CLK, 3 },
277 { P_GCC_GPLL0_OUT_EVEN, 6 },
280 static const struct clk_parent_data gcc_parent_data_7[] = {
281 { .index = DT_BI_TCXO },
282 { .hw = &gcc_gpll7.clkr.hw },
283 { .index = DT_RXC0_REF_CLK },
284 { .hw = &gcc_gpll0_out_even.clkr.hw },
287 static const struct parent_map gcc_parent_map_8[] = {
289 { P_GCC_GPLL7_OUT_MAIN, 2 },
290 { P_RXC1_REF_CLK, 3 },
291 { P_GCC_GPLL0_OUT_EVEN, 6 },
294 static const struct clk_parent_data gcc_parent_data_8[] = {
295 { .index = DT_BI_TCXO },
296 { .hw = &gcc_gpll7.clkr.hw },
297 { .index = DT_RXC1_REF_CLK },
298 { .hw = &gcc_gpll0_out_even.clkr.hw },
301 static const struct parent_map gcc_parent_map_9[] = {
302 { P_PCIE_PHY_AUX_CLK, 1 },
306 static const struct clk_parent_data gcc_parent_data_9[] = {
307 { .index = DT_PCIE_PHY_AUX_CLK },
308 { .index = DT_BI_TCXO },
311 static const struct parent_map gcc_parent_map_11[] = {
312 { P_PCIE_PHY_AUX_CLK, 1 },
316 static const struct clk_parent_data gcc_parent_data_11[] = {
317 { .index = DT_PCIE_PHY_AUX_CLK },
318 { .index = DT_BI_TCXO },
321 static const struct parent_map gcc_parent_map_13[] = {
323 { P_GCC_GPLL0_OUT_MAIN, 1 },
324 { P_GCC_GPLL9_OUT_MAIN, 2 },
325 { P_GCC_GPLL4_OUT_MAIN, 5 },
326 { P_GCC_GPLL0_OUT_EVEN, 6 },
329 static const struct clk_parent_data gcc_parent_data_13[] = {
330 { .index = DT_BI_TCXO },
331 { .hw = &gcc_gpll0.clkr.hw },
332 { .hw = &gcc_gpll9.clkr.hw },
333 { .hw = &gcc_gpll4.clkr.hw },
334 { .hw = &gcc_gpll0_out_even.clkr.hw },
337 static const struct parent_map gcc_parent_map_14[] = {
339 { P_GCC_GPLL0_OUT_MAIN, 1 },
342 static const struct clk_parent_data gcc_parent_data_14[] = {
343 { .index = DT_BI_TCXO },
344 { .hw = &gcc_gpll0.clkr.hw },
347 static const struct parent_map gcc_parent_map_15[] = {
349 { P_GCC_GPLL7_OUT_MAIN, 2 },
350 { P_GCC_GPLL5_OUT_MAIN, 3 },
351 { P_GCC_GPLL4_OUT_MAIN, 5 },
352 { P_GCC_GPLL0_OUT_EVEN, 6 },
355 static const struct clk_parent_data gcc_parent_data_15[] = {
356 { .index = DT_BI_TCXO },
357 { .hw = &gcc_gpll7.clkr.hw },
358 { .hw = &gcc_gpll5.clkr.hw },
359 { .hw = &gcc_gpll4.clkr.hw },
360 { .hw = &gcc_gpll0_out_even.clkr.hw },
363 static const struct parent_map gcc_parent_map_16[] = {
364 { P_UFS_CARD_RX_SYMBOL_0_CLK, 0 },
368 static const struct clk_parent_data gcc_parent_data_16[] = {
369 { .index = DT_UFS_CARD_RX_SYMBOL_0_CLK },
370 { .index = DT_BI_TCXO },
373 static const struct parent_map gcc_parent_map_17[] = {
374 { P_UFS_CARD_RX_SYMBOL_1_CLK, 0 },
378 static const struct clk_parent_data gcc_parent_data_17[] = {
379 { .index = DT_UFS_CARD_RX_SYMBOL_1_CLK },
380 { .index = DT_BI_TCXO },
383 static const struct parent_map gcc_parent_map_18[] = {
384 { P_UFS_CARD_TX_SYMBOL_0_CLK, 0 },
388 static const struct clk_parent_data gcc_parent_data_18[] = {
389 { .index = DT_UFS_CARD_TX_SYMBOL_0_CLK },
390 { .index = DT_BI_TCXO },
393 static const struct parent_map gcc_parent_map_19[] = {
394 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
398 static const struct clk_parent_data gcc_parent_data_19[] = {
399 { .index = DT_UFS_PHY_RX_SYMBOL_0_CLK },
400 { .index = DT_BI_TCXO },
403 static const struct parent_map gcc_parent_map_20[] = {
404 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
408 static const struct clk_parent_data gcc_parent_data_20[] = {
409 { .index = DT_UFS_PHY_RX_SYMBOL_1_CLK },
410 { .index = DT_BI_TCXO },
413 static const struct parent_map gcc_parent_map_21[] = {
414 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
418 static const struct clk_parent_data gcc_parent_data_21[] = {
419 { .index = DT_UFS_PHY_TX_SYMBOL_0_CLK },
420 { .index = DT_BI_TCXO },
423 static const struct parent_map gcc_parent_map_22[] = {
424 { P_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK, 0 },
428 static const struct clk_parent_data gcc_parent_data_22[] = {
429 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK },
430 { .index = DT_BI_TCXO },
433 static const struct parent_map gcc_parent_map_23[] = {
434 { P_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK, 0 },
438 static const struct clk_parent_data gcc_parent_data_23[] = {
439 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK },
440 { .index = DT_BI_TCXO },
443 static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = {
447 .parent_map = gcc_parent_map_9,
449 .hw.init = &(const struct clk_init_data){
450 .name = "gcc_pcie_0_phy_aux_clk_src",
451 .parent_data = gcc_parent_data_9,
452 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
453 .ops = &clk_regmap_mux_closest_ops,
458 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
461 .hw.init = &(const struct clk_init_data){
462 .name = "gcc_pcie_0_pipe_clk_src",
463 .parent_data = &(const struct clk_parent_data){
464 .index = DT_PCIE_0_PIPE_CLK,
467 .ops = &clk_regmap_phy_mux_ops,
472 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
476 .parent_map = gcc_parent_map_11,
478 .hw.init = &(const struct clk_init_data){
479 .name = "gcc_pcie_1_phy_aux_clk_src",
480 .parent_data = gcc_parent_data_11,
481 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
482 .ops = &clk_regmap_mux_closest_ops,
487 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
490 .hw.init = &(const struct clk_init_data){
491 .name = "gcc_pcie_1_pipe_clk_src",
492 .parent_data = &(const struct clk_parent_data) {
493 .index = DT_PCIE_1_PIPE_CLK,
496 .ops = &clk_regmap_phy_mux_ops,
501 static struct clk_regmap_mux gcc_ufs_card_rx_symbol_0_clk_src = {
505 .parent_map = gcc_parent_map_16,
507 .hw.init = &(const struct clk_init_data){
508 .name = "gcc_ufs_card_rx_symbol_0_clk_src",
509 .parent_data = gcc_parent_data_16,
510 .num_parents = ARRAY_SIZE(gcc_parent_data_16),
511 .ops = &clk_regmap_mux_closest_ops,
516 static struct clk_regmap_mux gcc_ufs_card_rx_symbol_1_clk_src = {
520 .parent_map = gcc_parent_map_17,
522 .hw.init = &(const struct clk_init_data){
523 .name = "gcc_ufs_card_rx_symbol_1_clk_src",
524 .parent_data = gcc_parent_data_17,
525 .num_parents = ARRAY_SIZE(gcc_parent_data_17),
526 .ops = &clk_regmap_mux_closest_ops,
531 static struct clk_regmap_mux gcc_ufs_card_tx_symbol_0_clk_src = {
535 .parent_map = gcc_parent_map_18,
537 .hw.init = &(const struct clk_init_data){
538 .name = "gcc_ufs_card_tx_symbol_0_clk_src",
539 .parent_data = gcc_parent_data_18,
540 .num_parents = ARRAY_SIZE(gcc_parent_data_18),
541 .ops = &clk_regmap_mux_closest_ops,
546 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
550 .parent_map = gcc_parent_map_19,
552 .hw.init = &(const struct clk_init_data){
553 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
554 .parent_data = gcc_parent_data_19,
555 .num_parents = ARRAY_SIZE(gcc_parent_data_19),
556 .ops = &clk_regmap_mux_closest_ops,
561 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
565 .parent_map = gcc_parent_map_20,
567 .hw.init = &(const struct clk_init_data){
568 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
569 .parent_data = gcc_parent_data_20,
570 .num_parents = ARRAY_SIZE(gcc_parent_data_20),
571 .ops = &clk_regmap_mux_closest_ops,
576 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
580 .parent_map = gcc_parent_map_21,
582 .hw.init = &(const struct clk_init_data){
583 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
584 .parent_data = gcc_parent_data_21,
585 .num_parents = ARRAY_SIZE(gcc_parent_data_21),
586 .ops = &clk_regmap_mux_closest_ops,
591 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
595 .parent_map = gcc_parent_map_22,
597 .hw.init = &(const struct clk_init_data){
598 .name = "gcc_usb3_prim_phy_pipe_clk_src",
599 .parent_data = gcc_parent_data_22,
600 .num_parents = ARRAY_SIZE(gcc_parent_data_22),
601 .ops = &clk_regmap_mux_closest_ops,
606 static struct clk_regmap_mux gcc_usb3_sec_phy_pipe_clk_src = {
610 .parent_map = gcc_parent_map_23,
612 .hw.init = &(const struct clk_init_data){
613 .name = "gcc_usb3_sec_phy_pipe_clk_src",
614 .parent_data = gcc_parent_data_23,
615 .num_parents = ARRAY_SIZE(gcc_parent_data_23),
616 .ops = &clk_regmap_mux_closest_ops,
621 static const struct freq_tbl ftbl_gcc_emac0_phy_aux_clk_src[] = {
622 F(19200000, P_BI_TCXO, 1, 0, 0),
626 static struct clk_rcg2 gcc_emac0_phy_aux_clk_src = {
630 .parent_map = gcc_parent_map_3,
631 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
632 .clkr.hw.init = &(const struct clk_init_data){
633 .name = "gcc_emac0_phy_aux_clk_src",
634 .parent_data = gcc_parent_data_3,
635 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
636 .ops = &clk_rcg2_shared_ops,
640 static const struct freq_tbl ftbl_gcc_emac0_ptp_clk_src[] = {
641 F(125000000, P_GCC_GPLL7_OUT_MAIN, 8, 0, 0),
642 F(230400000, P_GCC_GPLL4_OUT_MAIN, 3.5, 0, 0),
646 static struct clk_rcg2 gcc_emac0_ptp_clk_src = {
650 .parent_map = gcc_parent_map_6,
651 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
652 .clkr.hw.init = &(const struct clk_init_data){
653 .name = "gcc_emac0_ptp_clk_src",
654 .parent_data = gcc_parent_data_6,
655 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
656 .ops = &clk_rcg2_shared_ops,
660 static const struct freq_tbl ftbl_gcc_emac0_rgmii_clk_src[] = {
661 F(125000000, P_GCC_GPLL7_OUT_MAIN, 8, 0, 0),
662 F(250000000, P_GCC_GPLL7_OUT_MAIN, 4, 0, 0),
666 static struct clk_rcg2 gcc_emac0_rgmii_clk_src = {
670 .parent_map = gcc_parent_map_7,
671 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
672 .clkr.hw.init = &(const struct clk_init_data){
673 .name = "gcc_emac0_rgmii_clk_src",
674 .parent_data = gcc_parent_data_7,
675 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
676 .ops = &clk_rcg2_shared_ops,
680 static struct clk_rcg2 gcc_emac1_phy_aux_clk_src = {
684 .parent_map = gcc_parent_map_3,
685 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
686 .clkr.hw.init = &(const struct clk_init_data){
687 .name = "gcc_emac1_phy_aux_clk_src",
688 .parent_data = gcc_parent_data_3,
689 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
690 .ops = &clk_rcg2_shared_ops,
694 static struct clk_rcg2 gcc_emac1_ptp_clk_src = {
698 .parent_map = gcc_parent_map_6,
699 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
700 .clkr.hw.init = &(const struct clk_init_data){
701 .name = "gcc_emac1_ptp_clk_src",
702 .parent_data = gcc_parent_data_6,
703 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
704 .ops = &clk_rcg2_shared_ops,
708 static struct clk_rcg2 gcc_emac1_rgmii_clk_src = {
712 .parent_map = gcc_parent_map_8,
713 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
714 .clkr.hw.init = &(const struct clk_init_data){
715 .name = "gcc_emac1_rgmii_clk_src",
716 .parent_data = gcc_parent_data_8,
717 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
718 .ops = &clk_rcg2_shared_ops,
722 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
723 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
724 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
728 static struct clk_rcg2 gcc_gp1_clk_src = {
732 .parent_map = gcc_parent_map_2,
733 .freq_tbl = ftbl_gcc_gp1_clk_src,
734 .clkr.hw.init = &(const struct clk_init_data){
735 .name = "gcc_gp1_clk_src",
736 .parent_data = gcc_parent_data_2,
737 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
738 .ops = &clk_rcg2_shared_ops,
742 static struct clk_rcg2 gcc_gp2_clk_src = {
746 .parent_map = gcc_parent_map_2,
747 .freq_tbl = ftbl_gcc_gp1_clk_src,
748 .clkr.hw.init = &(const struct clk_init_data){
749 .name = "gcc_gp2_clk_src",
750 .parent_data = gcc_parent_data_2,
751 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
752 .ops = &clk_rcg2_shared_ops,
756 static struct clk_rcg2 gcc_gp3_clk_src = {
760 .parent_map = gcc_parent_map_2,
761 .freq_tbl = ftbl_gcc_gp1_clk_src,
762 .clkr.hw.init = &(const struct clk_init_data){
763 .name = "gcc_gp3_clk_src",
764 .parent_data = gcc_parent_data_2,
765 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
766 .ops = &clk_rcg2_shared_ops,
770 static struct clk_rcg2 gcc_gp4_clk_src = {
774 .parent_map = gcc_parent_map_2,
775 .freq_tbl = ftbl_gcc_gp1_clk_src,
776 .clkr.hw.init = &(const struct clk_init_data){
777 .name = "gcc_gp4_clk_src",
778 .parent_data = gcc_parent_data_2,
779 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
780 .ops = &clk_rcg2_shared_ops,
784 static struct clk_rcg2 gcc_gp5_clk_src = {
788 .parent_map = gcc_parent_map_2,
789 .freq_tbl = ftbl_gcc_gp1_clk_src,
790 .clkr.hw.init = &(const struct clk_init_data){
791 .name = "gcc_gp5_clk_src",
792 .parent_data = gcc_parent_data_2,
793 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
794 .ops = &clk_rcg2_shared_ops,
798 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
802 .parent_map = gcc_parent_map_3,
803 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
804 .clkr.hw.init = &(const struct clk_init_data){
805 .name = "gcc_pcie_0_aux_clk_src",
806 .parent_data = gcc_parent_data_3,
807 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
808 .ops = &clk_rcg2_shared_ops,
812 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
813 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
817 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
821 .parent_map = gcc_parent_map_0,
822 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
823 .clkr.hw.init = &(const struct clk_init_data){
824 .name = "gcc_pcie_0_phy_rchng_clk_src",
825 .parent_data = gcc_parent_data_0,
826 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
827 .ops = &clk_rcg2_shared_ops,
831 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
835 .parent_map = gcc_parent_map_3,
836 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
837 .clkr.hw.init = &(const struct clk_init_data){
838 .name = "gcc_pcie_1_aux_clk_src",
839 .parent_data = gcc_parent_data_3,
840 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
841 .ops = &clk_rcg2_shared_ops,
845 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
849 .parent_map = gcc_parent_map_0,
850 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
851 .clkr.hw.init = &(const struct clk_init_data){
852 .name = "gcc_pcie_1_phy_rchng_clk_src",
853 .parent_data = gcc_parent_data_0,
854 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
855 .ops = &clk_rcg2_shared_ops,
859 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
860 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
864 static struct clk_rcg2 gcc_pdm2_clk_src = {
868 .parent_map = gcc_parent_map_0,
869 .freq_tbl = ftbl_gcc_pdm2_clk_src,
870 .clkr.hw.init = &(const struct clk_init_data){
871 .name = "gcc_pdm2_clk_src",
872 .parent_data = gcc_parent_data_0,
873 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
874 .ops = &clk_rcg2_shared_ops,
878 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_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(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
887 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
888 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
892 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
893 .name = "gcc_qupv3_wrap0_s0_clk_src",
894 .parent_data = gcc_parent_data_0,
895 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
896 .ops = &clk_rcg2_shared_ops,
899 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
903 .parent_map = gcc_parent_map_0,
904 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
905 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
908 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
909 .name = "gcc_qupv3_wrap0_s1_clk_src",
910 .parent_data = gcc_parent_data_0,
911 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
912 .ops = &clk_rcg2_shared_ops,
915 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
919 .parent_map = gcc_parent_map_0,
920 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
921 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
924 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s2_clk_src[] = {
925 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
926 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
927 F(19200000, P_BI_TCXO, 1, 0, 0),
928 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
929 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
930 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
931 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
932 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
933 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
934 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
938 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
939 .name = "gcc_qupv3_wrap0_s2_clk_src",
940 .parent_data = gcc_parent_data_0,
941 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
942 .ops = &clk_rcg2_shared_ops,
945 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
949 .parent_map = gcc_parent_map_0,
950 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
951 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
954 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
955 .name = "gcc_qupv3_wrap0_s3_clk_src",
956 .parent_data = gcc_parent_data_0,
957 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
958 .ops = &clk_rcg2_shared_ops,
961 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
965 .parent_map = gcc_parent_map_0,
966 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
967 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
970 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
971 .name = "gcc_qupv3_wrap0_s4_clk_src",
972 .parent_data = gcc_parent_data_1,
973 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
974 .ops = &clk_rcg2_shared_ops,
977 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
981 .parent_map = gcc_parent_map_1,
982 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
983 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
986 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
987 .name = "gcc_qupv3_wrap0_s5_clk_src",
988 .parent_data = gcc_parent_data_0,
989 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
990 .ops = &clk_rcg2_shared_ops,
993 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
997 .parent_map = gcc_parent_map_0,
998 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
999 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1002 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
1003 .name = "gcc_qupv3_wrap0_s6_clk_src",
1004 .parent_data = gcc_parent_data_0,
1005 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1006 .ops = &clk_rcg2_shared_ops,
1009 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
1010 .cmd_rcgr = 0x2388c,
1013 .parent_map = gcc_parent_map_0,
1014 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1015 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
1018 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
1019 .name = "gcc_qupv3_wrap1_s0_clk_src",
1020 .parent_data = gcc_parent_data_0,
1021 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1022 .ops = &clk_rcg2_shared_ops,
1025 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
1026 .cmd_rcgr = 0x24154,
1029 .parent_map = gcc_parent_map_0,
1030 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1031 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
1034 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
1035 .name = "gcc_qupv3_wrap1_s1_clk_src",
1036 .parent_data = gcc_parent_data_0,
1037 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1038 .ops = &clk_rcg2_shared_ops,
1041 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
1042 .cmd_rcgr = 0x24288,
1045 .parent_map = gcc_parent_map_0,
1046 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1047 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
1050 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
1051 .name = "gcc_qupv3_wrap1_s2_clk_src",
1052 .parent_data = gcc_parent_data_0,
1053 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1054 .ops = &clk_rcg2_shared_ops,
1057 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
1058 .cmd_rcgr = 0x243bc,
1061 .parent_map = gcc_parent_map_0,
1062 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1063 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
1066 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
1067 .name = "gcc_qupv3_wrap1_s3_clk_src",
1068 .parent_data = gcc_parent_data_0,
1069 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1070 .ops = &clk_rcg2_shared_ops,
1073 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
1074 .cmd_rcgr = 0x244f0,
1077 .parent_map = gcc_parent_map_0,
1078 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1079 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
1082 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
1083 .name = "gcc_qupv3_wrap1_s4_clk_src",
1084 .parent_data = gcc_parent_data_1,
1085 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1086 .ops = &clk_rcg2_shared_ops,
1089 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
1090 .cmd_rcgr = 0x24624,
1093 .parent_map = gcc_parent_map_1,
1094 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1095 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
1098 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
1099 .name = "gcc_qupv3_wrap1_s5_clk_src",
1100 .parent_data = gcc_parent_data_0,
1101 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1102 .ops = &clk_rcg2_shared_ops,
1105 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
1106 .cmd_rcgr = 0x24758,
1109 .parent_map = gcc_parent_map_0,
1110 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1111 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
1114 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
1115 .name = "gcc_qupv3_wrap1_s6_clk_src",
1116 .parent_data = gcc_parent_data_0,
1117 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1118 .ops = &clk_rcg2_shared_ops,
1121 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
1122 .cmd_rcgr = 0x2488c,
1125 .parent_map = gcc_parent_map_0,
1126 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1127 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
1130 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
1131 .name = "gcc_qupv3_wrap2_s0_clk_src",
1132 .parent_data = gcc_parent_data_1,
1133 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1134 .ops = &clk_rcg2_shared_ops,
1137 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
1138 .cmd_rcgr = 0x2a154,
1141 .parent_map = gcc_parent_map_1,
1142 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1143 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
1146 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
1147 .name = "gcc_qupv3_wrap2_s1_clk_src",
1148 .parent_data = gcc_parent_data_1,
1149 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1150 .ops = &clk_rcg2_shared_ops,
1153 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
1154 .cmd_rcgr = 0x2a288,
1157 .parent_map = gcc_parent_map_1,
1158 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1159 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
1162 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
1163 .name = "gcc_qupv3_wrap2_s2_clk_src",
1164 .parent_data = gcc_parent_data_1,
1165 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1166 .ops = &clk_rcg2_shared_ops,
1169 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
1170 .cmd_rcgr = 0x2a3bc,
1173 .parent_map = gcc_parent_map_1,
1174 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1175 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
1178 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
1179 .name = "gcc_qupv3_wrap2_s3_clk_src",
1180 .parent_data = gcc_parent_data_1,
1181 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1182 .ops = &clk_rcg2_shared_ops,
1185 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
1186 .cmd_rcgr = 0x2a4f0,
1189 .parent_map = gcc_parent_map_1,
1190 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1191 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
1194 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
1195 .name = "gcc_qupv3_wrap2_s4_clk_src",
1196 .parent_data = gcc_parent_data_1,
1197 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1198 .ops = &clk_rcg2_shared_ops,
1201 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
1202 .cmd_rcgr = 0x2a624,
1205 .parent_map = gcc_parent_map_1,
1206 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1207 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
1210 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
1211 .name = "gcc_qupv3_wrap2_s5_clk_src",
1212 .parent_data = gcc_parent_data_1,
1213 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1214 .ops = &clk_rcg2_shared_ops,
1217 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
1218 .cmd_rcgr = 0x2a758,
1221 .parent_map = gcc_parent_map_1,
1222 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1223 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
1226 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
1227 .name = "gcc_qupv3_wrap2_s6_clk_src",
1228 .parent_data = gcc_parent_data_1,
1229 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1230 .ops = &clk_rcg2_shared_ops,
1233 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
1234 .cmd_rcgr = 0x2a88c,
1237 .parent_map = gcc_parent_map_1,
1238 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1239 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
1242 static const struct freq_tbl ftbl_gcc_qupv3_wrap3_s0_clk_src[] = {
1243 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
1244 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
1245 F(19200000, P_BI_TCXO, 1, 0, 0),
1246 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
1247 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
1248 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
1249 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
1250 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1251 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
1252 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
1253 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
1254 F(403200000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1258 static struct clk_init_data gcc_qupv3_wrap3_s0_clk_src_init = {
1259 .name = "gcc_qupv3_wrap3_s0_clk_src",
1260 .parent_data = gcc_parent_data_4,
1261 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1262 .ops = &clk_rcg2_shared_ops,
1265 static struct clk_rcg2 gcc_qupv3_wrap3_s0_clk_src = {
1266 .cmd_rcgr = 0xc4154,
1269 .parent_map = gcc_parent_map_4,
1270 .freq_tbl = ftbl_gcc_qupv3_wrap3_s0_clk_src,
1271 .clkr.hw.init = &gcc_qupv3_wrap3_s0_clk_src_init,
1274 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1275 F(144000, P_BI_TCXO, 16, 3, 25),
1276 F(400000, P_BI_TCXO, 12, 1, 4),
1277 F(19200000, P_BI_TCXO, 1, 0, 0),
1278 F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3),
1279 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1280 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1281 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1282 F(192000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1283 F(384000000, P_GCC_GPLL9_OUT_MAIN, 2, 0, 0),
1287 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1288 .cmd_rcgr = 0x20014,
1291 .parent_map = gcc_parent_map_13,
1292 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1293 .clkr.hw.init = &(const struct clk_init_data){
1294 .name = "gcc_sdcc1_apps_clk_src",
1295 .parent_data = gcc_parent_data_13,
1296 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
1297 .ops = &clk_rcg2_floor_ops,
1301 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1302 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1303 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1307 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1308 .cmd_rcgr = 0x2002c,
1311 .parent_map = gcc_parent_map_14,
1312 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1313 .clkr.hw.init = &(const struct clk_init_data){
1314 .name = "gcc_sdcc1_ice_core_clk_src",
1315 .parent_data = gcc_parent_data_14,
1316 .num_parents = ARRAY_SIZE(gcc_parent_data_14),
1317 .ops = &clk_rcg2_floor_ops,
1321 static const struct freq_tbl ftbl_gcc_tscss_cntr_clk_src[] = {
1322 F(15625000, P_GCC_GPLL7_OUT_MAIN, 16, 1, 4),
1326 static struct clk_rcg2 gcc_tscss_cntr_clk_src = {
1327 .cmd_rcgr = 0x21008,
1330 .parent_map = gcc_parent_map_15,
1331 .freq_tbl = ftbl_gcc_tscss_cntr_clk_src,
1332 .clkr.hw.init = &(const struct clk_init_data){
1333 .name = "gcc_tscss_cntr_clk_src",
1334 .parent_data = gcc_parent_data_15,
1335 .num_parents = ARRAY_SIZE(gcc_parent_data_15),
1336 .ops = &clk_rcg2_shared_ops,
1340 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
1341 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1342 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1343 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1344 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1345 F(600000000, P_GCC_GPLL0_OUT_MAIN, 1, 0, 0),
1349 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
1350 .cmd_rcgr = 0x8102c,
1353 .parent_map = gcc_parent_map_0,
1354 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1355 .clkr.hw.init = &(const struct clk_init_data){
1356 .name = "gcc_ufs_card_axi_clk_src",
1357 .parent_data = gcc_parent_data_0,
1358 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1359 .ops = &clk_rcg2_shared_ops,
1363 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
1364 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1365 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1366 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1367 F(600000000, P_GCC_GPLL0_OUT_MAIN, 1, 0, 0),
1371 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
1372 .cmd_rcgr = 0x81074,
1375 .parent_map = gcc_parent_map_0,
1376 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1377 .clkr.hw.init = &(const struct clk_init_data){
1378 .name = "gcc_ufs_card_ice_core_clk_src",
1379 .parent_data = gcc_parent_data_0,
1380 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1381 .ops = &clk_rcg2_shared_ops,
1385 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
1386 .cmd_rcgr = 0x810a8,
1389 .parent_map = gcc_parent_map_5,
1390 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1391 .clkr.hw.init = &(const struct clk_init_data){
1392 .name = "gcc_ufs_card_phy_aux_clk_src",
1393 .parent_data = gcc_parent_data_5,
1394 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1395 .ops = &clk_rcg2_shared_ops,
1399 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
1400 .cmd_rcgr = 0x8108c,
1403 .parent_map = gcc_parent_map_0,
1404 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1405 .clkr.hw.init = &(const struct clk_init_data){
1406 .name = "gcc_ufs_card_unipro_core_clk_src",
1407 .parent_data = gcc_parent_data_0,
1408 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1409 .ops = &clk_rcg2_shared_ops,
1413 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1414 .cmd_rcgr = 0x8302c,
1417 .parent_map = gcc_parent_map_0,
1418 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1419 .clkr.hw.init = &(const struct clk_init_data){
1420 .name = "gcc_ufs_phy_axi_clk_src",
1421 .parent_data = gcc_parent_data_0,
1422 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1423 .ops = &clk_rcg2_shared_ops,
1427 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1428 .cmd_rcgr = 0x83074,
1431 .parent_map = gcc_parent_map_0,
1432 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1433 .clkr.hw.init = &(const struct clk_init_data){
1434 .name = "gcc_ufs_phy_ice_core_clk_src",
1435 .parent_data = gcc_parent_data_0,
1436 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1437 .ops = &clk_rcg2_shared_ops,
1441 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1442 .cmd_rcgr = 0x830a8,
1445 .parent_map = gcc_parent_map_5,
1446 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1447 .clkr.hw.init = &(const struct clk_init_data){
1448 .name = "gcc_ufs_phy_phy_aux_clk_src",
1449 .parent_data = gcc_parent_data_5,
1450 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1451 .ops = &clk_rcg2_shared_ops,
1455 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1456 .cmd_rcgr = 0x8308c,
1459 .parent_map = gcc_parent_map_0,
1460 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1461 .clkr.hw.init = &(const struct clk_init_data){
1462 .name = "gcc_ufs_phy_unipro_core_clk_src",
1463 .parent_data = gcc_parent_data_0,
1464 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1465 .ops = &clk_rcg2_shared_ops,
1469 static const struct freq_tbl ftbl_gcc_usb20_master_clk_src[] = {
1470 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
1474 static struct clk_rcg2 gcc_usb20_master_clk_src = {
1475 .cmd_rcgr = 0x1c028,
1478 .parent_map = gcc_parent_map_0,
1479 .freq_tbl = ftbl_gcc_usb20_master_clk_src,
1480 .clkr.hw.init = &(const struct clk_init_data){
1481 .name = "gcc_usb20_master_clk_src",
1482 .parent_data = gcc_parent_data_0,
1483 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1484 .ops = &clk_rcg2_shared_ops,
1488 static struct clk_rcg2 gcc_usb20_mock_utmi_clk_src = {
1489 .cmd_rcgr = 0x1c040,
1492 .parent_map = gcc_parent_map_0,
1493 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1494 .clkr.hw.init = &(const struct clk_init_data){
1495 .name = "gcc_usb20_mock_utmi_clk_src",
1496 .parent_data = gcc_parent_data_0,
1497 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1498 .ops = &clk_rcg2_shared_ops,
1502 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1503 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1504 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1505 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1509 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1510 .cmd_rcgr = 0x1b028,
1513 .parent_map = gcc_parent_map_0,
1514 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1515 .clkr.hw.init = &(const struct clk_init_data){
1516 .name = "gcc_usb30_prim_master_clk_src",
1517 .parent_data = gcc_parent_data_0,
1518 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1519 .ops = &clk_rcg2_shared_ops,
1523 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1524 .cmd_rcgr = 0x1b040,
1527 .parent_map = gcc_parent_map_0,
1528 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1529 .clkr.hw.init = &(const struct clk_init_data){
1530 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1531 .parent_data = gcc_parent_data_0,
1532 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1533 .ops = &clk_rcg2_shared_ops,
1537 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1538 .cmd_rcgr = 0x2f028,
1541 .parent_map = gcc_parent_map_0,
1542 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1543 .clkr.hw.init = &(const struct clk_init_data){
1544 .name = "gcc_usb30_sec_master_clk_src",
1545 .parent_data = gcc_parent_data_0,
1546 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1547 .ops = &clk_rcg2_shared_ops,
1551 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1552 .cmd_rcgr = 0x2f040,
1555 .parent_map = gcc_parent_map_0,
1556 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1557 .clkr.hw.init = &(const struct clk_init_data){
1558 .name = "gcc_usb30_sec_mock_utmi_clk_src",
1559 .parent_data = gcc_parent_data_0,
1560 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1561 .ops = &clk_rcg2_shared_ops,
1565 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1566 .cmd_rcgr = 0x1b06c,
1569 .parent_map = gcc_parent_map_3,
1570 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1571 .clkr.hw.init = &(const struct clk_init_data){
1572 .name = "gcc_usb3_prim_phy_aux_clk_src",
1573 .parent_data = gcc_parent_data_3,
1574 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1575 .ops = &clk_rcg2_shared_ops,
1579 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1580 .cmd_rcgr = 0x2f06c,
1583 .parent_map = gcc_parent_map_3,
1584 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1585 .clkr.hw.init = &(const struct clk_init_data){
1586 .name = "gcc_usb3_sec_phy_aux_clk_src",
1587 .parent_data = gcc_parent_data_3,
1588 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1589 .ops = &clk_rcg2_shared_ops,
1593 static struct clk_regmap_div gcc_pcie_0_pipe_div_clk_src = {
1597 .clkr.hw.init = &(const struct clk_init_data) {
1598 .name = "gcc_pcie_0_pipe_div_clk_src",
1599 .parent_hws = (const struct clk_hw*[]){
1600 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1603 .flags = CLK_SET_RATE_PARENT,
1604 .ops = &clk_regmap_div_ro_ops,
1608 static struct clk_regmap_div gcc_pcie_1_pipe_div_clk_src = {
1612 .clkr.hw.init = &(const struct clk_init_data) {
1613 .name = "gcc_pcie_1_pipe_div_clk_src",
1614 .parent_hws = (const struct clk_hw*[]){
1615 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1618 .flags = CLK_SET_RATE_PARENT,
1619 .ops = &clk_regmap_div_ro_ops,
1623 static struct clk_regmap_div gcc_qupv3_wrap3_s0_div_clk_src = {
1627 .clkr.hw.init = &(const struct clk_init_data) {
1628 .name = "gcc_qupv3_wrap3_s0_div_clk_src",
1629 .parent_hws = (const struct clk_hw*[]){
1630 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
1633 .flags = CLK_SET_RATE_PARENT,
1634 .ops = &clk_regmap_div_ro_ops,
1638 static struct clk_regmap_div gcc_usb20_mock_utmi_postdiv_clk_src = {
1642 .clkr.hw.init = &(const struct clk_init_data) {
1643 .name = "gcc_usb20_mock_utmi_postdiv_clk_src",
1644 .parent_hws = (const struct clk_hw*[]){
1645 &gcc_usb20_mock_utmi_clk_src.clkr.hw,
1648 .flags = CLK_SET_RATE_PARENT,
1649 .ops = &clk_regmap_div_ro_ops,
1653 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1657 .clkr.hw.init = &(const struct clk_init_data) {
1658 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1659 .parent_hws = (const struct clk_hw*[]){
1660 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1663 .flags = CLK_SET_RATE_PARENT,
1664 .ops = &clk_regmap_div_ro_ops,
1668 static struct clk_regmap_div gcc_usb30_sec_mock_utmi_postdiv_clk_src = {
1672 .clkr.hw.init = &(const struct clk_init_data) {
1673 .name = "gcc_usb30_sec_mock_utmi_postdiv_clk_src",
1674 .parent_hws = (const struct clk_hw*[]){
1675 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw,
1678 .flags = CLK_SET_RATE_PARENT,
1679 .ops = &clk_regmap_div_ro_ops,
1683 static struct clk_branch gcc_aggre_noc_qupv3_axi_clk = {
1684 .halt_reg = 0x8e200,
1685 .halt_check = BRANCH_HALT_VOTED,
1686 .hwcg_reg = 0x8e200,
1689 .enable_reg = 0x4b000,
1690 .enable_mask = BIT(28),
1691 .hw.init = &(const struct clk_init_data){
1692 .name = "gcc_aggre_noc_qupv3_axi_clk",
1693 .ops = &clk_branch2_ops,
1698 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1699 .halt_reg = 0x810d4,
1700 .halt_check = BRANCH_HALT_VOTED,
1701 .hwcg_reg = 0x810d4,
1704 .enable_reg = 0x810d4,
1705 .enable_mask = BIT(0),
1706 .hw.init = &(const struct clk_init_data){
1707 .name = "gcc_aggre_ufs_card_axi_clk",
1708 .parent_hws = (const struct clk_hw*[]){
1709 &gcc_ufs_card_axi_clk_src.clkr.hw,
1712 .flags = CLK_SET_RATE_PARENT,
1713 .ops = &clk_branch2_ops,
1718 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1719 .halt_reg = 0x830d4,
1720 .halt_check = BRANCH_HALT_VOTED,
1721 .hwcg_reg = 0x830d4,
1724 .enable_reg = 0x830d4,
1725 .enable_mask = BIT(0),
1726 .hw.init = &(const struct clk_init_data){
1727 .name = "gcc_aggre_ufs_phy_axi_clk",
1728 .parent_hws = (const struct clk_hw*[]){
1729 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1732 .flags = CLK_SET_RATE_PARENT,
1733 .ops = &clk_branch2_ops,
1738 static struct clk_branch gcc_aggre_usb2_prim_axi_clk = {
1739 .halt_reg = 0x1c05c,
1740 .halt_check = BRANCH_HALT_VOTED,
1741 .hwcg_reg = 0x1c05c,
1744 .enable_reg = 0x1c05c,
1745 .enable_mask = BIT(0),
1746 .hw.init = &(const struct clk_init_data){
1747 .name = "gcc_aggre_usb2_prim_axi_clk",
1748 .parent_hws = (const struct clk_hw*[]){
1749 &gcc_usb20_master_clk_src.clkr.hw,
1752 .flags = CLK_SET_RATE_PARENT,
1753 .ops = &clk_branch2_ops,
1758 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1759 .halt_reg = 0x1b084,
1760 .halt_check = BRANCH_HALT_VOTED,
1761 .hwcg_reg = 0x1b084,
1764 .enable_reg = 0x1b084,
1765 .enable_mask = BIT(0),
1766 .hw.init = &(const struct clk_init_data){
1767 .name = "gcc_aggre_usb3_prim_axi_clk",
1768 .parent_hws = (const struct clk_hw*[]){
1769 &gcc_usb30_prim_master_clk_src.clkr.hw,
1772 .flags = CLK_SET_RATE_PARENT,
1773 .ops = &clk_branch2_ops,
1778 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1779 .halt_reg = 0x2f088,
1780 .halt_check = BRANCH_HALT_VOTED,
1781 .hwcg_reg = 0x2f088,
1784 .enable_reg = 0x2f088,
1785 .enable_mask = BIT(0),
1786 .hw.init = &(const struct clk_init_data){
1787 .name = "gcc_aggre_usb3_sec_axi_clk",
1788 .parent_hws = (const struct clk_hw*[]){
1789 &gcc_usb30_sec_master_clk_src.clkr.hw,
1792 .flags = CLK_SET_RATE_PARENT,
1793 .ops = &clk_branch2_ops,
1798 static struct clk_branch gcc_ahb2phy0_clk = {
1799 .halt_reg = 0x76004,
1800 .halt_check = BRANCH_HALT_VOTED,
1801 .hwcg_reg = 0x76004,
1804 .enable_reg = 0x76004,
1805 .enable_mask = BIT(0),
1806 .hw.init = &(const struct clk_init_data){
1807 .name = "gcc_ahb2phy0_clk",
1808 .ops = &clk_branch2_ops,
1813 static struct clk_branch gcc_ahb2phy2_clk = {
1814 .halt_reg = 0x76008,
1815 .halt_check = BRANCH_HALT_VOTED,
1816 .hwcg_reg = 0x76008,
1819 .enable_reg = 0x76008,
1820 .enable_mask = BIT(0),
1821 .hw.init = &(const struct clk_init_data){
1822 .name = "gcc_ahb2phy2_clk",
1823 .ops = &clk_branch2_ops,
1828 static struct clk_branch gcc_ahb2phy3_clk = {
1829 .halt_reg = 0x7600c,
1830 .halt_check = BRANCH_HALT_VOTED,
1831 .hwcg_reg = 0x7600c,
1834 .enable_reg = 0x7600c,
1835 .enable_mask = BIT(0),
1836 .hw.init = &(const struct clk_init_data){
1837 .name = "gcc_ahb2phy3_clk",
1838 .ops = &clk_branch2_ops,
1843 static struct clk_branch gcc_boot_rom_ahb_clk = {
1844 .halt_reg = 0x44004,
1845 .halt_check = BRANCH_HALT_VOTED,
1846 .hwcg_reg = 0x44004,
1849 .enable_reg = 0x4b000,
1850 .enable_mask = BIT(10),
1851 .hw.init = &(const struct clk_init_data){
1852 .name = "gcc_boot_rom_ahb_clk",
1853 .ops = &clk_branch2_ops,
1858 static struct clk_branch gcc_camera_hf_axi_clk = {
1859 .halt_reg = 0x32010,
1860 .halt_check = BRANCH_HALT_SKIP,
1861 .hwcg_reg = 0x32010,
1864 .enable_reg = 0x32010,
1865 .enable_mask = BIT(0),
1866 .hw.init = &(const struct clk_init_data){
1867 .name = "gcc_camera_hf_axi_clk",
1868 .ops = &clk_branch2_ops,
1873 static struct clk_branch gcc_camera_sf_axi_clk = {
1874 .halt_reg = 0x32018,
1875 .halt_check = BRANCH_HALT_SKIP,
1876 .hwcg_reg = 0x32018,
1879 .enable_reg = 0x32018,
1880 .enable_mask = BIT(0),
1881 .hw.init = &(const struct clk_init_data){
1882 .name = "gcc_camera_sf_axi_clk",
1883 .ops = &clk_branch2_ops,
1888 static struct clk_branch gcc_camera_throttle_xo_clk = {
1889 .halt_reg = 0x32024,
1890 .halt_check = BRANCH_HALT,
1892 .enable_reg = 0x32024,
1893 .enable_mask = BIT(0),
1894 .hw.init = &(const struct clk_init_data){
1895 .name = "gcc_camera_throttle_xo_clk",
1896 .ops = &clk_branch2_ops,
1901 static struct clk_branch gcc_cfg_noc_usb2_prim_axi_clk = {
1902 .halt_reg = 0x1c060,
1903 .halt_check = BRANCH_HALT_VOTED,
1904 .hwcg_reg = 0x1c060,
1907 .enable_reg = 0x1c060,
1908 .enable_mask = BIT(0),
1909 .hw.init = &(const struct clk_init_data){
1910 .name = "gcc_cfg_noc_usb2_prim_axi_clk",
1911 .parent_hws = (const struct clk_hw*[]){
1912 &gcc_usb20_master_clk_src.clkr.hw,
1915 .flags = CLK_SET_RATE_PARENT,
1916 .ops = &clk_branch2_ops,
1921 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1922 .halt_reg = 0x1b088,
1923 .halt_check = BRANCH_HALT_VOTED,
1924 .hwcg_reg = 0x1b088,
1927 .enable_reg = 0x1b088,
1928 .enable_mask = BIT(0),
1929 .hw.init = &(const struct clk_init_data){
1930 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1931 .parent_hws = (const struct clk_hw*[]){
1932 &gcc_usb30_prim_master_clk_src.clkr.hw,
1935 .flags = CLK_SET_RATE_PARENT,
1936 .ops = &clk_branch2_ops,
1941 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1942 .halt_reg = 0x2f084,
1943 .halt_check = BRANCH_HALT_VOTED,
1944 .hwcg_reg = 0x2f084,
1947 .enable_reg = 0x2f084,
1948 .enable_mask = BIT(0),
1949 .hw.init = &(const struct clk_init_data){
1950 .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1951 .parent_hws = (const struct clk_hw*[]){
1952 &gcc_usb30_sec_master_clk_src.clkr.hw,
1955 .flags = CLK_SET_RATE_PARENT,
1956 .ops = &clk_branch2_ops,
1961 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1962 .halt_reg = 0x7d164,
1963 .halt_check = BRANCH_HALT_VOTED,
1964 .hwcg_reg = 0x7d164,
1967 .enable_reg = 0x7d164,
1968 .enable_mask = BIT(0),
1969 .hw.init = &(const struct clk_init_data){
1970 .name = "gcc_ddrss_gpu_axi_clk",
1971 .ops = &clk_branch2_aon_ops,
1976 static struct clk_branch gcc_disp1_hf_axi_clk = {
1977 .halt_reg = 0xc7010,
1978 .halt_check = BRANCH_HALT_VOTED,
1979 .hwcg_reg = 0xc7010,
1982 .enable_reg = 0xc7010,
1983 .enable_mask = BIT(0),
1984 .hw.init = &(const struct clk_init_data){
1985 .name = "gcc_disp1_hf_axi_clk",
1986 .ops = &clk_branch2_ops,
1991 static struct clk_branch gcc_disp_hf_axi_clk = {
1992 .halt_reg = 0x33010,
1993 .halt_check = BRANCH_HALT_VOTED,
1994 .hwcg_reg = 0x33010,
1997 .enable_reg = 0x33010,
1998 .enable_mask = BIT(0),
1999 .hw.init = &(const struct clk_init_data){
2000 .name = "gcc_disp_hf_axi_clk",
2001 .ops = &clk_branch2_ops,
2006 static struct clk_branch gcc_edp_ref_clkref_en = {
2007 .halt_reg = 0x97448,
2008 .halt_check = BRANCH_HALT_DELAY,
2010 .enable_reg = 0x97448,
2011 .enable_mask = BIT(0),
2012 .hw.init = &(const struct clk_init_data){
2013 .name = "gcc_edp_ref_clkref_en",
2014 .ops = &clk_branch2_ops,
2019 static struct clk_branch gcc_emac0_axi_clk = {
2020 .halt_reg = 0xb6018,
2021 .halt_check = BRANCH_HALT_VOTED,
2022 .hwcg_reg = 0xb6018,
2025 .enable_reg = 0xb6018,
2026 .enable_mask = BIT(0),
2027 .hw.init = &(const struct clk_init_data){
2028 .name = "gcc_emac0_axi_clk",
2029 .ops = &clk_branch2_ops,
2034 static struct clk_branch gcc_emac0_phy_aux_clk = {
2035 .halt_reg = 0xb6024,
2036 .halt_check = BRANCH_HALT,
2038 .enable_reg = 0xb6024,
2039 .enable_mask = BIT(0),
2040 .hw.init = &(const struct clk_init_data){
2041 .name = "gcc_emac0_phy_aux_clk",
2042 .parent_hws = (const struct clk_hw*[]){
2043 &gcc_emac0_phy_aux_clk_src.clkr.hw,
2046 .flags = CLK_SET_RATE_PARENT,
2047 .ops = &clk_branch2_ops,
2052 static struct clk_branch gcc_emac0_ptp_clk = {
2053 .halt_reg = 0xb6040,
2054 .halt_check = BRANCH_HALT,
2056 .enable_reg = 0xb6040,
2057 .enable_mask = BIT(0),
2058 .hw.init = &(const struct clk_init_data){
2059 .name = "gcc_emac0_ptp_clk",
2060 .parent_hws = (const struct clk_hw*[]){
2061 &gcc_emac0_ptp_clk_src.clkr.hw,
2064 .flags = CLK_SET_RATE_PARENT,
2065 .ops = &clk_branch2_ops,
2070 static struct clk_branch gcc_emac0_rgmii_clk = {
2071 .halt_reg = 0xb6044,
2072 .halt_check = BRANCH_HALT,
2074 .enable_reg = 0xb6044,
2075 .enable_mask = BIT(0),
2076 .hw.init = &(const struct clk_init_data){
2077 .name = "gcc_emac0_rgmii_clk",
2078 .parent_hws = (const struct clk_hw*[]){
2079 &gcc_emac0_rgmii_clk_src.clkr.hw,
2082 .flags = CLK_SET_RATE_PARENT,
2083 .ops = &clk_branch2_ops,
2088 static struct clk_branch gcc_emac0_slv_ahb_clk = {
2089 .halt_reg = 0xb6020,
2090 .halt_check = BRANCH_HALT_VOTED,
2091 .hwcg_reg = 0xb6020,
2094 .enable_reg = 0xb6020,
2095 .enable_mask = BIT(0),
2096 .hw.init = &(const struct clk_init_data){
2097 .name = "gcc_emac0_slv_ahb_clk",
2098 .ops = &clk_branch2_ops,
2103 static struct clk_branch gcc_emac1_axi_clk = {
2104 .halt_reg = 0xb4018,
2105 .halt_check = BRANCH_HALT_VOTED,
2106 .hwcg_reg = 0xb4018,
2109 .enable_reg = 0xb4018,
2110 .enable_mask = BIT(0),
2111 .hw.init = &(const struct clk_init_data){
2112 .name = "gcc_emac1_axi_clk",
2113 .ops = &clk_branch2_ops,
2118 static struct clk_branch gcc_emac1_phy_aux_clk = {
2119 .halt_reg = 0xb4024,
2120 .halt_check = BRANCH_HALT,
2122 .enable_reg = 0xb4024,
2123 .enable_mask = BIT(0),
2124 .hw.init = &(const struct clk_init_data){
2125 .name = "gcc_emac1_phy_aux_clk",
2126 .parent_hws = (const struct clk_hw*[]){
2127 &gcc_emac1_phy_aux_clk_src.clkr.hw,
2130 .flags = CLK_SET_RATE_PARENT,
2131 .ops = &clk_branch2_ops,
2136 static struct clk_branch gcc_emac1_ptp_clk = {
2137 .halt_reg = 0xb4040,
2138 .halt_check = BRANCH_HALT,
2140 .enable_reg = 0xb4040,
2141 .enable_mask = BIT(0),
2142 .hw.init = &(const struct clk_init_data){
2143 .name = "gcc_emac1_ptp_clk",
2144 .parent_hws = (const struct clk_hw*[]){
2145 &gcc_emac1_ptp_clk_src.clkr.hw,
2148 .flags = CLK_SET_RATE_PARENT,
2149 .ops = &clk_branch2_ops,
2154 static struct clk_branch gcc_emac1_rgmii_clk = {
2155 .halt_reg = 0xb4044,
2156 .halt_check = BRANCH_HALT,
2158 .enable_reg = 0xb4044,
2159 .enable_mask = BIT(0),
2160 .hw.init = &(const struct clk_init_data){
2161 .name = "gcc_emac1_rgmii_clk",
2162 .parent_hws = (const struct clk_hw*[]){
2163 &gcc_emac1_rgmii_clk_src.clkr.hw,
2166 .flags = CLK_SET_RATE_PARENT,
2167 .ops = &clk_branch2_ops,
2172 static struct clk_branch gcc_emac1_slv_ahb_clk = {
2173 .halt_reg = 0xb4020,
2174 .halt_check = BRANCH_HALT_VOTED,
2175 .hwcg_reg = 0xb4020,
2178 .enable_reg = 0xb4020,
2179 .enable_mask = BIT(0),
2180 .hw.init = &(const struct clk_init_data){
2181 .name = "gcc_emac1_slv_ahb_clk",
2182 .ops = &clk_branch2_ops,
2187 static struct clk_branch gcc_gp1_clk = {
2188 .halt_reg = 0x70000,
2189 .halt_check = BRANCH_HALT,
2191 .enable_reg = 0x70000,
2192 .enable_mask = BIT(0),
2193 .hw.init = &(const struct clk_init_data){
2194 .name = "gcc_gp1_clk",
2195 .parent_hws = (const struct clk_hw*[]){
2196 &gcc_gp1_clk_src.clkr.hw,
2199 .flags = CLK_SET_RATE_PARENT,
2200 .ops = &clk_branch2_ops,
2205 static struct clk_branch gcc_gp2_clk = {
2206 .halt_reg = 0x71000,
2207 .halt_check = BRANCH_HALT,
2209 .enable_reg = 0x71000,
2210 .enable_mask = BIT(0),
2211 .hw.init = &(const struct clk_init_data){
2212 .name = "gcc_gp2_clk",
2213 .parent_hws = (const struct clk_hw*[]){
2214 &gcc_gp2_clk_src.clkr.hw,
2217 .flags = CLK_SET_RATE_PARENT,
2218 .ops = &clk_branch2_ops,
2223 static struct clk_branch gcc_gp3_clk = {
2224 .halt_reg = 0x62000,
2225 .halt_check = BRANCH_HALT,
2227 .enable_reg = 0x62000,
2228 .enable_mask = BIT(0),
2229 .hw.init = &(const struct clk_init_data){
2230 .name = "gcc_gp3_clk",
2231 .parent_hws = (const struct clk_hw*[]){
2232 &gcc_gp3_clk_src.clkr.hw,
2235 .flags = CLK_SET_RATE_PARENT,
2236 .ops = &clk_branch2_ops,
2241 static struct clk_branch gcc_gp4_clk = {
2242 .halt_reg = 0x1e000,
2243 .halt_check = BRANCH_HALT,
2245 .enable_reg = 0x1e000,
2246 .enable_mask = BIT(0),
2247 .hw.init = &(const struct clk_init_data){
2248 .name = "gcc_gp4_clk",
2249 .parent_hws = (const struct clk_hw*[]){
2250 &gcc_gp4_clk_src.clkr.hw,
2253 .flags = CLK_SET_RATE_PARENT,
2254 .ops = &clk_branch2_ops,
2259 static struct clk_branch gcc_gp5_clk = {
2260 .halt_reg = 0x1f000,
2261 .halt_check = BRANCH_HALT,
2263 .enable_reg = 0x1f000,
2264 .enable_mask = BIT(0),
2265 .hw.init = &(const struct clk_init_data){
2266 .name = "gcc_gp5_clk",
2267 .parent_hws = (const struct clk_hw*[]){
2268 &gcc_gp5_clk_src.clkr.hw,
2271 .flags = CLK_SET_RATE_PARENT,
2272 .ops = &clk_branch2_ops,
2277 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2278 .halt_check = BRANCH_HALT_DELAY,
2280 .enable_reg = 0x4b000,
2281 .enable_mask = BIT(15),
2282 .hw.init = &(const struct clk_init_data){
2283 .name = "gcc_gpu_gpll0_clk_src",
2284 .parent_hws = (const struct clk_hw*[]){
2288 .flags = CLK_SET_RATE_PARENT,
2289 .ops = &clk_branch2_ops,
2294 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2295 .halt_check = BRANCH_HALT_DELAY,
2297 .enable_reg = 0x4b000,
2298 .enable_mask = BIT(16),
2299 .hw.init = &(const struct clk_init_data){
2300 .name = "gcc_gpu_gpll0_div_clk_src",
2301 .parent_hws = (const struct clk_hw*[]){
2302 &gcc_gpll0_out_even.clkr.hw,
2305 .flags = CLK_SET_RATE_PARENT,
2306 .ops = &clk_branch2_ops,
2311 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2312 .halt_reg = 0x7d010,
2313 .halt_check = BRANCH_HALT_VOTED,
2314 .hwcg_reg = 0x7d010,
2317 .enable_reg = 0x7d010,
2318 .enable_mask = BIT(0),
2319 .hw.init = &(const struct clk_init_data){
2320 .name = "gcc_gpu_memnoc_gfx_clk",
2321 .ops = &clk_branch2_aon_ops,
2326 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2327 .halt_reg = 0x7d01c,
2328 .halt_check = BRANCH_HALT_DELAY,
2330 .enable_reg = 0x7d01c,
2331 .enable_mask = BIT(0),
2332 .hw.init = &(const struct clk_init_data){
2333 .name = "gcc_gpu_snoc_dvm_gfx_clk",
2334 .ops = &clk_branch2_aon_ops,
2339 static struct clk_branch gcc_gpu_tcu_throttle_ahb_clk = {
2340 .halt_reg = 0x7d008,
2341 .halt_check = BRANCH_HALT_VOTED,
2342 .hwcg_reg = 0x7d008,
2345 .enable_reg = 0x7d008,
2346 .enable_mask = BIT(0),
2347 .hw.init = &(const struct clk_init_data){
2348 .name = "gcc_gpu_tcu_throttle_ahb_clk",
2349 .ops = &clk_branch2_ops,
2354 static struct clk_branch gcc_gpu_tcu_throttle_clk = {
2355 .halt_reg = 0x7d014,
2356 .halt_check = BRANCH_HALT_VOTED,
2357 .hwcg_reg = 0x7d014,
2360 .enable_reg = 0x7d014,
2361 .enable_mask = BIT(0),
2362 .hw.init = &(const struct clk_init_data){
2363 .name = "gcc_gpu_tcu_throttle_clk",
2364 .ops = &clk_branch2_ops,
2369 static struct clk_branch gcc_pcie_0_aux_clk = {
2370 .halt_reg = 0xa9038,
2371 .halt_check = BRANCH_HALT_VOTED,
2373 .enable_reg = 0x4b010,
2374 .enable_mask = BIT(16),
2375 .hw.init = &(const struct clk_init_data){
2376 .name = "gcc_pcie_0_aux_clk",
2377 .parent_hws = (const struct clk_hw*[]){
2378 &gcc_pcie_0_aux_clk_src.clkr.hw,
2381 .flags = CLK_SET_RATE_PARENT,
2382 .ops = &clk_branch2_ops,
2387 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2388 .halt_reg = 0xa902c,
2389 .halt_check = BRANCH_HALT_VOTED,
2390 .hwcg_reg = 0xa902c,
2393 .enable_reg = 0x4b010,
2394 .enable_mask = BIT(12),
2395 .hw.init = &(const struct clk_init_data){
2396 .name = "gcc_pcie_0_cfg_ahb_clk",
2397 .ops = &clk_branch2_ops,
2402 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2403 .halt_reg = 0xa9024,
2404 .halt_check = BRANCH_HALT_VOTED,
2406 .enable_reg = 0x4b010,
2407 .enable_mask = BIT(11),
2408 .hw.init = &(const struct clk_init_data){
2409 .name = "gcc_pcie_0_mstr_axi_clk",
2410 .ops = &clk_branch2_ops,
2415 static struct clk_branch gcc_pcie_0_phy_aux_clk = {
2416 .halt_reg = 0xa9030,
2417 .halt_check = BRANCH_HALT_VOTED,
2419 .enable_reg = 0x4b010,
2420 .enable_mask = BIT(13),
2421 .hw.init = &(const struct clk_init_data){
2422 .name = "gcc_pcie_0_phy_aux_clk",
2423 .parent_hws = (const struct clk_hw*[]){
2424 &gcc_pcie_0_phy_aux_clk_src.clkr.hw,
2427 .flags = CLK_SET_RATE_PARENT,
2428 .ops = &clk_branch2_ops,
2433 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
2434 .halt_reg = 0xa9050,
2435 .halt_check = BRANCH_HALT_VOTED,
2437 .enable_reg = 0x4b010,
2438 .enable_mask = BIT(15),
2439 .hw.init = &(const struct clk_init_data){
2440 .name = "gcc_pcie_0_phy_rchng_clk",
2441 .parent_hws = (const struct clk_hw*[]){
2442 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
2445 .flags = CLK_SET_RATE_PARENT,
2446 .ops = &clk_branch2_ops,
2451 static struct clk_branch gcc_pcie_0_pipe_clk = {
2452 .halt_reg = 0xa9040,
2453 .halt_check = BRANCH_HALT_SKIP,
2455 .enable_reg = 0x4b010,
2456 .enable_mask = BIT(14),
2457 .hw.init = &(const struct clk_init_data){
2458 .name = "gcc_pcie_0_pipe_clk",
2459 .parent_hws = (const struct clk_hw*[]){
2460 &gcc_pcie_0_pipe_clk_src.clkr.hw,
2463 .flags = CLK_SET_RATE_PARENT,
2464 .ops = &clk_branch2_ops,
2469 static struct clk_branch gcc_pcie_0_pipediv2_clk = {
2470 .halt_reg = 0xa9048,
2471 .halt_check = BRANCH_HALT_SKIP,
2473 .enable_reg = 0x4b018,
2474 .enable_mask = BIT(22),
2475 .hw.init = &(const struct clk_init_data){
2476 .name = "gcc_pcie_0_pipediv2_clk",
2477 .parent_hws = (const struct clk_hw*[]){
2478 &gcc_pcie_0_pipe_div_clk_src.clkr.hw,
2481 .flags = CLK_SET_RATE_PARENT,
2482 .ops = &clk_branch2_ops,
2487 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2488 .halt_reg = 0xa901c,
2489 .halt_check = BRANCH_HALT_VOTED,
2491 .enable_reg = 0x4b010,
2492 .enable_mask = BIT(10),
2493 .hw.init = &(const struct clk_init_data){
2494 .name = "gcc_pcie_0_slv_axi_clk",
2495 .ops = &clk_branch2_ops,
2500 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
2501 .halt_reg = 0xa9018,
2502 .halt_check = BRANCH_HALT_VOTED,
2504 .enable_reg = 0x4b018,
2505 .enable_mask = BIT(12),
2506 .hw.init = &(const struct clk_init_data){
2507 .name = "gcc_pcie_0_slv_q2a_axi_clk",
2508 .ops = &clk_branch2_ops,
2513 static struct clk_branch gcc_pcie_1_aux_clk = {
2514 .halt_reg = 0x77038,
2515 .halt_check = BRANCH_HALT_VOTED,
2517 .enable_reg = 0x4b000,
2518 .enable_mask = BIT(31),
2519 .hw.init = &(const struct clk_init_data){
2520 .name = "gcc_pcie_1_aux_clk",
2521 .parent_hws = (const struct clk_hw*[]){
2522 &gcc_pcie_1_aux_clk_src.clkr.hw,
2525 .flags = CLK_SET_RATE_PARENT,
2526 .ops = &clk_branch2_ops,
2531 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2532 .halt_reg = 0x7702c,
2533 .halt_check = BRANCH_HALT_VOTED,
2534 .hwcg_reg = 0x7702c,
2537 .enable_reg = 0x4b008,
2538 .enable_mask = BIT(2),
2539 .hw.init = &(const struct clk_init_data){
2540 .name = "gcc_pcie_1_cfg_ahb_clk",
2541 .ops = &clk_branch2_ops,
2546 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2547 .halt_reg = 0x77024,
2548 .halt_check = BRANCH_HALT_VOTED,
2550 .enable_reg = 0x4b008,
2551 .enable_mask = BIT(1),
2552 .hw.init = &(const struct clk_init_data){
2553 .name = "gcc_pcie_1_mstr_axi_clk",
2554 .ops = &clk_branch2_ops,
2559 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
2560 .halt_reg = 0x77030,
2561 .halt_check = BRANCH_HALT_VOTED,
2563 .enable_reg = 0x4b008,
2564 .enable_mask = BIT(3),
2565 .hw.init = &(const struct clk_init_data){
2566 .name = "gcc_pcie_1_phy_aux_clk",
2567 .parent_hws = (const struct clk_hw*[]){
2568 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
2571 .flags = CLK_SET_RATE_PARENT,
2572 .ops = &clk_branch2_ops,
2577 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
2578 .halt_reg = 0x77050,
2579 .halt_check = BRANCH_HALT_VOTED,
2581 .enable_reg = 0x4b000,
2582 .enable_mask = BIT(22),
2583 .hw.init = &(const struct clk_init_data){
2584 .name = "gcc_pcie_1_phy_rchng_clk",
2585 .parent_hws = (const struct clk_hw*[]){
2586 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
2589 .flags = CLK_SET_RATE_PARENT,
2590 .ops = &clk_branch2_ops,
2595 static struct clk_branch gcc_pcie_1_pipe_clk = {
2596 .halt_reg = 0x77040,
2597 .halt_check = BRANCH_HALT_SKIP,
2599 .enable_reg = 0x4b008,
2600 .enable_mask = BIT(4),
2601 .hw.init = &(const struct clk_init_data){
2602 .name = "gcc_pcie_1_pipe_clk",
2603 .parent_hws = (const struct clk_hw*[]){
2604 &gcc_pcie_1_pipe_clk_src.clkr.hw,
2607 .flags = CLK_SET_RATE_PARENT,
2608 .ops = &clk_branch2_ops,
2613 static struct clk_branch gcc_pcie_1_pipediv2_clk = {
2614 .halt_reg = 0x77048,
2615 .halt_check = BRANCH_HALT_SKIP,
2617 .enable_reg = 0x4b018,
2618 .enable_mask = BIT(16),
2619 .hw.init = &(const struct clk_init_data){
2620 .name = "gcc_pcie_1_pipediv2_clk",
2621 .parent_hws = (const struct clk_hw*[]){
2622 &gcc_pcie_1_pipe_div_clk_src.clkr.hw,
2625 .flags = CLK_SET_RATE_PARENT,
2626 .ops = &clk_branch2_ops,
2631 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2632 .halt_reg = 0x7701c,
2633 .halt_check = BRANCH_HALT_VOTED,
2635 .enable_reg = 0x4b008,
2636 .enable_mask = BIT(0),
2637 .hw.init = &(const struct clk_init_data){
2638 .name = "gcc_pcie_1_slv_axi_clk",
2639 .ops = &clk_branch2_ops,
2644 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2645 .halt_reg = 0x77018,
2646 .halt_check = BRANCH_HALT_VOTED,
2648 .enable_reg = 0x4b008,
2649 .enable_mask = BIT(5),
2650 .hw.init = &(const struct clk_init_data){
2651 .name = "gcc_pcie_1_slv_q2a_axi_clk",
2652 .ops = &clk_branch2_ops,
2657 static struct clk_branch gcc_pcie_clkref_en = {
2658 .halt_reg = 0x9746c,
2659 .halt_check = BRANCH_HALT_DELAY,
2661 .enable_reg = 0x9746c,
2662 .enable_mask = BIT(0),
2663 .hw.init = &(const struct clk_init_data){
2664 .name = "gcc_pcie_clkref_en",
2665 .ops = &clk_branch2_ops,
2670 static struct clk_branch gcc_pcie_throttle_cfg_clk = {
2671 .halt_reg = 0xb2034,
2672 .halt_check = BRANCH_HALT_VOTED,
2674 .enable_reg = 0x4b020,
2675 .enable_mask = BIT(15),
2676 .hw.init = &(const struct clk_init_data){
2677 .name = "gcc_pcie_throttle_cfg_clk",
2678 .ops = &clk_branch2_ops,
2683 static struct clk_branch gcc_pdm2_clk = {
2684 .halt_reg = 0x3f00c,
2685 .halt_check = BRANCH_HALT,
2687 .enable_reg = 0x3f00c,
2688 .enable_mask = BIT(0),
2689 .hw.init = &(const struct clk_init_data){
2690 .name = "gcc_pdm2_clk",
2691 .parent_hws = (const struct clk_hw*[]){
2692 &gcc_pdm2_clk_src.clkr.hw,
2695 .flags = CLK_SET_RATE_PARENT,
2696 .ops = &clk_branch2_ops,
2701 static struct clk_branch gcc_pdm_ahb_clk = {
2702 .halt_reg = 0x3f004,
2703 .halt_check = BRANCH_HALT_VOTED,
2704 .hwcg_reg = 0x3f004,
2707 .enable_reg = 0x3f004,
2708 .enable_mask = BIT(0),
2709 .hw.init = &(const struct clk_init_data){
2710 .name = "gcc_pdm_ahb_clk",
2711 .ops = &clk_branch2_ops,
2716 static struct clk_branch gcc_pdm_xo4_clk = {
2717 .halt_reg = 0x3f008,
2718 .halt_check = BRANCH_HALT,
2720 .enable_reg = 0x3f008,
2721 .enable_mask = BIT(0),
2722 .hw.init = &(const struct clk_init_data){
2723 .name = "gcc_pdm_xo4_clk",
2724 .ops = &clk_branch2_ops,
2729 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2730 .halt_reg = 0x32008,
2731 .halt_check = BRANCH_HALT_VOTED,
2732 .hwcg_reg = 0x32008,
2735 .enable_reg = 0x32008,
2736 .enable_mask = BIT(0),
2737 .hw.init = &(const struct clk_init_data){
2738 .name = "gcc_qmip_camera_nrt_ahb_clk",
2739 .ops = &clk_branch2_ops,
2744 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2745 .halt_reg = 0x3200c,
2746 .halt_check = BRANCH_HALT_VOTED,
2747 .hwcg_reg = 0x3200c,
2750 .enable_reg = 0x3200c,
2751 .enable_mask = BIT(0),
2752 .hw.init = &(const struct clk_init_data){
2753 .name = "gcc_qmip_camera_rt_ahb_clk",
2754 .ops = &clk_branch2_ops,
2759 static struct clk_branch gcc_qmip_disp1_ahb_clk = {
2760 .halt_reg = 0xc7008,
2761 .halt_check = BRANCH_HALT_VOTED,
2762 .hwcg_reg = 0xc7008,
2765 .enable_reg = 0xc7008,
2766 .enable_mask = BIT(0),
2767 .hw.init = &(const struct clk_init_data){
2768 .name = "gcc_qmip_disp1_ahb_clk",
2769 .ops = &clk_branch2_ops,
2774 static struct clk_branch gcc_qmip_disp1_rot_ahb_clk = {
2775 .halt_reg = 0xc700c,
2776 .halt_check = BRANCH_HALT_VOTED,
2778 .enable_reg = 0xc700c,
2779 .enable_mask = BIT(0),
2780 .hw.init = &(const struct clk_init_data){
2781 .name = "gcc_qmip_disp1_rot_ahb_clk",
2782 .ops = &clk_branch2_ops,
2787 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2788 .halt_reg = 0x33008,
2789 .halt_check = BRANCH_HALT_VOTED,
2790 .hwcg_reg = 0x33008,
2793 .enable_reg = 0x33008,
2794 .enable_mask = BIT(0),
2795 .hw.init = &(const struct clk_init_data){
2796 .name = "gcc_qmip_disp_ahb_clk",
2797 .ops = &clk_branch2_ops,
2802 static struct clk_branch gcc_qmip_disp_rot_ahb_clk = {
2803 .halt_reg = 0x3300c,
2804 .halt_check = BRANCH_HALT_VOTED,
2806 .enable_reg = 0x3300c,
2807 .enable_mask = BIT(0),
2808 .hw.init = &(const struct clk_init_data){
2809 .name = "gcc_qmip_disp_rot_ahb_clk",
2810 .ops = &clk_branch2_ops,
2815 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2816 .halt_reg = 0x34008,
2817 .halt_check = BRANCH_HALT_VOTED,
2818 .hwcg_reg = 0x34008,
2821 .enable_reg = 0x34008,
2822 .enable_mask = BIT(0),
2823 .hw.init = &(const struct clk_init_data){
2824 .name = "gcc_qmip_video_cvp_ahb_clk",
2825 .ops = &clk_branch2_ops,
2830 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2831 .halt_reg = 0x3400c,
2832 .halt_check = BRANCH_HALT_VOTED,
2833 .hwcg_reg = 0x3400c,
2836 .enable_reg = 0x3400c,
2837 .enable_mask = BIT(0),
2838 .hw.init = &(const struct clk_init_data){
2839 .name = "gcc_qmip_video_vcodec_ahb_clk",
2840 .ops = &clk_branch2_ops,
2845 static struct clk_branch gcc_qmip_video_vcpu_ahb_clk = {
2846 .halt_reg = 0x34010,
2847 .halt_check = BRANCH_HALT_VOTED,
2848 .hwcg_reg = 0x34010,
2851 .enable_reg = 0x34010,
2852 .enable_mask = BIT(0),
2853 .hw.init = &(const struct clk_init_data){
2854 .name = "gcc_qmip_video_vcpu_ahb_clk",
2855 .ops = &clk_branch2_ops,
2860 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2861 .halt_reg = 0x23018,
2862 .halt_check = BRANCH_HALT_VOTED,
2864 .enable_reg = 0x4b008,
2865 .enable_mask = BIT(9),
2866 .hw.init = &(const struct clk_init_data){
2867 .name = "gcc_qupv3_wrap0_core_2x_clk",
2868 .ops = &clk_branch2_ops,
2873 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2874 .halt_reg = 0x2300c,
2875 .halt_check = BRANCH_HALT_VOTED,
2877 .enable_reg = 0x4b008,
2878 .enable_mask = BIT(8),
2879 .hw.init = &(const struct clk_init_data){
2880 .name = "gcc_qupv3_wrap0_core_clk",
2881 .ops = &clk_branch2_ops,
2886 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2887 .halt_reg = 0x2314c,
2888 .halt_check = BRANCH_HALT_VOTED,
2890 .enable_reg = 0x4b008,
2891 .enable_mask = BIT(10),
2892 .hw.init = &(const struct clk_init_data){
2893 .name = "gcc_qupv3_wrap0_s0_clk",
2894 .parent_hws = (const struct clk_hw*[]){
2895 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2898 .flags = CLK_SET_RATE_PARENT,
2899 .ops = &clk_branch2_ops,
2904 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2905 .halt_reg = 0x23280,
2906 .halt_check = BRANCH_HALT_VOTED,
2908 .enable_reg = 0x4b008,
2909 .enable_mask = BIT(11),
2910 .hw.init = &(const struct clk_init_data){
2911 .name = "gcc_qupv3_wrap0_s1_clk",
2912 .parent_hws = (const struct clk_hw*[]){
2913 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2916 .flags = CLK_SET_RATE_PARENT,
2917 .ops = &clk_branch2_ops,
2922 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2923 .halt_reg = 0x233b4,
2924 .halt_check = BRANCH_HALT_VOTED,
2926 .enable_reg = 0x4b008,
2927 .enable_mask = BIT(12),
2928 .hw.init = &(const struct clk_init_data){
2929 .name = "gcc_qupv3_wrap0_s2_clk",
2930 .parent_hws = (const struct clk_hw*[]){
2931 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2934 .flags = CLK_SET_RATE_PARENT,
2935 .ops = &clk_branch2_ops,
2940 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2941 .halt_reg = 0x234e8,
2942 .halt_check = BRANCH_HALT_VOTED,
2944 .enable_reg = 0x4b008,
2945 .enable_mask = BIT(13),
2946 .hw.init = &(const struct clk_init_data){
2947 .name = "gcc_qupv3_wrap0_s3_clk",
2948 .parent_hws = (const struct clk_hw*[]){
2949 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2952 .flags = CLK_SET_RATE_PARENT,
2953 .ops = &clk_branch2_ops,
2958 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2959 .halt_reg = 0x2361c,
2960 .halt_check = BRANCH_HALT_VOTED,
2962 .enable_reg = 0x4b008,
2963 .enable_mask = BIT(14),
2964 .hw.init = &(const struct clk_init_data){
2965 .name = "gcc_qupv3_wrap0_s4_clk",
2966 .parent_hws = (const struct clk_hw*[]){
2967 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2970 .flags = CLK_SET_RATE_PARENT,
2971 .ops = &clk_branch2_ops,
2976 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2977 .halt_reg = 0x23750,
2978 .halt_check = BRANCH_HALT_VOTED,
2980 .enable_reg = 0x4b008,
2981 .enable_mask = BIT(15),
2982 .hw.init = &(const struct clk_init_data){
2983 .name = "gcc_qupv3_wrap0_s5_clk",
2984 .parent_hws = (const struct clk_hw*[]){
2985 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2988 .flags = CLK_SET_RATE_PARENT,
2989 .ops = &clk_branch2_ops,
2994 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2995 .halt_reg = 0x23884,
2996 .halt_check = BRANCH_HALT_VOTED,
2998 .enable_reg = 0x4b008,
2999 .enable_mask = BIT(16),
3000 .hw.init = &(const struct clk_init_data){
3001 .name = "gcc_qupv3_wrap0_s6_clk",
3002 .parent_hws = (const struct clk_hw*[]){
3003 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
3006 .flags = CLK_SET_RATE_PARENT,
3007 .ops = &clk_branch2_ops,
3012 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
3013 .halt_reg = 0x24018,
3014 .halt_check = BRANCH_HALT_VOTED,
3016 .enable_reg = 0x4b008,
3017 .enable_mask = BIT(18),
3018 .hw.init = &(const struct clk_init_data){
3019 .name = "gcc_qupv3_wrap1_core_2x_clk",
3020 .ops = &clk_branch2_ops,
3025 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
3026 .halt_reg = 0x2400c,
3027 .halt_check = BRANCH_HALT_VOTED,
3029 .enable_reg = 0x4b008,
3030 .enable_mask = BIT(19),
3031 .hw.init = &(const struct clk_init_data){
3032 .name = "gcc_qupv3_wrap1_core_clk",
3033 .ops = &clk_branch2_ops,
3038 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
3039 .halt_reg = 0x2414c,
3040 .halt_check = BRANCH_HALT_VOTED,
3042 .enable_reg = 0x4b008,
3043 .enable_mask = BIT(22),
3044 .hw.init = &(const struct clk_init_data){
3045 .name = "gcc_qupv3_wrap1_s0_clk",
3046 .parent_hws = (const struct clk_hw*[]){
3047 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
3050 .flags = CLK_SET_RATE_PARENT,
3051 .ops = &clk_branch2_ops,
3056 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
3057 .halt_reg = 0x24280,
3058 .halt_check = BRANCH_HALT_VOTED,
3060 .enable_reg = 0x4b008,
3061 .enable_mask = BIT(23),
3062 .hw.init = &(const struct clk_init_data){
3063 .name = "gcc_qupv3_wrap1_s1_clk",
3064 .parent_hws = (const struct clk_hw*[]){
3065 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
3068 .flags = CLK_SET_RATE_PARENT,
3069 .ops = &clk_branch2_ops,
3074 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
3075 .halt_reg = 0x243b4,
3076 .halt_check = BRANCH_HALT_VOTED,
3078 .enable_reg = 0x4b008,
3079 .enable_mask = BIT(24),
3080 .hw.init = &(const struct clk_init_data){
3081 .name = "gcc_qupv3_wrap1_s2_clk",
3082 .parent_hws = (const struct clk_hw*[]){
3083 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
3086 .flags = CLK_SET_RATE_PARENT,
3087 .ops = &clk_branch2_ops,
3092 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
3093 .halt_reg = 0x244e8,
3094 .halt_check = BRANCH_HALT_VOTED,
3096 .enable_reg = 0x4b008,
3097 .enable_mask = BIT(25),
3098 .hw.init = &(const struct clk_init_data){
3099 .name = "gcc_qupv3_wrap1_s3_clk",
3100 .parent_hws = (const struct clk_hw*[]){
3101 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
3104 .flags = CLK_SET_RATE_PARENT,
3105 .ops = &clk_branch2_ops,
3110 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
3111 .halt_reg = 0x2461c,
3112 .halt_check = BRANCH_HALT_VOTED,
3114 .enable_reg = 0x4b008,
3115 .enable_mask = BIT(26),
3116 .hw.init = &(const struct clk_init_data){
3117 .name = "gcc_qupv3_wrap1_s4_clk",
3118 .parent_hws = (const struct clk_hw*[]){
3119 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
3122 .flags = CLK_SET_RATE_PARENT,
3123 .ops = &clk_branch2_ops,
3128 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
3129 .halt_reg = 0x24750,
3130 .halt_check = BRANCH_HALT_VOTED,
3132 .enable_reg = 0x4b008,
3133 .enable_mask = BIT(27),
3134 .hw.init = &(const struct clk_init_data){
3135 .name = "gcc_qupv3_wrap1_s5_clk",
3136 .parent_hws = (const struct clk_hw*[]){
3137 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
3140 .flags = CLK_SET_RATE_PARENT,
3141 .ops = &clk_branch2_ops,
3146 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
3147 .halt_reg = 0x24884,
3148 .halt_check = BRANCH_HALT_VOTED,
3150 .enable_reg = 0x4b018,
3151 .enable_mask = BIT(27),
3152 .hw.init = &(const struct clk_init_data){
3153 .name = "gcc_qupv3_wrap1_s6_clk",
3154 .parent_hws = (const struct clk_hw*[]){
3155 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
3158 .flags = CLK_SET_RATE_PARENT,
3159 .ops = &clk_branch2_ops,
3164 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
3165 .halt_reg = 0x2a018,
3166 .halt_check = BRANCH_HALT_VOTED,
3168 .enable_reg = 0x4b010,
3169 .enable_mask = BIT(3),
3170 .hw.init = &(const struct clk_init_data){
3171 .name = "gcc_qupv3_wrap2_core_2x_clk",
3172 .ops = &clk_branch2_ops,
3177 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
3178 .halt_reg = 0x2a00c,
3179 .halt_check = BRANCH_HALT_VOTED,
3181 .enable_reg = 0x4b010,
3182 .enable_mask = BIT(0),
3183 .hw.init = &(const struct clk_init_data){
3184 .name = "gcc_qupv3_wrap2_core_clk",
3185 .ops = &clk_branch2_ops,
3190 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
3191 .halt_reg = 0x2a14c,
3192 .halt_check = BRANCH_HALT_VOTED,
3194 .enable_reg = 0x4b010,
3195 .enable_mask = BIT(4),
3196 .hw.init = &(const struct clk_init_data){
3197 .name = "gcc_qupv3_wrap2_s0_clk",
3198 .parent_hws = (const struct clk_hw*[]){
3199 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
3202 .flags = CLK_SET_RATE_PARENT,
3203 .ops = &clk_branch2_ops,
3208 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
3209 .halt_reg = 0x2a280,
3210 .halt_check = BRANCH_HALT_VOTED,
3212 .enable_reg = 0x4b010,
3213 .enable_mask = BIT(5),
3214 .hw.init = &(const struct clk_init_data){
3215 .name = "gcc_qupv3_wrap2_s1_clk",
3216 .parent_hws = (const struct clk_hw*[]){
3217 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
3220 .flags = CLK_SET_RATE_PARENT,
3221 .ops = &clk_branch2_ops,
3226 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
3227 .halt_reg = 0x2a3b4,
3228 .halt_check = BRANCH_HALT_VOTED,
3230 .enable_reg = 0x4b010,
3231 .enable_mask = BIT(6),
3232 .hw.init = &(const struct clk_init_data){
3233 .name = "gcc_qupv3_wrap2_s2_clk",
3234 .parent_hws = (const struct clk_hw*[]){
3235 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
3238 .flags = CLK_SET_RATE_PARENT,
3239 .ops = &clk_branch2_ops,
3244 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
3245 .halt_reg = 0x2a4e8,
3246 .halt_check = BRANCH_HALT_VOTED,
3248 .enable_reg = 0x4b010,
3249 .enable_mask = BIT(7),
3250 .hw.init = &(const struct clk_init_data){
3251 .name = "gcc_qupv3_wrap2_s3_clk",
3252 .parent_hws = (const struct clk_hw*[]){
3253 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
3256 .flags = CLK_SET_RATE_PARENT,
3257 .ops = &clk_branch2_ops,
3262 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
3263 .halt_reg = 0x2a61c,
3264 .halt_check = BRANCH_HALT_VOTED,
3266 .enable_reg = 0x4b010,
3267 .enable_mask = BIT(8),
3268 .hw.init = &(const struct clk_init_data){
3269 .name = "gcc_qupv3_wrap2_s4_clk",
3270 .parent_hws = (const struct clk_hw*[]){
3271 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
3274 .flags = CLK_SET_RATE_PARENT,
3275 .ops = &clk_branch2_ops,
3280 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
3281 .halt_reg = 0x2a750,
3282 .halt_check = BRANCH_HALT_VOTED,
3284 .enable_reg = 0x4b010,
3285 .enable_mask = BIT(9),
3286 .hw.init = &(const struct clk_init_data){
3287 .name = "gcc_qupv3_wrap2_s5_clk",
3288 .parent_hws = (const struct clk_hw*[]){
3289 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
3292 .flags = CLK_SET_RATE_PARENT,
3293 .ops = &clk_branch2_ops,
3298 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
3299 .halt_reg = 0x2a884,
3300 .halt_check = BRANCH_HALT_VOTED,
3302 .enable_reg = 0x4b018,
3303 .enable_mask = BIT(29),
3304 .hw.init = &(const struct clk_init_data){
3305 .name = "gcc_qupv3_wrap2_s6_clk",
3306 .parent_hws = (const struct clk_hw*[]){
3307 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
3310 .flags = CLK_SET_RATE_PARENT,
3311 .ops = &clk_branch2_ops,
3316 static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {
3317 .halt_reg = 0xc4018,
3318 .halt_check = BRANCH_HALT_VOTED,
3320 .enable_reg = 0x4b000,
3321 .enable_mask = BIT(24),
3322 .hw.init = &(const struct clk_init_data){
3323 .name = "gcc_qupv3_wrap3_core_2x_clk",
3324 .ops = &clk_branch2_ops,
3329 static struct clk_branch gcc_qupv3_wrap3_core_clk = {
3330 .halt_reg = 0xc400c,
3331 .halt_check = BRANCH_HALT_VOTED,
3333 .enable_reg = 0x4b000,
3334 .enable_mask = BIT(23),
3335 .hw.init = &(const struct clk_init_data){
3336 .name = "gcc_qupv3_wrap3_core_clk",
3337 .ops = &clk_branch2_ops,
3342 static struct clk_branch gcc_qupv3_wrap3_qspi_clk = {
3343 .halt_reg = 0xc4280,
3344 .halt_check = BRANCH_HALT_VOTED,
3346 .enable_reg = 0x4b000,
3347 .enable_mask = BIT(26),
3348 .hw.init = &(const struct clk_init_data){
3349 .name = "gcc_qupv3_wrap3_qspi_clk",
3350 .parent_hws = (const struct clk_hw*[]){
3351 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
3354 .flags = CLK_SET_RATE_PARENT,
3355 .ops = &clk_branch2_ops,
3360 static struct clk_branch gcc_qupv3_wrap3_s0_clk = {
3361 .halt_reg = 0xc414c,
3362 .halt_check = BRANCH_HALT_VOTED,
3364 .enable_reg = 0x4b000,
3365 .enable_mask = BIT(25),
3366 .hw.init = &(const struct clk_init_data){
3367 .name = "gcc_qupv3_wrap3_s0_clk",
3368 .parent_hws = (const struct clk_hw*[]){
3369 &gcc_qupv3_wrap3_s0_div_clk_src.clkr.hw,
3372 .flags = CLK_SET_RATE_PARENT,
3373 .ops = &clk_branch2_ops,
3378 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3379 .halt_reg = 0x23004,
3380 .halt_check = BRANCH_HALT_VOTED,
3381 .hwcg_reg = 0x23004,
3384 .enable_reg = 0x4b008,
3385 .enable_mask = BIT(6),
3386 .hw.init = &(const struct clk_init_data){
3387 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
3388 .ops = &clk_branch2_ops,
3393 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3394 .halt_reg = 0x23008,
3395 .halt_check = BRANCH_HALT_VOTED,
3396 .hwcg_reg = 0x23008,
3399 .enable_reg = 0x4b008,
3400 .enable_mask = BIT(7),
3401 .hw.init = &(const struct clk_init_data){
3402 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
3403 .ops = &clk_branch2_ops,
3408 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3409 .halt_reg = 0x24004,
3410 .halt_check = BRANCH_HALT_VOTED,
3411 .hwcg_reg = 0x24004,
3414 .enable_reg = 0x4b008,
3415 .enable_mask = BIT(20),
3416 .hw.init = &(const struct clk_init_data){
3417 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
3418 .ops = &clk_branch2_ops,
3423 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3424 .halt_reg = 0x24008,
3425 .halt_check = BRANCH_HALT_VOTED,
3426 .hwcg_reg = 0x24008,
3429 .enable_reg = 0x4b008,
3430 .enable_mask = BIT(21),
3431 .hw.init = &(const struct clk_init_data){
3432 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
3433 .ops = &clk_branch2_ops,
3438 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
3439 .halt_reg = 0x2a004,
3440 .halt_check = BRANCH_HALT_VOTED,
3441 .hwcg_reg = 0x2a004,
3444 .enable_reg = 0x4b010,
3445 .enable_mask = BIT(2),
3446 .hw.init = &(const struct clk_init_data){
3447 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
3448 .ops = &clk_branch2_ops,
3453 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
3454 .halt_reg = 0x2a008,
3455 .halt_check = BRANCH_HALT_VOTED,
3456 .hwcg_reg = 0x2a008,
3459 .enable_reg = 0x4b010,
3460 .enable_mask = BIT(1),
3461 .hw.init = &(const struct clk_init_data){
3462 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
3463 .ops = &clk_branch2_ops,
3468 static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {
3469 .halt_reg = 0xc4004,
3470 .halt_check = BRANCH_HALT_VOTED,
3471 .hwcg_reg = 0xc4004,
3474 .enable_reg = 0x4b000,
3475 .enable_mask = BIT(27),
3476 .hw.init = &(const struct clk_init_data){
3477 .name = "gcc_qupv3_wrap_3_m_ahb_clk",
3478 .ops = &clk_branch2_ops,
3483 static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {
3484 .halt_reg = 0xc4008,
3485 .halt_check = BRANCH_HALT_VOTED,
3486 .hwcg_reg = 0xc4008,
3489 .enable_reg = 0x4b000,
3490 .enable_mask = BIT(20),
3491 .hw.init = &(const struct clk_init_data){
3492 .name = "gcc_qupv3_wrap_3_s_ahb_clk",
3493 .ops = &clk_branch2_ops,
3498 static struct clk_branch gcc_sdcc1_ahb_clk = {
3499 .halt_reg = 0x2000c,
3500 .halt_check = BRANCH_HALT,
3502 .enable_reg = 0x2000c,
3503 .enable_mask = BIT(0),
3504 .hw.init = &(const struct clk_init_data){
3505 .name = "gcc_sdcc1_ahb_clk",
3506 .ops = &clk_branch2_ops,
3511 static struct clk_branch gcc_sdcc1_apps_clk = {
3512 .halt_reg = 0x20004,
3513 .halt_check = BRANCH_HALT,
3515 .enable_reg = 0x20004,
3516 .enable_mask = BIT(0),
3517 .hw.init = &(const struct clk_init_data){
3518 .name = "gcc_sdcc1_apps_clk",
3519 .parent_hws = (const struct clk_hw*[]){
3520 &gcc_sdcc1_apps_clk_src.clkr.hw,
3523 .flags = CLK_SET_RATE_PARENT,
3524 .ops = &clk_branch2_ops,
3529 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3530 .halt_reg = 0x20044,
3531 .halt_check = BRANCH_HALT_VOTED,
3532 .hwcg_reg = 0x20044,
3535 .enable_reg = 0x20044,
3536 .enable_mask = BIT(0),
3537 .hw.init = &(const struct clk_init_data){
3538 .name = "gcc_sdcc1_ice_core_clk",
3539 .parent_hws = (const struct clk_hw*[]){
3540 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
3543 .flags = CLK_SET_RATE_PARENT,
3544 .ops = &clk_branch2_ops,
3549 static struct clk_branch gcc_sgmi_clkref_en = {
3550 .halt_reg = 0x9c034,
3551 .halt_check = BRANCH_HALT_DELAY,
3553 .enable_reg = 0x9c034,
3554 .enable_mask = BIT(0),
3555 .hw.init = &(const struct clk_init_data){
3556 .name = "gcc_sgmi_clkref_en",
3557 .ops = &clk_branch2_ops,
3562 static struct clk_branch gcc_tscss_ahb_clk = {
3563 .halt_reg = 0x21024,
3564 .halt_check = BRANCH_HALT,
3566 .enable_reg = 0x21024,
3567 .enable_mask = BIT(0),
3568 .hw.init = &(const struct clk_init_data){
3569 .name = "gcc_tscss_ahb_clk",
3570 .ops = &clk_branch2_ops,
3575 static struct clk_branch gcc_tscss_etu_clk = {
3576 .halt_reg = 0x21020,
3577 .halt_check = BRANCH_HALT,
3579 .enable_reg = 0x21020,
3580 .enable_mask = BIT(0),
3581 .hw.init = &(const struct clk_init_data){
3582 .name = "gcc_tscss_etu_clk",
3583 .ops = &clk_branch2_ops,
3588 static struct clk_branch gcc_tscss_global_cntr_clk = {
3589 .halt_reg = 0x21004,
3590 .halt_check = BRANCH_HALT_VOTED,
3592 .enable_reg = 0x21004,
3593 .enable_mask = BIT(0),
3594 .hw.init = &(const struct clk_init_data){
3595 .name = "gcc_tscss_global_cntr_clk",
3596 .parent_hws = (const struct clk_hw*[]){
3597 &gcc_tscss_cntr_clk_src.clkr.hw,
3600 .flags = CLK_SET_RATE_PARENT,
3601 .ops = &clk_branch2_ops,
3606 static struct clk_branch gcc_ufs_card_ahb_clk = {
3607 .halt_reg = 0x81020,
3608 .halt_check = BRANCH_HALT_VOTED,
3609 .hwcg_reg = 0x81020,
3612 .enable_reg = 0x81020,
3613 .enable_mask = BIT(0),
3614 .hw.init = &(const struct clk_init_data){
3615 .name = "gcc_ufs_card_ahb_clk",
3616 .ops = &clk_branch2_ops,
3621 static struct clk_branch gcc_ufs_card_axi_clk = {
3622 .halt_reg = 0x81018,
3623 .halt_check = BRANCH_HALT_VOTED,
3624 .hwcg_reg = 0x81018,
3627 .enable_reg = 0x81018,
3628 .enable_mask = BIT(0),
3629 .hw.init = &(const struct clk_init_data){
3630 .name = "gcc_ufs_card_axi_clk",
3631 .parent_hws = (const struct clk_hw*[]){
3632 &gcc_ufs_card_axi_clk_src.clkr.hw,
3635 .flags = CLK_SET_RATE_PARENT,
3636 .ops = &clk_branch2_ops,
3641 static struct clk_branch gcc_ufs_card_ice_core_clk = {
3642 .halt_reg = 0x8106c,
3643 .halt_check = BRANCH_HALT_VOTED,
3644 .hwcg_reg = 0x8106c,
3647 .enable_reg = 0x8106c,
3648 .enable_mask = BIT(0),
3649 .hw.init = &(const struct clk_init_data){
3650 .name = "gcc_ufs_card_ice_core_clk",
3651 .parent_hws = (const struct clk_hw*[]){
3652 &gcc_ufs_card_ice_core_clk_src.clkr.hw,
3655 .flags = CLK_SET_RATE_PARENT,
3656 .ops = &clk_branch2_ops,
3661 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
3662 .halt_reg = 0x810a4,
3663 .halt_check = BRANCH_HALT_VOTED,
3664 .hwcg_reg = 0x810a4,
3667 .enable_reg = 0x810a4,
3668 .enable_mask = BIT(0),
3669 .hw.init = &(const struct clk_init_data){
3670 .name = "gcc_ufs_card_phy_aux_clk",
3671 .parent_hws = (const struct clk_hw*[]){
3672 &gcc_ufs_card_phy_aux_clk_src.clkr.hw,
3675 .flags = CLK_SET_RATE_PARENT,
3676 .ops = &clk_branch2_ops,
3681 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
3682 .halt_reg = 0x81028,
3683 .halt_check = BRANCH_HALT_DELAY,
3685 .enable_reg = 0x81028,
3686 .enable_mask = BIT(0),
3687 .hw.init = &(const struct clk_init_data){
3688 .name = "gcc_ufs_card_rx_symbol_0_clk",
3689 .parent_hws = (const struct clk_hw*[]){
3690 &gcc_ufs_card_rx_symbol_0_clk_src.clkr.hw,
3693 .flags = CLK_SET_RATE_PARENT,
3694 .ops = &clk_branch2_ops,
3699 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
3700 .halt_reg = 0x810c0,
3701 .halt_check = BRANCH_HALT_DELAY,
3703 .enable_reg = 0x810c0,
3704 .enable_mask = BIT(0),
3705 .hw.init = &(const struct clk_init_data){
3706 .name = "gcc_ufs_card_rx_symbol_1_clk",
3707 .parent_hws = (const struct clk_hw*[]){
3708 &gcc_ufs_card_rx_symbol_1_clk_src.clkr.hw,
3711 .flags = CLK_SET_RATE_PARENT,
3712 .ops = &clk_branch2_ops,
3717 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
3718 .halt_reg = 0x81024,
3719 .halt_check = BRANCH_HALT_DELAY,
3721 .enable_reg = 0x81024,
3722 .enable_mask = BIT(0),
3723 .hw.init = &(const struct clk_init_data){
3724 .name = "gcc_ufs_card_tx_symbol_0_clk",
3725 .parent_hws = (const struct clk_hw*[]){
3726 &gcc_ufs_card_tx_symbol_0_clk_src.clkr.hw,
3729 .flags = CLK_SET_RATE_PARENT,
3730 .ops = &clk_branch2_ops,
3735 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
3736 .halt_reg = 0x81064,
3737 .halt_check = BRANCH_HALT_VOTED,
3738 .hwcg_reg = 0x81064,
3741 .enable_reg = 0x81064,
3742 .enable_mask = BIT(0),
3743 .hw.init = &(const struct clk_init_data){
3744 .name = "gcc_ufs_card_unipro_core_clk",
3745 .parent_hws = (const struct clk_hw*[]){
3746 &gcc_ufs_card_unipro_core_clk_src.clkr.hw,
3749 .flags = CLK_SET_RATE_PARENT,
3750 .ops = &clk_branch2_ops,
3755 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3756 .halt_reg = 0x83020,
3757 .halt_check = BRANCH_HALT_VOTED,
3758 .hwcg_reg = 0x83020,
3761 .enable_reg = 0x83020,
3762 .enable_mask = BIT(0),
3763 .hw.init = &(const struct clk_init_data){
3764 .name = "gcc_ufs_phy_ahb_clk",
3765 .ops = &clk_branch2_ops,
3770 static struct clk_branch gcc_ufs_phy_axi_clk = {
3771 .halt_reg = 0x83018,
3772 .halt_check = BRANCH_HALT_VOTED,
3773 .hwcg_reg = 0x83018,
3776 .enable_reg = 0x83018,
3777 .enable_mask = BIT(0),
3778 .hw.init = &(const struct clk_init_data){
3779 .name = "gcc_ufs_phy_axi_clk",
3780 .parent_hws = (const struct clk_hw*[]){
3781 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3784 .flags = CLK_SET_RATE_PARENT,
3785 .ops = &clk_branch2_ops,
3790 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3791 .halt_reg = 0x8306c,
3792 .halt_check = BRANCH_HALT_VOTED,
3793 .hwcg_reg = 0x8306c,
3796 .enable_reg = 0x8306c,
3797 .enable_mask = BIT(0),
3798 .hw.init = &(const struct clk_init_data){
3799 .name = "gcc_ufs_phy_ice_core_clk",
3800 .parent_hws = (const struct clk_hw*[]){
3801 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3804 .flags = CLK_SET_RATE_PARENT,
3805 .ops = &clk_branch2_ops,
3810 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3811 .halt_reg = 0x830a4,
3812 .halt_check = BRANCH_HALT_VOTED,
3813 .hwcg_reg = 0x830a4,
3816 .enable_reg = 0x830a4,
3817 .enable_mask = BIT(0),
3818 .hw.init = &(const struct clk_init_data){
3819 .name = "gcc_ufs_phy_phy_aux_clk",
3820 .parent_hws = (const struct clk_hw*[]){
3821 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3824 .flags = CLK_SET_RATE_PARENT,
3825 .ops = &clk_branch2_ops,
3830 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3831 .halt_reg = 0x83028,
3832 .halt_check = BRANCH_HALT_DELAY,
3834 .enable_reg = 0x83028,
3835 .enable_mask = BIT(0),
3836 .hw.init = &(const struct clk_init_data){
3837 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3838 .parent_hws = (const struct clk_hw*[]){
3839 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
3842 .flags = CLK_SET_RATE_PARENT,
3843 .ops = &clk_branch2_ops,
3848 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3849 .halt_reg = 0x830c0,
3850 .halt_check = BRANCH_HALT_DELAY,
3852 .enable_reg = 0x830c0,
3853 .enable_mask = BIT(0),
3854 .hw.init = &(const struct clk_init_data){
3855 .name = "gcc_ufs_phy_rx_symbol_1_clk",
3856 .parent_hws = (const struct clk_hw*[]){
3857 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
3860 .flags = CLK_SET_RATE_PARENT,
3861 .ops = &clk_branch2_ops,
3866 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3867 .halt_reg = 0x83024,
3868 .halt_check = BRANCH_HALT_DELAY,
3870 .enable_reg = 0x83024,
3871 .enable_mask = BIT(0),
3872 .hw.init = &(const struct clk_init_data){
3873 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3874 .parent_hws = (const struct clk_hw*[]){
3875 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
3878 .flags = CLK_SET_RATE_PARENT,
3879 .ops = &clk_branch2_ops,
3884 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3885 .halt_reg = 0x83064,
3886 .halt_check = BRANCH_HALT_VOTED,
3887 .hwcg_reg = 0x83064,
3890 .enable_reg = 0x83064,
3891 .enable_mask = BIT(0),
3892 .hw.init = &(const struct clk_init_data){
3893 .name = "gcc_ufs_phy_unipro_core_clk",
3894 .parent_hws = (const struct clk_hw*[]){
3895 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3898 .flags = CLK_SET_RATE_PARENT,
3899 .ops = &clk_branch2_ops,
3904 static struct clk_branch gcc_usb20_master_clk = {
3905 .halt_reg = 0x1c018,
3906 .halt_check = BRANCH_HALT,
3908 .enable_reg = 0x1c018,
3909 .enable_mask = BIT(0),
3910 .hw.init = &(const struct clk_init_data){
3911 .name = "gcc_usb20_master_clk",
3912 .parent_hws = (const struct clk_hw*[]){
3913 &gcc_usb20_master_clk_src.clkr.hw,
3916 .flags = CLK_SET_RATE_PARENT,
3917 .ops = &clk_branch2_ops,
3922 static struct clk_branch gcc_usb20_mock_utmi_clk = {
3923 .halt_reg = 0x1c024,
3924 .halt_check = BRANCH_HALT,
3926 .enable_reg = 0x1c024,
3927 .enable_mask = BIT(0),
3928 .hw.init = &(const struct clk_init_data){
3929 .name = "gcc_usb20_mock_utmi_clk",
3930 .parent_hws = (const struct clk_hw*[]){
3931 &gcc_usb20_mock_utmi_postdiv_clk_src.clkr.hw,
3934 .flags = CLK_SET_RATE_PARENT,
3935 .ops = &clk_branch2_ops,
3940 static struct clk_branch gcc_usb20_sleep_clk = {
3941 .halt_reg = 0x1c020,
3942 .halt_check = BRANCH_HALT,
3944 .enable_reg = 0x1c020,
3945 .enable_mask = BIT(0),
3946 .hw.init = &(const struct clk_init_data){
3947 .name = "gcc_usb20_sleep_clk",
3948 .ops = &clk_branch2_ops,
3953 static struct clk_branch gcc_usb30_prim_master_clk = {
3954 .halt_reg = 0x1b018,
3955 .halt_check = BRANCH_HALT,
3957 .enable_reg = 0x1b018,
3958 .enable_mask = BIT(0),
3959 .hw.init = &(const struct clk_init_data){
3960 .name = "gcc_usb30_prim_master_clk",
3961 .parent_hws = (const struct clk_hw*[]){
3962 &gcc_usb30_prim_master_clk_src.clkr.hw,
3965 .flags = CLK_SET_RATE_PARENT,
3966 .ops = &clk_branch2_ops,
3971 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3972 .halt_reg = 0x1b024,
3973 .halt_check = BRANCH_HALT,
3975 .enable_reg = 0x1b024,
3976 .enable_mask = BIT(0),
3977 .hw.init = &(const struct clk_init_data){
3978 .name = "gcc_usb30_prim_mock_utmi_clk",
3979 .parent_hws = (const struct clk_hw*[]){
3980 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3983 .flags = CLK_SET_RATE_PARENT,
3984 .ops = &clk_branch2_ops,
3989 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3990 .halt_reg = 0x1b020,
3991 .halt_check = BRANCH_HALT,
3993 .enable_reg = 0x1b020,
3994 .enable_mask = BIT(0),
3995 .hw.init = &(const struct clk_init_data){
3996 .name = "gcc_usb30_prim_sleep_clk",
3997 .ops = &clk_branch2_ops,
4002 static struct clk_branch gcc_usb30_sec_master_clk = {
4003 .halt_reg = 0x2f018,
4004 .halt_check = BRANCH_HALT,
4006 .enable_reg = 0x2f018,
4007 .enable_mask = BIT(0),
4008 .hw.init = &(const struct clk_init_data){
4009 .name = "gcc_usb30_sec_master_clk",
4010 .parent_hws = (const struct clk_hw*[]){
4011 &gcc_usb30_sec_master_clk_src.clkr.hw,
4014 .flags = CLK_SET_RATE_PARENT,
4015 .ops = &clk_branch2_ops,
4020 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
4021 .halt_reg = 0x2f024,
4022 .halt_check = BRANCH_HALT,
4024 .enable_reg = 0x2f024,
4025 .enable_mask = BIT(0),
4026 .hw.init = &(const struct clk_init_data){
4027 .name = "gcc_usb30_sec_mock_utmi_clk",
4028 .parent_hws = (const struct clk_hw*[]){
4029 &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr.hw,
4032 .flags = CLK_SET_RATE_PARENT,
4033 .ops = &clk_branch2_ops,
4038 static struct clk_branch gcc_usb30_sec_sleep_clk = {
4039 .halt_reg = 0x2f020,
4040 .halt_check = BRANCH_HALT,
4042 .enable_reg = 0x2f020,
4043 .enable_mask = BIT(0),
4044 .hw.init = &(const struct clk_init_data){
4045 .name = "gcc_usb30_sec_sleep_clk",
4046 .ops = &clk_branch2_ops,
4051 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
4052 .halt_reg = 0x1b05c,
4053 .halt_check = BRANCH_HALT,
4055 .enable_reg = 0x1b05c,
4056 .enable_mask = BIT(0),
4057 .hw.init = &(const struct clk_init_data){
4058 .name = "gcc_usb3_prim_phy_aux_clk",
4059 .parent_hws = (const struct clk_hw*[]){
4060 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
4063 .flags = CLK_SET_RATE_PARENT,
4064 .ops = &clk_branch2_ops,
4069 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
4070 .halt_reg = 0x1b060,
4071 .halt_check = BRANCH_HALT,
4073 .enable_reg = 0x1b060,
4074 .enable_mask = BIT(0),
4075 .hw.init = &(const struct clk_init_data){
4076 .name = "gcc_usb3_prim_phy_com_aux_clk",
4077 .parent_hws = (const struct clk_hw*[]){
4078 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
4081 .flags = CLK_SET_RATE_PARENT,
4082 .ops = &clk_branch2_ops,
4087 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
4088 .halt_reg = 0x1b064,
4089 .halt_check = BRANCH_HALT_DELAY,
4090 .hwcg_reg = 0x1b064,
4093 .enable_reg = 0x1b064,
4094 .enable_mask = BIT(0),
4095 .hw.init = &(const struct clk_init_data){
4096 .name = "gcc_usb3_prim_phy_pipe_clk",
4097 .parent_hws = (const struct clk_hw*[]){
4098 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
4101 .flags = CLK_SET_RATE_PARENT,
4102 .ops = &clk_branch2_ops,
4107 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
4108 .halt_reg = 0x2f05c,
4109 .halt_check = BRANCH_HALT,
4111 .enable_reg = 0x2f05c,
4112 .enable_mask = BIT(0),
4113 .hw.init = &(const struct clk_init_data){
4114 .name = "gcc_usb3_sec_phy_aux_clk",
4115 .parent_hws = (const struct clk_hw*[]){
4116 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
4119 .flags = CLK_SET_RATE_PARENT,
4120 .ops = &clk_branch2_ops,
4125 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
4126 .halt_reg = 0x2f060,
4127 .halt_check = BRANCH_HALT,
4129 .enable_reg = 0x2f060,
4130 .enable_mask = BIT(0),
4131 .hw.init = &(const struct clk_init_data){
4132 .name = "gcc_usb3_sec_phy_com_aux_clk",
4133 .parent_hws = (const struct clk_hw*[]){
4134 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
4137 .flags = CLK_SET_RATE_PARENT,
4138 .ops = &clk_branch2_ops,
4143 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
4144 .halt_reg = 0x2f064,
4145 .halt_check = BRANCH_HALT_DELAY,
4147 .enable_reg = 0x2f064,
4148 .enable_mask = BIT(0),
4149 .hw.init = &(const struct clk_init_data){
4150 .name = "gcc_usb3_sec_phy_pipe_clk",
4151 .parent_hws = (const struct clk_hw*[]){
4152 &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,
4155 .flags = CLK_SET_RATE_PARENT,
4156 .ops = &clk_branch2_ops,
4161 static struct clk_branch gcc_usb_clkref_en = {
4162 .halt_reg = 0x97468,
4163 .halt_check = BRANCH_HALT_DELAY,
4165 .enable_reg = 0x97468,
4166 .enable_mask = BIT(0),
4167 .hw.init = &(const struct clk_init_data){
4168 .name = "gcc_usb_clkref_en",
4169 .ops = &clk_branch2_ops,
4174 static struct clk_branch gcc_video_axi0_clk = {
4175 .halt_reg = 0x34014,
4176 .halt_check = BRANCH_HALT_VOTED,
4177 .hwcg_reg = 0x34014,
4180 .enable_reg = 0x34014,
4181 .enable_mask = BIT(0),
4182 .hw.init = &(const struct clk_init_data){
4183 .name = "gcc_video_axi0_clk",
4184 .ops = &clk_branch2_ops,
4189 static struct clk_branch gcc_video_axi1_clk = {
4190 .halt_reg = 0x3401c,
4191 .halt_check = BRANCH_HALT_VOTED,
4192 .hwcg_reg = 0x3401c,
4195 .enable_reg = 0x3401c,
4196 .enable_mask = BIT(0),
4197 .hw.init = &(const struct clk_init_data){
4198 .name = "gcc_video_axi1_clk",
4199 .ops = &clk_branch2_ops,
4204 static struct gdsc pcie_0_gdsc = {
4206 .collapse_ctrl = 0x4b104,
4207 .collapse_mask = BIT(0),
4208 .en_rest_wait_val = 0x2,
4209 .en_few_wait_val = 0x2,
4210 .clk_dis_wait_val = 0xf,
4212 .name = "pcie_0_gdsc",
4214 .pwrsts = PWRSTS_OFF_ON,
4215 .flags = VOTABLE | RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4218 static struct gdsc pcie_1_gdsc = {
4220 .collapse_ctrl = 0x4b104,
4221 .collapse_mask = BIT(1),
4222 .en_rest_wait_val = 0x2,
4223 .en_few_wait_val = 0x2,
4224 .clk_dis_wait_val = 0xf,
4226 .name = "pcie_1_gdsc",
4228 .pwrsts = PWRSTS_OFF_ON,
4229 .flags = VOTABLE | RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4232 static struct gdsc ufs_card_gdsc = {
4234 .en_rest_wait_val = 0x2,
4235 .en_few_wait_val = 0x2,
4236 .clk_dis_wait_val = 0xf,
4238 .name = "ufs_card_gdsc",
4240 .pwrsts = PWRSTS_OFF_ON,
4241 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4244 static struct gdsc ufs_phy_gdsc = {
4246 .en_rest_wait_val = 0x2,
4247 .en_few_wait_val = 0x2,
4248 .clk_dis_wait_val = 0xf,
4250 .name = "ufs_phy_gdsc",
4252 .pwrsts = PWRSTS_OFF_ON,
4253 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4256 static struct gdsc usb20_prim_gdsc = {
4258 .en_rest_wait_val = 0x2,
4259 .en_few_wait_val = 0x2,
4260 .clk_dis_wait_val = 0xf,
4262 .name = "usb20_prim_gdsc",
4264 .pwrsts = PWRSTS_OFF_ON,
4265 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4268 static struct gdsc usb30_prim_gdsc = {
4270 .en_rest_wait_val = 0x2,
4271 .en_few_wait_val = 0x2,
4272 .clk_dis_wait_val = 0xf,
4274 .name = "usb30_prim_gdsc",
4276 .pwrsts = PWRSTS_OFF_ON,
4277 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4280 static struct gdsc usb30_sec_gdsc = {
4282 .en_rest_wait_val = 0x2,
4283 .en_few_wait_val = 0x2,
4284 .clk_dis_wait_val = 0xf,
4286 .name = "usb30_sec_gdsc",
4288 .pwrsts = PWRSTS_OFF_ON,
4289 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4292 static struct gdsc emac0_gdsc = {
4294 .en_rest_wait_val = 0x2,
4295 .en_few_wait_val = 0x2,
4296 .clk_dis_wait_val = 0xf,
4298 .name = "emac0_gdsc",
4300 .pwrsts = PWRSTS_OFF_ON,
4301 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4304 static struct gdsc emac1_gdsc = {
4306 .en_rest_wait_val = 0x2,
4307 .en_few_wait_val = 0x2,
4308 .clk_dis_wait_val = 0xf,
4310 .name = "emac1_gdsc",
4312 .pwrsts = PWRSTS_OFF_ON,
4313 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4316 static struct clk_regmap *gcc_sa8775p_clocks[] = {
4317 [GCC_AGGRE_NOC_QUPV3_AXI_CLK] = &gcc_aggre_noc_qupv3_axi_clk.clkr,
4318 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
4319 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
4320 [GCC_AGGRE_USB2_PRIM_AXI_CLK] = &gcc_aggre_usb2_prim_axi_clk.clkr,
4321 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
4322 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
4323 [GCC_AHB2PHY0_CLK] = &gcc_ahb2phy0_clk.clkr,
4324 [GCC_AHB2PHY2_CLK] = &gcc_ahb2phy2_clk.clkr,
4325 [GCC_AHB2PHY3_CLK] = &gcc_ahb2phy3_clk.clkr,
4326 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4327 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
4328 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
4329 [GCC_CAMERA_THROTTLE_XO_CLK] = &gcc_camera_throttle_xo_clk.clkr,
4330 [GCC_CFG_NOC_USB2_PRIM_AXI_CLK] = &gcc_cfg_noc_usb2_prim_axi_clk.clkr,
4331 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4332 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
4333 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4334 [GCC_DISP1_HF_AXI_CLK] = &gcc_disp1_hf_axi_clk.clkr,
4335 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4336 [GCC_EDP_REF_CLKREF_EN] = &gcc_edp_ref_clkref_en.clkr,
4337 [GCC_EMAC0_AXI_CLK] = &gcc_emac0_axi_clk.clkr,
4338 [GCC_EMAC0_PHY_AUX_CLK] = &gcc_emac0_phy_aux_clk.clkr,
4339 [GCC_EMAC0_PHY_AUX_CLK_SRC] = &gcc_emac0_phy_aux_clk_src.clkr,
4340 [GCC_EMAC0_PTP_CLK] = &gcc_emac0_ptp_clk.clkr,
4341 [GCC_EMAC0_PTP_CLK_SRC] = &gcc_emac0_ptp_clk_src.clkr,
4342 [GCC_EMAC0_RGMII_CLK] = &gcc_emac0_rgmii_clk.clkr,
4343 [GCC_EMAC0_RGMII_CLK_SRC] = &gcc_emac0_rgmii_clk_src.clkr,
4344 [GCC_EMAC0_SLV_AHB_CLK] = &gcc_emac0_slv_ahb_clk.clkr,
4345 [GCC_EMAC1_AXI_CLK] = &gcc_emac1_axi_clk.clkr,
4346 [GCC_EMAC1_PHY_AUX_CLK] = &gcc_emac1_phy_aux_clk.clkr,
4347 [GCC_EMAC1_PHY_AUX_CLK_SRC] = &gcc_emac1_phy_aux_clk_src.clkr,
4348 [GCC_EMAC1_PTP_CLK] = &gcc_emac1_ptp_clk.clkr,
4349 [GCC_EMAC1_PTP_CLK_SRC] = &gcc_emac1_ptp_clk_src.clkr,
4350 [GCC_EMAC1_RGMII_CLK] = &gcc_emac1_rgmii_clk.clkr,
4351 [GCC_EMAC1_RGMII_CLK_SRC] = &gcc_emac1_rgmii_clk_src.clkr,
4352 [GCC_EMAC1_SLV_AHB_CLK] = &gcc_emac1_slv_ahb_clk.clkr,
4353 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4354 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4355 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4356 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4357 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4358 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4359 [GCC_GP4_CLK] = &gcc_gp4_clk.clkr,
4360 [GCC_GP4_CLK_SRC] = &gcc_gp4_clk_src.clkr,
4361 [GCC_GP5_CLK] = &gcc_gp5_clk.clkr,
4362 [GCC_GP5_CLK_SRC] = &gcc_gp5_clk_src.clkr,
4363 [GCC_GPLL0] = &gcc_gpll0.clkr,
4364 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
4365 [GCC_GPLL1] = &gcc_gpll1.clkr,
4366 [GCC_GPLL4] = &gcc_gpll4.clkr,
4367 [GCC_GPLL5] = &gcc_gpll5.clkr,
4368 [GCC_GPLL7] = &gcc_gpll7.clkr,
4369 [GCC_GPLL9] = &gcc_gpll9.clkr,
4370 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4371 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4372 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4373 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4374 [GCC_GPU_TCU_THROTTLE_AHB_CLK] = &gcc_gpu_tcu_throttle_ahb_clk.clkr,
4375 [GCC_GPU_TCU_THROTTLE_CLK] = &gcc_gpu_tcu_throttle_clk.clkr,
4376 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
4377 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
4378 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
4379 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
4380 [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
4381 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
4382 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
4383 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
4384 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
4385 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
4386 [GCC_PCIE_0_PIPE_DIV_CLK_SRC] = &gcc_pcie_0_pipe_div_clk_src.clkr,
4387 [GCC_PCIE_0_PIPEDIV2_CLK] = &gcc_pcie_0_pipediv2_clk.clkr,
4388 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
4389 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
4390 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
4391 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
4392 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
4393 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
4394 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
4395 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
4396 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
4397 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
4398 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
4399 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
4400 [GCC_PCIE_1_PIPE_DIV_CLK_SRC] = &gcc_pcie_1_pipe_div_clk_src.clkr,
4401 [GCC_PCIE_1_PIPEDIV2_CLK] = &gcc_pcie_1_pipediv2_clk.clkr,
4402 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
4403 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
4404 [GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,
4405 [GCC_PCIE_THROTTLE_CFG_CLK] = &gcc_pcie_throttle_cfg_clk.clkr,
4406 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4407 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4408 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4409 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4410 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4411 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4412 [GCC_QMIP_DISP1_AHB_CLK] = &gcc_qmip_disp1_ahb_clk.clkr,
4413 [GCC_QMIP_DISP1_ROT_AHB_CLK] = &gcc_qmip_disp1_rot_ahb_clk.clkr,
4414 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4415 [GCC_QMIP_DISP_ROT_AHB_CLK] = &gcc_qmip_disp_rot_ahb_clk.clkr,
4416 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
4417 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4418 [GCC_QMIP_VIDEO_VCPU_AHB_CLK] = &gcc_qmip_video_vcpu_ahb_clk.clkr,
4419 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
4420 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
4421 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4422 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4423 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4424 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4425 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4426 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4427 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4428 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4429 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4430 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4431 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4432 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4433 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4434 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4435 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
4436 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
4437 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4438 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4439 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4440 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4441 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4442 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4443 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4444 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4445 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4446 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4447 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4448 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4449 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
4450 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
4451 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
4452 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
4453 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
4454 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
4455 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
4456 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
4457 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
4458 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
4459 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
4460 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
4461 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
4462 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
4463 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
4464 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
4465 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
4466 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
4467 [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,
4468 [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,
4469 [GCC_QUPV3_WRAP3_QSPI_CLK] = &gcc_qupv3_wrap3_qspi_clk.clkr,
4470 [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,
4471 [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,
4472 [GCC_QUPV3_WRAP3_S0_DIV_CLK_SRC] = &gcc_qupv3_wrap3_s0_div_clk_src.clkr,
4473 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4474 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4475 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4476 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4477 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
4478 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
4479 [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,
4480 [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,
4481 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4482 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4483 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
4484 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4485 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
4486 [GCC_SGMI_CLKREF_EN] = &gcc_sgmi_clkref_en.clkr,
4487 [GCC_TSCSS_AHB_CLK] = &gcc_tscss_ahb_clk.clkr,
4488 [GCC_TSCSS_CNTR_CLK_SRC] = &gcc_tscss_cntr_clk_src.clkr,
4489 [GCC_TSCSS_ETU_CLK] = &gcc_tscss_etu_clk.clkr,
4490 [GCC_TSCSS_GLOBAL_CNTR_CLK] = &gcc_tscss_global_cntr_clk.clkr,
4491 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
4492 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
4493 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
4494 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
4495 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
4496 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
4497 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
4498 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
4499 [GCC_UFS_CARD_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_card_rx_symbol_0_clk_src.clkr,
4500 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
4501 [GCC_UFS_CARD_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_card_rx_symbol_1_clk_src.clkr,
4502 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
4503 [GCC_UFS_CARD_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_card_tx_symbol_0_clk_src.clkr,
4504 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
4505 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr,
4506 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4507 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4508 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4509 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4510 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4511 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4512 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4513 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4514 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
4515 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
4516 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
4517 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4518 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
4519 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4520 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
4521 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
4522 [GCC_USB20_MASTER_CLK_SRC] = &gcc_usb20_master_clk_src.clkr,
4523 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
4524 [GCC_USB20_MOCK_UTMI_CLK_SRC] = &gcc_usb20_mock_utmi_clk_src.clkr,
4525 [GCC_USB20_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb20_mock_utmi_postdiv_clk_src.clkr,
4526 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
4527 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4528 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4529 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4530 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4531 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
4532 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4533 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
4534 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
4535 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
4536 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr,
4537 [GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr,
4538 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
4539 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
4540 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4541 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4542 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4543 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
4544 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
4545 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
4546 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
4547 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
4548 [GCC_USB3_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb3_sec_phy_pipe_clk_src.clkr,
4549 [GCC_USB_CLKREF_EN] = &gcc_usb_clkref_en.clkr,
4550 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4551 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
4554 static const struct qcom_reset_map gcc_sa8775p_resets[] = {
4555 [GCC_CAMERA_BCR] = { 0x32000 },
4556 [GCC_DISPLAY1_BCR] = { 0xc7000 },
4557 [GCC_DISPLAY_BCR] = { 0x33000 },
4558 [GCC_EMAC0_BCR] = { 0xb6000 },
4559 [GCC_EMAC1_BCR] = { 0xb4000 },
4560 [GCC_GPU_BCR] = { 0x7d000 },
4561 [GCC_MMSS_BCR] = { 0x17000 },
4562 [GCC_PCIE_0_BCR] = { 0xa9000 },
4563 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0xbf000 },
4564 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0xbf008 },
4565 [GCC_PCIE_0_PHY_BCR] = { 0xad144 },
4566 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0xbf00c },
4567 [GCC_PCIE_1_BCR] = { 0x77000 },
4568 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0xae084 },
4569 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0xae090 },
4570 [GCC_PCIE_1_PHY_BCR] = { 0xae08c },
4571 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0xae094 },
4572 [GCC_PDM_BCR] = { 0x3f000 },
4573 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x23000 },
4574 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x24000 },
4575 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x2a000 },
4576 [GCC_QUPV3_WRAPPER_3_BCR] = { 0xc4000 },
4577 [GCC_SDCC1_BCR] = { 0x20000 },
4578 [GCC_TSCSS_BCR] = { 0x21000 },
4579 [GCC_UFS_CARD_BCR] = { 0x81000 },
4580 [GCC_UFS_PHY_BCR] = { 0x83000 },
4581 [GCC_USB20_PRIM_BCR] = { 0x1c000 },
4582 [GCC_USB2_PHY_PRIM_BCR] = { 0x5c028 },
4583 [GCC_USB2_PHY_SEC_BCR] = { 0x5c02c },
4584 [GCC_USB30_PRIM_BCR] = { 0x1b000 },
4585 [GCC_USB30_SEC_BCR] = { 0x2f000 },
4586 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x5c008 },
4587 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x5c014 },
4588 [GCC_USB3_PHY_PRIM_BCR] = { 0x5c000 },
4589 [GCC_USB3_PHY_SEC_BCR] = { 0x5c00c },
4590 [GCC_USB3_PHY_TERT_BCR] = { 0x5c030 },
4591 [GCC_USB3_UNIPHY_MP0_BCR] = { 0x5c018 },
4592 [GCC_USB3_UNIPHY_MP1_BCR] = { 0x5c01c },
4593 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x5c004 },
4594 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x5c010 },
4595 [GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x5c020 },
4596 [GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x5c024 },
4597 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x76000 },
4598 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x34014, .bit = 2, .udelay = 400 },
4599 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x3401c, .bit = 2, .udelay = 400 },
4600 [GCC_VIDEO_BCR] = { 0x34000 },
4603 static struct gdsc *gcc_sa8775p_gdscs[] = {
4604 [PCIE_0_GDSC] = &pcie_0_gdsc,
4605 [PCIE_1_GDSC] = &pcie_1_gdsc,
4606 [UFS_CARD_GDSC] = &ufs_card_gdsc,
4607 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
4608 [USB20_PRIM_GDSC] = &usb20_prim_gdsc,
4609 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
4610 [USB30_SEC_GDSC] = &usb30_sec_gdsc,
4611 [EMAC0_GDSC] = &emac0_gdsc,
4612 [EMAC1_GDSC] = &emac1_gdsc,
4615 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
4616 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
4617 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
4618 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
4619 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
4620 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
4621 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
4622 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
4623 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
4624 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
4625 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
4626 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
4627 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
4628 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
4629 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
4630 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
4631 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
4632 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
4633 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
4634 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
4635 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
4636 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
4637 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s0_clk_src),
4640 static const struct regmap_config gcc_sa8775p_regmap_config = {
4644 .max_register = 0xc7018,
4648 static const struct qcom_cc_desc gcc_sa8775p_desc = {
4649 .config = &gcc_sa8775p_regmap_config,
4650 .clks = gcc_sa8775p_clocks,
4651 .num_clks = ARRAY_SIZE(gcc_sa8775p_clocks),
4652 .resets = gcc_sa8775p_resets,
4653 .num_resets = ARRAY_SIZE(gcc_sa8775p_resets),
4654 .gdscs = gcc_sa8775p_gdscs,
4655 .num_gdscs = ARRAY_SIZE(gcc_sa8775p_gdscs),
4658 static const struct of_device_id gcc_sa8775p_match_table[] = {
4659 { .compatible = "qcom,sa8775p-gcc" },
4662 MODULE_DEVICE_TABLE(of, gcc_sa8775p_match_table);
4664 static int gcc_sa8775p_probe(struct platform_device *pdev)
4666 struct regmap *regmap;
4669 regmap = qcom_cc_map(pdev, &gcc_sa8775p_desc);
4671 return PTR_ERR(regmap);
4673 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
4674 ARRAY_SIZE(gcc_dfs_clocks));
4678 /* Keep some clocks always-on */
4679 qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_CAMERA_AHB_CLK */
4680 qcom_branch_set_clk_en(regmap, 0x32020); /* GCC_CAMERA_XO_CLK */
4681 qcom_branch_set_clk_en(regmap, 0xc7004); /* GCC_DISP1_AHB_CLK */
4682 qcom_branch_set_clk_en(regmap, 0xc7018); /* GCC_DISP1_XO_CLK */
4683 qcom_branch_set_clk_en(regmap, 0x33004); /* GCC_DISP_AHB_CLK */
4684 qcom_branch_set_clk_en(regmap, 0x33018); /* GCC_DISP_XO_CLK */
4685 qcom_branch_set_clk_en(regmap, 0x7d004); /* GCC_GPU_CFG_AHB_CLK */
4686 qcom_branch_set_clk_en(regmap, 0x34004); /* GCC_VIDEO_AHB_CLK */
4687 qcom_branch_set_clk_en(regmap, 0x34024); /* GCC_VIDEO_XO_CLK */
4689 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
4690 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
4692 return qcom_cc_really_probe(&pdev->dev, &gcc_sa8775p_desc, regmap);
4695 static struct platform_driver gcc_sa8775p_driver = {
4696 .probe = gcc_sa8775p_probe,
4698 .name = "sa8775p-gcc",
4699 .of_match_table = gcc_sa8775p_match_table,
4703 static int __init gcc_sa8775p_init(void)
4705 return platform_driver_register(&gcc_sa8775p_driver);
4707 core_initcall(gcc_sa8775p_init);
4709 static void __exit gcc_sa8775p_exit(void)
4711 platform_driver_unregister(&gcc_sa8775p_driver);
4713 module_exit(gcc_sa8775p_exit);
4715 MODULE_DESCRIPTION("Qualcomm SA8775P GCC driver");
4716 MODULE_LICENSE("GPL");