Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright 2015 Linaro Limited
0004  */
0005 
0006 #include <linux/kernel.h>
0007 #include <linux/bitops.h>
0008 #include <linux/err.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/module.h>
0011 #include <linux/of.h>
0012 #include <linux/of_device.h>
0013 #include <linux/clk-provider.h>
0014 #include <linux/regmap.h>
0015 #include <linux/reset-controller.h>
0016 
0017 #include <dt-bindings/clock/qcom,gcc-msm8916.h>
0018 #include <dt-bindings/reset/qcom,gcc-msm8916.h>
0019 
0020 #include "common.h"
0021 #include "clk-regmap.h"
0022 #include "clk-pll.h"
0023 #include "clk-rcg.h"
0024 #include "clk-branch.h"
0025 #include "reset.h"
0026 #include "gdsc.h"
0027 
0028 enum {
0029     P_XO,
0030     P_GPLL0,
0031     P_GPLL0_AUX,
0032     P_BIMC,
0033     P_GPLL1,
0034     P_GPLL1_AUX,
0035     P_GPLL2,
0036     P_GPLL2_AUX,
0037     P_SLEEP_CLK,
0038     P_DSI0_PHYPLL_BYTE,
0039     P_DSI0_PHYPLL_DSI,
0040     P_EXT_PRI_I2S,
0041     P_EXT_SEC_I2S,
0042     P_EXT_MCLK,
0043 };
0044 
0045 static const struct parent_map gcc_xo_gpll0_map[] = {
0046     { P_XO, 0 },
0047     { P_GPLL0, 1 },
0048 };
0049 
0050 static const char * const gcc_xo_gpll0[] = {
0051     "xo",
0052     "gpll0_vote",
0053 };
0054 
0055 static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
0056     { P_XO, 0 },
0057     { P_GPLL0, 1 },
0058     { P_BIMC, 2 },
0059 };
0060 
0061 static const char * const gcc_xo_gpll0_bimc[] = {
0062     "xo",
0063     "gpll0_vote",
0064     "bimc_pll_vote",
0065 };
0066 
0067 static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2a_map[] = {
0068     { P_XO, 0 },
0069     { P_GPLL0_AUX, 3 },
0070     { P_GPLL1, 1 },
0071     { P_GPLL2_AUX, 2 },
0072 };
0073 
0074 static const char * const gcc_xo_gpll0a_gpll1_gpll2a[] = {
0075     "xo",
0076     "gpll0_vote",
0077     "gpll1_vote",
0078     "gpll2_vote",
0079 };
0080 
0081 static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
0082     { P_XO, 0 },
0083     { P_GPLL0, 1 },
0084     { P_GPLL2, 2 },
0085 };
0086 
0087 static const char * const gcc_xo_gpll0_gpll2[] = {
0088     "xo",
0089     "gpll0_vote",
0090     "gpll2_vote",
0091 };
0092 
0093 static const struct parent_map gcc_xo_gpll0a_map[] = {
0094     { P_XO, 0 },
0095     { P_GPLL0_AUX, 2 },
0096 };
0097 
0098 static const char * const gcc_xo_gpll0a[] = {
0099     "xo",
0100     "gpll0_vote",
0101 };
0102 
0103 static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {
0104     { P_XO, 0 },
0105     { P_GPLL0, 1 },
0106     { P_GPLL1_AUX, 2 },
0107     { P_SLEEP_CLK, 6 },
0108 };
0109 
0110 static const char * const gcc_xo_gpll0_gpll1a_sleep[] = {
0111     "xo",
0112     "gpll0_vote",
0113     "gpll1_vote",
0114     "sleep_clk",
0115 };
0116 
0117 static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {
0118     { P_XO, 0 },
0119     { P_GPLL0, 1 },
0120     { P_GPLL1_AUX, 2 },
0121 };
0122 
0123 static const char * const gcc_xo_gpll0_gpll1a[] = {
0124     "xo",
0125     "gpll0_vote",
0126     "gpll1_vote",
0127 };
0128 
0129 static const struct parent_map gcc_xo_dsibyte_map[] = {
0130     { P_XO, 0, },
0131     { P_DSI0_PHYPLL_BYTE, 2 },
0132 };
0133 
0134 static const char * const gcc_xo_dsibyte[] = {
0135     "xo",
0136     "dsi0pllbyte",
0137 };
0138 
0139 static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {
0140     { P_XO, 0 },
0141     { P_GPLL0_AUX, 2 },
0142     { P_DSI0_PHYPLL_BYTE, 1 },
0143 };
0144 
0145 static const char * const gcc_xo_gpll0a_dsibyte[] = {
0146     "xo",
0147     "gpll0_vote",
0148     "dsi0pllbyte",
0149 };
0150 
0151 static const struct parent_map gcc_xo_gpll0_dsiphy_map[] = {
0152     { P_XO, 0 },
0153     { P_GPLL0, 1 },
0154     { P_DSI0_PHYPLL_DSI, 2 },
0155 };
0156 
0157 static const char * const gcc_xo_gpll0_dsiphy[] = {
0158     "xo",
0159     "gpll0_vote",
0160     "dsi0pll",
0161 };
0162 
0163 static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {
0164     { P_XO, 0 },
0165     { P_GPLL0_AUX, 2 },
0166     { P_DSI0_PHYPLL_DSI, 1 },
0167 };
0168 
0169 static const char * const gcc_xo_gpll0a_dsiphy[] = {
0170     "xo",
0171     "gpll0_vote",
0172     "dsi0pll",
0173 };
0174 
0175 static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2_map[] = {
0176     { P_XO, 0 },
0177     { P_GPLL0_AUX, 1 },
0178     { P_GPLL1, 3 },
0179     { P_GPLL2, 2 },
0180 };
0181 
0182 static const char * const gcc_xo_gpll0a_gpll1_gpll2[] = {
0183     "xo",
0184     "gpll0_vote",
0185     "gpll1_vote",
0186     "gpll2_vote",
0187 };
0188 
0189 static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
0190     { P_XO, 0 },
0191     { P_GPLL0, 1 },
0192     { P_GPLL1, 2 },
0193     { P_SLEEP_CLK, 6 }
0194 };
0195 
0196 static const char * const gcc_xo_gpll0_gpll1_sleep[] = {
0197     "xo",
0198     "gpll0_vote",
0199     "gpll1_vote",
0200     "sleep_clk",
0201 };
0202 
0203 static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = {
0204     { P_XO, 0 },
0205     { P_GPLL1, 1 },
0206     { P_EXT_PRI_I2S, 2 },
0207     { P_EXT_MCLK, 3 },
0208     { P_SLEEP_CLK, 6 }
0209 };
0210 
0211 static const char * const gcc_xo_gpll1_epi2s_emclk_sleep[] = {
0212     "xo",
0213     "gpll1_vote",
0214     "ext_pri_i2s",
0215     "ext_mclk",
0216     "sleep_clk",
0217 };
0218 
0219 static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = {
0220     { P_XO, 0 },
0221     { P_GPLL1, 1 },
0222     { P_EXT_SEC_I2S, 2 },
0223     { P_EXT_MCLK, 3 },
0224     { P_SLEEP_CLK, 6 }
0225 };
0226 
0227 static const char * const gcc_xo_gpll1_esi2s_emclk_sleep[] = {
0228     "xo",
0229     "gpll1_vote",
0230     "ext_sec_i2s",
0231     "ext_mclk",
0232     "sleep_clk",
0233 };
0234 
0235 static const struct parent_map gcc_xo_sleep_map[] = {
0236     { P_XO, 0 },
0237     { P_SLEEP_CLK, 6 }
0238 };
0239 
0240 static const char * const gcc_xo_sleep[] = {
0241     "xo",
0242     "sleep_clk",
0243 };
0244 
0245 static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = {
0246     { P_XO, 0 },
0247     { P_GPLL1, 1 },
0248     { P_EXT_MCLK, 2 },
0249     { P_SLEEP_CLK, 6 }
0250 };
0251 
0252 static const char * const gcc_xo_gpll1_emclk_sleep[] = {
0253     "xo",
0254     "gpll1_vote",
0255     "ext_mclk",
0256     "sleep_clk",
0257 };
0258 
0259 static struct clk_pll gpll0 = {
0260     .l_reg = 0x21004,
0261     .m_reg = 0x21008,
0262     .n_reg = 0x2100c,
0263     .config_reg = 0x21010,
0264     .mode_reg = 0x21000,
0265     .status_reg = 0x2101c,
0266     .status_bit = 17,
0267     .clkr.hw.init = &(struct clk_init_data){
0268         .name = "gpll0",
0269         .parent_names = (const char *[]){ "xo" },
0270         .num_parents = 1,
0271         .ops = &clk_pll_ops,
0272     },
0273 };
0274 
0275 static struct clk_regmap gpll0_vote = {
0276     .enable_reg = 0x45000,
0277     .enable_mask = BIT(0),
0278     .hw.init = &(struct clk_init_data){
0279         .name = "gpll0_vote",
0280         .parent_names = (const char *[]){ "gpll0" },
0281         .num_parents = 1,
0282         .ops = &clk_pll_vote_ops,
0283     },
0284 };
0285 
0286 static struct clk_pll gpll1 = {
0287     .l_reg = 0x20004,
0288     .m_reg = 0x20008,
0289     .n_reg = 0x2000c,
0290     .config_reg = 0x20010,
0291     .mode_reg = 0x20000,
0292     .status_reg = 0x2001c,
0293     .status_bit = 17,
0294     .clkr.hw.init = &(struct clk_init_data){
0295         .name = "gpll1",
0296         .parent_names = (const char *[]){ "xo" },
0297         .num_parents = 1,
0298         .ops = &clk_pll_ops,
0299     },
0300 };
0301 
0302 static struct clk_regmap gpll1_vote = {
0303     .enable_reg = 0x45000,
0304     .enable_mask = BIT(1),
0305     .hw.init = &(struct clk_init_data){
0306         .name = "gpll1_vote",
0307         .parent_names = (const char *[]){ "gpll1" },
0308         .num_parents = 1,
0309         .ops = &clk_pll_vote_ops,
0310     },
0311 };
0312 
0313 static struct clk_pll gpll2 = {
0314     .l_reg = 0x4a004,
0315     .m_reg = 0x4a008,
0316     .n_reg = 0x4a00c,
0317     .config_reg = 0x4a010,
0318     .mode_reg = 0x4a000,
0319     .status_reg = 0x4a01c,
0320     .status_bit = 17,
0321     .clkr.hw.init = &(struct clk_init_data){
0322         .name = "gpll2",
0323         .parent_names = (const char *[]){ "xo" },
0324         .num_parents = 1,
0325         .ops = &clk_pll_ops,
0326     },
0327 };
0328 
0329 static struct clk_regmap gpll2_vote = {
0330     .enable_reg = 0x45000,
0331     .enable_mask = BIT(2),
0332     .hw.init = &(struct clk_init_data){
0333         .name = "gpll2_vote",
0334         .parent_names = (const char *[]){ "gpll2" },
0335         .num_parents = 1,
0336         .ops = &clk_pll_vote_ops,
0337     },
0338 };
0339 
0340 static struct clk_pll bimc_pll = {
0341     .l_reg = 0x23004,
0342     .m_reg = 0x23008,
0343     .n_reg = 0x2300c,
0344     .config_reg = 0x23010,
0345     .mode_reg = 0x23000,
0346     .status_reg = 0x2301c,
0347     .status_bit = 17,
0348     .clkr.hw.init = &(struct clk_init_data){
0349         .name = "bimc_pll",
0350         .parent_names = (const char *[]){ "xo" },
0351         .num_parents = 1,
0352         .ops = &clk_pll_ops,
0353     },
0354 };
0355 
0356 static struct clk_regmap bimc_pll_vote = {
0357     .enable_reg = 0x45000,
0358     .enable_mask = BIT(3),
0359     .hw.init = &(struct clk_init_data){
0360         .name = "bimc_pll_vote",
0361         .parent_names = (const char *[]){ "bimc_pll" },
0362         .num_parents = 1,
0363         .ops = &clk_pll_vote_ops,
0364     },
0365 };
0366 
0367 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
0368     .cmd_rcgr = 0x27000,
0369     .hid_width = 5,
0370     .parent_map = gcc_xo_gpll0_bimc_map,
0371     .clkr.hw.init = &(struct clk_init_data){
0372         .name = "pcnoc_bfdcd_clk_src",
0373         .parent_names = gcc_xo_gpll0_bimc,
0374         .num_parents = 3,
0375         .ops = &clk_rcg2_ops,
0376     },
0377 };
0378 
0379 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
0380     .cmd_rcgr = 0x26004,
0381     .hid_width = 5,
0382     .parent_map = gcc_xo_gpll0_bimc_map,
0383     .clkr.hw.init = &(struct clk_init_data){
0384         .name = "system_noc_bfdcd_clk_src",
0385         .parent_names = gcc_xo_gpll0_bimc,
0386         .num_parents = 3,
0387         .ops = &clk_rcg2_ops,
0388     },
0389 };
0390 
0391 static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {
0392     F(40000000, P_GPLL0, 10, 1, 2),
0393     F(80000000, P_GPLL0, 10, 0, 0),
0394     { }
0395 };
0396 
0397 static struct clk_rcg2 camss_ahb_clk_src = {
0398     .cmd_rcgr = 0x5a000,
0399     .mnd_width = 8,
0400     .hid_width = 5,
0401     .parent_map = gcc_xo_gpll0_map,
0402     .freq_tbl = ftbl_gcc_camss_ahb_clk,
0403     .clkr.hw.init = &(struct clk_init_data){
0404         .name = "camss_ahb_clk_src",
0405         .parent_names = gcc_xo_gpll0,
0406         .num_parents = 2,
0407         .ops = &clk_rcg2_ops,
0408     },
0409 };
0410 
0411 static const struct freq_tbl ftbl_apss_ahb_clk[] = {
0412     F(19200000, P_XO, 1, 0, 0),
0413     F(50000000, P_GPLL0, 16, 0, 0),
0414     F(100000000, P_GPLL0, 8, 0, 0),
0415     F(133330000, P_GPLL0, 6, 0, 0),
0416     { }
0417 };
0418 
0419 static struct clk_rcg2 apss_ahb_clk_src = {
0420     .cmd_rcgr = 0x46000,
0421     .hid_width = 5,
0422     .parent_map = gcc_xo_gpll0_map,
0423     .freq_tbl = ftbl_apss_ahb_clk,
0424     .clkr.hw.init = &(struct clk_init_data){
0425         .name = "apss_ahb_clk_src",
0426         .parent_names = gcc_xo_gpll0,
0427         .num_parents = 2,
0428         .ops = &clk_rcg2_ops,
0429     },
0430 };
0431 
0432 static const struct freq_tbl ftbl_gcc_camss_csi0_1_clk[] = {
0433     F(100000000, P_GPLL0, 8, 0, 0),
0434     F(200000000, P_GPLL0, 4, 0, 0),
0435     { }
0436 };
0437 
0438 static struct clk_rcg2 csi0_clk_src = {
0439     .cmd_rcgr = 0x4e020,
0440     .hid_width = 5,
0441     .parent_map = gcc_xo_gpll0_map,
0442     .freq_tbl = ftbl_gcc_camss_csi0_1_clk,
0443     .clkr.hw.init = &(struct clk_init_data){
0444         .name = "csi0_clk_src",
0445         .parent_names = gcc_xo_gpll0,
0446         .num_parents = 2,
0447         .ops = &clk_rcg2_ops,
0448     },
0449 };
0450 
0451 static struct clk_rcg2 csi1_clk_src = {
0452     .cmd_rcgr = 0x4f020,
0453     .hid_width = 5,
0454     .parent_map = gcc_xo_gpll0_map,
0455     .freq_tbl = ftbl_gcc_camss_csi0_1_clk,
0456     .clkr.hw.init = &(struct clk_init_data){
0457         .name = "csi1_clk_src",
0458         .parent_names = gcc_xo_gpll0,
0459         .num_parents = 2,
0460         .ops = &clk_rcg2_ops,
0461     },
0462 };
0463 
0464 static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {
0465     F(19200000, P_XO, 1, 0, 0),
0466     F(50000000, P_GPLL0_AUX, 16, 0, 0),
0467     F(80000000, P_GPLL0_AUX, 10, 0, 0),
0468     F(100000000, P_GPLL0_AUX, 8, 0, 0),
0469     F(160000000, P_GPLL0_AUX, 5, 0, 0),
0470     F(177780000, P_GPLL0_AUX, 4.5, 0, 0),
0471     F(200000000, P_GPLL0_AUX, 4, 0, 0),
0472     F(266670000, P_GPLL0_AUX, 3, 0, 0),
0473     F(294912000, P_GPLL1, 3, 0, 0),
0474     F(310000000, P_GPLL2, 3, 0, 0),
0475     F(400000000, P_GPLL0_AUX, 2, 0, 0),
0476     { }
0477 };
0478 
0479 static struct clk_rcg2 gfx3d_clk_src = {
0480     .cmd_rcgr = 0x59000,
0481     .hid_width = 5,
0482     .parent_map = gcc_xo_gpll0a_gpll1_gpll2a_map,
0483     .freq_tbl = ftbl_gcc_oxili_gfx3d_clk,
0484     .clkr.hw.init = &(struct clk_init_data){
0485         .name = "gfx3d_clk_src",
0486         .parent_names = gcc_xo_gpll0a_gpll1_gpll2a,
0487         .num_parents = 4,
0488         .ops = &clk_rcg2_ops,
0489     },
0490 };
0491 
0492 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
0493     F(50000000, P_GPLL0, 16, 0, 0),
0494     F(80000000, P_GPLL0, 10, 0, 0),
0495     F(100000000, P_GPLL0, 8, 0, 0),
0496     F(160000000, P_GPLL0, 5, 0, 0),
0497     F(177780000, P_GPLL0, 4.5, 0, 0),
0498     F(200000000, P_GPLL0, 4, 0, 0),
0499     F(266670000, P_GPLL0, 3, 0, 0),
0500     F(320000000, P_GPLL0, 2.5, 0, 0),
0501     F(400000000, P_GPLL0, 2, 0, 0),
0502     F(465000000, P_GPLL2, 2, 0, 0),
0503     { }
0504 };
0505 
0506 static struct clk_rcg2 vfe0_clk_src = {
0507     .cmd_rcgr = 0x58000,
0508     .hid_width = 5,
0509     .parent_map = gcc_xo_gpll0_gpll2_map,
0510     .freq_tbl = ftbl_gcc_camss_vfe0_clk,
0511     .clkr.hw.init = &(struct clk_init_data){
0512         .name = "vfe0_clk_src",
0513         .parent_names = gcc_xo_gpll0_gpll2,
0514         .num_parents = 3,
0515         .ops = &clk_rcg2_ops,
0516     },
0517 };
0518 
0519 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
0520     F(19200000, P_XO, 1, 0, 0),
0521     F(50000000, P_GPLL0, 16, 0, 0),
0522     { }
0523 };
0524 
0525 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
0526     .cmd_rcgr = 0x0200c,
0527     .hid_width = 5,
0528     .parent_map = gcc_xo_gpll0_map,
0529     .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
0530     .clkr.hw.init = &(struct clk_init_data){
0531         .name = "blsp1_qup1_i2c_apps_clk_src",
0532         .parent_names = gcc_xo_gpll0,
0533         .num_parents = 2,
0534         .ops = &clk_rcg2_ops,
0535     },
0536 };
0537 
0538 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
0539     F(100000, P_XO, 16, 2, 24),
0540     F(250000, P_XO, 16, 5, 24),
0541     F(500000, P_XO, 8, 5, 24),
0542     F(960000, P_XO, 10, 1, 2),
0543     F(1000000, P_XO, 4, 5, 24),
0544     F(4800000, P_XO, 4, 0, 0),
0545     F(9600000, P_XO, 2, 0, 0),
0546     F(16000000, P_GPLL0, 10, 1, 5),
0547     F(19200000, P_XO, 1, 0, 0),
0548     F(25000000, P_GPLL0, 16, 1, 2),
0549     F(50000000, P_GPLL0, 16, 0, 0),
0550     { }
0551 };
0552 
0553 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
0554     .cmd_rcgr = 0x02024,
0555     .mnd_width = 8,
0556     .hid_width = 5,
0557     .parent_map = gcc_xo_gpll0_map,
0558     .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
0559     .clkr.hw.init = &(struct clk_init_data){
0560         .name = "blsp1_qup1_spi_apps_clk_src",
0561         .parent_names = gcc_xo_gpll0,
0562         .num_parents = 2,
0563         .ops = &clk_rcg2_ops,
0564     },
0565 };
0566 
0567 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
0568     .cmd_rcgr = 0x03000,
0569     .hid_width = 5,
0570     .parent_map = gcc_xo_gpll0_map,
0571     .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
0572     .clkr.hw.init = &(struct clk_init_data){
0573         .name = "blsp1_qup2_i2c_apps_clk_src",
0574         .parent_names = gcc_xo_gpll0,
0575         .num_parents = 2,
0576         .ops = &clk_rcg2_ops,
0577     },
0578 };
0579 
0580 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
0581     .cmd_rcgr = 0x03014,
0582     .mnd_width = 8,
0583     .hid_width = 5,
0584     .parent_map = gcc_xo_gpll0_map,
0585     .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
0586     .clkr.hw.init = &(struct clk_init_data){
0587         .name = "blsp1_qup2_spi_apps_clk_src",
0588         .parent_names = gcc_xo_gpll0,
0589         .num_parents = 2,
0590         .ops = &clk_rcg2_ops,
0591     },
0592 };
0593 
0594 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
0595     .cmd_rcgr = 0x04000,
0596     .hid_width = 5,
0597     .parent_map = gcc_xo_gpll0_map,
0598     .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
0599     .clkr.hw.init = &(struct clk_init_data){
0600         .name = "blsp1_qup3_i2c_apps_clk_src",
0601         .parent_names = gcc_xo_gpll0,
0602         .num_parents = 2,
0603         .ops = &clk_rcg2_ops,
0604     },
0605 };
0606 
0607 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
0608     .cmd_rcgr = 0x04024,
0609     .mnd_width = 8,
0610     .hid_width = 5,
0611     .parent_map = gcc_xo_gpll0_map,
0612     .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
0613     .clkr.hw.init = &(struct clk_init_data){
0614         .name = "blsp1_qup3_spi_apps_clk_src",
0615         .parent_names = gcc_xo_gpll0,
0616         .num_parents = 2,
0617         .ops = &clk_rcg2_ops,
0618     },
0619 };
0620 
0621 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
0622     .cmd_rcgr = 0x05000,
0623     .hid_width = 5,
0624     .parent_map = gcc_xo_gpll0_map,
0625     .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
0626     .clkr.hw.init = &(struct clk_init_data){
0627         .name = "blsp1_qup4_i2c_apps_clk_src",
0628         .parent_names = gcc_xo_gpll0,
0629         .num_parents = 2,
0630         .ops = &clk_rcg2_ops,
0631     },
0632 };
0633 
0634 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
0635     .cmd_rcgr = 0x05024,
0636     .mnd_width = 8,
0637     .hid_width = 5,
0638     .parent_map = gcc_xo_gpll0_map,
0639     .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
0640     .clkr.hw.init = &(struct clk_init_data){
0641         .name = "blsp1_qup4_spi_apps_clk_src",
0642         .parent_names = gcc_xo_gpll0,
0643         .num_parents = 2,
0644         .ops = &clk_rcg2_ops,
0645     },
0646 };
0647 
0648 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
0649     .cmd_rcgr = 0x06000,
0650     .hid_width = 5,
0651     .parent_map = gcc_xo_gpll0_map,
0652     .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
0653     .clkr.hw.init = &(struct clk_init_data){
0654         .name = "blsp1_qup5_i2c_apps_clk_src",
0655         .parent_names = gcc_xo_gpll0,
0656         .num_parents = 2,
0657         .ops = &clk_rcg2_ops,
0658     },
0659 };
0660 
0661 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
0662     .cmd_rcgr = 0x06024,
0663     .mnd_width = 8,
0664     .hid_width = 5,
0665     .parent_map = gcc_xo_gpll0_map,
0666     .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
0667     .clkr.hw.init = &(struct clk_init_data){
0668         .name = "blsp1_qup5_spi_apps_clk_src",
0669         .parent_names = gcc_xo_gpll0,
0670         .num_parents = 2,
0671         .ops = &clk_rcg2_ops,
0672     },
0673 };
0674 
0675 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
0676     .cmd_rcgr = 0x07000,
0677     .hid_width = 5,
0678     .parent_map = gcc_xo_gpll0_map,
0679     .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
0680     .clkr.hw.init = &(struct clk_init_data){
0681         .name = "blsp1_qup6_i2c_apps_clk_src",
0682         .parent_names = gcc_xo_gpll0,
0683         .num_parents = 2,
0684         .ops = &clk_rcg2_ops,
0685     },
0686 };
0687 
0688 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
0689     .cmd_rcgr = 0x07024,
0690     .mnd_width = 8,
0691     .hid_width = 5,
0692     .parent_map = gcc_xo_gpll0_map,
0693     .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
0694     .clkr.hw.init = &(struct clk_init_data){
0695         .name = "blsp1_qup6_spi_apps_clk_src",
0696         .parent_names = gcc_xo_gpll0,
0697         .num_parents = 2,
0698         .ops = &clk_rcg2_ops,
0699     },
0700 };
0701 
0702 static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
0703     F(3686400, P_GPLL0, 1, 72, 15625),
0704     F(7372800, P_GPLL0, 1, 144, 15625),
0705     F(14745600, P_GPLL0, 1, 288, 15625),
0706     F(16000000, P_GPLL0, 10, 1, 5),
0707     F(19200000, P_XO, 1, 0, 0),
0708     F(24000000, P_GPLL0, 1, 3, 100),
0709     F(25000000, P_GPLL0, 16, 1, 2),
0710     F(32000000, P_GPLL0, 1, 1, 25),
0711     F(40000000, P_GPLL0, 1, 1, 20),
0712     F(46400000, P_GPLL0, 1, 29, 500),
0713     F(48000000, P_GPLL0, 1, 3, 50),
0714     F(51200000, P_GPLL0, 1, 8, 125),
0715     F(56000000, P_GPLL0, 1, 7, 100),
0716     F(58982400, P_GPLL0, 1, 1152, 15625),
0717     F(60000000, P_GPLL0, 1, 3, 40),
0718     { }
0719 };
0720 
0721 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
0722     .cmd_rcgr = 0x02044,
0723     .mnd_width = 16,
0724     .hid_width = 5,
0725     .parent_map = gcc_xo_gpll0_map,
0726     .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
0727     .clkr.hw.init = &(struct clk_init_data){
0728         .name = "blsp1_uart1_apps_clk_src",
0729         .parent_names = gcc_xo_gpll0,
0730         .num_parents = 2,
0731         .ops = &clk_rcg2_ops,
0732     },
0733 };
0734 
0735 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
0736     .cmd_rcgr = 0x03034,
0737     .mnd_width = 16,
0738     .hid_width = 5,
0739     .parent_map = gcc_xo_gpll0_map,
0740     .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
0741     .clkr.hw.init = &(struct clk_init_data){
0742         .name = "blsp1_uart2_apps_clk_src",
0743         .parent_names = gcc_xo_gpll0,
0744         .num_parents = 2,
0745         .ops = &clk_rcg2_ops,
0746     },
0747 };
0748 
0749 static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {
0750     F(19200000, P_XO, 1, 0, 0),
0751     { }
0752 };
0753 
0754 static struct clk_rcg2 cci_clk_src = {
0755     .cmd_rcgr = 0x51000,
0756     .mnd_width = 8,
0757     .hid_width = 5,
0758     .parent_map = gcc_xo_gpll0a_map,
0759     .freq_tbl = ftbl_gcc_camss_cci_clk,
0760     .clkr.hw.init = &(struct clk_init_data){
0761         .name = "cci_clk_src",
0762         .parent_names = gcc_xo_gpll0a,
0763         .num_parents = 2,
0764         .ops = &clk_rcg2_ops,
0765     },
0766 };
0767 
0768 /*
0769  * This is a frequency table for "General Purpose" clocks.
0770  * These clocks can be muxed to the SoC pins and may be used by
0771  * external devices. They're often used as PWM source.
0772  *
0773  * See comment at ftbl_gcc_gp1_3_clk.
0774  */
0775 static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {
0776     F(10000,   P_XO,    16,  1, 120),
0777     F(100000,  P_XO,    16,  1,  12),
0778     F(500000,  P_GPLL0, 16,  1, 100),
0779     F(1000000, P_GPLL0, 16,  1,  50),
0780     F(2500000, P_GPLL0, 16,  1,  20),
0781     F(5000000, P_GPLL0, 16,  1,  10),
0782     F(100000000, P_GPLL0, 8, 0, 0),
0783     F(200000000, P_GPLL0, 4, 0, 0),
0784     { }
0785 };
0786 
0787 static struct clk_rcg2 camss_gp0_clk_src = {
0788     .cmd_rcgr = 0x54000,
0789     .mnd_width = 8,
0790     .hid_width = 5,
0791     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
0792     .freq_tbl = ftbl_gcc_camss_gp0_1_clk,
0793     .clkr.hw.init = &(struct clk_init_data){
0794         .name = "camss_gp0_clk_src",
0795         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
0796         .num_parents = 4,
0797         .ops = &clk_rcg2_ops,
0798     },
0799 };
0800 
0801 static struct clk_rcg2 camss_gp1_clk_src = {
0802     .cmd_rcgr = 0x55000,
0803     .mnd_width = 8,
0804     .hid_width = 5,
0805     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
0806     .freq_tbl = ftbl_gcc_camss_gp0_1_clk,
0807     .clkr.hw.init = &(struct clk_init_data){
0808         .name = "camss_gp1_clk_src",
0809         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
0810         .num_parents = 4,
0811         .ops = &clk_rcg2_ops,
0812     },
0813 };
0814 
0815 static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {
0816     F(133330000, P_GPLL0, 6, 0, 0),
0817     F(266670000, P_GPLL0, 3, 0, 0),
0818     F(320000000, P_GPLL0, 2.5, 0, 0),
0819     { }
0820 };
0821 
0822 static struct clk_rcg2 jpeg0_clk_src = {
0823     .cmd_rcgr = 0x57000,
0824     .hid_width = 5,
0825     .parent_map = gcc_xo_gpll0_map,
0826     .freq_tbl = ftbl_gcc_camss_jpeg0_clk,
0827     .clkr.hw.init = &(struct clk_init_data){
0828         .name = "jpeg0_clk_src",
0829         .parent_names = gcc_xo_gpll0,
0830         .num_parents = 2,
0831         .ops = &clk_rcg2_ops,
0832     },
0833 };
0834 
0835 static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
0836     F(9600000, P_XO, 2, 0, 0),
0837     F(23880000, P_GPLL0, 1, 2, 67),
0838     F(66670000, P_GPLL0, 12, 0, 0),
0839     { }
0840 };
0841 
0842 static struct clk_rcg2 mclk0_clk_src = {
0843     .cmd_rcgr = 0x52000,
0844     .mnd_width = 8,
0845     .hid_width = 5,
0846     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
0847     .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
0848     .clkr.hw.init = &(struct clk_init_data){
0849         .name = "mclk0_clk_src",
0850         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
0851         .num_parents = 4,
0852         .ops = &clk_rcg2_ops,
0853     },
0854 };
0855 
0856 static struct clk_rcg2 mclk1_clk_src = {
0857     .cmd_rcgr = 0x53000,
0858     .mnd_width = 8,
0859     .hid_width = 5,
0860     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
0861     .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
0862     .clkr.hw.init = &(struct clk_init_data){
0863         .name = "mclk1_clk_src",
0864         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
0865         .num_parents = 4,
0866         .ops = &clk_rcg2_ops,
0867     },
0868 };
0869 
0870 static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {
0871     F(100000000, P_GPLL0, 8, 0, 0),
0872     F(200000000, P_GPLL0, 4, 0, 0),
0873     { }
0874 };
0875 
0876 static struct clk_rcg2 csi0phytimer_clk_src = {
0877     .cmd_rcgr = 0x4e000,
0878     .hid_width = 5,
0879     .parent_map = gcc_xo_gpll0_gpll1a_map,
0880     .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
0881     .clkr.hw.init = &(struct clk_init_data){
0882         .name = "csi0phytimer_clk_src",
0883         .parent_names = gcc_xo_gpll0_gpll1a,
0884         .num_parents = 3,
0885         .ops = &clk_rcg2_ops,
0886     },
0887 };
0888 
0889 static struct clk_rcg2 csi1phytimer_clk_src = {
0890     .cmd_rcgr = 0x4f000,
0891     .hid_width = 5,
0892     .parent_map = gcc_xo_gpll0_gpll1a_map,
0893     .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
0894     .clkr.hw.init = &(struct clk_init_data){
0895         .name = "csi1phytimer_clk_src",
0896         .parent_names = gcc_xo_gpll0_gpll1a,
0897         .num_parents = 3,
0898         .ops = &clk_rcg2_ops,
0899     },
0900 };
0901 
0902 static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {
0903     F(160000000, P_GPLL0, 5, 0, 0),
0904     F(320000000, P_GPLL0, 2.5, 0, 0),
0905     F(465000000, P_GPLL2, 2, 0, 0),
0906     { }
0907 };
0908 
0909 static struct clk_rcg2 cpp_clk_src = {
0910     .cmd_rcgr = 0x58018,
0911     .hid_width = 5,
0912     .parent_map = gcc_xo_gpll0_gpll2_map,
0913     .freq_tbl = ftbl_gcc_camss_cpp_clk,
0914     .clkr.hw.init = &(struct clk_init_data){
0915         .name = "cpp_clk_src",
0916         .parent_names = gcc_xo_gpll0_gpll2,
0917         .num_parents = 3,
0918         .ops = &clk_rcg2_ops,
0919     },
0920 };
0921 
0922 static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
0923     F(50000000, P_GPLL0, 16, 0, 0),
0924     F(80000000, P_GPLL0, 10, 0, 0),
0925     F(100000000, P_GPLL0, 8, 0, 0),
0926     F(160000000, P_GPLL0, 5, 0, 0),
0927     { }
0928 };
0929 
0930 static struct clk_rcg2 crypto_clk_src = {
0931     .cmd_rcgr = 0x16004,
0932     .hid_width = 5,
0933     .parent_map = gcc_xo_gpll0_map,
0934     .freq_tbl = ftbl_gcc_crypto_clk,
0935     .clkr.hw.init = &(struct clk_init_data){
0936         .name = "crypto_clk_src",
0937         .parent_names = gcc_xo_gpll0,
0938         .num_parents = 2,
0939         .ops = &clk_rcg2_ops,
0940     },
0941 };
0942 
0943 /*
0944  * This is a frequency table for "General Purpose" clocks.
0945  * These clocks can be muxed to the SoC pins and may be used by
0946  * external devices. They're often used as PWM source.
0947  *
0948  * Please note that MND divider must be enabled for duty-cycle
0949  * control to be possible. (M != N) Also since D register is configured
0950  * with a value multiplied by 2, and duty cycle is calculated as
0951  *                             (2 * D) % 2^W
0952  *                DutyCycle = ----------------
0953  *                              2 * (N % 2^W)
0954  * (where W = .mnd_width)
0955  * N must be half or less than maximum value for the register.
0956  * Otherwise duty-cycle control would be limited.
0957  * (e.g. for 8-bit NMD N should be less than 128)
0958  */
0959 static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
0960     F(10000,   P_XO,    16,  1, 120),
0961     F(100000,  P_XO,    16,  1,  12),
0962     F(500000,  P_GPLL0, 16,  1, 100),
0963     F(1000000, P_GPLL0, 16,  1,  50),
0964     F(2500000, P_GPLL0, 16,  1,  20),
0965     F(5000000, P_GPLL0, 16,  1,  10),
0966     F(19200000, P_XO, 1, 0, 0),
0967     { }
0968 };
0969 
0970 static struct clk_rcg2 gp1_clk_src = {
0971     .cmd_rcgr = 0x08004,
0972     .mnd_width = 8,
0973     .hid_width = 5,
0974     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
0975     .freq_tbl = ftbl_gcc_gp1_3_clk,
0976     .clkr.hw.init = &(struct clk_init_data){
0977         .name = "gp1_clk_src",
0978         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
0979         .num_parents = 3,
0980         .ops = &clk_rcg2_ops,
0981     },
0982 };
0983 
0984 static struct clk_rcg2 gp2_clk_src = {
0985     .cmd_rcgr = 0x09004,
0986     .mnd_width = 8,
0987     .hid_width = 5,
0988     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
0989     .freq_tbl = ftbl_gcc_gp1_3_clk,
0990     .clkr.hw.init = &(struct clk_init_data){
0991         .name = "gp2_clk_src",
0992         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
0993         .num_parents = 3,
0994         .ops = &clk_rcg2_ops,
0995     },
0996 };
0997 
0998 static struct clk_rcg2 gp3_clk_src = {
0999     .cmd_rcgr = 0x0a004,
1000     .mnd_width = 8,
1001     .hid_width = 5,
1002     .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1003     .freq_tbl = ftbl_gcc_gp1_3_clk,
1004     .clkr.hw.init = &(struct clk_init_data){
1005         .name = "gp3_clk_src",
1006         .parent_names = gcc_xo_gpll0_gpll1a_sleep,
1007         .num_parents = 3,
1008         .ops = &clk_rcg2_ops,
1009     },
1010 };
1011 
1012 static struct clk_rcg2 byte0_clk_src = {
1013     .cmd_rcgr = 0x4d044,
1014     .hid_width = 5,
1015     .parent_map = gcc_xo_gpll0a_dsibyte_map,
1016     .clkr.hw.init = &(struct clk_init_data){
1017         .name = "byte0_clk_src",
1018         .parent_names = gcc_xo_gpll0a_dsibyte,
1019         .num_parents = 3,
1020         .ops = &clk_byte2_ops,
1021         .flags = CLK_SET_RATE_PARENT,
1022     },
1023 };
1024 
1025 static const struct freq_tbl ftbl_gcc_mdss_esc0_clk[] = {
1026     F(19200000, P_XO, 1, 0, 0),
1027     { }
1028 };
1029 
1030 static struct clk_rcg2 esc0_clk_src = {
1031     .cmd_rcgr = 0x4d05c,
1032     .hid_width = 5,
1033     .parent_map = gcc_xo_dsibyte_map,
1034     .freq_tbl = ftbl_gcc_mdss_esc0_clk,
1035     .clkr.hw.init = &(struct clk_init_data){
1036         .name = "esc0_clk_src",
1037         .parent_names = gcc_xo_dsibyte,
1038         .num_parents = 2,
1039         .ops = &clk_rcg2_ops,
1040     },
1041 };
1042 
1043 static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {
1044     F(50000000, P_GPLL0, 16, 0, 0),
1045     F(80000000, P_GPLL0, 10, 0, 0),
1046     F(100000000, P_GPLL0, 8, 0, 0),
1047     F(160000000, P_GPLL0, 5, 0, 0),
1048     F(177780000, P_GPLL0, 4.5, 0, 0),
1049     F(200000000, P_GPLL0, 4, 0, 0),
1050     F(266670000, P_GPLL0, 3, 0, 0),
1051     F(320000000, P_GPLL0, 2.5, 0, 0),
1052     { }
1053 };
1054 
1055 static struct clk_rcg2 mdp_clk_src = {
1056     .cmd_rcgr = 0x4d014,
1057     .hid_width = 5,
1058     .parent_map = gcc_xo_gpll0_dsiphy_map,
1059     .freq_tbl = ftbl_gcc_mdss_mdp_clk,
1060     .clkr.hw.init = &(struct clk_init_data){
1061         .name = "mdp_clk_src",
1062         .parent_names = gcc_xo_gpll0_dsiphy,
1063         .num_parents = 3,
1064         .ops = &clk_rcg2_ops,
1065     },
1066 };
1067 
1068 static struct clk_rcg2 pclk0_clk_src = {
1069     .cmd_rcgr = 0x4d000,
1070     .mnd_width = 8,
1071     .hid_width = 5,
1072     .parent_map = gcc_xo_gpll0a_dsiphy_map,
1073     .clkr.hw.init = &(struct clk_init_data){
1074         .name = "pclk0_clk_src",
1075         .parent_names = gcc_xo_gpll0a_dsiphy,
1076         .num_parents = 3,
1077         .ops = &clk_pixel_ops,
1078         .flags = CLK_SET_RATE_PARENT,
1079     },
1080 };
1081 
1082 static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {
1083     F(19200000, P_XO, 1, 0, 0),
1084     { }
1085 };
1086 
1087 static struct clk_rcg2 vsync_clk_src = {
1088     .cmd_rcgr = 0x4d02c,
1089     .hid_width = 5,
1090     .parent_map = gcc_xo_gpll0a_map,
1091     .freq_tbl = ftbl_gcc_mdss_vsync_clk,
1092     .clkr.hw.init = &(struct clk_init_data){
1093         .name = "vsync_clk_src",
1094         .parent_names = gcc_xo_gpll0a,
1095         .num_parents = 2,
1096         .ops = &clk_rcg2_ops,
1097     },
1098 };
1099 
1100 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
1101     F(64000000, P_GPLL0, 12.5, 0, 0),
1102     { }
1103 };
1104 
1105 static struct clk_rcg2 pdm2_clk_src = {
1106     .cmd_rcgr = 0x44010,
1107     .hid_width = 5,
1108     .parent_map = gcc_xo_gpll0_map,
1109     .freq_tbl = ftbl_gcc_pdm2_clk,
1110     .clkr.hw.init = &(struct clk_init_data){
1111         .name = "pdm2_clk_src",
1112         .parent_names = gcc_xo_gpll0,
1113         .num_parents = 2,
1114         .ops = &clk_rcg2_ops,
1115     },
1116 };
1117 
1118 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk[] = {
1119     F(144000, P_XO, 16, 3, 25),
1120     F(400000, P_XO, 12, 1, 4),
1121     F(20000000, P_GPLL0, 10, 1, 4),
1122     F(25000000, P_GPLL0, 16, 1, 2),
1123     F(50000000, P_GPLL0, 16, 0, 0),
1124     F(100000000, P_GPLL0, 8, 0, 0),
1125     F(177770000, P_GPLL0, 4.5, 0, 0),
1126     { }
1127 };
1128 
1129 static struct clk_rcg2 sdcc1_apps_clk_src = {
1130     .cmd_rcgr = 0x42004,
1131     .mnd_width = 8,
1132     .hid_width = 5,
1133     .parent_map = gcc_xo_gpll0_map,
1134     .freq_tbl = ftbl_gcc_sdcc1_apps_clk,
1135     .clkr.hw.init = &(struct clk_init_data){
1136         .name = "sdcc1_apps_clk_src",
1137         .parent_names = gcc_xo_gpll0,
1138         .num_parents = 2,
1139         .ops = &clk_rcg2_floor_ops,
1140     },
1141 };
1142 
1143 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk[] = {
1144     F(144000, P_XO, 16, 3, 25),
1145     F(400000, P_XO, 12, 1, 4),
1146     F(20000000, P_GPLL0, 10, 1, 4),
1147     F(25000000, P_GPLL0, 16, 1, 2),
1148     F(50000000, P_GPLL0, 16, 0, 0),
1149     F(100000000, P_GPLL0, 8, 0, 0),
1150     F(200000000, P_GPLL0, 4, 0, 0),
1151     { }
1152 };
1153 
1154 static struct clk_rcg2 sdcc2_apps_clk_src = {
1155     .cmd_rcgr = 0x43004,
1156     .mnd_width = 8,
1157     .hid_width = 5,
1158     .parent_map = gcc_xo_gpll0_map,
1159     .freq_tbl = ftbl_gcc_sdcc2_apps_clk,
1160     .clkr.hw.init = &(struct clk_init_data){
1161         .name = "sdcc2_apps_clk_src",
1162         .parent_names = gcc_xo_gpll0,
1163         .num_parents = 2,
1164         .ops = &clk_rcg2_floor_ops,
1165     },
1166 };
1167 
1168 static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
1169     F(155000000, P_GPLL2, 6, 0, 0),
1170     F(310000000, P_GPLL2, 3, 0, 0),
1171     F(400000000, P_GPLL0, 2, 0, 0),
1172     { }
1173 };
1174 
1175 static struct clk_rcg2 apss_tcu_clk_src = {
1176     .cmd_rcgr = 0x1207c,
1177     .hid_width = 5,
1178     .parent_map = gcc_xo_gpll0a_gpll1_gpll2_map,
1179     .freq_tbl = ftbl_gcc_apss_tcu_clk,
1180     .clkr.hw.init = &(struct clk_init_data){
1181         .name = "apss_tcu_clk_src",
1182         .parent_names = gcc_xo_gpll0a_gpll1_gpll2,
1183         .num_parents = 4,
1184         .ops = &clk_rcg2_ops,
1185     },
1186 };
1187 
1188 static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = {
1189     F(19200000, P_XO, 1, 0, 0),
1190     F(100000000, P_GPLL0, 8, 0, 0),
1191     F(200000000, P_GPLL0, 4, 0, 0),
1192     F(266500000, P_BIMC, 4, 0, 0),
1193     F(400000000, P_GPLL0, 2, 0, 0),
1194     F(533000000, P_BIMC, 2, 0, 0),
1195     { }
1196 };
1197 
1198 static struct clk_rcg2 bimc_gpu_clk_src = {
1199     .cmd_rcgr = 0x31028,
1200     .hid_width = 5,
1201     .parent_map = gcc_xo_gpll0_bimc_map,
1202     .freq_tbl = ftbl_gcc_bimc_gpu_clk,
1203     .clkr.hw.init = &(struct clk_init_data){
1204         .name = "bimc_gpu_clk_src",
1205         .parent_names = gcc_xo_gpll0_bimc,
1206         .num_parents = 3,
1207         .flags = CLK_GET_RATE_NOCACHE,
1208         .ops = &clk_rcg2_ops,
1209     },
1210 };
1211 
1212 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1213     F(80000000, P_GPLL0, 10, 0, 0),
1214     { }
1215 };
1216 
1217 static struct clk_rcg2 usb_hs_system_clk_src = {
1218     .cmd_rcgr = 0x41010,
1219     .hid_width = 5,
1220     .parent_map = gcc_xo_gpll0_map,
1221     .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1222     .clkr.hw.init = &(struct clk_init_data){
1223         .name = "usb_hs_system_clk_src",
1224         .parent_names = gcc_xo_gpll0,
1225         .num_parents = 2,
1226         .ops = &clk_rcg2_ops,
1227     },
1228 };
1229 
1230 static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = {
1231     F(3200000, P_XO, 6, 0, 0),
1232     F(6400000, P_XO, 3, 0, 0),
1233     F(9600000, P_XO, 2, 0, 0),
1234     F(19200000, P_XO, 1, 0, 0),
1235     F(40000000, P_GPLL0, 10, 1, 2),
1236     F(66670000, P_GPLL0, 12, 0, 0),
1237     F(80000000, P_GPLL0, 10, 0, 0),
1238     F(100000000, P_GPLL0, 8, 0, 0),
1239     { }
1240 };
1241 
1242 static struct clk_rcg2 ultaudio_ahbfabric_clk_src = {
1243     .cmd_rcgr = 0x1c010,
1244     .hid_width = 5,
1245     .mnd_width = 8,
1246     .parent_map = gcc_xo_gpll0_gpll1_sleep_map,
1247     .freq_tbl = ftbl_gcc_ultaudio_ahb_clk,
1248     .clkr.hw.init = &(struct clk_init_data){
1249         .name = "ultaudio_ahbfabric_clk_src",
1250         .parent_names = gcc_xo_gpll0_gpll1_sleep,
1251         .num_parents = 4,
1252         .ops = &clk_rcg2_ops,
1253     },
1254 };
1255 
1256 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = {
1257     .halt_reg = 0x1c028,
1258     .clkr = {
1259         .enable_reg = 0x1c028,
1260         .enable_mask = BIT(0),
1261         .hw.init = &(struct clk_init_data){
1262             .name = "gcc_ultaudio_ahbfabric_ixfabric_clk",
1263             .parent_names = (const char *[]){
1264                 "ultaudio_ahbfabric_clk_src",
1265             },
1266             .num_parents = 1,
1267             .flags = CLK_SET_RATE_PARENT,
1268             .ops = &clk_branch2_ops,
1269         },
1270     },
1271 };
1272 
1273 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = {
1274     .halt_reg = 0x1c024,
1275     .clkr = {
1276         .enable_reg = 0x1c024,
1277         .enable_mask = BIT(0),
1278         .hw.init = &(struct clk_init_data){
1279             .name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk",
1280             .parent_names = (const char *[]){
1281                 "ultaudio_ahbfabric_clk_src",
1282             },
1283             .num_parents = 1,
1284             .flags = CLK_SET_RATE_PARENT,
1285             .ops = &clk_branch2_ops,
1286         },
1287     },
1288 };
1289 
1290 static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = {
1291     F(128000, P_XO, 10, 1, 15),
1292     F(256000, P_XO, 5, 1, 15),
1293     F(384000, P_XO, 5, 1, 10),
1294     F(512000, P_XO, 5, 2, 15),
1295     F(576000, P_XO, 5, 3, 20),
1296     F(705600, P_GPLL1, 16, 1, 80),
1297     F(768000, P_XO, 5, 1, 5),
1298     F(800000, P_XO, 5, 5, 24),
1299     F(1024000, P_XO, 5, 4, 15),
1300     F(1152000, P_XO, 1, 3, 50),
1301     F(1411200, P_GPLL1, 16, 1, 40),
1302     F(1536000, P_XO, 1, 2, 25),
1303     F(1600000, P_XO, 12, 0, 0),
1304     F(1728000, P_XO, 5, 9, 20),
1305     F(2048000, P_XO, 5, 8, 15),
1306     F(2304000, P_XO, 5, 3, 5),
1307     F(2400000, P_XO, 8, 0, 0),
1308     F(2822400, P_GPLL1, 16, 1, 20),
1309     F(3072000, P_XO, 5, 4, 5),
1310     F(4096000, P_GPLL1, 9, 2, 49),
1311     F(4800000, P_XO, 4, 0, 0),
1312     F(5644800, P_GPLL1, 16, 1, 10),
1313     F(6144000, P_GPLL1, 7, 1, 21),
1314     F(8192000, P_GPLL1, 9, 4, 49),
1315     F(9600000, P_XO, 2, 0, 0),
1316     F(11289600, P_GPLL1, 16, 1, 5),
1317     F(12288000, P_GPLL1, 7, 2, 21),
1318     { }
1319 };
1320 
1321 static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = {
1322     .cmd_rcgr = 0x1c054,
1323     .hid_width = 5,
1324     .mnd_width = 8,
1325     .parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map,
1326     .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1327     .clkr.hw.init = &(struct clk_init_data){
1328         .name = "ultaudio_lpaif_pri_i2s_clk_src",
1329         .parent_names = gcc_xo_gpll1_epi2s_emclk_sleep,
1330         .num_parents = 5,
1331         .ops = &clk_rcg2_ops,
1332     },
1333 };
1334 
1335 static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = {
1336     .halt_reg = 0x1c068,
1337     .clkr = {
1338         .enable_reg = 0x1c068,
1339         .enable_mask = BIT(0),
1340         .hw.init = &(struct clk_init_data){
1341             .name = "gcc_ultaudio_lpaif_pri_i2s_clk",
1342             .parent_names = (const char *[]){
1343                 "ultaudio_lpaif_pri_i2s_clk_src",
1344             },
1345             .num_parents = 1,
1346             .flags = CLK_SET_RATE_PARENT,
1347             .ops = &clk_branch2_ops,
1348         },
1349     },
1350 };
1351 
1352 static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = {
1353     .cmd_rcgr = 0x1c06c,
1354     .hid_width = 5,
1355     .mnd_width = 8,
1356     .parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map,
1357     .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1358     .clkr.hw.init = &(struct clk_init_data){
1359         .name = "ultaudio_lpaif_sec_i2s_clk_src",
1360         .parent_names = gcc_xo_gpll1_esi2s_emclk_sleep,
1361         .num_parents = 5,
1362         .ops = &clk_rcg2_ops,
1363     },
1364 };
1365 
1366 static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = {
1367     .halt_reg = 0x1c080,
1368     .clkr = {
1369         .enable_reg = 0x1c080,
1370         .enable_mask = BIT(0),
1371         .hw.init = &(struct clk_init_data){
1372             .name = "gcc_ultaudio_lpaif_sec_i2s_clk",
1373             .parent_names = (const char *[]){
1374                 "ultaudio_lpaif_sec_i2s_clk_src",
1375             },
1376             .num_parents = 1,
1377             .flags = CLK_SET_RATE_PARENT,
1378             .ops = &clk_branch2_ops,
1379         },
1380     },
1381 };
1382 
1383 static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = {
1384     .cmd_rcgr = 0x1c084,
1385     .hid_width = 5,
1386     .mnd_width = 8,
1387     .parent_map = gcc_xo_gpll1_emclk_sleep_map,
1388     .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1389     .clkr.hw.init = &(struct clk_init_data){
1390         .name = "ultaudio_lpaif_aux_i2s_clk_src",
1391         .parent_names = gcc_xo_gpll1_esi2s_emclk_sleep,
1392         .num_parents = 5,
1393         .ops = &clk_rcg2_ops,
1394     },
1395 };
1396 
1397 static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = {
1398     .halt_reg = 0x1c098,
1399     .clkr = {
1400         .enable_reg = 0x1c098,
1401         .enable_mask = BIT(0),
1402         .hw.init = &(struct clk_init_data){
1403             .name = "gcc_ultaudio_lpaif_aux_i2s_clk",
1404             .parent_names = (const char *[]){
1405                 "ultaudio_lpaif_aux_i2s_clk_src",
1406             },
1407             .num_parents = 1,
1408             .flags = CLK_SET_RATE_PARENT,
1409             .ops = &clk_branch2_ops,
1410         },
1411     },
1412 };
1413 
1414 static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = {
1415     F(19200000, P_XO, 1, 0, 0),
1416     { }
1417 };
1418 
1419 static struct clk_rcg2 ultaudio_xo_clk_src = {
1420     .cmd_rcgr = 0x1c034,
1421     .hid_width = 5,
1422     .parent_map = gcc_xo_sleep_map,
1423     .freq_tbl = ftbl_gcc_ultaudio_xo_clk,
1424     .clkr.hw.init = &(struct clk_init_data){
1425         .name = "ultaudio_xo_clk_src",
1426         .parent_names = gcc_xo_sleep,
1427         .num_parents = 2,
1428         .ops = &clk_rcg2_ops,
1429     },
1430 };
1431 
1432 static struct clk_branch gcc_ultaudio_avsync_xo_clk = {
1433     .halt_reg = 0x1c04c,
1434     .clkr = {
1435         .enable_reg = 0x1c04c,
1436         .enable_mask = BIT(0),
1437         .hw.init = &(struct clk_init_data){
1438             .name = "gcc_ultaudio_avsync_xo_clk",
1439             .parent_names = (const char *[]){
1440                 "ultaudio_xo_clk_src",
1441             },
1442             .num_parents = 1,
1443             .flags = CLK_SET_RATE_PARENT,
1444             .ops = &clk_branch2_ops,
1445         },
1446     },
1447 };
1448 
1449 static struct clk_branch gcc_ultaudio_stc_xo_clk = {
1450     .halt_reg = 0x1c050,
1451     .clkr = {
1452         .enable_reg = 0x1c050,
1453         .enable_mask = BIT(0),
1454         .hw.init = &(struct clk_init_data){
1455             .name = "gcc_ultaudio_stc_xo_clk",
1456             .parent_names = (const char *[]){
1457                 "ultaudio_xo_clk_src",
1458             },
1459             .num_parents = 1,
1460             .flags = CLK_SET_RATE_PARENT,
1461             .ops = &clk_branch2_ops,
1462         },
1463     },
1464 };
1465 
1466 static const struct freq_tbl ftbl_codec_clk[] = {
1467     F(9600000, P_XO, 2, 0, 0),
1468     F(12288000, P_XO, 1, 16, 25),
1469     F(19200000, P_XO, 1, 0, 0),
1470     F(11289600, P_EXT_MCLK, 1, 0, 0),
1471     { }
1472 };
1473 
1474 static struct clk_rcg2 codec_digcodec_clk_src = {
1475     .cmd_rcgr = 0x1c09c,
1476     .mnd_width = 8,
1477     .hid_width = 5,
1478     .parent_map = gcc_xo_gpll1_emclk_sleep_map,
1479     .freq_tbl = ftbl_codec_clk,
1480     .clkr.hw.init = &(struct clk_init_data){
1481         .name = "codec_digcodec_clk_src",
1482         .parent_names = gcc_xo_gpll1_emclk_sleep,
1483         .num_parents = 4,
1484         .ops = &clk_rcg2_ops,
1485     },
1486 };
1487 
1488 static struct clk_branch gcc_codec_digcodec_clk = {
1489     .halt_reg = 0x1c0b0,
1490     .clkr = {
1491         .enable_reg = 0x1c0b0,
1492         .enable_mask = BIT(0),
1493         .hw.init = &(struct clk_init_data){
1494             .name = "gcc_ultaudio_codec_digcodec_clk",
1495             .parent_names = (const char *[]){
1496                 "codec_digcodec_clk_src",
1497             },
1498             .num_parents = 1,
1499             .flags = CLK_SET_RATE_PARENT,
1500             .ops = &clk_branch2_ops,
1501         },
1502     },
1503 };
1504 
1505 static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = {
1506     .halt_reg = 0x1c000,
1507     .clkr = {
1508         .enable_reg = 0x1c000,
1509         .enable_mask = BIT(0),
1510         .hw.init = &(struct clk_init_data){
1511             .name = "gcc_ultaudio_pcnoc_mport_clk",
1512             .parent_names = (const char *[]){
1513                 "pcnoc_bfdcd_clk_src",
1514             },
1515             .num_parents = 1,
1516             .ops = &clk_branch2_ops,
1517         },
1518     },
1519 };
1520 
1521 static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = {
1522     .halt_reg = 0x1c004,
1523     .clkr = {
1524         .enable_reg = 0x1c004,
1525         .enable_mask = BIT(0),
1526         .hw.init = &(struct clk_init_data){
1527             .name = "gcc_ultaudio_pcnoc_sway_clk",
1528             .parent_names = (const char *[]){
1529                 "pcnoc_bfdcd_clk_src",
1530             },
1531             .num_parents = 1,
1532             .ops = &clk_branch2_ops,
1533         },
1534     },
1535 };
1536 
1537 static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {
1538     F(100000000, P_GPLL0, 8, 0, 0),
1539     F(160000000, P_GPLL0, 5, 0, 0),
1540     F(228570000, P_GPLL0, 3.5, 0, 0),
1541     { }
1542 };
1543 
1544 static struct clk_rcg2 vcodec0_clk_src = {
1545     .cmd_rcgr = 0x4C000,
1546     .mnd_width = 8,
1547     .hid_width = 5,
1548     .parent_map = gcc_xo_gpll0_map,
1549     .freq_tbl = ftbl_gcc_venus0_vcodec0_clk,
1550     .clkr.hw.init = &(struct clk_init_data){
1551         .name = "vcodec0_clk_src",
1552         .parent_names = gcc_xo_gpll0,
1553         .num_parents = 2,
1554         .ops = &clk_rcg2_ops,
1555     },
1556 };
1557 
1558 static struct clk_branch gcc_blsp1_ahb_clk = {
1559     .halt_reg = 0x01008,
1560     .halt_check = BRANCH_HALT_VOTED,
1561     .clkr = {
1562         .enable_reg = 0x45004,
1563         .enable_mask = BIT(10),
1564         .hw.init = &(struct clk_init_data){
1565             .name = "gcc_blsp1_ahb_clk",
1566             .parent_names = (const char *[]){
1567                 "pcnoc_bfdcd_clk_src",
1568             },
1569             .num_parents = 1,
1570             .ops = &clk_branch2_ops,
1571         },
1572     },
1573 };
1574 
1575 static struct clk_branch gcc_blsp1_sleep_clk = {
1576     .halt_reg = 0x01004,
1577     .clkr = {
1578         .enable_reg = 0x01004,
1579         .enable_mask = BIT(0),
1580         .hw.init = &(struct clk_init_data){
1581             .name = "gcc_blsp1_sleep_clk",
1582             .parent_names = (const char *[]){
1583                 "sleep_clk_src",
1584             },
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_blsp1_qup1_i2c_apps_clk = {
1593     .halt_reg = 0x02008,
1594     .clkr = {
1595         .enable_reg = 0x02008,
1596         .enable_mask = BIT(0),
1597         .hw.init = &(struct clk_init_data){
1598             .name = "gcc_blsp1_qup1_i2c_apps_clk",
1599             .parent_names = (const char *[]){
1600                 "blsp1_qup1_i2c_apps_clk_src",
1601             },
1602             .num_parents = 1,
1603             .flags = CLK_SET_RATE_PARENT,
1604             .ops = &clk_branch2_ops,
1605         },
1606     },
1607 };
1608 
1609 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1610     .halt_reg = 0x02004,
1611     .clkr = {
1612         .enable_reg = 0x02004,
1613         .enable_mask = BIT(0),
1614         .hw.init = &(struct clk_init_data){
1615             .name = "gcc_blsp1_qup1_spi_apps_clk",
1616             .parent_names = (const char *[]){
1617                 "blsp1_qup1_spi_apps_clk_src",
1618             },
1619             .num_parents = 1,
1620             .flags = CLK_SET_RATE_PARENT,
1621             .ops = &clk_branch2_ops,
1622         },
1623     },
1624 };
1625 
1626 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1627     .halt_reg = 0x03010,
1628     .clkr = {
1629         .enable_reg = 0x03010,
1630         .enable_mask = BIT(0),
1631         .hw.init = &(struct clk_init_data){
1632             .name = "gcc_blsp1_qup2_i2c_apps_clk",
1633             .parent_names = (const char *[]){
1634                 "blsp1_qup2_i2c_apps_clk_src",
1635             },
1636             .num_parents = 1,
1637             .flags = CLK_SET_RATE_PARENT,
1638             .ops = &clk_branch2_ops,
1639         },
1640     },
1641 };
1642 
1643 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1644     .halt_reg = 0x0300c,
1645     .clkr = {
1646         .enable_reg = 0x0300c,
1647         .enable_mask = BIT(0),
1648         .hw.init = &(struct clk_init_data){
1649             .name = "gcc_blsp1_qup2_spi_apps_clk",
1650             .parent_names = (const char *[]){
1651                 "blsp1_qup2_spi_apps_clk_src",
1652             },
1653             .num_parents = 1,
1654             .flags = CLK_SET_RATE_PARENT,
1655             .ops = &clk_branch2_ops,
1656         },
1657     },
1658 };
1659 
1660 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1661     .halt_reg = 0x04020,
1662     .clkr = {
1663         .enable_reg = 0x04020,
1664         .enable_mask = BIT(0),
1665         .hw.init = &(struct clk_init_data){
1666             .name = "gcc_blsp1_qup3_i2c_apps_clk",
1667             .parent_names = (const char *[]){
1668                 "blsp1_qup3_i2c_apps_clk_src",
1669             },
1670             .num_parents = 1,
1671             .flags = CLK_SET_RATE_PARENT,
1672             .ops = &clk_branch2_ops,
1673         },
1674     },
1675 };
1676 
1677 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1678     .halt_reg = 0x0401c,
1679     .clkr = {
1680         .enable_reg = 0x0401c,
1681         .enable_mask = BIT(0),
1682         .hw.init = &(struct clk_init_data){
1683             .name = "gcc_blsp1_qup3_spi_apps_clk",
1684             .parent_names = (const char *[]){
1685                 "blsp1_qup3_spi_apps_clk_src",
1686             },
1687             .num_parents = 1,
1688             .flags = CLK_SET_RATE_PARENT,
1689             .ops = &clk_branch2_ops,
1690         },
1691     },
1692 };
1693 
1694 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1695     .halt_reg = 0x05020,
1696     .clkr = {
1697         .enable_reg = 0x05020,
1698         .enable_mask = BIT(0),
1699         .hw.init = &(struct clk_init_data){
1700             .name = "gcc_blsp1_qup4_i2c_apps_clk",
1701             .parent_names = (const char *[]){
1702                 "blsp1_qup4_i2c_apps_clk_src",
1703             },
1704             .num_parents = 1,
1705             .flags = CLK_SET_RATE_PARENT,
1706             .ops = &clk_branch2_ops,
1707         },
1708     },
1709 };
1710 
1711 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1712     .halt_reg = 0x0501c,
1713     .clkr = {
1714         .enable_reg = 0x0501c,
1715         .enable_mask = BIT(0),
1716         .hw.init = &(struct clk_init_data){
1717             .name = "gcc_blsp1_qup4_spi_apps_clk",
1718             .parent_names = (const char *[]){
1719                 "blsp1_qup4_spi_apps_clk_src",
1720             },
1721             .num_parents = 1,
1722             .flags = CLK_SET_RATE_PARENT,
1723             .ops = &clk_branch2_ops,
1724         },
1725     },
1726 };
1727 
1728 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1729     .halt_reg = 0x06020,
1730     .clkr = {
1731         .enable_reg = 0x06020,
1732         .enable_mask = BIT(0),
1733         .hw.init = &(struct clk_init_data){
1734             .name = "gcc_blsp1_qup5_i2c_apps_clk",
1735             .parent_names = (const char *[]){
1736                 "blsp1_qup5_i2c_apps_clk_src",
1737             },
1738             .num_parents = 1,
1739             .flags = CLK_SET_RATE_PARENT,
1740             .ops = &clk_branch2_ops,
1741         },
1742     },
1743 };
1744 
1745 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1746     .halt_reg = 0x0601c,
1747     .clkr = {
1748         .enable_reg = 0x0601c,
1749         .enable_mask = BIT(0),
1750         .hw.init = &(struct clk_init_data){
1751             .name = "gcc_blsp1_qup5_spi_apps_clk",
1752             .parent_names = (const char *[]){
1753                 "blsp1_qup5_spi_apps_clk_src",
1754             },
1755             .num_parents = 1,
1756             .flags = CLK_SET_RATE_PARENT,
1757             .ops = &clk_branch2_ops,
1758         },
1759     },
1760 };
1761 
1762 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1763     .halt_reg = 0x07020,
1764     .clkr = {
1765         .enable_reg = 0x07020,
1766         .enable_mask = BIT(0),
1767         .hw.init = &(struct clk_init_data){
1768             .name = "gcc_blsp1_qup6_i2c_apps_clk",
1769             .parent_names = (const char *[]){
1770                 "blsp1_qup6_i2c_apps_clk_src",
1771             },
1772             .num_parents = 1,
1773             .flags = CLK_SET_RATE_PARENT,
1774             .ops = &clk_branch2_ops,
1775         },
1776     },
1777 };
1778 
1779 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1780     .halt_reg = 0x0701c,
1781     .clkr = {
1782         .enable_reg = 0x0701c,
1783         .enable_mask = BIT(0),
1784         .hw.init = &(struct clk_init_data){
1785             .name = "gcc_blsp1_qup6_spi_apps_clk",
1786             .parent_names = (const char *[]){
1787                 "blsp1_qup6_spi_apps_clk_src",
1788             },
1789             .num_parents = 1,
1790             .flags = CLK_SET_RATE_PARENT,
1791             .ops = &clk_branch2_ops,
1792         },
1793     },
1794 };
1795 
1796 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1797     .halt_reg = 0x0203c,
1798     .clkr = {
1799         .enable_reg = 0x0203c,
1800         .enable_mask = BIT(0),
1801         .hw.init = &(struct clk_init_data){
1802             .name = "gcc_blsp1_uart1_apps_clk",
1803             .parent_names = (const char *[]){
1804                 "blsp1_uart1_apps_clk_src",
1805             },
1806             .num_parents = 1,
1807             .flags = CLK_SET_RATE_PARENT,
1808             .ops = &clk_branch2_ops,
1809         },
1810     },
1811 };
1812 
1813 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1814     .halt_reg = 0x0302c,
1815     .clkr = {
1816         .enable_reg = 0x0302c,
1817         .enable_mask = BIT(0),
1818         .hw.init = &(struct clk_init_data){
1819             .name = "gcc_blsp1_uart2_apps_clk",
1820             .parent_names = (const char *[]){
1821                 "blsp1_uart2_apps_clk_src",
1822             },
1823             .num_parents = 1,
1824             .flags = CLK_SET_RATE_PARENT,
1825             .ops = &clk_branch2_ops,
1826         },
1827     },
1828 };
1829 
1830 static struct clk_branch gcc_boot_rom_ahb_clk = {
1831     .halt_reg = 0x1300c,
1832     .halt_check = BRANCH_HALT_VOTED,
1833     .clkr = {
1834         .enable_reg = 0x45004,
1835         .enable_mask = BIT(7),
1836         .hw.init = &(struct clk_init_data){
1837             .name = "gcc_boot_rom_ahb_clk",
1838             .parent_names = (const char *[]){
1839                 "pcnoc_bfdcd_clk_src",
1840             },
1841             .num_parents = 1,
1842             .ops = &clk_branch2_ops,
1843         },
1844     },
1845 };
1846 
1847 static struct clk_branch gcc_camss_cci_ahb_clk = {
1848     .halt_reg = 0x5101c,
1849     .clkr = {
1850         .enable_reg = 0x5101c,
1851         .enable_mask = BIT(0),
1852         .hw.init = &(struct clk_init_data){
1853             .name = "gcc_camss_cci_ahb_clk",
1854             .parent_names = (const char *[]){
1855                 "camss_ahb_clk_src",
1856             },
1857             .num_parents = 1,
1858             .flags = CLK_SET_RATE_PARENT,
1859             .ops = &clk_branch2_ops,
1860         },
1861     },
1862 };
1863 
1864 static struct clk_branch gcc_camss_cci_clk = {
1865     .halt_reg = 0x51018,
1866     .clkr = {
1867         .enable_reg = 0x51018,
1868         .enable_mask = BIT(0),
1869         .hw.init = &(struct clk_init_data){
1870             .name = "gcc_camss_cci_clk",
1871             .parent_names = (const char *[]){
1872                 "cci_clk_src",
1873             },
1874             .num_parents = 1,
1875             .flags = CLK_SET_RATE_PARENT,
1876             .ops = &clk_branch2_ops,
1877         },
1878     },
1879 };
1880 
1881 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1882     .halt_reg = 0x4e040,
1883     .clkr = {
1884         .enable_reg = 0x4e040,
1885         .enable_mask = BIT(0),
1886         .hw.init = &(struct clk_init_data){
1887             .name = "gcc_camss_csi0_ahb_clk",
1888             .parent_names = (const char *[]){
1889                 "camss_ahb_clk_src",
1890             },
1891             .num_parents = 1,
1892             .flags = CLK_SET_RATE_PARENT,
1893             .ops = &clk_branch2_ops,
1894         },
1895     },
1896 };
1897 
1898 static struct clk_branch gcc_camss_csi0_clk = {
1899     .halt_reg = 0x4e03c,
1900     .clkr = {
1901         .enable_reg = 0x4e03c,
1902         .enable_mask = BIT(0),
1903         .hw.init = &(struct clk_init_data){
1904             .name = "gcc_camss_csi0_clk",
1905             .parent_names = (const char *[]){
1906                 "csi0_clk_src",
1907             },
1908             .num_parents = 1,
1909             .flags = CLK_SET_RATE_PARENT,
1910             .ops = &clk_branch2_ops,
1911         },
1912     },
1913 };
1914 
1915 static struct clk_branch gcc_camss_csi0phy_clk = {
1916     .halt_reg = 0x4e048,
1917     .clkr = {
1918         .enable_reg = 0x4e048,
1919         .enable_mask = BIT(0),
1920         .hw.init = &(struct clk_init_data){
1921             .name = "gcc_camss_csi0phy_clk",
1922             .parent_names = (const char *[]){
1923                 "csi0_clk_src",
1924             },
1925             .num_parents = 1,
1926             .flags = CLK_SET_RATE_PARENT,
1927             .ops = &clk_branch2_ops,
1928         },
1929     },
1930 };
1931 
1932 static struct clk_branch gcc_camss_csi0pix_clk = {
1933     .halt_reg = 0x4e058,
1934     .clkr = {
1935         .enable_reg = 0x4e058,
1936         .enable_mask = BIT(0),
1937         .hw.init = &(struct clk_init_data){
1938             .name = "gcc_camss_csi0pix_clk",
1939             .parent_names = (const char *[]){
1940                 "csi0_clk_src",
1941             },
1942             .num_parents = 1,
1943             .flags = CLK_SET_RATE_PARENT,
1944             .ops = &clk_branch2_ops,
1945         },
1946     },
1947 };
1948 
1949 static struct clk_branch gcc_camss_csi0rdi_clk = {
1950     .halt_reg = 0x4e050,
1951     .clkr = {
1952         .enable_reg = 0x4e050,
1953         .enable_mask = BIT(0),
1954         .hw.init = &(struct clk_init_data){
1955             .name = "gcc_camss_csi0rdi_clk",
1956             .parent_names = (const char *[]){
1957                 "csi0_clk_src",
1958             },
1959             .num_parents = 1,
1960             .flags = CLK_SET_RATE_PARENT,
1961             .ops = &clk_branch2_ops,
1962         },
1963     },
1964 };
1965 
1966 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1967     .halt_reg = 0x4f040,
1968     .clkr = {
1969         .enable_reg = 0x4f040,
1970         .enable_mask = BIT(0),
1971         .hw.init = &(struct clk_init_data){
1972             .name = "gcc_camss_csi1_ahb_clk",
1973             .parent_names = (const char *[]){
1974                 "camss_ahb_clk_src",
1975             },
1976             .num_parents = 1,
1977             .flags = CLK_SET_RATE_PARENT,
1978             .ops = &clk_branch2_ops,
1979         },
1980     },
1981 };
1982 
1983 static struct clk_branch gcc_camss_csi1_clk = {
1984     .halt_reg = 0x4f03c,
1985     .clkr = {
1986         .enable_reg = 0x4f03c,
1987         .enable_mask = BIT(0),
1988         .hw.init = &(struct clk_init_data){
1989             .name = "gcc_camss_csi1_clk",
1990             .parent_names = (const char *[]){
1991                 "csi1_clk_src",
1992             },
1993             .num_parents = 1,
1994             .flags = CLK_SET_RATE_PARENT,
1995             .ops = &clk_branch2_ops,
1996         },
1997     },
1998 };
1999 
2000 static struct clk_branch gcc_camss_csi1phy_clk = {
2001     .halt_reg = 0x4f048,
2002     .clkr = {
2003         .enable_reg = 0x4f048,
2004         .enable_mask = BIT(0),
2005         .hw.init = &(struct clk_init_data){
2006             .name = "gcc_camss_csi1phy_clk",
2007             .parent_names = (const char *[]){
2008                 "csi1_clk_src",
2009             },
2010             .num_parents = 1,
2011             .flags = CLK_SET_RATE_PARENT,
2012             .ops = &clk_branch2_ops,
2013         },
2014     },
2015 };
2016 
2017 static struct clk_branch gcc_camss_csi1pix_clk = {
2018     .halt_reg = 0x4f058,
2019     .clkr = {
2020         .enable_reg = 0x4f058,
2021         .enable_mask = BIT(0),
2022         .hw.init = &(struct clk_init_data){
2023             .name = "gcc_camss_csi1pix_clk",
2024             .parent_names = (const char *[]){
2025                 "csi1_clk_src",
2026             },
2027             .num_parents = 1,
2028             .flags = CLK_SET_RATE_PARENT,
2029             .ops = &clk_branch2_ops,
2030         },
2031     },
2032 };
2033 
2034 static struct clk_branch gcc_camss_csi1rdi_clk = {
2035     .halt_reg = 0x4f050,
2036     .clkr = {
2037         .enable_reg = 0x4f050,
2038         .enable_mask = BIT(0),
2039         .hw.init = &(struct clk_init_data){
2040             .name = "gcc_camss_csi1rdi_clk",
2041             .parent_names = (const char *[]){
2042                 "csi1_clk_src",
2043             },
2044             .num_parents = 1,
2045             .flags = CLK_SET_RATE_PARENT,
2046             .ops = &clk_branch2_ops,
2047         },
2048     },
2049 };
2050 
2051 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2052     .halt_reg = 0x58050,
2053     .clkr = {
2054         .enable_reg = 0x58050,
2055         .enable_mask = BIT(0),
2056         .hw.init = &(struct clk_init_data){
2057             .name = "gcc_camss_csi_vfe0_clk",
2058             .parent_names = (const char *[]){
2059                 "vfe0_clk_src",
2060             },
2061             .num_parents = 1,
2062             .flags = CLK_SET_RATE_PARENT,
2063             .ops = &clk_branch2_ops,
2064         },
2065     },
2066 };
2067 
2068 static struct clk_branch gcc_camss_gp0_clk = {
2069     .halt_reg = 0x54018,
2070     .clkr = {
2071         .enable_reg = 0x54018,
2072         .enable_mask = BIT(0),
2073         .hw.init = &(struct clk_init_data){
2074             .name = "gcc_camss_gp0_clk",
2075             .parent_names = (const char *[]){
2076                 "camss_gp0_clk_src",
2077             },
2078             .num_parents = 1,
2079             .flags = CLK_SET_RATE_PARENT,
2080             .ops = &clk_branch2_ops,
2081         },
2082     },
2083 };
2084 
2085 static struct clk_branch gcc_camss_gp1_clk = {
2086     .halt_reg = 0x55018,
2087     .clkr = {
2088         .enable_reg = 0x55018,
2089         .enable_mask = BIT(0),
2090         .hw.init = &(struct clk_init_data){
2091             .name = "gcc_camss_gp1_clk",
2092             .parent_names = (const char *[]){
2093                 "camss_gp1_clk_src",
2094             },
2095             .num_parents = 1,
2096             .flags = CLK_SET_RATE_PARENT,
2097             .ops = &clk_branch2_ops,
2098         },
2099     },
2100 };
2101 
2102 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2103     .halt_reg = 0x50004,
2104     .clkr = {
2105         .enable_reg = 0x50004,
2106         .enable_mask = BIT(0),
2107         .hw.init = &(struct clk_init_data){
2108             .name = "gcc_camss_ispif_ahb_clk",
2109             .parent_names = (const char *[]){
2110                 "camss_ahb_clk_src",
2111             },
2112             .num_parents = 1,
2113             .flags = CLK_SET_RATE_PARENT,
2114             .ops = &clk_branch2_ops,
2115         },
2116     },
2117 };
2118 
2119 static struct clk_branch gcc_camss_jpeg0_clk = {
2120     .halt_reg = 0x57020,
2121     .clkr = {
2122         .enable_reg = 0x57020,
2123         .enable_mask = BIT(0),
2124         .hw.init = &(struct clk_init_data){
2125             .name = "gcc_camss_jpeg0_clk",
2126             .parent_names = (const char *[]){
2127                 "jpeg0_clk_src",
2128             },
2129             .num_parents = 1,
2130             .flags = CLK_SET_RATE_PARENT,
2131             .ops = &clk_branch2_ops,
2132         },
2133     },
2134 };
2135 
2136 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2137     .halt_reg = 0x57024,
2138     .clkr = {
2139         .enable_reg = 0x57024,
2140         .enable_mask = BIT(0),
2141         .hw.init = &(struct clk_init_data){
2142             .name = "gcc_camss_jpeg_ahb_clk",
2143             .parent_names = (const char *[]){
2144                 "camss_ahb_clk_src",
2145             },
2146             .num_parents = 1,
2147             .flags = CLK_SET_RATE_PARENT,
2148             .ops = &clk_branch2_ops,
2149         },
2150     },
2151 };
2152 
2153 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2154     .halt_reg = 0x57028,
2155     .clkr = {
2156         .enable_reg = 0x57028,
2157         .enable_mask = BIT(0),
2158         .hw.init = &(struct clk_init_data){
2159             .name = "gcc_camss_jpeg_axi_clk",
2160             .parent_names = (const char *[]){
2161                 "system_noc_bfdcd_clk_src",
2162             },
2163             .num_parents = 1,
2164             .flags = CLK_SET_RATE_PARENT,
2165             .ops = &clk_branch2_ops,
2166         },
2167     },
2168 };
2169 
2170 static struct clk_branch gcc_camss_mclk0_clk = {
2171     .halt_reg = 0x52018,
2172     .clkr = {
2173         .enable_reg = 0x52018,
2174         .enable_mask = BIT(0),
2175         .hw.init = &(struct clk_init_data){
2176             .name = "gcc_camss_mclk0_clk",
2177             .parent_names = (const char *[]){
2178                 "mclk0_clk_src",
2179             },
2180             .num_parents = 1,
2181             .flags = CLK_SET_RATE_PARENT,
2182             .ops = &clk_branch2_ops,
2183         },
2184     },
2185 };
2186 
2187 static struct clk_branch gcc_camss_mclk1_clk = {
2188     .halt_reg = 0x53018,
2189     .clkr = {
2190         .enable_reg = 0x53018,
2191         .enable_mask = BIT(0),
2192         .hw.init = &(struct clk_init_data){
2193             .name = "gcc_camss_mclk1_clk",
2194             .parent_names = (const char *[]){
2195                 "mclk1_clk_src",
2196             },
2197             .num_parents = 1,
2198             .flags = CLK_SET_RATE_PARENT,
2199             .ops = &clk_branch2_ops,
2200         },
2201     },
2202 };
2203 
2204 static struct clk_branch gcc_camss_micro_ahb_clk = {
2205     .halt_reg = 0x5600c,
2206     .clkr = {
2207         .enable_reg = 0x5600c,
2208         .enable_mask = BIT(0),
2209         .hw.init = &(struct clk_init_data){
2210             .name = "gcc_camss_micro_ahb_clk",
2211             .parent_names = (const char *[]){
2212                 "camss_ahb_clk_src",
2213             },
2214             .num_parents = 1,
2215             .flags = CLK_SET_RATE_PARENT,
2216             .ops = &clk_branch2_ops,
2217         },
2218     },
2219 };
2220 
2221 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2222     .halt_reg = 0x4e01c,
2223     .clkr = {
2224         .enable_reg = 0x4e01c,
2225         .enable_mask = BIT(0),
2226         .hw.init = &(struct clk_init_data){
2227             .name = "gcc_camss_csi0phytimer_clk",
2228             .parent_names = (const char *[]){
2229                 "csi0phytimer_clk_src",
2230             },
2231             .num_parents = 1,
2232             .flags = CLK_SET_RATE_PARENT,
2233             .ops = &clk_branch2_ops,
2234         },
2235     },
2236 };
2237 
2238 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2239     .halt_reg = 0x4f01c,
2240     .clkr = {
2241         .enable_reg = 0x4f01c,
2242         .enable_mask = BIT(0),
2243         .hw.init = &(struct clk_init_data){
2244             .name = "gcc_camss_csi1phytimer_clk",
2245             .parent_names = (const char *[]){
2246                 "csi1phytimer_clk_src",
2247             },
2248             .num_parents = 1,
2249             .flags = CLK_SET_RATE_PARENT,
2250             .ops = &clk_branch2_ops,
2251         },
2252     },
2253 };
2254 
2255 static struct clk_branch gcc_camss_ahb_clk = {
2256     .halt_reg = 0x5a014,
2257     .clkr = {
2258         .enable_reg = 0x5a014,
2259         .enable_mask = BIT(0),
2260         .hw.init = &(struct clk_init_data){
2261             .name = "gcc_camss_ahb_clk",
2262             .parent_names = (const char *[]){
2263                 "camss_ahb_clk_src",
2264             },
2265             .num_parents = 1,
2266             .flags = CLK_SET_RATE_PARENT,
2267             .ops = &clk_branch2_ops,
2268         },
2269     },
2270 };
2271 
2272 static struct clk_branch gcc_camss_top_ahb_clk = {
2273     .halt_reg = 0x56004,
2274     .clkr = {
2275         .enable_reg = 0x56004,
2276         .enable_mask = BIT(0),
2277         .hw.init = &(struct clk_init_data){
2278             .name = "gcc_camss_top_ahb_clk",
2279             .parent_names = (const char *[]){
2280                 "pcnoc_bfdcd_clk_src",
2281             },
2282             .num_parents = 1,
2283             .flags = CLK_SET_RATE_PARENT,
2284             .ops = &clk_branch2_ops,
2285         },
2286     },
2287 };
2288 
2289 static struct clk_branch gcc_camss_cpp_ahb_clk = {
2290     .halt_reg = 0x58040,
2291     .clkr = {
2292         .enable_reg = 0x58040,
2293         .enable_mask = BIT(0),
2294         .hw.init = &(struct clk_init_data){
2295             .name = "gcc_camss_cpp_ahb_clk",
2296             .parent_names = (const char *[]){
2297                 "camss_ahb_clk_src",
2298             },
2299             .num_parents = 1,
2300             .flags = CLK_SET_RATE_PARENT,
2301             .ops = &clk_branch2_ops,
2302         },
2303     },
2304 };
2305 
2306 static struct clk_branch gcc_camss_cpp_clk = {
2307     .halt_reg = 0x5803c,
2308     .clkr = {
2309         .enable_reg = 0x5803c,
2310         .enable_mask = BIT(0),
2311         .hw.init = &(struct clk_init_data){
2312             .name = "gcc_camss_cpp_clk",
2313             .parent_names = (const char *[]){
2314                 "cpp_clk_src",
2315             },
2316             .num_parents = 1,
2317             .flags = CLK_SET_RATE_PARENT,
2318             .ops = &clk_branch2_ops,
2319         },
2320     },
2321 };
2322 
2323 static struct clk_branch gcc_camss_vfe0_clk = {
2324     .halt_reg = 0x58038,
2325     .clkr = {
2326         .enable_reg = 0x58038,
2327         .enable_mask = BIT(0),
2328         .hw.init = &(struct clk_init_data){
2329             .name = "gcc_camss_vfe0_clk",
2330             .parent_names = (const char *[]){
2331                 "vfe0_clk_src",
2332             },
2333             .num_parents = 1,
2334             .flags = CLK_SET_RATE_PARENT,
2335             .ops = &clk_branch2_ops,
2336         },
2337     },
2338 };
2339 
2340 static struct clk_branch gcc_camss_vfe_ahb_clk = {
2341     .halt_reg = 0x58044,
2342     .clkr = {
2343         .enable_reg = 0x58044,
2344         .enable_mask = BIT(0),
2345         .hw.init = &(struct clk_init_data){
2346             .name = "gcc_camss_vfe_ahb_clk",
2347             .parent_names = (const char *[]){
2348                 "camss_ahb_clk_src",
2349             },
2350             .num_parents = 1,
2351             .flags = CLK_SET_RATE_PARENT,
2352             .ops = &clk_branch2_ops,
2353         },
2354     },
2355 };
2356 
2357 static struct clk_branch gcc_camss_vfe_axi_clk = {
2358     .halt_reg = 0x58048,
2359     .clkr = {
2360         .enable_reg = 0x58048,
2361         .enable_mask = BIT(0),
2362         .hw.init = &(struct clk_init_data){
2363             .name = "gcc_camss_vfe_axi_clk",
2364             .parent_names = (const char *[]){
2365                 "system_noc_bfdcd_clk_src",
2366             },
2367             .num_parents = 1,
2368             .flags = CLK_SET_RATE_PARENT,
2369             .ops = &clk_branch2_ops,
2370         },
2371     },
2372 };
2373 
2374 static struct clk_branch gcc_crypto_ahb_clk = {
2375     .halt_reg = 0x16024,
2376     .halt_check = BRANCH_HALT_VOTED,
2377     .clkr = {
2378         .enable_reg = 0x45004,
2379         .enable_mask = BIT(0),
2380         .hw.init = &(struct clk_init_data){
2381             .name = "gcc_crypto_ahb_clk",
2382             .parent_names = (const char *[]){
2383                 "pcnoc_bfdcd_clk_src",
2384             },
2385             .num_parents = 1,
2386             .flags = CLK_SET_RATE_PARENT,
2387             .ops = &clk_branch2_ops,
2388         },
2389     },
2390 };
2391 
2392 static struct clk_branch gcc_crypto_axi_clk = {
2393     .halt_reg = 0x16020,
2394     .halt_check = BRANCH_HALT_VOTED,
2395     .clkr = {
2396         .enable_reg = 0x45004,
2397         .enable_mask = BIT(1),
2398         .hw.init = &(struct clk_init_data){
2399             .name = "gcc_crypto_axi_clk",
2400             .parent_names = (const char *[]){
2401                 "pcnoc_bfdcd_clk_src",
2402             },
2403             .num_parents = 1,
2404             .flags = CLK_SET_RATE_PARENT,
2405             .ops = &clk_branch2_ops,
2406         },
2407     },
2408 };
2409 
2410 static struct clk_branch gcc_crypto_clk = {
2411     .halt_reg = 0x1601c,
2412     .halt_check = BRANCH_HALT_VOTED,
2413     .clkr = {
2414         .enable_reg = 0x45004,
2415         .enable_mask = BIT(2),
2416         .hw.init = &(struct clk_init_data){
2417             .name = "gcc_crypto_clk",
2418             .parent_names = (const char *[]){
2419                 "crypto_clk_src",
2420             },
2421             .num_parents = 1,
2422             .flags = CLK_SET_RATE_PARENT,
2423             .ops = &clk_branch2_ops,
2424         },
2425     },
2426 };
2427 
2428 static struct clk_branch gcc_oxili_gmem_clk = {
2429     .halt_reg = 0x59024,
2430     .clkr = {
2431         .enable_reg = 0x59024,
2432         .enable_mask = BIT(0),
2433         .hw.init = &(struct clk_init_data){
2434             .name = "gcc_oxili_gmem_clk",
2435             .parent_names = (const char *[]){
2436                 "gfx3d_clk_src",
2437             },
2438             .num_parents = 1,
2439             .flags = CLK_SET_RATE_PARENT,
2440             .ops = &clk_branch2_ops,
2441         },
2442     },
2443 };
2444 
2445 static struct clk_branch gcc_gp1_clk = {
2446     .halt_reg = 0x08000,
2447     .clkr = {
2448         .enable_reg = 0x08000,
2449         .enable_mask = BIT(0),
2450         .hw.init = &(struct clk_init_data){
2451             .name = "gcc_gp1_clk",
2452             .parent_names = (const char *[]){
2453                 "gp1_clk_src",
2454             },
2455             .num_parents = 1,
2456             .flags = CLK_SET_RATE_PARENT,
2457             .ops = &clk_branch2_ops,
2458         },
2459     },
2460 };
2461 
2462 static struct clk_branch gcc_gp2_clk = {
2463     .halt_reg = 0x09000,
2464     .clkr = {
2465         .enable_reg = 0x09000,
2466         .enable_mask = BIT(0),
2467         .hw.init = &(struct clk_init_data){
2468             .name = "gcc_gp2_clk",
2469             .parent_names = (const char *[]){
2470                 "gp2_clk_src",
2471             },
2472             .num_parents = 1,
2473             .flags = CLK_SET_RATE_PARENT,
2474             .ops = &clk_branch2_ops,
2475         },
2476     },
2477 };
2478 
2479 static struct clk_branch gcc_gp3_clk = {
2480     .halt_reg = 0x0a000,
2481     .clkr = {
2482         .enable_reg = 0x0a000,
2483         .enable_mask = BIT(0),
2484         .hw.init = &(struct clk_init_data){
2485             .name = "gcc_gp3_clk",
2486             .parent_names = (const char *[]){
2487                 "gp3_clk_src",
2488             },
2489             .num_parents = 1,
2490             .flags = CLK_SET_RATE_PARENT,
2491             .ops = &clk_branch2_ops,
2492         },
2493     },
2494 };
2495 
2496 static struct clk_branch gcc_mdss_ahb_clk = {
2497     .halt_reg = 0x4d07c,
2498     .clkr = {
2499         .enable_reg = 0x4d07c,
2500         .enable_mask = BIT(0),
2501         .hw.init = &(struct clk_init_data){
2502             .name = "gcc_mdss_ahb_clk",
2503             .parent_names = (const char *[]){
2504                 "pcnoc_bfdcd_clk_src",
2505             },
2506             .num_parents = 1,
2507             .flags = CLK_SET_RATE_PARENT,
2508             .ops = &clk_branch2_ops,
2509         },
2510     },
2511 };
2512 
2513 static struct clk_branch gcc_mdss_axi_clk = {
2514     .halt_reg = 0x4d080,
2515     .clkr = {
2516         .enable_reg = 0x4d080,
2517         .enable_mask = BIT(0),
2518         .hw.init = &(struct clk_init_data){
2519             .name = "gcc_mdss_axi_clk",
2520             .parent_names = (const char *[]){
2521                 "system_noc_bfdcd_clk_src",
2522             },
2523             .num_parents = 1,
2524             .flags = CLK_SET_RATE_PARENT,
2525             .ops = &clk_branch2_ops,
2526         },
2527     },
2528 };
2529 
2530 static struct clk_branch gcc_mdss_byte0_clk = {
2531     .halt_reg = 0x4d094,
2532     .clkr = {
2533         .enable_reg = 0x4d094,
2534         .enable_mask = BIT(0),
2535         .hw.init = &(struct clk_init_data){
2536             .name = "gcc_mdss_byte0_clk",
2537             .parent_names = (const char *[]){
2538                 "byte0_clk_src",
2539             },
2540             .num_parents = 1,
2541             .flags = CLK_SET_RATE_PARENT,
2542             .ops = &clk_branch2_ops,
2543         },
2544     },
2545 };
2546 
2547 static struct clk_branch gcc_mdss_esc0_clk = {
2548     .halt_reg = 0x4d098,
2549     .clkr = {
2550         .enable_reg = 0x4d098,
2551         .enable_mask = BIT(0),
2552         .hw.init = &(struct clk_init_data){
2553             .name = "gcc_mdss_esc0_clk",
2554             .parent_names = (const char *[]){
2555                 "esc0_clk_src",
2556             },
2557             .num_parents = 1,
2558             .flags = CLK_SET_RATE_PARENT,
2559             .ops = &clk_branch2_ops,
2560         },
2561     },
2562 };
2563 
2564 static struct clk_branch gcc_mdss_mdp_clk = {
2565     .halt_reg = 0x4D088,
2566     .clkr = {
2567         .enable_reg = 0x4D088,
2568         .enable_mask = BIT(0),
2569         .hw.init = &(struct clk_init_data){
2570             .name = "gcc_mdss_mdp_clk",
2571             .parent_names = (const char *[]){
2572                 "mdp_clk_src",
2573             },
2574             .num_parents = 1,
2575             .flags = CLK_SET_RATE_PARENT,
2576             .ops = &clk_branch2_ops,
2577         },
2578     },
2579 };
2580 
2581 static struct clk_branch gcc_mdss_pclk0_clk = {
2582     .halt_reg = 0x4d084,
2583     .clkr = {
2584         .enable_reg = 0x4d084,
2585         .enable_mask = BIT(0),
2586         .hw.init = &(struct clk_init_data){
2587             .name = "gcc_mdss_pclk0_clk",
2588             .parent_names = (const char *[]){
2589                 "pclk0_clk_src",
2590             },
2591             .num_parents = 1,
2592             .flags = CLK_SET_RATE_PARENT,
2593             .ops = &clk_branch2_ops,
2594         },
2595     },
2596 };
2597 
2598 static struct clk_branch gcc_mdss_vsync_clk = {
2599     .halt_reg = 0x4d090,
2600     .clkr = {
2601         .enable_reg = 0x4d090,
2602         .enable_mask = BIT(0),
2603         .hw.init = &(struct clk_init_data){
2604             .name = "gcc_mdss_vsync_clk",
2605             .parent_names = (const char *[]){
2606                 "vsync_clk_src",
2607             },
2608             .num_parents = 1,
2609             .flags = CLK_SET_RATE_PARENT,
2610             .ops = &clk_branch2_ops,
2611         },
2612     },
2613 };
2614 
2615 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2616     .halt_reg = 0x49000,
2617     .clkr = {
2618         .enable_reg = 0x49000,
2619         .enable_mask = BIT(0),
2620         .hw.init = &(struct clk_init_data){
2621             .name = "gcc_mss_cfg_ahb_clk",
2622             .parent_names = (const char *[]){
2623                 "pcnoc_bfdcd_clk_src",
2624             },
2625             .num_parents = 1,
2626             .flags = CLK_SET_RATE_PARENT,
2627             .ops = &clk_branch2_ops,
2628         },
2629     },
2630 };
2631 
2632 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2633     .halt_reg = 0x49004,
2634     .clkr = {
2635         .enable_reg = 0x49004,
2636         .enable_mask = BIT(0),
2637         .hw.init = &(struct clk_init_data){
2638             .name = "gcc_mss_q6_bimc_axi_clk",
2639             .parent_names = (const char *[]){
2640                 "bimc_ddr_clk_src",
2641             },
2642             .num_parents = 1,
2643             .flags = CLK_SET_RATE_PARENT,
2644             .ops = &clk_branch2_ops,
2645         },
2646     },
2647 };
2648 
2649 static struct clk_branch gcc_oxili_ahb_clk = {
2650     .halt_reg = 0x59028,
2651     .clkr = {
2652         .enable_reg = 0x59028,
2653         .enable_mask = BIT(0),
2654         .hw.init = &(struct clk_init_data){
2655             .name = "gcc_oxili_ahb_clk",
2656             .parent_names = (const char *[]){
2657                 "pcnoc_bfdcd_clk_src",
2658             },
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_oxili_gfx3d_clk = {
2667     .halt_reg = 0x59020,
2668     .clkr = {
2669         .enable_reg = 0x59020,
2670         .enable_mask = BIT(0),
2671         .hw.init = &(struct clk_init_data){
2672             .name = "gcc_oxili_gfx3d_clk",
2673             .parent_names = (const char *[]){
2674                 "gfx3d_clk_src",
2675             },
2676             .num_parents = 1,
2677             .flags = CLK_SET_RATE_PARENT,
2678             .ops = &clk_branch2_ops,
2679         },
2680     },
2681 };
2682 
2683 static struct clk_branch gcc_pdm2_clk = {
2684     .halt_reg = 0x4400c,
2685     .clkr = {
2686         .enable_reg = 0x4400c,
2687         .enable_mask = BIT(0),
2688         .hw.init = &(struct clk_init_data){
2689             .name = "gcc_pdm2_clk",
2690             .parent_names = (const char *[]){
2691                 "pdm2_clk_src",
2692             },
2693             .num_parents = 1,
2694             .flags = CLK_SET_RATE_PARENT,
2695             .ops = &clk_branch2_ops,
2696         },
2697     },
2698 };
2699 
2700 static struct clk_branch gcc_pdm_ahb_clk = {
2701     .halt_reg = 0x44004,
2702     .clkr = {
2703         .enable_reg = 0x44004,
2704         .enable_mask = BIT(0),
2705         .hw.init = &(struct clk_init_data){
2706             .name = "gcc_pdm_ahb_clk",
2707             .parent_names = (const char *[]){
2708                 "pcnoc_bfdcd_clk_src",
2709             },
2710             .num_parents = 1,
2711             .flags = CLK_SET_RATE_PARENT,
2712             .ops = &clk_branch2_ops,
2713         },
2714     },
2715 };
2716 
2717 static struct clk_branch gcc_prng_ahb_clk = {
2718     .halt_reg = 0x13004,
2719     .halt_check = BRANCH_HALT_VOTED,
2720     .clkr = {
2721         .enable_reg = 0x45004,
2722         .enable_mask = BIT(8),
2723         .hw.init = &(struct clk_init_data){
2724             .name = "gcc_prng_ahb_clk",
2725             .parent_names = (const char *[]){
2726                 "pcnoc_bfdcd_clk_src",
2727             },
2728             .num_parents = 1,
2729             .ops = &clk_branch2_ops,
2730         },
2731     },
2732 };
2733 
2734 static struct clk_branch gcc_sdcc1_ahb_clk = {
2735     .halt_reg = 0x4201c,
2736     .clkr = {
2737         .enable_reg = 0x4201c,
2738         .enable_mask = BIT(0),
2739         .hw.init = &(struct clk_init_data){
2740             .name = "gcc_sdcc1_ahb_clk",
2741             .parent_names = (const char *[]){
2742                 "pcnoc_bfdcd_clk_src",
2743             },
2744             .num_parents = 1,
2745             .flags = CLK_SET_RATE_PARENT,
2746             .ops = &clk_branch2_ops,
2747         },
2748     },
2749 };
2750 
2751 static struct clk_branch gcc_sdcc1_apps_clk = {
2752     .halt_reg = 0x42018,
2753     .clkr = {
2754         .enable_reg = 0x42018,
2755         .enable_mask = BIT(0),
2756         .hw.init = &(struct clk_init_data){
2757             .name = "gcc_sdcc1_apps_clk",
2758             .parent_names = (const char *[]){
2759                 "sdcc1_apps_clk_src",
2760             },
2761             .num_parents = 1,
2762             .flags = CLK_SET_RATE_PARENT,
2763             .ops = &clk_branch2_ops,
2764         },
2765     },
2766 };
2767 
2768 static struct clk_branch gcc_sdcc2_ahb_clk = {
2769     .halt_reg = 0x4301c,
2770     .clkr = {
2771         .enable_reg = 0x4301c,
2772         .enable_mask = BIT(0),
2773         .hw.init = &(struct clk_init_data){
2774             .name = "gcc_sdcc2_ahb_clk",
2775             .parent_names = (const char *[]){
2776                 "pcnoc_bfdcd_clk_src",
2777             },
2778             .num_parents = 1,
2779             .flags = CLK_SET_RATE_PARENT,
2780             .ops = &clk_branch2_ops,
2781         },
2782     },
2783 };
2784 
2785 static struct clk_branch gcc_sdcc2_apps_clk = {
2786     .halt_reg = 0x43018,
2787     .clkr = {
2788         .enable_reg = 0x43018,
2789         .enable_mask = BIT(0),
2790         .hw.init = &(struct clk_init_data){
2791             .name = "gcc_sdcc2_apps_clk",
2792             .parent_names = (const char *[]){
2793                 "sdcc2_apps_clk_src",
2794             },
2795             .num_parents = 1,
2796             .flags = CLK_SET_RATE_PARENT,
2797             .ops = &clk_branch2_ops,
2798         },
2799     },
2800 };
2801 
2802 static struct clk_rcg2 bimc_ddr_clk_src = {
2803     .cmd_rcgr = 0x32004,
2804     .hid_width = 5,
2805     .parent_map = gcc_xo_gpll0_bimc_map,
2806     .clkr.hw.init = &(struct clk_init_data){
2807         .name = "bimc_ddr_clk_src",
2808         .parent_names = gcc_xo_gpll0_bimc,
2809         .num_parents = 3,
2810         .ops = &clk_rcg2_ops,
2811         .flags = CLK_GET_RATE_NOCACHE,
2812     },
2813 };
2814 
2815 static struct clk_branch gcc_apss_tcu_clk = {
2816     .halt_reg = 0x12018,
2817     .clkr = {
2818         .enable_reg = 0x4500c,
2819         .enable_mask = BIT(1),
2820         .hw.init = &(struct clk_init_data){
2821             .name = "gcc_apss_tcu_clk",
2822             .parent_names = (const char *[]){
2823                 "bimc_ddr_clk_src",
2824             },
2825             .num_parents = 1,
2826             .ops = &clk_branch2_ops,
2827         },
2828     },
2829 };
2830 
2831 static struct clk_branch gcc_gfx_tcu_clk = {
2832     .halt_reg = 0x12020,
2833     .clkr = {
2834         .enable_reg = 0x4500c,
2835         .enable_mask = BIT(2),
2836         .hw.init = &(struct clk_init_data){
2837             .name = "gcc_gfx_tcu_clk",
2838             .parent_names = (const char *[]){
2839                 "bimc_ddr_clk_src",
2840             },
2841             .num_parents = 1,
2842             .ops = &clk_branch2_ops,
2843         },
2844     },
2845 };
2846 
2847 static struct clk_branch gcc_gtcu_ahb_clk = {
2848     .halt_reg = 0x12044,
2849     .clkr = {
2850         .enable_reg = 0x4500c,
2851         .enable_mask = BIT(13),
2852         .hw.init = &(struct clk_init_data){
2853             .name = "gcc_gtcu_ahb_clk",
2854             .parent_names = (const char *[]){
2855                 "pcnoc_bfdcd_clk_src",
2856             },
2857             .num_parents = 1,
2858             .flags = CLK_SET_RATE_PARENT,
2859             .ops = &clk_branch2_ops,
2860         },
2861     },
2862 };
2863 
2864 static struct clk_branch gcc_bimc_gfx_clk = {
2865     .halt_reg = 0x31024,
2866     .clkr = {
2867         .enable_reg = 0x31024,
2868         .enable_mask = BIT(0),
2869         .hw.init = &(struct clk_init_data){
2870             .name = "gcc_bimc_gfx_clk",
2871             .parent_names = (const char *[]){
2872                 "bimc_gpu_clk_src",
2873             },
2874             .num_parents = 1,
2875             .flags = CLK_SET_RATE_PARENT,
2876             .ops = &clk_branch2_ops,
2877         },
2878     },
2879 };
2880 
2881 static struct clk_branch gcc_bimc_gpu_clk = {
2882     .halt_reg = 0x31040,
2883     .clkr = {
2884         .enable_reg = 0x31040,
2885         .enable_mask = BIT(0),
2886         .hw.init = &(struct clk_init_data){
2887             .name = "gcc_bimc_gpu_clk",
2888             .parent_names = (const char *[]){
2889                 "bimc_gpu_clk_src",
2890             },
2891             .num_parents = 1,
2892             .flags = CLK_SET_RATE_PARENT,
2893             .ops = &clk_branch2_ops,
2894         },
2895     },
2896 };
2897 
2898 static struct clk_branch gcc_jpeg_tbu_clk = {
2899     .halt_reg = 0x12034,
2900     .clkr = {
2901         .enable_reg = 0x4500c,
2902         .enable_mask = BIT(10),
2903         .hw.init = &(struct clk_init_data){
2904             .name = "gcc_jpeg_tbu_clk",
2905             .parent_names = (const char *[]){
2906                 "system_noc_bfdcd_clk_src",
2907             },
2908             .num_parents = 1,
2909             .flags = CLK_SET_RATE_PARENT,
2910             .ops = &clk_branch2_ops,
2911         },
2912     },
2913 };
2914 
2915 static struct clk_branch gcc_mdp_tbu_clk = {
2916     .halt_reg = 0x1201c,
2917     .clkr = {
2918         .enable_reg = 0x4500c,
2919         .enable_mask = BIT(4),
2920         .hw.init = &(struct clk_init_data){
2921             .name = "gcc_mdp_tbu_clk",
2922             .parent_names = (const char *[]){
2923                 "system_noc_bfdcd_clk_src",
2924             },
2925             .num_parents = 1,
2926             .flags = CLK_SET_RATE_PARENT,
2927             .ops = &clk_branch2_ops,
2928         },
2929     },
2930 };
2931 
2932 static struct clk_branch gcc_smmu_cfg_clk = {
2933     .halt_reg = 0x12038,
2934     .clkr = {
2935         .enable_reg = 0x4500c,
2936         .enable_mask = BIT(12),
2937         .hw.init = &(struct clk_init_data){
2938             .name = "gcc_smmu_cfg_clk",
2939             .parent_names = (const char *[]){
2940                 "pcnoc_bfdcd_clk_src",
2941             },
2942             .num_parents = 1,
2943             .flags = CLK_SET_RATE_PARENT,
2944             .ops = &clk_branch2_ops,
2945         },
2946     },
2947 };
2948 
2949 static struct clk_branch gcc_venus_tbu_clk = {
2950     .halt_reg = 0x12014,
2951     .clkr = {
2952         .enable_reg = 0x4500c,
2953         .enable_mask = BIT(5),
2954         .hw.init = &(struct clk_init_data){
2955             .name = "gcc_venus_tbu_clk",
2956             .parent_names = (const char *[]){
2957                 "system_noc_bfdcd_clk_src",
2958             },
2959             .num_parents = 1,
2960             .flags = CLK_SET_RATE_PARENT,
2961             .ops = &clk_branch2_ops,
2962         },
2963     },
2964 };
2965 
2966 static struct clk_branch gcc_vfe_tbu_clk = {
2967     .halt_reg = 0x1203c,
2968     .clkr = {
2969         .enable_reg = 0x4500c,
2970         .enable_mask = BIT(9),
2971         .hw.init = &(struct clk_init_data){
2972             .name = "gcc_vfe_tbu_clk",
2973             .parent_names = (const char *[]){
2974                 "system_noc_bfdcd_clk_src",
2975             },
2976             .num_parents = 1,
2977             .flags = CLK_SET_RATE_PARENT,
2978             .ops = &clk_branch2_ops,
2979         },
2980     },
2981 };
2982 
2983 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2984     .halt_reg = 0x4102c,
2985     .clkr = {
2986         .enable_reg = 0x4102c,
2987         .enable_mask = BIT(0),
2988         .hw.init = &(struct clk_init_data){
2989             .name = "gcc_usb2a_phy_sleep_clk",
2990             .parent_names = (const char *[]){
2991                 "sleep_clk_src",
2992             },
2993             .num_parents = 1,
2994             .flags = CLK_SET_RATE_PARENT,
2995             .ops = &clk_branch2_ops,
2996         },
2997     },
2998 };
2999 
3000 static struct clk_branch gcc_usb_hs_ahb_clk = {
3001     .halt_reg = 0x41008,
3002     .clkr = {
3003         .enable_reg = 0x41008,
3004         .enable_mask = BIT(0),
3005         .hw.init = &(struct clk_init_data){
3006             .name = "gcc_usb_hs_ahb_clk",
3007             .parent_names = (const char *[]){
3008                 "pcnoc_bfdcd_clk_src",
3009             },
3010             .num_parents = 1,
3011             .flags = CLK_SET_RATE_PARENT,
3012             .ops = &clk_branch2_ops,
3013         },
3014     },
3015 };
3016 
3017 static struct clk_branch gcc_usb_hs_system_clk = {
3018     .halt_reg = 0x41004,
3019     .clkr = {
3020         .enable_reg = 0x41004,
3021         .enable_mask = BIT(0),
3022         .hw.init = &(struct clk_init_data){
3023             .name = "gcc_usb_hs_system_clk",
3024             .parent_names = (const char *[]){
3025                 "usb_hs_system_clk_src",
3026             },
3027             .num_parents = 1,
3028             .flags = CLK_SET_RATE_PARENT,
3029             .ops = &clk_branch2_ops,
3030         },
3031     },
3032 };
3033 
3034 static struct clk_branch gcc_venus0_ahb_clk = {
3035     .halt_reg = 0x4c020,
3036     .clkr = {
3037         .enable_reg = 0x4c020,
3038         .enable_mask = BIT(0),
3039         .hw.init = &(struct clk_init_data){
3040             .name = "gcc_venus0_ahb_clk",
3041             .parent_names = (const char *[]){
3042                 "pcnoc_bfdcd_clk_src",
3043             },
3044             .num_parents = 1,
3045             .flags = CLK_SET_RATE_PARENT,
3046             .ops = &clk_branch2_ops,
3047         },
3048     },
3049 };
3050 
3051 static struct clk_branch gcc_venus0_axi_clk = {
3052     .halt_reg = 0x4c024,
3053     .clkr = {
3054         .enable_reg = 0x4c024,
3055         .enable_mask = BIT(0),
3056         .hw.init = &(struct clk_init_data){
3057             .name = "gcc_venus0_axi_clk",
3058             .parent_names = (const char *[]){
3059                 "system_noc_bfdcd_clk_src",
3060             },
3061             .num_parents = 1,
3062             .flags = CLK_SET_RATE_PARENT,
3063             .ops = &clk_branch2_ops,
3064         },
3065     },
3066 };
3067 
3068 static struct clk_branch gcc_venus0_vcodec0_clk = {
3069     .halt_reg = 0x4c01c,
3070     .clkr = {
3071         .enable_reg = 0x4c01c,
3072         .enable_mask = BIT(0),
3073         .hw.init = &(struct clk_init_data){
3074             .name = "gcc_venus0_vcodec0_clk",
3075             .parent_names = (const char *[]){
3076                 "vcodec0_clk_src",
3077             },
3078             .num_parents = 1,
3079             .flags = CLK_SET_RATE_PARENT,
3080             .ops = &clk_branch2_ops,
3081         },
3082     },
3083 };
3084 
3085 static struct gdsc venus_gdsc = {
3086     .gdscr = 0x4c018,
3087     .pd = {
3088         .name = "venus",
3089     },
3090     .pwrsts = PWRSTS_OFF_ON,
3091 };
3092 
3093 static struct gdsc mdss_gdsc = {
3094     .gdscr = 0x4d078,
3095     .pd = {
3096         .name = "mdss",
3097     },
3098     .pwrsts = PWRSTS_OFF_ON,
3099 };
3100 
3101 static struct gdsc jpeg_gdsc = {
3102     .gdscr = 0x5701c,
3103     .pd = {
3104         .name = "jpeg",
3105     },
3106     .pwrsts = PWRSTS_OFF_ON,
3107 };
3108 
3109 static struct gdsc vfe_gdsc = {
3110     .gdscr = 0x58034,
3111     .pd = {
3112         .name = "vfe",
3113     },
3114     .pwrsts = PWRSTS_OFF_ON,
3115 };
3116 
3117 static struct gdsc oxili_gdsc = {
3118     .gdscr = 0x5901c,
3119     .pd = {
3120         .name = "oxili",
3121     },
3122     .pwrsts = PWRSTS_OFF_ON,
3123 };
3124 
3125 static struct clk_regmap *gcc_msm8916_clocks[] = {
3126     [GPLL0] = &gpll0.clkr,
3127     [GPLL0_VOTE] = &gpll0_vote,
3128     [BIMC_PLL] = &bimc_pll.clkr,
3129     [BIMC_PLL_VOTE] = &bimc_pll_vote,
3130     [GPLL1] = &gpll1.clkr,
3131     [GPLL1_VOTE] = &gpll1_vote,
3132     [GPLL2] = &gpll2.clkr,
3133     [GPLL2_VOTE] = &gpll2_vote,
3134     [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
3135     [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
3136     [CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,
3137     [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3138     [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3139     [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3140     [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3141     [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3142     [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3143     [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3144     [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3145     [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3146     [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3147     [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3148     [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3149     [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3150     [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3151     [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3152     [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3153     [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3154     [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3155     [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3156     [CCI_CLK_SRC] = &cci_clk_src.clkr,
3157     [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3158     [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3159     [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3160     [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3161     [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3162     [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3163     [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3164     [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3165     [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3166     [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3167     [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3168     [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3169     [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3170     [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3171     [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3172     [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3173     [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3174     [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3175     [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3176     [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3177     [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
3178     [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3179     [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3180     [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3181     [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3182     [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3183     [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3184     [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3185     [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3186     [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3187     [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3188     [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3189     [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3190     [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3191     [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3192     [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3193     [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3194     [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3195     [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3196     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3197     [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3198     [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3199     [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3200     [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3201     [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3202     [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3203     [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3204     [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3205     [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3206     [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3207     [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3208     [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3209     [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3210     [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3211     [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3212     [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3213     [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3214     [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3215     [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3216     [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3217     [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3218     [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3219     [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3220     [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3221     [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3222     [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3223     [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3224     [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3225     [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3226     [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
3227     [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
3228     [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3229     [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3230     [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3231     [GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
3232     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3233     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3234     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3235     [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3236     [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3237     [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3238     [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3239     [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3240     [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3241     [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3242     [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3243     [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3244     [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3245     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3246     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3247     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3248     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3249     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3250     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3251     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3252     [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3253     [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3254     [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3255     [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3256     [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3257     [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3258     [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3259     [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3260     [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3261     [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3262     [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3263     [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3264     [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
3265     [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3266     [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3267     [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
3268     [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3269     [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3270     [ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr,
3271     [ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr,
3272     [ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr,
3273     [ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr,
3274     [ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr,
3275     [CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr,
3276     [GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr,
3277     [GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr,
3278     [GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr,
3279     [GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr,
3280     [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr,
3281     [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr,
3282     [GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr,
3283     [GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr,
3284     [GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr,
3285     [GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr,
3286     [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3287 };
3288 
3289 static struct gdsc *gcc_msm8916_gdscs[] = {
3290     [VENUS_GDSC] = &venus_gdsc,
3291     [MDSS_GDSC] = &mdss_gdsc,
3292     [JPEG_GDSC] = &jpeg_gdsc,
3293     [VFE_GDSC] = &vfe_gdsc,
3294     [OXILI_GDSC] = &oxili_gdsc,
3295 };
3296 
3297 static const struct qcom_reset_map gcc_msm8916_resets[] = {
3298     [GCC_BLSP1_BCR] = { 0x01000 },
3299     [GCC_BLSP1_QUP1_BCR] = { 0x02000 },
3300     [GCC_BLSP1_UART1_BCR] = { 0x02038 },
3301     [GCC_BLSP1_QUP2_BCR] = { 0x03008 },
3302     [GCC_BLSP1_UART2_BCR] = { 0x03028 },
3303     [GCC_BLSP1_QUP3_BCR] = { 0x04018 },
3304     [GCC_BLSP1_QUP4_BCR] = { 0x05018 },
3305     [GCC_BLSP1_QUP5_BCR] = { 0x06018 },
3306     [GCC_BLSP1_QUP6_BCR] = { 0x07018 },
3307     [GCC_IMEM_BCR] = { 0x0e000 },
3308     [GCC_SMMU_BCR] = { 0x12000 },
3309     [GCC_APSS_TCU_BCR] = { 0x12050 },
3310     [GCC_SMMU_XPU_BCR] = { 0x12054 },
3311     [GCC_PCNOC_TBU_BCR] = { 0x12058 },
3312     [GCC_PRNG_BCR] = { 0x13000 },
3313     [GCC_BOOT_ROM_BCR] = { 0x13008 },
3314     [GCC_CRYPTO_BCR] = { 0x16000 },
3315     [GCC_SEC_CTRL_BCR] = { 0x1a000 },
3316     [GCC_AUDIO_CORE_BCR] = { 0x1c008 },
3317     [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
3318     [GCC_DEHR_BCR] = { 0x1f000 },
3319     [GCC_SYSTEM_NOC_BCR] = { 0x26000 },
3320     [GCC_PCNOC_BCR] = { 0x27018 },
3321     [GCC_TCSR_BCR] = { 0x28000 },
3322     [GCC_QDSS_BCR] = { 0x29000 },
3323     [GCC_DCD_BCR] = { 0x2a000 },
3324     [GCC_MSG_RAM_BCR] = { 0x2b000 },
3325     [GCC_MPM_BCR] = { 0x2c000 },
3326     [GCC_SPMI_BCR] = { 0x2e000 },
3327     [GCC_SPDM_BCR] = { 0x2f000 },
3328     [GCC_MM_SPDM_BCR] = { 0x2f024 },
3329     [GCC_BIMC_BCR] = { 0x31000 },
3330     [GCC_RBCPR_BCR] = { 0x33000 },
3331     [GCC_TLMM_BCR] = { 0x34000 },
3332     [GCC_USB_HS_BCR] = { 0x41000 },
3333     [GCC_USB2A_PHY_BCR] = { 0x41028 },
3334     [GCC_SDCC1_BCR] = { 0x42000 },
3335     [GCC_SDCC2_BCR] = { 0x43000 },
3336     [GCC_PDM_BCR] = { 0x44000 },
3337     [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },
3338     [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },
3339     [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },
3340     [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },
3341     [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },
3342     [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },
3343     [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },
3344     [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },
3345     [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },
3346     [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },
3347     [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },
3348     [GCC_MMSS_BCR] = { 0x4b000 },
3349     [GCC_VENUS0_BCR] = { 0x4c014 },
3350     [GCC_MDSS_BCR] = { 0x4d074 },
3351     [GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
3352     [GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
3353     [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
3354     [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
3355     [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
3356     [GCC_CAMSS_PHY1_BCR] = { 0x4f018 },
3357     [GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
3358     [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
3359     [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
3360     [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
3361     [GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
3362     [GCC_CAMSS_CCI_BCR] = { 0x51014 },
3363     [GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
3364     [GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
3365     [GCC_CAMSS_GP0_BCR] = { 0x54014 },
3366     [GCC_CAMSS_GP1_BCR] = { 0x55014 },
3367     [GCC_CAMSS_TOP_BCR] = { 0x56000 },
3368     [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
3369     [GCC_CAMSS_JPEG_BCR] = { 0x57018 },
3370     [GCC_CAMSS_VFE_BCR] = { 0x58030 },
3371     [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
3372     [GCC_OXILI_BCR] = { 0x59018 },
3373     [GCC_GMEM_BCR] = { 0x5902c },
3374     [GCC_CAMSS_AHB_BCR] = { 0x5a018 },
3375     [GCC_MDP_TBU_BCR] = { 0x62000 },
3376     [GCC_GFX_TBU_BCR] = { 0x63000 },
3377     [GCC_GFX_TCU_BCR] = { 0x64000 },
3378     [GCC_MSS_TBU_AXI_BCR] = { 0x65000 },
3379     [GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },
3380     [GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },
3381     [GCC_GTCU_AHB_BCR] = { 0x68000 },
3382     [GCC_SMMU_CFG_BCR] = { 0x69000 },
3383     [GCC_VFE_TBU_BCR] = { 0x6a000 },
3384     [GCC_VENUS_TBU_BCR] = { 0x6b000 },
3385     [GCC_JPEG_TBU_BCR] = { 0x6c000 },
3386     [GCC_PRONTO_TBU_BCR] = { 0x6d000 },
3387     [GCC_SMMU_CATS_BCR] = { 0x7c000 },
3388 };
3389 
3390 static const struct regmap_config gcc_msm8916_regmap_config = {
3391     .reg_bits   = 32,
3392     .reg_stride = 4,
3393     .val_bits   = 32,
3394     .max_register   = 0x80000,
3395     .fast_io    = true,
3396 };
3397 
3398 static const struct qcom_cc_desc gcc_msm8916_desc = {
3399     .config = &gcc_msm8916_regmap_config,
3400     .clks = gcc_msm8916_clocks,
3401     .num_clks = ARRAY_SIZE(gcc_msm8916_clocks),
3402     .resets = gcc_msm8916_resets,
3403     .num_resets = ARRAY_SIZE(gcc_msm8916_resets),
3404     .gdscs = gcc_msm8916_gdscs,
3405     .num_gdscs = ARRAY_SIZE(gcc_msm8916_gdscs),
3406 };
3407 
3408 static const struct of_device_id gcc_msm8916_match_table[] = {
3409     { .compatible = "qcom,gcc-msm8916" },
3410     { }
3411 };
3412 MODULE_DEVICE_TABLE(of, gcc_msm8916_match_table);
3413 
3414 static int gcc_msm8916_probe(struct platform_device *pdev)
3415 {
3416     int ret;
3417     struct device *dev = &pdev->dev;
3418 
3419     ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
3420     if (ret)
3421         return ret;
3422 
3423     ret = qcom_cc_register_sleep_clk(dev);
3424     if (ret)
3425         return ret;
3426 
3427     return qcom_cc_probe(pdev, &gcc_msm8916_desc);
3428 }
3429 
3430 static struct platform_driver gcc_msm8916_driver = {
3431     .probe      = gcc_msm8916_probe,
3432     .driver     = {
3433         .name   = "gcc-msm8916",
3434         .of_match_table = gcc_msm8916_match_table,
3435     },
3436 };
3437 
3438 static int __init gcc_msm8916_init(void)
3439 {
3440     return platform_driver_register(&gcc_msm8916_driver);
3441 }
3442 core_initcall(gcc_msm8916_init);
3443 
3444 static void __exit gcc_msm8916_exit(void)
3445 {
3446     platform_driver_unregister(&gcc_msm8916_driver);
3447 }
3448 module_exit(gcc_msm8916_exit);
3449 
3450 MODULE_DESCRIPTION("Qualcomm GCC MSM8916 Driver");
3451 MODULE_LICENSE("GPL v2");
3452 MODULE_ALIAS("platform:gcc-msm8916");