Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 // Copyright (c) 2021, The Linux Foundation. All rights reserved.
0003 
0004 #include <linux/kernel.h>
0005 #include <linux/bitops.h>
0006 #include <linux/err.h>
0007 #include <linux/module.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/of.h>
0010 #include <linux/of_device.h>
0011 #include <linux/clk-provider.h>
0012 #include <linux/regmap.h>
0013 #include <linux/reset-controller.h>
0014 
0015 #include <dt-bindings/clock/qcom,gcc-msm8953.h>
0016 
0017 #include "clk-alpha-pll.h"
0018 #include "clk-branch.h"
0019 #include "clk-rcg.h"
0020 #include "common.h"
0021 #include "gdsc.h"
0022 #include "reset.h"
0023 
0024 enum {
0025     P_XO,
0026     P_SLEEP_CLK,
0027     P_GPLL0,
0028     P_GPLL0_DIV2,
0029     P_GPLL2,
0030     P_GPLL3,
0031     P_GPLL4,
0032     P_GPLL6,
0033     P_GPLL6_DIV2,
0034     P_DSI0PLL,
0035     P_DSI0PLL_BYTE,
0036     P_DSI1PLL,
0037     P_DSI1PLL_BYTE,
0038 };
0039 
0040 static struct clk_alpha_pll gpll0_early = {
0041     .offset = 0x21000,
0042     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0043     .clkr = {
0044         .enable_reg = 0x45000,
0045         .enable_mask = BIT(0),
0046         .hw.init = &(struct clk_init_data) {
0047             .name = "gpll0_early",
0048             .parent_data = &(const struct clk_parent_data) {
0049                 .fw_name = "xo",
0050             },
0051             .num_parents = 1,
0052             .ops = &clk_alpha_pll_fixed_ops,
0053         },
0054     },
0055 };
0056 
0057 static struct clk_fixed_factor gpll0_early_div = {
0058     .mult = 1,
0059     .div = 2,
0060     .hw.init = &(struct clk_init_data){
0061         .name = "gpll0_early_div",
0062         .parent_hws = (const struct clk_hw*[]){
0063             &gpll0_early.clkr.hw,
0064         },
0065         .num_parents = 1,
0066         .ops = &clk_fixed_factor_ops,
0067     },
0068 };
0069 
0070 static struct clk_alpha_pll_postdiv gpll0 = {
0071     .offset = 0x21000,
0072     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0073     .clkr.hw.init = &(struct clk_init_data){
0074         .name = "gpll0",
0075         .parent_hws = (const struct clk_hw*[]){
0076             &gpll0_early.clkr.hw,
0077         },
0078         .num_parents = 1,
0079         .ops = &clk_alpha_pll_postdiv_ro_ops,
0080     },
0081 };
0082 
0083 static struct clk_alpha_pll gpll2_early = {
0084     .offset = 0x4a000,
0085     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0086     .clkr = {
0087         .enable_reg = 0x45000,
0088         .enable_mask = BIT(2),
0089         .hw.init = &(struct clk_init_data){
0090             .name = "gpll2_early",
0091             .parent_data = &(const struct clk_parent_data) {
0092                 .fw_name = "xo",
0093             },
0094             .num_parents = 1,
0095             .ops = &clk_alpha_pll_fixed_ops,
0096         },
0097     },
0098 };
0099 
0100 static struct clk_alpha_pll_postdiv gpll2 = {
0101     .offset = 0x4a000,
0102     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0103     .clkr.hw.init = &(struct clk_init_data){
0104         .name = "gpll2",
0105         .parent_hws = (const struct clk_hw*[]){
0106             &gpll2_early.clkr.hw,
0107         },
0108         .num_parents = 1,
0109         .ops = &clk_alpha_pll_postdiv_ro_ops,
0110     },
0111 };
0112 
0113 static const struct pll_vco gpll3_p_vco[] = {
0114     { 1000000000, 2000000000, 0 },
0115 };
0116 
0117 static const struct alpha_pll_config gpll3_early_config = {
0118     .l = 63,
0119     .config_ctl_val = 0x4001055b,
0120     .early_output_mask = 0,
0121     .post_div_mask = GENMASK(11, 8),
0122     .post_div_val = BIT(8),
0123 };
0124 
0125 static struct clk_alpha_pll gpll3_early = {
0126     .offset = 0x22000,
0127     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0128     .vco_table = gpll3_p_vco,
0129     .num_vco = ARRAY_SIZE(gpll3_p_vco),
0130     .flags = SUPPORTS_DYNAMIC_UPDATE,
0131     .clkr = {
0132         .hw.init = &(struct clk_init_data){
0133             .name = "gpll3_early",
0134             .parent_data = &(const struct clk_parent_data) {
0135                 .fw_name = "xo",
0136             },
0137             .num_parents = 1,
0138             .ops = &clk_alpha_pll_ops,
0139         },
0140     },
0141 };
0142 
0143 static struct clk_alpha_pll_postdiv gpll3 = {
0144     .offset = 0x22000,
0145     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0146     .clkr.hw.init = &(struct clk_init_data){
0147         .name = "gpll3",
0148         .parent_hws = (const struct clk_hw*[]){
0149             &gpll3_early.clkr.hw,
0150         },
0151         .num_parents = 1,
0152         .ops = &clk_alpha_pll_postdiv_ops,
0153         .flags = CLK_SET_RATE_PARENT,
0154     },
0155 };
0156 
0157 static struct clk_alpha_pll gpll4_early = {
0158     .offset = 0x24000,
0159     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0160     .clkr = {
0161         .enable_reg = 0x45000,
0162         .enable_mask = BIT(5),
0163         .hw.init = &(struct clk_init_data){
0164             .name = "gpll4_early",
0165             .parent_data = &(const struct clk_parent_data) {
0166                 .fw_name = "xo",
0167             },
0168             .num_parents = 1,
0169             .ops = &clk_alpha_pll_fixed_ops,
0170         },
0171     },
0172 };
0173 
0174 static struct clk_alpha_pll_postdiv gpll4 = {
0175     .offset = 0x24000,
0176     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0177     .clkr.hw.init = &(struct clk_init_data){
0178         .name = "gpll4",
0179         .parent_hws = (const struct clk_hw*[]){
0180             &gpll4_early.clkr.hw,
0181         },
0182         .num_parents = 1,
0183         .ops = &clk_alpha_pll_postdiv_ro_ops,
0184     },
0185 };
0186 
0187 static struct clk_alpha_pll gpll6_early = {
0188     .offset = 0x37000,
0189     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0190     .clkr = {
0191         .enable_reg = 0x45000,
0192         .enable_mask = BIT(7),
0193         .hw.init = &(struct clk_init_data){
0194             .name = "gpll6_early",
0195             .parent_data = &(const struct clk_parent_data) {
0196                 .fw_name = "xo",
0197             },
0198             .num_parents = 1,
0199             .ops = &clk_alpha_pll_fixed_ops,
0200         },
0201     },
0202 };
0203 
0204 static struct clk_fixed_factor gpll6_early_div = {
0205     .mult = 1,
0206     .div = 2,
0207     .hw.init = &(struct clk_init_data){
0208         .name = "gpll6_early_div",
0209         .parent_hws = (const struct clk_hw*[]){
0210             &gpll6_early.clkr.hw,
0211         },
0212         .num_parents = 1,
0213         .ops = &clk_fixed_factor_ops,
0214     },
0215 };
0216 
0217 static struct clk_alpha_pll_postdiv gpll6 = {
0218     .offset = 0x37000,
0219     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0220     .clkr.hw.init = &(struct clk_init_data){
0221         .name = "gpll6",
0222         .parent_hws = (const struct clk_hw*[]){
0223             &gpll6_early.clkr.hw,
0224         },
0225         .num_parents = 1,
0226         .ops = &clk_alpha_pll_postdiv_ro_ops,
0227     },
0228 };
0229 
0230 static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = {
0231     { P_XO, 0 },
0232     { P_GPLL0, 1 },
0233     { P_GPLL0_DIV2, 2 },
0234 };
0235 
0236 static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = {
0237     { P_XO, 0 },
0238     { P_GPLL0, 1 },
0239     { P_GPLL0_DIV2, 4 },
0240 };
0241 
0242 static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = {
0243     { .fw_name = "xo" },
0244     { .hw = &gpll0.clkr.hw },
0245     { .hw = &gpll0_early_div.hw },
0246 };
0247 
0248 static const struct parent_map gcc_apc_droop_detector_map[] = {
0249     { P_XO, 0 },
0250     { P_GPLL0, 1 },
0251     { P_GPLL4, 2 },
0252 };
0253 
0254 static const struct clk_parent_data gcc_apc_droop_detector_data[] = {
0255     { .fw_name = "xo" },
0256     { .hw = &gpll0.clkr.hw },
0257     { .hw = &gpll4.clkr.hw },
0258 };
0259 
0260 static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = {
0261     F(19200000, P_XO, 1, 0, 0),
0262     F(400000000, P_GPLL0, 2, 0, 0),
0263     F(576000000, P_GPLL4, 2, 0, 0),
0264     { }
0265 };
0266 
0267 static struct clk_rcg2 apc0_droop_detector_clk_src = {
0268     .cmd_rcgr = 0x78008,
0269     .hid_width = 5,
0270     .freq_tbl = ftbl_apc_droop_detector_clk_src,
0271     .parent_map = gcc_apc_droop_detector_map,
0272     .clkr.hw.init = &(struct clk_init_data) {
0273         .name = "apc0_droop_detector_clk_src",
0274         .parent_data = gcc_apc_droop_detector_data,
0275         .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
0276         .ops = &clk_rcg2_ops,
0277     }
0278 };
0279 static struct clk_rcg2 apc1_droop_detector_clk_src = {
0280     .cmd_rcgr = 0x79008,
0281     .hid_width = 5,
0282     .freq_tbl = ftbl_apc_droop_detector_clk_src,
0283     .parent_map = gcc_apc_droop_detector_map,
0284     .clkr.hw.init = &(struct clk_init_data) {
0285         .name = "apc1_droop_detector_clk_src",
0286         .parent_data = gcc_apc_droop_detector_data,
0287         .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
0288         .ops = &clk_rcg2_ops,
0289     }
0290 };
0291 
0292 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
0293     F(19200000, P_XO, 1, 0, 0),
0294     F(25000000, P_GPLL0_DIV2, 16, 0, 0),
0295     F(50000000, P_GPLL0, 16, 0, 0),
0296     F(100000000, P_GPLL0, 8, 0, 0),
0297     F(133330000, P_GPLL0, 6, 0, 0),
0298     { }
0299 };
0300 
0301 static struct clk_rcg2 apss_ahb_clk_src = {
0302     .cmd_rcgr = 0x46000,
0303     .hid_width = 5,
0304     .freq_tbl = ftbl_apss_ahb_clk_src,
0305     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0306     .clkr.hw.init = &(struct clk_init_data) {
0307         .name = "apss_ahb_clk_src",
0308         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0309         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0310         .ops = &clk_rcg2_ops,
0311     }
0312 };
0313 
0314 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
0315     F(19200000, P_XO, 1, 0, 0),
0316     F(25000000, P_GPLL0_DIV2, 16, 0, 0),
0317     F(50000000, P_GPLL0, 16, 0, 0),
0318     { }
0319 };
0320 
0321 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
0322     .cmd_rcgr = 0x0200c,
0323     .hid_width = 5,
0324     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0325     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0326     .clkr.hw.init = &(struct clk_init_data) {
0327         .name = "blsp1_qup1_i2c_apps_clk_src",
0328         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0329         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0330         .ops = &clk_rcg2_ops,
0331     }
0332 };
0333 
0334 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
0335     .cmd_rcgr = 0x03000,
0336     .hid_width = 5,
0337     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0338     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0339     .clkr.hw.init = &(struct clk_init_data) {
0340         .name = "blsp1_qup2_i2c_apps_clk_src",
0341         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0342         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0343         .ops = &clk_rcg2_ops,
0344     }
0345 };
0346 
0347 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
0348     .cmd_rcgr = 0x04000,
0349     .hid_width = 5,
0350     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0351     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0352     .clkr.hw.init = &(struct clk_init_data) {
0353         .name = "blsp1_qup3_i2c_apps_clk_src",
0354         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0355         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0356         .ops = &clk_rcg2_ops,
0357     }
0358 };
0359 
0360 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
0361     .cmd_rcgr = 0x05000,
0362     .hid_width = 5,
0363     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0364     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0365     .clkr.hw.init = &(struct clk_init_data) {
0366         .name = "blsp1_qup4_i2c_apps_clk_src",
0367         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0368         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0369         .ops = &clk_rcg2_ops,
0370     }
0371 };
0372 
0373 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
0374     .cmd_rcgr = 0x0c00c,
0375     .hid_width = 5,
0376     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0377     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0378     .clkr.hw.init = &(struct clk_init_data) {
0379         .name = "blsp2_qup1_i2c_apps_clk_src",
0380         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0381         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0382         .ops = &clk_rcg2_ops,
0383     }
0384 };
0385 
0386 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
0387     .cmd_rcgr = 0x0d000,
0388     .hid_width = 5,
0389     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0390     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0391     .clkr.hw.init = &(struct clk_init_data) {
0392         .name = "blsp2_qup2_i2c_apps_clk_src",
0393         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0394         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0395         .ops = &clk_rcg2_ops,
0396     }
0397 };
0398 
0399 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
0400     .cmd_rcgr = 0x0f000,
0401     .hid_width = 5,
0402     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0403     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0404     .clkr.hw.init = &(struct clk_init_data) {
0405         .name = "blsp2_qup3_i2c_apps_clk_src",
0406         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0407         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0408         .ops = &clk_rcg2_ops,
0409     }
0410 };
0411 
0412 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
0413     .cmd_rcgr = 0x18000,
0414     .hid_width = 5,
0415     .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
0416     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0417     .clkr.hw.init = &(struct clk_init_data) {
0418         .name = "blsp2_qup4_i2c_apps_clk_src",
0419         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0420         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0421         .ops = &clk_rcg2_ops,
0422     }
0423 };
0424 
0425 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
0426     F(960000, P_XO, 10, 1, 2),
0427     F(4800000, P_XO, 4, 0, 0),
0428     F(9600000, P_XO, 2, 0, 0),
0429     F(12500000, P_GPLL0_DIV2, 16, 1, 2),
0430     F(16000000, P_GPLL0, 10, 1, 5),
0431     F(19200000, P_XO, 1, 0, 0),
0432     F(25000000, P_GPLL0, 16, 1, 2),
0433     F(50000000, P_GPLL0, 16, 0, 0),
0434     { }
0435 };
0436 
0437 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
0438     .cmd_rcgr = 0x02024,
0439     .hid_width = 5,
0440     .mnd_width = 8,
0441     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0442     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0443     .clkr.hw.init = &(struct clk_init_data) {
0444         .name = "blsp1_qup1_spi_apps_clk_src",
0445         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0446         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0447         .ops = &clk_rcg2_ops,
0448     }
0449 };
0450 
0451 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
0452     .cmd_rcgr = 0x03014,
0453     .hid_width = 5,
0454     .mnd_width = 8,
0455     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0456     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0457     .clkr.hw.init = &(struct clk_init_data) {
0458         .name = "blsp1_qup2_spi_apps_clk_src",
0459         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0460         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0461         .ops = &clk_rcg2_ops,
0462     }
0463 };
0464 
0465 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
0466     .cmd_rcgr = 0x04024,
0467     .hid_width = 5,
0468     .mnd_width = 8,
0469     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0470     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0471     .clkr.hw.init = &(struct clk_init_data) {
0472         .name = "blsp1_qup3_spi_apps_clk_src",
0473         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0474         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0475         .ops = &clk_rcg2_ops,
0476     }
0477 };
0478 
0479 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
0480     .cmd_rcgr = 0x05024,
0481     .hid_width = 5,
0482     .mnd_width = 8,
0483     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0484     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0485     .clkr.hw.init = &(struct clk_init_data) {
0486         .name = "blsp1_qup4_spi_apps_clk_src",
0487         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0488         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0489         .ops = &clk_rcg2_ops,
0490     }
0491 };
0492 
0493 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
0494     .cmd_rcgr = 0x0c024,
0495     .hid_width = 5,
0496     .mnd_width = 8,
0497     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0498     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0499     .clkr.hw.init = &(struct clk_init_data) {
0500         .name = "blsp2_qup1_spi_apps_clk_src",
0501         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0502         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0503         .ops = &clk_rcg2_ops,
0504     }
0505 };
0506 
0507 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
0508     .cmd_rcgr = 0x0d014,
0509     .hid_width = 5,
0510     .mnd_width = 8,
0511     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0512     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0513     .clkr.hw.init = &(struct clk_init_data) {
0514         .name = "blsp2_qup2_spi_apps_clk_src",
0515         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0516         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0517         .ops = &clk_rcg2_ops,
0518     }
0519 };
0520 
0521 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
0522     .cmd_rcgr = 0x0f024,
0523     .hid_width = 5,
0524     .mnd_width = 8,
0525     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0526     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0527     .clkr.hw.init = &(struct clk_init_data) {
0528         .name = "blsp2_qup3_spi_apps_clk_src",
0529         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0530         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0531         .ops = &clk_rcg2_ops,
0532     }
0533 };
0534 
0535 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
0536     .cmd_rcgr = 0x18024,
0537     .hid_width = 5,
0538     .mnd_width = 8,
0539     .freq_tbl = ftbl_blsp_spi_apps_clk_src,
0540     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0541     .clkr.hw.init = &(struct clk_init_data) {
0542         .name = "blsp2_qup4_spi_apps_clk_src",
0543         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0544         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0545         .ops = &clk_rcg2_ops,
0546     }
0547 };
0548 
0549 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
0550     F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
0551     F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
0552     F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
0553     F(16000000, P_GPLL0_DIV2, 5, 1, 5),
0554     F(19200000, P_XO, 1, 0, 0),
0555     F(24000000, P_GPLL0, 1, 3, 100),
0556     F(25000000, P_GPLL0, 16, 1, 2),
0557     F(32000000, P_GPLL0, 1, 1, 25),
0558     F(40000000, P_GPLL0, 1, 1, 20),
0559     F(46400000, P_GPLL0, 1, 29, 500),
0560     F(48000000, P_GPLL0, 1, 3, 50),
0561     F(51200000, P_GPLL0, 1, 8, 125),
0562     F(56000000, P_GPLL0, 1, 7, 100),
0563     F(58982400, P_GPLL0, 1, 1152, 15625),
0564     F(60000000, P_GPLL0, 1, 3, 40),
0565     F(64000000, P_GPLL0, 1, 2, 25),
0566     { }
0567 };
0568 
0569 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
0570     .cmd_rcgr = 0x02044,
0571     .hid_width = 5,
0572     .mnd_width = 16,
0573     .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0574     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0575     .clkr.hw.init = &(struct clk_init_data) {
0576         .name = "blsp1_uart1_apps_clk_src",
0577         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0578         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0579         .ops = &clk_rcg2_ops,
0580     }
0581 };
0582 
0583 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
0584     .cmd_rcgr = 0x03034,
0585     .hid_width = 5,
0586     .mnd_width = 16,
0587     .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0588     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0589     .clkr.hw.init = &(struct clk_init_data) {
0590         .name = "blsp1_uart2_apps_clk_src",
0591         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0592         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0593         .ops = &clk_rcg2_ops,
0594     }
0595 };
0596 
0597 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
0598     .cmd_rcgr = 0x0c044,
0599     .hid_width = 5,
0600     .mnd_width = 16,
0601     .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0602     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0603     .clkr.hw.init = &(struct clk_init_data) {
0604         .name = "blsp2_uart1_apps_clk_src",
0605         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0606         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0607         .ops = &clk_rcg2_ops,
0608     }
0609 };
0610 
0611 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
0612     .cmd_rcgr = 0x0d034,
0613     .hid_width = 5,
0614     .mnd_width = 16,
0615     .freq_tbl = ftbl_blsp_uart_apps_clk_src,
0616     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0617     .clkr.hw.init = &(struct clk_init_data) {
0618         .name = "blsp2_uart2_apps_clk_src",
0619         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0620         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0621         .ops = &clk_rcg2_ops,
0622     }
0623 };
0624 
0625 static const struct parent_map gcc_byte0_map[] = {
0626     { P_XO, 0 },
0627     { P_DSI0PLL_BYTE, 1 },
0628     { P_DSI1PLL_BYTE, 3 },
0629 };
0630 
0631 static const struct parent_map gcc_byte1_map[] = {
0632     { P_XO, 0 },
0633     { P_DSI0PLL_BYTE, 3 },
0634     { P_DSI1PLL_BYTE, 1 },
0635 };
0636 
0637 static const struct clk_parent_data gcc_byte_data[] = {
0638     { .fw_name = "xo" },
0639     { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
0640     { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },
0641 };
0642 
0643 static struct clk_rcg2 byte0_clk_src = {
0644     .cmd_rcgr = 0x4d044,
0645     .hid_width = 5,
0646     .parent_map = gcc_byte0_map,
0647     .clkr.hw.init = &(struct clk_init_data) {
0648         .name = "byte0_clk_src",
0649         .parent_data = gcc_byte_data,
0650         .num_parents = ARRAY_SIZE(gcc_byte_data),
0651         .ops = &clk_byte2_ops,
0652         .flags = CLK_SET_RATE_PARENT,
0653     }
0654 };
0655 
0656 static struct clk_rcg2 byte1_clk_src = {
0657     .cmd_rcgr = 0x4d0b0,
0658     .hid_width = 5,
0659     .parent_map = gcc_byte1_map,
0660     .clkr.hw.init = &(struct clk_init_data) {
0661         .name = "byte1_clk_src",
0662         .parent_data = gcc_byte_data,
0663         .num_parents = ARRAY_SIZE(gcc_byte_data),
0664         .ops = &clk_byte2_ops,
0665         .flags = CLK_SET_RATE_PARENT,
0666     }
0667 };
0668 
0669 static const struct parent_map gcc_gp_map[] = {
0670     { P_XO, 0 },
0671     { P_GPLL0, 1 },
0672     { P_GPLL6, 2 },
0673     { P_GPLL0_DIV2, 4 },
0674     { P_SLEEP_CLK, 6 },
0675 };
0676 
0677 static const struct clk_parent_data gcc_gp_data[] = {
0678     { .fw_name = "xo" },
0679     { .hw = &gpll0.clkr.hw },
0680     { .hw = &gpll6.clkr.hw },
0681     { .hw = &gpll0_early_div.hw },
0682     { .fw_name = "sleep", .name = "sleep" },
0683 };
0684 
0685 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
0686     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
0687     F(100000000, P_GPLL0, 8, 0, 0),
0688     F(200000000, P_GPLL0, 4, 0, 0),
0689     F(266670000, P_GPLL0, 3, 0, 0),
0690     { }
0691 };
0692 
0693 static struct clk_rcg2 camss_gp0_clk_src = {
0694     .cmd_rcgr = 0x54000,
0695     .hid_width = 5,
0696     .mnd_width = 8,
0697     .freq_tbl = ftbl_camss_gp_clk_src,
0698     .parent_map = gcc_gp_map,
0699     .clkr.hw.init = &(struct clk_init_data) {
0700         .name = "camss_gp0_clk_src",
0701         .parent_data = gcc_gp_data,
0702         .num_parents = ARRAY_SIZE(gcc_gp_data),
0703         .ops = &clk_rcg2_ops,
0704     }
0705 };
0706 
0707 static struct clk_rcg2 camss_gp1_clk_src = {
0708     .cmd_rcgr = 0x55000,
0709     .hid_width = 5,
0710     .mnd_width = 8,
0711     .freq_tbl = ftbl_camss_gp_clk_src,
0712     .parent_map = gcc_gp_map,
0713     .clkr.hw.init = &(struct clk_init_data) {
0714         .name = "camss_gp1_clk_src",
0715         .parent_data = gcc_gp_data,
0716         .num_parents = ARRAY_SIZE(gcc_gp_data),
0717         .ops = &clk_rcg2_ops,
0718     }
0719 };
0720 
0721 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
0722     F(40000000, P_GPLL0_DIV2, 10, 0, 0),
0723     F(80000000, P_GPLL0, 10, 0, 0),
0724     { }
0725 };
0726 
0727 static struct clk_rcg2 camss_top_ahb_clk_src = {
0728     .cmd_rcgr = 0x5a000,
0729     .hid_width = 5,
0730     .freq_tbl = ftbl_camss_top_ahb_clk_src,
0731     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0732     .clkr.hw.init = &(struct clk_init_data) {
0733         .name = "camss_top_ahb_clk_src",
0734         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0735         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0736         .ops = &clk_rcg2_ops,
0737     }
0738 };
0739 
0740 static const struct parent_map gcc_cci_map[] = {
0741     { P_XO, 0 },
0742     { P_GPLL0, 2 },
0743     { P_GPLL0_DIV2, 3 },
0744     { P_SLEEP_CLK, 6 },
0745 };
0746 
0747 static const struct clk_parent_data gcc_cci_data[] = {
0748     { .fw_name = "xo" },
0749     { .hw = &gpll0.clkr.hw },
0750     { .hw = &gpll0_early_div.hw },
0751     { .fw_name = "sleep", .name = "sleep" },
0752 };
0753 
0754 static const struct freq_tbl ftbl_cci_clk_src[] = {
0755     F(19200000, P_XO, 1, 0, 0),
0756     F(37500000, P_GPLL0_DIV2, 1, 3, 32),
0757     { }
0758 };
0759 
0760 static struct clk_rcg2 cci_clk_src = {
0761     .cmd_rcgr = 0x51000,
0762     .hid_width = 5,
0763     .mnd_width = 8,
0764     .freq_tbl = ftbl_cci_clk_src,
0765     .parent_map = gcc_cci_map,
0766     .clkr.hw.init = &(struct clk_init_data) {
0767         .name = "cci_clk_src",
0768         .parent_data = gcc_cci_data,
0769         .num_parents = ARRAY_SIZE(gcc_cci_data),
0770         .ops = &clk_rcg2_ops,
0771     }
0772 };
0773 
0774 static const struct parent_map gcc_cpp_map[] = {
0775     { P_XO, 0 },
0776     { P_GPLL0, 1 },
0777     { P_GPLL6, 3 },
0778     { P_GPLL2, 4 },
0779     { P_GPLL0_DIV2, 5 },
0780 };
0781 
0782 static const struct clk_parent_data gcc_cpp_data[] = {
0783     { .fw_name = "xo" },
0784     { .hw = &gpll0.clkr.hw },
0785     { .hw = &gpll6.clkr.hw },
0786     { .hw = &gpll2.clkr.hw },
0787     { .hw = &gpll0_early_div.hw },
0788 };
0789 
0790 static const struct freq_tbl ftbl_cpp_clk_src[] = {
0791     F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0792     F(200000000, P_GPLL0, 4, 0, 0),
0793     F(266670000, P_GPLL0, 3, 0, 0),
0794     F(320000000, P_GPLL0, 2.5, 0, 0),
0795     F(400000000, P_GPLL0, 2, 0, 0),
0796     F(465000000, P_GPLL2, 2, 0, 0),
0797     { }
0798 };
0799 
0800 static struct clk_rcg2 cpp_clk_src = {
0801     .cmd_rcgr = 0x58018,
0802     .hid_width = 5,
0803     .freq_tbl = ftbl_cpp_clk_src,
0804     .parent_map = gcc_cpp_map,
0805     .clkr.hw.init = &(struct clk_init_data) {
0806         .name = "cpp_clk_src",
0807         .parent_data = gcc_cpp_data,
0808         .num_parents = ARRAY_SIZE(gcc_cpp_data),
0809         .ops = &clk_rcg2_ops,
0810     }
0811 };
0812 
0813 static const struct freq_tbl ftbl_crypto_clk_src[] = {
0814     F(40000000, P_GPLL0_DIV2, 10, 0, 0),
0815     F(80000000, P_GPLL0, 10, 0, 0),
0816     F(100000000, P_GPLL0, 8, 0, 0),
0817     F(160000000, P_GPLL0, 5, 0, 0),
0818     { }
0819 };
0820 
0821 static struct clk_rcg2 crypto_clk_src = {
0822     .cmd_rcgr = 0x16004,
0823     .hid_width = 5,
0824     .freq_tbl = ftbl_crypto_clk_src,
0825     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
0826     .clkr.hw.init = &(struct clk_init_data) {
0827         .name = "crypto_clk_src",
0828         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0829         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0830         .ops = &clk_rcg2_ops,
0831     }
0832 };
0833 
0834 static const struct parent_map gcc_csi0_map[] = {
0835     { P_XO, 0 },
0836     { P_GPLL0, 1 },
0837     { P_GPLL2, 4 },
0838     { P_GPLL0_DIV2, 5 },
0839 };
0840 
0841 static const struct parent_map gcc_csi12_map[] = {
0842     { P_XO, 0 },
0843     { P_GPLL0, 1 },
0844     { P_GPLL2, 5 },
0845     { P_GPLL0_DIV2, 4 },
0846 };
0847 
0848 static const struct clk_parent_data gcc_csi_data[] = {
0849     { .fw_name = "xo" },
0850     { .hw = &gpll0.clkr.hw },
0851     { .hw = &gpll2.clkr.hw },
0852     { .hw = &gpll0_early_div.hw },
0853 };
0854 
0855 static const struct freq_tbl ftbl_csi_clk_src[] = {
0856     F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0857     F(200000000, P_GPLL0, 4, 0, 0),
0858     F(310000000, P_GPLL2, 3, 0, 0),
0859     F(400000000, P_GPLL0, 2, 0, 0),
0860     F(465000000, P_GPLL2, 2, 0, 0),
0861     { }
0862 };
0863 
0864 static struct clk_rcg2 csi0_clk_src = {
0865     .cmd_rcgr = 0x4e020,
0866     .hid_width = 5,
0867     .freq_tbl = ftbl_csi_clk_src,
0868     .parent_map = gcc_csi0_map,
0869     .clkr.hw.init = &(struct clk_init_data) {
0870         .name = "csi0_clk_src",
0871         .parent_data = gcc_csi_data,
0872         .num_parents = ARRAY_SIZE(gcc_csi_data),
0873         .ops = &clk_rcg2_ops,
0874     }
0875 };
0876 
0877 static struct clk_rcg2 csi1_clk_src = {
0878     .cmd_rcgr = 0x4f020,
0879     .hid_width = 5,
0880     .freq_tbl = ftbl_csi_clk_src,
0881     .parent_map = gcc_csi12_map,
0882     .clkr.hw.init = &(struct clk_init_data) {
0883         .name = "csi1_clk_src",
0884         .parent_data = gcc_csi_data,
0885         .num_parents = ARRAY_SIZE(gcc_csi_data),
0886         .ops = &clk_rcg2_ops,
0887     }
0888 };
0889 
0890 static struct clk_rcg2 csi2_clk_src = {
0891     .cmd_rcgr = 0x3c020,
0892     .hid_width = 5,
0893     .freq_tbl = ftbl_csi_clk_src,
0894     .parent_map = gcc_csi12_map,
0895     .clkr.hw.init = &(struct clk_init_data) {
0896         .name = "csi2_clk_src",
0897         .parent_data = gcc_csi_data,
0898         .num_parents = ARRAY_SIZE(gcc_csi_data),
0899         .ops = &clk_rcg2_ops,
0900     }
0901 };
0902 
0903 static const struct parent_map gcc_csip_map[] = {
0904     { P_XO, 0 },
0905     { P_GPLL0, 1 },
0906     { P_GPLL4, 3 },
0907     { P_GPLL2, 4 },
0908     { P_GPLL0_DIV2, 5 },
0909 };
0910 
0911 static const struct clk_parent_data gcc_csip_data[] = {
0912     { .fw_name = "xo" },
0913     { .hw = &gpll0.clkr.hw },
0914     { .hw = &gpll4.clkr.hw },
0915     { .hw = &gpll2.clkr.hw },
0916     { .hw = &gpll0_early_div.hw },
0917 };
0918 
0919 static const struct freq_tbl ftbl_csi_p_clk_src[] = {
0920     F(66670000, P_GPLL0_DIV2, 6, 0, 0),
0921     F(133330000, P_GPLL0, 6, 0, 0),
0922     F(200000000, P_GPLL0, 4, 0, 0),
0923     F(266670000, P_GPLL0, 3, 0, 0),
0924     F(310000000, P_GPLL2, 3, 0, 0),
0925     { }
0926 };
0927 
0928 static struct clk_rcg2 csi0p_clk_src = {
0929     .cmd_rcgr = 0x58084,
0930     .hid_width = 5,
0931     .freq_tbl = ftbl_csi_p_clk_src,
0932     .parent_map = gcc_csip_map,
0933     .clkr.hw.init = &(struct clk_init_data) {
0934         .name = "csi0p_clk_src",
0935         .parent_data = gcc_csip_data,
0936         .num_parents = ARRAY_SIZE(gcc_csip_data),
0937         .ops = &clk_rcg2_ops,
0938     }
0939 };
0940 
0941 static struct clk_rcg2 csi1p_clk_src = {
0942     .cmd_rcgr = 0x58094,
0943     .hid_width = 5,
0944     .freq_tbl = ftbl_csi_p_clk_src,
0945     .parent_map = gcc_csip_map,
0946     .clkr.hw.init = &(struct clk_init_data) {
0947         .name = "csi1p_clk_src",
0948         .parent_data = gcc_csip_data,
0949         .num_parents = ARRAY_SIZE(gcc_csip_data),
0950         .ops = &clk_rcg2_ops,
0951     }
0952 };
0953 
0954 static struct clk_rcg2 csi2p_clk_src = {
0955     .cmd_rcgr = 0x580a4,
0956     .hid_width = 5,
0957     .freq_tbl = ftbl_csi_p_clk_src,
0958     .parent_map = gcc_csip_map,
0959     .clkr.hw.init = &(struct clk_init_data) {
0960         .name = "csi2p_clk_src",
0961         .parent_data = gcc_csip_data,
0962         .num_parents = ARRAY_SIZE(gcc_csip_data),
0963         .ops = &clk_rcg2_ops,
0964     }
0965 };
0966 
0967 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
0968     F(100000000, P_GPLL0_DIV2, 4, 0, 0),
0969     F(200000000, P_GPLL0, 4, 0, 0),
0970     F(266670000, P_GPLL0, 3, 0, 0),
0971     { }
0972 };
0973 
0974 static struct clk_rcg2 csi0phytimer_clk_src = {
0975     .cmd_rcgr = 0x4e000,
0976     .hid_width = 5,
0977     .freq_tbl = ftbl_csi_phytimer_clk_src,
0978     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0979     .clkr.hw.init = &(struct clk_init_data) {
0980         .name = "csi0phytimer_clk_src",
0981         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0982         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0983         .ops = &clk_rcg2_ops,
0984     }
0985 };
0986 
0987 static struct clk_rcg2 csi1phytimer_clk_src = {
0988     .cmd_rcgr = 0x4f000,
0989     .hid_width = 5,
0990     .freq_tbl = ftbl_csi_phytimer_clk_src,
0991     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
0992     .clkr.hw.init = &(struct clk_init_data) {
0993         .name = "csi1phytimer_clk_src",
0994         .parent_data = gcc_xo_gpll0_gpll0div2_data,
0995         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
0996         .ops = &clk_rcg2_ops,
0997     }
0998 };
0999 
1000 static struct clk_rcg2 csi2phytimer_clk_src = {
1001     .cmd_rcgr = 0x4f05c,
1002     .hid_width = 5,
1003     .freq_tbl = ftbl_csi_phytimer_clk_src,
1004     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1005     .clkr.hw.init = &(struct clk_init_data) {
1006         .name = "csi2phytimer_clk_src",
1007         .parent_data = gcc_xo_gpll0_gpll0div2_data,
1008         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1009         .ops = &clk_rcg2_ops,
1010     }
1011 };
1012 
1013 static const struct parent_map gcc_esc_map[] = {
1014     { P_XO, 0 },
1015     { P_GPLL0, 3 },
1016 };
1017 
1018 static const struct clk_parent_data gcc_esc_vsync_data[] = {
1019     { .fw_name = "xo" },
1020     { .hw = &gpll0.clkr.hw },
1021 };
1022 
1023 static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
1024     F(19200000, P_XO, 1, 0, 0),
1025     { }
1026 };
1027 
1028 static struct clk_rcg2 esc0_clk_src = {
1029     .cmd_rcgr = 0x4d05c,
1030     .hid_width = 5,
1031     .freq_tbl = ftbl_esc0_1_clk_src,
1032     .parent_map = gcc_esc_map,
1033     .clkr.hw.init = &(struct clk_init_data) {
1034         .name = "esc0_clk_src",
1035         .parent_data = gcc_esc_vsync_data,
1036         .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1037         .ops = &clk_rcg2_ops,
1038     }
1039 };
1040 
1041 static struct clk_rcg2 esc1_clk_src = {
1042     .cmd_rcgr = 0x4d0a8,
1043     .hid_width = 5,
1044     .freq_tbl = ftbl_esc0_1_clk_src,
1045     .parent_map = gcc_esc_map,
1046     .clkr.hw.init = &(struct clk_init_data) {
1047         .name = "esc1_clk_src",
1048         .parent_data = gcc_esc_vsync_data,
1049         .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1050         .ops = &clk_rcg2_ops,
1051     }
1052 };
1053 
1054 static const struct parent_map gcc_gfx3d_map[] = {
1055     { P_XO, 0 },
1056     { P_GPLL0, 1 },
1057     { P_GPLL3, 2 },
1058     { P_GPLL6, 3 },
1059     { P_GPLL4, 4 },
1060     { P_GPLL0_DIV2, 5 },
1061     { P_GPLL6_DIV2, 6 },
1062 };
1063 
1064 static const struct clk_parent_data gcc_gfx3d_data[] = {
1065     { .fw_name = "xo" },
1066     { .hw = &gpll0.clkr.hw },
1067     { .hw = &gpll3.clkr.hw },
1068     { .hw = &gpll6.clkr.hw },
1069     { .hw = &gpll4.clkr.hw },
1070     { .hw = &gpll0_early_div.hw },
1071     { .hw = &gpll6_early_div.hw },
1072 };
1073 
1074 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
1075     F(19200000, P_XO, 1, 0, 0),
1076     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1077     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1078     F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1079     F(133330000, P_GPLL0_DIV2, 3, 0, 0),
1080     F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1081     F(200000000, P_GPLL0_DIV2, 2, 0, 0),
1082     F(266670000, P_GPLL0, 3.0, 0, 0),
1083     F(320000000, P_GPLL0, 2.5, 0, 0),
1084     F(400000000, P_GPLL0, 2, 0, 0),
1085     F(460800000, P_GPLL4, 2.5, 0, 0),
1086     F(510000000, P_GPLL3, 2, 0, 0),
1087     F(560000000, P_GPLL3, 2, 0, 0),
1088     F(600000000, P_GPLL3, 2, 0, 0),
1089     F(650000000, P_GPLL3, 2, 0, 0),
1090     F(685000000, P_GPLL3, 2, 0, 0),
1091     F(725000000, P_GPLL3, 2, 0, 0),
1092     { }
1093 };
1094 
1095 static struct clk_rcg2 gfx3d_clk_src = {
1096     .cmd_rcgr = 0x59000,
1097     .hid_width = 5,
1098     .freq_tbl = ftbl_gfx3d_clk_src,
1099     .parent_map = gcc_gfx3d_map,
1100     .clkr.hw.init = &(struct clk_init_data) {
1101         .name = "gfx3d_clk_src",
1102         .parent_data = gcc_gfx3d_data,
1103         .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
1104         .ops = &clk_rcg2_floor_ops,
1105         .flags = CLK_SET_RATE_PARENT,
1106     }
1107 };
1108 
1109 static const struct freq_tbl ftbl_gp_clk_src[] = {
1110     F(19200000, P_XO, 1, 0, 0),
1111     { }
1112 };
1113 
1114 static struct clk_rcg2 gp1_clk_src = {
1115     .cmd_rcgr = 0x08004,
1116     .hid_width = 5,
1117     .mnd_width = 8,
1118     .freq_tbl = ftbl_gp_clk_src,
1119     .parent_map = gcc_gp_map,
1120     .clkr.hw.init = &(struct clk_init_data) {
1121         .name = "gp1_clk_src",
1122         .parent_data = gcc_gp_data,
1123         .num_parents = ARRAY_SIZE(gcc_gp_data),
1124         .ops = &clk_rcg2_ops,
1125     }
1126 };
1127 
1128 static struct clk_rcg2 gp2_clk_src = {
1129     .cmd_rcgr = 0x09004,
1130     .hid_width = 5,
1131     .mnd_width = 8,
1132     .freq_tbl = ftbl_gp_clk_src,
1133     .parent_map = gcc_gp_map,
1134     .clkr.hw.init = &(struct clk_init_data) {
1135         .name = "gp2_clk_src",
1136         .parent_data = gcc_gp_data,
1137         .num_parents = ARRAY_SIZE(gcc_gp_data),
1138         .ops = &clk_rcg2_ops,
1139     }
1140 };
1141 
1142 static struct clk_rcg2 gp3_clk_src = {
1143     .cmd_rcgr = 0x0a004,
1144     .hid_width = 5,
1145     .mnd_width = 8,
1146     .freq_tbl = ftbl_gp_clk_src,
1147     .parent_map = gcc_gp_map,
1148     .clkr.hw.init = &(struct clk_init_data) {
1149         .name = "gp3_clk_src",
1150         .parent_data = gcc_gp_data,
1151         .num_parents = ARRAY_SIZE(gcc_gp_data),
1152         .ops = &clk_rcg2_ops,
1153     }
1154 };
1155 
1156 static const struct parent_map gcc_jpeg0_map[] = {
1157     { P_XO, 0 },
1158     { P_GPLL0, 1 },
1159     { P_GPLL6, 2 },
1160     { P_GPLL0_DIV2, 4 },
1161     { P_GPLL2, 5 },
1162 };
1163 
1164 static const struct clk_parent_data gcc_jpeg0_data[] = {
1165     { .fw_name = "xo" },
1166     { .hw = &gpll0.clkr.hw },
1167     { .hw = &gpll6.clkr.hw },
1168     { .hw = &gpll0_early_div.hw },
1169     { .hw = &gpll2.clkr.hw },
1170 };
1171 
1172 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1173     F(66670000, P_GPLL0_DIV2, 6, 0, 0),
1174     F(133330000, P_GPLL0, 6, 0, 0),
1175     F(200000000, P_GPLL0, 4, 0, 0),
1176     F(266670000, P_GPLL0, 3, 0, 0),
1177     F(310000000, P_GPLL2, 3, 0, 0),
1178     F(320000000, P_GPLL0, 2.5, 0, 0),
1179     { }
1180 };
1181 
1182 static struct clk_rcg2 jpeg0_clk_src = {
1183     .cmd_rcgr = 0x57000,
1184     .hid_width = 5,
1185     .freq_tbl = ftbl_jpeg0_clk_src,
1186     .parent_map = gcc_jpeg0_map,
1187     .clkr.hw.init = &(struct clk_init_data) {
1188         .name = "jpeg0_clk_src",
1189         .parent_data = gcc_jpeg0_data,
1190         .num_parents = ARRAY_SIZE(gcc_jpeg0_data),
1191         .ops = &clk_rcg2_ops,
1192     }
1193 };
1194 
1195 static const struct parent_map gcc_mclk_map[] = {
1196     { P_XO, 0 },
1197     { P_GPLL0, 1 },
1198     { P_GPLL6, 2 },
1199     { P_GPLL0_DIV2, 4 },
1200     { P_GPLL6_DIV2, 5 },
1201     { P_SLEEP_CLK, 6 },
1202 };
1203 
1204 static const struct clk_parent_data gcc_mclk_data[] = {
1205     { .fw_name = "xo" },
1206     { .hw = &gpll0.clkr.hw },
1207     { .hw = &gpll6.clkr.hw },
1208     { .hw = &gpll0_early_div.hw },
1209     { .hw = &gpll6_early_div.hw },
1210     { .fw_name = "sleep", .name = "sleep" },
1211 };
1212 
1213 static const struct freq_tbl ftbl_mclk_clk_src[] = {
1214     F(19200000, P_GPLL6, 5, 4, 45),
1215     F(24000000, P_GPLL6_DIV2, 1, 2, 45),
1216     F(26000000, P_GPLL0, 1, 4, 123),
1217     F(33330000, P_GPLL0_DIV2, 12, 0, 0),
1218     F(36610000, P_GPLL6, 1, 2, 59),
1219     F(66667000, P_GPLL0, 12, 0, 0),
1220     { }
1221 };
1222 
1223 static struct clk_rcg2 mclk0_clk_src = {
1224     .cmd_rcgr = 0x52000,
1225     .hid_width = 5,
1226     .mnd_width = 8,
1227     .freq_tbl = ftbl_mclk_clk_src,
1228     .parent_map = gcc_mclk_map,
1229     .clkr.hw.init = &(struct clk_init_data) {
1230         .name = "mclk0_clk_src",
1231         .parent_data = gcc_mclk_data,
1232         .num_parents = ARRAY_SIZE(gcc_mclk_data),
1233         .ops = &clk_rcg2_ops,
1234     }
1235 };
1236 
1237 static struct clk_rcg2 mclk1_clk_src = {
1238     .cmd_rcgr = 0x53000,
1239     .hid_width = 5,
1240     .mnd_width = 8,
1241     .freq_tbl = ftbl_mclk_clk_src,
1242     .parent_map = gcc_mclk_map,
1243     .clkr.hw.init = &(struct clk_init_data) {
1244         .name = "mclk1_clk_src",
1245         .parent_data = gcc_mclk_data,
1246         .num_parents = ARRAY_SIZE(gcc_mclk_data),
1247         .ops = &clk_rcg2_ops,
1248     }
1249 };
1250 
1251 static struct clk_rcg2 mclk2_clk_src = {
1252     .cmd_rcgr = 0x5c000,
1253     .hid_width = 5,
1254     .mnd_width = 8,
1255     .freq_tbl = ftbl_mclk_clk_src,
1256     .parent_map = gcc_mclk_map,
1257     .clkr.hw.init = &(struct clk_init_data) {
1258         .name = "mclk2_clk_src",
1259         .parent_data = gcc_mclk_data,
1260         .num_parents = ARRAY_SIZE(gcc_mclk_data),
1261         .ops = &clk_rcg2_ops,
1262     }
1263 };
1264 
1265 static struct clk_rcg2 mclk3_clk_src = {
1266     .cmd_rcgr = 0x5e000,
1267     .hid_width = 5,
1268     .mnd_width = 8,
1269     .freq_tbl = ftbl_mclk_clk_src,
1270     .parent_map = gcc_mclk_map,
1271     .clkr.hw.init = &(struct clk_init_data) {
1272         .name = "mclk3_clk_src",
1273         .parent_data = gcc_mclk_data,
1274         .num_parents = ARRAY_SIZE(gcc_mclk_data),
1275         .ops = &clk_rcg2_ops,
1276     }
1277 };
1278 
1279 static const struct parent_map gcc_mdp_map[] = {
1280     { P_XO, 0 },
1281     { P_GPLL0, 1 },
1282     { P_GPLL6, 3 },
1283     { P_GPLL0_DIV2, 4 },
1284 };
1285 
1286 static const struct clk_parent_data gcc_mdp_data[] = {
1287     { .fw_name = "xo" },
1288     { .hw = &gpll0.clkr.hw },
1289     { .hw = &gpll6.clkr.hw },
1290     { .hw = &gpll0_early_div.hw },
1291 };
1292 
1293 static const struct freq_tbl ftbl_mdp_clk_src[] = {
1294     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1295     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1296     F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1297     F(200000000, P_GPLL0, 4, 0, 0),
1298     F(266670000, P_GPLL0, 3, 0, 0),
1299     F(320000000, P_GPLL0, 2.5, 0, 0),
1300     F(400000000, P_GPLL0, 2, 0, 0),
1301     { }
1302 };
1303 
1304 static struct clk_rcg2 mdp_clk_src = {
1305     .cmd_rcgr = 0x4d014,
1306     .hid_width = 5,
1307     .freq_tbl = ftbl_mdp_clk_src,
1308     .parent_map = gcc_mdp_map,
1309     .clkr.hw.init = &(struct clk_init_data) {
1310         .name = "mdp_clk_src",
1311         .parent_data = gcc_mdp_data,
1312         .num_parents = ARRAY_SIZE(gcc_mdp_data),
1313         .ops = &clk_rcg2_ops,
1314     }
1315 };
1316 
1317 static const struct parent_map gcc_pclk0_map[] = {
1318     { P_XO, 0 },
1319     { P_DSI0PLL, 1 },
1320     { P_DSI1PLL, 3 },
1321 };
1322 
1323 static const struct parent_map gcc_pclk1_map[] = {
1324     { P_XO, 0 },
1325     { P_DSI0PLL, 3 },
1326     { P_DSI1PLL, 1 },
1327 };
1328 
1329 static const struct clk_parent_data gcc_pclk_data[] = {
1330     { .fw_name = "xo" },
1331     { .fw_name = "dsi0pll", .name = "dsi0pll" },
1332     { .fw_name = "dsi1pll", .name = "dsi1pll" },
1333 };
1334 
1335 static struct clk_rcg2 pclk0_clk_src = {
1336     .cmd_rcgr = 0x4d000,
1337     .hid_width = 5,
1338     .mnd_width = 8,
1339     .parent_map = gcc_pclk0_map,
1340     .clkr.hw.init = &(struct clk_init_data) {
1341         .name = "pclk0_clk_src",
1342         .parent_data = gcc_pclk_data,
1343         .num_parents = ARRAY_SIZE(gcc_pclk_data),
1344         .ops = &clk_pixel_ops,
1345         .flags = CLK_SET_RATE_PARENT,
1346     }
1347 };
1348 
1349 static struct clk_rcg2 pclk1_clk_src = {
1350     .cmd_rcgr = 0x4d0b8,
1351     .hid_width = 5,
1352     .mnd_width = 8,
1353     .parent_map = gcc_pclk1_map,
1354     .clkr.hw.init = &(struct clk_init_data) {
1355         .name = "pclk1_clk_src",
1356         .parent_data = gcc_pclk_data,
1357         .num_parents = ARRAY_SIZE(gcc_pclk_data),
1358         .ops = &clk_pixel_ops,
1359         .flags = CLK_SET_RATE_PARENT,
1360     }
1361 };
1362 
1363 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1364     F(32000000, P_GPLL0_DIV2, 12.5, 0, 0),
1365     F(64000000, P_GPLL0, 12.5, 0, 0),
1366     { }
1367 };
1368 
1369 static struct clk_rcg2 pdm2_clk_src = {
1370     .cmd_rcgr = 0x44010,
1371     .hid_width = 5,
1372     .freq_tbl = ftbl_pdm2_clk_src,
1373     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1374     .clkr.hw.init = &(struct clk_init_data) {
1375         .name = "pdm2_clk_src",
1376         .parent_data = gcc_xo_gpll0_gpll0div2_data,
1377         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1378         .ops = &clk_rcg2_ops,
1379     }
1380 };
1381 
1382 static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {
1383     F(19200000, P_XO, 1, 0, 0),
1384     F(50000000, P_GPLL0, 16, 0, 0),
1385     { }
1386 };
1387 
1388 static struct clk_rcg2 rbcpr_gfx_clk_src = {
1389     .cmd_rcgr = 0x3a00c,
1390     .hid_width = 5,
1391     .freq_tbl = ftbl_rbcpr_gfx_clk_src,
1392     .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
1393     .clkr.hw.init = &(struct clk_init_data) {
1394         .name = "rbcpr_gfx_clk_src",
1395         .parent_data = gcc_xo_gpll0_gpll0div2_data,
1396         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1397         .ops = &clk_rcg2_ops,
1398     }
1399 };
1400 
1401 static const struct parent_map gcc_sdcc1_ice_core_map[] = {
1402     { P_XO, 0 },
1403     { P_GPLL0, 1 },
1404     { P_GPLL6, 2 },
1405     { P_GPLL0_DIV2, 4 },
1406 };
1407 
1408 static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = {
1409     { .fw_name = "xo" },
1410     { .hw = &gpll0.clkr.hw },
1411     { .hw = &gpll6.clkr.hw },
1412     { .hw = &gpll0_early_div.hw },
1413 };
1414 
1415 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1416     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1417     F(160000000, P_GPLL0, 5, 0, 0),
1418     F(270000000, P_GPLL6, 4, 0, 0),
1419     { }
1420 };
1421 
1422 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1423     .cmd_rcgr = 0x5d000,
1424     .hid_width = 5,
1425     .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1426     .parent_map = gcc_sdcc1_ice_core_map,
1427     .clkr.hw.init = &(struct clk_init_data) {
1428         .name = "sdcc1_ice_core_clk_src",
1429         .parent_data = gcc_sdcc1_ice_core_data,
1430         .num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data),
1431         .ops = &clk_rcg2_ops,
1432     }
1433 };
1434 
1435 static const struct parent_map gcc_sdcc_apps_map[] = {
1436     { P_XO, 0 },
1437     { P_GPLL0, 1 },
1438     { P_GPLL4, 2 },
1439     { P_GPLL0_DIV2, 4 },
1440 };
1441 
1442 static const struct clk_parent_data gcc_sdcc_apss_data[] = {
1443     { .fw_name = "xo" },
1444     { .hw = &gpll0.clkr.hw },
1445     { .hw = &gpll4.clkr.hw },
1446     { .hw = &gpll0_early_div.hw },
1447 };
1448 
1449 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1450     F(144000, P_XO, 16, 3, 25),
1451     F(400000, P_XO, 12, 1, 4),
1452     F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1453     F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1454     F(50000000, P_GPLL0, 16, 0, 0),
1455     F(100000000, P_GPLL0, 8, 0, 0),
1456     F(177770000, P_GPLL0, 4.5, 0, 0),
1457     F(192000000, P_GPLL4, 6, 0, 0),
1458     F(384000000, P_GPLL4, 3, 0, 0),
1459     { }
1460 };
1461 
1462 static struct clk_rcg2 sdcc1_apps_clk_src = {
1463     .cmd_rcgr = 0x42004,
1464     .hid_width = 5,
1465     .mnd_width = 8,
1466     .freq_tbl = ftbl_sdcc1_apps_clk_src,
1467     .parent_map = gcc_sdcc_apps_map,
1468     .clkr.hw.init = &(struct clk_init_data) {
1469         .name = "sdcc1_apps_clk_src",
1470         .parent_data = gcc_sdcc_apss_data,
1471         .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1472         .ops = &clk_rcg2_floor_ops,
1473     }
1474 };
1475 
1476 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1477     F(144000, P_XO, 16, 3, 25),
1478     F(400000, P_XO, 12, 1, 4),
1479     F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1480     F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1481     F(50000000, P_GPLL0, 16, 0, 0),
1482     F(100000000, P_GPLL0, 8, 0, 0),
1483     F(177770000, P_GPLL0, 4.5, 0, 0),
1484     F(192000000, P_GPLL4, 6, 0, 0),
1485     F(200000000, P_GPLL0, 4, 0, 0),
1486     { }
1487 };
1488 
1489 static struct clk_rcg2 sdcc2_apps_clk_src = {
1490     .cmd_rcgr = 0x43004,
1491     .hid_width = 5,
1492     .mnd_width = 8,
1493     .freq_tbl = ftbl_sdcc2_apps_clk_src,
1494     .parent_map = gcc_sdcc_apps_map,
1495     .clkr.hw.init = &(struct clk_init_data) {
1496         .name = "sdcc2_apps_clk_src",
1497         .parent_data = gcc_sdcc_apss_data,
1498         .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1499         .ops = &clk_rcg2_floor_ops,
1500     }
1501 };
1502 
1503 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1504     F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1505     F(100000000, P_GPLL0, 8, 0, 0),
1506     F(133330000, P_GPLL0, 6, 0, 0),
1507     { }
1508 };
1509 
1510 static struct clk_rcg2 usb30_master_clk_src = {
1511     .cmd_rcgr = 0x3f00c,
1512     .hid_width = 5,
1513     .freq_tbl = ftbl_usb30_master_clk_src,
1514     .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1515     .clkr.hw.init = &(struct clk_init_data) {
1516         .name = "usb30_master_clk_src",
1517         .parent_data = gcc_xo_gpll0_gpll0div2_data,
1518         .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1519         .ops = &clk_rcg2_ops,
1520     }
1521 };
1522 
1523 static const struct parent_map gcc_usb30_mock_utmi_map[] = {
1524     { P_XO, 0 },
1525     { P_GPLL6, 1 },
1526     { P_GPLL6_DIV2, 2 },
1527     { P_GPLL0, 3 },
1528     { P_GPLL0_DIV2, 4 },
1529 };
1530 
1531 static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = {
1532     { .fw_name = "xo" },
1533     { .hw = &gpll6.clkr.hw },
1534     { .hw = &gpll6_early_div.hw },
1535     { .hw = &gpll0.clkr.hw },
1536     { .hw = &gpll0_early_div.hw },
1537 };
1538 
1539 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
1540     F(19200000, P_XO, 1, 0, 0),
1541     F(60000000, P_GPLL6_DIV2, 9, 1, 1),
1542     { }
1543 };
1544 
1545 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1546     .cmd_rcgr = 0x3f020,
1547     .hid_width = 5,
1548     .mnd_width = 8,
1549     .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1550     .parent_map = gcc_usb30_mock_utmi_map,
1551     .clkr.hw.init = &(struct clk_init_data) {
1552         .name = "usb30_mock_utmi_clk_src",
1553         .parent_data = gcc_usb30_mock_utmi_data,
1554         .num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data),
1555         .ops = &clk_rcg2_ops,
1556     }
1557 };
1558 
1559 static const struct parent_map gcc_usb3_aux_map[] = {
1560     { P_XO, 0 },
1561     { P_SLEEP_CLK, 6 },
1562 };
1563 
1564 static const struct clk_parent_data gcc_usb3_aux_data[] = {
1565     { .fw_name = "xo" },
1566     { .fw_name = "sleep", .name = "sleep" },
1567 };
1568 
1569 static const struct freq_tbl ftbl_usb3_aux_clk_src[] = {
1570     F(19200000, P_XO, 1, 0, 0),
1571     { }
1572 };
1573 
1574 static struct clk_rcg2 usb3_aux_clk_src = {
1575     .cmd_rcgr = 0x3f05c,
1576     .hid_width = 5,
1577     .mnd_width = 8,
1578     .freq_tbl = ftbl_usb3_aux_clk_src,
1579     .parent_map = gcc_usb3_aux_map,
1580     .clkr.hw.init = &(struct clk_init_data) {
1581         .name = "usb3_aux_clk_src",
1582         .parent_data = gcc_usb3_aux_data,
1583         .num_parents = ARRAY_SIZE(gcc_usb3_aux_data),
1584         .ops = &clk_rcg2_ops,
1585     }
1586 };
1587 
1588 static const struct parent_map gcc_vcodec0_map[] = {
1589     { P_XO, 0 },
1590     { P_GPLL0, 1 },
1591     { P_GPLL6, 2 },
1592     { P_GPLL2, 3 },
1593     { P_GPLL0_DIV2, 4 },
1594 };
1595 
1596 static const struct clk_parent_data gcc_vcodec0_data[] = {
1597     { .fw_name = "xo" },
1598     { .hw = &gpll0.clkr.hw },
1599     { .hw = &gpll6.clkr.hw },
1600     { .hw = &gpll2.clkr.hw },
1601     { .hw = &gpll0_early_div.hw },
1602 };
1603 
1604 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1605     F(114290000, P_GPLL0_DIV2, 3.5, 0, 0),
1606     F(228570000, P_GPLL0, 3.5, 0, 0),
1607     F(310000000, P_GPLL2, 3, 0, 0),
1608     F(360000000, P_GPLL6, 3, 0, 0),
1609     F(400000000, P_GPLL0, 2, 0, 0),
1610     F(465000000, P_GPLL2, 2, 0, 0),
1611     F(540000000, P_GPLL6, 2, 0, 0),
1612     { }
1613 };
1614 
1615 static struct clk_rcg2 vcodec0_clk_src = {
1616     .cmd_rcgr = 0x4c000,
1617     .hid_width = 5,
1618     .freq_tbl = ftbl_vcodec0_clk_src,
1619     .parent_map = gcc_vcodec0_map,
1620     .clkr.hw.init = &(struct clk_init_data) {
1621         .name = "vcodec0_clk_src",
1622         .parent_data = gcc_vcodec0_data,
1623         .num_parents = ARRAY_SIZE(gcc_vcodec0_data),
1624         .ops = &clk_rcg2_ops,
1625     }
1626 };
1627 
1628 static const struct parent_map gcc_vfe_map[] = {
1629     { P_XO, 0 },
1630     { P_GPLL0, 1 },
1631     { P_GPLL6, 2 },
1632     { P_GPLL4, 3 },
1633     { P_GPLL2, 4 },
1634     { P_GPLL0_DIV2, 5 },
1635 };
1636 
1637 static const struct clk_parent_data gcc_vfe_data[] = {
1638     { .fw_name = "xo" },
1639     { .hw = &gpll0.clkr.hw },
1640     { .hw = &gpll6.clkr.hw },
1641     { .hw = &gpll4.clkr.hw },
1642     { .hw = &gpll2.clkr.hw },
1643     { .hw = &gpll0_early_div.hw },
1644 };
1645 
1646 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1647     F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1648     F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1649     F(133330000, P_GPLL0, 6, 0, 0),
1650     F(160000000, P_GPLL0, 5, 0, 0),
1651     F(200000000, P_GPLL0, 4, 0, 0),
1652     F(266670000, P_GPLL0, 3, 0, 0),
1653     F(310000000, P_GPLL2, 3, 0, 0),
1654     F(400000000, P_GPLL0, 2, 0, 0),
1655     F(465000000, P_GPLL2, 2, 0, 0),
1656     { }
1657 };
1658 
1659 static struct clk_rcg2 vfe0_clk_src = {
1660     .cmd_rcgr = 0x58000,
1661     .hid_width = 5,
1662     .freq_tbl = ftbl_vfe_clk_src,
1663     .parent_map = gcc_vfe_map,
1664     .clkr.hw.init = &(struct clk_init_data) {
1665         .name = "vfe0_clk_src",
1666         .parent_data = gcc_vfe_data,
1667         .num_parents = ARRAY_SIZE(gcc_vfe_data),
1668         .ops = &clk_rcg2_ops,
1669     }
1670 };
1671 
1672 static struct clk_rcg2 vfe1_clk_src = {
1673     .cmd_rcgr = 0x58054,
1674     .hid_width = 5,
1675     .freq_tbl = ftbl_vfe_clk_src,
1676     .parent_map = gcc_vfe_map,
1677     .clkr.hw.init = &(struct clk_init_data) {
1678         .name = "vfe1_clk_src",
1679         .parent_data = gcc_vfe_data,
1680         .num_parents = ARRAY_SIZE(gcc_vfe_data),
1681         .ops = &clk_rcg2_ops,
1682     }
1683 };
1684 
1685 static const struct parent_map gcc_vsync_map[] = {
1686     { P_XO, 0 },
1687     { P_GPLL0, 2 },
1688 };
1689 
1690 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1691     F(19200000, P_XO, 1, 0, 0),
1692     { }
1693 };
1694 
1695 static struct clk_rcg2 vsync_clk_src = {
1696     .cmd_rcgr = 0x4d02c,
1697     .hid_width = 5,
1698     .freq_tbl = ftbl_vsync_clk_src,
1699     .parent_map = gcc_vsync_map,
1700     .clkr.hw.init = &(struct clk_init_data) {
1701         .name = "vsync_clk_src",
1702         .parent_data = gcc_esc_vsync_data,
1703         .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1704         .ops = &clk_rcg2_ops,
1705     }
1706 };
1707 
1708 static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = {
1709     .halt_reg = 0x78004,
1710     .halt_check = BRANCH_HALT,
1711     .clkr = {
1712         .enable_reg = 0x78004,
1713         .enable_mask = BIT(0),
1714         .hw.init = &(struct clk_init_data) {
1715             .name = "gcc_apc0_droop_detector_gpll0_clk",
1716             .parent_hws = (const struct clk_hw*[]){
1717                 &apc0_droop_detector_clk_src.clkr.hw,
1718             },
1719             .num_parents = 1,
1720             .ops = &clk_branch2_ops,
1721             .flags = CLK_SET_RATE_PARENT,
1722         }
1723     }
1724 };
1725 
1726 static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = {
1727     .halt_reg = 0x79004,
1728     .halt_check = BRANCH_HALT,
1729     .clkr = {
1730         .enable_reg = 0x79004,
1731         .enable_mask = BIT(0),
1732         .hw.init = &(struct clk_init_data) {
1733             .name = "gcc_apc1_droop_detector_gpll0_clk",
1734             .parent_hws = (const struct clk_hw*[]){
1735                 &apc1_droop_detector_clk_src.clkr.hw,
1736             },
1737             .num_parents = 1,
1738             .ops = &clk_branch2_ops,
1739             .flags = CLK_SET_RATE_PARENT,
1740         }
1741     }
1742 };
1743 
1744 static struct clk_branch gcc_apss_ahb_clk = {
1745     .halt_reg = 0x4601c,
1746     .halt_check = BRANCH_HALT_VOTED,
1747     .clkr = {
1748         .enable_reg = 0x45004,
1749         .enable_mask = BIT(14),
1750         .hw.init = &(struct clk_init_data) {
1751             .name = "gcc_apss_ahb_clk",
1752             .parent_hws = (const struct clk_hw*[]){
1753                 &apss_ahb_clk_src.clkr.hw,
1754             },
1755             .num_parents = 1,
1756             .ops = &clk_branch2_ops,
1757             .flags = CLK_SET_RATE_PARENT,
1758         }
1759     }
1760 };
1761 
1762 static struct clk_branch gcc_apss_axi_clk = {
1763     .halt_reg = 0x46020,
1764     .halt_check = BRANCH_HALT_VOTED,
1765     .clkr = {
1766         .enable_reg = 0x45004,
1767         .enable_mask = BIT(13),
1768         .hw.init = &(struct clk_init_data) {
1769             .name = "gcc_apss_axi_clk",
1770             .ops = &clk_branch2_ops,
1771         }
1772     }
1773 };
1774 
1775 static struct clk_branch gcc_apss_tcu_async_clk = {
1776     .halt_reg = 0x12018,
1777     .halt_check = BRANCH_HALT_VOTED,
1778     .clkr = {
1779         .enable_reg = 0x4500c,
1780         .enable_mask = BIT(1),
1781         .hw.init = &(struct clk_init_data) {
1782             .name = "gcc_apss_tcu_async_clk",
1783             .ops = &clk_branch2_ops,
1784         }
1785     }
1786 };
1787 
1788 static struct clk_branch gcc_bimc_gfx_clk = {
1789     .halt_reg = 0x59034,
1790     .halt_check = BRANCH_HALT,
1791     .clkr = {
1792         .enable_reg = 0x59034,
1793         .enable_mask = BIT(0),
1794         .hw.init = &(struct clk_init_data) {
1795             .name = "gcc_bimc_gfx_clk",
1796             .ops = &clk_branch2_ops,
1797         }
1798     }
1799 };
1800 
1801 static struct clk_branch gcc_bimc_gpu_clk = {
1802     .halt_reg = 0x59030,
1803     .halt_check = BRANCH_HALT,
1804     .clkr = {
1805         .enable_reg = 0x59030,
1806         .enable_mask = BIT(0),
1807         .hw.init = &(struct clk_init_data) {
1808             .name = "gcc_bimc_gpu_clk",
1809             .ops = &clk_branch2_ops,
1810         }
1811     }
1812 };
1813 
1814 static struct clk_branch gcc_blsp1_ahb_clk = {
1815     .halt_reg = 0x01008,
1816     .halt_check = BRANCH_HALT_VOTED,
1817     .clkr = {
1818         .enable_reg = 0x45004,
1819         .enable_mask = BIT(10),
1820         .hw.init = &(struct clk_init_data) {
1821             .name = "gcc_blsp1_ahb_clk",
1822             .ops = &clk_branch2_ops,
1823         }
1824     }
1825 };
1826 
1827 static struct clk_branch gcc_blsp2_ahb_clk = {
1828     .halt_reg = 0x0b008,
1829     .halt_check = BRANCH_HALT_VOTED,
1830     .clkr = {
1831         .enable_reg = 0x45004,
1832         .enable_mask = BIT(20),
1833         .hw.init = &(struct clk_init_data) {
1834             .name = "gcc_blsp2_ahb_clk",
1835             .ops = &clk_branch2_ops,
1836         }
1837     }
1838 };
1839 
1840 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1841     .halt_reg = 0x02008,
1842     .halt_check = BRANCH_HALT,
1843     .clkr = {
1844         .enable_reg = 0x02008,
1845         .enable_mask = BIT(0),
1846         .hw.init = &(struct clk_init_data) {
1847             .name = "gcc_blsp1_qup1_i2c_apps_clk",
1848             .parent_hws = (const struct clk_hw*[]){
1849                 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1850             },
1851             .num_parents = 1,
1852             .ops = &clk_branch2_ops,
1853             .flags = CLK_SET_RATE_PARENT,
1854         }
1855     }
1856 };
1857 
1858 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1859     .halt_reg = 0x03010,
1860     .halt_check = BRANCH_HALT,
1861     .clkr = {
1862         .enable_reg = 0x03010,
1863         .enable_mask = BIT(0),
1864         .hw.init = &(struct clk_init_data) {
1865             .name = "gcc_blsp1_qup2_i2c_apps_clk",
1866             .parent_hws = (const struct clk_hw*[]){
1867                 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1868             },
1869             .num_parents = 1,
1870             .ops = &clk_branch2_ops,
1871             .flags = CLK_SET_RATE_PARENT,
1872         }
1873     }
1874 };
1875 
1876 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1877     .halt_reg = 0x04020,
1878     .halt_check = BRANCH_HALT,
1879     .clkr = {
1880         .enable_reg = 0x04020,
1881         .enable_mask = BIT(0),
1882         .hw.init = &(struct clk_init_data) {
1883             .name = "gcc_blsp1_qup3_i2c_apps_clk",
1884             .parent_hws = (const struct clk_hw*[]){
1885                 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1886             },
1887             .num_parents = 1,
1888             .ops = &clk_branch2_ops,
1889             .flags = CLK_SET_RATE_PARENT,
1890         }
1891     }
1892 };
1893 
1894 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1895     .halt_reg = 0x05020,
1896     .halt_check = BRANCH_HALT,
1897     .clkr = {
1898         .enable_reg = 0x05020,
1899         .enable_mask = BIT(0),
1900         .hw.init = &(struct clk_init_data) {
1901             .name = "gcc_blsp1_qup4_i2c_apps_clk",
1902             .parent_hws = (const struct clk_hw*[]){
1903                 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1904             },
1905             .num_parents = 1,
1906             .ops = &clk_branch2_ops,
1907             .flags = CLK_SET_RATE_PARENT,
1908         }
1909     }
1910 };
1911 
1912 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1913     .halt_reg = 0x0c008,
1914     .halt_check = BRANCH_HALT,
1915     .clkr = {
1916         .enable_reg = 0x0c008,
1917         .enable_mask = BIT(0),
1918         .hw.init = &(struct clk_init_data) {
1919             .name = "gcc_blsp2_qup1_i2c_apps_clk",
1920             .parent_hws = (const struct clk_hw*[]){
1921                 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1922             },
1923             .num_parents = 1,
1924             .ops = &clk_branch2_ops,
1925             .flags = CLK_SET_RATE_PARENT,
1926         }
1927     }
1928 };
1929 
1930 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1931     .halt_reg = 0x0d010,
1932     .halt_check = BRANCH_HALT,
1933     .clkr = {
1934         .enable_reg = 0x0d010,
1935         .enable_mask = BIT(0),
1936         .hw.init = &(struct clk_init_data) {
1937             .name = "gcc_blsp2_qup2_i2c_apps_clk",
1938             .parent_hws = (const struct clk_hw*[]){
1939                 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1940             },
1941             .num_parents = 1,
1942             .ops = &clk_branch2_ops,
1943             .flags = CLK_SET_RATE_PARENT,
1944         }
1945     }
1946 };
1947 
1948 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1949     .halt_reg = 0x0f020,
1950     .halt_check = BRANCH_HALT,
1951     .clkr = {
1952         .enable_reg = 0x0f020,
1953         .enable_mask = BIT(0),
1954         .hw.init = &(struct clk_init_data) {
1955             .name = "gcc_blsp2_qup3_i2c_apps_clk",
1956             .parent_hws = (const struct clk_hw*[]){
1957                 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1958             },
1959             .num_parents = 1,
1960             .ops = &clk_branch2_ops,
1961             .flags = CLK_SET_RATE_PARENT,
1962         }
1963     }
1964 };
1965 
1966 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1967     .halt_reg = 0x18020,
1968     .halt_check = BRANCH_HALT,
1969     .clkr = {
1970         .enable_reg = 0x18020,
1971         .enable_mask = BIT(0),
1972         .hw.init = &(struct clk_init_data) {
1973             .name = "gcc_blsp2_qup4_i2c_apps_clk",
1974             .parent_hws = (const struct clk_hw*[]){
1975                 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1976             },
1977             .num_parents = 1,
1978             .ops = &clk_branch2_ops,
1979             .flags = CLK_SET_RATE_PARENT,
1980         }
1981     }
1982 };
1983 
1984 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1985     .halt_reg = 0x02004,
1986     .halt_check = BRANCH_HALT,
1987     .clkr = {
1988         .enable_reg = 0x02004,
1989         .enable_mask = BIT(0),
1990         .hw.init = &(struct clk_init_data) {
1991             .name = "gcc_blsp1_qup1_spi_apps_clk",
1992             .parent_hws = (const struct clk_hw*[]){
1993                 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1994             },
1995             .num_parents = 1,
1996             .ops = &clk_branch2_ops,
1997             .flags = CLK_SET_RATE_PARENT,
1998         }
1999     }
2000 };
2001 
2002 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2003     .halt_reg = 0x0300c,
2004     .halt_check = BRANCH_HALT,
2005     .clkr = {
2006         .enable_reg = 0x0300c,
2007         .enable_mask = BIT(0),
2008         .hw.init = &(struct clk_init_data) {
2009             .name = "gcc_blsp1_qup2_spi_apps_clk",
2010             .parent_hws = (const struct clk_hw*[]){
2011                 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
2012             },
2013             .num_parents = 1,
2014             .ops = &clk_branch2_ops,
2015             .flags = CLK_SET_RATE_PARENT,
2016         }
2017     }
2018 };
2019 
2020 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2021     .halt_reg = 0x0401c,
2022     .halt_check = BRANCH_HALT,
2023     .clkr = {
2024         .enable_reg = 0x0401c,
2025         .enable_mask = BIT(0),
2026         .hw.init = &(struct clk_init_data) {
2027             .name = "gcc_blsp1_qup3_spi_apps_clk",
2028             .parent_hws = (const struct clk_hw*[]){
2029                 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
2030             },
2031             .num_parents = 1,
2032             .ops = &clk_branch2_ops,
2033             .flags = CLK_SET_RATE_PARENT,
2034         }
2035     }
2036 };
2037 
2038 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2039     .halt_reg = 0x0501c,
2040     .halt_check = BRANCH_HALT,
2041     .clkr = {
2042         .enable_reg = 0x0501c,
2043         .enable_mask = BIT(0),
2044         .hw.init = &(struct clk_init_data) {
2045             .name = "gcc_blsp1_qup4_spi_apps_clk",
2046             .parent_hws = (const struct clk_hw*[]){
2047                 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
2048             },
2049             .num_parents = 1,
2050             .ops = &clk_branch2_ops,
2051             .flags = CLK_SET_RATE_PARENT,
2052         }
2053     }
2054 };
2055 
2056 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
2057     .halt_reg = 0x0c004,
2058     .halt_check = BRANCH_HALT,
2059     .clkr = {
2060         .enable_reg = 0x0c004,
2061         .enable_mask = BIT(0),
2062         .hw.init = &(struct clk_init_data) {
2063             .name = "gcc_blsp2_qup1_spi_apps_clk",
2064             .parent_hws = (const struct clk_hw*[]){
2065                 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
2066             },
2067             .num_parents = 1,
2068             .ops = &clk_branch2_ops,
2069             .flags = CLK_SET_RATE_PARENT,
2070         }
2071     }
2072 };
2073 
2074 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2075     .halt_reg = 0x0d00c,
2076     .halt_check = BRANCH_HALT,
2077     .clkr = {
2078         .enable_reg = 0x0d00c,
2079         .enable_mask = BIT(0),
2080         .hw.init = &(struct clk_init_data) {
2081             .name = "gcc_blsp2_qup2_spi_apps_clk",
2082             .parent_hws = (const struct clk_hw*[]){
2083                 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
2084             },
2085             .num_parents = 1,
2086             .ops = &clk_branch2_ops,
2087             .flags = CLK_SET_RATE_PARENT,
2088         }
2089     }
2090 };
2091 
2092 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2093     .halt_reg = 0x0f01c,
2094     .halt_check = BRANCH_HALT,
2095     .clkr = {
2096         .enable_reg = 0x0f01c,
2097         .enable_mask = BIT(0),
2098         .hw.init = &(struct clk_init_data) {
2099             .name = "gcc_blsp2_qup3_spi_apps_clk",
2100             .parent_hws = (const struct clk_hw*[]){
2101                 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
2102             },
2103             .num_parents = 1,
2104             .ops = &clk_branch2_ops,
2105             .flags = CLK_SET_RATE_PARENT,
2106         }
2107     }
2108 };
2109 
2110 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2111     .halt_reg = 0x1801c,
2112     .halt_check = BRANCH_HALT,
2113     .clkr = {
2114         .enable_reg = 0x1801c,
2115         .enable_mask = BIT(0),
2116         .hw.init = &(struct clk_init_data) {
2117             .name = "gcc_blsp2_qup4_spi_apps_clk",
2118             .parent_hws = (const struct clk_hw*[]){
2119                 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
2120             },
2121             .num_parents = 1,
2122             .ops = &clk_branch2_ops,
2123             .flags = CLK_SET_RATE_PARENT,
2124         }
2125     }
2126 };
2127 
2128 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2129     .halt_reg = 0x0203c,
2130     .halt_check = BRANCH_HALT,
2131     .clkr = {
2132         .enable_reg = 0x0203c,
2133         .enable_mask = BIT(0),
2134         .hw.init = &(struct clk_init_data) {
2135             .name = "gcc_blsp1_uart1_apps_clk",
2136             .parent_hws = (const struct clk_hw*[]){
2137                 &blsp1_uart1_apps_clk_src.clkr.hw,
2138             },
2139             .num_parents = 1,
2140             .ops = &clk_branch2_ops,
2141             .flags = CLK_SET_RATE_PARENT,
2142         }
2143     }
2144 };
2145 
2146 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2147     .halt_reg = 0x0302c,
2148     .halt_check = BRANCH_HALT,
2149     .clkr = {
2150         .enable_reg = 0x0302c,
2151         .enable_mask = BIT(0),
2152         .hw.init = &(struct clk_init_data) {
2153             .name = "gcc_blsp1_uart2_apps_clk",
2154             .parent_hws = (const struct clk_hw*[]){
2155                 &blsp1_uart2_apps_clk_src.clkr.hw,
2156             },
2157             .num_parents = 1,
2158             .ops = &clk_branch2_ops,
2159             .flags = CLK_SET_RATE_PARENT,
2160         }
2161     }
2162 };
2163 
2164 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2165     .halt_reg = 0x0c03c,
2166     .halt_check = BRANCH_HALT,
2167     .clkr = {
2168         .enable_reg = 0x0c03c,
2169         .enable_mask = BIT(0),
2170         .hw.init = &(struct clk_init_data) {
2171             .name = "gcc_blsp2_uart1_apps_clk",
2172             .parent_hws = (const struct clk_hw*[]){
2173                 &blsp2_uart1_apps_clk_src.clkr.hw,
2174             },
2175             .num_parents = 1,
2176             .ops = &clk_branch2_ops,
2177             .flags = CLK_SET_RATE_PARENT,
2178         }
2179     }
2180 };
2181 
2182 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2183     .halt_reg = 0x0d02c,
2184     .halt_check = BRANCH_HALT,
2185     .clkr = {
2186         .enable_reg = 0x0d02c,
2187         .enable_mask = BIT(0),
2188         .hw.init = &(struct clk_init_data) {
2189             .name = "gcc_blsp2_uart2_apps_clk",
2190             .parent_hws = (const struct clk_hw*[]){
2191                 &blsp2_uart2_apps_clk_src.clkr.hw,
2192             },
2193             .num_parents = 1,
2194             .ops = &clk_branch2_ops,
2195             .flags = CLK_SET_RATE_PARENT,
2196         }
2197     }
2198 };
2199 
2200 static struct clk_branch gcc_boot_rom_ahb_clk = {
2201     .halt_reg = 0x1300c,
2202     .halt_check = BRANCH_HALT_VOTED,
2203     .clkr = {
2204         .enable_reg = 0x45004,
2205         .enable_mask = BIT(7),
2206         .hw.init = &(struct clk_init_data) {
2207             .name = "gcc_boot_rom_ahb_clk",
2208             .ops = &clk_branch2_ops,
2209         }
2210     }
2211 };
2212 
2213 static struct clk_branch gcc_camss_ahb_clk = {
2214     .halt_reg = 0x56004,
2215     .halt_check = BRANCH_HALT,
2216     .clkr = {
2217         .enable_reg = 0x56004,
2218         .enable_mask = BIT(0),
2219         .hw.init = &(struct clk_init_data) {
2220             .name = "gcc_camss_ahb_clk",
2221             .ops = &clk_branch2_ops,
2222         }
2223     }
2224 };
2225 
2226 static struct clk_branch gcc_camss_cci_ahb_clk = {
2227     .halt_reg = 0x5101c,
2228     .halt_check = BRANCH_HALT,
2229     .clkr = {
2230         .enable_reg = 0x5101c,
2231         .enable_mask = BIT(0),
2232         .hw.init = &(struct clk_init_data) {
2233             .name = "gcc_camss_cci_ahb_clk",
2234             .parent_hws = (const struct clk_hw*[]){
2235                 &camss_top_ahb_clk_src.clkr.hw,
2236             },
2237             .num_parents = 1,
2238             .ops = &clk_branch2_ops,
2239             .flags = CLK_SET_RATE_PARENT,
2240         }
2241     }
2242 };
2243 
2244 static struct clk_branch gcc_camss_cci_clk = {
2245     .halt_reg = 0x51018,
2246     .halt_check = BRANCH_HALT,
2247     .clkr = {
2248         .enable_reg = 0x51018,
2249         .enable_mask = BIT(0),
2250         .hw.init = &(struct clk_init_data) {
2251             .name = "gcc_camss_cci_clk",
2252             .parent_hws = (const struct clk_hw*[]){
2253                 &cci_clk_src.clkr.hw,
2254             },
2255             .num_parents = 1,
2256             .ops = &clk_branch2_ops,
2257             .flags = CLK_SET_RATE_PARENT,
2258         }
2259     }
2260 };
2261 
2262 static struct clk_branch gcc_camss_cpp_ahb_clk = {
2263     .halt_reg = 0x58040,
2264     .halt_check = BRANCH_HALT,
2265     .clkr = {
2266         .enable_reg = 0x58040,
2267         .enable_mask = BIT(0),
2268         .hw.init = &(struct clk_init_data) {
2269             .name = "gcc_camss_cpp_ahb_clk",
2270             .parent_hws = (const struct clk_hw*[]){
2271                 &camss_top_ahb_clk_src.clkr.hw,
2272             },
2273             .num_parents = 1,
2274             .ops = &clk_branch2_ops,
2275             .flags = CLK_SET_RATE_PARENT,
2276         }
2277     }
2278 };
2279 
2280 static struct clk_branch gcc_camss_cpp_axi_clk = {
2281     .halt_reg = 0x58064,
2282     .halt_check = BRANCH_HALT,
2283     .clkr = {
2284         .enable_reg = 0x58064,
2285         .enable_mask = BIT(0),
2286         .hw.init = &(struct clk_init_data) {
2287             .name = "gcc_camss_cpp_axi_clk",
2288             .ops = &clk_branch2_ops,
2289         }
2290     }
2291 };
2292 
2293 static struct clk_branch gcc_camss_cpp_clk = {
2294     .halt_reg = 0x5803c,
2295     .halt_check = BRANCH_HALT,
2296     .clkr = {
2297         .enable_reg = 0x5803c,
2298         .enable_mask = BIT(0),
2299         .hw.init = &(struct clk_init_data) {
2300             .name = "gcc_camss_cpp_clk",
2301             .parent_hws = (const struct clk_hw*[]){
2302                 &cpp_clk_src.clkr.hw,
2303             },
2304             .num_parents = 1,
2305             .ops = &clk_branch2_ops,
2306             .flags = CLK_SET_RATE_PARENT,
2307         }
2308     }
2309 };
2310 
2311 static struct clk_branch gcc_camss_csi0_ahb_clk = {
2312     .halt_reg = 0x4e040,
2313     .halt_check = BRANCH_HALT,
2314     .clkr = {
2315         .enable_reg = 0x4e040,
2316         .enable_mask = BIT(0),
2317         .hw.init = &(struct clk_init_data) {
2318             .name = "gcc_camss_csi0_ahb_clk",
2319             .parent_hws = (const struct clk_hw*[]){
2320                 &camss_top_ahb_clk_src.clkr.hw,
2321             },
2322             .num_parents = 1,
2323             .ops = &clk_branch2_ops,
2324             .flags = CLK_SET_RATE_PARENT,
2325         }
2326     }
2327 };
2328 
2329 static struct clk_branch gcc_camss_csi1_ahb_clk = {
2330     .halt_reg = 0x4f040,
2331     .halt_check = BRANCH_HALT,
2332     .clkr = {
2333         .enable_reg = 0x4f040,
2334         .enable_mask = BIT(0),
2335         .hw.init = &(struct clk_init_data) {
2336             .name = "gcc_camss_csi1_ahb_clk",
2337             .parent_hws = (const struct clk_hw*[]){
2338                 &camss_top_ahb_clk_src.clkr.hw,
2339             },
2340             .num_parents = 1,
2341             .ops = &clk_branch2_ops,
2342             .flags = CLK_SET_RATE_PARENT,
2343         }
2344     }
2345 };
2346 
2347 static struct clk_branch gcc_camss_csi2_ahb_clk = {
2348     .halt_reg = 0x3c040,
2349     .halt_check = BRANCH_HALT,
2350     .clkr = {
2351         .enable_reg = 0x3c040,
2352         .enable_mask = BIT(0),
2353         .hw.init = &(struct clk_init_data) {
2354             .name = "gcc_camss_csi2_ahb_clk",
2355             .parent_hws = (const struct clk_hw*[]){
2356                 &camss_top_ahb_clk_src.clkr.hw,
2357             },
2358             .num_parents = 1,
2359             .ops = &clk_branch2_ops,
2360             .flags = CLK_SET_RATE_PARENT,
2361         }
2362     }
2363 };
2364 
2365 static struct clk_branch gcc_camss_csi0_clk = {
2366     .halt_reg = 0x4e03c,
2367     .halt_check = BRANCH_HALT,
2368     .clkr = {
2369         .enable_reg = 0x4e03c,
2370         .enable_mask = BIT(0),
2371         .hw.init = &(struct clk_init_data) {
2372             .name = "gcc_camss_csi0_clk",
2373             .parent_hws = (const struct clk_hw*[]){
2374                 &csi0_clk_src.clkr.hw,
2375             },
2376             .num_parents = 1,
2377             .ops = &clk_branch2_ops,
2378             .flags = CLK_SET_RATE_PARENT,
2379         }
2380     }
2381 };
2382 
2383 static struct clk_branch gcc_camss_csi1_clk = {
2384     .halt_reg = 0x4f03c,
2385     .halt_check = BRANCH_HALT,
2386     .clkr = {
2387         .enable_reg = 0x4f03c,
2388         .enable_mask = BIT(0),
2389         .hw.init = &(struct clk_init_data) {
2390             .name = "gcc_camss_csi1_clk",
2391             .parent_hws = (const struct clk_hw*[]){
2392                 &csi1_clk_src.clkr.hw,
2393             },
2394             .num_parents = 1,
2395             .ops = &clk_branch2_ops,
2396             .flags = CLK_SET_RATE_PARENT,
2397         }
2398     }
2399 };
2400 
2401 static struct clk_branch gcc_camss_csi2_clk = {
2402     .halt_reg = 0x3c03c,
2403     .halt_check = BRANCH_HALT,
2404     .clkr = {
2405         .enable_reg = 0x3c03c,
2406         .enable_mask = BIT(0),
2407         .hw.init = &(struct clk_init_data) {
2408             .name = "gcc_camss_csi2_clk",
2409             .parent_hws = (const struct clk_hw*[]){
2410                 &csi2_clk_src.clkr.hw,
2411             },
2412             .num_parents = 1,
2413             .ops = &clk_branch2_ops,
2414             .flags = CLK_SET_RATE_PARENT,
2415         }
2416     }
2417 };
2418 
2419 static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = {
2420     .halt_reg = 0x58090,
2421     .halt_check = BRANCH_HALT,
2422     .clkr = {
2423         .enable_reg = 0x58090,
2424         .enable_mask = BIT(0),
2425         .hw.init = &(struct clk_init_data) {
2426             .name = "gcc_camss_csi0_csiphy_3p_clk",
2427             .parent_hws = (const struct clk_hw*[]){
2428                 &csi0p_clk_src.clkr.hw,
2429             },
2430             .num_parents = 1,
2431             .ops = &clk_branch2_ops,
2432             .flags = CLK_SET_RATE_PARENT,
2433         }
2434     }
2435 };
2436 
2437 static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = {
2438     .halt_reg = 0x580a0,
2439     .halt_check = BRANCH_HALT,
2440     .clkr = {
2441         .enable_reg = 0x580a0,
2442         .enable_mask = BIT(0),
2443         .hw.init = &(struct clk_init_data) {
2444             .name = "gcc_camss_csi1_csiphy_3p_clk",
2445             .parent_hws = (const struct clk_hw*[]){
2446                 &csi1p_clk_src.clkr.hw,
2447             },
2448             .num_parents = 1,
2449             .ops = &clk_branch2_ops,
2450             .flags = CLK_SET_RATE_PARENT,
2451         }
2452     }
2453 };
2454 
2455 static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = {
2456     .halt_reg = 0x580b0,
2457     .halt_check = BRANCH_HALT,
2458     .clkr = {
2459         .enable_reg = 0x580b0,
2460         .enable_mask = BIT(0),
2461         .hw.init = &(struct clk_init_data) {
2462             .name = "gcc_camss_csi2_csiphy_3p_clk",
2463             .parent_hws = (const struct clk_hw*[]){
2464                 &csi2p_clk_src.clkr.hw,
2465             },
2466             .num_parents = 1,
2467             .ops = &clk_branch2_ops,
2468             .flags = CLK_SET_RATE_PARENT,
2469         }
2470     }
2471 };
2472 
2473 static struct clk_branch gcc_camss_csi0phy_clk = {
2474     .halt_reg = 0x4e048,
2475     .halt_check = BRANCH_HALT,
2476     .clkr = {
2477         .enable_reg = 0x4e048,
2478         .enable_mask = BIT(0),
2479         .hw.init = &(struct clk_init_data) {
2480             .name = "gcc_camss_csi0phy_clk",
2481             .parent_hws = (const struct clk_hw*[]){
2482                 &csi0_clk_src.clkr.hw,
2483             },
2484             .num_parents = 1,
2485             .ops = &clk_branch2_ops,
2486             .flags = CLK_SET_RATE_PARENT,
2487         }
2488     }
2489 };
2490 
2491 static struct clk_branch gcc_camss_csi1phy_clk = {
2492     .halt_reg = 0x4f048,
2493     .halt_check = BRANCH_HALT,
2494     .clkr = {
2495         .enable_reg = 0x4f048,
2496         .enable_mask = BIT(0),
2497         .hw.init = &(struct clk_init_data) {
2498             .name = "gcc_camss_csi1phy_clk",
2499             .parent_hws = (const struct clk_hw*[]){
2500                 &csi1_clk_src.clkr.hw,
2501             },
2502             .num_parents = 1,
2503             .ops = &clk_branch2_ops,
2504             .flags = CLK_SET_RATE_PARENT,
2505         }
2506     }
2507 };
2508 
2509 static struct clk_branch gcc_camss_csi2phy_clk = {
2510     .halt_reg = 0x3c048,
2511     .halt_check = BRANCH_HALT,
2512     .clkr = {
2513         .enable_reg = 0x3c048,
2514         .enable_mask = BIT(0),
2515         .hw.init = &(struct clk_init_data) {
2516             .name = "gcc_camss_csi2phy_clk",
2517             .parent_hws = (const struct clk_hw*[]){
2518                 &csi2_clk_src.clkr.hw,
2519             },
2520             .num_parents = 1,
2521             .ops = &clk_branch2_ops,
2522             .flags = CLK_SET_RATE_PARENT,
2523         }
2524     }
2525 };
2526 
2527 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2528     .halt_reg = 0x4e01c,
2529     .halt_check = BRANCH_HALT,
2530     .clkr = {
2531         .enable_reg = 0x4e01c,
2532         .enable_mask = BIT(0),
2533         .hw.init = &(struct clk_init_data) {
2534             .name = "gcc_camss_csi0phytimer_clk",
2535             .parent_hws = (const struct clk_hw*[]){
2536                 &csi0phytimer_clk_src.clkr.hw,
2537             },
2538             .num_parents = 1,
2539             .ops = &clk_branch2_ops,
2540             .flags = CLK_SET_RATE_PARENT,
2541         }
2542     }
2543 };
2544 
2545 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2546     .halt_reg = 0x4f01c,
2547     .halt_check = BRANCH_HALT,
2548     .clkr = {
2549         .enable_reg = 0x4f01c,
2550         .enable_mask = BIT(0),
2551         .hw.init = &(struct clk_init_data) {
2552             .name = "gcc_camss_csi1phytimer_clk",
2553             .parent_hws = (const struct clk_hw*[]){
2554                 &csi1phytimer_clk_src.clkr.hw,
2555             },
2556             .num_parents = 1,
2557             .ops = &clk_branch2_ops,
2558             .flags = CLK_SET_RATE_PARENT,
2559         }
2560     }
2561 };
2562 
2563 static struct clk_branch gcc_camss_csi2phytimer_clk = {
2564     .halt_reg = 0x4f068,
2565     .halt_check = BRANCH_HALT,
2566     .clkr = {
2567         .enable_reg = 0x4f068,
2568         .enable_mask = BIT(0),
2569         .hw.init = &(struct clk_init_data) {
2570             .name = "gcc_camss_csi2phytimer_clk",
2571             .parent_hws = (const struct clk_hw*[]){
2572                 &csi2phytimer_clk_src.clkr.hw,
2573             },
2574             .num_parents = 1,
2575             .ops = &clk_branch2_ops,
2576             .flags = CLK_SET_RATE_PARENT,
2577         }
2578     }
2579 };
2580 
2581 static struct clk_branch gcc_camss_csi0pix_clk = {
2582     .halt_reg = 0x4e058,
2583     .halt_check = BRANCH_HALT,
2584     .clkr = {
2585         .enable_reg = 0x4e058,
2586         .enable_mask = BIT(0),
2587         .hw.init = &(struct clk_init_data) {
2588             .name = "gcc_camss_csi0pix_clk",
2589             .parent_hws = (const struct clk_hw*[]){
2590                 &csi0_clk_src.clkr.hw,
2591             },
2592             .num_parents = 1,
2593             .ops = &clk_branch2_ops,
2594             .flags = CLK_SET_RATE_PARENT,
2595         }
2596     }
2597 };
2598 
2599 static struct clk_branch gcc_camss_csi1pix_clk = {
2600     .halt_reg = 0x4f058,
2601     .halt_check = BRANCH_HALT,
2602     .clkr = {
2603         .enable_reg = 0x4f058,
2604         .enable_mask = BIT(0),
2605         .hw.init = &(struct clk_init_data) {
2606             .name = "gcc_camss_csi1pix_clk",
2607             .parent_hws = (const struct clk_hw*[]){
2608                 &csi1_clk_src.clkr.hw,
2609             },
2610             .num_parents = 1,
2611             .ops = &clk_branch2_ops,
2612             .flags = CLK_SET_RATE_PARENT,
2613         }
2614     }
2615 };
2616 
2617 static struct clk_branch gcc_camss_csi2pix_clk = {
2618     .halt_reg = 0x3c058,
2619     .halt_check = BRANCH_HALT,
2620     .clkr = {
2621         .enable_reg = 0x3c058,
2622         .enable_mask = BIT(0),
2623         .hw.init = &(struct clk_init_data) {
2624             .name = "gcc_camss_csi2pix_clk",
2625             .parent_hws = (const struct clk_hw*[]){
2626                 &csi2_clk_src.clkr.hw,
2627             },
2628             .num_parents = 1,
2629             .ops = &clk_branch2_ops,
2630             .flags = CLK_SET_RATE_PARENT,
2631         }
2632     }
2633 };
2634 
2635 static struct clk_branch gcc_camss_csi0rdi_clk = {
2636     .halt_reg = 0x4e050,
2637     .halt_check = BRANCH_HALT,
2638     .clkr = {
2639         .enable_reg = 0x4e050,
2640         .enable_mask = BIT(0),
2641         .hw.init = &(struct clk_init_data) {
2642             .name = "gcc_camss_csi0rdi_clk",
2643             .parent_hws = (const struct clk_hw*[]){
2644                 &csi0_clk_src.clkr.hw,
2645             },
2646             .num_parents = 1,
2647             .ops = &clk_branch2_ops,
2648             .flags = CLK_SET_RATE_PARENT,
2649         }
2650     }
2651 };
2652 
2653 static struct clk_branch gcc_camss_csi1rdi_clk = {
2654     .halt_reg = 0x4f050,
2655     .halt_check = BRANCH_HALT,
2656     .clkr = {
2657         .enable_reg = 0x4f050,
2658         .enable_mask = BIT(0),
2659         .hw.init = &(struct clk_init_data) {
2660             .name = "gcc_camss_csi1rdi_clk",
2661             .parent_hws = (const struct clk_hw*[]){
2662                 &csi1_clk_src.clkr.hw,
2663             },
2664             .num_parents = 1,
2665             .ops = &clk_branch2_ops,
2666             .flags = CLK_SET_RATE_PARENT,
2667         }
2668     }
2669 };
2670 
2671 static struct clk_branch gcc_camss_csi2rdi_clk = {
2672     .halt_reg = 0x3c050,
2673     .halt_check = BRANCH_HALT,
2674     .clkr = {
2675         .enable_reg = 0x3c050,
2676         .enable_mask = BIT(0),
2677         .hw.init = &(struct clk_init_data) {
2678             .name = "gcc_camss_csi2rdi_clk",
2679             .parent_hws = (const struct clk_hw*[]){
2680                 &csi2_clk_src.clkr.hw,
2681             },
2682             .num_parents = 1,
2683             .ops = &clk_branch2_ops,
2684             .flags = CLK_SET_RATE_PARENT,
2685         }
2686     }
2687 };
2688 
2689 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2690     .halt_reg = 0x58050,
2691     .halt_check = BRANCH_HALT,
2692     .clkr = {
2693         .enable_reg = 0x58050,
2694         .enable_mask = BIT(0),
2695         .hw.init = &(struct clk_init_data) {
2696             .name = "gcc_camss_csi_vfe0_clk",
2697             .parent_hws = (const struct clk_hw*[]){
2698                 &vfe0_clk_src.clkr.hw,
2699             },
2700             .num_parents = 1,
2701             .ops = &clk_branch2_ops,
2702             .flags = CLK_SET_RATE_PARENT,
2703         }
2704     }
2705 };
2706 
2707 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2708     .halt_reg = 0x58074,
2709     .halt_check = BRANCH_HALT,
2710     .clkr = {
2711         .enable_reg = 0x58074,
2712         .enable_mask = BIT(0),
2713         .hw.init = &(struct clk_init_data) {
2714             .name = "gcc_camss_csi_vfe1_clk",
2715             .parent_hws = (const struct clk_hw*[]){
2716                 &vfe1_clk_src.clkr.hw,
2717             },
2718             .num_parents = 1,
2719             .ops = &clk_branch2_ops,
2720             .flags = CLK_SET_RATE_PARENT,
2721         }
2722     }
2723 };
2724 
2725 static struct clk_branch gcc_camss_gp0_clk = {
2726     .halt_reg = 0x54018,
2727     .halt_check = BRANCH_HALT,
2728     .clkr = {
2729         .enable_reg = 0x54018,
2730         .enable_mask = BIT(0),
2731         .hw.init = &(struct clk_init_data) {
2732             .name = "gcc_camss_gp0_clk",
2733             .parent_hws = (const struct clk_hw*[]){
2734                 &camss_gp0_clk_src.clkr.hw,
2735             },
2736             .num_parents = 1,
2737             .ops = &clk_branch2_ops,
2738             .flags = CLK_SET_RATE_PARENT,
2739         }
2740     }
2741 };
2742 
2743 static struct clk_branch gcc_camss_gp1_clk = {
2744     .halt_reg = 0x55018,
2745     .halt_check = BRANCH_HALT,
2746     .clkr = {
2747         .enable_reg = 0x55018,
2748         .enable_mask = BIT(0),
2749         .hw.init = &(struct clk_init_data) {
2750             .name = "gcc_camss_gp1_clk",
2751             .parent_hws = (const struct clk_hw*[]){
2752                 &camss_gp1_clk_src.clkr.hw,
2753             },
2754             .num_parents = 1,
2755             .ops = &clk_branch2_ops,
2756             .flags = CLK_SET_RATE_PARENT,
2757         }
2758     }
2759 };
2760 
2761 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2762     .halt_reg = 0x50004,
2763     .halt_check = BRANCH_HALT,
2764     .clkr = {
2765         .enable_reg = 0x50004,
2766         .enable_mask = BIT(0),
2767         .hw.init = &(struct clk_init_data) {
2768             .name = "gcc_camss_ispif_ahb_clk",
2769             .parent_hws = (const struct clk_hw*[]){
2770                 &camss_top_ahb_clk_src.clkr.hw,
2771             },
2772             .num_parents = 1,
2773             .ops = &clk_branch2_ops,
2774             .flags = CLK_SET_RATE_PARENT,
2775         }
2776     }
2777 };
2778 
2779 static struct clk_branch gcc_camss_jpeg0_clk = {
2780     .halt_reg = 0x57020,
2781     .halt_check = BRANCH_HALT,
2782     .clkr = {
2783         .enable_reg = 0x57020,
2784         .enable_mask = BIT(0),
2785         .hw.init = &(struct clk_init_data) {
2786             .name = "gcc_camss_jpeg0_clk",
2787             .parent_hws = (const struct clk_hw*[]){
2788                 &jpeg0_clk_src.clkr.hw,
2789             },
2790             .num_parents = 1,
2791             .ops = &clk_branch2_ops,
2792             .flags = CLK_SET_RATE_PARENT,
2793         }
2794     }
2795 };
2796 
2797 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2798     .halt_reg = 0x57024,
2799     .halt_check = BRANCH_HALT,
2800     .clkr = {
2801         .enable_reg = 0x57024,
2802         .enable_mask = BIT(0),
2803         .hw.init = &(struct clk_init_data) {
2804             .name = "gcc_camss_jpeg_ahb_clk",
2805             .parent_hws = (const struct clk_hw*[]){
2806                 &camss_top_ahb_clk_src.clkr.hw,
2807             },
2808             .num_parents = 1,
2809             .ops = &clk_branch2_ops,
2810             .flags = CLK_SET_RATE_PARENT,
2811         }
2812     }
2813 };
2814 
2815 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2816     .halt_reg = 0x57028,
2817     .halt_check = BRANCH_HALT,
2818     .clkr = {
2819         .enable_reg = 0x57028,
2820         .enable_mask = BIT(0),
2821         .hw.init = &(struct clk_init_data) {
2822             .name = "gcc_camss_jpeg_axi_clk",
2823             .ops = &clk_branch2_ops,
2824         }
2825     }
2826 };
2827 
2828 static struct clk_branch gcc_camss_mclk0_clk = {
2829     .halt_reg = 0x52018,
2830     .halt_check = BRANCH_HALT,
2831     .clkr = {
2832         .enable_reg = 0x52018,
2833         .enable_mask = BIT(0),
2834         .hw.init = &(struct clk_init_data) {
2835             .name = "gcc_camss_mclk0_clk",
2836             .parent_hws = (const struct clk_hw*[]){
2837                 &mclk0_clk_src.clkr.hw,
2838             },
2839             .num_parents = 1,
2840             .ops = &clk_branch2_ops,
2841             .flags = CLK_SET_RATE_PARENT,
2842         }
2843     }
2844 };
2845 
2846 static struct clk_branch gcc_camss_mclk1_clk = {
2847     .halt_reg = 0x53018,
2848     .halt_check = BRANCH_HALT,
2849     .clkr = {
2850         .enable_reg = 0x53018,
2851         .enable_mask = BIT(0),
2852         .hw.init = &(struct clk_init_data) {
2853             .name = "gcc_camss_mclk1_clk",
2854             .parent_hws = (const struct clk_hw*[]){
2855                 &mclk1_clk_src.clkr.hw,
2856             },
2857             .num_parents = 1,
2858             .ops = &clk_branch2_ops,
2859             .flags = CLK_SET_RATE_PARENT,
2860         }
2861     }
2862 };
2863 
2864 static struct clk_branch gcc_camss_mclk2_clk = {
2865     .halt_reg = 0x5c018,
2866     .halt_check = BRANCH_HALT,
2867     .clkr = {
2868         .enable_reg = 0x5c018,
2869         .enable_mask = BIT(0),
2870         .hw.init = &(struct clk_init_data) {
2871             .name = "gcc_camss_mclk2_clk",
2872             .parent_hws = (const struct clk_hw*[]){
2873                 &mclk2_clk_src.clkr.hw,
2874             },
2875             .num_parents = 1,
2876             .ops = &clk_branch2_ops,
2877             .flags = CLK_SET_RATE_PARENT,
2878         }
2879     }
2880 };
2881 
2882 static struct clk_branch gcc_camss_mclk3_clk = {
2883     .halt_reg = 0x5e018,
2884     .halt_check = BRANCH_HALT,
2885     .clkr = {
2886         .enable_reg = 0x5e018,
2887         .enable_mask = BIT(0),
2888         .hw.init = &(struct clk_init_data) {
2889             .name = "gcc_camss_mclk3_clk",
2890             .parent_hws = (const struct clk_hw*[]){
2891                 &mclk3_clk_src.clkr.hw,
2892             },
2893             .num_parents = 1,
2894             .ops = &clk_branch2_ops,
2895             .flags = CLK_SET_RATE_PARENT,
2896         }
2897     }
2898 };
2899 
2900 static struct clk_branch gcc_camss_micro_ahb_clk = {
2901     .halt_reg = 0x5600c,
2902     .halt_check = BRANCH_HALT,
2903     .clkr = {
2904         .enable_reg = 0x5600c,
2905         .enable_mask = BIT(0),
2906         .hw.init = &(struct clk_init_data) {
2907             .name = "gcc_camss_micro_ahb_clk",
2908             .parent_hws = (const struct clk_hw*[]){
2909                 &camss_top_ahb_clk_src.clkr.hw,
2910             },
2911             .num_parents = 1,
2912             .ops = &clk_branch2_ops,
2913             .flags = CLK_SET_RATE_PARENT,
2914         }
2915     }
2916 };
2917 
2918 static struct clk_branch gcc_camss_top_ahb_clk = {
2919     .halt_reg = 0x5a014,
2920     .halt_check = BRANCH_HALT,
2921     .clkr = {
2922         .enable_reg = 0x5a014,
2923         .enable_mask = BIT(0),
2924         .hw.init = &(struct clk_init_data) {
2925             .name = "gcc_camss_top_ahb_clk",
2926             .parent_hws = (const struct clk_hw*[]){
2927                 &camss_top_ahb_clk_src.clkr.hw,
2928             },
2929             .num_parents = 1,
2930             .ops = &clk_branch2_ops,
2931             .flags = CLK_SET_RATE_PARENT,
2932         }
2933     }
2934 };
2935 
2936 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2937     .halt_reg = 0x58044,
2938     .halt_check = BRANCH_HALT,
2939     .clkr = {
2940         .enable_reg = 0x58044,
2941         .enable_mask = BIT(0),
2942         .hw.init = &(struct clk_init_data) {
2943             .name = "gcc_camss_vfe0_ahb_clk",
2944             .parent_hws = (const struct clk_hw*[]){
2945                 &camss_top_ahb_clk_src.clkr.hw,
2946             },
2947             .num_parents = 1,
2948             .ops = &clk_branch2_ops,
2949             .flags = CLK_SET_RATE_PARENT,
2950         }
2951     }
2952 };
2953 
2954 static struct clk_branch gcc_camss_vfe0_axi_clk = {
2955     .halt_reg = 0x58048,
2956     .halt_check = BRANCH_HALT,
2957     .clkr = {
2958         .enable_reg = 0x58048,
2959         .enable_mask = BIT(0),
2960         .hw.init = &(struct clk_init_data) {
2961             .name = "gcc_camss_vfe0_axi_clk",
2962             .ops = &clk_branch2_ops,
2963         }
2964     }
2965 };
2966 
2967 static struct clk_branch gcc_camss_vfe0_clk = {
2968     .halt_reg = 0x58038,
2969     .halt_check = BRANCH_HALT,
2970     .clkr = {
2971         .enable_reg = 0x58038,
2972         .enable_mask = BIT(0),
2973         .hw.init = &(struct clk_init_data) {
2974             .name = "gcc_camss_vfe0_clk",
2975             .parent_hws = (const struct clk_hw*[]){
2976                 &vfe0_clk_src.clkr.hw,
2977             },
2978             .num_parents = 1,
2979             .ops = &clk_branch2_ops,
2980             .flags = CLK_SET_RATE_PARENT,
2981         }
2982     }
2983 };
2984 
2985 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2986     .halt_reg = 0x58060,
2987     .halt_check = BRANCH_HALT,
2988     .clkr = {
2989         .enable_reg = 0x58060,
2990         .enable_mask = BIT(0),
2991         .hw.init = &(struct clk_init_data) {
2992             .name = "gcc_camss_vfe1_ahb_clk",
2993             .parent_hws = (const struct clk_hw*[]){
2994                 &camss_top_ahb_clk_src.clkr.hw,
2995             },
2996             .num_parents = 1,
2997             .ops = &clk_branch2_ops,
2998             .flags = CLK_SET_RATE_PARENT,
2999         }
3000     }
3001 };
3002 
3003 static struct clk_branch gcc_camss_vfe1_axi_clk = {
3004     .halt_reg = 0x58068,
3005     .halt_check = BRANCH_HALT,
3006     .clkr = {
3007         .enable_reg = 0x58068,
3008         .enable_mask = BIT(0),
3009         .hw.init = &(struct clk_init_data) {
3010             .name = "gcc_camss_vfe1_axi_clk",
3011             .ops = &clk_branch2_ops,
3012         }
3013     }
3014 };
3015 
3016 static struct clk_branch gcc_camss_vfe1_clk = {
3017     .halt_reg = 0x5805c,
3018     .halt_check = BRANCH_HALT,
3019     .clkr = {
3020         .enable_reg = 0x5805c,
3021         .enable_mask = BIT(0),
3022         .hw.init = &(struct clk_init_data) {
3023             .name = "gcc_camss_vfe1_clk",
3024             .parent_hws = (const struct clk_hw*[]){
3025                 &vfe1_clk_src.clkr.hw,
3026             },
3027             .num_parents = 1,
3028             .ops = &clk_branch2_ops,
3029             .flags = CLK_SET_RATE_PARENT,
3030         }
3031     }
3032 };
3033 
3034 static struct clk_branch gcc_cpp_tbu_clk = {
3035     .halt_reg = 0x12040,
3036     .halt_check = BRANCH_HALT_VOTED,
3037     .clkr = {
3038         .enable_reg = 0x4500c,
3039         .enable_mask = BIT(14),
3040         .hw.init = &(struct clk_init_data) {
3041             .name = "gcc_cpp_tbu_clk",
3042             .ops = &clk_branch2_ops,
3043         }
3044     }
3045 };
3046 
3047 static struct clk_branch gcc_crypto_ahb_clk = {
3048     .halt_reg = 0x16024,
3049     .halt_check = BRANCH_HALT_VOTED,
3050     .clkr = {
3051         .enable_reg = 0x45004,
3052         .enable_mask = BIT(0),
3053         .hw.init = &(struct clk_init_data) {
3054             .name = "gcc_crypto_ahb_clk",
3055             .ops = &clk_branch2_ops,
3056         }
3057     }
3058 };
3059 
3060 static struct clk_branch gcc_crypto_axi_clk = {
3061     .halt_reg = 0x16020,
3062     .halt_check = BRANCH_HALT_VOTED,
3063     .clkr = {
3064         .enable_reg = 0x45004,
3065         .enable_mask = BIT(1),
3066         .hw.init = &(struct clk_init_data) {
3067             .name = "gcc_crypto_axi_clk",
3068             .ops = &clk_branch2_ops,
3069         }
3070     }
3071 };
3072 
3073 static struct clk_branch gcc_crypto_clk = {
3074     .halt_reg = 0x1601c,
3075     .halt_check = BRANCH_HALT_VOTED,
3076     .clkr = {
3077         .enable_reg = 0x45004,
3078         .enable_mask = BIT(2),
3079         .hw.init = &(struct clk_init_data) {
3080             .name = "gcc_crypto_clk",
3081             .parent_hws = (const struct clk_hw*[]){
3082                 &crypto_clk_src.clkr.hw,
3083             },
3084             .num_parents = 1,
3085             .ops = &clk_branch2_ops,
3086             .flags = CLK_SET_RATE_PARENT,
3087         }
3088     }
3089 };
3090 
3091 static struct clk_branch gcc_dcc_clk = {
3092     .halt_reg = 0x77004,
3093     .halt_check = BRANCH_HALT,
3094     .clkr = {
3095         .enable_reg = 0x77004,
3096         .enable_mask = BIT(0),
3097         .hw.init = &(struct clk_init_data) {
3098             .name = "gcc_dcc_clk",
3099             .ops = &clk_branch2_ops,
3100         }
3101     }
3102 };
3103 
3104 static struct clk_branch gcc_gp1_clk = {
3105     .halt_reg = 0x08000,
3106     .halt_check = BRANCH_HALT,
3107     .clkr = {
3108         .enable_reg = 0x08000,
3109         .enable_mask = BIT(0),
3110         .hw.init = &(struct clk_init_data) {
3111             .name = "gcc_gp1_clk",
3112             .parent_hws = (const struct clk_hw*[]){
3113                 &gp1_clk_src.clkr.hw,
3114             },
3115             .num_parents = 1,
3116             .ops = &clk_branch2_ops,
3117             .flags = CLK_SET_RATE_PARENT,
3118         }
3119     }
3120 };
3121 
3122 static struct clk_branch gcc_gp2_clk = {
3123     .halt_reg = 0x09000,
3124     .halt_check = BRANCH_HALT,
3125     .clkr = {
3126         .enable_reg = 0x09000,
3127         .enable_mask = BIT(0),
3128         .hw.init = &(struct clk_init_data) {
3129             .name = "gcc_gp2_clk",
3130             .parent_hws = (const struct clk_hw*[]){
3131                 &gp2_clk_src.clkr.hw,
3132             },
3133             .num_parents = 1,
3134             .ops = &clk_branch2_ops,
3135             .flags = CLK_SET_RATE_PARENT,
3136         }
3137     }
3138 };
3139 
3140 static struct clk_branch gcc_gp3_clk = {
3141     .halt_reg = 0x0a000,
3142     .halt_check = BRANCH_HALT,
3143     .clkr = {
3144         .enable_reg = 0x0a000,
3145         .enable_mask = BIT(0),
3146         .hw.init = &(struct clk_init_data) {
3147             .name = "gcc_gp3_clk",
3148             .parent_hws = (const struct clk_hw*[]){
3149                 &gp3_clk_src.clkr.hw,
3150             },
3151             .num_parents = 1,
3152             .ops = &clk_branch2_ops,
3153             .flags = CLK_SET_RATE_PARENT,
3154         }
3155     }
3156 };
3157 
3158 static struct clk_branch gcc_jpeg_tbu_clk = {
3159     .halt_reg = 0x12034,
3160     .halt_check = BRANCH_HALT_VOTED,
3161     .clkr = {
3162         .enable_reg = 0x4500c,
3163         .enable_mask = BIT(10),
3164         .hw.init = &(struct clk_init_data) {
3165             .name = "gcc_jpeg_tbu_clk",
3166             .ops = &clk_branch2_ops,
3167         }
3168     }
3169 };
3170 
3171 static struct clk_branch gcc_mdp_tbu_clk = {
3172     .halt_reg = 0x1201c,
3173     .halt_check = BRANCH_HALT_VOTED,
3174     .clkr = {
3175         .enable_reg = 0x4500c,
3176         .enable_mask = BIT(4),
3177         .hw.init = &(struct clk_init_data) {
3178             .name = "gcc_mdp_tbu_clk",
3179             .ops = &clk_branch2_ops,
3180         }
3181     }
3182 };
3183 
3184 static struct clk_branch gcc_mdss_ahb_clk = {
3185     .halt_reg = 0x4d07c,
3186     .halt_check = BRANCH_HALT,
3187     .clkr = {
3188         .enable_reg = 0x4d07c,
3189         .enable_mask = BIT(0),
3190         .hw.init = &(struct clk_init_data) {
3191             .name = "gcc_mdss_ahb_clk",
3192             .ops = &clk_branch2_ops,
3193         }
3194     }
3195 };
3196 
3197 static struct clk_branch gcc_mdss_axi_clk = {
3198     .halt_reg = 0x4d080,
3199     .halt_check = BRANCH_HALT,
3200     .clkr = {
3201         .enable_reg = 0x4d080,
3202         .enable_mask = BIT(0),
3203         .hw.init = &(struct clk_init_data) {
3204             .name = "gcc_mdss_axi_clk",
3205             .ops = &clk_branch2_ops,
3206         }
3207     }
3208 };
3209 
3210 static struct clk_branch gcc_mdss_byte0_clk = {
3211     .halt_reg = 0x4d094,
3212     .halt_check = BRANCH_HALT,
3213     .clkr = {
3214         .enable_reg = 0x4d094,
3215         .enable_mask = BIT(0),
3216         .hw.init = &(struct clk_init_data) {
3217             .name = "gcc_mdss_byte0_clk",
3218             .parent_hws = (const struct clk_hw*[]){
3219                 &byte0_clk_src.clkr.hw,
3220             },
3221             .num_parents = 1,
3222             .ops = &clk_branch2_ops,
3223             .flags = CLK_SET_RATE_PARENT,
3224         }
3225     }
3226 };
3227 
3228 static struct clk_branch gcc_mdss_byte1_clk = {
3229     .halt_reg = 0x4d0a0,
3230     .halt_check = BRANCH_HALT,
3231     .clkr = {
3232         .enable_reg = 0x4d0a0,
3233         .enable_mask = BIT(0),
3234         .hw.init = &(struct clk_init_data) {
3235             .name = "gcc_mdss_byte1_clk",
3236             .parent_hws = (const struct clk_hw*[]){
3237                 &byte1_clk_src.clkr.hw,
3238             },
3239             .num_parents = 1,
3240             .ops = &clk_branch2_ops,
3241             .flags = CLK_SET_RATE_PARENT,
3242         }
3243     }
3244 };
3245 
3246 static struct clk_branch gcc_mdss_esc0_clk = {
3247     .halt_reg = 0x4d098,
3248     .halt_check = BRANCH_HALT,
3249     .clkr = {
3250         .enable_reg = 0x4d098,
3251         .enable_mask = BIT(0),
3252         .hw.init = &(struct clk_init_data) {
3253             .name = "gcc_mdss_esc0_clk",
3254             .parent_hws = (const struct clk_hw*[]){
3255                 &esc0_clk_src.clkr.hw,
3256             },
3257             .num_parents = 1,
3258             .ops = &clk_branch2_ops,
3259             .flags = CLK_SET_RATE_PARENT,
3260         }
3261     }
3262 };
3263 
3264 static struct clk_branch gcc_mdss_esc1_clk = {
3265     .halt_reg = 0x4d09c,
3266     .halt_check = BRANCH_HALT,
3267     .clkr = {
3268         .enable_reg = 0x4d09c,
3269         .enable_mask = BIT(0),
3270         .hw.init = &(struct clk_init_data) {
3271             .name = "gcc_mdss_esc1_clk",
3272             .parent_hws = (const struct clk_hw*[]){
3273                 &esc1_clk_src.clkr.hw,
3274             },
3275             .num_parents = 1,
3276             .ops = &clk_branch2_ops,
3277             .flags = CLK_SET_RATE_PARENT,
3278         }
3279     }
3280 };
3281 
3282 static struct clk_branch gcc_mdss_mdp_clk = {
3283     .halt_reg = 0x4d088,
3284     .halt_check = BRANCH_HALT,
3285     .clkr = {
3286         .enable_reg = 0x4d088,
3287         .enable_mask = BIT(0),
3288         .hw.init = &(struct clk_init_data) {
3289             .name = "gcc_mdss_mdp_clk",
3290             .parent_hws = (const struct clk_hw*[]){
3291                 &mdp_clk_src.clkr.hw,
3292             },
3293             .num_parents = 1,
3294             .ops = &clk_branch2_ops,
3295             .flags = CLK_SET_RATE_PARENT,
3296         }
3297     }
3298 };
3299 
3300 static struct clk_branch gcc_mdss_pclk0_clk = {
3301     .halt_reg = 0x4d084,
3302     .halt_check = BRANCH_HALT,
3303     .clkr = {
3304         .enable_reg = 0x4d084,
3305         .enable_mask = BIT(0),
3306         .hw.init = &(struct clk_init_data) {
3307             .name = "gcc_mdss_pclk0_clk",
3308             .parent_hws = (const struct clk_hw*[]){
3309                 &pclk0_clk_src.clkr.hw,
3310             },
3311             .num_parents = 1,
3312             .ops = &clk_branch2_ops,
3313             .flags = CLK_SET_RATE_PARENT,
3314         }
3315     }
3316 };
3317 
3318 static struct clk_branch gcc_mdss_pclk1_clk = {
3319     .halt_reg = 0x4d0a4,
3320     .halt_check = BRANCH_HALT,
3321     .clkr = {
3322         .enable_reg = 0x4d0a4,
3323         .enable_mask = BIT(0),
3324         .hw.init = &(struct clk_init_data) {
3325             .name = "gcc_mdss_pclk1_clk",
3326             .parent_hws = (const struct clk_hw*[]){
3327                 &pclk1_clk_src.clkr.hw,
3328             },
3329             .num_parents = 1,
3330             .ops = &clk_branch2_ops,
3331             .flags = CLK_SET_RATE_PARENT,
3332         }
3333     }
3334 };
3335 
3336 static struct clk_branch gcc_mdss_vsync_clk = {
3337     .halt_reg = 0x4d090,
3338     .halt_check = BRANCH_HALT,
3339     .clkr = {
3340         .enable_reg = 0x4d090,
3341         .enable_mask = BIT(0),
3342         .hw.init = &(struct clk_init_data) {
3343             .name = "gcc_mdss_vsync_clk",
3344             .parent_hws = (const struct clk_hw*[]){
3345                 &vsync_clk_src.clkr.hw,
3346             },
3347             .num_parents = 1,
3348             .ops = &clk_branch2_ops,
3349             .flags = CLK_SET_RATE_PARENT,
3350         }
3351     }
3352 };
3353 
3354 static struct clk_branch gcc_mss_cfg_ahb_clk = {
3355     .halt_reg = 0x49000,
3356     .halt_check = BRANCH_HALT,
3357     .clkr = {
3358         .enable_reg = 0x49000,
3359         .enable_mask = BIT(0),
3360         .hw.init = &(struct clk_init_data) {
3361             .name = "gcc_mss_cfg_ahb_clk",
3362             .ops = &clk_branch2_ops,
3363         }
3364     }
3365 };
3366 
3367 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3368     .halt_reg = 0x49004,
3369     .halt_check = BRANCH_HALT,
3370     .clkr = {
3371         .enable_reg = 0x49004,
3372         .enable_mask = BIT(0),
3373         .hw.init = &(struct clk_init_data) {
3374             .name = "gcc_mss_q6_bimc_axi_clk",
3375             .ops = &clk_branch2_ops,
3376         }
3377     }
3378 };
3379 
3380 static struct clk_branch gcc_oxili_ahb_clk = {
3381     .halt_reg = 0x59028,
3382     .halt_check = BRANCH_HALT,
3383     .clkr = {
3384         .enable_reg = 0x59028,
3385         .enable_mask = BIT(0),
3386         .hw.init = &(struct clk_init_data) {
3387             .name = "gcc_oxili_ahb_clk",
3388             .ops = &clk_branch2_ops,
3389         }
3390     }
3391 };
3392 
3393 static struct clk_branch gcc_oxili_aon_clk = {
3394     .halt_reg = 0x59044,
3395     .halt_check = BRANCH_HALT,
3396     .clkr = {
3397         .enable_reg = 0x59044,
3398         .enable_mask = BIT(0),
3399         .hw.init = &(struct clk_init_data) {
3400             .name = "gcc_oxili_aon_clk",
3401             .parent_hws = (const struct clk_hw*[]){
3402                 &gfx3d_clk_src.clkr.hw,
3403             },
3404             .num_parents = 1,
3405             .ops = &clk_branch2_ops,
3406         }
3407     }
3408 };
3409 
3410 static struct clk_branch gcc_oxili_gfx3d_clk = {
3411     .halt_reg = 0x59020,
3412     .halt_check = BRANCH_HALT,
3413     .clkr = {
3414         .enable_reg = 0x59020,
3415         .enable_mask = BIT(0),
3416         .hw.init = &(struct clk_init_data) {
3417             .name = "gcc_oxili_gfx3d_clk",
3418             .parent_hws = (const struct clk_hw*[]){
3419                 &gfx3d_clk_src.clkr.hw,
3420             },
3421             .num_parents = 1,
3422             .ops = &clk_branch2_ops,
3423             .flags = CLK_SET_RATE_PARENT,
3424         }
3425     }
3426 };
3427 
3428 static struct clk_branch gcc_oxili_timer_clk = {
3429     .halt_reg = 0x59040,
3430     .halt_check = BRANCH_HALT,
3431     .clkr = {
3432         .enable_reg = 0x59040,
3433         .enable_mask = BIT(0),
3434         .hw.init = &(struct clk_init_data) {
3435             .name = "gcc_oxili_timer_clk",
3436             .ops = &clk_branch2_ops,
3437         }
3438     }
3439 };
3440 
3441 static struct clk_branch gcc_pcnoc_usb3_axi_clk = {
3442     .halt_reg = 0x3f038,
3443     .halt_check = BRANCH_HALT,
3444     .clkr = {
3445         .enable_reg = 0x3f038,
3446         .enable_mask = BIT(0),
3447         .hw.init = &(struct clk_init_data) {
3448             .name = "gcc_pcnoc_usb3_axi_clk",
3449             .parent_hws = (const struct clk_hw*[]){
3450                 &usb30_master_clk_src.clkr.hw,
3451             },
3452             .num_parents = 1,
3453             .ops = &clk_branch2_ops,
3454             .flags = CLK_SET_RATE_PARENT,
3455         }
3456     }
3457 };
3458 
3459 static struct clk_branch gcc_pdm2_clk = {
3460     .halt_reg = 0x4400c,
3461     .halt_check = BRANCH_HALT,
3462     .clkr = {
3463         .enable_reg = 0x4400c,
3464         .enable_mask = BIT(0),
3465         .hw.init = &(struct clk_init_data) {
3466             .name = "gcc_pdm2_clk",
3467             .parent_hws = (const struct clk_hw*[]){
3468                 &pdm2_clk_src.clkr.hw,
3469             },
3470             .num_parents = 1,
3471             .ops = &clk_branch2_ops,
3472             .flags = CLK_SET_RATE_PARENT,
3473         }
3474     }
3475 };
3476 
3477 static struct clk_branch gcc_pdm_ahb_clk = {
3478     .halt_reg = 0x44004,
3479     .halt_check = BRANCH_HALT,
3480     .clkr = {
3481         .enable_reg = 0x44004,
3482         .enable_mask = BIT(0),
3483         .hw.init = &(struct clk_init_data) {
3484             .name = "gcc_pdm_ahb_clk",
3485             .ops = &clk_branch2_ops,
3486         }
3487     }
3488 };
3489 
3490 static struct clk_branch gcc_prng_ahb_clk = {
3491     .halt_reg = 0x13004,
3492     .halt_check = BRANCH_HALT_VOTED,
3493     .clkr = {
3494         .enable_reg = 0x45004,
3495         .enable_mask = BIT(8),
3496         .hw.init = &(struct clk_init_data) {
3497             .name = "gcc_prng_ahb_clk",
3498             .ops = &clk_branch2_ops,
3499         }
3500     }
3501 };
3502 
3503 static struct clk_branch gcc_qdss_dap_clk = {
3504     .halt_reg = 0x29084,
3505     .halt_check = BRANCH_HALT_VOTED,
3506     .clkr = {
3507         .enable_reg = 0x45004,
3508         .enable_mask = BIT(11),
3509         .hw.init = &(struct clk_init_data) {
3510             .name = "gcc_qdss_dap_clk",
3511             .ops = &clk_branch2_ops,
3512         }
3513     }
3514 };
3515 
3516 static struct clk_branch gcc_qusb_ref_clk = {
3517     .halt_reg = 0,
3518     .halt_check = BRANCH_HALT_SKIP,
3519     .clkr = {
3520         .enable_reg = 0x41030,
3521         .enable_mask = BIT(0),
3522         .hw.init = &(struct clk_init_data) {
3523             .name = "gcc_qusb_ref_clk",
3524             .ops = &clk_branch2_ops,
3525         }
3526     }
3527 };
3528 
3529 static struct clk_branch gcc_rbcpr_gfx_clk = {
3530     .halt_reg = 0x3a004,
3531     .halt_check = BRANCH_HALT,
3532     .clkr = {
3533         .enable_reg = 0x3a004,
3534         .enable_mask = BIT(0),
3535         .hw.init = &(struct clk_init_data) {
3536             .name = "gcc_rbcpr_gfx_clk",
3537             .parent_hws = (const struct clk_hw*[]){
3538                 &rbcpr_gfx_clk_src.clkr.hw,
3539             },
3540             .num_parents = 1,
3541             .ops = &clk_branch2_ops,
3542             .flags = CLK_SET_RATE_PARENT,
3543         }
3544     }
3545 };
3546 
3547 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3548     .halt_reg = 0x5d014,
3549     .halt_check = BRANCH_HALT,
3550     .clkr = {
3551         .enable_reg = 0x5d014,
3552         .enable_mask = BIT(0),
3553         .hw.init = &(struct clk_init_data) {
3554             .name = "gcc_sdcc1_ice_core_clk",
3555             .parent_hws = (const struct clk_hw*[]){
3556                 &sdcc1_ice_core_clk_src.clkr.hw,
3557             },
3558             .num_parents = 1,
3559             .ops = &clk_branch2_ops,
3560             .flags = CLK_SET_RATE_PARENT,
3561         }
3562     }
3563 };
3564 
3565 static struct clk_branch gcc_sdcc1_ahb_clk = {
3566     .halt_reg = 0x4201c,
3567     .halt_check = BRANCH_HALT,
3568     .clkr = {
3569         .enable_reg = 0x4201c,
3570         .enable_mask = BIT(0),
3571         .hw.init = &(struct clk_init_data) {
3572             .name = "gcc_sdcc1_ahb_clk",
3573             .ops = &clk_branch2_ops,
3574         }
3575     }
3576 };
3577 
3578 static struct clk_branch gcc_sdcc2_ahb_clk = {
3579     .halt_reg = 0x4301c,
3580     .halt_check = BRANCH_HALT,
3581     .clkr = {
3582         .enable_reg = 0x4301c,
3583         .enable_mask = BIT(0),
3584         .hw.init = &(struct clk_init_data) {
3585             .name = "gcc_sdcc2_ahb_clk",
3586             .ops = &clk_branch2_ops,
3587         }
3588     }
3589 };
3590 
3591 static struct clk_branch gcc_sdcc1_apps_clk = {
3592     .halt_reg = 0x42018,
3593     .halt_check = BRANCH_HALT,
3594     .clkr = {
3595         .enable_reg = 0x42018,
3596         .enable_mask = BIT(0),
3597         .hw.init = &(struct clk_init_data) {
3598             .name = "gcc_sdcc1_apps_clk",
3599             .parent_hws = (const struct clk_hw*[]){
3600                 &sdcc1_apps_clk_src.clkr.hw,
3601             },
3602             .num_parents = 1,
3603             .ops = &clk_branch2_ops,
3604             .flags = CLK_SET_RATE_PARENT,
3605         }
3606     }
3607 };
3608 
3609 static struct clk_branch gcc_sdcc2_apps_clk = {
3610     .halt_reg = 0x43018,
3611     .halt_check = BRANCH_HALT,
3612     .clkr = {
3613         .enable_reg = 0x43018,
3614         .enable_mask = BIT(0),
3615         .hw.init = &(struct clk_init_data) {
3616             .name = "gcc_sdcc2_apps_clk",
3617             .parent_hws = (const struct clk_hw*[]){
3618                 &sdcc2_apps_clk_src.clkr.hw,
3619             },
3620             .num_parents = 1,
3621             .ops = &clk_branch2_ops,
3622             .flags = CLK_SET_RATE_PARENT,
3623         }
3624     }
3625 };
3626 
3627 static struct clk_branch gcc_smmu_cfg_clk = {
3628     .halt_reg = 0x12038,
3629     .halt_check = BRANCH_HALT_VOTED,
3630     .clkr = {
3631         .enable_reg = 0x4500c,
3632         .enable_mask = BIT(12),
3633         .hw.init = &(struct clk_init_data) {
3634             .name = "gcc_smmu_cfg_clk",
3635             .ops = &clk_branch2_ops,
3636         }
3637     }
3638 };
3639 
3640 static struct clk_branch gcc_usb30_master_clk = {
3641     .halt_reg = 0x3f000,
3642     .halt_check = BRANCH_HALT,
3643     .clkr = {
3644         .enable_reg = 0x3f000,
3645         .enable_mask = BIT(0),
3646         .hw.init = &(struct clk_init_data) {
3647             .name = "gcc_usb30_master_clk",
3648             .parent_hws = (const struct clk_hw*[]){
3649                 &usb30_master_clk_src.clkr.hw,
3650             },
3651             .num_parents = 1,
3652             .ops = &clk_branch2_ops,
3653             .flags = CLK_SET_RATE_PARENT,
3654         }
3655     }
3656 };
3657 
3658 static struct clk_branch gcc_usb30_mock_utmi_clk = {
3659     .halt_reg = 0x3f008,
3660     .halt_check = BRANCH_HALT,
3661     .clkr = {
3662         .enable_reg = 0x3f008,
3663         .enable_mask = BIT(0),
3664         .hw.init = &(struct clk_init_data) {
3665             .name = "gcc_usb30_mock_utmi_clk",
3666             .parent_hws = (const struct clk_hw*[]){
3667                 &usb30_mock_utmi_clk_src.clkr.hw,
3668             },
3669             .num_parents = 1,
3670             .ops = &clk_branch2_ops,
3671             .flags = CLK_SET_RATE_PARENT,
3672         }
3673     }
3674 };
3675 
3676 static struct clk_branch gcc_usb30_sleep_clk = {
3677     .halt_reg = 0x3f004,
3678     .halt_check = BRANCH_HALT,
3679     .clkr = {
3680         .enable_reg = 0x3f004,
3681         .enable_mask = BIT(0),
3682         .hw.init = &(struct clk_init_data) {
3683             .name = "gcc_usb30_sleep_clk",
3684             .ops = &clk_branch2_ops,
3685         }
3686     }
3687 };
3688 
3689 static struct clk_branch gcc_usb3_aux_clk = {
3690     .halt_reg = 0x3f044,
3691     .halt_check = BRANCH_HALT,
3692     .clkr = {
3693         .enable_reg = 0x3f044,
3694         .enable_mask = BIT(0),
3695         .hw.init = &(struct clk_init_data) {
3696             .name = "gcc_usb3_aux_clk",
3697             .parent_hws = (const struct clk_hw*[]){
3698                 &usb3_aux_clk_src.clkr.hw,
3699             },
3700             .num_parents = 1,
3701             .ops = &clk_branch2_ops,
3702             .flags = CLK_SET_RATE_PARENT,
3703         }
3704     }
3705 };
3706 
3707 static struct clk_branch gcc_usb3_pipe_clk = {
3708     .halt_reg = 0,
3709     .halt_check = BRANCH_HALT_DELAY,
3710     .clkr = {
3711         .enable_reg = 0x3f040,
3712         .enable_mask = BIT(0),
3713         .hw.init = &(struct clk_init_data) {
3714             .name = "gcc_usb3_pipe_clk",
3715             .ops = &clk_branch2_ops,
3716         }
3717     }
3718 };
3719 
3720 static struct clk_branch gcc_usb_phy_cfg_ahb_clk = {
3721     .halt_reg = 0x3f080,
3722     .halt_check = BRANCH_VOTED,
3723     .clkr = {
3724         .enable_reg = 0x3f080,
3725         .enable_mask = BIT(0),
3726         .hw.init = &(struct clk_init_data) {
3727             .name = "gcc_usb_phy_cfg_ahb_clk",
3728             .ops = &clk_branch2_ops,
3729         }
3730     }
3731 };
3732 
3733 static struct clk_branch gcc_usb_ss_ref_clk = {
3734     .halt_reg = 0,
3735     .halt_check = BRANCH_HALT_SKIP,
3736     .clkr = {
3737         .enable_reg = 0x3f07c,
3738         .enable_mask = BIT(0),
3739         .hw.init = &(struct clk_init_data) {
3740             .name = "gcc_usb_ss_ref_clk",
3741             .ops = &clk_branch2_ops,
3742         }
3743     }
3744 };
3745 
3746 static struct clk_branch gcc_venus0_ahb_clk = {
3747     .halt_reg = 0x4c020,
3748     .halt_check = BRANCH_HALT,
3749     .clkr = {
3750         .enable_reg = 0x4c020,
3751         .enable_mask = BIT(0),
3752         .hw.init = &(struct clk_init_data) {
3753             .name = "gcc_venus0_ahb_clk",
3754             .ops = &clk_branch2_ops,
3755         }
3756     }
3757 };
3758 
3759 static struct clk_branch gcc_venus0_axi_clk = {
3760     .halt_reg = 0x4c024,
3761     .halt_check = BRANCH_HALT,
3762     .clkr = {
3763         .enable_reg = 0x4c024,
3764         .enable_mask = BIT(0),
3765         .hw.init = &(struct clk_init_data) {
3766             .name = "gcc_venus0_axi_clk",
3767             .ops = &clk_branch2_ops,
3768         }
3769     }
3770 };
3771 
3772 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3773     .halt_reg = 0x4c02c,
3774     .halt_check = BRANCH_HALT,
3775     .clkr = {
3776         .enable_reg = 0x4c02c,
3777         .enable_mask = BIT(0),
3778         .hw.init = &(struct clk_init_data) {
3779             .name = "gcc_venus0_core0_vcodec0_clk",
3780             .parent_hws = (const struct clk_hw*[]){
3781                 &vcodec0_clk_src.clkr.hw,
3782             },
3783             .num_parents = 1,
3784             .ops = &clk_branch2_ops,
3785             .flags = CLK_SET_RATE_PARENT,
3786         }
3787     }
3788 };
3789 
3790 static struct clk_branch gcc_venus0_vcodec0_clk = {
3791     .halt_reg = 0x4c01c,
3792     .halt_check = BRANCH_HALT,
3793     .clkr = {
3794         .enable_reg = 0x4c01c,
3795         .enable_mask = BIT(0),
3796         .hw.init = &(struct clk_init_data) {
3797             .name = "gcc_venus0_vcodec0_clk",
3798             .parent_hws = (const struct clk_hw*[]){
3799                 &vcodec0_clk_src.clkr.hw,
3800             },
3801             .num_parents = 1,
3802             .ops = &clk_branch2_ops,
3803             .flags = CLK_SET_RATE_PARENT,
3804         }
3805     }
3806 };
3807 
3808 static struct clk_branch gcc_venus_tbu_clk = {
3809     .halt_reg = 0x12014,
3810     .halt_check = BRANCH_HALT_VOTED,
3811     .clkr = {
3812         .enable_reg = 0x4500c,
3813         .enable_mask = BIT(5),
3814         .hw.init = &(struct clk_init_data) {
3815             .name = "gcc_venus_tbu_clk",
3816             .ops = &clk_branch2_ops,
3817         }
3818     }
3819 };
3820 
3821 static struct clk_branch gcc_vfe1_tbu_clk = {
3822     .halt_reg = 0x12090,
3823     .halt_check = BRANCH_HALT_VOTED,
3824     .clkr = {
3825         .enable_reg = 0x4500c,
3826         .enable_mask = BIT(17),
3827         .hw.init = &(struct clk_init_data) {
3828             .name = "gcc_vfe1_tbu_clk",
3829             .ops = &clk_branch2_ops,
3830         }
3831     }
3832 };
3833 
3834 static struct clk_branch gcc_vfe_tbu_clk = {
3835     .halt_reg = 0x1203c,
3836     .halt_check = BRANCH_HALT_VOTED,
3837     .clkr = {
3838         .enable_reg = 0x4500c,
3839         .enable_mask = BIT(9),
3840         .hw.init = &(struct clk_init_data) {
3841             .name = "gcc_vfe_tbu_clk",
3842             .ops = &clk_branch2_ops,
3843         }
3844     }
3845 };
3846 
3847 static struct gdsc usb30_gdsc = {
3848     .gdscr = 0x3f078,
3849     .pd = {
3850         .name = "usb30_gdsc",
3851     },
3852     .pwrsts = PWRSTS_OFF_ON,
3853     /*
3854      * FIXME: dwc3 usb gadget cannot resume after GDSC power off
3855      * dwc3 7000000.dwc3: failed to enable ep0out
3856      */
3857     .flags = ALWAYS_ON,
3858 };
3859 
3860 static struct gdsc venus_gdsc = {
3861     .gdscr = 0x4c018,
3862     .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3863     .cxc_count = 2,
3864     .pd = {
3865         .name = "venus_gdsc",
3866     },
3867     .pwrsts = PWRSTS_OFF_ON,
3868 };
3869 
3870 static struct gdsc venus_core0_gdsc = {
3871     .gdscr = 0x4c028,
3872     .cxcs = (unsigned int []){ 0x4c02c },
3873     .cxc_count = 1,
3874     .pd = {
3875         .name = "venus_core0",
3876     },
3877     .flags = HW_CTRL,
3878     .pwrsts = PWRSTS_OFF_ON,
3879 };
3880 
3881 static struct gdsc mdss_gdsc = {
3882     .gdscr = 0x4d078,
3883     .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3884     .cxc_count = 2,
3885     .pd = {
3886         .name = "mdss_gdsc",
3887     },
3888     .pwrsts = PWRSTS_OFF_ON,
3889 };
3890 
3891 static struct gdsc jpeg_gdsc = {
3892     .gdscr = 0x5701c,
3893     .cxcs = (unsigned int []){ 0x57020, 0x57028 },
3894     .cxc_count = 2,
3895     .pd = {
3896         .name = "jpeg_gdsc",
3897     },
3898     .pwrsts = PWRSTS_OFF_ON,
3899 };
3900 
3901 static struct gdsc vfe0_gdsc = {
3902     .gdscr = 0x58034,
3903     .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3904     .cxc_count = 4,
3905     .pd = {
3906         .name = "vfe0_gdsc",
3907     },
3908     .pwrsts = PWRSTS_OFF_ON,
3909 };
3910 
3911 static struct gdsc vfe1_gdsc = {
3912     .gdscr = 0x5806c,
3913     .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3914     .cxc_count = 4,
3915     .pd = {
3916         .name = "vfe1_gdsc",
3917     },
3918     .pwrsts = PWRSTS_OFF_ON,
3919 };
3920 
3921 static struct gdsc oxili_gx_gdsc = {
3922     .gdscr = 0x5901c,
3923     .clamp_io_ctrl = 0x5b00c,
3924     .cxcs = (unsigned int []){ 0x59000, 0x59024 },
3925     .cxc_count = 2,
3926     .pd = {
3927         .name = "oxili_gx_gdsc",
3928     },
3929     .pwrsts = PWRSTS_OFF_ON,
3930     .flags = CLAMP_IO,
3931 };
3932 
3933 static struct gdsc oxili_cx_gdsc = {
3934     .gdscr = 0x5904c,
3935     .cxcs = (unsigned int []){ 0x59020 },
3936     .cxc_count = 1,
3937     .pd = {
3938         .name = "oxili_cx_gdsc",
3939     },
3940     .pwrsts = PWRSTS_OFF_ON,
3941 };
3942 
3943 static struct gdsc cpp_gdsc = {
3944     .gdscr = 0x58078,
3945     .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3946     .cxc_count = 2,
3947     .pd = {
3948         .name = "cpp_gdsc",
3949     },
3950     .flags = ALWAYS_ON,
3951     .pwrsts = PWRSTS_OFF_ON,
3952 };
3953 
3954 static struct clk_hw *gcc_msm8953_hws[] = {
3955     &gpll0_early_div.hw,
3956     &gpll6_early_div.hw,
3957 };
3958 
3959 static struct clk_regmap *gcc_msm8953_clocks[] = {
3960     [GPLL0] = &gpll0.clkr,
3961     [GPLL0_EARLY] = &gpll0_early.clkr,
3962     [GPLL2] = &gpll2.clkr,
3963     [GPLL2_EARLY] = &gpll2_early.clkr,
3964     [GPLL3] = &gpll3.clkr,
3965     [GPLL3_EARLY] = &gpll3_early.clkr,
3966     [GPLL4] = &gpll4.clkr,
3967     [GPLL4_EARLY] = &gpll4_early.clkr,
3968     [GPLL6] = &gpll6.clkr,
3969     [GPLL6_EARLY] = &gpll6_early.clkr,
3970     [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
3971     [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
3972     [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3973     [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3974     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3975     [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3976     [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3977     [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3978     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3979     [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3980     [GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr,
3981     [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3982     [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3983     [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3984     [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3985     [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3986     [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3987     [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3988     [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3989     [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3990     [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3991     [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3992     [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3993     [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3994     [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3995     [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3996     [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3997     [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3998     [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3999     [APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr,
4000     [APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr,
4001     [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4002     [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4003     [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4004     [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4005     [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4006     [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4007     [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4008     [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4009     [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4010     [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4011     [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
4012     [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
4013     [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
4014     [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
4015     [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
4016     [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
4017     [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
4018     [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
4019     [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
4020     [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
4021     [CCI_CLK_SRC] = &cci_clk_src.clkr,
4022     [CSI0P_CLK_SRC] = &csi0p_clk_src.clkr,
4023     [CSI1P_CLK_SRC] = &csi1p_clk_src.clkr,
4024     [CSI2P_CLK_SRC] = &csi2p_clk_src.clkr,
4025     [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
4026     [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
4027     [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
4028     [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
4029     [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
4030     [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
4031     [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
4032     [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
4033     [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
4034     [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4035     [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4036     [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4037     [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4038     [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
4039     [RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,
4040     [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4041     [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4042     [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4043     [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
4044     [USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr,
4045     [GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr,
4046     [GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr,
4047     [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4048     [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4049     [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4050     [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4051     [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4052     [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4053     [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4054     [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4055     [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4056     [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4057     [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
4058     [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
4059     [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
4060     [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
4061     [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
4062     [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
4063     [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
4064     [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
4065     [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
4066     [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
4067     [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
4068     [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
4069     [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
4070     [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
4071     [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
4072     [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
4073     [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
4074     [GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr,
4075     [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
4076     [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
4077     [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
4078     [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
4079     [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
4080     [GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr,
4081     [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
4082     [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
4083     [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
4084     [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
4085     [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
4086     [GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr,
4087     [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
4088     [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
4089     [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
4090     [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
4091     [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
4092     [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
4093     [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
4094     [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
4095     [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
4096     [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
4097     [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
4098     [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
4099     [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
4100     [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
4101     [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
4102     [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
4103     [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
4104     [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
4105     [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
4106     [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
4107     [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
4108     [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
4109     [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
4110     [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
4111     [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
4112     [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
4113     [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
4114     [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4115     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4116     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4117     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4118     [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
4119     [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
4120     [GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr,
4121     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4122     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4123     [GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,
4124     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4125     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4126     [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4127     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4128     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4129     [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
4130     [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
4131     [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
4132     [GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr,
4133     [GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr,
4134     [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
4135     [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
4136     [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
4137     [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
4138     [GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr,
4139     [GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr,
4140     [GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr,
4141     [MDP_CLK_SRC] = &mdp_clk_src.clkr,
4142     [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
4143     [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
4144     [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
4145     [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
4146     [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
4147     [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
4148     [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
4149     [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
4150     [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
4151     [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
4152     [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
4153     [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
4154     [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
4155     [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
4156     [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
4157     [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
4158     [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
4159     [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
4160     [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
4161     [GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
4162     [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
4163     [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
4164     [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
4165     [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
4166 };
4167 
4168 static const struct qcom_reset_map gcc_msm8953_resets[] = {
4169     [GCC_CAMSS_MICRO_BCR]   = { 0x56008 },
4170     [GCC_MSS_BCR]       = { 0x71000 },
4171     [GCC_QUSB2_PHY_BCR] = { 0x4103c },
4172     [GCC_USB3PHY_PHY_BCR]   = { 0x3f03c },
4173     [GCC_USB3_PHY_BCR]  = { 0x3f034 },
4174     [GCC_USB_30_BCR]    = { 0x3f070 },
4175 };
4176 
4177 static const struct regmap_config gcc_msm8953_regmap_config = {
4178     .reg_bits   = 32,
4179     .reg_stride = 4,
4180     .val_bits   = 32,
4181     .max_register   = 0x80000,
4182     .fast_io    = true,
4183 };
4184 
4185 static struct gdsc *gcc_msm8953_gdscs[] = {
4186     [CPP_GDSC] = &cpp_gdsc,
4187     [JPEG_GDSC] = &jpeg_gdsc,
4188     [MDSS_GDSC] = &mdss_gdsc,
4189     [OXILI_CX_GDSC] = &oxili_cx_gdsc,
4190     [OXILI_GX_GDSC] = &oxili_gx_gdsc,
4191     [USB30_GDSC] = &usb30_gdsc,
4192     [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
4193     [VENUS_GDSC] = &venus_gdsc,
4194     [VFE0_GDSC] = &vfe0_gdsc,
4195     [VFE1_GDSC] = &vfe1_gdsc,
4196 };
4197 
4198 static const struct qcom_cc_desc gcc_msm8953_desc = {
4199     .config = &gcc_msm8953_regmap_config,
4200     .clks = gcc_msm8953_clocks,
4201     .num_clks = ARRAY_SIZE(gcc_msm8953_clocks),
4202     .resets = gcc_msm8953_resets,
4203     .num_resets = ARRAY_SIZE(gcc_msm8953_resets),
4204     .gdscs = gcc_msm8953_gdscs,
4205     .num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs),
4206     .clk_hws = gcc_msm8953_hws,
4207     .num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws),
4208 };
4209 
4210 static int gcc_msm8953_probe(struct platform_device *pdev)
4211 {
4212     struct regmap *regmap;
4213 
4214     regmap  = qcom_cc_map(pdev, &gcc_msm8953_desc);
4215     if (IS_ERR(regmap))
4216         return PTR_ERR(regmap);
4217 
4218     clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
4219 
4220     return qcom_cc_really_probe(pdev, &gcc_msm8953_desc, regmap);
4221 }
4222 
4223 static const struct of_device_id gcc_msm8953_match_table[] = {
4224     { .compatible = "qcom,gcc-msm8953" },
4225     {},
4226 };
4227 
4228 static struct platform_driver gcc_msm8953_driver = {
4229     .probe = gcc_msm8953_probe,
4230     .driver = {
4231         .name = "gcc-msm8953",
4232         .of_match_table = gcc_msm8953_match_table,
4233     },
4234 };
4235 
4236 static int __init gcc_msm8953_init(void)
4237 {
4238     return platform_driver_register(&gcc_msm8953_driver);
4239 }
4240 core_initcall(gcc_msm8953_init);
4241 
4242 static void __exit gcc_msm8953_exit(void)
4243 {
4244     platform_driver_unregister(&gcc_msm8953_driver);
4245 }
4246 module_exit(gcc_msm8953_exit);
4247 
4248 MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver");
4249 MODULE_LICENSE("GPL v2");