Back to home page

OSCL-LXR

 
 

    


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