Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
0004  * Copyright (c) 2020-2021, Linaro Limited
0005  */
0006 
0007 #include <linux/clk-provider.h>
0008 #include <linux/module.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/regmap.h>
0011 
0012 #include <dt-bindings/clock/qcom,gcc-sm8350.h>
0013 
0014 #include "clk-alpha-pll.h"
0015 #include "clk-branch.h"
0016 #include "clk-rcg.h"
0017 #include "clk-regmap.h"
0018 #include "clk-regmap-divider.h"
0019 #include "clk-regmap-mux.h"
0020 #include "gdsc.h"
0021 #include "reset.h"
0022 
0023 enum {
0024     P_BI_TCXO,
0025     P_CORE_BI_PLL_TEST_SE,
0026     P_GCC_GPLL0_OUT_EVEN,
0027     P_GCC_GPLL0_OUT_MAIN,
0028     P_GCC_GPLL4_OUT_MAIN,
0029     P_GCC_GPLL9_OUT_MAIN,
0030     P_PCIE_0_PIPE_CLK,
0031     P_PCIE_1_PIPE_CLK,
0032     P_SLEEP_CLK,
0033     P_UFS_CARD_RX_SYMBOL_0_CLK,
0034     P_UFS_CARD_RX_SYMBOL_1_CLK,
0035     P_UFS_CARD_TX_SYMBOL_0_CLK,
0036     P_UFS_PHY_RX_SYMBOL_0_CLK,
0037     P_UFS_PHY_RX_SYMBOL_1_CLK,
0038     P_UFS_PHY_TX_SYMBOL_0_CLK,
0039     P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
0040     P_USB3_UNI_PHY_SEC_GCC_USB30_PIPE_CLK,
0041 };
0042 
0043 static struct clk_alpha_pll gcc_gpll0 = {
0044     .offset = 0x0,
0045     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0046     .clkr = {
0047         .enable_reg = 0x52018,
0048         .enable_mask = BIT(0),
0049         .hw.init = &(struct clk_init_data){
0050             .name = "gcc_gpll0",
0051             .parent_data = &(const struct clk_parent_data){
0052                 .fw_name = "bi_tcxo",
0053             },
0054             .num_parents = 1,
0055             .ops = &clk_alpha_pll_fixed_lucid_5lpe_ops,
0056         },
0057     },
0058 };
0059 
0060 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
0061     { 0x1, 2 },
0062     { }
0063 };
0064 
0065 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
0066     .offset = 0x0,
0067     .post_div_shift = 8,
0068     .post_div_table = post_div_table_gcc_gpll0_out_even,
0069     .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
0070     .width = 4,
0071     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0072     .clkr.hw.init = &(struct clk_init_data){
0073         .name = "gcc_gpll0_out_even",
0074         .parent_hws = (const struct clk_hw*[]){
0075             &gcc_gpll0.clkr.hw,
0076         },
0077         .num_parents = 1,
0078         .ops = &clk_alpha_pll_postdiv_lucid_5lpe_ops,
0079     },
0080 };
0081 
0082 static struct clk_alpha_pll gcc_gpll4 = {
0083     .offset = 0x76000,
0084     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0085     .clkr = {
0086         .enable_reg = 0x52018,
0087         .enable_mask = BIT(4),
0088         .hw.init = &(struct clk_init_data){
0089             .name = "gcc_gpll4",
0090             .parent_data = &(const struct clk_parent_data){
0091                 .fw_name = "bi_tcxo",
0092                 .name = "bi_tcxo",
0093             },
0094             .num_parents = 1,
0095             .ops = &clk_alpha_pll_fixed_lucid_5lpe_ops,
0096         },
0097     },
0098 };
0099 
0100 static struct clk_alpha_pll gcc_gpll9 = {
0101     .offset = 0x1c000,
0102     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
0103     .clkr = {
0104         .enable_reg = 0x52018,
0105         .enable_mask = BIT(9),
0106         .hw.init = &(struct clk_init_data){
0107             .name = "gcc_gpll9",
0108             .parent_data = &(const struct clk_parent_data){
0109                 .fw_name = "bi_tcxo",
0110                 .name = "bi_tcxo",
0111             },
0112             .num_parents = 1,
0113             .ops = &clk_alpha_pll_fixed_lucid_5lpe_ops,
0114         },
0115     },
0116 };
0117 
0118 static const struct parent_map gcc_parent_map_0[] = {
0119     { P_BI_TCXO, 0 },
0120     { P_GCC_GPLL0_OUT_MAIN, 1 },
0121     { P_GCC_GPLL0_OUT_EVEN, 6 },
0122     { P_CORE_BI_PLL_TEST_SE, 7 },
0123 };
0124 
0125 static const struct clk_parent_data gcc_parent_data_0[] = {
0126     { .fw_name = "bi_tcxo" },
0127     { .hw = &gcc_gpll0.clkr.hw },
0128     { .hw = &gcc_gpll0_out_even.clkr.hw },
0129     { .fw_name = "core_bi_pll_test_se" },
0130 };
0131 
0132 static const struct parent_map gcc_parent_map_1[] = {
0133     { P_BI_TCXO, 0 },
0134     { P_GCC_GPLL0_OUT_MAIN, 1 },
0135     { P_SLEEP_CLK, 5 },
0136     { P_GCC_GPLL0_OUT_EVEN, 6 },
0137     { P_CORE_BI_PLL_TEST_SE, 7 },
0138 };
0139 
0140 static const struct clk_parent_data gcc_parent_data_1[] = {
0141     { .fw_name = "bi_tcxo" },
0142     { .hw = &gcc_gpll0.clkr.hw },
0143     { .fw_name = "sleep_clk" },
0144     { .hw = &gcc_gpll0_out_even.clkr.hw },
0145     { .fw_name = "core_bi_pll_test_se" },
0146 };
0147 
0148 static const struct parent_map gcc_parent_map_2[] = {
0149     { P_BI_TCXO, 0 },
0150     { P_SLEEP_CLK, 5 },
0151     { P_CORE_BI_PLL_TEST_SE, 7 },
0152 };
0153 
0154 static const struct clk_parent_data gcc_parent_data_2[] = {
0155     { .fw_name = "bi_tcxo" },
0156     { .fw_name = "sleep_clk" },
0157     { .fw_name = "core_bi_pll_test_se" },
0158 };
0159 
0160 static const struct parent_map gcc_parent_map_3[] = {
0161     { P_BI_TCXO, 0 },
0162     { P_CORE_BI_PLL_TEST_SE, 7 },
0163 };
0164 
0165 static const struct clk_parent_data gcc_parent_data_3[] = {
0166     { .fw_name = "bi_tcxo" },
0167     { .fw_name = "core_bi_pll_test_se" },
0168 };
0169 
0170 static const struct parent_map gcc_parent_map_4[] = {
0171     { P_PCIE_0_PIPE_CLK, 0 },
0172     { P_BI_TCXO, 2 },
0173 };
0174 
0175 static const struct clk_parent_data gcc_parent_data_4[] = {
0176     { .fw_name = "pcie_0_pipe_clk", },
0177     { .fw_name = "bi_tcxo" },
0178 };
0179 
0180 static const struct parent_map gcc_parent_map_5[] = {
0181     { P_PCIE_1_PIPE_CLK, 0 },
0182     { P_BI_TCXO, 2 },
0183 };
0184 
0185 static const struct clk_parent_data gcc_parent_data_5[] = {
0186     { .fw_name = "pcie_1_pipe_clk" },
0187     { .fw_name = "bi_tcxo" },
0188 };
0189 
0190 static const struct parent_map gcc_parent_map_6[] = {
0191     { P_BI_TCXO, 0 },
0192     { P_GCC_GPLL0_OUT_MAIN, 1 },
0193     { P_GCC_GPLL9_OUT_MAIN, 2 },
0194     { P_GCC_GPLL4_OUT_MAIN, 5 },
0195     { P_GCC_GPLL0_OUT_EVEN, 6 },
0196     { P_CORE_BI_PLL_TEST_SE, 7 },
0197 };
0198 
0199 static const struct clk_parent_data gcc_parent_data_6[] = {
0200     { .fw_name = "bi_tcxo" },
0201     { .hw = &gcc_gpll0.clkr.hw },
0202     { .hw = &gcc_gpll9.clkr.hw },
0203     { .hw = &gcc_gpll4.clkr.hw },
0204     { .hw = &gcc_gpll0_out_even.clkr.hw },
0205     { .fw_name = "core_bi_pll_test_se" },
0206 };
0207 
0208 static const struct parent_map gcc_parent_map_7[] = {
0209     { P_UFS_CARD_RX_SYMBOL_0_CLK, 0 },
0210     { P_BI_TCXO, 2 },
0211 };
0212 
0213 static const struct clk_parent_data gcc_parent_data_7[] = {
0214     { .fw_name = "ufs_card_rx_symbol_0_clk" },
0215     { .fw_name = "bi_tcxo" },
0216 };
0217 
0218 static const struct parent_map gcc_parent_map_8[] = {
0219     { P_UFS_CARD_RX_SYMBOL_1_CLK, 0 },
0220     { P_BI_TCXO, 2 },
0221 };
0222 
0223 static const struct clk_parent_data gcc_parent_data_8[] = {
0224     { .fw_name = "ufs_card_rx_symbol_1_clk" },
0225     { .fw_name = "bi_tcxo" },
0226 };
0227 
0228 static const struct parent_map gcc_parent_map_9[] = {
0229     { P_UFS_CARD_TX_SYMBOL_0_CLK, 0 },
0230     { P_BI_TCXO, 2 },
0231 };
0232 
0233 static const struct clk_parent_data gcc_parent_data_9[] = {
0234     { .fw_name = "ufs_card_tx_symbol_0_clk" },
0235     { .fw_name = "bi_tcxo" },
0236 };
0237 
0238 static const struct parent_map gcc_parent_map_10[] = {
0239     { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
0240     { P_BI_TCXO, 2 },
0241 };
0242 
0243 static const struct clk_parent_data gcc_parent_data_10[] = {
0244     { .fw_name = "ufs_phy_rx_symbol_0_clk" },
0245     { .fw_name = "bi_tcxo" },
0246 };
0247 
0248 static const struct parent_map gcc_parent_map_11[] = {
0249     { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
0250     { P_BI_TCXO, 2 },
0251 };
0252 
0253 static const struct clk_parent_data gcc_parent_data_11[] = {
0254     { .fw_name = "ufs_phy_rx_symbol_1_clk" },
0255     { .fw_name = "bi_tcxo" },
0256 };
0257 
0258 static const struct parent_map gcc_parent_map_12[] = {
0259     { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
0260     { P_BI_TCXO, 2 },
0261 };
0262 
0263 static const struct clk_parent_data gcc_parent_data_12[] = {
0264     { .fw_name = "ufs_phy_tx_symbol_0_clk" },
0265     { .fw_name = "bi_tcxo" },
0266 };
0267 
0268 static const struct parent_map gcc_parent_map_13[] = {
0269     { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
0270     { P_CORE_BI_PLL_TEST_SE, 1 },
0271     { P_BI_TCXO, 2 },
0272 };
0273 
0274 static const struct clk_parent_data gcc_parent_data_13[] = {
0275     { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
0276     { .fw_name = "core_bi_pll_test_se" },
0277     { .fw_name = "bi_tcxo" },
0278 };
0279 
0280 static const struct parent_map gcc_parent_map_14[] = {
0281     { P_USB3_UNI_PHY_SEC_GCC_USB30_PIPE_CLK, 0 },
0282     { P_CORE_BI_PLL_TEST_SE, 1 },
0283     { P_BI_TCXO, 2 },
0284 };
0285 
0286 static const struct clk_parent_data gcc_parent_data_14[] = {
0287     { .fw_name = "usb3_uni_phy_sec_gcc_usb30_pipe_clk" },
0288     { .fw_name = "core_bi_pll_test_se" },
0289     { .fw_name = "bi_tcxo" },
0290 };
0291 
0292 static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = {
0293     .reg = 0x6b054,
0294     .shift = 0,
0295     .width = 2,
0296     .parent_map = gcc_parent_map_4,
0297     .clkr = {
0298         .hw.init = &(struct clk_init_data){
0299             .name = "gcc_pcie_0_pipe_clk_src",
0300             .parent_data = gcc_parent_data_4,
0301             .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0302             .ops = &clk_regmap_mux_closest_ops,
0303         },
0304     },
0305 };
0306 
0307 static struct clk_regmap_mux gcc_pcie_1_pipe_clk_src = {
0308     .reg = 0x8d054,
0309     .shift = 0,
0310     .width = 2,
0311     .parent_map = gcc_parent_map_5,
0312     .clkr = {
0313         .hw.init = &(struct clk_init_data){
0314             .name = "gcc_pcie_1_pipe_clk_src",
0315             .parent_data = gcc_parent_data_5,
0316             .num_parents = ARRAY_SIZE(gcc_parent_data_5),
0317             .ops = &clk_regmap_mux_closest_ops,
0318         },
0319     },
0320 };
0321 
0322 static struct clk_regmap_mux gcc_ufs_card_rx_symbol_0_clk_src = {
0323     .reg = 0x75058,
0324     .shift = 0,
0325     .width = 2,
0326     .parent_map = gcc_parent_map_7,
0327     .clkr = {
0328         .hw.init = &(struct clk_init_data){
0329             .name = "gcc_ufs_card_rx_symbol_0_clk_src",
0330             .parent_data = gcc_parent_data_7,
0331             .num_parents = ARRAY_SIZE(gcc_parent_data_7),
0332             .ops = &clk_regmap_mux_closest_ops,
0333         },
0334     },
0335 };
0336 
0337 static struct clk_regmap_mux gcc_ufs_card_rx_symbol_1_clk_src = {
0338     .reg = 0x750c8,
0339     .shift = 0,
0340     .width = 2,
0341     .parent_map = gcc_parent_map_8,
0342     .clkr = {
0343         .hw.init = &(struct clk_init_data){
0344             .name = "gcc_ufs_card_rx_symbol_1_clk_src",
0345             .parent_data = gcc_parent_data_8,
0346             .num_parents = ARRAY_SIZE(gcc_parent_data_8),
0347             .ops = &clk_regmap_mux_closest_ops,
0348         },
0349     },
0350 };
0351 
0352 static struct clk_regmap_mux gcc_ufs_card_tx_symbol_0_clk_src = {
0353     .reg = 0x75048,
0354     .shift = 0,
0355     .width = 2,
0356     .parent_map = gcc_parent_map_9,
0357     .clkr = {
0358         .hw.init = &(struct clk_init_data){
0359             .name = "gcc_ufs_card_tx_symbol_0_clk_src",
0360             .parent_data = gcc_parent_data_9,
0361             .num_parents = ARRAY_SIZE(gcc_parent_data_9),
0362             .ops = &clk_regmap_mux_closest_ops,
0363         },
0364     },
0365 };
0366 
0367 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
0368     .reg = 0x77058,
0369     .shift = 0,
0370     .width = 2,
0371     .parent_map = gcc_parent_map_10,
0372     .clkr = {
0373         .hw.init = &(struct clk_init_data){
0374             .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
0375             .parent_data = gcc_parent_data_10,
0376             .num_parents = ARRAY_SIZE(gcc_parent_data_10),
0377             .ops = &clk_regmap_mux_closest_ops,
0378         },
0379     },
0380 };
0381 
0382 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
0383     .reg = 0x770c8,
0384     .shift = 0,
0385     .width = 2,
0386     .parent_map = gcc_parent_map_11,
0387     .clkr = {
0388         .hw.init = &(struct clk_init_data){
0389             .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
0390             .parent_data = gcc_parent_data_11,
0391             .num_parents = ARRAY_SIZE(gcc_parent_data_11),
0392             .ops = &clk_regmap_mux_closest_ops,
0393         },
0394     },
0395 };
0396 
0397 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
0398     .reg = 0x77048,
0399     .shift = 0,
0400     .width = 2,
0401     .parent_map = gcc_parent_map_12,
0402     .clkr = {
0403         .hw.init = &(struct clk_init_data){
0404             .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
0405             .parent_data = gcc_parent_data_12,
0406             .num_parents = ARRAY_SIZE(gcc_parent_data_12),
0407             .ops = &clk_regmap_mux_closest_ops,
0408         },
0409     },
0410 };
0411 
0412 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
0413     .reg = 0xf060,
0414     .shift = 0,
0415     .width = 2,
0416     .parent_map = gcc_parent_map_13,
0417     .clkr = {
0418         .hw.init = &(struct clk_init_data){
0419             .name = "gcc_usb3_prim_phy_pipe_clk_src",
0420             .parent_data = gcc_parent_data_13,
0421             .num_parents = ARRAY_SIZE(gcc_parent_data_13),
0422             .ops = &clk_regmap_mux_closest_ops,
0423         },
0424     },
0425 };
0426 
0427 static struct clk_regmap_mux gcc_usb3_sec_phy_pipe_clk_src = {
0428     .reg = 0x10060,
0429     .shift = 0,
0430     .width = 2,
0431     .parent_map = gcc_parent_map_14,
0432     .clkr = {
0433         .hw.init = &(struct clk_init_data){
0434             .name = "gcc_usb3_sec_phy_pipe_clk_src",
0435             .parent_data = gcc_parent_data_14,
0436             .num_parents = ARRAY_SIZE(gcc_parent_data_14),
0437             .ops = &clk_regmap_mux_closest_ops,
0438         },
0439     },
0440 };
0441 
0442 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
0443     F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
0444     F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
0445     F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
0446     { }
0447 };
0448 
0449 static struct clk_rcg2 gcc_gp1_clk_src = {
0450     .cmd_rcgr = 0x64004,
0451     .mnd_width = 8,
0452     .hid_width = 5,
0453     .parent_map = gcc_parent_map_1,
0454     .freq_tbl = ftbl_gcc_gp1_clk_src,
0455     .clkr.hw.init = &(struct clk_init_data){
0456         .name = "gcc_gp1_clk_src",
0457         .parent_data = gcc_parent_data_1,
0458         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0459         .flags = CLK_SET_RATE_PARENT,
0460         .ops = &clk_rcg2_ops,
0461     },
0462 };
0463 
0464 static struct clk_rcg2 gcc_gp2_clk_src = {
0465     .cmd_rcgr = 0x65004,
0466     .mnd_width = 8,
0467     .hid_width = 5,
0468     .parent_map = gcc_parent_map_1,
0469     .freq_tbl = ftbl_gcc_gp1_clk_src,
0470     .clkr.hw.init = &(struct clk_init_data){
0471         .name = "gcc_gp2_clk_src",
0472         .parent_data = gcc_parent_data_1,
0473         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0474         .flags = CLK_SET_RATE_PARENT,
0475         .ops = &clk_rcg2_ops,
0476     },
0477 };
0478 
0479 static struct clk_rcg2 gcc_gp3_clk_src = {
0480     .cmd_rcgr = 0x66004,
0481     .mnd_width = 8,
0482     .hid_width = 5,
0483     .parent_map = gcc_parent_map_1,
0484     .freq_tbl = ftbl_gcc_gp1_clk_src,
0485     .clkr.hw.init = &(struct clk_init_data){
0486         .name = "gcc_gp3_clk_src",
0487         .parent_data = gcc_parent_data_1,
0488         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0489         .flags = CLK_SET_RATE_PARENT,
0490         .ops = &clk_rcg2_ops,
0491     },
0492 };
0493 
0494 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
0495     F(9600000, P_BI_TCXO, 2, 0, 0),
0496     F(19200000, P_BI_TCXO, 1, 0, 0),
0497     { }
0498 };
0499 
0500 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
0501     .cmd_rcgr = 0x6b058,
0502     .mnd_width = 16,
0503     .hid_width = 5,
0504     .parent_map = gcc_parent_map_2,
0505     .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
0506     .clkr.hw.init = &(struct clk_init_data){
0507         .name = "gcc_pcie_0_aux_clk_src",
0508         .parent_data = gcc_parent_data_2,
0509         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
0510         .flags = CLK_SET_RATE_PARENT,
0511         .ops = &clk_rcg2_ops,
0512     },
0513 };
0514 
0515 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
0516     F(19200000, P_BI_TCXO, 1, 0, 0),
0517     F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
0518     { }
0519 };
0520 
0521 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
0522     .cmd_rcgr = 0x6b03c,
0523     .mnd_width = 0,
0524     .hid_width = 5,
0525     .parent_map = gcc_parent_map_0,
0526     .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
0527     .clkr.hw.init = &(struct clk_init_data){
0528         .name = "gcc_pcie_0_phy_rchng_clk_src",
0529         .parent_data = gcc_parent_data_0,
0530         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0531         .flags = CLK_SET_RATE_PARENT,
0532         .ops = &clk_rcg2_ops,
0533     },
0534 };
0535 
0536 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
0537     .cmd_rcgr = 0x8d058,
0538     .mnd_width = 16,
0539     .hid_width = 5,
0540     .parent_map = gcc_parent_map_2,
0541     .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
0542     .clkr.hw.init = &(struct clk_init_data){
0543         .name = "gcc_pcie_1_aux_clk_src",
0544         .parent_data = gcc_parent_data_2,
0545         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
0546         .flags = CLK_SET_RATE_PARENT,
0547         .ops = &clk_rcg2_ops,
0548     },
0549 };
0550 
0551 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
0552     .cmd_rcgr = 0x8d03c,
0553     .mnd_width = 0,
0554     .hid_width = 5,
0555     .parent_map = gcc_parent_map_0,
0556     .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
0557     .clkr.hw.init = &(struct clk_init_data){
0558         .name = "gcc_pcie_1_phy_rchng_clk_src",
0559         .parent_data = gcc_parent_data_0,
0560         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0561         .flags = CLK_SET_RATE_PARENT,
0562         .ops = &clk_rcg2_ops,
0563     },
0564 };
0565 
0566 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
0567     F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
0568     { }
0569 };
0570 
0571 static struct clk_rcg2 gcc_pdm2_clk_src = {
0572     .cmd_rcgr = 0x33010,
0573     .mnd_width = 0,
0574     .hid_width = 5,
0575     .parent_map = gcc_parent_map_0,
0576     .freq_tbl = ftbl_gcc_pdm2_clk_src,
0577     .clkr.hw.init = &(struct clk_init_data){
0578         .name = "gcc_pdm2_clk_src",
0579         .parent_data = gcc_parent_data_0,
0580         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0581         .flags = CLK_SET_RATE_PARENT,
0582         .ops = &clk_rcg2_ops,
0583     },
0584 };
0585 
0586 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
0587     F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
0588     F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
0589     F(19200000, P_BI_TCXO, 1, 0, 0),
0590     F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
0591     F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
0592     F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
0593     F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
0594     F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
0595     F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
0596     F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
0597     F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
0598     { }
0599 };
0600 
0601 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
0602     .name = "gcc_qupv3_wrap0_s0_clk_src",
0603     .parent_data = gcc_parent_data_0,
0604     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0605     .flags = CLK_SET_RATE_PARENT,
0606     .ops = &clk_rcg2_ops,
0607 };
0608 
0609 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
0610     .cmd_rcgr = 0x17010,
0611     .mnd_width = 16,
0612     .hid_width = 5,
0613     .parent_map = gcc_parent_map_0,
0614     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0615     .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
0616 };
0617 
0618 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
0619     .name = "gcc_qupv3_wrap0_s1_clk_src",
0620     .parent_data = gcc_parent_data_0,
0621     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0622     .flags = CLK_SET_RATE_PARENT,
0623     .ops = &clk_rcg2_ops,
0624 };
0625 
0626 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
0627     .cmd_rcgr = 0x17140,
0628     .mnd_width = 16,
0629     .hid_width = 5,
0630     .parent_map = gcc_parent_map_0,
0631     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0632     .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
0633 };
0634 
0635 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
0636     .name = "gcc_qupv3_wrap0_s2_clk_src",
0637     .parent_data = gcc_parent_data_0,
0638     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0639     .flags = CLK_SET_RATE_PARENT,
0640     .ops = &clk_rcg2_ops,
0641 };
0642 
0643 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
0644     .cmd_rcgr = 0x17270,
0645     .mnd_width = 16,
0646     .hid_width = 5,
0647     .parent_map = gcc_parent_map_0,
0648     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0649     .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
0650 };
0651 
0652 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
0653     .name = "gcc_qupv3_wrap0_s3_clk_src",
0654     .parent_data = gcc_parent_data_0,
0655     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0656     .flags = CLK_SET_RATE_PARENT,
0657     .ops = &clk_rcg2_ops,
0658 };
0659 
0660 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
0661     .cmd_rcgr = 0x173a0,
0662     .mnd_width = 16,
0663     .hid_width = 5,
0664     .parent_map = gcc_parent_map_0,
0665     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0666     .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
0667 };
0668 
0669 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
0670     .name = "gcc_qupv3_wrap0_s4_clk_src",
0671     .parent_data = gcc_parent_data_0,
0672     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0673     .flags = CLK_SET_RATE_PARENT,
0674     .ops = &clk_rcg2_ops,
0675 };
0676 
0677 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
0678     .cmd_rcgr = 0x174d0,
0679     .mnd_width = 16,
0680     .hid_width = 5,
0681     .parent_map = gcc_parent_map_0,
0682     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0683     .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
0684 };
0685 
0686 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
0687     .name = "gcc_qupv3_wrap0_s5_clk_src",
0688     .parent_data = gcc_parent_data_0,
0689     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0690     .flags = CLK_SET_RATE_PARENT,
0691     .ops = &clk_rcg2_ops,
0692 };
0693 
0694 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
0695     .cmd_rcgr = 0x17600,
0696     .mnd_width = 16,
0697     .hid_width = 5,
0698     .parent_map = gcc_parent_map_0,
0699     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0700     .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
0701 };
0702 
0703 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
0704     .name = "gcc_qupv3_wrap0_s6_clk_src",
0705     .parent_data = gcc_parent_data_0,
0706     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0707     .flags = CLK_SET_RATE_PARENT,
0708     .ops = &clk_rcg2_ops,
0709 };
0710 
0711 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
0712     .cmd_rcgr = 0x17730,
0713     .mnd_width = 16,
0714     .hid_width = 5,
0715     .parent_map = gcc_parent_map_0,
0716     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0717     .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
0718 };
0719 
0720 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
0721     .name = "gcc_qupv3_wrap0_s7_clk_src",
0722     .parent_data = gcc_parent_data_0,
0723     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0724     .flags = CLK_SET_RATE_PARENT,
0725     .ops = &clk_rcg2_ops,
0726 };
0727 
0728 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
0729     .cmd_rcgr = 0x17860,
0730     .mnd_width = 16,
0731     .hid_width = 5,
0732     .parent_map = gcc_parent_map_0,
0733     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0734     .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
0735 };
0736 
0737 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
0738     F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
0739     F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
0740     F(19200000, P_BI_TCXO, 1, 0, 0),
0741     F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
0742     F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
0743     F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
0744     F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
0745     F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
0746     F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
0747     F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
0748     F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
0749     F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
0750     F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
0751     F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
0752     F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
0753     { }
0754 };
0755 
0756 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
0757     .name = "gcc_qupv3_wrap1_s0_clk_src",
0758     .parent_data = gcc_parent_data_0,
0759     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0760     .flags = CLK_SET_RATE_PARENT,
0761     .ops = &clk_rcg2_ops,
0762 };
0763 
0764 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
0765     .cmd_rcgr = 0x18010,
0766     .mnd_width = 16,
0767     .hid_width = 5,
0768     .parent_map = gcc_parent_map_0,
0769     .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
0770     .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
0771 };
0772 
0773 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
0774     .name = "gcc_qupv3_wrap1_s1_clk_src",
0775     .parent_data = gcc_parent_data_0,
0776     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0777     .flags = CLK_SET_RATE_PARENT,
0778     .ops = &clk_rcg2_ops,
0779 };
0780 
0781 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
0782     .cmd_rcgr = 0x18140,
0783     .mnd_width = 16,
0784     .hid_width = 5,
0785     .parent_map = gcc_parent_map_0,
0786     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0787     .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
0788 };
0789 
0790 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
0791     .name = "gcc_qupv3_wrap1_s2_clk_src",
0792     .parent_data = gcc_parent_data_0,
0793     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0794     .flags = CLK_SET_RATE_PARENT,
0795     .ops = &clk_rcg2_ops,
0796 };
0797 
0798 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
0799     .cmd_rcgr = 0x18270,
0800     .mnd_width = 16,
0801     .hid_width = 5,
0802     .parent_map = gcc_parent_map_0,
0803     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0804     .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
0805 };
0806 
0807 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
0808     .name = "gcc_qupv3_wrap1_s3_clk_src",
0809     .parent_data = gcc_parent_data_0,
0810     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0811     .flags = CLK_SET_RATE_PARENT,
0812     .ops = &clk_rcg2_ops,
0813 };
0814 
0815 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
0816     .cmd_rcgr = 0x183a0,
0817     .mnd_width = 16,
0818     .hid_width = 5,
0819     .parent_map = gcc_parent_map_0,
0820     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0821     .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
0822 };
0823 
0824 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
0825     .name = "gcc_qupv3_wrap1_s4_clk_src",
0826     .parent_data = gcc_parent_data_0,
0827     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0828     .flags = CLK_SET_RATE_PARENT,
0829     .ops = &clk_rcg2_ops,
0830 };
0831 
0832 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
0833     .cmd_rcgr = 0x184d0,
0834     .mnd_width = 16,
0835     .hid_width = 5,
0836     .parent_map = gcc_parent_map_0,
0837     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0838     .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
0839 };
0840 
0841 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
0842     .name = "gcc_qupv3_wrap1_s5_clk_src",
0843     .parent_data = gcc_parent_data_0,
0844     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0845     .flags = CLK_SET_RATE_PARENT,
0846     .ops = &clk_rcg2_ops,
0847 };
0848 
0849 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
0850     .cmd_rcgr = 0x18600,
0851     .mnd_width = 16,
0852     .hid_width = 5,
0853     .parent_map = gcc_parent_map_0,
0854     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0855     .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
0856 };
0857 
0858 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
0859     .name = "gcc_qupv3_wrap2_s0_clk_src",
0860     .parent_data = gcc_parent_data_0,
0861     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0862     .flags = CLK_SET_RATE_PARENT,
0863     .ops = &clk_rcg2_ops,
0864 };
0865 
0866 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
0867     .cmd_rcgr = 0x1e010,
0868     .mnd_width = 16,
0869     .hid_width = 5,
0870     .parent_map = gcc_parent_map_0,
0871     .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
0872     .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
0873 };
0874 
0875 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
0876     .name = "gcc_qupv3_wrap2_s1_clk_src",
0877     .parent_data = gcc_parent_data_0,
0878     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0879     .flags = CLK_SET_RATE_PARENT,
0880     .ops = &clk_rcg2_ops,
0881 };
0882 
0883 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
0884     .cmd_rcgr = 0x1e140,
0885     .mnd_width = 16,
0886     .hid_width = 5,
0887     .parent_map = gcc_parent_map_0,
0888     .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
0889     .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
0890 };
0891 
0892 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
0893     .name = "gcc_qupv3_wrap2_s2_clk_src",
0894     .parent_data = gcc_parent_data_0,
0895     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0896     .flags = CLK_SET_RATE_PARENT,
0897     .ops = &clk_rcg2_ops,
0898 };
0899 
0900 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
0901     .cmd_rcgr = 0x1e270,
0902     .mnd_width = 16,
0903     .hid_width = 5,
0904     .parent_map = gcc_parent_map_0,
0905     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0906     .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
0907 };
0908 
0909 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
0910     .name = "gcc_qupv3_wrap2_s3_clk_src",
0911     .parent_data = gcc_parent_data_0,
0912     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0913     .flags = CLK_SET_RATE_PARENT,
0914     .ops = &clk_rcg2_ops,
0915 };
0916 
0917 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
0918     .cmd_rcgr = 0x1e3a0,
0919     .mnd_width = 16,
0920     .hid_width = 5,
0921     .parent_map = gcc_parent_map_0,
0922     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0923     .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
0924 };
0925 
0926 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
0927     .name = "gcc_qupv3_wrap2_s4_clk_src",
0928     .parent_data = gcc_parent_data_0,
0929     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0930     .flags = CLK_SET_RATE_PARENT,
0931     .ops = &clk_rcg2_ops,
0932 };
0933 
0934 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
0935     .cmd_rcgr = 0x1e4d0,
0936     .mnd_width = 16,
0937     .hid_width = 5,
0938     .parent_map = gcc_parent_map_0,
0939     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0940     .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
0941 };
0942 
0943 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
0944     .name = "gcc_qupv3_wrap2_s5_clk_src",
0945     .parent_data = gcc_parent_data_0,
0946     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0947     .flags = CLK_SET_RATE_PARENT,
0948     .ops = &clk_rcg2_ops,
0949 };
0950 
0951 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
0952     .cmd_rcgr = 0x1e600,
0953     .mnd_width = 16,
0954     .hid_width = 5,
0955     .parent_map = gcc_parent_map_0,
0956     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0957     .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
0958 };
0959 
0960 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
0961     F(400000, P_BI_TCXO, 12, 1, 4),
0962     F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
0963     F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
0964     F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
0965     F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
0966     { }
0967 };
0968 
0969 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
0970     .cmd_rcgr = 0x1400c,
0971     .mnd_width = 8,
0972     .hid_width = 5,
0973     .parent_map = gcc_parent_map_6,
0974     .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
0975     .clkr.hw.init = &(struct clk_init_data){
0976         .name = "gcc_sdcc2_apps_clk_src",
0977         .parent_data = gcc_parent_data_6,
0978         .num_parents = ARRAY_SIZE(gcc_parent_data_6),
0979         .flags = CLK_SET_RATE_PARENT,
0980         .ops = &clk_rcg2_floor_ops,
0981     },
0982 };
0983 
0984 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
0985     F(400000, P_BI_TCXO, 12, 1, 4),
0986     F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
0987     F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
0988     { }
0989 };
0990 
0991 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
0992     .cmd_rcgr = 0x1600c,
0993     .mnd_width = 8,
0994     .hid_width = 5,
0995     .parent_map = gcc_parent_map_0,
0996     .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
0997     .clkr.hw.init = &(struct clk_init_data){
0998         .name = "gcc_sdcc4_apps_clk_src",
0999         .parent_data = gcc_parent_data_0,
1000         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1001         .flags = CLK_SET_RATE_PARENT,
1002         .ops = &clk_rcg2_floor_ops,
1003     },
1004 };
1005 
1006 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
1007     F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1008     F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1009     F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1010     F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1011     { }
1012 };
1013 
1014 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
1015     .cmd_rcgr = 0x75024,
1016     .mnd_width = 8,
1017     .hid_width = 5,
1018     .parent_map = gcc_parent_map_0,
1019     .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1020     .clkr.hw.init = &(struct clk_init_data){
1021         .name = "gcc_ufs_card_axi_clk_src",
1022         .parent_data = gcc_parent_data_0,
1023         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1024         .flags = CLK_SET_RATE_PARENT,
1025         .ops = &clk_rcg2_ops,
1026     },
1027 };
1028 
1029 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
1030     F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1031     F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1032     F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1033     { }
1034 };
1035 
1036 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
1037     .cmd_rcgr = 0x7506c,
1038     .mnd_width = 0,
1039     .hid_width = 5,
1040     .parent_map = gcc_parent_map_0,
1041     .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1042     .clkr.hw.init = &(struct clk_init_data){
1043         .name = "gcc_ufs_card_ice_core_clk_src",
1044         .parent_data = gcc_parent_data_0,
1045         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1046         .flags = CLK_SET_RATE_PARENT,
1047         .ops = &clk_rcg2_ops,
1048     },
1049 };
1050 
1051 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = {
1052     F(19200000, P_BI_TCXO, 1, 0, 0),
1053     { }
1054 };
1055 
1056 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
1057     .cmd_rcgr = 0x750a0,
1058     .mnd_width = 0,
1059     .hid_width = 5,
1060     .parent_map = gcc_parent_map_3,
1061     .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1062     .clkr.hw.init = &(struct clk_init_data){
1063         .name = "gcc_ufs_card_phy_aux_clk_src",
1064         .parent_data = gcc_parent_data_3,
1065         .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1066         .flags = CLK_SET_RATE_PARENT,
1067         .ops = &clk_rcg2_ops,
1068     },
1069 };
1070 
1071 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
1072     .cmd_rcgr = 0x75084,
1073     .mnd_width = 0,
1074     .hid_width = 5,
1075     .parent_map = gcc_parent_map_0,
1076     .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1077     .clkr.hw.init = &(struct clk_init_data){
1078         .name = "gcc_ufs_card_unipro_core_clk_src",
1079         .parent_data = gcc_parent_data_0,
1080         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1081         .flags = CLK_SET_RATE_PARENT,
1082         .ops = &clk_rcg2_ops,
1083     },
1084 };
1085 
1086 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1087     .cmd_rcgr = 0x77024,
1088     .mnd_width = 8,
1089     .hid_width = 5,
1090     .parent_map = gcc_parent_map_0,
1091     .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1092     .clkr.hw.init = &(struct clk_init_data){
1093         .name = "gcc_ufs_phy_axi_clk_src",
1094         .parent_data = gcc_parent_data_0,
1095         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1096         .flags = CLK_SET_RATE_PARENT,
1097         .ops = &clk_rcg2_ops,
1098     },
1099 };
1100 
1101 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1102     .cmd_rcgr = 0x7706c,
1103     .mnd_width = 0,
1104     .hid_width = 5,
1105     .parent_map = gcc_parent_map_0,
1106     .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1107     .clkr.hw.init = &(struct clk_init_data){
1108         .name = "gcc_ufs_phy_ice_core_clk_src",
1109         .parent_data = gcc_parent_data_0,
1110         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1111         .flags = CLK_SET_RATE_PARENT,
1112         .ops = &clk_rcg2_ops,
1113     },
1114 };
1115 
1116 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1117     .cmd_rcgr = 0x770a0,
1118     .mnd_width = 0,
1119     .hid_width = 5,
1120     .parent_map = gcc_parent_map_3,
1121     .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1122     .clkr.hw.init = &(struct clk_init_data){
1123         .name = "gcc_ufs_phy_phy_aux_clk_src",
1124         .parent_data = gcc_parent_data_3,
1125         .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1126         .flags = CLK_SET_RATE_PARENT,
1127         .ops = &clk_rcg2_ops,
1128     },
1129 };
1130 
1131 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1132     .cmd_rcgr = 0x77084,
1133     .mnd_width = 0,
1134     .hid_width = 5,
1135     .parent_map = gcc_parent_map_0,
1136     .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1137     .clkr.hw.init = &(struct clk_init_data){
1138         .name = "gcc_ufs_phy_unipro_core_clk_src",
1139         .parent_data = gcc_parent_data_0,
1140         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1141         .flags = CLK_SET_RATE_PARENT,
1142         .ops = &clk_rcg2_ops,
1143     },
1144 };
1145 
1146 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1147     F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1148     F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1149     F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1150     F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1151     { }
1152 };
1153 
1154 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1155     .cmd_rcgr = 0xf020,
1156     .mnd_width = 8,
1157     .hid_width = 5,
1158     .parent_map = gcc_parent_map_0,
1159     .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1160     .clkr.hw.init = &(struct clk_init_data){
1161         .name = "gcc_usb30_prim_master_clk_src",
1162         .parent_data = gcc_parent_data_0,
1163         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1164         .flags = CLK_SET_RATE_PARENT,
1165         .ops = &clk_rcg2_ops,
1166     },
1167 };
1168 
1169 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1170     .cmd_rcgr = 0xf038,
1171     .mnd_width = 0,
1172     .hid_width = 5,
1173     .parent_map = gcc_parent_map_0,
1174     .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1175     .clkr.hw.init = &(struct clk_init_data){
1176         .name = "gcc_usb30_prim_mock_utmi_clk_src",
1177         .parent_data = gcc_parent_data_0,
1178         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1179         .flags = CLK_SET_RATE_PARENT,
1180         .ops = &clk_rcg2_ops,
1181     },
1182 };
1183 
1184 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1185     .cmd_rcgr = 0x10020,
1186     .mnd_width = 8,
1187     .hid_width = 5,
1188     .parent_map = gcc_parent_map_0,
1189     .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1190     .clkr.hw.init = &(struct clk_init_data){
1191         .name = "gcc_usb30_sec_master_clk_src",
1192         .parent_data = gcc_parent_data_0,
1193         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1194         .flags = CLK_SET_RATE_PARENT,
1195         .ops = &clk_rcg2_ops,
1196     },
1197 };
1198 
1199 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1200     .cmd_rcgr = 0x10038,
1201     .mnd_width = 0,
1202     .hid_width = 5,
1203     .parent_map = gcc_parent_map_0,
1204     .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1205     .clkr.hw.init = &(struct clk_init_data){
1206         .name = "gcc_usb30_sec_mock_utmi_clk_src",
1207         .parent_data = gcc_parent_data_0,
1208         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1209         .flags = CLK_SET_RATE_PARENT,
1210         .ops = &clk_rcg2_ops,
1211     },
1212 };
1213 
1214 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1215     .cmd_rcgr = 0xf064,
1216     .mnd_width = 0,
1217     .hid_width = 5,
1218     .parent_map = gcc_parent_map_2,
1219     .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1220     .clkr.hw.init = &(struct clk_init_data){
1221         .name = "gcc_usb3_prim_phy_aux_clk_src",
1222         .parent_data = gcc_parent_data_2,
1223         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1224         .flags = CLK_SET_RATE_PARENT,
1225         .ops = &clk_rcg2_ops,
1226     },
1227 };
1228 
1229 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1230     .cmd_rcgr = 0x10064,
1231     .mnd_width = 0,
1232     .hid_width = 5,
1233     .parent_map = gcc_parent_map_2,
1234     .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1235     .clkr.hw.init = &(struct clk_init_data){
1236         .name = "gcc_usb3_sec_phy_aux_clk_src",
1237         .parent_data = gcc_parent_data_2,
1238         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1239         .flags = CLK_SET_RATE_PARENT,
1240         .ops = &clk_rcg2_ops,
1241     },
1242 };
1243 
1244 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1245     .reg = 0xf050,
1246     .shift = 0,
1247     .width = 4,
1248     .clkr.hw.init = &(struct clk_init_data) {
1249         .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1250         .parent_hws = (const struct clk_hw*[]){
1251             &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1252         },
1253         .num_parents = 1,
1254         .flags = CLK_SET_RATE_PARENT,
1255         .ops = &clk_regmap_div_ro_ops,
1256     },
1257 };
1258 
1259 static struct clk_regmap_div gcc_usb30_sec_mock_utmi_postdiv_clk_src = {
1260     .reg = 0x10050,
1261     .shift = 0,
1262     .width = 4,
1263     .clkr.hw.init = &(struct clk_init_data) {
1264         .name = "gcc_usb30_sec_mock_utmi_postdiv_clk_src",
1265         .parent_hws = (const struct clk_hw*[]){
1266             &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw,
1267         },
1268         .num_parents = 1,
1269         .flags = CLK_SET_RATE_PARENT,
1270         .ops = &clk_regmap_div_ro_ops,
1271     },
1272 };
1273 
1274 /* external clocks so add BRANCH_HALT_SKIP */
1275 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1276     .halt_reg = 0x6b080,
1277     .halt_check = BRANCH_HALT_SKIP,
1278     .clkr = {
1279         .enable_reg = 0x52000,
1280         .enable_mask = BIT(12),
1281         .hw.init = &(struct clk_init_data){
1282             .name = "gcc_aggre_noc_pcie_0_axi_clk",
1283             .ops = &clk_branch2_ops,
1284         },
1285     },
1286 };
1287 
1288 /* external clocks so add BRANCH_HALT_SKIP */
1289 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1290     .halt_reg = 0x8d084,
1291     .halt_check = BRANCH_HALT_SKIP,
1292     .clkr = {
1293         .enable_reg = 0x52000,
1294         .enable_mask = BIT(11),
1295         .hw.init = &(struct clk_init_data){
1296             .name = "gcc_aggre_noc_pcie_1_axi_clk",
1297             .ops = &clk_branch2_ops,
1298         },
1299     },
1300 };
1301 
1302 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1303     .halt_reg = 0x9000c,
1304     .halt_check = BRANCH_HALT_VOTED,
1305     .hwcg_reg = 0x9000c,
1306     .hwcg_bit = 1,
1307     .clkr = {
1308         .enable_reg = 0x52000,
1309         .enable_mask = BIT(18),
1310         .hw.init = &(struct clk_init_data){
1311             .name = "gcc_aggre_noc_pcie_tbu_clk",
1312             .ops = &clk_branch2_ops,
1313         },
1314     },
1315 };
1316 
1317 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1318     .halt_reg = 0x750cc,
1319     .halt_check = BRANCH_HALT_VOTED,
1320     .hwcg_reg = 0x750cc,
1321     .hwcg_bit = 1,
1322     .clkr = {
1323         .enable_reg = 0x750cc,
1324         .enable_mask = BIT(0),
1325         .hw.init = &(struct clk_init_data){
1326             .name = "gcc_aggre_ufs_card_axi_clk",
1327             .parent_hws = (const struct clk_hw*[]){
1328                 &gcc_ufs_card_axi_clk_src.clkr.hw,
1329             },
1330             .num_parents = 1,
1331             .flags = CLK_SET_RATE_PARENT,
1332             .ops = &clk_branch2_ops,
1333         },
1334     },
1335 };
1336 
1337 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1338     .halt_reg = 0x750cc,
1339     .halt_check = BRANCH_HALT_VOTED,
1340     .hwcg_reg = 0x750cc,
1341     .hwcg_bit = 1,
1342     .clkr = {
1343         .enable_reg = 0x750cc,
1344         .enable_mask = BIT(1),
1345         .hw.init = &(struct clk_init_data){
1346             .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1347             .parent_hws = (const struct clk_hw*[]){
1348                 &gcc_ufs_card_axi_clk_src.clkr.hw,
1349             },
1350             .num_parents = 1,
1351             .flags = CLK_SET_RATE_PARENT,
1352             .ops = &clk_branch2_ops,
1353         },
1354     },
1355 };
1356 
1357 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1358     .halt_reg = 0x770cc,
1359     .halt_check = BRANCH_HALT_VOTED,
1360     .hwcg_reg = 0x770cc,
1361     .hwcg_bit = 1,
1362     .clkr = {
1363         .enable_reg = 0x770cc,
1364         .enable_mask = BIT(0),
1365         .hw.init = &(struct clk_init_data){
1366             .name = "gcc_aggre_ufs_phy_axi_clk",
1367             .parent_hws = (const struct clk_hw*[]){
1368                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1369             },
1370             .num_parents = 1,
1371             .flags = CLK_SET_RATE_PARENT,
1372             .ops = &clk_branch2_ops,
1373         },
1374     },
1375 };
1376 
1377 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1378     .halt_reg = 0x770cc,
1379     .halt_check = BRANCH_HALT_VOTED,
1380     .hwcg_reg = 0x770cc,
1381     .hwcg_bit = 1,
1382     .clkr = {
1383         .enable_reg = 0x770cc,
1384         .enable_mask = BIT(1),
1385         .hw.init = &(struct clk_init_data){
1386             .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1387             .parent_hws = (const struct clk_hw*[]){
1388                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1389             },
1390             .num_parents = 1,
1391             .flags = CLK_SET_RATE_PARENT,
1392             .ops = &clk_branch2_ops,
1393         },
1394     },
1395 };
1396 
1397 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1398     .halt_reg = 0xf080,
1399     .halt_check = BRANCH_HALT_VOTED,
1400     .hwcg_reg = 0xf080,
1401     .hwcg_bit = 1,
1402     .clkr = {
1403         .enable_reg = 0xf080,
1404         .enable_mask = BIT(0),
1405         .hw.init = &(struct clk_init_data){
1406             .name = "gcc_aggre_usb3_prim_axi_clk",
1407             .parent_hws = (const struct clk_hw*[]){
1408                 &gcc_usb30_prim_master_clk_src.clkr.hw,
1409             },
1410             .num_parents = 1,
1411             .flags = CLK_SET_RATE_PARENT,
1412             .ops = &clk_branch2_ops,
1413         },
1414     },
1415 };
1416 
1417 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1418     .halt_reg = 0x10080,
1419     .halt_check = BRANCH_HALT_VOTED,
1420     .hwcg_reg = 0x10080,
1421     .hwcg_bit = 1,
1422     .clkr = {
1423         .enable_reg = 0x10080,
1424         .enable_mask = BIT(0),
1425         .hw.init = &(struct clk_init_data){
1426             .name = "gcc_aggre_usb3_sec_axi_clk",
1427             .parent_hws = (const struct clk_hw*[]){
1428                 &gcc_usb30_sec_master_clk_src.clkr.hw,
1429             },
1430             .num_parents = 1,
1431             .flags = CLK_SET_RATE_PARENT,
1432             .ops = &clk_branch2_ops,
1433         },
1434     },
1435 };
1436 
1437 static struct clk_branch gcc_boot_rom_ahb_clk = {
1438     .halt_reg = 0x38004,
1439     .halt_check = BRANCH_HALT_VOTED,
1440     .hwcg_reg = 0x38004,
1441     .hwcg_bit = 1,
1442     .clkr = {
1443         .enable_reg = 0x52000,
1444         .enable_mask = BIT(10),
1445         .hw.init = &(struct clk_init_data){
1446             .name = "gcc_boot_rom_ahb_clk",
1447             .ops = &clk_branch2_ops,
1448         },
1449     },
1450 };
1451 
1452 /* external clocks so add BRANCH_HALT_SKIP */
1453 static struct clk_branch gcc_camera_hf_axi_clk = {
1454     .halt_reg = 0x26010,
1455     .halt_check = BRANCH_HALT_SKIP,
1456     .hwcg_reg = 0x26010,
1457     .hwcg_bit = 1,
1458     .clkr = {
1459         .enable_reg = 0x26010,
1460         .enable_mask = BIT(0),
1461         .hw.init = &(struct clk_init_data){
1462             .name = "gcc_camera_hf_axi_clk",
1463             .ops = &clk_branch2_ops,
1464         },
1465     },
1466 };
1467 
1468 /* external clocks so add BRANCH_HALT_SKIP */
1469 static struct clk_branch gcc_camera_sf_axi_clk = {
1470     .halt_reg = 0x26014,
1471     .halt_check = BRANCH_HALT_SKIP,
1472     .hwcg_reg = 0x26014,
1473     .hwcg_bit = 1,
1474     .clkr = {
1475         .enable_reg = 0x26014,
1476         .enable_mask = BIT(0),
1477         .hw.init = &(struct clk_init_data){
1478             .name = "gcc_camera_sf_axi_clk",
1479             .ops = &clk_branch2_ops,
1480         },
1481     },
1482 };
1483 
1484 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1485     .halt_reg = 0xf07c,
1486     .halt_check = BRANCH_HALT_VOTED,
1487     .hwcg_reg = 0xf07c,
1488     .hwcg_bit = 1,
1489     .clkr = {
1490         .enable_reg = 0xf07c,
1491         .enable_mask = BIT(0),
1492         .hw.init = &(struct clk_init_data){
1493             .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1494             .parent_hws = (const struct clk_hw*[]){
1495                 &gcc_usb30_prim_master_clk_src.clkr.hw,
1496             },
1497             .num_parents = 1,
1498             .flags = CLK_SET_RATE_PARENT,
1499             .ops = &clk_branch2_ops,
1500         },
1501     },
1502 };
1503 
1504 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1505     .halt_reg = 0x1007c,
1506     .halt_check = BRANCH_HALT_VOTED,
1507     .hwcg_reg = 0x1007c,
1508     .hwcg_bit = 1,
1509     .clkr = {
1510         .enable_reg = 0x1007c,
1511         .enable_mask = BIT(0),
1512         .hw.init = &(struct clk_init_data){
1513             .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1514             .parent_hws = (const struct clk_hw*[]){
1515                 &gcc_usb30_sec_master_clk_src.clkr.hw,
1516             },
1517             .num_parents = 1,
1518             .flags = CLK_SET_RATE_PARENT,
1519             .ops = &clk_branch2_ops,
1520         },
1521     },
1522 };
1523 
1524 /* external clocks so add BRANCH_HALT_SKIP */
1525 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1526     .halt_reg = 0x71154,
1527     .halt_check = BRANCH_HALT_SKIP,
1528     .hwcg_reg = 0x71154,
1529     .hwcg_bit = 1,
1530     .clkr = {
1531         .enable_reg = 0x71154,
1532         .enable_mask = BIT(0),
1533         .hw.init = &(struct clk_init_data){
1534             .name = "gcc_ddrss_gpu_axi_clk",
1535             .ops = &clk_branch2_aon_ops,
1536         },
1537     },
1538 };
1539 
1540 /* external clocks so add BRANCH_HALT_SKIP */
1541 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1542     .halt_reg = 0x8d080,
1543     .halt_check = BRANCH_HALT_SKIP,
1544     .hwcg_reg = 0x8d080,
1545     .hwcg_bit = 1,
1546     .clkr = {
1547         .enable_reg = 0x52000,
1548         .enable_mask = BIT(19),
1549         .hw.init = &(struct clk_init_data){
1550             .name = "gcc_ddrss_pcie_sf_tbu_clk",
1551             .ops = &clk_branch2_ops,
1552         },
1553     },
1554 };
1555 
1556 /* external clocks so add BRANCH_HALT_SKIP */
1557 static struct clk_branch gcc_disp_hf_axi_clk = {
1558     .halt_reg = 0x2700c,
1559     .halt_check = BRANCH_HALT_SKIP,
1560     .hwcg_reg = 0x2700c,
1561     .hwcg_bit = 1,
1562     .clkr = {
1563         .enable_reg = 0x2700c,
1564         .enable_mask = BIT(0),
1565         .hw.init = &(struct clk_init_data){
1566             .name = "gcc_disp_hf_axi_clk",
1567             .ops = &clk_branch2_ops,
1568         },
1569     },
1570 };
1571 
1572 /* external clocks so add BRANCH_HALT_SKIP */
1573 static struct clk_branch gcc_disp_sf_axi_clk = {
1574     .halt_reg = 0x27014,
1575     .halt_check = BRANCH_HALT_SKIP,
1576     .hwcg_reg = 0x27014,
1577     .hwcg_bit = 1,
1578     .clkr = {
1579         .enable_reg = 0x27014,
1580         .enable_mask = BIT(0),
1581         .hw.init = &(struct clk_init_data){
1582             .name = "gcc_disp_sf_axi_clk",
1583             .ops = &clk_branch2_ops,
1584         },
1585     },
1586 };
1587 
1588 static struct clk_branch gcc_gp1_clk = {
1589     .halt_reg = 0x64000,
1590     .halt_check = BRANCH_HALT,
1591     .clkr = {
1592         .enable_reg = 0x64000,
1593         .enable_mask = BIT(0),
1594         .hw.init = &(struct clk_init_data){
1595             .name = "gcc_gp1_clk",
1596             .parent_hws = (const struct clk_hw*[]){
1597                 &gcc_gp1_clk_src.clkr.hw,
1598             },
1599             .num_parents = 1,
1600             .flags = CLK_SET_RATE_PARENT,
1601             .ops = &clk_branch2_ops,
1602         },
1603     },
1604 };
1605 
1606 static struct clk_branch gcc_gp2_clk = {
1607     .halt_reg = 0x65000,
1608     .halt_check = BRANCH_HALT,
1609     .clkr = {
1610         .enable_reg = 0x65000,
1611         .enable_mask = BIT(0),
1612         .hw.init = &(struct clk_init_data){
1613             .name = "gcc_gp2_clk",
1614             .parent_hws = (const struct clk_hw*[]){
1615                 &gcc_gp2_clk_src.clkr.hw,
1616             },
1617             .num_parents = 1,
1618             .flags = CLK_SET_RATE_PARENT,
1619             .ops = &clk_branch2_ops,
1620         },
1621     },
1622 };
1623 
1624 static struct clk_branch gcc_gp3_clk = {
1625     .halt_reg = 0x66000,
1626     .halt_check = BRANCH_HALT,
1627     .clkr = {
1628         .enable_reg = 0x66000,
1629         .enable_mask = BIT(0),
1630         .hw.init = &(struct clk_init_data){
1631             .name = "gcc_gp3_clk",
1632             .parent_hws = (const struct clk_hw*[]){
1633                 &gcc_gp3_clk_src.clkr.hw,
1634             },
1635             .num_parents = 1,
1636             .flags = CLK_SET_RATE_PARENT,
1637             .ops = &clk_branch2_ops,
1638         },
1639     },
1640 };
1641 
1642 /* Clock ON depends on external parent clock, so don't poll */
1643 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1644     .halt_check = BRANCH_HALT_DELAY,
1645     .clkr = {
1646         .enable_reg = 0x52000,
1647         .enable_mask = BIT(15),
1648         .hw.init = &(struct clk_init_data){
1649             .name = "gcc_gpu_gpll0_clk_src",
1650             .parent_hws = (const struct clk_hw*[]){
1651                 &gcc_gpll0.clkr.hw,
1652             },
1653             .num_parents = 1,
1654             .flags = CLK_SET_RATE_PARENT,
1655             .ops = &clk_branch2_ops,
1656         },
1657     },
1658 };
1659 
1660 /* Clock ON depends on external parent clock, so don't poll */
1661 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1662     .halt_check = BRANCH_HALT_DELAY,
1663     .clkr = {
1664         .enable_reg = 0x52000,
1665         .enable_mask = BIT(16),
1666         .hw.init = &(struct clk_init_data){
1667             .name = "gcc_gpu_gpll0_div_clk_src",
1668             .parent_hws = (const struct clk_hw*[]){
1669                 &gcc_gpll0_out_even.clkr.hw,
1670             },
1671             .num_parents = 1,
1672             .flags = CLK_SET_RATE_PARENT,
1673             .ops = &clk_branch2_ops,
1674         },
1675     },
1676 };
1677 
1678 static struct clk_branch gcc_gpu_iref_en = {
1679     .halt_reg = 0x8c014,
1680     .halt_check = BRANCH_HALT,
1681     .clkr = {
1682         .enable_reg = 0x8c014,
1683         .enable_mask = BIT(0),
1684         .hw.init = &(struct clk_init_data){
1685             .name = "gcc_gpu_iref_en",
1686             .ops = &clk_branch2_ops,
1687         },
1688     },
1689 };
1690 
1691 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1692     .halt_reg = 0x7100c,
1693     .halt_check = BRANCH_HALT_VOTED,
1694     .hwcg_reg = 0x7100c,
1695     .hwcg_bit = 1,
1696     .clkr = {
1697         .enable_reg = 0x7100c,
1698         .enable_mask = BIT(0),
1699         .hw.init = &(struct clk_init_data){
1700             .name = "gcc_gpu_memnoc_gfx_clk",
1701             .ops = &clk_branch2_aon_ops,
1702         },
1703     },
1704 };
1705 
1706 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1707     .halt_reg = 0x71018,
1708     .halt_check = BRANCH_HALT,
1709     .clkr = {
1710         .enable_reg = 0x71018,
1711         .enable_mask = BIT(0),
1712         .hw.init = &(struct clk_init_data){
1713             .name = "gcc_gpu_snoc_dvm_gfx_clk",
1714             .ops = &clk_branch2_aon_ops,
1715         },
1716     },
1717 };
1718 
1719 static struct clk_branch gcc_pcie0_phy_rchng_clk = {
1720     .halt_reg = 0x6b038,
1721     .halt_check = BRANCH_HALT_VOTED,
1722     .clkr = {
1723         .enable_reg = 0x52000,
1724         .enable_mask = BIT(22),
1725         .hw.init = &(struct clk_init_data){
1726             .name = "gcc_pcie0_phy_rchng_clk",
1727             .parent_hws = (const struct clk_hw*[]){
1728                 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1729             },
1730             .num_parents = 1,
1731             .flags = CLK_SET_RATE_PARENT,
1732             .ops = &clk_branch2_ops,
1733         },
1734     },
1735 };
1736 
1737 static struct clk_branch gcc_pcie1_phy_rchng_clk = {
1738     .halt_reg = 0x8d038,
1739     .halt_check = BRANCH_HALT_VOTED,
1740     .clkr = {
1741         .enable_reg = 0x52000,
1742         .enable_mask = BIT(23),
1743         .hw.init = &(struct clk_init_data){
1744             .name = "gcc_pcie1_phy_rchng_clk",
1745             .parent_hws = (const struct clk_hw*[]){
1746                 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1747             },
1748             .num_parents = 1,
1749             .flags = CLK_SET_RATE_PARENT,
1750             .ops = &clk_branch2_ops,
1751         },
1752     },
1753 };
1754 
1755 static struct clk_branch gcc_pcie_0_aux_clk = {
1756     .halt_reg = 0x6b028,
1757     .halt_check = BRANCH_HALT_VOTED,
1758     .clkr = {
1759         .enable_reg = 0x52008,
1760         .enable_mask = BIT(3),
1761         .hw.init = &(struct clk_init_data){
1762             .name = "gcc_pcie_0_aux_clk",
1763             .parent_hws = (const struct clk_hw*[]){
1764                 &gcc_pcie_0_aux_clk_src.clkr.hw,
1765             },
1766             .num_parents = 1,
1767             .flags = CLK_SET_RATE_PARENT,
1768             .ops = &clk_branch2_ops,
1769         },
1770     },
1771 };
1772 
1773 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1774     .halt_reg = 0x6b024,
1775     .halt_check = BRANCH_HALT_VOTED,
1776     .hwcg_reg = 0x6b024,
1777     .hwcg_bit = 1,
1778     .clkr = {
1779         .enable_reg = 0x52008,
1780         .enable_mask = BIT(2),
1781         .hw.init = &(struct clk_init_data){
1782             .name = "gcc_pcie_0_cfg_ahb_clk",
1783             .ops = &clk_branch2_ops,
1784         },
1785     },
1786 };
1787 
1788 static struct clk_branch gcc_pcie_0_clkref_en = {
1789     .halt_reg = 0x8c004,
1790     .halt_check = BRANCH_HALT,
1791     .clkr = {
1792         .enable_reg = 0x8c004,
1793         .enable_mask = BIT(0),
1794         .hw.init = &(struct clk_init_data){
1795             .name = "gcc_pcie_0_clkref_en",
1796             .ops = &clk_branch2_ops,
1797         },
1798     },
1799 };
1800 
1801 /* external clocks so add BRANCH_HALT_SKIP */
1802 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1803     .halt_reg = 0x6b01c,
1804     .halt_check = BRANCH_HALT_SKIP,
1805     .hwcg_reg = 0x6b01c,
1806     .hwcg_bit = 1,
1807     .clkr = {
1808         .enable_reg = 0x52008,
1809         .enable_mask = BIT(1),
1810         .hw.init = &(struct clk_init_data){
1811             .name = "gcc_pcie_0_mstr_axi_clk",
1812             .ops = &clk_branch2_ops,
1813         },
1814     },
1815 };
1816 
1817 /* external clocks so add BRANCH_HALT_SKIP */
1818 static struct clk_branch gcc_pcie_0_pipe_clk = {
1819     .halt_reg = 0x6b030,
1820     .halt_check = BRANCH_HALT_SKIP,
1821     .clkr = {
1822         .enable_reg = 0x52008,
1823         .enable_mask = BIT(4),
1824         .hw.init = &(struct clk_init_data){
1825             .name = "gcc_pcie_0_pipe_clk",
1826             .parent_hws = (const struct clk_hw*[]){
1827                 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1828             },
1829             .num_parents = 1,
1830             .flags = CLK_SET_RATE_PARENT,
1831             .ops = &clk_branch2_ops,
1832         },
1833     },
1834 };
1835 
1836 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1837     .halt_reg = 0x6b014,
1838     .halt_check = BRANCH_HALT_VOTED,
1839     .hwcg_reg = 0x6b014,
1840     .hwcg_bit = 1,
1841     .clkr = {
1842         .enable_reg = 0x52008,
1843         .enable_mask = BIT(0),
1844         .hw.init = &(struct clk_init_data){
1845             .name = "gcc_pcie_0_slv_axi_clk",
1846             .ops = &clk_branch2_ops,
1847         },
1848     },
1849 };
1850 
1851 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1852     .halt_reg = 0x6b010,
1853     .halt_check = BRANCH_HALT_VOTED,
1854     .clkr = {
1855         .enable_reg = 0x52008,
1856         .enable_mask = BIT(5),
1857         .hw.init = &(struct clk_init_data){
1858             .name = "gcc_pcie_0_slv_q2a_axi_clk",
1859             .ops = &clk_branch2_ops,
1860         },
1861     },
1862 };
1863 
1864 static struct clk_branch gcc_pcie_1_aux_clk = {
1865     .halt_reg = 0x8d028,
1866     .halt_check = BRANCH_HALT_VOTED,
1867     .clkr = {
1868         .enable_reg = 0x52000,
1869         .enable_mask = BIT(29),
1870         .hw.init = &(struct clk_init_data){
1871             .name = "gcc_pcie_1_aux_clk",
1872             .parent_hws = (const struct clk_hw*[]){
1873                 &gcc_pcie_1_aux_clk_src.clkr.hw,
1874             },
1875             .num_parents = 1,
1876             .flags = CLK_SET_RATE_PARENT,
1877             .ops = &clk_branch2_ops,
1878         },
1879     },
1880 };
1881 
1882 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1883     .halt_reg = 0x8d024,
1884     .halt_check = BRANCH_HALT_VOTED,
1885     .hwcg_reg = 0x8d024,
1886     .hwcg_bit = 1,
1887     .clkr = {
1888         .enable_reg = 0x52000,
1889         .enable_mask = BIT(28),
1890         .hw.init = &(struct clk_init_data){
1891             .name = "gcc_pcie_1_cfg_ahb_clk",
1892             .ops = &clk_branch2_ops,
1893         },
1894     },
1895 };
1896 
1897 static struct clk_branch gcc_pcie_1_clkref_en = {
1898     .halt_reg = 0x8c008,
1899     .halt_check = BRANCH_HALT,
1900     .clkr = {
1901         .enable_reg = 0x8c008,
1902         .enable_mask = BIT(0),
1903         .hw.init = &(struct clk_init_data){
1904             .name = "gcc_pcie_1_clkref_en",
1905             .ops = &clk_branch2_ops,
1906         },
1907     },
1908 };
1909 
1910 /* external clocks so add BRANCH_HALT_SKIP */
1911 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1912     .halt_reg = 0x8d01c,
1913     .halt_check = BRANCH_HALT_SKIP,
1914     .hwcg_reg = 0x8d01c,
1915     .hwcg_bit = 1,
1916     .clkr = {
1917         .enable_reg = 0x52000,
1918         .enable_mask = BIT(27),
1919         .hw.init = &(struct clk_init_data){
1920             .name = "gcc_pcie_1_mstr_axi_clk",
1921             .ops = &clk_branch2_ops,
1922         },
1923     },
1924 };
1925 
1926 /* external clocks so add BRANCH_HALT_SKIP */
1927 static struct clk_branch gcc_pcie_1_pipe_clk = {
1928     .halt_reg = 0x8d030,
1929     .halt_check = BRANCH_HALT_SKIP,
1930     .clkr = {
1931         .enable_reg = 0x52000,
1932         .enable_mask = BIT(30),
1933         .hw.init = &(struct clk_init_data){
1934             .name = "gcc_pcie_1_pipe_clk",
1935             .parent_hws = (const struct clk_hw*[]){
1936                 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1937             },
1938             .num_parents = 1,
1939             .flags = CLK_SET_RATE_PARENT,
1940             .ops = &clk_branch2_ops,
1941         },
1942     },
1943 };
1944 
1945 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1946     .halt_reg = 0x8d014,
1947     .halt_check = BRANCH_HALT_VOTED,
1948     .hwcg_reg = 0x8d014,
1949     .hwcg_bit = 1,
1950     .clkr = {
1951         .enable_reg = 0x52000,
1952         .enable_mask = BIT(26),
1953         .hw.init = &(struct clk_init_data){
1954             .name = "gcc_pcie_1_slv_axi_clk",
1955             .ops = &clk_branch2_ops,
1956         },
1957     },
1958 };
1959 
1960 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1961     .halt_reg = 0x8d010,
1962     .halt_check = BRANCH_HALT_VOTED,
1963     .clkr = {
1964         .enable_reg = 0x52000,
1965         .enable_mask = BIT(25),
1966         .hw.init = &(struct clk_init_data){
1967             .name = "gcc_pcie_1_slv_q2a_axi_clk",
1968             .ops = &clk_branch2_ops,
1969         },
1970     },
1971 };
1972 
1973 static struct clk_branch gcc_pdm2_clk = {
1974     .halt_reg = 0x3300c,
1975     .halt_check = BRANCH_HALT,
1976     .clkr = {
1977         .enable_reg = 0x3300c,
1978         .enable_mask = BIT(0),
1979         .hw.init = &(struct clk_init_data){
1980             .name = "gcc_pdm2_clk",
1981             .parent_hws = (const struct clk_hw*[]){
1982                 &gcc_pdm2_clk_src.clkr.hw,
1983             },
1984             .num_parents = 1,
1985             .flags = CLK_SET_RATE_PARENT,
1986             .ops = &clk_branch2_ops,
1987         },
1988     },
1989 };
1990 
1991 static struct clk_branch gcc_pdm_ahb_clk = {
1992     .halt_reg = 0x33004,
1993     .halt_check = BRANCH_HALT_VOTED,
1994     .hwcg_reg = 0x33004,
1995     .hwcg_bit = 1,
1996     .clkr = {
1997         .enable_reg = 0x33004,
1998         .enable_mask = BIT(0),
1999         .hw.init = &(struct clk_init_data){
2000             .name = "gcc_pdm_ahb_clk",
2001             .ops = &clk_branch2_ops,
2002         },
2003     },
2004 };
2005 
2006 static struct clk_branch gcc_pdm_xo4_clk = {
2007     .halt_reg = 0x33008,
2008     .halt_check = BRANCH_HALT,
2009     .clkr = {
2010         .enable_reg = 0x33008,
2011         .enable_mask = BIT(0),
2012         .hw.init = &(struct clk_init_data){
2013             .name = "gcc_pdm_xo4_clk",
2014             .ops = &clk_branch2_ops,
2015         },
2016     },
2017 };
2018 
2019 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2020     .halt_reg = 0x26008,
2021     .halt_check = BRANCH_HALT_VOTED,
2022     .hwcg_reg = 0x26008,
2023     .hwcg_bit = 1,
2024     .clkr = {
2025         .enable_reg = 0x26008,
2026         .enable_mask = BIT(0),
2027         .hw.init = &(struct clk_init_data){
2028             .name = "gcc_qmip_camera_nrt_ahb_clk",
2029             .ops = &clk_branch2_ops,
2030         },
2031     },
2032 };
2033 
2034 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2035     .halt_reg = 0x2600c,
2036     .halt_check = BRANCH_HALT_VOTED,
2037     .hwcg_reg = 0x2600c,
2038     .hwcg_bit = 1,
2039     .clkr = {
2040         .enable_reg = 0x2600c,
2041         .enable_mask = BIT(0),
2042         .hw.init = &(struct clk_init_data){
2043             .name = "gcc_qmip_camera_rt_ahb_clk",
2044             .ops = &clk_branch2_ops,
2045         },
2046     },
2047 };
2048 
2049 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2050     .halt_reg = 0x27008,
2051     .halt_check = BRANCH_HALT_VOTED,
2052     .hwcg_reg = 0x27008,
2053     .hwcg_bit = 1,
2054     .clkr = {
2055         .enable_reg = 0x27008,
2056         .enable_mask = BIT(0),
2057         .hw.init = &(struct clk_init_data){
2058             .name = "gcc_qmip_disp_ahb_clk",
2059             .ops = &clk_branch2_ops,
2060         },
2061     },
2062 };
2063 
2064 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2065     .halt_reg = 0x28008,
2066     .halt_check = BRANCH_HALT_VOTED,
2067     .hwcg_reg = 0x28008,
2068     .hwcg_bit = 1,
2069     .clkr = {
2070         .enable_reg = 0x28008,
2071         .enable_mask = BIT(0),
2072         .hw.init = &(struct clk_init_data){
2073             .name = "gcc_qmip_video_cvp_ahb_clk",
2074             .ops = &clk_branch2_ops,
2075         },
2076     },
2077 };
2078 
2079 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2080     .halt_reg = 0x2800c,
2081     .halt_check = BRANCH_HALT_VOTED,
2082     .hwcg_reg = 0x2800c,
2083     .hwcg_bit = 1,
2084     .clkr = {
2085         .enable_reg = 0x2800c,
2086         .enable_mask = BIT(0),
2087         .hw.init = &(struct clk_init_data){
2088             .name = "gcc_qmip_video_vcodec_ahb_clk",
2089             .ops = &clk_branch2_ops,
2090         },
2091     },
2092 };
2093 
2094 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2095     .halt_reg = 0x23008,
2096     .halt_check = BRANCH_HALT_VOTED,
2097     .clkr = {
2098         .enable_reg = 0x52008,
2099         .enable_mask = BIT(9),
2100         .hw.init = &(struct clk_init_data){
2101             .name = "gcc_qupv3_wrap0_core_2x_clk",
2102             .ops = &clk_branch2_ops,
2103         },
2104     },
2105 };
2106 
2107 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2108     .halt_reg = 0x23000,
2109     .halt_check = BRANCH_HALT_VOTED,
2110     .clkr = {
2111         .enable_reg = 0x52008,
2112         .enable_mask = BIT(8),
2113         .hw.init = &(struct clk_init_data){
2114             .name = "gcc_qupv3_wrap0_core_clk",
2115             .ops = &clk_branch2_ops,
2116         },
2117     },
2118 };
2119 
2120 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2121     .halt_reg = 0x1700c,
2122     .halt_check = BRANCH_HALT_VOTED,
2123     .clkr = {
2124         .enable_reg = 0x52008,
2125         .enable_mask = BIT(10),
2126         .hw.init = &(struct clk_init_data){
2127             .name = "gcc_qupv3_wrap0_s0_clk",
2128             .parent_hws = (const struct clk_hw*[]){
2129                 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2130             },
2131             .num_parents = 1,
2132             .flags = CLK_SET_RATE_PARENT,
2133             .ops = &clk_branch2_ops,
2134         },
2135     },
2136 };
2137 
2138 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2139     .halt_reg = 0x1713c,
2140     .halt_check = BRANCH_HALT_VOTED,
2141     .clkr = {
2142         .enable_reg = 0x52008,
2143         .enable_mask = BIT(11),
2144         .hw.init = &(struct clk_init_data){
2145             .name = "gcc_qupv3_wrap0_s1_clk",
2146             .parent_hws = (const struct clk_hw*[]){
2147                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2148             },
2149             .num_parents = 1,
2150             .flags = CLK_SET_RATE_PARENT,
2151             .ops = &clk_branch2_ops,
2152         },
2153     },
2154 };
2155 
2156 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2157     .halt_reg = 0x1726c,
2158     .halt_check = BRANCH_HALT_VOTED,
2159     .clkr = {
2160         .enable_reg = 0x52008,
2161         .enable_mask = BIT(12),
2162         .hw.init = &(struct clk_init_data){
2163             .name = "gcc_qupv3_wrap0_s2_clk",
2164             .parent_hws = (const struct clk_hw*[]){
2165                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2166             },
2167             .num_parents = 1,
2168             .flags = CLK_SET_RATE_PARENT,
2169             .ops = &clk_branch2_ops,
2170         },
2171     },
2172 };
2173 
2174 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2175     .halt_reg = 0x1739c,
2176     .halt_check = BRANCH_HALT_VOTED,
2177     .clkr = {
2178         .enable_reg = 0x52008,
2179         .enable_mask = BIT(13),
2180         .hw.init = &(struct clk_init_data){
2181             .name = "gcc_qupv3_wrap0_s3_clk",
2182             .parent_hws = (const struct clk_hw*[]){
2183                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2184             },
2185             .num_parents = 1,
2186             .flags = CLK_SET_RATE_PARENT,
2187             .ops = &clk_branch2_ops,
2188         },
2189     },
2190 };
2191 
2192 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2193     .halt_reg = 0x174cc,
2194     .halt_check = BRANCH_HALT_VOTED,
2195     .clkr = {
2196         .enable_reg = 0x52008,
2197         .enable_mask = BIT(14),
2198         .hw.init = &(struct clk_init_data){
2199             .name = "gcc_qupv3_wrap0_s4_clk",
2200             .parent_hws = (const struct clk_hw*[]){
2201                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2202             },
2203             .num_parents = 1,
2204             .flags = CLK_SET_RATE_PARENT,
2205             .ops = &clk_branch2_ops,
2206         },
2207     },
2208 };
2209 
2210 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2211     .halt_reg = 0x175fc,
2212     .halt_check = BRANCH_HALT_VOTED,
2213     .clkr = {
2214         .enable_reg = 0x52008,
2215         .enable_mask = BIT(15),
2216         .hw.init = &(struct clk_init_data){
2217             .name = "gcc_qupv3_wrap0_s5_clk",
2218             .parent_hws = (const struct clk_hw*[]){
2219                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2220             },
2221             .num_parents = 1,
2222             .flags = CLK_SET_RATE_PARENT,
2223             .ops = &clk_branch2_ops,
2224         },
2225     },
2226 };
2227 
2228 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2229     .halt_reg = 0x1772c,
2230     .halt_check = BRANCH_HALT_VOTED,
2231     .clkr = {
2232         .enable_reg = 0x52008,
2233         .enable_mask = BIT(16),
2234         .hw.init = &(struct clk_init_data){
2235             .name = "gcc_qupv3_wrap0_s6_clk",
2236             .parent_hws = (const struct clk_hw*[]){
2237                 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2238             },
2239             .num_parents = 1,
2240             .flags = CLK_SET_RATE_PARENT,
2241             .ops = &clk_branch2_ops,
2242         },
2243     },
2244 };
2245 
2246 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2247     .halt_reg = 0x1785c,
2248     .halt_check = BRANCH_HALT_VOTED,
2249     .clkr = {
2250         .enable_reg = 0x52008,
2251         .enable_mask = BIT(17),
2252         .hw.init = &(struct clk_init_data){
2253             .name = "gcc_qupv3_wrap0_s7_clk",
2254             .parent_hws = (const struct clk_hw*[]){
2255                 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2256             },
2257             .num_parents = 1,
2258             .flags = CLK_SET_RATE_PARENT,
2259             .ops = &clk_branch2_ops,
2260         },
2261     },
2262 };
2263 
2264 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2265     .halt_reg = 0x23140,
2266     .halt_check = BRANCH_HALT_VOTED,
2267     .clkr = {
2268         .enable_reg = 0x52008,
2269         .enable_mask = BIT(18),
2270         .hw.init = &(struct clk_init_data){
2271             .name = "gcc_qupv3_wrap1_core_2x_clk",
2272             .ops = &clk_branch2_ops,
2273         },
2274     },
2275 };
2276 
2277 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2278     .halt_reg = 0x23138,
2279     .halt_check = BRANCH_HALT_VOTED,
2280     .clkr = {
2281         .enable_reg = 0x52008,
2282         .enable_mask = BIT(19),
2283         .hw.init = &(struct clk_init_data){
2284             .name = "gcc_qupv3_wrap1_core_clk",
2285             .ops = &clk_branch2_ops,
2286         },
2287     },
2288 };
2289 
2290 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2291     .halt_reg = 0x18004,
2292     .halt_check = BRANCH_HALT_VOTED,
2293     .hwcg_reg = 0x18004,
2294     .hwcg_bit = 1,
2295     .clkr = {
2296         .enable_reg = 0x52008,
2297         .enable_mask = BIT(20),
2298         .hw.init = &(struct clk_init_data){
2299             .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2300             .ops = &clk_branch2_ops,
2301         },
2302     },
2303 };
2304 
2305 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2306     .halt_reg = 0x18008,
2307     .halt_check = BRANCH_HALT_VOTED,
2308     .hwcg_reg = 0x18008,
2309     .hwcg_bit = 1,
2310     .clkr = {
2311         .enable_reg = 0x52008,
2312         .enable_mask = BIT(21),
2313         .hw.init = &(struct clk_init_data){
2314             .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2315             .ops = &clk_branch2_ops,
2316         },
2317     },
2318 };
2319 
2320 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2321     .halt_reg = 0x1800c,
2322     .halt_check = BRANCH_HALT_VOTED,
2323     .clkr = {
2324         .enable_reg = 0x52008,
2325         .enable_mask = BIT(22),
2326         .hw.init = &(struct clk_init_data){
2327             .name = "gcc_qupv3_wrap1_s0_clk",
2328             .parent_hws = (const struct clk_hw*[]){
2329                 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2330             },
2331             .num_parents = 1,
2332             .flags = CLK_SET_RATE_PARENT,
2333             .ops = &clk_branch2_ops,
2334         },
2335     },
2336 };
2337 
2338 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2339     .halt_reg = 0x1813c,
2340     .halt_check = BRANCH_HALT_VOTED,
2341     .clkr = {
2342         .enable_reg = 0x52008,
2343         .enable_mask = BIT(23),
2344         .hw.init = &(struct clk_init_data){
2345             .name = "gcc_qupv3_wrap1_s1_clk",
2346             .parent_hws = (const struct clk_hw*[]){
2347                 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2348             },
2349             .num_parents = 1,
2350             .flags = CLK_SET_RATE_PARENT,
2351             .ops = &clk_branch2_ops,
2352         },
2353     },
2354 };
2355 
2356 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2357     .halt_reg = 0x1826c,
2358     .halt_check = BRANCH_HALT_VOTED,
2359     .clkr = {
2360         .enable_reg = 0x52008,
2361         .enable_mask = BIT(24),
2362         .hw.init = &(struct clk_init_data){
2363             .name = "gcc_qupv3_wrap1_s2_clk",
2364             .parent_hws = (const struct clk_hw*[]){
2365                 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2366             },
2367             .num_parents = 1,
2368             .flags = CLK_SET_RATE_PARENT,
2369             .ops = &clk_branch2_ops,
2370         },
2371     },
2372 };
2373 
2374 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2375     .halt_reg = 0x1839c,
2376     .halt_check = BRANCH_HALT_VOTED,
2377     .clkr = {
2378         .enable_reg = 0x52008,
2379         .enable_mask = BIT(25),
2380         .hw.init = &(struct clk_init_data){
2381             .name = "gcc_qupv3_wrap1_s3_clk",
2382             .parent_hws = (const struct clk_hw*[]){
2383                 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2384             },
2385             .num_parents = 1,
2386             .flags = CLK_SET_RATE_PARENT,
2387             .ops = &clk_branch2_ops,
2388         },
2389     },
2390 };
2391 
2392 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2393     .halt_reg = 0x184cc,
2394     .halt_check = BRANCH_HALT_VOTED,
2395     .clkr = {
2396         .enable_reg = 0x52008,
2397         .enable_mask = BIT(26),
2398         .hw.init = &(struct clk_init_data){
2399             .name = "gcc_qupv3_wrap1_s4_clk",
2400             .parent_hws = (const struct clk_hw*[]){
2401                 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2402             },
2403             .num_parents = 1,
2404             .flags = CLK_SET_RATE_PARENT,
2405             .ops = &clk_branch2_ops,
2406         },
2407     },
2408 };
2409 
2410 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2411     .halt_reg = 0x185fc,
2412     .halt_check = BRANCH_HALT_VOTED,
2413     .clkr = {
2414         .enable_reg = 0x52008,
2415         .enable_mask = BIT(27),
2416         .hw.init = &(struct clk_init_data){
2417             .name = "gcc_qupv3_wrap1_s5_clk",
2418             .parent_hws = (const struct clk_hw*[]){
2419                 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2420             },
2421             .num_parents = 1,
2422             .flags = CLK_SET_RATE_PARENT,
2423             .ops = &clk_branch2_ops,
2424         },
2425     },
2426 };
2427 
2428 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2429     .halt_reg = 0x23278,
2430     .halt_check = BRANCH_HALT_VOTED,
2431     .clkr = {
2432         .enable_reg = 0x52010,
2433         .enable_mask = BIT(3),
2434         .hw.init = &(struct clk_init_data){
2435             .name = "gcc_qupv3_wrap2_core_2x_clk",
2436             .ops = &clk_branch2_ops,
2437         },
2438     },
2439 };
2440 
2441 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2442     .halt_reg = 0x23270,
2443     .halt_check = BRANCH_HALT_VOTED,
2444     .clkr = {
2445         .enable_reg = 0x52010,
2446         .enable_mask = BIT(0),
2447         .hw.init = &(struct clk_init_data){
2448             .name = "gcc_qupv3_wrap2_core_clk",
2449             .ops = &clk_branch2_ops,
2450         },
2451     },
2452 };
2453 
2454 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2455     .halt_reg = 0x1e00c,
2456     .halt_check = BRANCH_HALT_VOTED,
2457     .clkr = {
2458         .enable_reg = 0x52010,
2459         .enable_mask = BIT(4),
2460         .hw.init = &(struct clk_init_data){
2461             .name = "gcc_qupv3_wrap2_s0_clk",
2462             .parent_hws = (const struct clk_hw*[]){
2463                 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2464             },
2465             .num_parents = 1,
2466             .flags = CLK_SET_RATE_PARENT,
2467             .ops = &clk_branch2_ops,
2468         },
2469     },
2470 };
2471 
2472 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2473     .halt_reg = 0x1e13c,
2474     .halt_check = BRANCH_HALT_VOTED,
2475     .clkr = {
2476         .enable_reg = 0x52010,
2477         .enable_mask = BIT(5),
2478         .hw.init = &(struct clk_init_data){
2479             .name = "gcc_qupv3_wrap2_s1_clk",
2480             .parent_hws = (const struct clk_hw*[]){
2481                 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2482             },
2483             .num_parents = 1,
2484             .flags = CLK_SET_RATE_PARENT,
2485             .ops = &clk_branch2_ops,
2486         },
2487     },
2488 };
2489 
2490 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2491     .halt_reg = 0x1e26c,
2492     .halt_check = BRANCH_HALT_VOTED,
2493     .clkr = {
2494         .enable_reg = 0x52010,
2495         .enable_mask = BIT(6),
2496         .hw.init = &(struct clk_init_data){
2497             .name = "gcc_qupv3_wrap2_s2_clk",
2498             .parent_hws = (const struct clk_hw*[]){
2499                 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2500             },
2501             .num_parents = 1,
2502             .flags = CLK_SET_RATE_PARENT,
2503             .ops = &clk_branch2_ops,
2504         },
2505     },
2506 };
2507 
2508 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2509     .halt_reg = 0x1e39c,
2510     .halt_check = BRANCH_HALT_VOTED,
2511     .clkr = {
2512         .enable_reg = 0x52010,
2513         .enable_mask = BIT(7),
2514         .hw.init = &(struct clk_init_data){
2515             .name = "gcc_qupv3_wrap2_s3_clk",
2516             .parent_hws = (const struct clk_hw*[]){
2517                 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2518             },
2519             .num_parents = 1,
2520             .flags = CLK_SET_RATE_PARENT,
2521             .ops = &clk_branch2_ops,
2522         },
2523     },
2524 };
2525 
2526 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2527     .halt_reg = 0x1e4cc,
2528     .halt_check = BRANCH_HALT_VOTED,
2529     .clkr = {
2530         .enable_reg = 0x52010,
2531         .enable_mask = BIT(8),
2532         .hw.init = &(struct clk_init_data){
2533             .name = "gcc_qupv3_wrap2_s4_clk",
2534             .parent_hws = (const struct clk_hw*[]){
2535                 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2536             },
2537             .num_parents = 1,
2538             .flags = CLK_SET_RATE_PARENT,
2539             .ops = &clk_branch2_ops,
2540         },
2541     },
2542 };
2543 
2544 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2545     .halt_reg = 0x1e5fc,
2546     .halt_check = BRANCH_HALT_VOTED,
2547     .clkr = {
2548         .enable_reg = 0x52010,
2549         .enable_mask = BIT(9),
2550         .hw.init = &(struct clk_init_data){
2551             .name = "gcc_qupv3_wrap2_s5_clk",
2552             .parent_hws = (const struct clk_hw*[]){
2553                 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2554             },
2555             .num_parents = 1,
2556             .flags = CLK_SET_RATE_PARENT,
2557             .ops = &clk_branch2_ops,
2558         },
2559     },
2560 };
2561 
2562 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2563     .halt_reg = 0x17004,
2564     .halt_check = BRANCH_HALT_VOTED,
2565     .hwcg_reg = 0x17004,
2566     .hwcg_bit = 1,
2567     .clkr = {
2568         .enable_reg = 0x52008,
2569         .enable_mask = BIT(6),
2570         .hw.init = &(struct clk_init_data){
2571             .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2572             .ops = &clk_branch2_ops,
2573         },
2574     },
2575 };
2576 
2577 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2578     .halt_reg = 0x17008,
2579     .halt_check = BRANCH_HALT_VOTED,
2580     .hwcg_reg = 0x17008,
2581     .hwcg_bit = 1,
2582     .clkr = {
2583         .enable_reg = 0x52008,
2584         .enable_mask = BIT(7),
2585         .hw.init = &(struct clk_init_data){
2586             .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2587             .ops = &clk_branch2_ops,
2588         },
2589     },
2590 };
2591 
2592 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2593     .halt_reg = 0x1e004,
2594     .halt_check = BRANCH_HALT_VOTED,
2595     .hwcg_reg = 0x1e004,
2596     .hwcg_bit = 1,
2597     .clkr = {
2598         .enable_reg = 0x52010,
2599         .enable_mask = BIT(2),
2600         .hw.init = &(struct clk_init_data){
2601             .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2602             .ops = &clk_branch2_ops,
2603         },
2604     },
2605 };
2606 
2607 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2608     .halt_reg = 0x1e008,
2609     .halt_check = BRANCH_HALT_VOTED,
2610     .hwcg_reg = 0x1e008,
2611     .hwcg_bit = 1,
2612     .clkr = {
2613         .enable_reg = 0x52010,
2614         .enable_mask = BIT(1),
2615         .hw.init = &(struct clk_init_data){
2616             .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2617             .ops = &clk_branch2_ops,
2618         },
2619     },
2620 };
2621 
2622 static struct clk_branch gcc_sdcc2_ahb_clk = {
2623     .halt_reg = 0x14008,
2624     .halt_check = BRANCH_HALT,
2625     .clkr = {
2626         .enable_reg = 0x14008,
2627         .enable_mask = BIT(0),
2628         .hw.init = &(struct clk_init_data){
2629             .name = "gcc_sdcc2_ahb_clk",
2630             .ops = &clk_branch2_ops,
2631         },
2632     },
2633 };
2634 
2635 static struct clk_branch gcc_sdcc2_apps_clk = {
2636     .halt_reg = 0x14004,
2637     .halt_check = BRANCH_HALT,
2638     .clkr = {
2639         .enable_reg = 0x14004,
2640         .enable_mask = BIT(0),
2641         .hw.init = &(struct clk_init_data){
2642             .name = "gcc_sdcc2_apps_clk",
2643             .parent_hws = (const struct clk_hw*[]){
2644                 &gcc_sdcc2_apps_clk_src.clkr.hw,
2645             },
2646             .num_parents = 1,
2647             .flags = CLK_SET_RATE_PARENT,
2648             .ops = &clk_branch2_ops,
2649         },
2650     },
2651 };
2652 
2653 static struct clk_branch gcc_sdcc4_ahb_clk = {
2654     .halt_reg = 0x16008,
2655     .halt_check = BRANCH_HALT,
2656     .clkr = {
2657         .enable_reg = 0x16008,
2658         .enable_mask = BIT(0),
2659         .hw.init = &(struct clk_init_data){
2660             .name = "gcc_sdcc4_ahb_clk",
2661             .ops = &clk_branch2_ops,
2662         },
2663     },
2664 };
2665 
2666 static struct clk_branch gcc_sdcc4_apps_clk = {
2667     .halt_reg = 0x16004,
2668     .halt_check = BRANCH_HALT,
2669     .clkr = {
2670         .enable_reg = 0x16004,
2671         .enable_mask = BIT(0),
2672         .hw.init = &(struct clk_init_data){
2673             .name = "gcc_sdcc4_apps_clk",
2674             .parent_hws = (const struct clk_hw*[]){
2675                 &gcc_sdcc4_apps_clk_src.clkr.hw,
2676             },
2677             .num_parents = 1,
2678             .flags = CLK_SET_RATE_PARENT,
2679             .ops = &clk_branch2_ops,
2680         },
2681     },
2682 };
2683 
2684 static struct clk_branch gcc_throttle_pcie_ahb_clk = {
2685     .halt_reg = 0x9044,
2686     .halt_check = BRANCH_HALT,
2687     .clkr = {
2688         .enable_reg = 0x9044,
2689         .enable_mask = BIT(0),
2690         .hw.init = &(struct clk_init_data){
2691             .name = "gcc_throttle_pcie_ahb_clk",
2692             .ops = &clk_branch2_ops,
2693         },
2694     },
2695 };
2696 
2697 static struct clk_branch gcc_ufs_1_clkref_en = {
2698     .halt_reg = 0x8c000,
2699     .halt_check = BRANCH_HALT,
2700     .clkr = {
2701         .enable_reg = 0x8c000,
2702         .enable_mask = BIT(0),
2703         .hw.init = &(struct clk_init_data){
2704             .name = "gcc_ufs_1_clkref_en",
2705             .ops = &clk_branch2_ops,
2706         },
2707     },
2708 };
2709 
2710 static struct clk_branch gcc_ufs_card_ahb_clk = {
2711     .halt_reg = 0x75018,
2712     .halt_check = BRANCH_HALT_VOTED,
2713     .hwcg_reg = 0x75018,
2714     .hwcg_bit = 1,
2715     .clkr = {
2716         .enable_reg = 0x75018,
2717         .enable_mask = BIT(0),
2718         .hw.init = &(struct clk_init_data){
2719             .name = "gcc_ufs_card_ahb_clk",
2720             .ops = &clk_branch2_ops,
2721         },
2722     },
2723 };
2724 
2725 static struct clk_branch gcc_ufs_card_axi_clk = {
2726     .halt_reg = 0x75010,
2727     .halt_check = BRANCH_HALT_VOTED,
2728     .hwcg_reg = 0x75010,
2729     .hwcg_bit = 1,
2730     .clkr = {
2731         .enable_reg = 0x75010,
2732         .enable_mask = BIT(0),
2733         .hw.init = &(struct clk_init_data){
2734             .name = "gcc_ufs_card_axi_clk",
2735             .parent_hws = (const struct clk_hw*[]){
2736                 &gcc_ufs_card_axi_clk_src.clkr.hw,
2737             },
2738             .num_parents = 1,
2739             .flags = CLK_SET_RATE_PARENT,
2740             .ops = &clk_branch2_ops,
2741         },
2742     },
2743 };
2744 
2745 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
2746     .halt_reg = 0x75010,
2747     .halt_check = BRANCH_HALT_VOTED,
2748     .hwcg_reg = 0x75010,
2749     .hwcg_bit = 1,
2750     .clkr = {
2751         .enable_reg = 0x75010,
2752         .enable_mask = BIT(1),
2753         .hw.init = &(struct clk_init_data){
2754             .name = "gcc_ufs_card_axi_hw_ctl_clk",
2755             .parent_hws = (const struct clk_hw*[]){
2756                 &gcc_ufs_card_axi_clk_src.clkr.hw,
2757             },
2758             .num_parents = 1,
2759             .flags = CLK_SET_RATE_PARENT,
2760             .ops = &clk_branch2_ops,
2761         },
2762     },
2763 };
2764 
2765 static struct clk_branch gcc_ufs_card_ice_core_clk = {
2766     .halt_reg = 0x75064,
2767     .halt_check = BRANCH_HALT_VOTED,
2768     .hwcg_reg = 0x75064,
2769     .hwcg_bit = 1,
2770     .clkr = {
2771         .enable_reg = 0x75064,
2772         .enable_mask = BIT(0),
2773         .hw.init = &(struct clk_init_data){
2774             .name = "gcc_ufs_card_ice_core_clk",
2775             .parent_hws = (const struct clk_hw*[]){
2776                 &gcc_ufs_card_ice_core_clk_src.clkr.hw,
2777             },
2778             .num_parents = 1,
2779             .flags = CLK_SET_RATE_PARENT,
2780             .ops = &clk_branch2_ops,
2781         },
2782     },
2783 };
2784 
2785 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
2786     .halt_reg = 0x75064,
2787     .halt_check = BRANCH_HALT_VOTED,
2788     .hwcg_reg = 0x75064,
2789     .hwcg_bit = 1,
2790     .clkr = {
2791         .enable_reg = 0x75064,
2792         .enable_mask = BIT(1),
2793         .hw.init = &(struct clk_init_data){
2794             .name = "gcc_ufs_card_ice_core_hw_ctl_clk",
2795             .parent_hws = (const struct clk_hw*[]){
2796                 &gcc_ufs_card_ice_core_clk_src.clkr.hw,
2797             },
2798             .num_parents = 1,
2799             .flags = CLK_SET_RATE_PARENT,
2800             .ops = &clk_branch2_ops,
2801         },
2802     },
2803 };
2804 
2805 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2806     .halt_reg = 0x7509c,
2807     .halt_check = BRANCH_HALT_VOTED,
2808     .hwcg_reg = 0x7509c,
2809     .hwcg_bit = 1,
2810     .clkr = {
2811         .enable_reg = 0x7509c,
2812         .enable_mask = BIT(0),
2813         .hw.init = &(struct clk_init_data){
2814             .name = "gcc_ufs_card_phy_aux_clk",
2815             .parent_hws = (const struct clk_hw*[]){
2816                 &gcc_ufs_card_phy_aux_clk_src.clkr.hw,
2817             },
2818             .num_parents = 1,
2819             .flags = CLK_SET_RATE_PARENT,
2820             .ops = &clk_branch2_ops,
2821         },
2822     },
2823 };
2824 
2825 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
2826     .halt_reg = 0x7509c,
2827     .halt_check = BRANCH_HALT_VOTED,
2828     .hwcg_reg = 0x7509c,
2829     .hwcg_bit = 1,
2830     .clkr = {
2831         .enable_reg = 0x7509c,
2832         .enable_mask = BIT(1),
2833         .hw.init = &(struct clk_init_data){
2834             .name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
2835             .parent_hws = (const struct clk_hw*[]){
2836                 &gcc_ufs_card_phy_aux_clk_src.clkr.hw,
2837             },
2838             .num_parents = 1,
2839             .flags = CLK_SET_RATE_PARENT,
2840             .ops = &clk_branch2_ops,
2841         },
2842     },
2843 };
2844 
2845 /* Clock ON depends on external parent clock, so don't poll */
2846 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2847     .halt_reg = 0x75020,
2848     .halt_check = BRANCH_HALT_DELAY,
2849     .clkr = {
2850         .enable_reg = 0x75020,
2851         .enable_mask = BIT(0),
2852         .hw.init = &(struct clk_init_data){
2853             .name = "gcc_ufs_card_rx_symbol_0_clk",
2854             .parent_hws = (const struct clk_hw*[]){
2855                 &gcc_ufs_card_rx_symbol_0_clk_src.clkr.hw,
2856             },
2857             .num_parents = 1,
2858             .flags = CLK_SET_RATE_PARENT,
2859             .ops = &clk_branch2_ops,
2860         },
2861     },
2862 };
2863 
2864 /* Clock ON depends on external parent clock, so don't poll */
2865 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2866     .halt_reg = 0x750b8,
2867     .halt_check = BRANCH_HALT_DELAY,
2868     .clkr = {
2869         .enable_reg = 0x750b8,
2870         .enable_mask = BIT(0),
2871         .hw.init = &(struct clk_init_data){
2872             .name = "gcc_ufs_card_rx_symbol_1_clk",
2873             .parent_hws = (const struct clk_hw*[]){
2874                 &gcc_ufs_card_rx_symbol_1_clk_src.clkr.hw,
2875             },
2876             .num_parents = 1,
2877             .flags = CLK_SET_RATE_PARENT,
2878             .ops = &clk_branch2_ops,
2879         },
2880     },
2881 };
2882 
2883 /* Clock ON depends on external parent clock, so don't poll */
2884 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2885     .halt_reg = 0x7501c,
2886     .halt_check = BRANCH_HALT_DELAY,
2887     .clkr = {
2888         .enable_reg = 0x7501c,
2889         .enable_mask = BIT(0),
2890         .hw.init = &(struct clk_init_data){
2891             .name = "gcc_ufs_card_tx_symbol_0_clk",
2892             .parent_hws = (const struct clk_hw*[]){
2893                 &gcc_ufs_card_tx_symbol_0_clk_src.clkr.hw,
2894             },
2895             .num_parents = 1,
2896             .flags = CLK_SET_RATE_PARENT,
2897             .ops = &clk_branch2_ops,
2898         },
2899     },
2900 };
2901 
2902 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2903     .halt_reg = 0x7505c,
2904     .halt_check = BRANCH_HALT_VOTED,
2905     .hwcg_reg = 0x7505c,
2906     .hwcg_bit = 1,
2907     .clkr = {
2908         .enable_reg = 0x7505c,
2909         .enable_mask = BIT(0),
2910         .hw.init = &(struct clk_init_data){
2911             .name = "gcc_ufs_card_unipro_core_clk",
2912             .parent_hws = (const struct clk_hw*[]){
2913                 &gcc_ufs_card_unipro_core_clk_src.clkr.hw,
2914             },
2915             .num_parents = 1,
2916             .flags = CLK_SET_RATE_PARENT,
2917             .ops = &clk_branch2_ops,
2918         },
2919     },
2920 };
2921 
2922 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
2923     .halt_reg = 0x7505c,
2924     .halt_check = BRANCH_HALT_VOTED,
2925     .hwcg_reg = 0x7505c,
2926     .hwcg_bit = 1,
2927     .clkr = {
2928         .enable_reg = 0x7505c,
2929         .enable_mask = BIT(1),
2930         .hw.init = &(struct clk_init_data){
2931             .name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
2932             .parent_hws = (const struct clk_hw*[]){
2933                 &gcc_ufs_card_unipro_core_clk_src.clkr.hw,
2934             },
2935             .num_parents = 1,
2936             .flags = CLK_SET_RATE_PARENT,
2937             .ops = &clk_branch2_ops,
2938         },
2939     },
2940 };
2941 
2942 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2943     .halt_reg = 0x77018,
2944     .halt_check = BRANCH_HALT_VOTED,
2945     .hwcg_reg = 0x77018,
2946     .hwcg_bit = 1,
2947     .clkr = {
2948         .enable_reg = 0x77018,
2949         .enable_mask = BIT(0),
2950         .hw.init = &(struct clk_init_data){
2951             .name = "gcc_ufs_phy_ahb_clk",
2952             .ops = &clk_branch2_ops,
2953         },
2954     },
2955 };
2956 
2957 static struct clk_branch gcc_ufs_phy_axi_clk = {
2958     .halt_reg = 0x77010,
2959     .halt_check = BRANCH_HALT_VOTED,
2960     .hwcg_reg = 0x77010,
2961     .hwcg_bit = 1,
2962     .clkr = {
2963         .enable_reg = 0x77010,
2964         .enable_mask = BIT(0),
2965         .hw.init = &(struct clk_init_data){
2966             .name = "gcc_ufs_phy_axi_clk",
2967             .parent_hws = (const struct clk_hw*[]){
2968                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2969             },
2970             .num_parents = 1,
2971             .flags = CLK_SET_RATE_PARENT,
2972             .ops = &clk_branch2_ops,
2973         },
2974     },
2975 };
2976 
2977 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2978     .halt_reg = 0x77010,
2979     .halt_check = BRANCH_HALT_VOTED,
2980     .hwcg_reg = 0x77010,
2981     .hwcg_bit = 1,
2982     .clkr = {
2983         .enable_reg = 0x77010,
2984         .enable_mask = BIT(1),
2985         .hw.init = &(struct clk_init_data){
2986             .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2987             .parent_hws = (const struct clk_hw*[]){
2988                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2989             },
2990             .num_parents = 1,
2991             .flags = CLK_SET_RATE_PARENT,
2992             .ops = &clk_branch2_ops,
2993         },
2994     },
2995 };
2996 
2997 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2998     .halt_reg = 0x77064,
2999     .halt_check = BRANCH_HALT_VOTED,
3000     .hwcg_reg = 0x77064,
3001     .hwcg_bit = 1,
3002     .clkr = {
3003         .enable_reg = 0x77064,
3004         .enable_mask = BIT(0),
3005         .hw.init = &(struct clk_init_data){
3006             .name = "gcc_ufs_phy_ice_core_clk",
3007             .parent_hws = (const struct clk_hw*[]){
3008                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3009             },
3010             .num_parents = 1,
3011             .flags = CLK_SET_RATE_PARENT,
3012             .ops = &clk_branch2_ops,
3013         },
3014     },
3015 };
3016 
3017 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3018     .halt_reg = 0x77064,
3019     .halt_check = BRANCH_HALT_VOTED,
3020     .hwcg_reg = 0x77064,
3021     .hwcg_bit = 1,
3022     .clkr = {
3023         .enable_reg = 0x77064,
3024         .enable_mask = BIT(1),
3025         .hw.init = &(struct clk_init_data){
3026             .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3027             .parent_hws = (const struct clk_hw*[]){
3028                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3029             },
3030             .num_parents = 1,
3031             .flags = CLK_SET_RATE_PARENT,
3032             .ops = &clk_branch2_ops,
3033         },
3034     },
3035 };
3036 
3037 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3038     .halt_reg = 0x7709c,
3039     .halt_check = BRANCH_HALT_VOTED,
3040     .hwcg_reg = 0x7709c,
3041     .hwcg_bit = 1,
3042     .clkr = {
3043         .enable_reg = 0x7709c,
3044         .enable_mask = BIT(0),
3045         .hw.init = &(struct clk_init_data){
3046             .name = "gcc_ufs_phy_phy_aux_clk",
3047             .parent_hws = (const struct clk_hw*[]){
3048                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3049             },
3050             .num_parents = 1,
3051             .flags = CLK_SET_RATE_PARENT,
3052             .ops = &clk_branch2_ops,
3053         },
3054     },
3055 };
3056 
3057 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3058     .halt_reg = 0x7709c,
3059     .halt_check = BRANCH_HALT_VOTED,
3060     .hwcg_reg = 0x7709c,
3061     .hwcg_bit = 1,
3062     .clkr = {
3063         .enable_reg = 0x7709c,
3064         .enable_mask = BIT(1),
3065         .hw.init = &(struct clk_init_data){
3066             .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3067             .parent_hws = (const struct clk_hw*[]){
3068                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3069             },
3070             .num_parents = 1,
3071             .flags = CLK_SET_RATE_PARENT,
3072             .ops = &clk_branch2_ops,
3073         },
3074     },
3075 };
3076 
3077 /* Clock ON depends on external parent clock, so don't poll */
3078 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3079     .halt_reg = 0x77020,
3080     .halt_check = BRANCH_HALT_DELAY,
3081     .clkr = {
3082         .enable_reg = 0x77020,
3083         .enable_mask = BIT(0),
3084         .hw.init = &(struct clk_init_data){
3085             .name = "gcc_ufs_phy_rx_symbol_0_clk",
3086             .parent_hws = (const struct clk_hw*[]){
3087                 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
3088             },
3089             .num_parents = 1,
3090             .flags = CLK_SET_RATE_PARENT,
3091             .ops = &clk_branch2_ops,
3092         },
3093     },
3094 };
3095 
3096 /* Clock ON depends on external parent clock, so don't poll */
3097 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3098     .halt_reg = 0x770b8,
3099     .halt_check = BRANCH_HALT_DELAY,
3100     .clkr = {
3101         .enable_reg = 0x770b8,
3102         .enable_mask = BIT(0),
3103         .hw.init = &(struct clk_init_data){
3104             .name = "gcc_ufs_phy_rx_symbol_1_clk",
3105             .parent_hws = (const struct clk_hw*[]){
3106                 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
3107             },
3108             .num_parents = 1,
3109             .flags = CLK_SET_RATE_PARENT,
3110             .ops = &clk_branch2_ops,
3111         },
3112     },
3113 };
3114 
3115 /* Clock ON depends on external parent clock, so don't poll */
3116 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3117     .halt_reg = 0x7701c,
3118     .halt_check = BRANCH_HALT_DELAY,
3119     .clkr = {
3120         .enable_reg = 0x7701c,
3121         .enable_mask = BIT(0),
3122         .hw.init = &(struct clk_init_data){
3123             .name = "gcc_ufs_phy_tx_symbol_0_clk",
3124             .parent_hws = (const struct clk_hw*[]){
3125                 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
3126             },
3127             .num_parents = 1,
3128             .flags = CLK_SET_RATE_PARENT,
3129             .ops = &clk_branch2_ops,
3130         },
3131     },
3132 };
3133 
3134 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3135     .halt_reg = 0x7705c,
3136     .halt_check = BRANCH_HALT_VOTED,
3137     .hwcg_reg = 0x7705c,
3138     .hwcg_bit = 1,
3139     .clkr = {
3140         .enable_reg = 0x7705c,
3141         .enable_mask = BIT(0),
3142         .hw.init = &(struct clk_init_data){
3143             .name = "gcc_ufs_phy_unipro_core_clk",
3144             .parent_hws = (const struct clk_hw*[]){
3145                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3146             },
3147             .num_parents = 1,
3148             .flags = CLK_SET_RATE_PARENT,
3149             .ops = &clk_branch2_ops,
3150         },
3151     },
3152 };
3153 
3154 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3155     .halt_reg = 0x7705c,
3156     .halt_check = BRANCH_HALT_VOTED,
3157     .hwcg_reg = 0x7705c,
3158     .hwcg_bit = 1,
3159     .clkr = {
3160         .enable_reg = 0x7705c,
3161         .enable_mask = BIT(1),
3162         .hw.init = &(struct clk_init_data){
3163             .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3164             .parent_hws = (const struct clk_hw*[]){
3165                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3166             },
3167             .num_parents = 1,
3168             .flags = CLK_SET_RATE_PARENT,
3169             .ops = &clk_branch2_ops,
3170         },
3171     },
3172 };
3173 
3174 static struct clk_branch gcc_usb30_prim_master_clk = {
3175     .halt_reg = 0xf010,
3176     .halt_check = BRANCH_HALT,
3177     .clkr = {
3178         .enable_reg = 0xf010,
3179         .enable_mask = BIT(0),
3180         .hw.init = &(struct clk_init_data){
3181             .name = "gcc_usb30_prim_master_clk",
3182             .parent_hws = (const struct clk_hw*[]){
3183                 &gcc_usb30_prim_master_clk_src.clkr.hw,
3184             },
3185             .num_parents = 1,
3186             .flags = CLK_SET_RATE_PARENT,
3187             .ops = &clk_branch2_ops,
3188         },
3189     },
3190 };
3191 
3192 static struct clk_branch gcc_usb30_prim_master_clk__force_mem_core_on = {
3193     .halt_reg = 0xf010,
3194     .halt_check = BRANCH_HALT,
3195     .clkr = {
3196         .enable_reg = 0xf010,
3197         .enable_mask = BIT(14),
3198         .hw.init = &(struct clk_init_data){
3199             .name = "gcc_usb30_prim_master_clk__force_mem_core_on",
3200             .ops = &clk_branch_simple_ops,
3201         },
3202     },
3203 };
3204 
3205 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3206     .halt_reg = 0xf01c,
3207     .halt_check = BRANCH_HALT,
3208     .clkr = {
3209         .enable_reg = 0xf01c,
3210         .enable_mask = BIT(0),
3211         .hw.init = &(struct clk_init_data){
3212             .name = "gcc_usb30_prim_mock_utmi_clk",
3213             .parent_hws = (const struct clk_hw*[]){
3214                 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3215             },
3216             .num_parents = 1,
3217             .flags = CLK_SET_RATE_PARENT,
3218             .ops = &clk_branch2_ops,
3219         },
3220     },
3221 };
3222 
3223 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3224     .halt_reg = 0xf018,
3225     .halt_check = BRANCH_HALT,
3226     .clkr = {
3227         .enable_reg = 0xf018,
3228         .enable_mask = BIT(0),
3229         .hw.init = &(struct clk_init_data){
3230             .name = "gcc_usb30_prim_sleep_clk",
3231             .ops = &clk_branch2_ops,
3232         },
3233     },
3234 };
3235 
3236 static struct clk_branch gcc_usb30_sec_master_clk = {
3237     .halt_reg = 0x10010,
3238     .halt_check = BRANCH_HALT,
3239     .clkr = {
3240         .enable_reg = 0x10010,
3241         .enable_mask = BIT(0),
3242         .hw.init = &(struct clk_init_data){
3243             .name = "gcc_usb30_sec_master_clk",
3244             .parent_hws = (const struct clk_hw*[]){
3245                 &gcc_usb30_sec_master_clk_src.clkr.hw,
3246             },
3247             .num_parents = 1,
3248             .flags = CLK_SET_RATE_PARENT,
3249             .ops = &clk_branch2_ops,
3250         },
3251     },
3252 };
3253 
3254 static struct clk_branch gcc_usb30_sec_master_clk__force_mem_core_on = {
3255     .halt_reg = 0x10010,
3256     .halt_check = BRANCH_HALT,
3257     .clkr = {
3258         .enable_reg = 0x10010,
3259         .enable_mask = BIT(14),
3260         .hw.init = &(struct clk_init_data){
3261             .name = "gcc_usb30_sec_master_clk__force_mem_core_on",
3262             .ops = &clk_branch_simple_ops,
3263         },
3264     },
3265 };
3266 
3267 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3268     .halt_reg = 0x1001c,
3269     .halt_check = BRANCH_HALT,
3270     .clkr = {
3271         .enable_reg = 0x1001c,
3272         .enable_mask = BIT(0),
3273         .hw.init = &(struct clk_init_data){
3274             .name = "gcc_usb30_sec_mock_utmi_clk",
3275             .parent_hws = (const struct clk_hw*[]){
3276                 &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr.hw,
3277             },
3278             .num_parents = 1,
3279             .flags = CLK_SET_RATE_PARENT,
3280             .ops = &clk_branch2_ops,
3281         },
3282     },
3283 };
3284 
3285 static struct clk_branch gcc_usb30_sec_sleep_clk = {
3286     .halt_reg = 0x10018,
3287     .halt_check = BRANCH_HALT,
3288     .clkr = {
3289         .enable_reg = 0x10018,
3290         .enable_mask = BIT(0),
3291         .hw.init = &(struct clk_init_data){
3292             .name = "gcc_usb30_sec_sleep_clk",
3293             .ops = &clk_branch2_ops,
3294         },
3295     },
3296 };
3297 
3298 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3299     .halt_reg = 0xf054,
3300     .halt_check = BRANCH_HALT,
3301     .clkr = {
3302         .enable_reg = 0xf054,
3303         .enable_mask = BIT(0),
3304         .hw.init = &(struct clk_init_data){
3305             .name = "gcc_usb3_prim_phy_aux_clk",
3306             .parent_hws = (const struct clk_hw*[]){
3307                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3308             },
3309             .num_parents = 1,
3310             .flags = CLK_SET_RATE_PARENT,
3311             .ops = &clk_branch2_ops,
3312         },
3313     },
3314 };
3315 
3316 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3317     .halt_reg = 0xf058,
3318     .halt_check = BRANCH_HALT,
3319     .clkr = {
3320         .enable_reg = 0xf058,
3321         .enable_mask = BIT(0),
3322         .hw.init = &(struct clk_init_data){
3323             .name = "gcc_usb3_prim_phy_com_aux_clk",
3324             .parent_hws = (const struct clk_hw*[]){
3325                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3326             },
3327             .num_parents = 1,
3328             .flags = CLK_SET_RATE_PARENT,
3329             .ops = &clk_branch2_ops,
3330         },
3331     },
3332 };
3333 
3334 /* Clock ON depends on external parent clock, so don't poll */
3335 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3336     .halt_reg = 0xf05c,
3337     .halt_check = BRANCH_HALT_DELAY,
3338     .hwcg_reg = 0xf05c,
3339     .hwcg_bit = 1,
3340     .clkr = {
3341         .enable_reg = 0xf05c,
3342         .enable_mask = BIT(0),
3343         .hw.init = &(struct clk_init_data){
3344             .name = "gcc_usb3_prim_phy_pipe_clk",
3345             .parent_hws = (const struct clk_hw*[]){
3346                 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3347             },
3348             .num_parents = 1,
3349             .flags = CLK_SET_RATE_PARENT,
3350             .ops = &clk_branch2_ops,
3351         },
3352     },
3353 };
3354 
3355 static struct clk_branch gcc_usb3_sec_clkref_en = {
3356     .halt_reg = 0x8c010,
3357     .halt_check = BRANCH_HALT,
3358     .clkr = {
3359         .enable_reg = 0x8c010,
3360         .enable_mask = BIT(0),
3361         .hw.init = &(struct clk_init_data){
3362             .name = "gcc_usb3_sec_clkref_en",
3363             .ops = &clk_branch2_ops,
3364         },
3365     },
3366 };
3367 
3368 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
3369     .halt_reg = 0x10054,
3370     .halt_check = BRANCH_HALT,
3371     .clkr = {
3372         .enable_reg = 0x10054,
3373         .enable_mask = BIT(0),
3374         .hw.init = &(struct clk_init_data){
3375             .name = "gcc_usb3_sec_phy_aux_clk",
3376             .parent_hws = (const struct clk_hw*[]){
3377                 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
3378             },
3379             .num_parents = 1,
3380             .flags = CLK_SET_RATE_PARENT,
3381             .ops = &clk_branch2_ops,
3382         },
3383     },
3384 };
3385 
3386 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3387     .halt_reg = 0x10058,
3388     .halt_check = BRANCH_HALT,
3389     .clkr = {
3390         .enable_reg = 0x10058,
3391         .enable_mask = BIT(0),
3392         .hw.init = &(struct clk_init_data){
3393             .name = "gcc_usb3_sec_phy_com_aux_clk",
3394             .parent_hws = (const struct clk_hw*[]){
3395                 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
3396             },
3397             .num_parents = 1,
3398             .flags = CLK_SET_RATE_PARENT,
3399             .ops = &clk_branch2_ops,
3400         },
3401     },
3402 };
3403 
3404 /* Clock ON depends on external parent clock, so don't poll */
3405 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3406     .halt_reg = 0x1005c,
3407     .halt_check = BRANCH_HALT_DELAY,
3408     .clkr = {
3409         .enable_reg = 0x1005c,
3410         .enable_mask = BIT(0),
3411         .hw.init = &(struct clk_init_data){
3412             .name = "gcc_usb3_sec_phy_pipe_clk",
3413             .parent_hws = (const struct clk_hw*[]){
3414                 &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,
3415             },
3416             .num_parents = 1,
3417             .flags = CLK_SET_RATE_PARENT,
3418             .ops = &clk_branch2_ops,
3419         },
3420     },
3421 };
3422 
3423 /* external clocks so add BRANCH_HALT_SKIP */
3424 static struct clk_branch gcc_video_axi0_clk = {
3425     .halt_reg = 0x28010,
3426     .halt_check = BRANCH_HALT_SKIP,
3427     .hwcg_reg = 0x28010,
3428     .hwcg_bit = 1,
3429     .clkr = {
3430         .enable_reg = 0x28010,
3431         .enable_mask = BIT(0),
3432         .hw.init = &(struct clk_init_data){
3433             .name = "gcc_video_axi0_clk",
3434             .ops = &clk_branch2_ops,
3435         },
3436     },
3437 };
3438 
3439 /* external clocks so add BRANCH_HALT_SKIP */
3440 static struct clk_branch gcc_video_axi1_clk = {
3441     .halt_reg = 0x28018,
3442     .halt_check = BRANCH_HALT_SKIP,
3443     .hwcg_reg = 0x28018,
3444     .hwcg_bit = 1,
3445     .clkr = {
3446         .enable_reg = 0x28018,
3447         .enable_mask = BIT(0),
3448         .hw.init = &(struct clk_init_data){
3449             .name = "gcc_video_axi1_clk",
3450             .ops = &clk_branch2_ops,
3451         },
3452     },
3453 };
3454 
3455 static struct gdsc pcie_0_gdsc = {
3456     .gdscr = 0x6b004,
3457     .pd = {
3458         .name = "pcie_0_gdsc",
3459     },
3460     .pwrsts = PWRSTS_OFF_ON,
3461 };
3462 
3463 static struct gdsc pcie_1_gdsc = {
3464     .gdscr = 0x8d004,
3465     .pd = {
3466         .name = "pcie_1_gdsc",
3467     },
3468     .pwrsts = PWRSTS_OFF_ON,
3469 };
3470 
3471 static struct gdsc ufs_card_gdsc = {
3472     .gdscr = 0x75004,
3473     .pd = {
3474         .name = "ufs_card_gdsc",
3475     },
3476     .pwrsts = PWRSTS_OFF_ON,
3477 };
3478 
3479 static struct gdsc ufs_phy_gdsc = {
3480     .gdscr = 0x77004,
3481     .pd = {
3482         .name = "ufs_phy_gdsc",
3483     },
3484     .pwrsts = PWRSTS_OFF_ON,
3485 };
3486 
3487 static struct gdsc usb30_prim_gdsc = {
3488     .gdscr = 0xf004,
3489     .pd = {
3490         .name = "usb30_prim_gdsc",
3491     },
3492     .pwrsts = PWRSTS_OFF_ON,
3493 };
3494 
3495 static struct gdsc usb30_sec_gdsc = {
3496     .gdscr = 0x10004,
3497     .pd = {
3498         .name = "usb30_sec_gdsc",
3499     },
3500     .pwrsts = PWRSTS_OFF_ON,
3501 };
3502 
3503 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
3504     .gdscr = 0x7d050,
3505     .pd = {
3506         .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
3507     },
3508     .pwrsts = PWRSTS_OFF_ON,
3509     .flags = VOTABLE,
3510 };
3511 
3512 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
3513     .gdscr = 0x7d058,
3514     .pd = {
3515         .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
3516     },
3517     .pwrsts = PWRSTS_OFF_ON,
3518     .flags = VOTABLE,
3519 };
3520 
3521 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc = {
3522     .gdscr = 0x7d054,
3523     .pd = {
3524         .name = "hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc",
3525     },
3526     .pwrsts = PWRSTS_OFF_ON,
3527     .flags = VOTABLE,
3528 };
3529 
3530 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc = {
3531     .gdscr = 0x7d06c,
3532     .pd = {
3533         .name = "hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc",
3534     },
3535     .pwrsts = PWRSTS_OFF_ON,
3536     .flags = VOTABLE,
3537 };
3538 
3539 static struct clk_regmap *gcc_sm8350_clocks[] = {
3540     [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
3541     [GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
3542     [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3543     [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3544     [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
3545     [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3546     [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3547     [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3548     [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3549     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3550     [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3551     [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3552     [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3553     [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3554     [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3555     [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
3556     [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3557     [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3558     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3559     [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3560     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3561     [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3562     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3563     [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3564     [GCC_GPLL0] = &gcc_gpll0.clkr,
3565     [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3566     [GCC_GPLL4] = &gcc_gpll4.clkr,
3567     [GCC_GPLL9] = &gcc_gpll9.clkr,
3568     [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3569     [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3570     [GCC_GPU_IREF_EN] = &gcc_gpu_iref_en.clkr,
3571     [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3572     [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3573     [GCC_PCIE0_PHY_RCHNG_CLK] = &gcc_pcie0_phy_rchng_clk.clkr,
3574     [GCC_PCIE1_PHY_RCHNG_CLK] = &gcc_pcie1_phy_rchng_clk.clkr,
3575     [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3576     [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3577     [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3578     [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
3579     [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3580     [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3581     [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3582     [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3583     [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3584     [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3585     [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3586     [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3587     [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3588     [GCC_PCIE_1_CLKREF_EN] = &gcc_pcie_1_clkref_en.clkr,
3589     [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3590     [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3591     [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3592     [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3593     [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3594     [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3595     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3596     [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3597     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3598     [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3599     [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3600     [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3601     [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3602     [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3603     [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3604     [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3605     [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3606     [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3607     [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3608     [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3609     [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3610     [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3611     [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3612     [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3613     [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3614     [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3615     [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3616     [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3617     [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3618     [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3619     [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3620     [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3621     [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3622     [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3623     [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3624     [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3625     [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3626     [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3627     [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3628     [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3629     [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3630     [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3631     [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3632     [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3633     [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3634     [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3635     [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3636     [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3637     [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3638     [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3639     [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3640     [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3641     [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3642     [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3643     [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3644     [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3645     [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3646     [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3647     [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3648     [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3649     [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3650     [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3651     [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3652     [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3653     [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3654     [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3655     [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3656     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3657     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3658     [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3659     [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3660     [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3661     [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3662     [GCC_THROTTLE_PCIE_AHB_CLK] = &gcc_throttle_pcie_ahb_clk.clkr,
3663     [GCC_UFS_1_CLKREF_EN] = &gcc_ufs_1_clkref_en.clkr,
3664     [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3665     [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3666     [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3667     [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
3668     [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3669     [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3670     [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
3671     [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3672     [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3673     [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
3674     [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3675     [GCC_UFS_CARD_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_card_rx_symbol_0_clk_src.clkr,
3676     [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3677     [GCC_UFS_CARD_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_card_rx_symbol_1_clk_src.clkr,
3678     [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3679     [GCC_UFS_CARD_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_card_tx_symbol_0_clk_src.clkr,
3680     [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3681     [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr,
3682     [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
3683     [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3684     [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3685     [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3686     [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3687     [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3688     [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3689     [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3690     [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3691     [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3692     [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3693     [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3694     [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3695     [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3696     [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3697     [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3698     [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3699     [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3700     [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3701     [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3702     [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3703     [GCC_USB30_PRIM_MASTER_CLK__FORCE_MEM_CORE_ON] =
3704             &gcc_usb30_prim_master_clk__force_mem_core_on.clkr,
3705     [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3706     [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3707     [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3708     [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3709     [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3710     [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3711     [GCC_USB30_SEC_MASTER_CLK__FORCE_MEM_CORE_ON] =
3712             &gcc_usb30_sec_master_clk__force_mem_core_on.clkr,
3713     [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3714     [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3715     [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr,
3716     [GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr,
3717     [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3718     [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3719     [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3720     [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3721     [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3722     [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3723     [GCC_USB3_SEC_CLKREF_EN] = &gcc_usb3_sec_clkref_en.clkr,
3724     [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3725     [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3726     [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3727     [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3728     [GCC_USB3_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb3_sec_phy_pipe_clk_src.clkr,
3729     [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3730     [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3731 };
3732 
3733 static struct gdsc *gcc_sm8350_gdscs[] = {
3734     [PCIE_0_GDSC] = &pcie_0_gdsc,
3735     [PCIE_1_GDSC] = &pcie_1_gdsc,
3736     [UFS_CARD_GDSC] = &ufs_card_gdsc,
3737     [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3738     [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3739     [USB30_SEC_GDSC] = &usb30_sec_gdsc,
3740     [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
3741     [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
3742     [HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc,
3743     [HLOS1_VOTE_MMNOC_MMU_TBU_SF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc,
3744 };
3745 
3746 static const struct qcom_reset_map gcc_sm8350_resets[] = {
3747     [GCC_CAMERA_BCR] = { 0x26000 },
3748     [GCC_DISPLAY_BCR] = { 0x27000 },
3749     [GCC_GPU_BCR] = { 0x71000 },
3750     [GCC_MMSS_BCR] = { 0xb000 },
3751     [GCC_PCIE_0_BCR] = { 0x6b000 },
3752     [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
3753     [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
3754     [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3755     [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
3756     [GCC_PCIE_1_BCR] = { 0x8d000 },
3757     [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
3758     [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
3759     [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3760     [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e000 },
3761     [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
3762     [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
3763     [GCC_PDM_BCR] = { 0x33000 },
3764     [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3765     [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3766     [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3767     [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3768     [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3769     [GCC_SDCC2_BCR] = { 0x14000 },
3770     [GCC_SDCC4_BCR] = { 0x16000 },
3771     [GCC_UFS_CARD_BCR] = { 0x75000 },
3772     [GCC_UFS_PHY_BCR] = { 0x77000 },
3773     [GCC_USB30_PRIM_BCR] = { 0xf000 },
3774     [GCC_USB30_SEC_BCR] = { 0x10000 },
3775     [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3776     [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3777     [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3778     [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3779     [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3780     [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3781     [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3782     [GCC_VIDEO_AXI0_CLK_ARES] = { 0x28010, 2 },
3783     [GCC_VIDEO_AXI1_CLK_ARES] = { 0x28018, 2 },
3784     [GCC_VIDEO_BCR] = { 0x28000 },
3785 };
3786 
3787 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3788     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3789     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3790     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3791     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3792     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3793     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3794     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3795     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3796     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3797     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3798     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3799     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3800     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3801     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3802     DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3803     DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3804     DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3805     DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3806     DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3807     DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3808 };
3809 
3810 static const struct regmap_config gcc_sm8350_regmap_config = {
3811     .reg_bits = 32,
3812     .reg_stride = 4,
3813     .val_bits = 32,
3814     .max_register = 0x9c100,
3815     .fast_io = true,
3816 };
3817 
3818 static const struct qcom_cc_desc gcc_sm8350_desc = {
3819     .config = &gcc_sm8350_regmap_config,
3820     .clks = gcc_sm8350_clocks,
3821     .num_clks = ARRAY_SIZE(gcc_sm8350_clocks),
3822     .resets = gcc_sm8350_resets,
3823     .num_resets = ARRAY_SIZE(gcc_sm8350_resets),
3824     .gdscs = gcc_sm8350_gdscs,
3825     .num_gdscs = ARRAY_SIZE(gcc_sm8350_gdscs),
3826 };
3827 
3828 static const struct of_device_id gcc_sm8350_match_table[] = {
3829     { .compatible = "qcom,gcc-sm8350" },
3830     { }
3831 };
3832 MODULE_DEVICE_TABLE(of, gcc_sm8350_match_table);
3833 
3834 static int gcc_sm8350_probe(struct platform_device *pdev)
3835 {
3836     struct regmap *regmap;
3837     int ret;
3838 
3839     regmap = qcom_cc_map(pdev, &gcc_sm8350_desc);
3840     if (IS_ERR(regmap)) {
3841         dev_err(&pdev->dev, "Failed to map gcc registers\n");
3842         return PTR_ERR(regmap);
3843     }
3844 
3845     /*
3846      * Keep the critical clock always-On
3847      * GCC_CAMERA_AHB_CLK, GCC_CAMERA_XO_CLK, GCC_DISP_AHB_CLK, GCC_DISP_XO_CLK,
3848      * GCC_GPU_CFG_AHB_CLK, GCC_VIDEO_AHB_CLK, GCC_VIDEO_XO_CLK
3849      */
3850     regmap_update_bits(regmap, 0x26004, BIT(0), BIT(0));
3851     regmap_update_bits(regmap, 0x26018, BIT(0), BIT(0));
3852     regmap_update_bits(regmap, 0x27004, BIT(0), BIT(0));
3853     regmap_update_bits(regmap, 0x2701c, BIT(0), BIT(0));
3854     regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
3855     regmap_update_bits(regmap, 0x28004, BIT(0), BIT(0));
3856     regmap_update_bits(regmap, 0x28020, BIT(0), BIT(0));
3857 
3858     ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
3859     if (ret)
3860         return ret;
3861 
3862     /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3863     regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3864 
3865     return qcom_cc_really_probe(pdev, &gcc_sm8350_desc, regmap);
3866 }
3867 
3868 static struct platform_driver gcc_sm8350_driver = {
3869     .probe = gcc_sm8350_probe,
3870     .driver = {
3871         .name = "sm8350-gcc",
3872         .of_match_table = gcc_sm8350_match_table,
3873     },
3874 };
3875 
3876 static int __init gcc_sm8350_init(void)
3877 {
3878     return platform_driver_register(&gcc_sm8350_driver);
3879 }
3880 subsys_initcall(gcc_sm8350_init);
3881 
3882 static void __exit gcc_sm8350_exit(void)
3883 {
3884     platform_driver_unregister(&gcc_sm8350_driver);
3885 }
3886 module_exit(gcc_sm8350_exit);
3887 
3888 MODULE_DESCRIPTION("QTI GCC SM8350 Driver");
3889 MODULE_LICENSE("GPL v2");