Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
0004  */
0005 
0006 #include <linux/kernel.h>
0007 #include <linux/err.h>
0008 #include <linux/module.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/of.h>
0011 #include <linux/of_device.h>
0012 #include <linux/clk-provider.h>
0013 #include <linux/regmap.h>
0014 #include <linux/reset-controller.h>
0015 
0016 #include <dt-bindings/clock/qcom,gcc-sm6125.h>
0017 
0018 #include "clk-alpha-pll.h"
0019 #include "clk-branch.h"
0020 #include "clk-rcg.h"
0021 #include "clk-regmap.h"
0022 #include "common.h"
0023 #include "gdsc.h"
0024 #include "reset.h"
0025 
0026 enum {
0027     P_BI_TCXO,
0028     P_GPLL0_OUT_AUX2,
0029     P_GPLL0_OUT_EARLY,
0030     P_GPLL3_OUT_EARLY,
0031     P_GPLL4_OUT_MAIN,
0032     P_GPLL5_OUT_MAIN,
0033     P_GPLL6_OUT_EARLY,
0034     P_GPLL6_OUT_MAIN,
0035     P_GPLL7_OUT_MAIN,
0036     P_GPLL8_OUT_EARLY,
0037     P_GPLL8_OUT_MAIN,
0038     P_GPLL9_OUT_MAIN,
0039     P_SLEEP_CLK,
0040 };
0041 
0042 static struct clk_alpha_pll gpll0_out_early = {
0043     .offset = 0x0,
0044     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0045     .clkr = {
0046         .enable_reg = 0x79000,
0047         .enable_mask = BIT(0),
0048         .hw.init = &(struct clk_init_data){
0049             .name = "gpll0_out_early",
0050             .parent_data = &(const struct clk_parent_data){
0051                 .fw_name = "bi_tcxo",
0052             },
0053             .num_parents = 1,
0054             .ops = &clk_alpha_pll_ops,
0055         },
0056     },
0057 };
0058 
0059 static struct clk_fixed_factor gpll0_out_aux2 = {
0060     .mult = 1,
0061     .div = 2,
0062     .hw.init = &(struct clk_init_data){
0063         .name = "gpll0_out_aux2",
0064         .parent_hws = (const struct clk_hw*[]){
0065             &gpll0_out_early.clkr.hw,
0066         },
0067         .num_parents = 1,
0068         .ops = &clk_fixed_factor_ops,
0069     },
0070 };
0071 
0072 static struct clk_fixed_factor gpll0_out_main = {
0073     .mult = 1,
0074     .div = 2,
0075     .hw.init = &(struct clk_init_data){
0076         .name = "gpll0_out_main",
0077         .parent_hws = (const struct clk_hw*[]){
0078             &gpll0_out_early.clkr.hw,
0079         },
0080         .num_parents = 1,
0081         .ops = &clk_fixed_factor_ops,
0082     },
0083 };
0084 
0085 static struct clk_alpha_pll gpll3_out_early = {
0086     .offset = 0x3000,
0087     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0088     .clkr = {
0089         .enable_reg = 0x79000,
0090         .enable_mask = BIT(3),
0091         .hw.init = &(struct clk_init_data){
0092             .name = "gpll3_out_early",
0093             .parent_data = &(const struct clk_parent_data){
0094                 .fw_name = "bi_tcxo",
0095             },
0096             .num_parents = 1,
0097             .ops = &clk_alpha_pll_ops,
0098         },
0099     },
0100 };
0101 
0102 static struct clk_alpha_pll gpll4_out_main = {
0103     .offset = 0x4000,
0104     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0105     .clkr = {
0106         .enable_reg = 0x79000,
0107         .enable_mask = BIT(4),
0108         .hw.init = &(struct clk_init_data){
0109             .name = "gpll4_out_main",
0110             .parent_data = &(const struct clk_parent_data){
0111                 .fw_name = "bi_tcxo",
0112             },
0113             .num_parents = 1,
0114             .ops = &clk_alpha_pll_ops,
0115         },
0116     },
0117 };
0118 
0119 static struct clk_alpha_pll gpll5_out_main = {
0120     .offset = 0x5000,
0121     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0122     .clkr = {
0123         .enable_reg = 0x79000,
0124         .enable_mask = BIT(5),
0125         .hw.init = &(struct clk_init_data){
0126             .name = "gpll5_out_main",
0127             .parent_data = &(const struct clk_parent_data){
0128                 .fw_name = "bi_tcxo",
0129             },
0130             .num_parents = 1,
0131             .ops = &clk_alpha_pll_ops,
0132         },
0133     },
0134 };
0135 
0136 static struct clk_alpha_pll gpll6_out_early = {
0137     .offset = 0x6000,
0138     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0139     .clkr = {
0140         .enable_reg = 0x79000,
0141         .enable_mask = BIT(6),
0142         .hw.init = &(struct clk_init_data){
0143             .name = "gpll6_out_early",
0144             .parent_data = &(const struct clk_parent_data){
0145                 .fw_name = "bi_tcxo",
0146             },
0147             .num_parents = 1,
0148             .ops = &clk_alpha_pll_ops,
0149         },
0150     },
0151 };
0152 
0153 static struct clk_fixed_factor gpll6_out_main = {
0154     .mult = 1,
0155     .div = 2,
0156     .hw.init = &(struct clk_init_data){
0157         .name = "gpll6_out_main",
0158         .parent_hws = (const struct clk_hw*[]){
0159             &gpll6_out_early.clkr.hw,
0160         },
0161         .num_parents = 1,
0162         .ops = &clk_fixed_factor_ops,
0163     },
0164 };
0165 
0166 static struct clk_alpha_pll gpll7_out_early = {
0167     .offset = 0x7000,
0168     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0169     .clkr = {
0170         .enable_reg = 0x79000,
0171         .enable_mask = BIT(7),
0172         .hw.init = &(struct clk_init_data){
0173             .name = "gpll7_out_early",
0174             .parent_data = &(const struct clk_parent_data){
0175                 .fw_name = "bi_tcxo",
0176             },
0177             .num_parents = 1,
0178             .ops = &clk_alpha_pll_ops,
0179         },
0180     },
0181 };
0182 
0183 static struct clk_fixed_factor gpll7_out_main = {
0184     .mult = 1,
0185     .div = 2,
0186     .hw.init = &(struct clk_init_data){
0187         .name = "gpll7_out_main",
0188         .parent_hws = (const struct clk_hw*[]){
0189             &gpll7_out_early.clkr.hw,
0190         },
0191         .num_parents = 1,
0192         .ops = &clk_fixed_factor_ops,
0193     },
0194 };
0195 
0196 static struct clk_alpha_pll gpll8_out_early = {
0197     .offset = 0x8000,
0198     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0199     .clkr = {
0200         .enable_reg = 0x79000,
0201         .enable_mask = BIT(8),
0202         .hw.init = &(struct clk_init_data){
0203             .name = "gpll8_out_early",
0204             .parent_data = &(const struct clk_parent_data){
0205                 .fw_name = "bi_tcxo",
0206             },
0207             .num_parents = 1,
0208             .ops = &clk_alpha_pll_ops,
0209         },
0210     },
0211 };
0212 
0213 static struct clk_fixed_factor gpll8_out_main = {
0214     .mult = 1,
0215     .div = 2,
0216     .hw.init = &(struct clk_init_data){
0217         .name = "gpll8_out_main",
0218         .parent_hws = (const struct clk_hw*[]){
0219             &gpll8_out_early.clkr.hw,
0220         },
0221         .num_parents = 1,
0222         .ops = &clk_fixed_factor_ops,
0223     },
0224 };
0225 
0226 static struct clk_alpha_pll gpll9_out_early = {
0227     .offset = 0x9000,
0228     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0229     .clkr = {
0230         .enable_reg = 0x79000,
0231         .enable_mask = BIT(9),
0232         .hw.init = &(struct clk_init_data){
0233             .name = "gpll9_out_early",
0234             .parent_data = &(const struct clk_parent_data){
0235                 .fw_name = "bi_tcxo",
0236             },
0237             .num_parents = 1,
0238             .ops = &clk_alpha_pll_ops,
0239         },
0240     },
0241 };
0242 
0243 static struct clk_fixed_factor gpll9_out_main = {
0244     .mult = 1,
0245     .div = 2,
0246     .hw.init = &(struct clk_init_data){
0247         .name = "gpll9_out_main",
0248         .parent_hws = (const struct clk_hw*[]){
0249             &gpll9_out_early.clkr.hw,
0250         },
0251         .num_parents = 1,
0252         .ops = &clk_fixed_factor_ops,
0253     },
0254 };
0255 
0256 static const struct parent_map gcc_parent_map_0[] = {
0257     { P_BI_TCXO, 0 },
0258     { P_GPLL0_OUT_EARLY, 1 },
0259     { P_GPLL0_OUT_AUX2, 2 },
0260 };
0261 
0262 static const struct clk_parent_data gcc_parent_data_0[] = {
0263     { .fw_name = "bi_tcxo" },
0264     { .hw = &gpll0_out_early.clkr.hw },
0265     { .hw = &gpll0_out_aux2.hw },
0266 };
0267 
0268 static const struct parent_map gcc_parent_map_1[] = {
0269     { P_BI_TCXO, 0 },
0270     { P_GPLL0_OUT_EARLY, 1 },
0271     { P_GPLL0_OUT_AUX2, 2 },
0272     { P_GPLL6_OUT_MAIN, 4 },
0273 };
0274 
0275 static const struct clk_parent_data gcc_parent_data_1[] = {
0276     { .fw_name = "bi_tcxo" },
0277     { .hw = &gpll0_out_early.clkr.hw },
0278     { .hw = &gpll0_out_aux2.hw },
0279     { .hw = &gpll6_out_main.hw },
0280 };
0281 
0282 static const struct parent_map gcc_parent_map_2[] = {
0283     { P_BI_TCXO, 0 },
0284     { P_GPLL0_OUT_EARLY, 1 },
0285     { P_GPLL0_OUT_AUX2, 2 },
0286     { P_SLEEP_CLK, 5 },
0287 };
0288 
0289 static const struct clk_parent_data gcc_parent_data_2[] = {
0290     { .fw_name = "bi_tcxo" },
0291     { .hw = &gpll0_out_early.clkr.hw },
0292     { .hw = &gpll0_out_aux2.hw },
0293     { .fw_name = "sleep_clk" },
0294 };
0295 
0296 static const struct parent_map gcc_parent_map_3[] = {
0297     { P_BI_TCXO, 0 },
0298     { P_GPLL0_OUT_EARLY, 1 },
0299     { P_GPLL5_OUT_MAIN, 3 },
0300     { P_GPLL4_OUT_MAIN, 5 },
0301 };
0302 
0303 static const struct clk_parent_data gcc_parent_data_3[] = {
0304     { .fw_name = "bi_tcxo" },
0305     { .hw = &gpll0_out_early.clkr.hw },
0306     { .hw = &gpll5_out_main.clkr.hw },
0307     { .hw = &gpll4_out_main.clkr.hw },
0308 };
0309 
0310 static const struct parent_map gcc_parent_map_4[] = {
0311     { P_BI_TCXO, 0 },
0312     { P_GPLL0_OUT_EARLY, 1 },
0313     { P_GPLL9_OUT_MAIN, 2 },
0314 };
0315 
0316 static const struct clk_parent_data gcc_parent_data_4[] = {
0317     { .fw_name = "bi_tcxo" },
0318     { .hw = &gpll0_out_early.clkr.hw },
0319     { .hw = &gpll9_out_main.hw },
0320 };
0321 
0322 static const struct parent_map gcc_parent_map_5[] = {
0323     { P_BI_TCXO, 0 },
0324     { P_GPLL0_OUT_EARLY, 1 },
0325 };
0326 
0327 static const struct clk_parent_data gcc_parent_data_5[] = {
0328     { .fw_name = "bi_tcxo" },
0329     { .hw = &gpll0_out_early.clkr.hw },
0330 };
0331 
0332 static const struct parent_map gcc_parent_map_6[] = {
0333     { P_BI_TCXO, 0 },
0334     { P_GPLL0_OUT_EARLY, 1 },
0335     { P_GPLL4_OUT_MAIN, 5 },
0336 };
0337 
0338 static const struct clk_parent_data gcc_parent_data_6[] = {
0339     { .fw_name = "bi_tcxo" },
0340     { .hw = &gpll0_out_early.clkr.hw },
0341     { .hw = &gpll4_out_main.clkr.hw },
0342 };
0343 
0344 static const struct parent_map gcc_parent_map_7[] = {
0345     { P_BI_TCXO, 0 },
0346     { P_GPLL0_OUT_EARLY, 1 },
0347     { P_SLEEP_CLK, 5 },
0348 };
0349 
0350 static const struct clk_parent_data gcc_parent_data_7[] = {
0351     { .fw_name = "bi_tcxo" },
0352     { .hw = &gpll0_out_early.clkr.hw },
0353     { .fw_name = "sleep_clk" },
0354 };
0355 
0356 static const struct parent_map gcc_parent_map_8[] = {
0357     { P_BI_TCXO, 0 },
0358     { P_GPLL0_OUT_EARLY, 1 },
0359     { P_GPLL9_OUT_MAIN, 2 },
0360     { P_GPLL6_OUT_EARLY, 3 },
0361     { P_GPLL8_OUT_MAIN, 4 },
0362     { P_GPLL4_OUT_MAIN, 5 },
0363     { P_GPLL3_OUT_EARLY, 6 },
0364 };
0365 
0366 static const struct clk_parent_data gcc_parent_data_8[] = {
0367     { .fw_name = "bi_tcxo" },
0368     { .hw = &gpll0_out_early.clkr.hw },
0369     { .hw = &gpll9_out_main.hw },
0370     { .hw = &gpll6_out_early.clkr.hw },
0371     { .hw = &gpll8_out_main.hw },
0372     { .hw = &gpll4_out_main.clkr.hw },
0373     { .hw = &gpll3_out_early.clkr.hw },
0374 };
0375 
0376 static const struct parent_map gcc_parent_map_9[] = {
0377     { P_BI_TCXO, 0 },
0378     { P_GPLL0_OUT_EARLY, 1 },
0379     { P_GPLL8_OUT_MAIN, 4 },
0380 };
0381 
0382 static const struct clk_parent_data gcc_parent_data_9[] = {
0383     { .fw_name = "bi_tcxo" },
0384     { .hw = &gpll0_out_early.clkr.hw },
0385     { .hw = &gpll8_out_main.hw },
0386 };
0387 
0388 static const struct parent_map gcc_parent_map_10[] = {
0389     { P_BI_TCXO, 0 },
0390     { P_GPLL0_OUT_EARLY, 1 },
0391     { P_GPLL9_OUT_MAIN, 2 },
0392     { P_GPLL6_OUT_EARLY, 3 },
0393     { P_GPLL8_OUT_MAIN, 4 },
0394     { P_GPLL3_OUT_EARLY, 6 },
0395 };
0396 
0397 static const struct clk_parent_data gcc_parent_data_10[] = {
0398     { .fw_name = "bi_tcxo" },
0399     { .hw = &gpll0_out_early.clkr.hw },
0400     { .hw = &gpll9_out_main.hw },
0401     { .hw = &gpll6_out_early.clkr.hw },
0402     { .hw = &gpll8_out_main.hw },
0403     { .hw = &gpll3_out_early.clkr.hw },
0404 };
0405 
0406 static const struct parent_map gcc_parent_map_11[] = {
0407     { P_BI_TCXO, 0 },
0408     { P_GPLL0_OUT_EARLY, 1 },
0409     { P_GPLL8_OUT_EARLY, 4 },
0410     { P_GPLL4_OUT_MAIN, 5 },
0411 };
0412 
0413 static const struct clk_parent_data gcc_parent_data_11[] = {
0414     { .fw_name = "bi_tcxo" },
0415     { .hw = &gpll0_out_early.clkr.hw },
0416     { .hw = &gpll8_out_early.clkr.hw },
0417     { .hw = &gpll4_out_main.clkr.hw },
0418 };
0419 
0420 static const struct parent_map gcc_parent_map_12[] = {
0421     { P_BI_TCXO, 0 },
0422     { P_GPLL0_OUT_EARLY, 1 },
0423     { P_GPLL6_OUT_EARLY, 3 },
0424     { P_GPLL8_OUT_EARLY, 4 },
0425 };
0426 
0427 static const struct clk_parent_data gcc_parent_data_12[] = {
0428     { .fw_name = "bi_tcxo" },
0429     { .hw = &gpll0_out_early.clkr.hw },
0430     { .hw = &gpll6_out_early.clkr.hw },
0431     { .hw = &gpll8_out_early.clkr.hw },
0432 };
0433 
0434 static const struct parent_map gcc_parent_map_13[] = {
0435     { P_BI_TCXO, 0 },
0436     { P_GPLL0_OUT_EARLY, 1 },
0437     { P_GPLL0_OUT_AUX2, 2 },
0438     { P_GPLL7_OUT_MAIN, 3 },
0439     { P_GPLL4_OUT_MAIN, 5 },
0440 };
0441 
0442 static const struct clk_parent_data gcc_parent_data_13[] = {
0443     { .fw_name = "bi_tcxo" },
0444     { .hw = &gpll0_out_early.clkr.hw },
0445     { .hw = &gpll0_out_aux2.hw },
0446     { .hw = &gpll7_out_main.hw },
0447     { .hw = &gpll4_out_main.clkr.hw },
0448 };
0449 
0450 static const struct parent_map gcc_parent_map_14[] = {
0451     { P_BI_TCXO, 0 },
0452     { P_SLEEP_CLK, 5 },
0453 };
0454 
0455 static const struct clk_parent_data gcc_parent_data_14[] = {
0456     { .fw_name = "bi_tcxo" },
0457     { .fw_name = "sleep_clk" },
0458 };
0459 
0460 static const struct freq_tbl ftbl_gcc_camss_ahb_clk_src[] = {
0461     F(19200000, P_BI_TCXO, 1, 0, 0),
0462     F(40000000, P_GPLL8_OUT_MAIN, 12, 0, 0),
0463     F(80000000, P_GPLL8_OUT_MAIN, 6, 0, 0),
0464     { }
0465 };
0466 
0467 static struct clk_rcg2 gcc_camss_ahb_clk_src = {
0468     .cmd_rcgr = 0x56088,
0469     .mnd_width = 0,
0470     .hid_width = 5,
0471     .parent_map = gcc_parent_map_9,
0472     .freq_tbl = ftbl_gcc_camss_ahb_clk_src,
0473     .clkr.hw.init = &(struct clk_init_data){
0474         .name = "gcc_camss_ahb_clk_src",
0475         .parent_data = gcc_parent_data_9,
0476         .num_parents = ARRAY_SIZE(gcc_parent_data_9),
0477         .ops = &clk_rcg2_ops,
0478     },
0479 };
0480 
0481 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
0482     F(37500000, P_GPLL0_OUT_EARLY, 16, 0, 0),
0483     F(50000000, P_GPLL0_OUT_EARLY, 12, 0, 0),
0484     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0485     { }
0486 };
0487 
0488 static struct clk_rcg2 gcc_camss_cci_clk_src = {
0489     .cmd_rcgr = 0x52004,
0490     .mnd_width = 8,
0491     .hid_width = 5,
0492     .parent_map = gcc_parent_map_5,
0493     .freq_tbl = ftbl_gcc_camss_cci_clk_src,
0494     .clkr.hw.init = &(struct clk_init_data){
0495         .name = "gcc_camss_cci_clk_src",
0496         .parent_data = gcc_parent_data_5,
0497         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
0498         .ops = &clk_rcg2_ops,
0499     },
0500 };
0501 
0502 static const struct freq_tbl ftbl_gcc_camss_cpp_clk_src[] = {
0503     F(120000000, P_GPLL8_OUT_MAIN, 4, 0, 0),
0504     F(240000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
0505     F(320000000, P_GPLL8_OUT_MAIN, 1.5, 0, 0),
0506     F(480000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
0507     F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
0508     { }
0509 };
0510 
0511 static struct clk_rcg2 gcc_camss_cpp_clk_src = {
0512     .cmd_rcgr = 0x560c8,
0513     .mnd_width = 0,
0514     .hid_width = 5,
0515     .parent_map = gcc_parent_map_10,
0516     .freq_tbl = ftbl_gcc_camss_cpp_clk_src,
0517     .clkr.hw.init = &(struct clk_init_data){
0518         .name = "gcc_camss_cpp_clk_src",
0519         .parent_data = gcc_parent_data_10,
0520         .num_parents = ARRAY_SIZE(gcc_parent_data_10),
0521         .ops = &clk_rcg2_ops,
0522     },
0523 };
0524 
0525 static const struct freq_tbl ftbl_gcc_camss_csi0_clk_src[] = {
0526     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0527     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
0528     F(311000000, P_GPLL5_OUT_MAIN, 3, 0, 0),
0529     F(403200000, P_GPLL4_OUT_MAIN, 2, 0, 0),
0530     F(466500000, P_GPLL5_OUT_MAIN, 2, 0, 0),
0531     { }
0532 };
0533 
0534 static struct clk_rcg2 gcc_camss_csi0_clk_src = {
0535     .cmd_rcgr = 0x55030,
0536     .mnd_width = 0,
0537     .hid_width = 5,
0538     .parent_map = gcc_parent_map_3,
0539     .freq_tbl = ftbl_gcc_camss_csi0_clk_src,
0540     .clkr.hw.init = &(struct clk_init_data){
0541         .name = "gcc_camss_csi0_clk_src",
0542         .parent_data = gcc_parent_data_3,
0543         .num_parents = ARRAY_SIZE(gcc_parent_data_3),
0544         .ops = &clk_rcg2_ops,
0545     },
0546 };
0547 
0548 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
0549     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0550     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
0551     F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
0552     { }
0553 };
0554 
0555 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
0556     .cmd_rcgr = 0x53004,
0557     .mnd_width = 0,
0558     .hid_width = 5,
0559     .parent_map = gcc_parent_map_6,
0560     .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0561     .clkr.hw.init = &(struct clk_init_data){
0562         .name = "gcc_camss_csi0phytimer_clk_src",
0563         .parent_data = gcc_parent_data_6,
0564         .num_parents = ARRAY_SIZE(gcc_parent_data_6),
0565         .ops = &clk_rcg2_ops,
0566     },
0567 };
0568 
0569 static struct clk_rcg2 gcc_camss_csi1_clk_src = {
0570     .cmd_rcgr = 0x5506c,
0571     .mnd_width = 0,
0572     .hid_width = 5,
0573     .parent_map = gcc_parent_map_3,
0574     .freq_tbl = ftbl_gcc_camss_csi0_clk_src,
0575     .clkr.hw.init = &(struct clk_init_data){
0576         .name = "gcc_camss_csi1_clk_src",
0577         .parent_data = gcc_parent_data_3,
0578         .num_parents = ARRAY_SIZE(gcc_parent_data_3),
0579         .ops = &clk_rcg2_ops,
0580     },
0581 };
0582 
0583 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
0584     .cmd_rcgr = 0x53024,
0585     .mnd_width = 0,
0586     .hid_width = 5,
0587     .parent_map = gcc_parent_map_6,
0588     .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0589     .clkr.hw.init = &(struct clk_init_data){
0590         .name = "gcc_camss_csi1phytimer_clk_src",
0591         .parent_data = gcc_parent_data_6,
0592         .num_parents = ARRAY_SIZE(gcc_parent_data_6),
0593         .ops = &clk_rcg2_ops,
0594     },
0595 };
0596 
0597 static struct clk_rcg2 gcc_camss_csi2_clk_src = {
0598     .cmd_rcgr = 0x550a4,
0599     .mnd_width = 0,
0600     .hid_width = 5,
0601     .parent_map = gcc_parent_map_3,
0602     .freq_tbl = ftbl_gcc_camss_csi0_clk_src,
0603     .clkr.hw.init = &(struct clk_init_data){
0604         .name = "gcc_camss_csi2_clk_src",
0605         .parent_data = gcc_parent_data_3,
0606         .num_parents = ARRAY_SIZE(gcc_parent_data_3),
0607         .ops = &clk_rcg2_ops,
0608     },
0609 };
0610 
0611 static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
0612     .cmd_rcgr = 0x53044,
0613     .mnd_width = 0,
0614     .hid_width = 5,
0615     .parent_map = gcc_parent_map_6,
0616     .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0617     .clkr.hw.init = &(struct clk_init_data){
0618         .name = "gcc_camss_csi2phytimer_clk_src",
0619         .parent_data = gcc_parent_data_6,
0620         .num_parents = ARRAY_SIZE(gcc_parent_data_6),
0621         .ops = &clk_rcg2_ops,
0622     },
0623 };
0624 
0625 static struct clk_rcg2 gcc_camss_csi3_clk_src = {
0626     .cmd_rcgr = 0x550e0,
0627     .mnd_width = 0,
0628     .hid_width = 5,
0629     .parent_map = gcc_parent_map_3,
0630     .freq_tbl = ftbl_gcc_camss_csi0_clk_src,
0631     .clkr.hw.init = &(struct clk_init_data){
0632         .name = "gcc_camss_csi3_clk_src",
0633         .parent_data = gcc_parent_data_3,
0634         .num_parents = ARRAY_SIZE(gcc_parent_data_3),
0635         .ops = &clk_rcg2_ops,
0636     },
0637 };
0638 
0639 static const struct freq_tbl ftbl_gcc_camss_csiphy_clk_src[] = {
0640     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0641     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
0642     F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
0643     F(320000000, P_GPLL8_OUT_EARLY, 3, 0, 0),
0644     { }
0645 };
0646 
0647 static struct clk_rcg2 gcc_camss_csiphy_clk_src = {
0648     .cmd_rcgr = 0x55000,
0649     .mnd_width = 0,
0650     .hid_width = 5,
0651     .parent_map = gcc_parent_map_11,
0652     .freq_tbl = ftbl_gcc_camss_csiphy_clk_src,
0653     .clkr.hw.init = &(struct clk_init_data){
0654         .name = "gcc_camss_csiphy_clk_src",
0655         .parent_data = gcc_parent_data_11,
0656         .num_parents = ARRAY_SIZE(gcc_parent_data_11),
0657         .ops = &clk_rcg2_ops,
0658     },
0659 };
0660 
0661 static const struct freq_tbl ftbl_gcc_camss_gp0_clk_src[] = {
0662     F(50000000, P_GPLL0_OUT_EARLY, 12, 0, 0),
0663     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0664     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
0665     { }
0666 };
0667 
0668 static struct clk_rcg2 gcc_camss_gp0_clk_src = {
0669     .cmd_rcgr = 0x50000,
0670     .mnd_width = 8,
0671     .hid_width = 5,
0672     .parent_map = gcc_parent_map_7,
0673     .freq_tbl = ftbl_gcc_camss_gp0_clk_src,
0674     .clkr.hw.init = &(struct clk_init_data){
0675         .name = "gcc_camss_gp0_clk_src",
0676         .parent_data = gcc_parent_data_7,
0677         .num_parents = ARRAY_SIZE(gcc_parent_data_7),
0678         .ops = &clk_rcg2_ops,
0679     },
0680 };
0681 
0682 static struct clk_rcg2 gcc_camss_gp1_clk_src = {
0683     .cmd_rcgr = 0x5001c,
0684     .mnd_width = 8,
0685     .hid_width = 5,
0686     .parent_map = gcc_parent_map_7,
0687     .freq_tbl = ftbl_gcc_camss_gp0_clk_src,
0688     .clkr.hw.init = &(struct clk_init_data){
0689         .name = "gcc_camss_gp1_clk_src",
0690         .parent_data = gcc_parent_data_7,
0691         .num_parents = ARRAY_SIZE(gcc_parent_data_7),
0692         .ops = &clk_rcg2_ops,
0693     },
0694 };
0695 
0696 static const struct freq_tbl ftbl_gcc_camss_jpeg_clk_src[] = {
0697     F(66666667, P_GPLL0_OUT_EARLY, 9, 0, 0),
0698     F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
0699     F(219428571, P_GPLL6_OUT_EARLY, 3.5, 0, 0),
0700     F(320000000, P_GPLL8_OUT_EARLY, 3, 0, 0),
0701     F(480000000, P_GPLL8_OUT_EARLY, 2, 0, 0),
0702     { }
0703 };
0704 
0705 static struct clk_rcg2 gcc_camss_jpeg_clk_src = {
0706     .cmd_rcgr = 0x52028,
0707     .mnd_width = 0,
0708     .hid_width = 5,
0709     .parent_map = gcc_parent_map_12,
0710     .freq_tbl = ftbl_gcc_camss_jpeg_clk_src,
0711     .clkr.hw.init = &(struct clk_init_data){
0712         .name = "gcc_camss_jpeg_clk_src",
0713         .parent_data = gcc_parent_data_12,
0714         .num_parents = ARRAY_SIZE(gcc_parent_data_12),
0715         .ops = &clk_rcg2_ops,
0716     },
0717 };
0718 
0719 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
0720     F(19200000, P_BI_TCXO, 1, 0, 0),
0721     F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
0722     F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),
0723     { }
0724 };
0725 
0726 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
0727     .cmd_rcgr = 0x51000,
0728     .mnd_width = 8,
0729     .hid_width = 5,
0730     .parent_map = gcc_parent_map_4,
0731     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0732     .clkr.hw.init = &(struct clk_init_data){
0733         .name = "gcc_camss_mclk0_clk_src",
0734         .parent_data = gcc_parent_data_4,
0735         .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0736         .ops = &clk_rcg2_ops,
0737     },
0738 };
0739 
0740 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
0741     .cmd_rcgr = 0x5101c,
0742     .mnd_width = 8,
0743     .hid_width = 5,
0744     .parent_map = gcc_parent_map_4,
0745     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0746     .clkr.hw.init = &(struct clk_init_data){
0747         .name = "gcc_camss_mclk1_clk_src",
0748         .parent_data = gcc_parent_data_4,
0749         .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0750         .ops = &clk_rcg2_ops,
0751     },
0752 };
0753 
0754 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
0755     .cmd_rcgr = 0x51038,
0756     .mnd_width = 8,
0757     .hid_width = 5,
0758     .parent_map = gcc_parent_map_4,
0759     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0760     .clkr.hw.init = &(struct clk_init_data){
0761         .name = "gcc_camss_mclk2_clk_src",
0762         .parent_data = gcc_parent_data_4,
0763         .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0764         .ops = &clk_rcg2_ops,
0765     },
0766 };
0767 
0768 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
0769     .cmd_rcgr = 0x51054,
0770     .mnd_width = 8,
0771     .hid_width = 5,
0772     .parent_map = gcc_parent_map_4,
0773     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0774     .clkr.hw.init = &(struct clk_init_data){
0775         .name = "gcc_camss_mclk3_clk_src",
0776         .parent_data = gcc_parent_data_4,
0777         .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0778         .ops = &clk_rcg2_ops,
0779     },
0780 };
0781 
0782 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk_src[] = {
0783     F(120000000, P_GPLL8_OUT_MAIN, 4, 0, 0),
0784     F(256000000, P_GPLL6_OUT_EARLY, 3, 0, 0),
0785     F(403200000, P_GPLL4_OUT_MAIN, 2, 0, 0),
0786     F(480000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
0787     F(533000000, P_GPLL3_OUT_EARLY, 2, 0, 0),
0788     F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
0789     { }
0790 };
0791 
0792 static struct clk_rcg2 gcc_camss_vfe0_clk_src = {
0793     .cmd_rcgr = 0x54010,
0794     .mnd_width = 0,
0795     .hid_width = 5,
0796     .parent_map = gcc_parent_map_8,
0797     .freq_tbl = ftbl_gcc_camss_vfe0_clk_src,
0798     .clkr.hw.init = &(struct clk_init_data){
0799         .name = "gcc_camss_vfe0_clk_src",
0800         .parent_data = gcc_parent_data_8,
0801         .num_parents = ARRAY_SIZE(gcc_parent_data_8),
0802         .ops = &clk_rcg2_ops,
0803     },
0804 };
0805 
0806 static struct clk_rcg2 gcc_camss_vfe1_clk_src = {
0807     .cmd_rcgr = 0x54048,
0808     .mnd_width = 0,
0809     .hid_width = 5,
0810     .parent_map = gcc_parent_map_8,
0811     .freq_tbl = ftbl_gcc_camss_vfe0_clk_src,
0812     .clkr.hw.init = &(struct clk_init_data){
0813         .name = "gcc_camss_vfe1_clk_src",
0814         .parent_data = gcc_parent_data_8,
0815         .num_parents = ARRAY_SIZE(gcc_parent_data_8),
0816         .ops = &clk_rcg2_ops,
0817     },
0818 };
0819 
0820 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
0821     F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
0822     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
0823     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0824     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
0825     { }
0826 };
0827 
0828 static struct clk_rcg2 gcc_gp1_clk_src = {
0829     .cmd_rcgr = 0x4d004,
0830     .mnd_width = 8,
0831     .hid_width = 5,
0832     .parent_map = gcc_parent_map_2,
0833     .freq_tbl = ftbl_gcc_gp1_clk_src,
0834     .clkr.hw.init = &(struct clk_init_data){
0835         .name = "gcc_gp1_clk_src",
0836         .parent_data = gcc_parent_data_2,
0837         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
0838         .ops = &clk_rcg2_ops,
0839     },
0840 };
0841 
0842 static struct clk_rcg2 gcc_gp2_clk_src = {
0843     .cmd_rcgr = 0x4e004,
0844     .mnd_width = 8,
0845     .hid_width = 5,
0846     .parent_map = gcc_parent_map_2,
0847     .freq_tbl = ftbl_gcc_gp1_clk_src,
0848     .clkr.hw.init = &(struct clk_init_data){
0849         .name = "gcc_gp2_clk_src",
0850         .parent_data = gcc_parent_data_2,
0851         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
0852         .ops = &clk_rcg2_ops,
0853     },
0854 };
0855 
0856 static struct clk_rcg2 gcc_gp3_clk_src = {
0857     .cmd_rcgr = 0x4f004,
0858     .mnd_width = 8,
0859     .hid_width = 5,
0860     .parent_map = gcc_parent_map_2,
0861     .freq_tbl = ftbl_gcc_gp1_clk_src,
0862     .clkr.hw.init = &(struct clk_init_data){
0863         .name = "gcc_gp3_clk_src",
0864         .parent_data = gcc_parent_data_2,
0865         .num_parents = ARRAY_SIZE(gcc_parent_data_2),
0866         .ops = &clk_rcg2_ops,
0867     },
0868 };
0869 
0870 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
0871     F(19200000, P_BI_TCXO, 1, 0, 0),
0872     F(60000000, P_GPLL0_OUT_EARLY, 10, 0, 0),
0873     { }
0874 };
0875 
0876 static struct clk_rcg2 gcc_pdm2_clk_src = {
0877     .cmd_rcgr = 0x20010,
0878     .mnd_width = 0,
0879     .hid_width = 5,
0880     .parent_map = gcc_parent_map_0,
0881     .freq_tbl = ftbl_gcc_pdm2_clk_src,
0882     .clkr.hw.init = &(struct clk_init_data){
0883         .name = "gcc_pdm2_clk_src",
0884         .parent_data = gcc_parent_data_0,
0885         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0886         .ops = &clk_rcg2_ops,
0887     },
0888 };
0889 
0890 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
0891     F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
0892     F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
0893     F(19200000, P_BI_TCXO, 1, 0, 0),
0894     F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
0895     F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
0896     F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
0897     F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
0898     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
0899     F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
0900     F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
0901     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
0902     F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
0903     F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
0904     F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
0905     F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
0906     F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
0907     { }
0908 };
0909 
0910 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
0911     .name = "gcc_qupv3_wrap0_s0_clk_src",
0912     .parent_data = gcc_parent_data_1,
0913     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0914     .ops = &clk_rcg2_ops,
0915 };
0916 
0917 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
0918     .cmd_rcgr = 0x1f148,
0919     .mnd_width = 16,
0920     .hid_width = 5,
0921     .parent_map = gcc_parent_map_1,
0922     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0923     .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
0924 };
0925 
0926 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
0927     .name = "gcc_qupv3_wrap0_s1_clk_src",
0928     .parent_data = gcc_parent_data_1,
0929     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0930     .ops = &clk_rcg2_ops,
0931 };
0932 
0933 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
0934     .cmd_rcgr = 0x1f278,
0935     .mnd_width = 16,
0936     .hid_width = 5,
0937     .parent_map = gcc_parent_map_1,
0938     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0939     .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
0940 };
0941 
0942 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
0943     .name = "gcc_qupv3_wrap0_s2_clk_src",
0944     .parent_data = gcc_parent_data_1,
0945     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0946     .ops = &clk_rcg2_ops,
0947 };
0948 
0949 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
0950     .cmd_rcgr = 0x1f3a8,
0951     .mnd_width = 16,
0952     .hid_width = 5,
0953     .parent_map = gcc_parent_map_1,
0954     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0955     .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
0956 };
0957 
0958 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
0959     .name = "gcc_qupv3_wrap0_s3_clk_src",
0960     .parent_data = gcc_parent_data_1,
0961     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0962     .ops = &clk_rcg2_ops,
0963 };
0964 
0965 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
0966     .cmd_rcgr = 0x1f4d8,
0967     .mnd_width = 16,
0968     .hid_width = 5,
0969     .parent_map = gcc_parent_map_1,
0970     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0971     .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
0972 };
0973 
0974 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
0975     .name = "gcc_qupv3_wrap0_s4_clk_src",
0976     .parent_data = gcc_parent_data_1,
0977     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0978     .ops = &clk_rcg2_ops,
0979 };
0980 
0981 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
0982     .cmd_rcgr = 0x1f608,
0983     .mnd_width = 16,
0984     .hid_width = 5,
0985     .parent_map = gcc_parent_map_1,
0986     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0987     .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
0988 };
0989 
0990 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
0991     .name = "gcc_qupv3_wrap0_s5_clk_src",
0992     .parent_data = gcc_parent_data_1,
0993     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0994     .ops = &clk_rcg2_ops,
0995 };
0996 
0997 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
0998     .cmd_rcgr = 0x1f738,
0999     .mnd_width = 16,
1000     .hid_width = 5,
1001     .parent_map = gcc_parent_map_1,
1002     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1003     .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1004 };
1005 
1006 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
1007     .name = "gcc_qupv3_wrap1_s0_clk_src",
1008     .parent_data = gcc_parent_data_1,
1009     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1010     .ops = &clk_rcg2_ops,
1011 };
1012 
1013 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
1014     .cmd_rcgr = 0x39148,
1015     .mnd_width = 16,
1016     .hid_width = 5,
1017     .parent_map = gcc_parent_map_1,
1018     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1019     .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
1020 };
1021 
1022 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
1023     .name = "gcc_qupv3_wrap1_s1_clk_src",
1024     .parent_data = gcc_parent_data_1,
1025     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1026     .ops = &clk_rcg2_ops,
1027 };
1028 
1029 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
1030     .cmd_rcgr = 0x39278,
1031     .mnd_width = 16,
1032     .hid_width = 5,
1033     .parent_map = gcc_parent_map_1,
1034     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1035     .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
1036 };
1037 
1038 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
1039     .name = "gcc_qupv3_wrap1_s2_clk_src",
1040     .parent_data = gcc_parent_data_1,
1041     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1042     .ops = &clk_rcg2_ops,
1043 };
1044 
1045 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
1046     .cmd_rcgr = 0x393a8,
1047     .mnd_width = 16,
1048     .hid_width = 5,
1049     .parent_map = gcc_parent_map_1,
1050     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1051     .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
1052 };
1053 
1054 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
1055     .name = "gcc_qupv3_wrap1_s3_clk_src",
1056     .parent_data = gcc_parent_data_1,
1057     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1058     .ops = &clk_rcg2_ops,
1059 };
1060 
1061 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
1062     .cmd_rcgr = 0x394d8,
1063     .mnd_width = 16,
1064     .hid_width = 5,
1065     .parent_map = gcc_parent_map_1,
1066     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1067     .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
1068 };
1069 
1070 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
1071     .name = "gcc_qupv3_wrap1_s4_clk_src",
1072     .parent_data = gcc_parent_data_1,
1073     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1074     .ops = &clk_rcg2_ops,
1075 };
1076 
1077 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
1078     .cmd_rcgr = 0x39608,
1079     .mnd_width = 16,
1080     .hid_width = 5,
1081     .parent_map = gcc_parent_map_1,
1082     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1083     .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
1084 };
1085 
1086 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
1087     .name = "gcc_qupv3_wrap1_s5_clk_src",
1088     .parent_data = gcc_parent_data_1,
1089     .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1090     .ops = &clk_rcg2_ops,
1091 };
1092 
1093 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
1094     .cmd_rcgr = 0x39738,
1095     .mnd_width = 16,
1096     .hid_width = 5,
1097     .parent_map = gcc_parent_map_1,
1098     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1099     .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
1100 };
1101 
1102 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1103     F(144000, P_BI_TCXO, 16, 3, 25),
1104     F(400000, P_BI_TCXO, 12, 1, 4),
1105     F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1106     F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1107     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1108     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1109     F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1110     F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1111     { }
1112 };
1113 
1114 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1115     .cmd_rcgr = 0x38028,
1116     .mnd_width = 8,
1117     .hid_width = 5,
1118     .parent_map = gcc_parent_map_1,
1119     .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1120     .clkr.hw.init = &(struct clk_init_data){
1121         .name = "gcc_sdcc1_apps_clk_src",
1122         .parent_data = gcc_parent_data_1,
1123         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1124         .ops = &clk_rcg2_floor_ops,
1125     },
1126 };
1127 
1128 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1129     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1130     F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0),
1131     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1132     F(300000000, P_GPLL0_OUT_EARLY, 2, 0, 0),
1133     { }
1134 };
1135 
1136 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1137     .cmd_rcgr = 0x38010,
1138     .mnd_width = 0,
1139     .hid_width = 5,
1140     .parent_map = gcc_parent_map_0,
1141     .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1142     .clkr.hw.init = &(struct clk_init_data){
1143         .name = "gcc_sdcc1_ice_core_clk_src",
1144         .parent_data = gcc_parent_data_0,
1145         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1146         .ops = &clk_rcg2_ops,
1147     },
1148 };
1149 
1150 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1151     F(400000, P_BI_TCXO, 12, 1, 4),
1152     F(19200000, P_BI_TCXO, 1, 0, 0),
1153     F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1154     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1155     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1156     F(202000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
1157     { }
1158 };
1159 
1160 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1161     .cmd_rcgr = 0x1e00c,
1162     .mnd_width = 8,
1163     .hid_width = 5,
1164     .parent_map = gcc_parent_map_13,
1165     .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1166     .clkr.hw.init = &(struct clk_init_data){
1167         .name = "gcc_sdcc2_apps_clk_src",
1168         .parent_data = gcc_parent_data_13,
1169         .num_parents = ARRAY_SIZE(gcc_parent_data_13),
1170         .ops = &clk_rcg2_floor_ops,
1171     },
1172 };
1173 
1174 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1175     F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1176     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1177     F(100000000, P_GPLL0_OUT_EARLY, 6, 0, 0),
1178     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1179     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1180     { }
1181 };
1182 
1183 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1184     .cmd_rcgr = 0x45020,
1185     .mnd_width = 8,
1186     .hid_width = 5,
1187     .parent_map = gcc_parent_map_0,
1188     .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1189     .clkr.hw.init = &(struct clk_init_data){
1190         .name = "gcc_ufs_phy_axi_clk_src",
1191         .parent_data = gcc_parent_data_0,
1192         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1193         .ops = &clk_rcg2_ops,
1194     },
1195 };
1196 
1197 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1198     F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1199     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1200     F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0),
1201     F(300000000, P_GPLL0_OUT_EARLY, 2, 0, 0),
1202     { }
1203 };
1204 
1205 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1206     .cmd_rcgr = 0x45048,
1207     .mnd_width = 0,
1208     .hid_width = 5,
1209     .parent_map = gcc_parent_map_0,
1210     .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1211     .clkr.hw.init = &(struct clk_init_data){
1212         .name = "gcc_ufs_phy_ice_core_clk_src",
1213         .parent_data = gcc_parent_data_0,
1214         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1215         .ops = &clk_rcg2_ops,
1216     },
1217 };
1218 
1219 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1220     F(9600000, P_BI_TCXO, 2, 0, 0),
1221     F(19200000, P_BI_TCXO, 1, 0, 0),
1222     { }
1223 };
1224 
1225 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1226     .cmd_rcgr = 0x4507c,
1227     .mnd_width = 0,
1228     .hid_width = 5,
1229     .parent_map = gcc_parent_map_0,
1230     .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1231     .clkr.hw.init = &(struct clk_init_data){
1232         .name = "gcc_ufs_phy_phy_aux_clk_src",
1233         .parent_data = gcc_parent_data_0,
1234         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1235         .ops = &clk_rcg2_ops,
1236     },
1237 };
1238 
1239 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1240     F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1241     F(75000000, P_GPLL0_OUT_EARLY, 8, 0, 0),
1242     F(150000000, P_GPLL0_OUT_EARLY, 4, 0, 0),
1243     { }
1244 };
1245 
1246 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1247     .cmd_rcgr = 0x45060,
1248     .mnd_width = 0,
1249     .hid_width = 5,
1250     .parent_map = gcc_parent_map_0,
1251     .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1252     .clkr.hw.init = &(struct clk_init_data){
1253         .name = "gcc_ufs_phy_unipro_core_clk_src",
1254         .parent_data = gcc_parent_data_0,
1255         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1256         .ops = &clk_rcg2_ops,
1257     },
1258 };
1259 
1260 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1261     F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1262     F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1263     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1264     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1265     { }
1266 };
1267 
1268 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1269     .cmd_rcgr = 0x1a01c,
1270     .mnd_width = 8,
1271     .hid_width = 5,
1272     .parent_map = gcc_parent_map_0,
1273     .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1274     .clkr.hw.init = &(struct clk_init_data){
1275         .name = "gcc_usb30_prim_master_clk_src",
1276         .parent_data = gcc_parent_data_0,
1277         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1278         .ops = &clk_rcg2_ops,
1279     },
1280 };
1281 
1282 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1283     F(19200000, P_BI_TCXO, 1, 0, 0),
1284     F(20000000, P_GPLL0_OUT_AUX2, 15, 0, 0),
1285     F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1286     F(60000000, P_GPLL0_OUT_EARLY, 10, 0, 0),
1287     { }
1288 };
1289 
1290 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1291     .cmd_rcgr = 0x1a034,
1292     .mnd_width = 0,
1293     .hid_width = 5,
1294     .parent_map = gcc_parent_map_0,
1295     .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1296     .clkr.hw.init = &(struct clk_init_data){
1297         .name = "gcc_usb30_prim_mock_utmi_clk_src",
1298         .parent_data = gcc_parent_data_0,
1299         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1300         .ops = &clk_rcg2_ops,
1301     },
1302 };
1303 
1304 static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = {
1305     F(19200000, P_BI_TCXO, 1, 0, 0),
1306     { }
1307 };
1308 
1309 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1310     .cmd_rcgr = 0x1a060,
1311     .mnd_width = 0,
1312     .hid_width = 5,
1313     .parent_map = gcc_parent_map_14,
1314     .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
1315     .clkr.hw.init = &(struct clk_init_data){
1316         .name = "gcc_usb3_prim_phy_aux_clk_src",
1317         .parent_data = gcc_parent_data_14,
1318         .num_parents = ARRAY_SIZE(gcc_parent_data_14),
1319         .ops = &clk_rcg2_ops,
1320     },
1321 };
1322 
1323 static struct clk_rcg2 gcc_vs_ctrl_clk_src = {
1324     .cmd_rcgr = 0x42030,
1325     .mnd_width = 0,
1326     .hid_width = 5,
1327     .parent_map = gcc_parent_map_5,
1328     .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
1329     .clkr.hw.init = &(struct clk_init_data){
1330         .name = "gcc_vs_ctrl_clk_src",
1331         .parent_data = gcc_parent_data_5,
1332         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1333         .ops = &clk_rcg2_ops,
1334     },
1335 };
1336 
1337 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
1338     F(19200000, P_BI_TCXO, 1, 0, 0),
1339     F(400000000, P_GPLL0_OUT_EARLY, 1.5, 0, 0),
1340     F(600000000, P_GPLL0_OUT_EARLY, 1, 0, 0),
1341     { }
1342 };
1343 
1344 static struct clk_rcg2 gcc_vsensor_clk_src = {
1345     .cmd_rcgr = 0x42018,
1346     .mnd_width = 0,
1347     .hid_width = 5,
1348     .parent_map = gcc_parent_map_5,
1349     .freq_tbl = ftbl_gcc_vsensor_clk_src,
1350     .clkr.hw.init = &(struct clk_init_data){
1351         .name = "gcc_vsensor_clk_src",
1352         .parent_data = gcc_parent_data_5,
1353         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1354         .ops = &clk_rcg2_ops,
1355     },
1356 };
1357 
1358 static struct clk_branch gcc_ahb2phy_csi_clk = {
1359     .halt_reg = 0x1d004,
1360     .halt_check = BRANCH_HALT,
1361     .hwcg_reg = 0x1d004,
1362     .hwcg_bit = 1,
1363     .clkr = {
1364         .enable_reg = 0x1d004,
1365         .enable_mask = BIT(0),
1366         .hw.init = &(struct clk_init_data){
1367             .name = "gcc_ahb2phy_csi_clk",
1368             .ops = &clk_branch2_ops,
1369         },
1370     },
1371 };
1372 
1373 static struct clk_branch gcc_ahb2phy_usb_clk = {
1374     .halt_reg = 0x1d008,
1375     .halt_check = BRANCH_HALT,
1376     .hwcg_reg = 0x1d008,
1377     .hwcg_bit = 1,
1378     .clkr = {
1379         .enable_reg = 0x1d008,
1380         .enable_mask = BIT(0),
1381         .hw.init = &(struct clk_init_data){
1382             .name = "gcc_ahb2phy_usb_clk",
1383             .ops = &clk_branch2_ops,
1384         },
1385     },
1386 };
1387 
1388 static struct clk_branch gcc_apc_vs_clk = {
1389     .halt_reg = 0x4204c,
1390     .halt_check = BRANCH_HALT,
1391     .clkr = {
1392         .enable_reg = 0x4204c,
1393         .enable_mask = BIT(0),
1394         .hw.init = &(struct clk_init_data){
1395             .name = "gcc_apc_vs_clk",
1396             .parent_hws = (const struct clk_hw*[]){
1397                 &gcc_vsensor_clk_src.clkr.hw,
1398             },
1399             .num_parents = 1,
1400             .flags = CLK_SET_RATE_PARENT,
1401             .ops = &clk_branch2_ops,
1402         },
1403     },
1404 };
1405 
1406 static struct clk_branch gcc_bimc_gpu_axi_clk = {
1407     .halt_reg = 0x71154,
1408     .halt_check = BRANCH_HALT_DELAY,
1409     .clkr = {
1410         .enable_reg = 0x71154,
1411         .enable_mask = BIT(0),
1412         .hw.init = &(struct clk_init_data){
1413             .name = "gcc_bimc_gpu_axi_clk",
1414             .ops = &clk_branch2_ops,
1415         },
1416     },
1417 };
1418 
1419 static struct clk_branch gcc_boot_rom_ahb_clk = {
1420     .halt_reg = 0x23004,
1421     .halt_check = BRANCH_HALT_VOTED,
1422     .hwcg_reg = 0x23004,
1423     .hwcg_bit = 1,
1424     .clkr = {
1425         .enable_reg = 0x79004,
1426         .enable_mask = BIT(10),
1427         .hw.init = &(struct clk_init_data){
1428             .name = "gcc_boot_rom_ahb_clk",
1429             .ops = &clk_branch2_ops,
1430         },
1431     },
1432 };
1433 
1434 static struct clk_branch gcc_camera_ahb_clk = {
1435     .halt_reg = 0x17008,
1436     .halt_check = BRANCH_HALT_DELAY,
1437     .hwcg_reg = 0x17008,
1438     .hwcg_bit = 1,
1439     .clkr = {
1440         .enable_reg = 0x17008,
1441         .enable_mask = BIT(0),
1442         .hw.init = &(struct clk_init_data){
1443             .name = "gcc_camera_ahb_clk",
1444             .flags = CLK_IS_CRITICAL,
1445             .ops = &clk_branch2_ops,
1446         },
1447     },
1448 };
1449 
1450 static struct clk_branch gcc_camera_xo_clk = {
1451     .halt_reg = 0x17028,
1452     .halt_check = BRANCH_HALT,
1453     .clkr = {
1454         .enable_reg = 0x17028,
1455         .enable_mask = BIT(0),
1456         .hw.init = &(struct clk_init_data){
1457             .name = "gcc_camera_xo_clk",
1458             .flags = CLK_IS_CRITICAL,
1459             .ops = &clk_branch2_ops,
1460         },
1461     },
1462 };
1463 
1464 static struct clk_branch gcc_camss_cci_ahb_clk = {
1465     .halt_reg = 0x52020,
1466     .halt_check = BRANCH_HALT,
1467     .clkr = {
1468         .enable_reg = 0x52020,
1469         .enable_mask = BIT(0),
1470         .hw.init = &(struct clk_init_data){
1471             .name = "gcc_camss_cci_ahb_clk",
1472             .parent_hws = (const struct clk_hw*[]){
1473                 &gcc_camss_ahb_clk_src.clkr.hw,
1474             },
1475             .num_parents = 1,
1476             .flags = CLK_SET_RATE_PARENT,
1477             .ops = &clk_branch2_ops,
1478         },
1479     },
1480 };
1481 
1482 static struct clk_branch gcc_camss_cci_clk = {
1483     .halt_reg = 0x5201c,
1484     .halt_check = BRANCH_HALT,
1485     .clkr = {
1486         .enable_reg = 0x5201c,
1487         .enable_mask = BIT(0),
1488         .hw.init = &(struct clk_init_data){
1489             .name = "gcc_camss_cci_clk",
1490             .parent_hws = (const struct clk_hw*[]){
1491                 &gcc_camss_cci_clk_src.clkr.hw,
1492             },
1493             .num_parents = 1,
1494             .flags = CLK_SET_RATE_PARENT,
1495             .ops = &clk_branch2_ops,
1496         },
1497     },
1498 };
1499 
1500 static struct clk_branch gcc_camss_cphy_csid0_clk = {
1501     .halt_reg = 0x5504c,
1502     .halt_check = BRANCH_HALT,
1503     .clkr = {
1504         .enable_reg = 0x5504c,
1505         .enable_mask = BIT(0),
1506         .hw.init = &(struct clk_init_data){
1507             .name = "gcc_camss_cphy_csid0_clk",
1508             .parent_hws = (const struct clk_hw*[]){
1509                 &gcc_camss_csiphy_clk_src.clkr.hw,
1510             },
1511             .num_parents = 1,
1512             .flags = CLK_SET_RATE_PARENT,
1513             .ops = &clk_branch2_ops,
1514         },
1515     },
1516 };
1517 
1518 static struct clk_branch gcc_camss_cphy_csid1_clk = {
1519     .halt_reg = 0x55088,
1520     .halt_check = BRANCH_HALT,
1521     .clkr = {
1522         .enable_reg = 0x55088,
1523         .enable_mask = BIT(0),
1524         .hw.init = &(struct clk_init_data){
1525             .name = "gcc_camss_cphy_csid1_clk",
1526             .parent_hws = (const struct clk_hw*[]){
1527                 &gcc_camss_csiphy_clk_src.clkr.hw,
1528             },
1529             .num_parents = 1,
1530             .flags = CLK_SET_RATE_PARENT,
1531             .ops = &clk_branch2_ops,
1532         },
1533     },
1534 };
1535 
1536 static struct clk_branch gcc_camss_cphy_csid2_clk = {
1537     .halt_reg = 0x550c0,
1538     .halt_check = BRANCH_HALT,
1539     .clkr = {
1540         .enable_reg = 0x550c0,
1541         .enable_mask = BIT(0),
1542         .hw.init = &(struct clk_init_data){
1543             .name = "gcc_camss_cphy_csid2_clk",
1544             .parent_hws = (const struct clk_hw*[]){
1545                 &gcc_camss_csiphy_clk_src.clkr.hw,
1546             },
1547             .num_parents = 1,
1548             .flags = CLK_SET_RATE_PARENT,
1549             .ops = &clk_branch2_ops,
1550         },
1551     },
1552 };
1553 
1554 static struct clk_branch gcc_camss_cphy_csid3_clk = {
1555     .halt_reg = 0x550fc,
1556     .halt_check = BRANCH_HALT,
1557     .clkr = {
1558         .enable_reg = 0x550fc,
1559         .enable_mask = BIT(0),
1560         .hw.init = &(struct clk_init_data){
1561             .name = "gcc_camss_cphy_csid3_clk",
1562             .parent_hws = (const struct clk_hw*[]){
1563                 &gcc_camss_csiphy_clk_src.clkr.hw,
1564             },
1565             .num_parents = 1,
1566             .flags = CLK_SET_RATE_PARENT,
1567             .ops = &clk_branch2_ops,
1568         },
1569     },
1570 };
1571 
1572 static struct clk_branch gcc_camss_cpp_ahb_clk = {
1573     .halt_reg = 0x560e8,
1574     .halt_check = BRANCH_HALT,
1575     .clkr = {
1576         .enable_reg = 0x560e8,
1577         .enable_mask = BIT(0),
1578         .hw.init = &(struct clk_init_data){
1579             .name = "gcc_camss_cpp_ahb_clk",
1580             .parent_hws = (const struct clk_hw*[]){
1581                 &gcc_camss_ahb_clk_src.clkr.hw,
1582             },
1583             .num_parents = 1,
1584             .flags = CLK_SET_RATE_PARENT,
1585             .ops = &clk_branch2_ops,
1586         },
1587     },
1588 };
1589 
1590 static struct clk_branch gcc_camss_cpp_axi_clk = {
1591     .halt_reg = 0x560f4,
1592     .halt_check = BRANCH_HALT,
1593     .clkr = {
1594         .enable_reg = 0x560f4,
1595         .enable_mask = BIT(0),
1596         .hw.init = &(struct clk_init_data){
1597             .name = "gcc_camss_cpp_axi_clk",
1598             .ops = &clk_branch2_ops,
1599         },
1600     },
1601 };
1602 
1603 static struct clk_branch gcc_camss_cpp_clk = {
1604     .halt_reg = 0x560e0,
1605     .halt_check = BRANCH_HALT,
1606     .clkr = {
1607         .enable_reg = 0x560e0,
1608         .enable_mask = BIT(0),
1609         .hw.init = &(struct clk_init_data){
1610             .name = "gcc_camss_cpp_clk",
1611             .parent_hws = (const struct clk_hw*[]){
1612                 &gcc_camss_cpp_clk_src.clkr.hw,
1613             },
1614             .num_parents = 1,
1615             .flags = CLK_SET_RATE_PARENT,
1616             .ops = &clk_branch2_ops,
1617         },
1618     },
1619 };
1620 
1621 static struct clk_branch gcc_camss_cpp_vbif_ahb_clk = {
1622     .halt_reg = 0x560f0,
1623     .halt_check = BRANCH_HALT,
1624     .clkr = {
1625         .enable_reg = 0x560f0,
1626         .enable_mask = BIT(0),
1627         .hw.init = &(struct clk_init_data){
1628             .name = "gcc_camss_cpp_vbif_ahb_clk",
1629             .parent_hws = (const struct clk_hw*[]){
1630                 &gcc_camss_ahb_clk_src.clkr.hw,
1631             },
1632             .num_parents = 1,
1633             .flags = CLK_SET_RATE_PARENT,
1634             .ops = &clk_branch2_ops,
1635         },
1636     },
1637 };
1638 
1639 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1640     .halt_reg = 0x55050,
1641     .halt_check = BRANCH_HALT,
1642     .clkr = {
1643         .enable_reg = 0x55050,
1644         .enable_mask = BIT(0),
1645         .hw.init = &(struct clk_init_data){
1646             .name = "gcc_camss_csi0_ahb_clk",
1647             .parent_hws = (const struct clk_hw*[]){
1648                 &gcc_camss_ahb_clk_src.clkr.hw,
1649             },
1650             .num_parents = 1,
1651             .flags = CLK_SET_RATE_PARENT,
1652             .ops = &clk_branch2_ops,
1653         },
1654     },
1655 };
1656 
1657 static struct clk_branch gcc_camss_csi0_clk = {
1658     .halt_reg = 0x55048,
1659     .halt_check = BRANCH_HALT,
1660     .clkr = {
1661         .enable_reg = 0x55048,
1662         .enable_mask = BIT(0),
1663         .hw.init = &(struct clk_init_data){
1664             .name = "gcc_camss_csi0_clk",
1665             .parent_hws = (const struct clk_hw*[]){
1666                 &gcc_camss_csi0_clk_src.clkr.hw,
1667             },
1668             .num_parents = 1,
1669             .flags = CLK_SET_RATE_PARENT,
1670             .ops = &clk_branch2_ops,
1671         },
1672     },
1673 };
1674 
1675 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1676     .halt_reg = 0x5301c,
1677     .halt_check = BRANCH_HALT,
1678     .clkr = {
1679         .enable_reg = 0x5301c,
1680         .enable_mask = BIT(0),
1681         .hw.init = &(struct clk_init_data){
1682             .name = "gcc_camss_csi0phytimer_clk",
1683             .parent_hws = (const struct clk_hw*[]){
1684                 &gcc_camss_csi0phytimer_clk_src.clkr.hw,
1685             },
1686             .num_parents = 1,
1687             .flags = CLK_SET_RATE_PARENT,
1688             .ops = &clk_branch2_ops,
1689         },
1690     },
1691 };
1692 
1693 static struct clk_branch gcc_camss_csi0pix_clk = {
1694     .halt_reg = 0x55060,
1695     .halt_check = BRANCH_HALT,
1696     .clkr = {
1697         .enable_reg = 0x55060,
1698         .enable_mask = BIT(0),
1699         .hw.init = &(struct clk_init_data){
1700             .name = "gcc_camss_csi0pix_clk",
1701             .parent_hws = (const struct clk_hw*[]){
1702                 &gcc_camss_csi0_clk_src.clkr.hw,
1703             },
1704             .num_parents = 1,
1705             .flags = CLK_SET_RATE_PARENT,
1706             .ops = &clk_branch2_ops,
1707         },
1708     },
1709 };
1710 
1711 static struct clk_branch gcc_camss_csi0rdi_clk = {
1712     .halt_reg = 0x55058,
1713     .halt_check = BRANCH_HALT,
1714     .clkr = {
1715         .enable_reg = 0x55058,
1716         .enable_mask = BIT(0),
1717         .hw.init = &(struct clk_init_data){
1718             .name = "gcc_camss_csi0rdi_clk",
1719             .parent_hws = (const struct clk_hw*[]){
1720                 &gcc_camss_csi0_clk_src.clkr.hw,
1721             },
1722             .num_parents = 1,
1723             .flags = CLK_SET_RATE_PARENT,
1724             .ops = &clk_branch2_ops,
1725         },
1726     },
1727 };
1728 
1729 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1730     .halt_reg = 0x5508c,
1731     .halt_check = BRANCH_HALT,
1732     .clkr = {
1733         .enable_reg = 0x5508c,
1734         .enable_mask = BIT(0),
1735         .hw.init = &(struct clk_init_data){
1736             .name = "gcc_camss_csi1_ahb_clk",
1737             .parent_hws = (const struct clk_hw*[]){
1738                 &gcc_camss_ahb_clk_src.clkr.hw,
1739             },
1740             .num_parents = 1,
1741             .flags = CLK_SET_RATE_PARENT,
1742             .ops = &clk_branch2_ops,
1743         },
1744     },
1745 };
1746 
1747 static struct clk_branch gcc_camss_csi1_clk = {
1748     .halt_reg = 0x55084,
1749     .halt_check = BRANCH_HALT,
1750     .clkr = {
1751         .enable_reg = 0x55084,
1752         .enable_mask = BIT(0),
1753         .hw.init = &(struct clk_init_data){
1754             .name = "gcc_camss_csi1_clk",
1755             .parent_hws = (const struct clk_hw*[]){
1756                 &gcc_camss_csi1_clk_src.clkr.hw,
1757             },
1758             .num_parents = 1,
1759             .flags = CLK_SET_RATE_PARENT,
1760             .ops = &clk_branch2_ops,
1761         },
1762     },
1763 };
1764 
1765 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1766     .halt_reg = 0x5303c,
1767     .halt_check = BRANCH_HALT,
1768     .clkr = {
1769         .enable_reg = 0x5303c,
1770         .enable_mask = BIT(0),
1771         .hw.init = &(struct clk_init_data){
1772             .name = "gcc_camss_csi1phytimer_clk",
1773             .parent_hws = (const struct clk_hw*[]){
1774                 &gcc_camss_csi1phytimer_clk_src.clkr.hw,
1775             },
1776             .num_parents = 1,
1777             .flags = CLK_SET_RATE_PARENT,
1778             .ops = &clk_branch2_ops,
1779         },
1780     },
1781 };
1782 
1783 static struct clk_branch gcc_camss_csi1pix_clk = {
1784     .halt_reg = 0x5509c,
1785     .halt_check = BRANCH_HALT,
1786     .clkr = {
1787         .enable_reg = 0x5509c,
1788         .enable_mask = BIT(0),
1789         .hw.init = &(struct clk_init_data){
1790             .name = "gcc_camss_csi1pix_clk",
1791             .parent_hws = (const struct clk_hw*[]){
1792                 &gcc_camss_csi1_clk_src.clkr.hw,
1793             },
1794             .num_parents = 1,
1795             .flags = CLK_SET_RATE_PARENT,
1796             .ops = &clk_branch2_ops,
1797         },
1798     },
1799 };
1800 
1801 static struct clk_branch gcc_camss_csi1rdi_clk = {
1802     .halt_reg = 0x55094,
1803     .halt_check = BRANCH_HALT,
1804     .clkr = {
1805         .enable_reg = 0x55094,
1806         .enable_mask = BIT(0),
1807         .hw.init = &(struct clk_init_data){
1808             .name = "gcc_camss_csi1rdi_clk",
1809             .parent_hws = (const struct clk_hw*[]){
1810                 &gcc_camss_csi1_clk_src.clkr.hw,
1811             },
1812             .num_parents = 1,
1813             .flags = CLK_SET_RATE_PARENT,
1814             .ops = &clk_branch2_ops,
1815         },
1816     },
1817 };
1818 
1819 static struct clk_branch gcc_camss_csi2_ahb_clk = {
1820     .halt_reg = 0x550c4,
1821     .halt_check = BRANCH_HALT,
1822     .clkr = {
1823         .enable_reg = 0x550c4,
1824         .enable_mask = BIT(0),
1825         .hw.init = &(struct clk_init_data){
1826             .name = "gcc_camss_csi2_ahb_clk",
1827             .parent_hws = (const struct clk_hw*[]){
1828                 &gcc_camss_ahb_clk_src.clkr.hw,
1829             },
1830             .num_parents = 1,
1831             .flags = CLK_SET_RATE_PARENT,
1832             .ops = &clk_branch2_ops,
1833         },
1834     },
1835 };
1836 
1837 static struct clk_branch gcc_camss_csi2_clk = {
1838     .halt_reg = 0x550bc,
1839     .halt_check = BRANCH_HALT,
1840     .clkr = {
1841         .enable_reg = 0x550bc,
1842         .enable_mask = BIT(0),
1843         .hw.init = &(struct clk_init_data){
1844             .name = "gcc_camss_csi2_clk",
1845             .parent_hws = (const struct clk_hw*[]){
1846                 &gcc_camss_csi2_clk_src.clkr.hw,
1847             },
1848             .num_parents = 1,
1849             .flags = CLK_SET_RATE_PARENT,
1850             .ops = &clk_branch2_ops,
1851         },
1852     },
1853 };
1854 
1855 static struct clk_branch gcc_camss_csi2phytimer_clk = {
1856     .halt_reg = 0x5305c,
1857     .halt_check = BRANCH_HALT,
1858     .clkr = {
1859         .enable_reg = 0x5305c,
1860         .enable_mask = BIT(0),
1861         .hw.init = &(struct clk_init_data){
1862             .name = "gcc_camss_csi2phytimer_clk",
1863             .parent_hws = (const struct clk_hw*[]){
1864                 &gcc_camss_csi2phytimer_clk_src.clkr.hw,
1865             },
1866             .num_parents = 1,
1867             .flags = CLK_SET_RATE_PARENT,
1868             .ops = &clk_branch2_ops,
1869         },
1870     },
1871 };
1872 
1873 static struct clk_branch gcc_camss_csi2pix_clk = {
1874     .halt_reg = 0x550d4,
1875     .halt_check = BRANCH_HALT,
1876     .clkr = {
1877         .enable_reg = 0x550d4,
1878         .enable_mask = BIT(0),
1879         .hw.init = &(struct clk_init_data){
1880             .name = "gcc_camss_csi2pix_clk",
1881             .parent_hws = (const struct clk_hw*[]){
1882                 &gcc_camss_csi2_clk_src.clkr.hw,
1883             },
1884             .num_parents = 1,
1885             .flags = CLK_SET_RATE_PARENT,
1886             .ops = &clk_branch2_ops,
1887         },
1888     },
1889 };
1890 
1891 static struct clk_branch gcc_camss_csi2rdi_clk = {
1892     .halt_reg = 0x550cc,
1893     .halt_check = BRANCH_HALT,
1894     .clkr = {
1895         .enable_reg = 0x550cc,
1896         .enable_mask = BIT(0),
1897         .hw.init = &(struct clk_init_data){
1898             .name = "gcc_camss_csi2rdi_clk",
1899             .parent_hws = (const struct clk_hw*[]){
1900                 &gcc_camss_csi2_clk_src.clkr.hw,
1901             },
1902             .num_parents = 1,
1903             .flags = CLK_SET_RATE_PARENT,
1904             .ops = &clk_branch2_ops,
1905         },
1906     },
1907 };
1908 
1909 static struct clk_branch gcc_camss_csi3_ahb_clk = {
1910     .halt_reg = 0x55100,
1911     .halt_check = BRANCH_HALT,
1912     .clkr = {
1913         .enable_reg = 0x55100,
1914         .enable_mask = BIT(0),
1915         .hw.init = &(struct clk_init_data){
1916             .name = "gcc_camss_csi3_ahb_clk",
1917             .parent_hws = (const struct clk_hw*[]){
1918                 &gcc_camss_ahb_clk_src.clkr.hw,
1919             },
1920             .num_parents = 1,
1921             .flags = CLK_SET_RATE_PARENT,
1922             .ops = &clk_branch2_ops,
1923         },
1924     },
1925 };
1926 
1927 static struct clk_branch gcc_camss_csi3_clk = {
1928     .halt_reg = 0x550f8,
1929     .halt_check = BRANCH_HALT,
1930     .clkr = {
1931         .enable_reg = 0x550f8,
1932         .enable_mask = BIT(0),
1933         .hw.init = &(struct clk_init_data){
1934             .name = "gcc_camss_csi3_clk",
1935             .parent_hws = (const struct clk_hw*[]){
1936                 &gcc_camss_csi3_clk_src.clkr.hw,
1937             },
1938             .num_parents = 1,
1939             .flags = CLK_SET_RATE_PARENT,
1940             .ops = &clk_branch2_ops,
1941         },
1942     },
1943 };
1944 
1945 static struct clk_branch gcc_camss_csi3pix_clk = {
1946     .halt_reg = 0x55110,
1947     .halt_check = BRANCH_HALT,
1948     .clkr = {
1949         .enable_reg = 0x55110,
1950         .enable_mask = BIT(0),
1951         .hw.init = &(struct clk_init_data){
1952             .name = "gcc_camss_csi3pix_clk",
1953             .parent_hws = (const struct clk_hw*[]){
1954                 &gcc_camss_csi3_clk_src.clkr.hw,
1955             },
1956             .num_parents = 1,
1957             .flags = CLK_SET_RATE_PARENT,
1958             .ops = &clk_branch2_ops,
1959         },
1960     },
1961 };
1962 
1963 static struct clk_branch gcc_camss_csi3rdi_clk = {
1964     .halt_reg = 0x55108,
1965     .halt_check = BRANCH_HALT,
1966     .clkr = {
1967         .enable_reg = 0x55108,
1968         .enable_mask = BIT(0),
1969         .hw.init = &(struct clk_init_data){
1970             .name = "gcc_camss_csi3rdi_clk",
1971             .parent_hws = (const struct clk_hw*[]){
1972                 &gcc_camss_csi3_clk_src.clkr.hw,
1973             },
1974             .num_parents = 1,
1975             .flags = CLK_SET_RATE_PARENT,
1976             .ops = &clk_branch2_ops,
1977         },
1978     },
1979 };
1980 
1981 static struct clk_branch gcc_camss_csi_vfe0_clk = {
1982     .halt_reg = 0x54074,
1983     .halt_check = BRANCH_HALT,
1984     .clkr = {
1985         .enable_reg = 0x54074,
1986         .enable_mask = BIT(0),
1987         .hw.init = &(struct clk_init_data){
1988             .name = "gcc_camss_csi_vfe0_clk",
1989             .parent_hws = (const struct clk_hw*[]){
1990                 &gcc_camss_vfe0_clk_src.clkr.hw,
1991             },
1992             .num_parents = 1,
1993             .flags = CLK_SET_RATE_PARENT,
1994             .ops = &clk_branch2_ops,
1995         },
1996     },
1997 };
1998 
1999 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2000     .halt_reg = 0x54080,
2001     .halt_check = BRANCH_HALT,
2002     .clkr = {
2003         .enable_reg = 0x54080,
2004         .enable_mask = BIT(0),
2005         .hw.init = &(struct clk_init_data){
2006             .name = "gcc_camss_csi_vfe1_clk",
2007             .parent_hws = (const struct clk_hw*[]){
2008                 &gcc_camss_vfe1_clk_src.clkr.hw,
2009             },
2010             .num_parents = 1,
2011             .flags = CLK_SET_RATE_PARENT,
2012             .ops = &clk_branch2_ops,
2013         },
2014     },
2015 };
2016 
2017 static struct clk_branch gcc_camss_csiphy0_clk = {
2018     .halt_reg = 0x55018,
2019     .halt_check = BRANCH_HALT,
2020     .clkr = {
2021         .enable_reg = 0x55018,
2022         .enable_mask = BIT(0),
2023         .hw.init = &(struct clk_init_data){
2024             .name = "gcc_camss_csiphy0_clk",
2025             .parent_hws = (const struct clk_hw*[]){
2026                 &gcc_camss_csiphy_clk_src.clkr.hw,
2027             },
2028             .num_parents = 1,
2029             .flags = CLK_SET_RATE_PARENT,
2030             .ops = &clk_branch2_ops,
2031         },
2032     },
2033 };
2034 
2035 static struct clk_branch gcc_camss_csiphy1_clk = {
2036     .halt_reg = 0x5501c,
2037     .halt_check = BRANCH_HALT,
2038     .clkr = {
2039         .enable_reg = 0x5501c,
2040         .enable_mask = BIT(0),
2041         .hw.init = &(struct clk_init_data){
2042             .name = "gcc_camss_csiphy1_clk",
2043             .parent_hws = (const struct clk_hw*[]){
2044                 &gcc_camss_csiphy_clk_src.clkr.hw,
2045             },
2046             .num_parents = 1,
2047             .flags = CLK_SET_RATE_PARENT,
2048             .ops = &clk_branch2_ops,
2049         },
2050     },
2051 };
2052 
2053 static struct clk_branch gcc_camss_csiphy2_clk = {
2054     .halt_reg = 0x55020,
2055     .halt_check = BRANCH_HALT,
2056     .clkr = {
2057         .enable_reg = 0x55020,
2058         .enable_mask = BIT(0),
2059         .hw.init = &(struct clk_init_data){
2060             .name = "gcc_camss_csiphy2_clk",
2061             .parent_hws = (const struct clk_hw*[]){
2062                 &gcc_camss_csiphy_clk_src.clkr.hw,
2063             },
2064             .num_parents = 1,
2065             .flags = CLK_SET_RATE_PARENT,
2066             .ops = &clk_branch2_ops,
2067         },
2068     },
2069 };
2070 
2071 static struct clk_branch gcc_camss_gp0_clk = {
2072     .halt_reg = 0x50018,
2073     .halt_check = BRANCH_HALT,
2074     .clkr = {
2075         .enable_reg = 0x50018,
2076         .enable_mask = BIT(0),
2077         .hw.init = &(struct clk_init_data){
2078             .name = "gcc_camss_gp0_clk",
2079             .parent_hws = (const struct clk_hw*[]){
2080                 &gcc_camss_gp0_clk_src.clkr.hw,
2081             },
2082             .num_parents = 1,
2083             .flags = CLK_SET_RATE_PARENT,
2084             .ops = &clk_branch2_ops,
2085         },
2086     },
2087 };
2088 
2089 static struct clk_branch gcc_camss_gp1_clk = {
2090     .halt_reg = 0x50034,
2091     .halt_check = BRANCH_HALT,
2092     .clkr = {
2093         .enable_reg = 0x50034,
2094         .enable_mask = BIT(0),
2095         .hw.init = &(struct clk_init_data){
2096             .name = "gcc_camss_gp1_clk",
2097             .parent_hws = (const struct clk_hw*[]){
2098                 &gcc_camss_gp1_clk_src.clkr.hw,
2099             },
2100             .num_parents = 1,
2101             .flags = CLK_SET_RATE_PARENT,
2102             .ops = &clk_branch2_ops,
2103         },
2104     },
2105 };
2106 
2107 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2108     .halt_reg = 0x540a4,
2109     .halt_check = BRANCH_HALT,
2110     .clkr = {
2111         .enable_reg = 0x540a4,
2112         .enable_mask = BIT(0),
2113         .hw.init = &(struct clk_init_data){
2114             .name = "gcc_camss_ispif_ahb_clk",
2115             .parent_hws = (const struct clk_hw*[]){
2116                 &gcc_camss_ahb_clk_src.clkr.hw,
2117             },
2118             .num_parents = 1,
2119             .flags = CLK_SET_RATE_PARENT,
2120             .ops = &clk_branch2_ops,
2121         },
2122     },
2123 };
2124 
2125 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2126     .halt_reg = 0x52048,
2127     .halt_check = BRANCH_HALT,
2128     .clkr = {
2129         .enable_reg = 0x52048,
2130         .enable_mask = BIT(0),
2131         .hw.init = &(struct clk_init_data){
2132             .name = "gcc_camss_jpeg_ahb_clk",
2133             .parent_hws = (const struct clk_hw*[]){
2134                 &gcc_camss_ahb_clk_src.clkr.hw,
2135             },
2136             .num_parents = 1,
2137             .flags = CLK_SET_RATE_PARENT,
2138             .ops = &clk_branch2_ops,
2139         },
2140     },
2141 };
2142 
2143 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2144     .halt_reg = 0x5204c,
2145     .halt_check = BRANCH_HALT,
2146     .clkr = {
2147         .enable_reg = 0x5204c,
2148         .enable_mask = BIT(0),
2149         .hw.init = &(struct clk_init_data){
2150             .name = "gcc_camss_jpeg_axi_clk",
2151             .ops = &clk_branch2_ops,
2152         },
2153     },
2154 };
2155 
2156 static struct clk_branch gcc_camss_jpeg_clk = {
2157     .halt_reg = 0x52040,
2158     .halt_check = BRANCH_HALT,
2159     .clkr = {
2160         .enable_reg = 0x52040,
2161         .enable_mask = BIT(0),
2162         .hw.init = &(struct clk_init_data){
2163             .name = "gcc_camss_jpeg_clk",
2164             .parent_hws = (const struct clk_hw*[]){
2165                 &gcc_camss_jpeg_clk_src.clkr.hw,
2166             },
2167             .num_parents = 1,
2168             .flags = CLK_SET_RATE_PARENT,
2169             .ops = &clk_branch2_ops,
2170         },
2171     },
2172 };
2173 
2174 static struct clk_branch gcc_camss_mclk0_clk = {
2175     .halt_reg = 0x51018,
2176     .halt_check = BRANCH_HALT,
2177     .clkr = {
2178         .enable_reg = 0x51018,
2179         .enable_mask = BIT(0),
2180         .hw.init = &(struct clk_init_data){
2181             .name = "gcc_camss_mclk0_clk",
2182             .parent_hws = (const struct clk_hw*[]){
2183                 &gcc_camss_mclk0_clk_src.clkr.hw,
2184             },
2185             .num_parents = 1,
2186             .flags = CLK_SET_RATE_PARENT,
2187             .ops = &clk_branch2_ops,
2188         },
2189     },
2190 };
2191 
2192 static struct clk_branch gcc_camss_mclk1_clk = {
2193     .halt_reg = 0x51034,
2194     .halt_check = BRANCH_HALT,
2195     .clkr = {
2196         .enable_reg = 0x51034,
2197         .enable_mask = BIT(0),
2198         .hw.init = &(struct clk_init_data){
2199             .name = "gcc_camss_mclk1_clk",
2200             .parent_hws = (const struct clk_hw*[]){
2201                 &gcc_camss_mclk1_clk_src.clkr.hw,
2202             },
2203             .num_parents = 1,
2204             .flags = CLK_SET_RATE_PARENT,
2205             .ops = &clk_branch2_ops,
2206         },
2207     },
2208 };
2209 
2210 static struct clk_branch gcc_camss_mclk2_clk = {
2211     .halt_reg = 0x51050,
2212     .halt_check = BRANCH_HALT,
2213     .clkr = {
2214         .enable_reg = 0x51050,
2215         .enable_mask = BIT(0),
2216         .hw.init = &(struct clk_init_data){
2217             .name = "gcc_camss_mclk2_clk",
2218             .parent_hws = (const struct clk_hw*[]){
2219                 &gcc_camss_mclk2_clk_src.clkr.hw,
2220             },
2221             .num_parents = 1,
2222             .flags = CLK_SET_RATE_PARENT,
2223             .ops = &clk_branch2_ops,
2224         },
2225     },
2226 };
2227 
2228 static struct clk_branch gcc_camss_mclk3_clk = {
2229     .halt_reg = 0x5106c,
2230     .halt_check = BRANCH_HALT,
2231     .clkr = {
2232         .enable_reg = 0x5106c,
2233         .enable_mask = BIT(0),
2234         .hw.init = &(struct clk_init_data){
2235             .name = "gcc_camss_mclk3_clk",
2236             .parent_hws = (const struct clk_hw*[]){
2237                 &gcc_camss_mclk3_clk_src.clkr.hw,
2238             },
2239             .num_parents = 1,
2240             .flags = CLK_SET_RATE_PARENT,
2241             .ops = &clk_branch2_ops,
2242         },
2243     },
2244 };
2245 
2246 static struct clk_branch gcc_camss_micro_ahb_clk = {
2247     .halt_reg = 0x560b0,
2248     .halt_check = BRANCH_HALT,
2249     .clkr = {
2250         .enable_reg = 0x560b0,
2251         .enable_mask = BIT(0),
2252         .hw.init = &(struct clk_init_data){
2253             .name = "gcc_camss_micro_ahb_clk",
2254             .parent_hws = (const struct clk_hw*[]){
2255                 &gcc_camss_ahb_clk_src.clkr.hw,
2256             },
2257             .num_parents = 1,
2258             .flags = CLK_SET_RATE_PARENT,
2259             .ops = &clk_branch2_ops,
2260         },
2261     },
2262 };
2263 
2264 static struct clk_branch gcc_camss_throttle_nrt_axi_clk = {
2265     .halt_reg = 0x560a4,
2266     .halt_check = BRANCH_HALT_VOTED,
2267     .clkr = {
2268         .enable_reg = 0x79004,
2269         .enable_mask = BIT(27),
2270         .hw.init = &(struct clk_init_data){
2271             .name = "gcc_camss_throttle_nrt_axi_clk",
2272             .ops = &clk_branch2_ops,
2273         },
2274     },
2275 };
2276 
2277 static struct clk_branch gcc_camss_throttle_rt_axi_clk = {
2278     .halt_reg = 0x560a8,
2279     .halt_check = BRANCH_HALT_VOTED,
2280     .clkr = {
2281         .enable_reg = 0x79004,
2282         .enable_mask = BIT(26),
2283         .hw.init = &(struct clk_init_data){
2284             .name = "gcc_camss_throttle_rt_axi_clk",
2285             .ops = &clk_branch2_ops,
2286         },
2287     },
2288 };
2289 
2290 static struct clk_branch gcc_camss_top_ahb_clk = {
2291     .halt_reg = 0x560a0,
2292     .halt_check = BRANCH_HALT,
2293     .clkr = {
2294         .enable_reg = 0x560a0,
2295         .enable_mask = BIT(0),
2296         .hw.init = &(struct clk_init_data){
2297             .name = "gcc_camss_top_ahb_clk",
2298             .parent_hws = (const struct clk_hw*[]){
2299                 &gcc_camss_ahb_clk_src.clkr.hw,
2300             },
2301             .num_parents = 1,
2302             .flags = CLK_SET_RATE_PARENT,
2303             .ops = &clk_branch2_ops,
2304         },
2305     },
2306 };
2307 
2308 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2309     .halt_reg = 0x54034,
2310     .halt_check = BRANCH_HALT,
2311     .clkr = {
2312         .enable_reg = 0x54034,
2313         .enable_mask = BIT(0),
2314         .hw.init = &(struct clk_init_data){
2315             .name = "gcc_camss_vfe0_ahb_clk",
2316             .parent_hws = (const struct clk_hw*[]){
2317                 &gcc_camss_ahb_clk_src.clkr.hw,
2318             },
2319             .num_parents = 1,
2320             .flags = CLK_SET_RATE_PARENT,
2321             .ops = &clk_branch2_ops,
2322         },
2323     },
2324 };
2325 
2326 static struct clk_branch gcc_camss_vfe0_clk = {
2327     .halt_reg = 0x54028,
2328     .halt_check = BRANCH_HALT,
2329     .clkr = {
2330         .enable_reg = 0x54028,
2331         .enable_mask = BIT(0),
2332         .hw.init = &(struct clk_init_data){
2333             .name = "gcc_camss_vfe0_clk",
2334             .parent_hws = (const struct clk_hw*[]){
2335                 &gcc_camss_vfe0_clk_src.clkr.hw,
2336             },
2337             .num_parents = 1,
2338             .flags = CLK_SET_RATE_PARENT,
2339             .ops = &clk_branch2_ops,
2340         },
2341     },
2342 };
2343 
2344 static struct clk_branch gcc_camss_vfe0_stream_clk = {
2345     .halt_reg = 0x54030,
2346     .halt_check = BRANCH_HALT,
2347     .clkr = {
2348         .enable_reg = 0x54030,
2349         .enable_mask = BIT(0),
2350         .hw.init = &(struct clk_init_data){
2351             .name = "gcc_camss_vfe0_stream_clk",
2352             .parent_hws = (const struct clk_hw*[]){
2353                 &gcc_camss_vfe0_clk_src.clkr.hw,
2354             },
2355             .num_parents = 1,
2356             .flags = CLK_SET_RATE_PARENT,
2357             .ops = &clk_branch2_ops,
2358         },
2359     },
2360 };
2361 
2362 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2363     .halt_reg = 0x5406c,
2364     .halt_check = BRANCH_HALT,
2365     .clkr = {
2366         .enable_reg = 0x5406c,
2367         .enable_mask = BIT(0),
2368         .hw.init = &(struct clk_init_data){
2369             .name = "gcc_camss_vfe1_ahb_clk",
2370             .parent_hws = (const struct clk_hw*[]){
2371                 &gcc_camss_ahb_clk_src.clkr.hw,
2372             },
2373             .num_parents = 1,
2374             .flags = CLK_SET_RATE_PARENT,
2375             .ops = &clk_branch2_ops,
2376         },
2377     },
2378 };
2379 
2380 static struct clk_branch gcc_camss_vfe1_clk = {
2381     .halt_reg = 0x54060,
2382     .halt_check = BRANCH_HALT,
2383     .clkr = {
2384         .enable_reg = 0x54060,
2385         .enable_mask = BIT(0),
2386         .hw.init = &(struct clk_init_data){
2387             .name = "gcc_camss_vfe1_clk",
2388             .parent_hws = (const struct clk_hw*[]){
2389                 &gcc_camss_vfe1_clk_src.clkr.hw,
2390             },
2391             .num_parents = 1,
2392             .flags = CLK_SET_RATE_PARENT,
2393             .ops = &clk_branch2_ops,
2394         },
2395     },
2396 };
2397 
2398 static struct clk_branch gcc_camss_vfe1_stream_clk = {
2399     .halt_reg = 0x54068,
2400     .halt_check = BRANCH_HALT,
2401     .clkr = {
2402         .enable_reg = 0x54068,
2403         .enable_mask = BIT(0),
2404         .hw.init = &(struct clk_init_data){
2405             .name = "gcc_camss_vfe1_stream_clk",
2406             .parent_hws = (const struct clk_hw*[]){
2407                 &gcc_camss_vfe1_clk_src.clkr.hw,
2408             },
2409             .num_parents = 1,
2410             .flags = CLK_SET_RATE_PARENT,
2411             .ops = &clk_branch2_ops,
2412         },
2413     },
2414 };
2415 
2416 static struct clk_branch gcc_camss_vfe_tsctr_clk = {
2417     .halt_reg = 0x5409c,
2418     .halt_check = BRANCH_HALT,
2419     .clkr = {
2420         .enable_reg = 0x5409c,
2421         .enable_mask = BIT(0),
2422         .hw.init = &(struct clk_init_data){
2423             .name = "gcc_camss_vfe_tsctr_clk",
2424             .ops = &clk_branch2_ops,
2425         },
2426     },
2427 };
2428 
2429 static struct clk_branch gcc_camss_vfe_vbif_ahb_clk = {
2430     .halt_reg = 0x5408c,
2431     .halt_check = BRANCH_HALT,
2432     .clkr = {
2433         .enable_reg = 0x5408c,
2434         .enable_mask = BIT(0),
2435         .hw.init = &(struct clk_init_data){
2436             .name = "gcc_camss_vfe_vbif_ahb_clk",
2437             .parent_hws = (const struct clk_hw*[]){
2438                 &gcc_camss_ahb_clk_src.clkr.hw,
2439             },
2440             .num_parents = 1,
2441             .flags = CLK_SET_RATE_PARENT,
2442             .ops = &clk_branch2_ops,
2443         },
2444     },
2445 };
2446 
2447 static struct clk_branch gcc_camss_vfe_vbif_axi_clk = {
2448     .halt_reg = 0x54090,
2449     .halt_check = BRANCH_HALT,
2450     .clkr = {
2451         .enable_reg = 0x54090,
2452         .enable_mask = BIT(0),
2453         .hw.init = &(struct clk_init_data){
2454             .name = "gcc_camss_vfe_vbif_axi_clk",
2455             .ops = &clk_branch2_ops,
2456         },
2457     },
2458 };
2459 
2460 static struct clk_branch gcc_ce1_ahb_clk = {
2461     .halt_reg = 0x2700c,
2462     .halt_check = BRANCH_HALT_VOTED,
2463     .hwcg_reg = 0x2700c,
2464     .hwcg_bit = 1,
2465     .clkr = {
2466         .enable_reg = 0x79004,
2467         .enable_mask = BIT(3),
2468         .hw.init = &(struct clk_init_data){
2469             .name = "gcc_ce1_ahb_clk",
2470             .ops = &clk_branch2_ops,
2471         },
2472     },
2473 };
2474 
2475 static struct clk_branch gcc_ce1_axi_clk = {
2476     .halt_reg = 0x27008,
2477     .halt_check = BRANCH_HALT_VOTED,
2478     .clkr = {
2479         .enable_reg = 0x79004,
2480         .enable_mask = BIT(4),
2481         .hw.init = &(struct clk_init_data){
2482             .name = "gcc_ce1_axi_clk",
2483             .ops = &clk_branch2_ops,
2484         },
2485     },
2486 };
2487 
2488 static struct clk_branch gcc_ce1_clk = {
2489     .halt_reg = 0x27004,
2490     .halt_check = BRANCH_HALT_VOTED,
2491     .clkr = {
2492         .enable_reg = 0x79004,
2493         .enable_mask = BIT(5),
2494         .hw.init = &(struct clk_init_data){
2495             .name = "gcc_ce1_clk",
2496             .ops = &clk_branch2_ops,
2497         },
2498     },
2499 };
2500 
2501 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2502     .halt_reg = 0x1a084,
2503     .halt_check = BRANCH_HALT,
2504     .clkr = {
2505         .enable_reg = 0x1a084,
2506         .enable_mask = BIT(0),
2507         .hw.init = &(struct clk_init_data){
2508             .name = "gcc_cfg_noc_usb3_prim_axi_clk",
2509             .parent_hws = (const struct clk_hw*[]){
2510                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2511             },
2512             .num_parents = 1,
2513             .flags = CLK_SET_RATE_PARENT,
2514             .ops = &clk_branch2_ops,
2515         },
2516     },
2517 };
2518 
2519 static struct clk_branch gcc_cpuss_gnoc_clk = {
2520     .halt_reg = 0x2b004,
2521     .halt_check = BRANCH_HALT_VOTED,
2522     .hwcg_reg = 0x2b004,
2523     .hwcg_bit = 1,
2524     .clkr = {
2525         .enable_reg = 0x79004,
2526         .enable_mask = BIT(22),
2527         .hw.init = &(struct clk_init_data){
2528             .name = "gcc_cpuss_gnoc_clk",
2529             .flags = CLK_IS_CRITICAL,
2530             .ops = &clk_branch2_ops,
2531         },
2532     },
2533 };
2534 
2535 static struct clk_branch gcc_disp_ahb_clk = {
2536     .halt_reg = 0x1700c,
2537     .halt_check = BRANCH_HALT,
2538     .hwcg_reg = 0x1700c,
2539     .hwcg_bit = 1,
2540     .clkr = {
2541         .enable_reg = 0x1700c,
2542         .enable_mask = BIT(0),
2543         .hw.init = &(struct clk_init_data){
2544             .name = "gcc_disp_ahb_clk",
2545             .flags = CLK_IS_CRITICAL,
2546             .ops = &clk_branch2_ops,
2547         },
2548     },
2549 };
2550 
2551 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2552     .halt_check = BRANCH_HALT_DELAY,
2553     .clkr = {
2554         .enable_reg = 0x79004,
2555         .enable_mask = BIT(20),
2556         .hw.init = &(struct clk_init_data){
2557             .name = "gcc_disp_gpll0_div_clk_src",
2558             .parent_hws = (const struct clk_hw*[]){
2559                 &gpll0_out_early.clkr.hw,
2560             },
2561             .num_parents = 1,
2562             .ops = &clk_branch2_ops,
2563         },
2564     },
2565 };
2566 
2567 static struct clk_branch gcc_disp_hf_axi_clk = {
2568     .halt_reg = 0x17020,
2569     .halt_check = BRANCH_HALT,
2570     .clkr = {
2571         .enable_reg = 0x17020,
2572         .enable_mask = BIT(0),
2573         .hw.init = &(struct clk_init_data){
2574             .name = "gcc_disp_hf_axi_clk",
2575             .ops = &clk_branch2_ops,
2576         },
2577     },
2578 };
2579 
2580 static struct clk_branch gcc_disp_throttle_core_clk = {
2581     .halt_reg = 0x17064,
2582     .halt_check = BRANCH_HALT_VOTED,
2583     .clkr = {
2584         .enable_reg = 0x7900c,
2585         .enable_mask = BIT(5),
2586         .hw.init = &(struct clk_init_data){
2587             .name = "gcc_disp_throttle_core_clk",
2588             .ops = &clk_branch2_ops,
2589         },
2590     },
2591 };
2592 
2593 static struct clk_branch gcc_disp_xo_clk = {
2594     .halt_reg = 0x1702c,
2595     .halt_check = BRANCH_HALT,
2596     .clkr = {
2597         .enable_reg = 0x1702c,
2598         .enable_mask = BIT(0),
2599         .hw.init = &(struct clk_init_data){
2600             .name = "gcc_disp_xo_clk",
2601             .flags = CLK_IS_CRITICAL,
2602             .ops = &clk_branch2_ops,
2603         },
2604     },
2605 };
2606 
2607 static struct clk_branch gcc_gp1_clk = {
2608     .halt_reg = 0x4d000,
2609     .halt_check = BRANCH_HALT,
2610     .clkr = {
2611         .enable_reg = 0x4d000,
2612         .enable_mask = BIT(0),
2613         .hw.init = &(struct clk_init_data){
2614             .name = "gcc_gp1_clk",
2615             .parent_hws = (const struct clk_hw*[]){
2616                 &gcc_gp1_clk_src.clkr.hw,
2617             },
2618             .num_parents = 1,
2619             .flags = CLK_SET_RATE_PARENT,
2620             .ops = &clk_branch2_ops,
2621         },
2622     },
2623 };
2624 
2625 static struct clk_branch gcc_gp2_clk = {
2626     .halt_reg = 0x4e000,
2627     .halt_check = BRANCH_HALT,
2628     .clkr = {
2629         .enable_reg = 0x4e000,
2630         .enable_mask = BIT(0),
2631         .hw.init = &(struct clk_init_data){
2632             .name = "gcc_gp2_clk",
2633             .parent_hws = (const struct clk_hw*[]){
2634                 &gcc_gp2_clk_src.clkr.hw,
2635             },
2636             .num_parents = 1,
2637             .flags = CLK_SET_RATE_PARENT,
2638             .ops = &clk_branch2_ops,
2639         },
2640     },
2641 };
2642 
2643 static struct clk_branch gcc_gp3_clk = {
2644     .halt_reg = 0x4f000,
2645     .halt_check = BRANCH_HALT,
2646     .clkr = {
2647         .enable_reg = 0x4f000,
2648         .enable_mask = BIT(0),
2649         .hw.init = &(struct clk_init_data){
2650             .name = "gcc_gp3_clk",
2651             .parent_hws = (const struct clk_hw*[]){
2652                 &gcc_gp3_clk_src.clkr.hw,
2653             },
2654             .num_parents = 1,
2655             .flags = CLK_SET_RATE_PARENT,
2656             .ops = &clk_branch2_ops,
2657         },
2658     },
2659 };
2660 
2661 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2662     .halt_reg = 0x36004,
2663     .halt_check = BRANCH_HALT,
2664     .hwcg_reg = 0x36004,
2665     .hwcg_bit = 1,
2666     .clkr = {
2667         .enable_reg = 0x36004,
2668         .enable_mask = BIT(0),
2669         .hw.init = &(struct clk_init_data){
2670             .name = "gcc_gpu_cfg_ahb_clk",
2671             .flags = CLK_IS_CRITICAL,
2672             .ops = &clk_branch2_ops,
2673         },
2674     },
2675 };
2676 
2677 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2678     .halt_check = BRANCH_HALT_DELAY,
2679     .clkr = {
2680         .enable_reg = 0x79004,
2681         .enable_mask = BIT(15),
2682         .hw.init = &(struct clk_init_data){
2683             .name = "gcc_gpu_gpll0_clk_src",
2684             .parent_hws = (const struct clk_hw*[]){
2685                 &gpll0_out_early.clkr.hw,
2686             },
2687             .num_parents = 1,
2688             .ops = &clk_branch2_ops,
2689         },
2690     },
2691 };
2692 
2693 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2694     .halt_check = BRANCH_HALT_DELAY,
2695     .clkr = {
2696         .enable_reg = 0x79004,
2697         .enable_mask = BIT(16),
2698         .hw.init = &(struct clk_init_data){
2699             .name = "gcc_gpu_gpll0_div_clk_src",
2700             .parent_hws = (const struct clk_hw*[]){
2701                 &gpll0_out_aux2.hw,
2702             },
2703             .num_parents = 1,
2704             .ops = &clk_branch2_ops,
2705         },
2706     },
2707 };
2708 
2709 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2710     .halt_reg = 0x3600c,
2711     .halt_check = BRANCH_VOTED,
2712     .clkr = {
2713         .enable_reg = 0x3600c,
2714         .enable_mask = BIT(0),
2715         .hw.init = &(struct clk_init_data){
2716             .name = "gcc_gpu_memnoc_gfx_clk",
2717             .ops = &clk_branch2_ops,
2718         },
2719     },
2720 };
2721 
2722 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2723     .halt_reg = 0x36018,
2724     .halt_check = BRANCH_HALT,
2725     .clkr = {
2726         .enable_reg = 0x36018,
2727         .enable_mask = BIT(0),
2728         .hw.init = &(struct clk_init_data){
2729             .name = "gcc_gpu_snoc_dvm_gfx_clk",
2730             .ops = &clk_branch2_ops,
2731         },
2732     },
2733 };
2734 
2735 static struct clk_branch gcc_gpu_throttle_core_clk = {
2736     .halt_reg = 0x36048,
2737     .halt_check = BRANCH_HALT_VOTED,
2738     .clkr = {
2739         .enable_reg = 0x79004,
2740         .enable_mask = BIT(31),
2741         .hw.init = &(struct clk_init_data){
2742             .name = "gcc_gpu_throttle_core_clk",
2743             .ops = &clk_branch2_ops,
2744         },
2745     },
2746 };
2747 
2748 static struct clk_branch gcc_gpu_throttle_xo_clk = {
2749     .halt_reg = 0x36044,
2750     .halt_check = BRANCH_HALT,
2751     .clkr = {
2752         .enable_reg = 0x36044,
2753         .enable_mask = BIT(0),
2754         .hw.init = &(struct clk_init_data){
2755             .name = "gcc_gpu_throttle_xo_clk",
2756             .ops = &clk_branch2_ops,
2757         },
2758     },
2759 };
2760 
2761 static struct clk_branch gcc_mss_vs_clk = {
2762     .halt_reg = 0x42048,
2763     .halt_check = BRANCH_HALT,
2764     .clkr = {
2765         .enable_reg = 0x42048,
2766         .enable_mask = BIT(0),
2767         .hw.init = &(struct clk_init_data){
2768             .name = "gcc_mss_vs_clk",
2769             .parent_hws = (const struct clk_hw*[]){
2770                 &gcc_vsensor_clk_src.clkr.hw,
2771             },
2772             .num_parents = 1,
2773             .flags = CLK_SET_RATE_PARENT,
2774             .ops = &clk_branch2_ops,
2775         },
2776     },
2777 };
2778 
2779 static struct clk_branch gcc_pdm2_clk = {
2780     .halt_reg = 0x2000c,
2781     .halt_check = BRANCH_HALT,
2782     .clkr = {
2783         .enable_reg = 0x2000c,
2784         .enable_mask = BIT(0),
2785         .hw.init = &(struct clk_init_data){
2786             .name = "gcc_pdm2_clk",
2787             .parent_hws = (const struct clk_hw*[]){
2788                 &gcc_pdm2_clk_src.clkr.hw,
2789             },
2790             .num_parents = 1,
2791             .flags = CLK_SET_RATE_PARENT,
2792             .ops = &clk_branch2_ops,
2793         },
2794     },
2795 };
2796 
2797 static struct clk_branch gcc_pdm_ahb_clk = {
2798     .halt_reg = 0x20004,
2799     .halt_check = BRANCH_HALT,
2800     .hwcg_reg = 0x20004,
2801     .hwcg_bit = 1,
2802     .clkr = {
2803         .enable_reg = 0x20004,
2804         .enable_mask = BIT(0),
2805         .hw.init = &(struct clk_init_data){
2806             .name = "gcc_pdm_ahb_clk",
2807             .ops = &clk_branch2_ops,
2808         },
2809     },
2810 };
2811 
2812 static struct clk_branch gcc_pdm_xo4_clk = {
2813     .halt_reg = 0x20008,
2814     .halt_check = BRANCH_HALT,
2815     .clkr = {
2816         .enable_reg = 0x20008,
2817         .enable_mask = BIT(0),
2818         .hw.init = &(struct clk_init_data){
2819             .name = "gcc_pdm_xo4_clk",
2820             .ops = &clk_branch2_ops,
2821         },
2822     },
2823 };
2824 
2825 static struct clk_branch gcc_prng_ahb_clk = {
2826     .halt_reg = 0x21004,
2827     .halt_check = BRANCH_HALT_VOTED,
2828     .hwcg_reg = 0x21004,
2829     .hwcg_bit = 1,
2830     .clkr = {
2831         .enable_reg = 0x79004,
2832         .enable_mask = BIT(13),
2833         .hw.init = &(struct clk_init_data){
2834             .name = "gcc_prng_ahb_clk",
2835             .ops = &clk_branch2_ops,
2836         },
2837     },
2838 };
2839 
2840 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2841     .halt_reg = 0x17014,
2842     .halt_check = BRANCH_HALT,
2843     .hwcg_reg = 0x17014,
2844     .hwcg_bit = 1,
2845     .clkr = {
2846         .enable_reg = 0x7900c,
2847         .enable_mask = BIT(0),
2848         .hw.init = &(struct clk_init_data){
2849             .name = "gcc_qmip_camera_nrt_ahb_clk",
2850             .ops = &clk_branch2_ops,
2851         },
2852     },
2853 };
2854 
2855 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2856     .halt_reg = 0x17060,
2857     .halt_check = BRANCH_HALT_VOTED,
2858     .hwcg_reg = 0x17060,
2859     .hwcg_bit = 1,
2860     .clkr = {
2861         .enable_reg = 0x7900c,
2862         .enable_mask = BIT(2),
2863         .hw.init = &(struct clk_init_data){
2864             .name = "gcc_qmip_camera_rt_ahb_clk",
2865             .ops = &clk_branch2_ops,
2866         },
2867     },
2868 };
2869 
2870 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2871     .halt_reg = 0x17018,
2872     .halt_check = BRANCH_HALT,
2873     .hwcg_reg = 0x17018,
2874     .hwcg_bit = 1,
2875     .clkr = {
2876         .enable_reg = 0x7900c,
2877         .enable_mask = BIT(1),
2878         .hw.init = &(struct clk_init_data){
2879             .name = "gcc_qmip_disp_ahb_clk",
2880             .ops = &clk_branch2_ops,
2881         },
2882     },
2883 };
2884 
2885 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2886     .halt_reg = 0x36040,
2887     .halt_check = BRANCH_HALT_VOTED,
2888     .hwcg_reg = 0x36040,
2889     .hwcg_bit = 1,
2890     .clkr = {
2891         .enable_reg = 0x7900c,
2892         .enable_mask = BIT(4),
2893         .hw.init = &(struct clk_init_data){
2894             .name = "gcc_qmip_gpu_cfg_ahb_clk",
2895             .ops = &clk_branch2_ops,
2896         },
2897     },
2898 };
2899 
2900 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2901     .halt_reg = 0x17010,
2902     .halt_check = BRANCH_HALT,
2903     .hwcg_reg = 0x17010,
2904     .hwcg_bit = 1,
2905     .clkr = {
2906         .enable_reg = 0x79004,
2907         .enable_mask = BIT(25),
2908         .hw.init = &(struct clk_init_data){
2909             .name = "gcc_qmip_video_vcodec_ahb_clk",
2910             .ops = &clk_branch2_ops,
2911         },
2912     },
2913 };
2914 
2915 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2916     .halt_reg = 0x1f014,
2917     .halt_check = BRANCH_HALT_VOTED,
2918     .clkr = {
2919         .enable_reg = 0x7900c,
2920         .enable_mask = BIT(9),
2921         .hw.init = &(struct clk_init_data){
2922             .name = "gcc_qupv3_wrap0_core_2x_clk",
2923             .ops = &clk_branch2_ops,
2924         },
2925     },
2926 };
2927 
2928 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2929     .halt_reg = 0x1f00c,
2930     .halt_check = BRANCH_HALT_VOTED,
2931     .clkr = {
2932         .enable_reg = 0x7900c,
2933         .enable_mask = BIT(8),
2934         .hw.init = &(struct clk_init_data){
2935             .name = "gcc_qupv3_wrap0_core_clk",
2936             .ops = &clk_branch2_ops,
2937         },
2938     },
2939 };
2940 
2941 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2942     .halt_reg = 0x1f144,
2943     .halt_check = BRANCH_HALT_VOTED,
2944     .clkr = {
2945         .enable_reg = 0x7900c,
2946         .enable_mask = BIT(10),
2947         .hw.init = &(struct clk_init_data){
2948             .name = "gcc_qupv3_wrap0_s0_clk",
2949             .parent_hws = (const struct clk_hw*[]){
2950                 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2951             },
2952             .num_parents = 1,
2953             .flags = CLK_SET_RATE_PARENT,
2954             .ops = &clk_branch2_ops,
2955         },
2956     },
2957 };
2958 
2959 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2960     .halt_reg = 0x1f274,
2961     .halt_check = BRANCH_HALT_VOTED,
2962     .clkr = {
2963         .enable_reg = 0x7900c,
2964         .enable_mask = BIT(11),
2965         .hw.init = &(struct clk_init_data){
2966             .name = "gcc_qupv3_wrap0_s1_clk",
2967             .parent_hws = (const struct clk_hw*[]){
2968                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2969             },
2970             .num_parents = 1,
2971             .flags = CLK_SET_RATE_PARENT,
2972             .ops = &clk_branch2_ops,
2973         },
2974     },
2975 };
2976 
2977 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2978     .halt_reg = 0x1f3a4,
2979     .halt_check = BRANCH_HALT_VOTED,
2980     .clkr = {
2981         .enable_reg = 0x7900c,
2982         .enable_mask = BIT(12),
2983         .hw.init = &(struct clk_init_data){
2984             .name = "gcc_qupv3_wrap0_s2_clk",
2985             .parent_hws = (const struct clk_hw*[]){
2986                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2987             },
2988             .num_parents = 1,
2989             .flags = CLK_SET_RATE_PARENT,
2990             .ops = &clk_branch2_ops,
2991         },
2992     },
2993 };
2994 
2995 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2996     .halt_reg = 0x1f4d4,
2997     .halt_check = BRANCH_HALT_VOTED,
2998     .clkr = {
2999         .enable_reg = 0x7900c,
3000         .enable_mask = BIT(13),
3001         .hw.init = &(struct clk_init_data){
3002             .name = "gcc_qupv3_wrap0_s3_clk",
3003             .parent_hws = (const struct clk_hw*[]){
3004                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
3005             },
3006             .num_parents = 1,
3007             .flags = CLK_SET_RATE_PARENT,
3008             .ops = &clk_branch2_ops,
3009         },
3010     },
3011 };
3012 
3013 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
3014     .halt_reg = 0x1f604,
3015     .halt_check = BRANCH_HALT_VOTED,
3016     .clkr = {
3017         .enable_reg = 0x7900c,
3018         .enable_mask = BIT(14),
3019         .hw.init = &(struct clk_init_data){
3020             .name = "gcc_qupv3_wrap0_s4_clk",
3021             .parent_hws = (const struct clk_hw*[]){
3022                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
3023             },
3024             .num_parents = 1,
3025             .flags = CLK_SET_RATE_PARENT,
3026             .ops = &clk_branch2_ops,
3027         },
3028     },
3029 };
3030 
3031 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
3032     .halt_reg = 0x1f734,
3033     .halt_check = BRANCH_HALT_VOTED,
3034     .clkr = {
3035         .enable_reg = 0x7900c,
3036         .enable_mask = BIT(15),
3037         .hw.init = &(struct clk_init_data){
3038             .name = "gcc_qupv3_wrap0_s5_clk",
3039             .parent_hws = (const struct clk_hw*[]){
3040                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
3041             },
3042             .num_parents = 1,
3043             .flags = CLK_SET_RATE_PARENT,
3044             .ops = &clk_branch2_ops,
3045         },
3046     },
3047 };
3048 
3049 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
3050     .halt_reg = 0x39014,
3051     .halt_check = BRANCH_HALT_VOTED,
3052     .clkr = {
3053         .enable_reg = 0x7900c,
3054         .enable_mask = BIT(18),
3055         .hw.init = &(struct clk_init_data){
3056             .name = "gcc_qupv3_wrap1_core_2x_clk",
3057             .ops = &clk_branch2_ops,
3058         },
3059     },
3060 };
3061 
3062 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
3063     .halt_reg = 0x3900c,
3064     .halt_check = BRANCH_HALT_VOTED,
3065     .clkr = {
3066         .enable_reg = 0x7900c,
3067         .enable_mask = BIT(19),
3068         .hw.init = &(struct clk_init_data){
3069             .name = "gcc_qupv3_wrap1_core_clk",
3070             .ops = &clk_branch2_ops,
3071         },
3072     },
3073 };
3074 
3075 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
3076     .halt_reg = 0x39144,
3077     .halt_check = BRANCH_HALT_VOTED,
3078     .clkr = {
3079         .enable_reg = 0x7900c,
3080         .enable_mask = BIT(22),
3081         .hw.init = &(struct clk_init_data){
3082             .name = "gcc_qupv3_wrap1_s0_clk",
3083             .parent_hws = (const struct clk_hw*[]){
3084                 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
3085             },
3086             .num_parents = 1,
3087             .flags = CLK_SET_RATE_PARENT,
3088             .ops = &clk_branch2_ops,
3089         },
3090     },
3091 };
3092 
3093 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
3094     .halt_reg = 0x39274,
3095     .halt_check = BRANCH_HALT_VOTED,
3096     .clkr = {
3097         .enable_reg = 0x7900c,
3098         .enable_mask = BIT(23),
3099         .hw.init = &(struct clk_init_data){
3100             .name = "gcc_qupv3_wrap1_s1_clk",
3101             .parent_hws = (const struct clk_hw*[]){
3102                 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
3103             },
3104             .num_parents = 1,
3105             .flags = CLK_SET_RATE_PARENT,
3106             .ops = &clk_branch2_ops,
3107         },
3108     },
3109 };
3110 
3111 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
3112     .halt_reg = 0x393a4,
3113     .halt_check = BRANCH_HALT_VOTED,
3114     .clkr = {
3115         .enable_reg = 0x7900c,
3116         .enable_mask = BIT(24),
3117         .hw.init = &(struct clk_init_data){
3118             .name = "gcc_qupv3_wrap1_s2_clk",
3119             .parent_hws = (const struct clk_hw*[]){
3120                 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
3121             },
3122             .num_parents = 1,
3123             .flags = CLK_SET_RATE_PARENT,
3124             .ops = &clk_branch2_ops,
3125         },
3126     },
3127 };
3128 
3129 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
3130     .halt_reg = 0x394d4,
3131     .halt_check = BRANCH_HALT_VOTED,
3132     .clkr = {
3133         .enable_reg = 0x7900c,
3134         .enable_mask = BIT(25),
3135         .hw.init = &(struct clk_init_data){
3136             .name = "gcc_qupv3_wrap1_s3_clk",
3137             .parent_hws = (const struct clk_hw*[]){
3138                 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
3139             },
3140             .num_parents = 1,
3141             .flags = CLK_SET_RATE_PARENT,
3142             .ops = &clk_branch2_ops,
3143         },
3144     },
3145 };
3146 
3147 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
3148     .halt_reg = 0x39604,
3149     .halt_check = BRANCH_HALT_VOTED,
3150     .clkr = {
3151         .enable_reg = 0x7900c,
3152         .enable_mask = BIT(26),
3153         .hw.init = &(struct clk_init_data){
3154             .name = "gcc_qupv3_wrap1_s4_clk",
3155             .parent_hws = (const struct clk_hw*[]){
3156                 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
3157             },
3158             .num_parents = 1,
3159             .flags = CLK_SET_RATE_PARENT,
3160             .ops = &clk_branch2_ops,
3161         },
3162     },
3163 };
3164 
3165 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
3166     .halt_reg = 0x39734,
3167     .halt_check = BRANCH_HALT_VOTED,
3168     .clkr = {
3169         .enable_reg = 0x7900c,
3170         .enable_mask = BIT(27),
3171         .hw.init = &(struct clk_init_data){
3172             .name = "gcc_qupv3_wrap1_s5_clk",
3173             .parent_hws = (const struct clk_hw*[]){
3174                 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
3175             },
3176             .num_parents = 1,
3177             .flags = CLK_SET_RATE_PARENT,
3178             .ops = &clk_branch2_ops,
3179         },
3180     },
3181 };
3182 
3183 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3184     .halt_reg = 0x1f004,
3185     .halt_check = BRANCH_HALT_VOTED,
3186     .clkr = {
3187         .enable_reg = 0x7900c,
3188         .enable_mask = BIT(6),
3189         .hw.init = &(struct clk_init_data){
3190             .name = "gcc_qupv3_wrap_0_m_ahb_clk",
3191             .ops = &clk_branch2_ops,
3192         },
3193     },
3194 };
3195 
3196 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3197     .halt_reg = 0x1f008,
3198     .halt_check = BRANCH_HALT_VOTED,
3199     .hwcg_reg = 0x1f008,
3200     .hwcg_bit = 1,
3201     .clkr = {
3202         .enable_reg = 0x7900c,
3203         .enable_mask = BIT(7),
3204         .hw.init = &(struct clk_init_data){
3205             .name = "gcc_qupv3_wrap_0_s_ahb_clk",
3206             .ops = &clk_branch2_ops,
3207         },
3208     },
3209 };
3210 
3211 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3212     .halt_reg = 0x39004,
3213     .halt_check = BRANCH_HALT_VOTED,
3214     .clkr = {
3215         .enable_reg = 0x7900c,
3216         .enable_mask = BIT(20),
3217         .hw.init = &(struct clk_init_data){
3218             .name = "gcc_qupv3_wrap_1_m_ahb_clk",
3219             .ops = &clk_branch2_ops,
3220         },
3221     },
3222 };
3223 
3224 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3225     .halt_reg = 0x39008,
3226     .halt_check = BRANCH_HALT_VOTED,
3227     .hwcg_reg = 0x39008,
3228     .hwcg_bit = 1,
3229     .clkr = {
3230         .enable_reg = 0x7900c,
3231         .enable_mask = BIT(21),
3232         .hw.init = &(struct clk_init_data){
3233             .name = "gcc_qupv3_wrap_1_s_ahb_clk",
3234             .ops = &clk_branch2_ops,
3235         },
3236     },
3237 };
3238 
3239 static struct clk_branch gcc_sdcc1_ahb_clk = {
3240     .halt_reg = 0x38008,
3241     .halt_check = BRANCH_HALT,
3242     .clkr = {
3243         .enable_reg = 0x38008,
3244         .enable_mask = BIT(0),
3245         .hw.init = &(struct clk_init_data){
3246             .name = "gcc_sdcc1_ahb_clk",
3247             .ops = &clk_branch2_ops,
3248         },
3249     },
3250 };
3251 
3252 static struct clk_branch gcc_sdcc1_apps_clk = {
3253     .halt_reg = 0x38004,
3254     .halt_check = BRANCH_HALT,
3255     .clkr = {
3256         .enable_reg = 0x38004,
3257         .enable_mask = BIT(0),
3258         .hw.init = &(struct clk_init_data){
3259             .name = "gcc_sdcc1_apps_clk",
3260             .parent_hws = (const struct clk_hw*[]){
3261                 &gcc_sdcc1_apps_clk_src.clkr.hw,
3262             },
3263             .num_parents = 1,
3264             .flags = CLK_SET_RATE_PARENT,
3265             .ops = &clk_branch2_ops,
3266         },
3267     },
3268 };
3269 
3270 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3271     .halt_reg = 0x3800c,
3272     .halt_check = BRANCH_HALT,
3273     .clkr = {
3274         .enable_reg = 0x3800c,
3275         .enable_mask = BIT(0),
3276         .hw.init = &(struct clk_init_data){
3277             .name = "gcc_sdcc1_ice_core_clk",
3278             .parent_hws = (const struct clk_hw*[]){
3279                 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
3280             },
3281             .num_parents = 1,
3282             .flags = CLK_SET_RATE_PARENT,
3283             .ops = &clk_branch2_ops,
3284         },
3285     },
3286 };
3287 
3288 static struct clk_branch gcc_sdcc2_ahb_clk = {
3289     .halt_reg = 0x1e008,
3290     .halt_check = BRANCH_HALT,
3291     .clkr = {
3292         .enable_reg = 0x1e008,
3293         .enable_mask = BIT(0),
3294         .hw.init = &(struct clk_init_data){
3295             .name = "gcc_sdcc2_ahb_clk",
3296             .ops = &clk_branch2_ops,
3297         },
3298     },
3299 };
3300 
3301 static struct clk_branch gcc_sdcc2_apps_clk = {
3302     .halt_reg = 0x1e004,
3303     .halt_check = BRANCH_HALT,
3304     .clkr = {
3305         .enable_reg = 0x1e004,
3306         .enable_mask = BIT(0),
3307         .hw.init = &(struct clk_init_data){
3308             .name = "gcc_sdcc2_apps_clk",
3309             .parent_hws = (const struct clk_hw*[]){
3310                 &gcc_sdcc2_apps_clk_src.clkr.hw,
3311             },
3312             .num_parents = 1,
3313             .flags = CLK_SET_RATE_PARENT,
3314             .ops = &clk_branch2_ops,
3315         },
3316     },
3317 };
3318 
3319 static struct clk_branch gcc_sys_noc_compute_sf_axi_clk = {
3320     .halt_reg = 0x1050c,
3321     .halt_check = BRANCH_HALT,
3322     .clkr = {
3323         .enable_reg = 0x1050c,
3324         .enable_mask = BIT(0),
3325         .hw.init = &(struct clk_init_data){
3326             .name = "gcc_sys_noc_compute_sf_axi_clk",
3327             .flags = CLK_IS_CRITICAL,
3328             .ops = &clk_branch2_ops,
3329         },
3330     },
3331 };
3332 
3333 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
3334     .halt_reg = 0x2b06c,
3335     .halt_check = BRANCH_HALT_VOTED,
3336     .clkr = {
3337         .enable_reg = 0x79004,
3338         .enable_mask = BIT(0),
3339         .hw.init = &(struct clk_init_data){
3340             .name = "gcc_sys_noc_cpuss_ahb_clk",
3341             .flags = CLK_IS_CRITICAL,
3342             .ops = &clk_branch2_ops,
3343         },
3344     },
3345 };
3346 
3347 static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
3348     .halt_reg = 0x45098,
3349     .halt_check = BRANCH_HALT,
3350     .clkr = {
3351         .enable_reg = 0x45098,
3352         .enable_mask = BIT(0),
3353         .hw.init = &(struct clk_init_data){
3354             .name = "gcc_sys_noc_ufs_phy_axi_clk",
3355             .parent_hws = (const struct clk_hw*[]){
3356                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3357             },
3358             .num_parents = 1,
3359             .flags = CLK_SET_RATE_PARENT,
3360             .ops = &clk_branch2_ops,
3361         },
3362     },
3363 };
3364 
3365 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
3366     .halt_reg = 0x1a080,
3367     .halt_check = BRANCH_HALT,
3368     .clkr = {
3369         .enable_reg = 0x1a080,
3370         .enable_mask = BIT(0),
3371         .hw.init = &(struct clk_init_data){
3372             .name = "gcc_sys_noc_usb3_prim_axi_clk",
3373             .parent_hws = (const struct clk_hw*[]){
3374                 &gcc_usb30_prim_master_clk_src.clkr.hw,
3375             },
3376             .num_parents = 1,
3377             .flags = CLK_SET_RATE_PARENT,
3378             .ops = &clk_branch2_ops,
3379         },
3380     },
3381 };
3382 
3383 static struct clk_branch gcc_ufs_mem_clkref_clk = {
3384     .halt_reg = 0x8c000,
3385     .halt_check = BRANCH_HALT,
3386     .clkr = {
3387         .enable_reg = 0x8c000,
3388         .enable_mask = BIT(0),
3389         .hw.init = &(struct clk_init_data){
3390             .name = "gcc_ufs_mem_clkref_clk",
3391             .ops = &clk_branch2_ops,
3392         },
3393     },
3394 };
3395 
3396 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3397     .halt_reg = 0x45014,
3398     .halt_check = BRANCH_HALT,
3399     .hwcg_reg = 0x45014,
3400     .hwcg_bit = 1,
3401     .clkr = {
3402         .enable_reg = 0x45014,
3403         .enable_mask = BIT(0),
3404         .hw.init = &(struct clk_init_data){
3405             .name = "gcc_ufs_phy_ahb_clk",
3406             .ops = &clk_branch2_ops,
3407         },
3408     },
3409 };
3410 
3411 static struct clk_branch gcc_ufs_phy_axi_clk = {
3412     .halt_reg = 0x45010,
3413     .halt_check = BRANCH_HALT,
3414     .hwcg_reg = 0x45010,
3415     .hwcg_bit = 1,
3416     .clkr = {
3417         .enable_reg = 0x45010,
3418         .enable_mask = BIT(0),
3419         .hw.init = &(struct clk_init_data){
3420             .name = "gcc_ufs_phy_axi_clk",
3421             .parent_hws = (const struct clk_hw*[]){
3422                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3423             },
3424             .num_parents = 1,
3425             .flags = CLK_SET_RATE_PARENT,
3426             .ops = &clk_branch2_ops,
3427         },
3428     },
3429 };
3430 
3431 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3432     .halt_reg = 0x45044,
3433     .halt_check = BRANCH_HALT,
3434     .hwcg_reg = 0x45044,
3435     .hwcg_bit = 1,
3436     .clkr = {
3437         .enable_reg = 0x45044,
3438         .enable_mask = BIT(0),
3439         .hw.init = &(struct clk_init_data){
3440             .name = "gcc_ufs_phy_ice_core_clk",
3441             .parent_hws = (const struct clk_hw*[]){
3442                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3443             },
3444             .num_parents = 1,
3445             .flags = CLK_SET_RATE_PARENT,
3446             .ops = &clk_branch2_ops,
3447         },
3448     },
3449 };
3450 
3451 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3452     .halt_reg = 0x45078,
3453     .halt_check = BRANCH_HALT,
3454     .hwcg_reg = 0x45078,
3455     .hwcg_bit = 1,
3456     .clkr = {
3457         .enable_reg = 0x45078,
3458         .enable_mask = BIT(0),
3459         .hw.init = &(struct clk_init_data){
3460             .name = "gcc_ufs_phy_phy_aux_clk",
3461             .parent_hws = (const struct clk_hw*[]){
3462                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3463             },
3464             .num_parents = 1,
3465             .flags = CLK_SET_RATE_PARENT,
3466             .ops = &clk_branch2_ops,
3467         },
3468     },
3469 };
3470 
3471 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3472     .halt_reg = 0x4501c,
3473     .halt_check = BRANCH_HALT_SKIP,
3474     .clkr = {
3475         .enable_reg = 0x4501c,
3476         .enable_mask = BIT(0),
3477         .hw.init = &(struct clk_init_data){
3478             .name = "gcc_ufs_phy_rx_symbol_0_clk",
3479             .ops = &clk_branch2_ops,
3480         },
3481     },
3482 };
3483 
3484 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3485     .halt_reg = 0x45018,
3486     .halt_check = BRANCH_HALT_SKIP,
3487     .clkr = {
3488         .enable_reg = 0x45018,
3489         .enable_mask = BIT(0),
3490         .hw.init = &(struct clk_init_data){
3491             .name = "gcc_ufs_phy_tx_symbol_0_clk",
3492             .ops = &clk_branch2_ops,
3493         },
3494     },
3495 };
3496 
3497 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3498     .halt_reg = 0x45040,
3499     .halt_check = BRANCH_HALT,
3500     .hwcg_reg = 0x45040,
3501     .hwcg_bit = 1,
3502     .clkr = {
3503         .enable_reg = 0x45040,
3504         .enable_mask = BIT(0),
3505         .hw.init = &(struct clk_init_data){
3506             .name = "gcc_ufs_phy_unipro_core_clk",
3507             .parent_hws = (const struct clk_hw*[]){
3508                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3509             },
3510             .num_parents = 1,
3511             .flags = CLK_SET_RATE_PARENT,
3512             .ops = &clk_branch2_ops,
3513         },
3514     },
3515 };
3516 
3517 static struct clk_branch gcc_usb30_prim_master_clk = {
3518     .halt_reg = 0x1a010,
3519     .halt_check = BRANCH_HALT,
3520     .clkr = {
3521         .enable_reg = 0x1a010,
3522         .enable_mask = BIT(0),
3523         .hw.init = &(struct clk_init_data){
3524             .name = "gcc_usb30_prim_master_clk",
3525             .parent_hws = (const struct clk_hw*[]){
3526                 &gcc_usb30_prim_master_clk_src.clkr.hw,
3527             },
3528             .num_parents = 1,
3529             .flags = CLK_SET_RATE_PARENT,
3530             .ops = &clk_branch2_ops,
3531         },
3532     },
3533 };
3534 
3535 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3536     .halt_reg = 0x1a018,
3537     .halt_check = BRANCH_HALT,
3538     .clkr = {
3539         .enable_reg = 0x1a018,
3540         .enable_mask = BIT(0),
3541         .hw.init = &(struct clk_init_data){
3542             .name = "gcc_usb30_prim_mock_utmi_clk",
3543             .parent_hws = (const struct clk_hw*[]){
3544                 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
3545             },
3546             .num_parents = 1,
3547             .flags = CLK_SET_RATE_PARENT,
3548             .ops = &clk_branch2_ops,
3549         },
3550     },
3551 };
3552 
3553 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3554     .halt_reg = 0x1a014,
3555     .halt_check = BRANCH_HALT,
3556     .clkr = {
3557         .enable_reg = 0x1a014,
3558         .enable_mask = BIT(0),
3559         .hw.init = &(struct clk_init_data){
3560             .name = "gcc_usb30_prim_sleep_clk",
3561             .ops = &clk_branch2_ops,
3562         },
3563     },
3564 };
3565 
3566 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3567     .halt_reg = 0x80278,
3568     .halt_check = BRANCH_HALT,
3569     .clkr = {
3570         .enable_reg = 0x80278,
3571         .enable_mask = BIT(0),
3572         .hw.init = &(struct clk_init_data){
3573             .name = "gcc_usb3_prim_clkref_clk",
3574             .ops = &clk_branch2_ops,
3575         },
3576     },
3577 };
3578 
3579 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3580     .halt_reg = 0x1a054,
3581     .halt_check = BRANCH_HALT,
3582     .clkr = {
3583         .enable_reg = 0x1a054,
3584         .enable_mask = BIT(0),
3585         .hw.init = &(struct clk_init_data){
3586             .name = "gcc_usb3_prim_phy_com_aux_clk",
3587             .parent_hws = (const struct clk_hw*[]){
3588                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3589             },
3590             .num_parents = 1,
3591             .flags = CLK_SET_RATE_PARENT,
3592             .ops = &clk_branch2_ops,
3593         },
3594     },
3595 };
3596 
3597 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3598     .halt_check = BRANCH_HALT_SKIP,
3599     .clkr = {
3600         .enable_reg = 0x1a058,
3601         .enable_mask = BIT(0),
3602         .hw.init = &(struct clk_init_data){
3603             .name = "gcc_usb3_prim_phy_pipe_clk",
3604             .ops = &clk_branch2_ops,
3605         },
3606     },
3607 };
3608 
3609 static struct clk_branch gcc_vdda_vs_clk = {
3610     .halt_reg = 0x4200c,
3611     .halt_check = BRANCH_HALT,
3612     .clkr = {
3613         .enable_reg = 0x4200c,
3614         .enable_mask = BIT(0),
3615         .hw.init = &(struct clk_init_data){
3616             .name = "gcc_vdda_vs_clk",
3617             .parent_hws = (const struct clk_hw*[]){
3618                 &gcc_vsensor_clk_src.clkr.hw,
3619             },
3620             .num_parents = 1,
3621             .flags = CLK_SET_RATE_PARENT,
3622             .ops = &clk_branch2_ops,
3623         },
3624     },
3625 };
3626 
3627 static struct clk_branch gcc_vddcx_vs_clk = {
3628     .halt_reg = 0x42004,
3629     .halt_check = BRANCH_HALT,
3630     .clkr = {
3631         .enable_reg = 0x42004,
3632         .enable_mask = BIT(0),
3633         .hw.init = &(struct clk_init_data){
3634             .name = "gcc_vddcx_vs_clk",
3635             .parent_hws = (const struct clk_hw*[]){
3636                 &gcc_vsensor_clk_src.clkr.hw,
3637             },
3638             .num_parents = 1,
3639             .flags = CLK_SET_RATE_PARENT,
3640             .ops = &clk_branch2_ops,
3641         },
3642     },
3643 };
3644 
3645 static struct clk_branch gcc_vddmx_vs_clk = {
3646     .halt_reg = 0x42008,
3647     .halt_check = BRANCH_HALT,
3648     .clkr = {
3649         .enable_reg = 0x42008,
3650         .enable_mask = BIT(0),
3651         .hw.init = &(struct clk_init_data){
3652             .name = "gcc_vddmx_vs_clk",
3653             .parent_hws = (const struct clk_hw*[]){
3654                 &gcc_vsensor_clk_src.clkr.hw,
3655             },
3656             .num_parents = 1,
3657             .flags = CLK_SET_RATE_PARENT,
3658             .ops = &clk_branch2_ops,
3659         },
3660     },
3661 };
3662 
3663 static struct clk_branch gcc_video_ahb_clk = {
3664     .halt_reg = 0x17004,
3665     .halt_check = BRANCH_HALT,
3666     .hwcg_reg = 0x17004,
3667     .hwcg_bit = 1,
3668     .clkr = {
3669         .enable_reg = 0x17004,
3670         .enable_mask = BIT(0),
3671         .hw.init = &(struct clk_init_data){
3672             .name = "gcc_video_ahb_clk",
3673             .flags = CLK_IS_CRITICAL,
3674             .ops = &clk_branch2_ops,
3675         },
3676     },
3677 };
3678 
3679 static struct clk_branch gcc_video_axi0_clk = {
3680     .halt_reg = 0x1701c,
3681     .halt_check = BRANCH_HALT,
3682     .clkr = {
3683         .enable_reg = 0x1701c,
3684         .enable_mask = BIT(0),
3685         .hw.init = &(struct clk_init_data){
3686             .name = "gcc_video_axi0_clk",
3687             .ops = &clk_branch2_ops,
3688         },
3689     },
3690 };
3691 
3692 static struct clk_branch gcc_video_throttle_core_clk = {
3693     .halt_reg = 0x17068,
3694     .halt_check = BRANCH_HALT_VOTED,
3695     .clkr = {
3696         .enable_reg = 0x79004,
3697         .enable_mask = BIT(28),
3698         .hw.init = &(struct clk_init_data){
3699             .name = "gcc_video_throttle_core_clk",
3700             .ops = &clk_branch2_ops,
3701         },
3702     },
3703 };
3704 
3705 static struct clk_branch gcc_video_xo_clk = {
3706     .halt_reg = 0x17024,
3707     .halt_check = BRANCH_HALT,
3708     .clkr = {
3709         .enable_reg = 0x17024,
3710         .enable_mask = BIT(0),
3711         .hw.init = &(struct clk_init_data){
3712             .name = "gcc_video_xo_clk",
3713             .flags = CLK_IS_CRITICAL,
3714             .ops = &clk_branch2_ops,
3715         },
3716     },
3717 };
3718 
3719 static struct clk_branch gcc_vs_ctrl_ahb_clk = {
3720     .halt_reg = 0x42014,
3721     .halt_check = BRANCH_HALT,
3722     .hwcg_reg = 0x42014,
3723     .hwcg_bit = 1,
3724     .clkr = {
3725         .enable_reg = 0x42014,
3726         .enable_mask = BIT(0),
3727         .hw.init = &(struct clk_init_data){
3728             .name = "gcc_vs_ctrl_ahb_clk",
3729             .ops = &clk_branch2_ops,
3730         },
3731     },
3732 };
3733 
3734 static struct clk_branch gcc_vs_ctrl_clk = {
3735     .halt_reg = 0x42010,
3736     .halt_check = BRANCH_HALT,
3737     .clkr = {
3738         .enable_reg = 0x42010,
3739         .enable_mask = BIT(0),
3740         .hw.init = &(struct clk_init_data){
3741             .name = "gcc_vs_ctrl_clk",
3742             .parent_hws = (const struct clk_hw*[]){
3743                 &gcc_vs_ctrl_clk_src.clkr.hw,
3744             },
3745             .num_parents = 1,
3746             .flags = CLK_SET_RATE_PARENT,
3747             .ops = &clk_branch2_ops,
3748         },
3749     },
3750 };
3751 
3752 static struct clk_branch gcc_wcss_vs_clk = {
3753     .halt_reg = 0x42050,
3754     .halt_check = BRANCH_HALT,
3755     .clkr = {
3756         .enable_reg = 0x42050,
3757         .enable_mask = BIT(0),
3758         .hw.init = &(struct clk_init_data){
3759             .name = "gcc_wcss_vs_clk",
3760             .parent_hws = (const struct clk_hw*[]){
3761                 &gcc_vsensor_clk_src.clkr.hw,
3762             },
3763             .num_parents = 1,
3764             .flags = CLK_SET_RATE_PARENT,
3765             .ops = &clk_branch2_ops,
3766         },
3767     },
3768 };
3769 
3770 static struct gdsc usb30_prim_gdsc = {
3771     .gdscr = 0x1a004,
3772     .pd = {
3773         .name = "usb30_prim_gdsc",
3774     },
3775     .pwrsts = PWRSTS_OFF_ON,
3776 };
3777 
3778 static struct gdsc ufs_phy_gdsc = {
3779     .gdscr = 0x45004,
3780     .pd = {
3781         .name = "ufs_phy_gdsc",
3782     },
3783     .pwrsts = PWRSTS_OFF_ON,
3784 };
3785 
3786 static struct gdsc camss_vfe0_gdsc = {
3787     .gdscr = 0x54004,
3788     .pd = {
3789         .name = "camss_vfe0_gdsc",
3790     },
3791     .pwrsts = PWRSTS_OFF_ON,
3792 };
3793 
3794 static struct gdsc camss_vfe1_gdsc = {
3795     .gdscr = 0x5403c,
3796     .pd = {
3797         .name = "camss_vfe1_gdsc",
3798     },
3799     .pwrsts = PWRSTS_OFF_ON,
3800 };
3801 
3802 static struct gdsc camss_top_gdsc = {
3803     .gdscr = 0x5607c,
3804     .pd = {
3805         .name = "camss_top_gdsc",
3806     },
3807     .pwrsts = PWRSTS_OFF_ON,
3808 };
3809 
3810 static struct gdsc cam_cpp_gdsc = {
3811     .gdscr = 0x560bc,
3812     .pd = {
3813         .name = "cam_cpp_gdsc",
3814     },
3815     .pwrsts = PWRSTS_OFF_ON,
3816 };
3817 
3818 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3819     .gdscr = 0x7d060,
3820     .pd = {
3821         .name = "hlos1_vote_turing_mmu_tbu1_gdsc",
3822     },
3823     .pwrsts = PWRSTS_OFF_ON,
3824     .flags = VOTABLE,
3825 };
3826 
3827 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
3828     .gdscr = 0x80074,
3829     .pd = {
3830         .name = "hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc",
3831     },
3832     .pwrsts = PWRSTS_OFF_ON,
3833     .flags = VOTABLE,
3834 };
3835 
3836 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
3837     .gdscr = 0x80084,
3838     .pd = {
3839         .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc",
3840     },
3841     .pwrsts = PWRSTS_OFF_ON,
3842     .flags = VOTABLE,
3843 };
3844 
3845 
3846 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3847     .gdscr = 0x80094,
3848     .pd = {
3849         .name = "hlos1_vote_turing_mmu_tbu0_gdsc",
3850     },
3851     .pwrsts = PWRSTS_OFF_ON,
3852     .flags = VOTABLE,
3853 };
3854 
3855 static struct gdsc *gcc_sm6125_gdscs[] = {
3856     [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3857     [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3858     [CAMSS_VFE0_GDSC] = &camss_vfe0_gdsc,
3859     [CAMSS_VFE1_GDSC] = &camss_vfe1_gdsc,
3860     [CAMSS_TOP_GDSC] = &camss_top_gdsc,
3861     [CAM_CPP_GDSC] = &cam_cpp_gdsc,
3862     [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3863     [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
3864     [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
3865     [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3866 };
3867 
3868 static struct clk_hw *gcc_sm6125_hws[] = {
3869     [GPLL0_OUT_AUX2] = &gpll0_out_aux2.hw,
3870     [GPLL0_OUT_MAIN] = &gpll0_out_main.hw,
3871     [GPLL6_OUT_MAIN] = &gpll6_out_main.hw,
3872     [GPLL7_OUT_MAIN] = &gpll7_out_main.hw,
3873     [GPLL8_OUT_MAIN] = &gpll8_out_main.hw,
3874     [GPLL9_OUT_MAIN] = &gpll9_out_main.hw,
3875 };
3876 
3877 static struct clk_regmap *gcc_sm6125_clocks[] = {
3878     [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
3879     [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
3880     [GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr,
3881     [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
3882     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3883     [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3884     [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3885     [GCC_CAMSS_AHB_CLK_SRC] = &gcc_camss_ahb_clk_src.clkr,
3886     [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3887     [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3888     [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
3889     [GCC_CAMSS_CPHY_CSID0_CLK] = &gcc_camss_cphy_csid0_clk.clkr,
3890     [GCC_CAMSS_CPHY_CSID1_CLK] = &gcc_camss_cphy_csid1_clk.clkr,
3891     [GCC_CAMSS_CPHY_CSID2_CLK] = &gcc_camss_cphy_csid2_clk.clkr,
3892     [GCC_CAMSS_CPHY_CSID3_CLK] = &gcc_camss_cphy_csid3_clk.clkr,
3893     [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3894     [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
3895     [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3896     [GCC_CAMSS_CPP_CLK_SRC] = &gcc_camss_cpp_clk_src.clkr,
3897     [GCC_CAMSS_CPP_VBIF_AHB_CLK] = &gcc_camss_cpp_vbif_ahb_clk.clkr,
3898     [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3899     [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3900     [GCC_CAMSS_CSI0_CLK_SRC] = &gcc_camss_csi0_clk_src.clkr,
3901     [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3902     [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
3903     [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3904     [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3905     [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3906     [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3907     [GCC_CAMSS_CSI1_CLK_SRC] = &gcc_camss_csi1_clk_src.clkr,
3908     [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3909     [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
3910     [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3911     [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3912     [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3913     [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3914     [GCC_CAMSS_CSI2_CLK_SRC] = &gcc_camss_csi2_clk_src.clkr,
3915     [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
3916     [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
3917     [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3918     [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3919     [GCC_CAMSS_CSI3_AHB_CLK] = &gcc_camss_csi3_ahb_clk.clkr,
3920     [GCC_CAMSS_CSI3_CLK] = &gcc_camss_csi3_clk.clkr,
3921     [GCC_CAMSS_CSI3_CLK_SRC] = &gcc_camss_csi3_clk_src.clkr,
3922     [GCC_CAMSS_CSI3PIX_CLK] = &gcc_camss_csi3pix_clk.clkr,
3923     [GCC_CAMSS_CSI3RDI_CLK] = &gcc_camss_csi3rdi_clk.clkr,
3924     [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3925     [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3926     [GCC_CAMSS_CSIPHY0_CLK] = &gcc_camss_csiphy0_clk.clkr,
3927     [GCC_CAMSS_CSIPHY1_CLK] = &gcc_camss_csiphy1_clk.clkr,
3928     [GCC_CAMSS_CSIPHY2_CLK] = &gcc_camss_csiphy2_clk.clkr,
3929     [GCC_CAMSS_CSIPHY_CLK_SRC] = &gcc_camss_csiphy_clk_src.clkr,
3930     [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3931     [GCC_CAMSS_GP0_CLK_SRC] = &gcc_camss_gp0_clk_src.clkr,
3932     [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3933     [GCC_CAMSS_GP1_CLK_SRC] = &gcc_camss_gp1_clk_src.clkr,
3934     [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3935     [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3936     [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3937     [GCC_CAMSS_JPEG_CLK] = &gcc_camss_jpeg_clk.clkr,
3938     [GCC_CAMSS_JPEG_CLK_SRC] = &gcc_camss_jpeg_clk_src.clkr,
3939     [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3940     [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
3941     [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3942     [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
3943     [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3944     [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
3945     [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
3946     [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
3947     [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3948     [GCC_CAMSS_THROTTLE_NRT_AXI_CLK] = &gcc_camss_throttle_nrt_axi_clk.clkr,
3949     [GCC_CAMSS_THROTTLE_RT_AXI_CLK] = &gcc_camss_throttle_rt_axi_clk.clkr,
3950     [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3951     [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3952     [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3953     [GCC_CAMSS_VFE0_CLK_SRC] = &gcc_camss_vfe0_clk_src.clkr,
3954     [GCC_CAMSS_VFE0_STREAM_CLK] = &gcc_camss_vfe0_stream_clk.clkr,
3955     [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3956     [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3957     [GCC_CAMSS_VFE1_CLK_SRC] = &gcc_camss_vfe1_clk_src.clkr,
3958     [GCC_CAMSS_VFE1_STREAM_CLK] = &gcc_camss_vfe1_stream_clk.clkr,
3959     [GCC_CAMSS_VFE_TSCTR_CLK] = &gcc_camss_vfe_tsctr_clk.clkr,
3960     [GCC_CAMSS_VFE_VBIF_AHB_CLK] = &gcc_camss_vfe_vbif_ahb_clk.clkr,
3961     [GCC_CAMSS_VFE_VBIF_AXI_CLK] = &gcc_camss_vfe_vbif_axi_clk.clkr,
3962     [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
3963     [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
3964     [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
3965     [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3966     [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3967     [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3968     [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3969     [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3970     [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
3971     [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3972     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3973     [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3974     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3975     [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3976     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3977     [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3978     [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3979     [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3980     [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3981     [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3982     [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3983     [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
3984     [GCC_GPU_THROTTLE_XO_CLK] = &gcc_gpu_throttle_xo_clk.clkr,
3985     [GCC_MSS_VS_CLK] = &gcc_mss_vs_clk.clkr,
3986     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3987     [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3988     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3989     [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3990     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3991     [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3992     [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3993     [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3994     [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
3995     [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3996     [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3997     [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3998     [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3999     [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4000     [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4001     [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4002     [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4003     [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4004     [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4005     [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4006     [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4007     [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4008     [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4009     [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4010     [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
4011     [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
4012     [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4013     [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4014     [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4015     [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4016     [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4017     [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4018     [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4019     [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4020     [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4021     [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4022     [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4023     [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4024     [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4025     [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4026     [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4027     [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4028     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4029     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4030     [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
4031     [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4032     [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
4033     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4034     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4035     [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4036     [GCC_SYS_NOC_COMPUTE_SF_AXI_CLK] = &gcc_sys_noc_compute_sf_axi_clk.clkr,
4037     [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
4038     [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
4039     [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
4040     [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
4041     [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4042     [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4043     [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4044     [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4045     [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4046     [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4047     [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4048     [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4049     [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4050     [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4051     [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
4052         &gcc_ufs_phy_unipro_core_clk_src.clkr,
4053     [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4054     [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4055     [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4056     [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
4057         &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4058     [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4059     [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4060     [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4061     [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4062     [GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr,
4063     [GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr,
4064     [GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr,
4065     [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
4066     [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4067     [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
4068     [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
4069     [GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr,
4070     [GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr,
4071     [GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr,
4072     [GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
4073     [GCC_WCSS_VS_CLK] = &gcc_wcss_vs_clk.clkr,
4074     [GPLL0_OUT_EARLY] = &gpll0_out_early.clkr,
4075     [GPLL3_OUT_EARLY] = &gpll3_out_early.clkr,
4076     [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
4077     [GPLL5_OUT_MAIN] = &gpll5_out_main.clkr,
4078     [GPLL6_OUT_EARLY] = &gpll6_out_early.clkr,
4079     [GPLL7_OUT_EARLY] = &gpll7_out_early.clkr,
4080     [GPLL8_OUT_EARLY] = &gpll8_out_early.clkr,
4081     [GPLL9_OUT_EARLY] = &gpll9_out_early.clkr,
4082     [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
4083 };
4084 
4085 static const struct qcom_reset_map gcc_sm6125_resets[] = {
4086     [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
4087     [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
4088     [GCC_UFS_PHY_BCR] = { 0x45000 },
4089     [GCC_USB30_PRIM_BCR] = { 0x1a000 },
4090     [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
4091     [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
4092     [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
4093     [GCC_CAMSS_MICRO_BCR] = { 0x560ac },
4094 };
4095 
4096 static struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
4097     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
4098     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
4099     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
4100     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
4101     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
4102     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
4103     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
4104     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
4105     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
4106     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
4107     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
4108     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
4109 };
4110 
4111 static const struct regmap_config gcc_sm6125_regmap_config = {
4112     .reg_bits = 32,
4113     .reg_stride = 4,
4114     .val_bits = 32,
4115     .max_register = 0xc7000,
4116     .fast_io = true,
4117 };
4118 
4119 static const struct qcom_cc_desc gcc_sm6125_desc = {
4120     .config = &gcc_sm6125_regmap_config,
4121     .clks = gcc_sm6125_clocks,
4122     .num_clks = ARRAY_SIZE(gcc_sm6125_clocks),
4123     .clk_hws = gcc_sm6125_hws,
4124     .num_clk_hws = ARRAY_SIZE(gcc_sm6125_hws),
4125     .resets = gcc_sm6125_resets,
4126     .num_resets = ARRAY_SIZE(gcc_sm6125_resets),
4127     .gdscs = gcc_sm6125_gdscs,
4128     .num_gdscs = ARRAY_SIZE(gcc_sm6125_gdscs),
4129 };
4130 
4131 static const struct of_device_id gcc_sm6125_match_table[] = {
4132     { .compatible = "qcom,gcc-sm6125" },
4133     { }
4134 };
4135 MODULE_DEVICE_TABLE(of, gcc_sm6125_match_table);
4136 
4137 static int gcc_sm6125_probe(struct platform_device *pdev)
4138 {
4139     struct regmap *regmap;
4140     int ret;
4141 
4142     regmap = qcom_cc_map(pdev, &gcc_sm6125_desc);
4143     if (IS_ERR(regmap))
4144         return PTR_ERR(regmap);
4145 
4146     /*
4147      * Disable the GPLL0 active input to video block via
4148      * MISC registers.
4149      */
4150     regmap_update_bits(regmap, 0x80258, 0x1, 0x1);
4151 
4152     /*
4153      * Enable DUAL_EDGE mode for MCLK RCGs
4154      * This is required to enable MND divider mode
4155      */
4156     regmap_update_bits(regmap, 0x51004, 0x3000, 0x2000);
4157     regmap_update_bits(regmap, 0x51020, 0x3000, 0x2000);
4158     regmap_update_bits(regmap, 0x5103c, 0x3000, 0x2000);
4159     regmap_update_bits(regmap, 0x51058, 0x3000, 0x2000);
4160 
4161     ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
4162                         ARRAY_SIZE(gcc_dfs_clocks));
4163     if (ret)
4164         return ret;
4165 
4166     return qcom_cc_really_probe(pdev, &gcc_sm6125_desc, regmap);
4167 }
4168 
4169 static struct platform_driver gcc_sm6125_driver = {
4170     .probe = gcc_sm6125_probe,
4171     .driver = {
4172         .name = "gcc-sm6125",
4173         .of_match_table = gcc_sm6125_match_table,
4174     },
4175 };
4176 
4177 static int __init gcc_sm6125_init(void)
4178 {
4179     return platform_driver_register(&gcc_sm6125_driver);
4180 }
4181 subsys_initcall(gcc_sm6125_init);
4182 
4183 static void __exit gcc_sm6125_exit(void)
4184 {
4185     platform_driver_unregister(&gcc_sm6125_driver);
4186 }
4187 module_exit(gcc_sm6125_exit);
4188 
4189 MODULE_DESCRIPTION("QTI GCC SM6125 Driver");
4190 MODULE_LICENSE("GPL v2");