Back to home page

OSCL-LXR

 
 

    


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