Back to home page

OSCL-LXR

 
 

    


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