Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/err.h>
0007 #include <linux/kernel.h>
0008 #include <linux/module.h>
0009 #include <linux/of_device.h>
0010 #include <linux/clk-provider.h>
0011 #include <linux/regmap.h>
0012 #include <linux/reset-controller.h>
0013 
0014 #include <dt-bindings/clock/qcom,gcc-sm6115.h>
0015 
0016 #include "clk-alpha-pll.h"
0017 #include "clk-branch.h"
0018 #include "clk-pll.h"
0019 #include "clk-rcg.h"
0020 #include "clk-regmap.h"
0021 #include "clk-regmap-divider.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_GPLL10_OUT_MAIN,
0031     P_GPLL11_OUT_MAIN,
0032     P_GPLL3_OUT_EARLY,
0033     P_GPLL4_OUT_MAIN,
0034     P_GPLL6_OUT_EARLY,
0035     P_GPLL6_OUT_MAIN,
0036     P_GPLL7_OUT_MAIN,
0037     P_GPLL8_OUT_EARLY,
0038     P_GPLL8_OUT_MAIN,
0039     P_GPLL9_OUT_EARLY,
0040     P_GPLL9_OUT_MAIN,
0041     P_SLEEP_CLK,
0042 };
0043 
0044 static struct pll_vco default_vco[] = {
0045     { 500000000, 1000000000, 2 },
0046 };
0047 
0048 static struct pll_vco gpll9_vco[] = {
0049     { 500000000, 1250000000, 0 },
0050 };
0051 
0052 static struct pll_vco gpll10_vco[] = {
0053     { 750000000, 1500000000, 1 },
0054 };
0055 
0056 static struct clk_alpha_pll gpll0 = {
0057     .offset = 0x0,
0058     .vco_table = default_vco,
0059     .num_vco = ARRAY_SIZE(default_vco),
0060     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0061     .clkr = {
0062         .enable_reg = 0x79000,
0063         .enable_mask = BIT(0),
0064         .hw.init = &(struct clk_init_data){
0065             .name = "gpll0",
0066             .parent_data = &(const struct clk_parent_data){
0067                 .fw_name = "bi_tcxo",
0068             },
0069             .num_parents = 1,
0070             .ops = &clk_alpha_pll_ops,
0071         },
0072     },
0073 };
0074 
0075 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
0076     { 0x1, 2 },
0077     { }
0078 };
0079 
0080 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
0081     .offset = 0x0,
0082     .post_div_shift = 8,
0083     .post_div_table = post_div_table_gpll0_out_aux2,
0084     .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
0085     .width = 4,
0086     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0087     .clkr.hw.init = &(struct clk_init_data){
0088         .name = "gpll0_out_aux2",
0089         .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
0090         .num_parents = 1,
0091         .ops = &clk_alpha_pll_postdiv_ro_ops,
0092     },
0093 };
0094 
0095 /* listed as BRAMMO, but it doesn't really match */
0096 static const u8 clk_gpll9_regs[PLL_OFF_MAX_REGS] = {
0097     [PLL_OFF_L_VAL] = 0x04,
0098     [PLL_OFF_ALPHA_VAL] = 0x08,
0099     [PLL_OFF_ALPHA_VAL_U] = 0x0c,
0100     [PLL_OFF_TEST_CTL] = 0x10,
0101     [PLL_OFF_TEST_CTL_U] = 0x14,
0102     [PLL_OFF_USER_CTL] = 0x18,
0103     [PLL_OFF_CONFIG_CTL] = 0x1C,
0104     [PLL_OFF_STATUS] = 0x20,
0105 };
0106 
0107 static const struct clk_div_table post_div_table_gpll0_out_main[] = {
0108     { 0x0, 1 },
0109     { }
0110 };
0111 
0112 static struct clk_alpha_pll_postdiv gpll0_out_main = {
0113     .offset = 0x0,
0114     .post_div_shift = 8,
0115     .post_div_table = post_div_table_gpll0_out_main,
0116     .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main),
0117     .width = 4,
0118     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0119     .clkr.hw.init = &(struct clk_init_data){
0120         .name = "gpll0_out_main",
0121         .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
0122         .num_parents = 1,
0123         .ops = &clk_alpha_pll_postdiv_ro_ops,
0124     },
0125 };
0126 
0127 /* 1152MHz configuration */
0128 static const struct alpha_pll_config gpll10_config = {
0129     .l = 0x3c,
0130     .vco_val = 0x1 << 20,
0131     .vco_mask = GENMASK(21, 20),
0132     .main_output_mask = BIT(0),
0133     .config_ctl_val = 0x4001055b,
0134 };
0135 
0136 static struct clk_alpha_pll gpll10 = {
0137     .offset = 0xa000,
0138     .vco_table = gpll10_vco,
0139     .num_vco = ARRAY_SIZE(gpll10_vco),
0140     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0141     .clkr = {
0142         .enable_reg = 0x79000,
0143         .enable_mask = BIT(10),
0144         .hw.init = &(struct clk_init_data){
0145             .name = "gpll10",
0146             .parent_data = &(const struct clk_parent_data){
0147                 .fw_name = "bi_tcxo",
0148             },
0149             .num_parents = 1,
0150             .ops = &clk_alpha_pll_ops,
0151         },
0152     },
0153 };
0154 
0155 static const struct clk_div_table post_div_table_gpll10_out_main[] = {
0156     { 0x0, 1 },
0157     { }
0158 };
0159 
0160 static struct clk_alpha_pll_postdiv gpll10_out_main = {
0161     .offset = 0xa000,
0162     .post_div_shift = 8,
0163     .post_div_table = post_div_table_gpll10_out_main,
0164     .num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main),
0165     .width = 4,
0166     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0167     .clkr.hw.init = &(struct clk_init_data){
0168         .name = "gpll10_out_main",
0169         .parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw },
0170         .num_parents = 1,
0171         .flags = CLK_SET_RATE_PARENT,
0172         .ops = &clk_alpha_pll_postdiv_ops,
0173     },
0174 };
0175 
0176 /* 600MHz configuration */
0177 static const struct alpha_pll_config gpll11_config = {
0178     .l = 0x1F,
0179     .alpha = 0x0,
0180     .alpha_hi = 0x40,
0181     .alpha_en_mask = BIT(24),
0182     .vco_val = 0x2 << 20,
0183     .vco_mask = GENMASK(21, 20),
0184     .config_ctl_val = 0x4001055b,
0185 };
0186 
0187 static struct clk_alpha_pll gpll11 = {
0188     .offset = 0xb000,
0189     .vco_table = default_vco,
0190     .num_vco = ARRAY_SIZE(default_vco),
0191     .flags = SUPPORTS_DYNAMIC_UPDATE,
0192     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0193     .clkr = {
0194         .enable_reg = 0x79000,
0195         .enable_mask = BIT(11),
0196         .hw.init = &(struct clk_init_data){
0197             .name = "gpll11",
0198             .parent_data = &(const struct clk_parent_data){
0199                 .fw_name = "bi_tcxo",
0200             },
0201             .num_parents = 1,
0202             .ops = &clk_alpha_pll_ops,
0203         },
0204     },
0205 };
0206 
0207 static const struct clk_div_table post_div_table_gpll11_out_main[] = {
0208     { 0x0, 1 },
0209     { }
0210 };
0211 
0212 static struct clk_alpha_pll_postdiv gpll11_out_main = {
0213     .offset = 0xb000,
0214     .post_div_shift = 8,
0215     .post_div_table = post_div_table_gpll11_out_main,
0216     .num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main),
0217     .width = 4,
0218     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0219     .clkr.hw.init = &(struct clk_init_data){
0220         .name = "gpll11_out_main",
0221         .parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw },
0222         .num_parents = 1,
0223         .flags = CLK_SET_RATE_PARENT,
0224         .ops = &clk_alpha_pll_postdiv_ops,
0225     },
0226 };
0227 
0228 static struct clk_alpha_pll gpll3 = {
0229     .offset = 0x3000,
0230     .vco_table = default_vco,
0231     .num_vco = ARRAY_SIZE(default_vco),
0232     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0233     .clkr = {
0234         .enable_reg = 0x79000,
0235         .enable_mask = BIT(3),
0236         .hw.init = &(struct clk_init_data){
0237             .name = "gpll3",
0238             .parent_data = &(const struct clk_parent_data){
0239                 .fw_name = "bi_tcxo",
0240             },
0241             .num_parents = 1,
0242             .ops = &clk_alpha_pll_ops,
0243         },
0244     },
0245 };
0246 
0247 static struct clk_alpha_pll gpll4 = {
0248     .offset = 0x4000,
0249     .vco_table = default_vco,
0250     .num_vco = ARRAY_SIZE(default_vco),
0251     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0252     .clkr = {
0253         .enable_reg = 0x79000,
0254         .enable_mask = BIT(4),
0255         .hw.init = &(struct clk_init_data){
0256             .name = "gpll4",
0257             .parent_data = &(const struct clk_parent_data){
0258                 .fw_name = "bi_tcxo",
0259             },
0260             .num_parents = 1,
0261             .ops = &clk_alpha_pll_ops,
0262         },
0263     },
0264 };
0265 
0266 static const struct clk_div_table post_div_table_gpll4_out_main[] = {
0267     { 0x0, 1 },
0268     { }
0269 };
0270 
0271 static struct clk_alpha_pll_postdiv gpll4_out_main = {
0272     .offset = 0x4000,
0273     .post_div_shift = 8,
0274     .post_div_table = post_div_table_gpll4_out_main,
0275     .num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main),
0276     .width = 4,
0277     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0278     .clkr.hw.init = &(struct clk_init_data){
0279         .name = "gpll4_out_main",
0280         .parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw },
0281         .num_parents = 1,
0282         .ops = &clk_alpha_pll_postdiv_ro_ops,
0283     },
0284 };
0285 
0286 static struct clk_alpha_pll gpll6 = {
0287     .offset = 0x6000,
0288     .vco_table = default_vco,
0289     .num_vco = ARRAY_SIZE(default_vco),
0290     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0291     .clkr = {
0292         .enable_reg = 0x79000,
0293         .enable_mask = BIT(6),
0294         .hw.init = &(struct clk_init_data){
0295             .name = "gpll6",
0296             .parent_data = &(const struct clk_parent_data){
0297                 .fw_name = "bi_tcxo",
0298             },
0299             .num_parents = 1,
0300             .ops = &clk_alpha_pll_ops,
0301         },
0302     },
0303 };
0304 
0305 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
0306     { 0x1, 2 },
0307     { }
0308 };
0309 
0310 static struct clk_alpha_pll_postdiv gpll6_out_main = {
0311     .offset = 0x6000,
0312     .post_div_shift = 8,
0313     .post_div_table = post_div_table_gpll6_out_main,
0314     .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
0315     .width = 4,
0316     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0317     .clkr.hw.init = &(struct clk_init_data){
0318         .name = "gpll6_out_main",
0319         .parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },
0320         .num_parents = 1,
0321         .ops = &clk_alpha_pll_postdiv_ro_ops,
0322     },
0323 };
0324 
0325 static struct clk_alpha_pll gpll7 = {
0326     .offset = 0x7000,
0327     .vco_table = default_vco,
0328     .num_vco = ARRAY_SIZE(default_vco),
0329     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0330     .clkr = {
0331         .enable_reg = 0x79000,
0332         .enable_mask = BIT(7),
0333         .hw.init = &(struct clk_init_data){
0334             .name = "gpll7",
0335             .parent_data = &(const struct clk_parent_data){
0336                 .fw_name = "bi_tcxo",
0337             },
0338             .num_parents = 1,
0339             .ops = &clk_alpha_pll_ops,
0340         },
0341     },
0342 };
0343 
0344 static const struct clk_div_table post_div_table_gpll7_out_main[] = {
0345     { 0x0, 1 },
0346     { }
0347 };
0348 
0349 static struct clk_alpha_pll_postdiv gpll7_out_main = {
0350     .offset = 0x7000,
0351     .post_div_shift = 8,
0352     .post_div_table = post_div_table_gpll7_out_main,
0353     .num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main),
0354     .width = 4,
0355     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0356     .clkr.hw.init = &(struct clk_init_data){
0357         .name = "gpll7_out_main",
0358         .parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw },
0359         .num_parents = 1,
0360         .ops = &clk_alpha_pll_postdiv_ro_ops,
0361     },
0362 };
0363 
0364 /* 800MHz configuration */
0365 static const struct alpha_pll_config gpll8_config = {
0366     .l = 0x29,
0367     .alpha = 0xAAAAAAAA,
0368     .alpha_hi = 0xAA,
0369     .alpha_en_mask = BIT(24),
0370     .vco_val = 0x2 << 20,
0371     .vco_mask = GENMASK(21, 20),
0372     .main_output_mask = BIT(0),
0373     .early_output_mask = BIT(3),
0374     .post_div_val = 0x1 << 8,
0375     .post_div_mask = GENMASK(11, 8),
0376     .config_ctl_val = 0x4001055b,
0377 };
0378 
0379 static struct clk_alpha_pll gpll8 = {
0380     .offset = 0x8000,
0381     .vco_table = default_vco,
0382     .num_vco = ARRAY_SIZE(default_vco),
0383     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0384     .flags = SUPPORTS_DYNAMIC_UPDATE,
0385     .clkr = {
0386         .enable_reg = 0x79000,
0387         .enable_mask = BIT(8),
0388         .hw.init = &(struct clk_init_data){
0389             .name = "gpll8",
0390             .parent_data = &(const struct clk_parent_data){
0391                 .fw_name = "bi_tcxo",
0392             },
0393             .num_parents = 1,
0394             .ops = &clk_alpha_pll_ops,
0395         },
0396     },
0397 };
0398 
0399 static const struct clk_div_table post_div_table_gpll8_out_main[] = {
0400     { 0x1, 2 },
0401     { }
0402 };
0403 
0404 static struct clk_alpha_pll_postdiv gpll8_out_main = {
0405     .offset = 0x8000,
0406     .post_div_shift = 8,
0407     .post_div_table = post_div_table_gpll8_out_main,
0408     .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
0409     .width = 4,
0410     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0411     .clkr.hw.init = &(struct clk_init_data){
0412         .name = "gpll8_out_main",
0413         .parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },
0414         .num_parents = 1,
0415         .flags = CLK_SET_RATE_PARENT,
0416         .ops = &clk_alpha_pll_postdiv_ro_ops,
0417     },
0418 };
0419 
0420 /* 1152MHz configuration */
0421 static const struct alpha_pll_config gpll9_config = {
0422     .l = 0x3C,
0423     .alpha = 0x0,
0424     .post_div_val = 0x1 << 8,
0425     .post_div_mask = GENMASK(9, 8),
0426     .main_output_mask = BIT(0),
0427     .config_ctl_val = 0x00004289,
0428 };
0429 
0430 static struct clk_alpha_pll gpll9 = {
0431     .offset = 0x9000,
0432     .vco_table = gpll9_vco,
0433     .num_vco = ARRAY_SIZE(gpll9_vco),
0434     .regs = clk_gpll9_regs,
0435     .clkr = {
0436         .enable_reg = 0x79000,
0437         .enable_mask = BIT(9),
0438         .hw.init = &(struct clk_init_data){
0439             .name = "gpll9",
0440             .parent_data = &(const struct clk_parent_data){
0441                 .fw_name = "bi_tcxo",
0442             },
0443             .num_parents = 1,
0444             .ops = &clk_alpha_pll_ops,
0445         },
0446     },
0447 };
0448 
0449 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
0450     { 0x1, 2 },
0451     { }
0452 };
0453 
0454 static struct clk_alpha_pll_postdiv gpll9_out_main = {
0455     .offset = 0x9000,
0456     .post_div_shift = 8,
0457     .post_div_table = post_div_table_gpll9_out_main,
0458     .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
0459     .width = 2,
0460     .regs = clk_gpll9_regs,
0461     .clkr.hw.init = &(struct clk_init_data){
0462         .name = "gpll9_out_main",
0463         .parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },
0464         .num_parents = 1,
0465         .flags = CLK_SET_RATE_PARENT,
0466         .ops = &clk_alpha_pll_postdiv_ops,
0467     },
0468 };
0469 
0470 static const struct parent_map gcc_parent_map_0[] = {
0471     { P_BI_TCXO, 0 },
0472     { P_GPLL0_OUT_EARLY, 1 },
0473     { P_GPLL0_OUT_AUX2, 2 },
0474 };
0475 
0476 static const struct clk_parent_data gcc_parents_0[] = {
0477     { .fw_name = "bi_tcxo" },
0478     { .hw = &gpll0.clkr.hw },
0479     { .hw = &gpll0_out_aux2.clkr.hw },
0480 };
0481 
0482 static const struct parent_map gcc_parent_map_1[] = {
0483     { P_BI_TCXO, 0 },
0484     { P_GPLL0_OUT_EARLY, 1 },
0485     { P_GPLL0_OUT_AUX2, 2 },
0486     { P_GPLL6_OUT_MAIN, 4 },
0487 };
0488 
0489 static const struct clk_parent_data gcc_parents_1[] = {
0490     { .fw_name = "bi_tcxo" },
0491     { .hw = &gpll0.clkr.hw },
0492     { .hw = &gpll0_out_aux2.clkr.hw },
0493     { .hw = &gpll6_out_main.clkr.hw },
0494 };
0495 
0496 static const struct parent_map gcc_parent_map_2[] = {
0497     { P_BI_TCXO, 0 },
0498     { P_GPLL0_OUT_EARLY, 1 },
0499     { P_GPLL0_OUT_AUX2, 2 },
0500     { P_SLEEP_CLK, 5 },
0501 };
0502 
0503 static const struct clk_parent_data gcc_parents_2[] = {
0504     { .fw_name = "bi_tcxo" },
0505     { .hw = &gpll0.clkr.hw },
0506     { .hw = &gpll0_out_aux2.clkr.hw },
0507     { .fw_name = "sleep_clk" },
0508 };
0509 
0510 static const struct parent_map gcc_parent_map_3[] = {
0511     { P_BI_TCXO, 0 },
0512     { P_GPLL0_OUT_EARLY, 1 },
0513     { P_GPLL9_OUT_EARLY, 2 },
0514     { P_GPLL10_OUT_MAIN, 3 },
0515     { P_GPLL9_OUT_MAIN, 5 },
0516 };
0517 
0518 static const struct clk_parent_data gcc_parents_3[] = {
0519     { .fw_name = "bi_tcxo" },
0520     { .hw = &gpll0.clkr.hw },
0521     { .hw = &gpll9.clkr.hw },
0522     { .hw = &gpll10_out_main.clkr.hw },
0523     { .hw = &gpll9_out_main.clkr.hw },
0524 };
0525 
0526 static const struct parent_map gcc_parent_map_4[] = {
0527     { P_BI_TCXO, 0 },
0528     { P_GPLL0_OUT_EARLY, 1 },
0529     { P_GPLL0_OUT_AUX2, 2 },
0530     { P_GPLL4_OUT_MAIN, 5 },
0531 };
0532 
0533 static const struct clk_parent_data gcc_parents_4[] = {
0534     { .fw_name = "bi_tcxo" },
0535     { .hw = &gpll0.clkr.hw },
0536     { .hw = &gpll0_out_aux2.clkr.hw },
0537     { .hw = &gpll4_out_main.clkr.hw },
0538 };
0539 
0540 static const struct parent_map gcc_parent_map_5[] = {
0541     { P_BI_TCXO, 0 },
0542     { P_GPLL0_OUT_EARLY, 1 },
0543     { P_GPLL8_OUT_EARLY, 2 },
0544     { P_GPLL10_OUT_MAIN, 3 },
0545     { P_GPLL8_OUT_MAIN, 4 },
0546     { P_GPLL9_OUT_MAIN, 5 },
0547 };
0548 
0549 static const struct clk_parent_data gcc_parents_5[] = {
0550     { .fw_name = "bi_tcxo" },
0551     { .hw = &gpll0.clkr.hw },
0552     { .hw = &gpll8.clkr.hw },
0553     { .hw = &gpll10_out_main.clkr.hw },
0554     { .hw = &gpll8_out_main.clkr.hw },
0555     { .hw = &gpll9_out_main.clkr.hw },
0556 };
0557 
0558 static const struct parent_map gcc_parent_map_6[] = {
0559     { P_BI_TCXO, 0 },
0560     { P_GPLL0_OUT_EARLY, 1 },
0561     { P_GPLL8_OUT_EARLY, 2 },
0562     { P_GPLL10_OUT_MAIN, 3 },
0563     { P_GPLL6_OUT_MAIN, 4 },
0564     { P_GPLL9_OUT_MAIN, 5 },
0565     { P_GPLL3_OUT_EARLY, 6 },
0566 };
0567 
0568 static const struct clk_parent_data gcc_parents_6[] = {
0569     { .fw_name = "bi_tcxo" },
0570     { .hw = &gpll0.clkr.hw },
0571     { .hw = &gpll8.clkr.hw },
0572     { .hw = &gpll10_out_main.clkr.hw },
0573     { .hw = &gpll6_out_main.clkr.hw },
0574     { .hw = &gpll9_out_main.clkr.hw },
0575     { .hw = &gpll3.clkr.hw },
0576 };
0577 
0578 static const struct parent_map gcc_parent_map_7[] = {
0579     { P_BI_TCXO, 0 },
0580     { P_GPLL0_OUT_EARLY, 1 },
0581     { P_GPLL0_OUT_AUX2, 2 },
0582     { P_GPLL10_OUT_MAIN, 3 },
0583     { P_GPLL4_OUT_MAIN, 5 },
0584     { P_GPLL3_OUT_EARLY, 6 },
0585 };
0586 
0587 static const struct clk_parent_data gcc_parents_7[] = {
0588     { .fw_name = "bi_tcxo" },
0589     { .hw = &gpll0.clkr.hw },
0590     { .hw = &gpll0_out_aux2.clkr.hw },
0591     { .hw = &gpll10_out_main.clkr.hw },
0592     { .hw = &gpll4_out_main.clkr.hw },
0593     { .hw = &gpll3.clkr.hw },
0594 };
0595 
0596 static const struct parent_map gcc_parent_map_8[] = {
0597     { P_BI_TCXO, 0 },
0598     { P_GPLL0_OUT_EARLY, 1 },
0599     { P_GPLL8_OUT_EARLY, 2 },
0600     { P_GPLL10_OUT_MAIN, 3 },
0601     { P_GPLL8_OUT_MAIN, 4 },
0602     { P_GPLL9_OUT_MAIN, 5 },
0603     { P_GPLL3_OUT_EARLY, 6 },
0604 };
0605 
0606 static const struct clk_parent_data gcc_parents_8[] = {
0607     { .fw_name = "bi_tcxo" },
0608     { .hw = &gpll0.clkr.hw },
0609     { .hw = &gpll8.clkr.hw },
0610     { .hw = &gpll10_out_main.clkr.hw },
0611     { .hw = &gpll8_out_main.clkr.hw },
0612     { .hw = &gpll9_out_main.clkr.hw },
0613     { .hw = &gpll3.clkr.hw },
0614 };
0615 
0616 static const struct parent_map gcc_parent_map_9[] = {
0617     { P_BI_TCXO, 0 },
0618     { P_GPLL0_OUT_EARLY, 1 },
0619     { P_GPLL0_OUT_AUX2, 2 },
0620     { P_GPLL10_OUT_MAIN, 3 },
0621     { P_GPLL8_OUT_MAIN, 4 },
0622     { P_GPLL9_OUT_MAIN, 5 },
0623     { P_GPLL3_OUT_EARLY, 6 },
0624 };
0625 
0626 static const struct clk_parent_data gcc_parents_9[] = {
0627     { .fw_name = "bi_tcxo" },
0628     { .hw = &gpll0.clkr.hw },
0629     { .hw = &gpll0_out_aux2.clkr.hw },
0630     { .hw = &gpll10_out_main.clkr.hw },
0631     { .hw = &gpll8_out_main.clkr.hw },
0632     { .hw = &gpll9_out_main.clkr.hw },
0633     { .hw = &gpll3.clkr.hw },
0634 };
0635 
0636 static const struct parent_map gcc_parent_map_10[] = {
0637     { P_BI_TCXO, 0 },
0638     { P_GPLL0_OUT_EARLY, 1 },
0639     { P_GPLL8_OUT_EARLY, 2 },
0640     { P_GPLL10_OUT_MAIN, 3 },
0641     { P_GPLL6_OUT_EARLY, 4 },
0642     { P_GPLL9_OUT_MAIN, 5 },
0643 };
0644 
0645 static const struct clk_parent_data gcc_parents_10[] = {
0646     { .fw_name = "bi_tcxo" },
0647     { .hw = &gpll0.clkr.hw },
0648     { .hw = &gpll8.clkr.hw },
0649     { .hw = &gpll10_out_main.clkr.hw },
0650     { .hw = &gpll6.clkr.hw },
0651     { .hw = &gpll9_out_main.clkr.hw },
0652 };
0653 
0654 static const struct parent_map gcc_parent_map_11[] = {
0655     { P_BI_TCXO, 0 },
0656     { P_GPLL0_OUT_EARLY, 1 },
0657     { P_GPLL0_OUT_AUX2, 2 },
0658     { P_GPLL7_OUT_MAIN, 3 },
0659     { P_GPLL4_OUT_MAIN, 5 },
0660 };
0661 
0662 static const struct clk_parent_data gcc_parents_11[] = {
0663     { .fw_name = "bi_tcxo" },
0664     { .hw = &gpll0.clkr.hw },
0665     { .hw = &gpll0_out_aux2.clkr.hw },
0666     { .hw = &gpll7_out_main.clkr.hw },
0667     { .hw = &gpll4_out_main.clkr.hw },
0668 };
0669 
0670 static const struct parent_map gcc_parent_map_12[] = {
0671     { P_BI_TCXO, 0 },
0672     { P_SLEEP_CLK, 5 },
0673 };
0674 
0675 static const struct clk_parent_data gcc_parents_12[] = {
0676     { .fw_name = "bi_tcxo" },
0677     { .fw_name = "sleep_clk" },
0678 };
0679 
0680 static const struct parent_map gcc_parent_map_13[] = {
0681     { P_BI_TCXO, 0 },
0682     { P_GPLL11_OUT_MAIN, 1 },
0683 };
0684 
0685 static const struct clk_parent_data gcc_parents_13[] = {
0686     { .fw_name = "bi_tcxo" },
0687     { .hw = &gpll11_out_main.clkr.hw },
0688 };
0689 
0690 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
0691     F(19200000, P_BI_TCXO, 1, 0, 0),
0692     F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
0693     F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
0694     F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
0695     { }
0696 };
0697 
0698 static struct clk_rcg2 gcc_camss_axi_clk_src = {
0699     .cmd_rcgr = 0x5802c,
0700     .mnd_width = 0,
0701     .hid_width = 5,
0702     .parent_map = gcc_parent_map_7,
0703     .freq_tbl = ftbl_gcc_camss_axi_clk_src,
0704     .clkr.hw.init = &(struct clk_init_data){
0705         .name = "gcc_camss_axi_clk_src",
0706         .parent_data = gcc_parents_7,
0707         .num_parents = ARRAY_SIZE(gcc_parents_7),
0708         .flags = CLK_SET_RATE_PARENT,
0709         .ops = &clk_rcg2_ops,
0710     },
0711 };
0712 
0713 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
0714     F(19200000, P_BI_TCXO, 1, 0, 0),
0715     F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
0716     { }
0717 };
0718 
0719 static struct clk_rcg2 gcc_camss_cci_clk_src = {
0720     .cmd_rcgr = 0x56000,
0721     .mnd_width = 0,
0722     .hid_width = 5,
0723     .parent_map = gcc_parent_map_9,
0724     .freq_tbl = ftbl_gcc_camss_cci_clk_src,
0725     .clkr.hw.init = &(struct clk_init_data){
0726         .name = "gcc_camss_cci_clk_src",
0727         .parent_data = gcc_parents_9,
0728         .num_parents = ARRAY_SIZE(gcc_parents_9),
0729         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0730         .ops = &clk_rcg2_ops,
0731     },
0732 };
0733 
0734 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
0735     F(19200000, P_BI_TCXO, 1, 0, 0),
0736     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
0737     F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
0738     F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
0739     { }
0740 };
0741 
0742 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
0743     .cmd_rcgr = 0x59000,
0744     .mnd_width = 0,
0745     .hid_width = 5,
0746     .parent_map = gcc_parent_map_4,
0747     .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0748     .clkr.hw.init = &(struct clk_init_data){
0749         .name = "gcc_camss_csi0phytimer_clk_src",
0750         .parent_data = gcc_parents_4,
0751         .num_parents = ARRAY_SIZE(gcc_parents_4),
0752         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0753         .ops = &clk_rcg2_ops,
0754     },
0755 };
0756 
0757 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
0758     .cmd_rcgr = 0x5901c,
0759     .mnd_width = 0,
0760     .hid_width = 5,
0761     .parent_map = gcc_parent_map_4,
0762     .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0763     .clkr.hw.init = &(struct clk_init_data){
0764         .name = "gcc_camss_csi1phytimer_clk_src",
0765         .parent_data = gcc_parents_4,
0766         .num_parents = ARRAY_SIZE(gcc_parents_4),
0767         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0768         .ops = &clk_rcg2_ops,
0769     },
0770 };
0771 
0772 static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
0773     .cmd_rcgr = 0x59038,
0774     .mnd_width = 0,
0775     .hid_width = 5,
0776     .parent_map = gcc_parent_map_4,
0777     .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0778     .clkr.hw.init = &(struct clk_init_data){
0779         .name = "gcc_camss_csi2phytimer_clk_src",
0780         .parent_data = gcc_parents_4,
0781         .num_parents = ARRAY_SIZE(gcc_parents_4),
0782         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0783         .ops = &clk_rcg2_ops,
0784     },
0785 };
0786 
0787 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
0788     F(19200000, P_BI_TCXO, 1, 0, 0),
0789     F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
0790     F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),
0791     { }
0792 };
0793 
0794 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
0795     .cmd_rcgr = 0x51000,
0796     .mnd_width = 8,
0797     .hid_width = 5,
0798     .parent_map = gcc_parent_map_3,
0799     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0800     .clkr.hw.init = &(struct clk_init_data){
0801         .name = "gcc_camss_mclk0_clk_src",
0802         .parent_data = gcc_parents_3,
0803         .num_parents = ARRAY_SIZE(gcc_parents_3),
0804         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0805         .ops = &clk_rcg2_ops,
0806     },
0807 };
0808 
0809 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
0810     .cmd_rcgr = 0x5101c,
0811     .mnd_width = 8,
0812     .hid_width = 5,
0813     .parent_map = gcc_parent_map_3,
0814     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0815     .clkr.hw.init = &(struct clk_init_data){
0816         .name = "gcc_camss_mclk1_clk_src",
0817         .parent_data = gcc_parents_3,
0818         .num_parents = ARRAY_SIZE(gcc_parents_3),
0819         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0820         .ops = &clk_rcg2_ops,
0821     },
0822 };
0823 
0824 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
0825     .cmd_rcgr = 0x51038,
0826     .mnd_width = 8,
0827     .hid_width = 5,
0828     .parent_map = gcc_parent_map_3,
0829     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0830     .clkr.hw.init = &(struct clk_init_data){
0831         .name = "gcc_camss_mclk2_clk_src",
0832         .parent_data = gcc_parents_3,
0833         .num_parents = ARRAY_SIZE(gcc_parents_3),
0834         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0835         .ops = &clk_rcg2_ops,
0836     },
0837 };
0838 
0839 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
0840     .cmd_rcgr = 0x51054,
0841     .mnd_width = 8,
0842     .hid_width = 5,
0843     .parent_map = gcc_parent_map_3,
0844     .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0845     .clkr.hw.init = &(struct clk_init_data){
0846         .name = "gcc_camss_mclk3_clk_src",
0847         .parent_data = gcc_parents_3,
0848         .num_parents = ARRAY_SIZE(gcc_parents_3),
0849         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
0850         .ops = &clk_rcg2_ops,
0851     },
0852 };
0853 
0854 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
0855     F(19200000, P_BI_TCXO, 1, 0, 0),
0856     F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
0857     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
0858     { }
0859 };
0860 
0861 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
0862     .cmd_rcgr = 0x55024,
0863     .mnd_width = 0,
0864     .hid_width = 5,
0865     .parent_map = gcc_parent_map_8,
0866     .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
0867     .clkr.hw.init = &(struct clk_init_data){
0868         .name = "gcc_camss_ope_ahb_clk_src",
0869         .parent_data = gcc_parents_8,
0870         .num_parents = ARRAY_SIZE(gcc_parents_8),
0871         .flags = CLK_SET_RATE_PARENT,
0872         .ops = &clk_rcg2_ops,
0873     },
0874 };
0875 
0876 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
0877     F(19200000, P_BI_TCXO, 1, 0, 0),
0878     F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
0879     F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
0880     F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
0881     F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
0882     { }
0883 };
0884 
0885 static struct clk_rcg2 gcc_camss_ope_clk_src = {
0886     .cmd_rcgr = 0x55004,
0887     .mnd_width = 0,
0888     .hid_width = 5,
0889     .parent_map = gcc_parent_map_8,
0890     .freq_tbl = ftbl_gcc_camss_ope_clk_src,
0891     .clkr.hw.init = &(struct clk_init_data){
0892         .name = "gcc_camss_ope_clk_src",
0893         .parent_data = gcc_parents_8,
0894         .num_parents = ARRAY_SIZE(gcc_parents_8),
0895         .flags = CLK_SET_RATE_PARENT,
0896         .ops = &clk_rcg2_ops,
0897     },
0898 };
0899 
0900 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
0901     F(19200000, P_BI_TCXO, 1, 0, 0),
0902     F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
0903     F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
0904     F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
0905     F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
0906     F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
0907     F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
0908     F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
0909     F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
0910     F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
0911     F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
0912     F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
0913     F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
0914     F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
0915     F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
0916     F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
0917     { }
0918 };
0919 
0920 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
0921     .cmd_rcgr = 0x52004,
0922     .mnd_width = 8,
0923     .hid_width = 5,
0924     .parent_map = gcc_parent_map_5,
0925     .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
0926     .clkr.hw.init = &(struct clk_init_data){
0927         .name = "gcc_camss_tfe_0_clk_src",
0928         .parent_data = gcc_parents_5,
0929         .num_parents = ARRAY_SIZE(gcc_parents_5),
0930         .flags = CLK_SET_RATE_PARENT,
0931         .ops = &clk_rcg2_ops,
0932     },
0933 };
0934 
0935 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
0936     F(19200000, P_BI_TCXO, 1, 0, 0),
0937     F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
0938     F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
0939     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
0940     F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
0941     F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
0942     { }
0943 };
0944 
0945 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
0946     .cmd_rcgr = 0x52094,
0947     .mnd_width = 0,
0948     .hid_width = 5,
0949     .parent_map = gcc_parent_map_6,
0950     .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
0951     .clkr.hw.init = &(struct clk_init_data){
0952         .name = "gcc_camss_tfe_0_csid_clk_src",
0953         .parent_data = gcc_parents_6,
0954         .num_parents = ARRAY_SIZE(gcc_parents_6),
0955         .flags = CLK_SET_RATE_PARENT,
0956         .ops = &clk_rcg2_ops,
0957     },
0958 };
0959 
0960 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
0961     .cmd_rcgr = 0x52024,
0962     .mnd_width = 8,
0963     .hid_width = 5,
0964     .parent_map = gcc_parent_map_5,
0965     .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
0966     .clkr.hw.init = &(struct clk_init_data){
0967         .name = "gcc_camss_tfe_1_clk_src",
0968         .parent_data = gcc_parents_5,
0969         .num_parents = ARRAY_SIZE(gcc_parents_5),
0970         .flags = CLK_SET_RATE_PARENT,
0971         .ops = &clk_rcg2_ops,
0972     },
0973 };
0974 
0975 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
0976     .cmd_rcgr = 0x520b4,
0977     .mnd_width = 0,
0978     .hid_width = 5,
0979     .parent_map = gcc_parent_map_6,
0980     .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
0981     .clkr.hw.init = &(struct clk_init_data){
0982         .name = "gcc_camss_tfe_1_csid_clk_src",
0983         .parent_data = gcc_parents_6,
0984         .num_parents = ARRAY_SIZE(gcc_parents_6),
0985         .flags = CLK_SET_RATE_PARENT,
0986         .ops = &clk_rcg2_ops,
0987     },
0988 };
0989 
0990 static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {
0991     .cmd_rcgr = 0x52044,
0992     .mnd_width = 8,
0993     .hid_width = 5,
0994     .parent_map = gcc_parent_map_5,
0995     .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
0996     .clkr.hw.init = &(struct clk_init_data){
0997         .name = "gcc_camss_tfe_2_clk_src",
0998         .parent_data = gcc_parents_5,
0999         .num_parents = ARRAY_SIZE(gcc_parents_5),
1000         .flags = CLK_SET_RATE_PARENT,
1001         .ops = &clk_rcg2_ops,
1002     },
1003 };
1004 
1005 static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {
1006     .cmd_rcgr = 0x520d4,
1007     .mnd_width = 0,
1008     .hid_width = 5,
1009     .parent_map = gcc_parent_map_6,
1010     .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1011     .clkr.hw.init = &(struct clk_init_data){
1012         .name = "gcc_camss_tfe_2_csid_clk_src",
1013         .parent_data = gcc_parents_6,
1014         .num_parents = ARRAY_SIZE(gcc_parents_6),
1015         .flags = CLK_SET_RATE_PARENT,
1016         .ops = &clk_rcg2_ops,
1017     },
1018 };
1019 
1020 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
1021     F(19200000, P_BI_TCXO, 1, 0, 0),
1022     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1023     F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
1024     F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
1025     { }
1026 };
1027 
1028 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
1029     .cmd_rcgr = 0x52064,
1030     .mnd_width = 16,
1031     .hid_width = 5,
1032     .parent_map = gcc_parent_map_10,
1033     .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
1034     .clkr.hw.init = &(struct clk_init_data){
1035         .name = "gcc_camss_tfe_cphy_rx_clk_src",
1036         .parent_data = gcc_parents_10,
1037         .num_parents = ARRAY_SIZE(gcc_parents_10),
1038         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
1039         .ops = &clk_rcg2_ops,
1040     },
1041 };
1042 
1043 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
1044     F(19200000, P_BI_TCXO, 1, 0, 0),
1045     F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1046     F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
1047     { }
1048 };
1049 
1050 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1051     .cmd_rcgr = 0x58010,
1052     .mnd_width = 0,
1053     .hid_width = 5,
1054     .parent_map = gcc_parent_map_7,
1055     .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1056     .clkr.hw.init = &(struct clk_init_data){
1057         .name = "gcc_camss_top_ahb_clk_src",
1058         .parent_data = gcc_parents_7,
1059         .num_parents = ARRAY_SIZE(gcc_parents_7),
1060         .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
1061         .ops = &clk_rcg2_ops,
1062     },
1063 };
1064 
1065 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1066     F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1067     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1068     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1069     F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1070     { }
1071 };
1072 
1073 static struct clk_rcg2 gcc_gp1_clk_src = {
1074     .cmd_rcgr = 0x4d004,
1075     .mnd_width = 8,
1076     .hid_width = 5,
1077     .parent_map = gcc_parent_map_2,
1078     .freq_tbl = ftbl_gcc_gp1_clk_src,
1079     .clkr.hw.init = &(struct clk_init_data){
1080         .name = "gcc_gp1_clk_src",
1081         .parent_data = gcc_parents_2,
1082         .num_parents = ARRAY_SIZE(gcc_parents_2),
1083         .ops = &clk_rcg2_ops,
1084     },
1085 };
1086 
1087 static struct clk_rcg2 gcc_gp2_clk_src = {
1088     .cmd_rcgr = 0x4e004,
1089     .mnd_width = 8,
1090     .hid_width = 5,
1091     .parent_map = gcc_parent_map_2,
1092     .freq_tbl = ftbl_gcc_gp1_clk_src,
1093     .clkr.hw.init = &(struct clk_init_data){
1094         .name = "gcc_gp2_clk_src",
1095         .parent_data = gcc_parents_2,
1096         .num_parents = ARRAY_SIZE(gcc_parents_2),
1097         .ops = &clk_rcg2_ops,
1098     },
1099 };
1100 
1101 static struct clk_rcg2 gcc_gp3_clk_src = {
1102     .cmd_rcgr = 0x4f004,
1103     .mnd_width = 8,
1104     .hid_width = 5,
1105     .parent_map = gcc_parent_map_2,
1106     .freq_tbl = ftbl_gcc_gp1_clk_src,
1107     .clkr.hw.init = &(struct clk_init_data){
1108         .name = "gcc_gp3_clk_src",
1109         .parent_data = gcc_parents_2,
1110         .num_parents = ARRAY_SIZE(gcc_parents_2),
1111         .ops = &clk_rcg2_ops,
1112     },
1113 };
1114 
1115 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1116     F(19200000, P_BI_TCXO, 1, 0, 0),
1117     F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1118     { }
1119 };
1120 
1121 static struct clk_rcg2 gcc_pdm2_clk_src = {
1122     .cmd_rcgr = 0x20010,
1123     .mnd_width = 0,
1124     .hid_width = 5,
1125     .parent_map = gcc_parent_map_0,
1126     .freq_tbl = ftbl_gcc_pdm2_clk_src,
1127     .clkr.hw.init = &(struct clk_init_data){
1128         .name = "gcc_pdm2_clk_src",
1129         .parent_data = gcc_parents_0,
1130         .num_parents = ARRAY_SIZE(gcc_parents_0),
1131         .ops = &clk_rcg2_ops,
1132     },
1133 };
1134 
1135 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1136     F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1137     F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1138     F(19200000, P_BI_TCXO, 1, 0, 0),
1139     F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1140     F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1141     F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1142     F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1143     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1144     F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1145     F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1146     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1147     F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1148     F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1149     F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1150     F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1151     F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1152     { }
1153 };
1154 
1155 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1156     .name = "gcc_qupv3_wrap0_s0_clk_src",
1157     .parent_data = gcc_parents_1,
1158     .num_parents = ARRAY_SIZE(gcc_parents_1),
1159     .ops = &clk_rcg2_ops,
1160 };
1161 
1162 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1163     .cmd_rcgr = 0x1f148,
1164     .mnd_width = 16,
1165     .hid_width = 5,
1166     .parent_map = gcc_parent_map_1,
1167     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1168     .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1169 };
1170 
1171 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1172     .name = "gcc_qupv3_wrap0_s1_clk_src",
1173     .parent_data = gcc_parents_1,
1174     .num_parents = ARRAY_SIZE(gcc_parents_1),
1175     .ops = &clk_rcg2_ops,
1176 };
1177 
1178 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1179     .cmd_rcgr = 0x1f278,
1180     .mnd_width = 16,
1181     .hid_width = 5,
1182     .parent_map = gcc_parent_map_1,
1183     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1184     .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1185 };
1186 
1187 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1188     .name = "gcc_qupv3_wrap0_s2_clk_src",
1189     .parent_data = gcc_parents_1,
1190     .num_parents = ARRAY_SIZE(gcc_parents_1),
1191     .ops = &clk_rcg2_ops,
1192 };
1193 
1194 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1195     .cmd_rcgr = 0x1f3a8,
1196     .mnd_width = 16,
1197     .hid_width = 5,
1198     .parent_map = gcc_parent_map_1,
1199     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1200     .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1201 };
1202 
1203 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1204     .name = "gcc_qupv3_wrap0_s3_clk_src",
1205     .parent_data = gcc_parents_1,
1206     .num_parents = ARRAY_SIZE(gcc_parents_1),
1207     .ops = &clk_rcg2_ops,
1208 };
1209 
1210 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1211     .cmd_rcgr = 0x1f4d8,
1212     .mnd_width = 16,
1213     .hid_width = 5,
1214     .parent_map = gcc_parent_map_1,
1215     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1216     .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1217 };
1218 
1219 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1220     .name = "gcc_qupv3_wrap0_s4_clk_src",
1221     .parent_data = gcc_parents_1,
1222     .num_parents = ARRAY_SIZE(gcc_parents_1),
1223     .ops = &clk_rcg2_ops,
1224 };
1225 
1226 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1227     .cmd_rcgr = 0x1f608,
1228     .mnd_width = 16,
1229     .hid_width = 5,
1230     .parent_map = gcc_parent_map_1,
1231     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1232     .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1233 };
1234 
1235 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1236     .name = "gcc_qupv3_wrap0_s5_clk_src",
1237     .parent_data = gcc_parents_1,
1238     .num_parents = ARRAY_SIZE(gcc_parents_1),
1239     .ops = &clk_rcg2_ops,
1240 };
1241 
1242 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1243     .cmd_rcgr = 0x1f738,
1244     .mnd_width = 16,
1245     .hid_width = 5,
1246     .parent_map = gcc_parent_map_1,
1247     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1248     .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1249 };
1250 
1251 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1252     F(144000, P_BI_TCXO, 16, 3, 25),
1253     F(400000, P_BI_TCXO, 12, 1, 4),
1254     F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1255     F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1256     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1257     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1258     F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1259     F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1260     { }
1261 };
1262 
1263 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1264     .cmd_rcgr = 0x38028,
1265     .mnd_width = 8,
1266     .hid_width = 5,
1267     .parent_map = gcc_parent_map_1,
1268     .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1269     .clkr.hw.init = &(struct clk_init_data){
1270         .name = "gcc_sdcc1_apps_clk_src",
1271         .parent_data = gcc_parents_1,
1272         .num_parents = ARRAY_SIZE(gcc_parents_1),
1273         .ops = &clk_rcg2_ops,
1274     },
1275 };
1276 
1277 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1278     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1279     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1280     F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1281     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1282     F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1283     { }
1284 };
1285 
1286 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1287     .cmd_rcgr = 0x38010,
1288     .mnd_width = 0,
1289     .hid_width = 5,
1290     .parent_map = gcc_parent_map_0,
1291     .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1292     .clkr.hw.init = &(struct clk_init_data){
1293         .name = "gcc_sdcc1_ice_core_clk_src",
1294         .parent_data = gcc_parents_0,
1295         .num_parents = ARRAY_SIZE(gcc_parents_0),
1296         .ops = &clk_rcg2_ops,
1297     },
1298 };
1299 
1300 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1301     F(400000, P_BI_TCXO, 12, 1, 4),
1302     F(19200000, P_BI_TCXO, 1, 0, 0),
1303     F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1304     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1305     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1306     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1307     { }
1308 };
1309 
1310 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1311     .cmd_rcgr = 0x1e00c,
1312     .mnd_width = 8,
1313     .hid_width = 5,
1314     .parent_map = gcc_parent_map_11,
1315     .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1316     .clkr.hw.init = &(struct clk_init_data){
1317         .name = "gcc_sdcc2_apps_clk_src",
1318         .parent_data = gcc_parents_11,
1319         .num_parents = ARRAY_SIZE(gcc_parents_11),
1320         .ops = &clk_rcg2_ops,
1321         .flags = CLK_OPS_PARENT_ENABLE,
1322     },
1323 };
1324 
1325 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1326     F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1327     F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1328     F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1329     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1330     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1331     { }
1332 };
1333 
1334 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1335     .cmd_rcgr = 0x45020,
1336     .mnd_width = 8,
1337     .hid_width = 5,
1338     .parent_map = gcc_parent_map_0,
1339     .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1340     .clkr.hw.init = &(struct clk_init_data){
1341         .name = "gcc_ufs_phy_axi_clk_src",
1342         .parent_data = gcc_parents_0,
1343         .num_parents = ARRAY_SIZE(gcc_parents_0),
1344         .ops = &clk_rcg2_ops,
1345     },
1346 };
1347 
1348 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1349     F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1350     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1351     F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1352     F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1353     { }
1354 };
1355 
1356 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1357     .cmd_rcgr = 0x45048,
1358     .mnd_width = 0,
1359     .hid_width = 5,
1360     .parent_map = gcc_parent_map_0,
1361     .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1362     .clkr.hw.init = &(struct clk_init_data){
1363         .name = "gcc_ufs_phy_ice_core_clk_src",
1364         .parent_data = gcc_parents_0,
1365         .num_parents = ARRAY_SIZE(gcc_parents_0),
1366         .ops = &clk_rcg2_ops,
1367     },
1368 };
1369 
1370 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1371     F(9600000, P_BI_TCXO, 2, 0, 0),
1372     F(19200000, P_BI_TCXO, 1, 0, 0),
1373     { }
1374 };
1375 
1376 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1377     .cmd_rcgr = 0x4507c,
1378     .mnd_width = 0,
1379     .hid_width = 5,
1380     .parent_map = gcc_parent_map_0,
1381     .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1382     .clkr.hw.init = &(struct clk_init_data){
1383         .name = "gcc_ufs_phy_phy_aux_clk_src",
1384         .parent_data = gcc_parents_0,
1385         .num_parents = ARRAY_SIZE(gcc_parents_0),
1386         .ops = &clk_rcg2_ops,
1387     },
1388 };
1389 
1390 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1391     F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1392     F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1393     F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1394     { }
1395 };
1396 
1397 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1398     .cmd_rcgr = 0x45060,
1399     .mnd_width = 0,
1400     .hid_width = 5,
1401     .parent_map = gcc_parent_map_0,
1402     .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1403     .clkr.hw.init = &(struct clk_init_data){
1404         .name = "gcc_ufs_phy_unipro_core_clk_src",
1405         .parent_data = gcc_parents_0,
1406         .num_parents = ARRAY_SIZE(gcc_parents_0),
1407         .ops = &clk_rcg2_ops,
1408     },
1409 };
1410 
1411 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1412     F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1413     F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1414     F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1415     F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1416     { }
1417 };
1418 
1419 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1420     .cmd_rcgr = 0x1a01c,
1421     .mnd_width = 8,
1422     .hid_width = 5,
1423     .parent_map = gcc_parent_map_0,
1424     .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1425     .clkr.hw.init = &(struct clk_init_data){
1426         .name = "gcc_usb30_prim_master_clk_src",
1427         .parent_data = gcc_parents_0,
1428         .num_parents = ARRAY_SIZE(gcc_parents_0),
1429         .ops = &clk_rcg2_ops,
1430     },
1431 };
1432 
1433 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1434     F(19200000, P_BI_TCXO, 1, 0, 0),
1435     { }
1436 };
1437 
1438 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1439     .cmd_rcgr = 0x1a034,
1440     .mnd_width = 0,
1441     .hid_width = 5,
1442     .parent_map = gcc_parent_map_0,
1443     .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1444     .clkr.hw.init = &(struct clk_init_data){
1445         .name = "gcc_usb30_prim_mock_utmi_clk_src",
1446         .parent_data = gcc_parents_0,
1447         .num_parents = ARRAY_SIZE(gcc_parents_0),
1448         .ops = &clk_rcg2_ops,
1449     },
1450 };
1451 
1452 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1453     .reg = 0x1a04c,
1454     .shift = 0,
1455     .width = 2,
1456     .clkr.hw.init = &(struct clk_init_data) {
1457         .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1458         .parent_hws = (const struct clk_hw *[]) {
1459             &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
1460         .num_parents = 1,
1461         .ops = &clk_regmap_div_ro_ops,
1462     },
1463 };
1464 
1465 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1466     .cmd_rcgr = 0x1a060,
1467     .mnd_width = 0,
1468     .hid_width = 5,
1469     .parent_map = gcc_parent_map_12,
1470     .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1471     .clkr.hw.init = &(struct clk_init_data){
1472         .name = "gcc_usb3_prim_phy_aux_clk_src",
1473         .parent_data = gcc_parents_12,
1474         .num_parents = ARRAY_SIZE(gcc_parents_12),
1475         .ops = &clk_rcg2_ops,
1476     },
1477 };
1478 
1479 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1480     F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1481     F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1482     F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1483     F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1484     { }
1485 };
1486 
1487 static struct clk_rcg2 gcc_video_venus_clk_src = {
1488     .cmd_rcgr = 0x58060,
1489     .mnd_width = 0,
1490     .hid_width = 5,
1491     .parent_map = gcc_parent_map_13,
1492     .freq_tbl = ftbl_gcc_video_venus_clk_src,
1493     .clkr.hw.init = &(struct clk_init_data){
1494         .name = "gcc_video_venus_clk_src",
1495         .parent_data = gcc_parents_13,
1496         .num_parents = ARRAY_SIZE(gcc_parents_13),
1497         .flags = CLK_SET_RATE_PARENT,
1498         .ops = &clk_rcg2_ops,
1499     },
1500 };
1501 
1502 static struct clk_branch gcc_ahb2phy_csi_clk = {
1503     .halt_reg = 0x1d004,
1504     .halt_check = BRANCH_HALT,
1505     .hwcg_reg = 0x1d004,
1506     .hwcg_bit = 1,
1507     .clkr = {
1508         .enable_reg = 0x1d004,
1509         .enable_mask = BIT(0),
1510         .hw.init = &(struct clk_init_data){
1511             .name = "gcc_ahb2phy_csi_clk",
1512             .ops = &clk_branch2_ops,
1513         },
1514     },
1515 };
1516 
1517 static struct clk_branch gcc_ahb2phy_usb_clk = {
1518     .halt_reg = 0x1d008,
1519     .halt_check = BRANCH_HALT,
1520     .hwcg_reg = 0x1d008,
1521     .hwcg_bit = 1,
1522     .clkr = {
1523         .enable_reg = 0x1d008,
1524         .enable_mask = BIT(0),
1525         .hw.init = &(struct clk_init_data){
1526             .name = "gcc_ahb2phy_usb_clk",
1527             .ops = &clk_branch2_ops,
1528         },
1529     },
1530 };
1531 
1532 static struct clk_branch gcc_bimc_gpu_axi_clk = {
1533     .halt_reg = 0x71154,
1534     .halt_check = BRANCH_HALT_DELAY,
1535     .hwcg_reg = 0x71154,
1536     .hwcg_bit = 1,
1537     .clkr = {
1538         .enable_reg = 0x71154,
1539         .enable_mask = BIT(0),
1540         .hw.init = &(struct clk_init_data){
1541             .name = "gcc_bimc_gpu_axi_clk",
1542             .ops = &clk_branch2_ops,
1543         },
1544     },
1545 };
1546 
1547 static struct clk_branch gcc_boot_rom_ahb_clk = {
1548     .halt_reg = 0x23004,
1549     .halt_check = BRANCH_HALT_VOTED,
1550     .hwcg_reg = 0x23004,
1551     .hwcg_bit = 1,
1552     .clkr = {
1553         .enable_reg = 0x79004,
1554         .enable_mask = BIT(10),
1555         .hw.init = &(struct clk_init_data){
1556             .name = "gcc_boot_rom_ahb_clk",
1557             .ops = &clk_branch2_ops,
1558         },
1559     },
1560 };
1561 
1562 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1563     .halt_reg = 0x17070,
1564     .halt_check = BRANCH_HALT_VOTED,
1565     .hwcg_reg = 0x17070,
1566     .hwcg_bit = 1,
1567     .clkr = {
1568         .enable_reg = 0x79004,
1569         .enable_mask = BIT(27),
1570         .hw.init = &(struct clk_init_data){
1571             .name = "gcc_cam_throttle_nrt_clk",
1572             .ops = &clk_branch2_ops,
1573         },
1574     },
1575 };
1576 
1577 static struct clk_branch gcc_cam_throttle_rt_clk = {
1578     .halt_reg = 0x1706c,
1579     .halt_check = BRANCH_HALT_VOTED,
1580     .hwcg_reg = 0x1706c,
1581     .hwcg_bit = 1,
1582     .clkr = {
1583         .enable_reg = 0x79004,
1584         .enable_mask = BIT(26),
1585         .hw.init = &(struct clk_init_data){
1586             .name = "gcc_cam_throttle_rt_clk",
1587             .ops = &clk_branch2_ops,
1588         },
1589     },
1590 };
1591 
1592 static struct clk_branch gcc_camera_ahb_clk = {
1593     .halt_reg = 0x17008,
1594     .halt_check = BRANCH_HALT_DELAY,
1595     .hwcg_reg = 0x17008,
1596     .hwcg_bit = 1,
1597     .clkr = {
1598         .enable_reg = 0x17008,
1599         .enable_mask = BIT(0),
1600         .hw.init = &(struct clk_init_data){
1601             .name = "gcc_camera_ahb_clk",
1602             .flags = CLK_IS_CRITICAL,
1603             .ops = &clk_branch2_ops,
1604         },
1605     },
1606 };
1607 
1608 static struct clk_branch gcc_camera_xo_clk = {
1609     .halt_reg = 0x17028,
1610     .halt_check = BRANCH_HALT,
1611     .clkr = {
1612         .enable_reg = 0x17028,
1613         .enable_mask = BIT(0),
1614         .hw.init = &(struct clk_init_data){
1615             .name = "gcc_camera_xo_clk",
1616             .flags = CLK_IS_CRITICAL,
1617             .ops = &clk_branch2_ops,
1618         },
1619     },
1620 };
1621 
1622 static struct clk_branch gcc_camss_axi_clk = {
1623     .halt_reg = 0x58044,
1624     .halt_check = BRANCH_HALT,
1625     .clkr = {
1626         .enable_reg = 0x58044,
1627         .enable_mask = BIT(0),
1628         .hw.init = &(struct clk_init_data){
1629             .name = "gcc_camss_axi_clk",
1630             .parent_hws = (const struct clk_hw *[]){
1631                 &gcc_camss_axi_clk_src.clkr.hw,
1632             },
1633             .num_parents = 1,
1634             .flags = CLK_SET_RATE_PARENT,
1635             .ops = &clk_branch2_ops,
1636         },
1637     },
1638 };
1639 
1640 static struct clk_branch gcc_camss_camnoc_atb_clk = {
1641     .halt_reg = 0x5804c,
1642     .halt_check = BRANCH_HALT_DELAY,
1643     .hwcg_reg = 0x5804c,
1644     .hwcg_bit = 1,
1645     .clkr = {
1646         .enable_reg = 0x5804c,
1647         .enable_mask = BIT(0),
1648         .hw.init = &(struct clk_init_data){
1649             .name = "gcc_camss_camnoc_atb_clk",
1650             .ops = &clk_branch2_ops,
1651         },
1652     },
1653 };
1654 
1655 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
1656     .halt_reg = 0x58050,
1657     .halt_check = BRANCH_HALT_DELAY,
1658     .hwcg_reg = 0x58050,
1659     .hwcg_bit = 1,
1660     .clkr = {
1661         .enable_reg = 0x58050,
1662         .enable_mask = BIT(0),
1663         .hw.init = &(struct clk_init_data){
1664             .name = "gcc_camss_camnoc_nts_xo_clk",
1665             .ops = &clk_branch2_ops,
1666         },
1667     },
1668 };
1669 
1670 static struct clk_branch gcc_camss_cci_0_clk = {
1671     .halt_reg = 0x56018,
1672     .halt_check = BRANCH_HALT,
1673     .clkr = {
1674         .enable_reg = 0x56018,
1675         .enable_mask = BIT(0),
1676         .hw.init = &(struct clk_init_data){
1677             .name = "gcc_camss_cci_0_clk",
1678             .parent_hws = (const struct clk_hw *[]){
1679                 &gcc_camss_cci_clk_src.clkr.hw,
1680             },
1681             .num_parents = 1,
1682             .flags = CLK_SET_RATE_PARENT,
1683             .ops = &clk_branch2_ops,
1684         },
1685     },
1686 };
1687 
1688 static struct clk_branch gcc_camss_cphy_0_clk = {
1689     .halt_reg = 0x52088,
1690     .halt_check = BRANCH_HALT,
1691     .clkr = {
1692         .enable_reg = 0x52088,
1693         .enable_mask = BIT(0),
1694         .hw.init = &(struct clk_init_data){
1695             .name = "gcc_camss_cphy_0_clk",
1696             .parent_hws = (const struct clk_hw *[]){
1697                 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1698             },
1699             .num_parents = 1,
1700             .flags = CLK_SET_RATE_PARENT,
1701             .ops = &clk_branch2_ops,
1702         },
1703     },
1704 };
1705 
1706 static struct clk_branch gcc_camss_cphy_1_clk = {
1707     .halt_reg = 0x5208c,
1708     .halt_check = BRANCH_HALT,
1709     .clkr = {
1710         .enable_reg = 0x5208c,
1711         .enable_mask = BIT(0),
1712         .hw.init = &(struct clk_init_data){
1713             .name = "gcc_camss_cphy_1_clk",
1714             .parent_hws = (const struct clk_hw *[]){
1715                 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1716             },
1717             .num_parents = 1,
1718             .flags = CLK_SET_RATE_PARENT,
1719             .ops = &clk_branch2_ops,
1720         },
1721     },
1722 };
1723 
1724 static struct clk_branch gcc_camss_cphy_2_clk = {
1725     .halt_reg = 0x52090,
1726     .halt_check = BRANCH_HALT,
1727     .clkr = {
1728         .enable_reg = 0x52090,
1729         .enable_mask = BIT(0),
1730         .hw.init = &(struct clk_init_data){
1731             .name = "gcc_camss_cphy_2_clk",
1732             .parent_hws = (const struct clk_hw *[]){
1733                 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1734             },
1735             .num_parents = 1,
1736             .flags = CLK_SET_RATE_PARENT,
1737             .ops = &clk_branch2_ops,
1738         },
1739     },
1740 };
1741 
1742 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1743     .halt_reg = 0x59018,
1744     .halt_check = BRANCH_HALT,
1745     .clkr = {
1746         .enable_reg = 0x59018,
1747         .enable_mask = BIT(0),
1748         .hw.init = &(struct clk_init_data){
1749             .name = "gcc_camss_csi0phytimer_clk",
1750             .parent_hws = (const struct clk_hw *[]){
1751                 &gcc_camss_csi0phytimer_clk_src.clkr.hw,
1752             },
1753             .num_parents = 1,
1754             .flags = CLK_SET_RATE_PARENT,
1755             .ops = &clk_branch2_ops,
1756         },
1757     },
1758 };
1759 
1760 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1761     .halt_reg = 0x59034,
1762     .halt_check = BRANCH_HALT,
1763     .clkr = {
1764         .enable_reg = 0x59034,
1765         .enable_mask = BIT(0),
1766         .hw.init = &(struct clk_init_data){
1767             .name = "gcc_camss_csi1phytimer_clk",
1768             .parent_hws = (const struct clk_hw *[]){
1769                 &gcc_camss_csi1phytimer_clk_src.clkr.hw,
1770             },
1771             .num_parents = 1,
1772             .flags = CLK_SET_RATE_PARENT,
1773             .ops = &clk_branch2_ops,
1774         },
1775     },
1776 };
1777 
1778 static struct clk_branch gcc_camss_csi2phytimer_clk = {
1779     .halt_reg = 0x59050,
1780     .halt_check = BRANCH_HALT,
1781     .clkr = {
1782         .enable_reg = 0x59050,
1783         .enable_mask = BIT(0),
1784         .hw.init = &(struct clk_init_data){
1785             .name = "gcc_camss_csi2phytimer_clk",
1786             .parent_hws = (const struct clk_hw *[]){
1787                 &gcc_camss_csi2phytimer_clk_src.clkr.hw,
1788             },
1789             .num_parents = 1,
1790             .flags = CLK_SET_RATE_PARENT,
1791             .ops = &clk_branch2_ops,
1792         },
1793     },
1794 };
1795 
1796 static struct clk_branch gcc_camss_mclk0_clk = {
1797     .halt_reg = 0x51018,
1798     .halt_check = BRANCH_HALT,
1799     .clkr = {
1800         .enable_reg = 0x51018,
1801         .enable_mask = BIT(0),
1802         .hw.init = &(struct clk_init_data){
1803             .name = "gcc_camss_mclk0_clk",
1804             .parent_hws = (const struct clk_hw *[]){
1805                 &gcc_camss_mclk0_clk_src.clkr.hw,
1806             },
1807             .num_parents = 1,
1808             .flags = CLK_SET_RATE_PARENT,
1809             .ops = &clk_branch2_ops,
1810         },
1811     },
1812 };
1813 
1814 static struct clk_branch gcc_camss_mclk1_clk = {
1815     .halt_reg = 0x51034,
1816     .halt_check = BRANCH_HALT,
1817     .clkr = {
1818         .enable_reg = 0x51034,
1819         .enable_mask = BIT(0),
1820         .hw.init = &(struct clk_init_data){
1821             .name = "gcc_camss_mclk1_clk",
1822             .parent_hws = (const struct clk_hw *[]){
1823                 &gcc_camss_mclk1_clk_src.clkr.hw,
1824             },
1825             .num_parents = 1,
1826             .flags = CLK_SET_RATE_PARENT,
1827             .ops = &clk_branch2_ops,
1828         },
1829     },
1830 };
1831 
1832 static struct clk_branch gcc_camss_mclk2_clk = {
1833     .halt_reg = 0x51050,
1834     .halt_check = BRANCH_HALT,
1835     .clkr = {
1836         .enable_reg = 0x51050,
1837         .enable_mask = BIT(0),
1838         .hw.init = &(struct clk_init_data){
1839             .name = "gcc_camss_mclk2_clk",
1840             .parent_hws = (const struct clk_hw *[]){
1841                 &gcc_camss_mclk2_clk_src.clkr.hw,
1842             },
1843             .num_parents = 1,
1844             .flags = CLK_SET_RATE_PARENT,
1845             .ops = &clk_branch2_ops,
1846         },
1847     },
1848 };
1849 
1850 static struct clk_branch gcc_camss_mclk3_clk = {
1851     .halt_reg = 0x5106c,
1852     .halt_check = BRANCH_HALT,
1853     .clkr = {
1854         .enable_reg = 0x5106c,
1855         .enable_mask = BIT(0),
1856         .hw.init = &(struct clk_init_data){
1857             .name = "gcc_camss_mclk3_clk",
1858             .parent_hws = (const struct clk_hw *[]){
1859                 &gcc_camss_mclk3_clk_src.clkr.hw,
1860             },
1861             .num_parents = 1,
1862             .flags = CLK_SET_RATE_PARENT,
1863             .ops = &clk_branch2_ops,
1864         },
1865     },
1866 };
1867 
1868 static struct clk_branch gcc_camss_nrt_axi_clk = {
1869     .halt_reg = 0x58054,
1870     .halt_check = BRANCH_HALT,
1871     .clkr = {
1872         .enable_reg = 0x58054,
1873         .enable_mask = BIT(0),
1874         .hw.init = &(struct clk_init_data){
1875             .name = "gcc_camss_nrt_axi_clk",
1876             .ops = &clk_branch2_ops,
1877         },
1878     },
1879 };
1880 
1881 static struct clk_branch gcc_camss_ope_ahb_clk = {
1882     .halt_reg = 0x5503c,
1883     .halt_check = BRANCH_HALT,
1884     .clkr = {
1885         .enable_reg = 0x5503c,
1886         .enable_mask = BIT(0),
1887         .hw.init = &(struct clk_init_data){
1888             .name = "gcc_camss_ope_ahb_clk",
1889             .parent_hws = (const struct clk_hw *[]){
1890                 &gcc_camss_ope_ahb_clk_src.clkr.hw,
1891             },
1892             .num_parents = 1,
1893             .flags = CLK_SET_RATE_PARENT,
1894             .ops = &clk_branch2_ops,
1895         },
1896     },
1897 };
1898 
1899 static struct clk_branch gcc_camss_ope_clk = {
1900     .halt_reg = 0x5501c,
1901     .halt_check = BRANCH_HALT,
1902     .clkr = {
1903         .enable_reg = 0x5501c,
1904         .enable_mask = BIT(0),
1905         .hw.init = &(struct clk_init_data){
1906             .name = "gcc_camss_ope_clk",
1907             .parent_hws = (const struct clk_hw *[]){
1908                 &gcc_camss_ope_clk_src.clkr.hw,
1909             },
1910             .num_parents = 1,
1911             .flags = CLK_SET_RATE_PARENT,
1912             .ops = &clk_branch2_ops,
1913         },
1914     },
1915 };
1916 
1917 static struct clk_branch gcc_camss_rt_axi_clk = {
1918     .halt_reg = 0x5805c,
1919     .halt_check = BRANCH_HALT,
1920     .clkr = {
1921         .enable_reg = 0x5805c,
1922         .enable_mask = BIT(0),
1923         .hw.init = &(struct clk_init_data){
1924             .name = "gcc_camss_rt_axi_clk",
1925             .ops = &clk_branch2_ops,
1926         },
1927     },
1928 };
1929 
1930 static struct clk_branch gcc_camss_tfe_0_clk = {
1931     .halt_reg = 0x5201c,
1932     .halt_check = BRANCH_HALT,
1933     .clkr = {
1934         .enable_reg = 0x5201c,
1935         .enable_mask = BIT(0),
1936         .hw.init = &(struct clk_init_data){
1937             .name = "gcc_camss_tfe_0_clk",
1938             .parent_hws = (const struct clk_hw *[]){
1939                 &gcc_camss_tfe_0_clk_src.clkr.hw,
1940             },
1941             .num_parents = 1,
1942             .flags = CLK_SET_RATE_PARENT,
1943             .ops = &clk_branch2_ops,
1944         },
1945     },
1946 };
1947 
1948 static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
1949     .halt_reg = 0x5207c,
1950     .halt_check = BRANCH_HALT,
1951     .clkr = {
1952         .enable_reg = 0x5207c,
1953         .enable_mask = BIT(0),
1954         .hw.init = &(struct clk_init_data){
1955             .name = "gcc_camss_tfe_0_cphy_rx_clk",
1956             .parent_hws = (const struct clk_hw *[]){
1957                 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1958             },
1959             .num_parents = 1,
1960             .flags = CLK_SET_RATE_PARENT,
1961             .ops = &clk_branch2_ops,
1962         },
1963     },
1964 };
1965 
1966 static struct clk_branch gcc_camss_tfe_0_csid_clk = {
1967     .halt_reg = 0x520ac,
1968     .halt_check = BRANCH_HALT,
1969     .clkr = {
1970         .enable_reg = 0x520ac,
1971         .enable_mask = BIT(0),
1972         .hw.init = &(struct clk_init_data){
1973             .name = "gcc_camss_tfe_0_csid_clk",
1974             .parent_hws = (const struct clk_hw *[]){
1975                 &gcc_camss_tfe_0_csid_clk_src.clkr.hw,
1976             },
1977             .num_parents = 1,
1978             .flags = CLK_SET_RATE_PARENT,
1979             .ops = &clk_branch2_ops,
1980         },
1981     },
1982 };
1983 
1984 static struct clk_branch gcc_camss_tfe_1_clk = {
1985     .halt_reg = 0x5203c,
1986     .halt_check = BRANCH_HALT,
1987     .clkr = {
1988         .enable_reg = 0x5203c,
1989         .enable_mask = BIT(0),
1990         .hw.init = &(struct clk_init_data){
1991             .name = "gcc_camss_tfe_1_clk",
1992             .parent_hws = (const struct clk_hw *[]){
1993                 &gcc_camss_tfe_1_clk_src.clkr.hw,
1994             },
1995             .num_parents = 1,
1996             .flags = CLK_SET_RATE_PARENT,
1997             .ops = &clk_branch2_ops,
1998         },
1999     },
2000 };
2001 
2002 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
2003     .halt_reg = 0x52080,
2004     .halt_check = BRANCH_HALT,
2005     .clkr = {
2006         .enable_reg = 0x52080,
2007         .enable_mask = BIT(0),
2008         .hw.init = &(struct clk_init_data){
2009             .name = "gcc_camss_tfe_1_cphy_rx_clk",
2010             .parent_hws = (const struct clk_hw *[]){
2011                 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2012             },
2013             .num_parents = 1,
2014             .flags = CLK_SET_RATE_PARENT,
2015             .ops = &clk_branch2_ops,
2016         },
2017     },
2018 };
2019 
2020 static struct clk_branch gcc_camss_tfe_1_csid_clk = {
2021     .halt_reg = 0x520cc,
2022     .halt_check = BRANCH_HALT,
2023     .clkr = {
2024         .enable_reg = 0x520cc,
2025         .enable_mask = BIT(0),
2026         .hw.init = &(struct clk_init_data){
2027             .name = "gcc_camss_tfe_1_csid_clk",
2028             .parent_hws = (const struct clk_hw *[]){
2029                 &gcc_camss_tfe_1_csid_clk_src.clkr.hw,
2030             },
2031             .num_parents = 1,
2032             .flags = CLK_SET_RATE_PARENT,
2033             .ops = &clk_branch2_ops,
2034         },
2035     },
2036 };
2037 
2038 static struct clk_branch gcc_camss_tfe_2_clk = {
2039     .halt_reg = 0x5205c,
2040     .halt_check = BRANCH_HALT,
2041     .clkr = {
2042         .enable_reg = 0x5205c,
2043         .enable_mask = BIT(0),
2044         .hw.init = &(struct clk_init_data){
2045             .name = "gcc_camss_tfe_2_clk",
2046             .parent_hws = (const struct clk_hw *[]){
2047                 &gcc_camss_tfe_2_clk_src.clkr.hw,
2048             },
2049             .num_parents = 1,
2050             .flags = CLK_SET_RATE_PARENT,
2051             .ops = &clk_branch2_ops,
2052         },
2053     },
2054 };
2055 
2056 static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {
2057     .halt_reg = 0x52084,
2058     .halt_check = BRANCH_HALT,
2059     .clkr = {
2060         .enable_reg = 0x52084,
2061         .enable_mask = BIT(0),
2062         .hw.init = &(struct clk_init_data){
2063             .name = "gcc_camss_tfe_2_cphy_rx_clk",
2064             .parent_hws = (const struct clk_hw *[]){
2065                 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2066             },
2067             .num_parents = 1,
2068             .flags = CLK_SET_RATE_PARENT,
2069             .ops = &clk_branch2_ops,
2070         },
2071     },
2072 };
2073 
2074 static struct clk_branch gcc_camss_tfe_2_csid_clk = {
2075     .halt_reg = 0x520ec,
2076     .halt_check = BRANCH_HALT,
2077     .clkr = {
2078         .enable_reg = 0x520ec,
2079         .enable_mask = BIT(0),
2080         .hw.init = &(struct clk_init_data){
2081             .name = "gcc_camss_tfe_2_csid_clk",
2082             .parent_hws = (const struct clk_hw *[]){
2083                 &gcc_camss_tfe_2_csid_clk_src.clkr.hw,
2084             },
2085             .num_parents = 1,
2086             .flags = CLK_SET_RATE_PARENT,
2087             .ops = &clk_branch2_ops,
2088         },
2089     },
2090 };
2091 
2092 static struct clk_branch gcc_camss_top_ahb_clk = {
2093     .halt_reg = 0x58028,
2094     .halt_check = BRANCH_HALT,
2095     .clkr = {
2096         .enable_reg = 0x58028,
2097         .enable_mask = BIT(0),
2098         .hw.init = &(struct clk_init_data){
2099             .name = "gcc_camss_top_ahb_clk",
2100             .parent_hws = (const struct clk_hw *[]){
2101                 &gcc_camss_top_ahb_clk_src.clkr.hw,
2102             },
2103             .num_parents = 1,
2104             .flags = CLK_SET_RATE_PARENT,
2105             .ops = &clk_branch2_ops,
2106         },
2107     },
2108 };
2109 
2110 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2111     .halt_reg = 0x1a084,
2112     .halt_check = BRANCH_HALT,
2113     .hwcg_reg = 0x1a084,
2114     .hwcg_bit = 1,
2115     .clkr = {
2116         .enable_reg = 0x1a084,
2117         .enable_mask = BIT(0),
2118         .hw.init = &(struct clk_init_data){
2119             .name = "gcc_cfg_noc_usb3_prim_axi_clk",
2120             .parent_hws = (const struct clk_hw *[]){
2121                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2122             },
2123             .num_parents = 1,
2124             .flags = CLK_SET_RATE_PARENT,
2125             .ops = &clk_branch2_ops,
2126         },
2127     },
2128 };
2129 
2130 static struct clk_branch gcc_cpuss_gnoc_clk = {
2131     .halt_reg = 0x2b004,
2132     .halt_check = BRANCH_HALT_VOTED,
2133     .hwcg_reg = 0x2b004,
2134     .hwcg_bit = 1,
2135     .clkr = {
2136         .enable_reg = 0x79004,
2137         .enable_mask = BIT(22),
2138         .hw.init = &(struct clk_init_data){
2139             .name = "gcc_cpuss_gnoc_clk",
2140             .flags = CLK_IS_CRITICAL,
2141             .ops = &clk_branch2_ops,
2142         },
2143     },
2144 };
2145 
2146 static struct clk_branch gcc_disp_ahb_clk = {
2147     .halt_reg = 0x1700c,
2148     .halt_check = BRANCH_HALT,
2149     .hwcg_reg = 0x1700c,
2150     .hwcg_bit = 1,
2151     .clkr = {
2152         .enable_reg = 0x1700c,
2153         .enable_mask = BIT(0),
2154         .hw.init = &(struct clk_init_data){
2155             .name = "gcc_disp_ahb_clk",
2156             .flags = CLK_IS_CRITICAL,
2157             .ops = &clk_branch2_ops,
2158         },
2159     },
2160 };
2161 
2162 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
2163     .reg = 0x17058,
2164     .shift = 0,
2165     .width = 2,
2166     .clkr.hw.init = &(struct clk_init_data) {
2167         .name = "gcc_disp_gpll0_clk_src",
2168         .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2169         .num_parents = 1,
2170         .ops = &clk_regmap_div_ops,
2171     },
2172 };
2173 
2174 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2175     .halt_check = BRANCH_HALT_DELAY,
2176     .clkr = {
2177         .enable_reg = 0x79004,
2178         .enable_mask = BIT(20),
2179         .hw.init = &(struct clk_init_data){
2180             .name = "gcc_disp_gpll0_div_clk_src",
2181             .parent_hws = (const struct clk_hw *[]){
2182                 &gcc_disp_gpll0_clk_src.clkr.hw,
2183             },
2184             .num_parents = 1,
2185             .flags = CLK_SET_RATE_PARENT,
2186             .ops = &clk_branch2_ops,
2187         },
2188     },
2189 };
2190 
2191 static struct clk_branch gcc_disp_hf_axi_clk = {
2192     .halt_reg = 0x17020,
2193     .halt_check = BRANCH_HALT,
2194     .hwcg_reg = 0x17020,
2195     .hwcg_bit = 1,
2196     .clkr = {
2197         .enable_reg = 0x17020,
2198         .enable_mask = BIT(0),
2199         .hw.init = &(struct clk_init_data){
2200             .name = "gcc_disp_hf_axi_clk",
2201             .ops = &clk_branch2_ops,
2202         },
2203     },
2204 };
2205 
2206 static struct clk_branch gcc_disp_throttle_core_clk = {
2207     .halt_reg = 0x17064,
2208     .halt_check = BRANCH_HALT_VOTED,
2209     .hwcg_reg = 0x17064,
2210     .hwcg_bit = 1,
2211     .clkr = {
2212         .enable_reg = 0x7900c,
2213         .enable_mask = BIT(5),
2214         .hw.init = &(struct clk_init_data){
2215             .name = "gcc_disp_throttle_core_clk",
2216             .ops = &clk_branch2_ops,
2217         },
2218     },
2219 };
2220 
2221 static struct clk_branch gcc_disp_xo_clk = {
2222     .halt_reg = 0x1702c,
2223     .halt_check = BRANCH_HALT,
2224     .clkr = {
2225         .enable_reg = 0x1702c,
2226         .enable_mask = BIT(0),
2227         .hw.init = &(struct clk_init_data){
2228             .name = "gcc_disp_xo_clk",
2229             .flags = CLK_IS_CRITICAL,
2230             .ops = &clk_branch2_ops,
2231         },
2232     },
2233 };
2234 
2235 static struct clk_branch gcc_gp1_clk = {
2236     .halt_reg = 0x4d000,
2237     .halt_check = BRANCH_HALT,
2238     .clkr = {
2239         .enable_reg = 0x4d000,
2240         .enable_mask = BIT(0),
2241         .hw.init = &(struct clk_init_data){
2242             .name = "gcc_gp1_clk",
2243             .parent_hws = (const struct clk_hw *[]){
2244                 &gcc_gp1_clk_src.clkr.hw,
2245             },
2246             .num_parents = 1,
2247             .flags = CLK_SET_RATE_PARENT,
2248             .ops = &clk_branch2_ops,
2249         },
2250     },
2251 };
2252 
2253 static struct clk_branch gcc_gp2_clk = {
2254     .halt_reg = 0x4e000,
2255     .halt_check = BRANCH_HALT,
2256     .clkr = {
2257         .enable_reg = 0x4e000,
2258         .enable_mask = BIT(0),
2259         .hw.init = &(struct clk_init_data){
2260             .name = "gcc_gp2_clk",
2261             .parent_hws = (const struct clk_hw *[]){
2262                 &gcc_gp2_clk_src.clkr.hw,
2263             },
2264             .num_parents = 1,
2265             .flags = CLK_SET_RATE_PARENT,
2266             .ops = &clk_branch2_ops,
2267         },
2268     },
2269 };
2270 
2271 static struct clk_branch gcc_gp3_clk = {
2272     .halt_reg = 0x4f000,
2273     .halt_check = BRANCH_HALT,
2274     .clkr = {
2275         .enable_reg = 0x4f000,
2276         .enable_mask = BIT(0),
2277         .hw.init = &(struct clk_init_data){
2278             .name = "gcc_gp3_clk",
2279             .parent_hws = (const struct clk_hw *[]){
2280                 &gcc_gp3_clk_src.clkr.hw,
2281             },
2282             .num_parents = 1,
2283             .flags = CLK_SET_RATE_PARENT,
2284             .ops = &clk_branch2_ops,
2285         },
2286     },
2287 };
2288 
2289 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2290     .halt_reg = 0x36004,
2291     .halt_check = BRANCH_HALT,
2292     .hwcg_reg = 0x36004,
2293     .hwcg_bit = 1,
2294     .clkr = {
2295         .enable_reg = 0x36004,
2296         .enable_mask = BIT(0),
2297         .hw.init = &(struct clk_init_data){
2298             .name = "gcc_gpu_cfg_ahb_clk",
2299             .flags = CLK_IS_CRITICAL,
2300             .ops = &clk_branch2_ops,
2301         },
2302     },
2303 };
2304 
2305 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2306     .halt_check = BRANCH_HALT_DELAY,
2307     .clkr = {
2308         .enable_reg = 0x79004,
2309         .enable_mask = BIT(15),
2310         .hw.init = &(struct clk_init_data){
2311             .name = "gcc_gpu_gpll0_clk_src",
2312             .parent_hws = (const struct clk_hw *[]){
2313                 &gpll0.clkr.hw,
2314             },
2315             .num_parents = 1,
2316             .flags = CLK_SET_RATE_PARENT,
2317             .ops = &clk_branch2_ops,
2318         },
2319     },
2320 };
2321 
2322 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2323     .halt_check = BRANCH_HALT_DELAY,
2324     .clkr = {
2325         .enable_reg = 0x79004,
2326         .enable_mask = BIT(16),
2327         .hw.init = &(struct clk_init_data){
2328             .name = "gcc_gpu_gpll0_div_clk_src",
2329             .parent_hws = (const struct clk_hw *[]){
2330                 &gpll0_out_aux2.clkr.hw,
2331             },
2332             .num_parents = 1,
2333             .flags = CLK_SET_RATE_PARENT,
2334             .ops = &clk_branch2_ops,
2335         },
2336     },
2337 };
2338 
2339 static struct clk_branch gcc_gpu_iref_clk = {
2340     .halt_reg = 0x36100,
2341     .halt_check = BRANCH_HALT_DELAY,
2342     .clkr = {
2343         .enable_reg = 0x36100,
2344         .enable_mask = BIT(0),
2345         .hw.init = &(struct clk_init_data){
2346             .name = "gcc_gpu_iref_clk",
2347             .ops = &clk_branch2_ops,
2348         },
2349     },
2350 };
2351 
2352 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2353     .halt_reg = 0x3600c,
2354     .halt_check = BRANCH_VOTED,
2355     .hwcg_reg = 0x3600c,
2356     .hwcg_bit = 1,
2357     .clkr = {
2358         .enable_reg = 0x3600c,
2359         .enable_mask = BIT(0),
2360         .hw.init = &(struct clk_init_data){
2361             .name = "gcc_gpu_memnoc_gfx_clk",
2362             .ops = &clk_branch2_ops,
2363         },
2364     },
2365 };
2366 
2367 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2368     .halt_reg = 0x36018,
2369     .halt_check = BRANCH_HALT,
2370     .clkr = {
2371         .enable_reg = 0x36018,
2372         .enable_mask = BIT(0),
2373         .hw.init = &(struct clk_init_data){
2374             .name = "gcc_gpu_snoc_dvm_gfx_clk",
2375             .ops = &clk_branch2_ops,
2376         },
2377     },
2378 };
2379 
2380 static struct clk_branch gcc_gpu_throttle_core_clk = {
2381     .halt_reg = 0x36048,
2382     .halt_check = BRANCH_HALT_VOTED,
2383     .hwcg_reg = 0x36048,
2384     .hwcg_bit = 1,
2385     .clkr = {
2386         .enable_reg = 0x79004,
2387         .enable_mask = BIT(31),
2388         .hw.init = &(struct clk_init_data){
2389             .name = "gcc_gpu_throttle_core_clk",
2390             .ops = &clk_branch2_ops,
2391         },
2392     },
2393 };
2394 
2395 static struct clk_branch gcc_pdm2_clk = {
2396     .halt_reg = 0x2000c,
2397     .halt_check = BRANCH_HALT,
2398     .clkr = {
2399         .enable_reg = 0x2000c,
2400         .enable_mask = BIT(0),
2401         .hw.init = &(struct clk_init_data){
2402             .name = "gcc_pdm2_clk",
2403             .parent_hws = (const struct clk_hw *[]){
2404                 &gcc_pdm2_clk_src.clkr.hw,
2405             },
2406             .num_parents = 1,
2407             .flags = CLK_SET_RATE_PARENT,
2408             .ops = &clk_branch2_ops,
2409         },
2410     },
2411 };
2412 
2413 static struct clk_branch gcc_pdm_ahb_clk = {
2414     .halt_reg = 0x20004,
2415     .halt_check = BRANCH_HALT,
2416     .hwcg_reg = 0x20004,
2417     .hwcg_bit = 1,
2418     .clkr = {
2419         .enable_reg = 0x20004,
2420         .enable_mask = BIT(0),
2421         .hw.init = &(struct clk_init_data){
2422             .name = "gcc_pdm_ahb_clk",
2423             .ops = &clk_branch2_ops,
2424         },
2425     },
2426 };
2427 
2428 static struct clk_branch gcc_pdm_xo4_clk = {
2429     .halt_reg = 0x20008,
2430     .halt_check = BRANCH_HALT,
2431     .clkr = {
2432         .enable_reg = 0x20008,
2433         .enable_mask = BIT(0),
2434         .hw.init = &(struct clk_init_data){
2435             .name = "gcc_pdm_xo4_clk",
2436             .ops = &clk_branch2_ops,
2437         },
2438     },
2439 };
2440 
2441 static struct clk_branch gcc_prng_ahb_clk = {
2442     .halt_reg = 0x21004,
2443     .halt_check = BRANCH_HALT_VOTED,
2444     .hwcg_reg = 0x21004,
2445     .hwcg_bit = 1,
2446     .clkr = {
2447         .enable_reg = 0x79004,
2448         .enable_mask = BIT(13),
2449         .hw.init = &(struct clk_init_data){
2450             .name = "gcc_prng_ahb_clk",
2451             .ops = &clk_branch2_ops,
2452         },
2453     },
2454 };
2455 
2456 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2457     .halt_reg = 0x17014,
2458     .halt_check = BRANCH_HALT_VOTED,
2459     .hwcg_reg = 0x17014,
2460     .hwcg_bit = 1,
2461     .clkr = {
2462         .enable_reg = 0x7900c,
2463         .enable_mask = BIT(0),
2464         .hw.init = &(struct clk_init_data){
2465             .name = "gcc_qmip_camera_nrt_ahb_clk",
2466             .ops = &clk_branch2_ops,
2467         },
2468     },
2469 };
2470 
2471 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2472     .halt_reg = 0x17060,
2473     .halt_check = BRANCH_HALT_VOTED,
2474     .hwcg_reg = 0x17060,
2475     .hwcg_bit = 1,
2476     .clkr = {
2477         .enable_reg = 0x7900c,
2478         .enable_mask = BIT(2),
2479         .hw.init = &(struct clk_init_data){
2480             .name = "gcc_qmip_camera_rt_ahb_clk",
2481             .ops = &clk_branch2_ops,
2482         },
2483     },
2484 };
2485 
2486 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2487     .halt_reg = 0x17018,
2488     .halt_check = BRANCH_HALT_VOTED,
2489     .hwcg_reg = 0x17018,
2490     .hwcg_bit = 1,
2491     .clkr = {
2492         .enable_reg = 0x7900c,
2493         .enable_mask = BIT(1),
2494         .hw.init = &(struct clk_init_data){
2495             .name = "gcc_qmip_disp_ahb_clk",
2496             .ops = &clk_branch2_ops,
2497         },
2498     },
2499 };
2500 
2501 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2502     .halt_reg = 0x36040,
2503     .halt_check = BRANCH_HALT_VOTED,
2504     .hwcg_reg = 0x36040,
2505     .hwcg_bit = 1,
2506     .clkr = {
2507         .enable_reg = 0x7900c,
2508         .enable_mask = BIT(4),
2509         .hw.init = &(struct clk_init_data){
2510             .name = "gcc_qmip_gpu_cfg_ahb_clk",
2511             .ops = &clk_branch2_ops,
2512         },
2513     },
2514 };
2515 
2516 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2517     .halt_reg = 0x17010,
2518     .halt_check = BRANCH_HALT_VOTED,
2519     .hwcg_reg = 0x17010,
2520     .hwcg_bit = 1,
2521     .clkr = {
2522         .enable_reg = 0x79004,
2523         .enable_mask = BIT(25),
2524         .hw.init = &(struct clk_init_data){
2525             .name = "gcc_qmip_video_vcodec_ahb_clk",
2526             .ops = &clk_branch2_ops,
2527         },
2528     },
2529 };
2530 
2531 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2532     .halt_reg = 0x1f014,
2533     .halt_check = BRANCH_HALT_VOTED,
2534     .clkr = {
2535         .enable_reg = 0x7900c,
2536         .enable_mask = BIT(9),
2537         .hw.init = &(struct clk_init_data){
2538             .name = "gcc_qupv3_wrap0_core_2x_clk",
2539             .ops = &clk_branch2_ops,
2540         },
2541     },
2542 };
2543 
2544 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2545     .halt_reg = 0x1f00c,
2546     .halt_check = BRANCH_HALT_VOTED,
2547     .clkr = {
2548         .enable_reg = 0x7900c,
2549         .enable_mask = BIT(8),
2550         .hw.init = &(struct clk_init_data){
2551             .name = "gcc_qupv3_wrap0_core_clk",
2552             .ops = &clk_branch2_ops,
2553         },
2554     },
2555 };
2556 
2557 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2558     .halt_reg = 0x1f144,
2559     .halt_check = BRANCH_HALT_VOTED,
2560     .clkr = {
2561         .enable_reg = 0x7900c,
2562         .enable_mask = BIT(10),
2563         .hw.init = &(struct clk_init_data){
2564             .name = "gcc_qupv3_wrap0_s0_clk",
2565             .parent_hws = (const struct clk_hw *[]){
2566                 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2567             },
2568             .num_parents = 1,
2569             .flags = CLK_SET_RATE_PARENT,
2570             .ops = &clk_branch2_ops,
2571         },
2572     },
2573 };
2574 
2575 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2576     .halt_reg = 0x1f274,
2577     .halt_check = BRANCH_HALT_VOTED,
2578     .clkr = {
2579         .enable_reg = 0x7900c,
2580         .enable_mask = BIT(11),
2581         .hw.init = &(struct clk_init_data){
2582             .name = "gcc_qupv3_wrap0_s1_clk",
2583             .parent_hws = (const struct clk_hw *[]){
2584                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2585             },
2586             .num_parents = 1,
2587             .flags = CLK_SET_RATE_PARENT,
2588             .ops = &clk_branch2_ops,
2589         },
2590     },
2591 };
2592 
2593 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2594     .halt_reg = 0x1f3a4,
2595     .halt_check = BRANCH_HALT_VOTED,
2596     .clkr = {
2597         .enable_reg = 0x7900c,
2598         .enable_mask = BIT(12),
2599         .hw.init = &(struct clk_init_data){
2600             .name = "gcc_qupv3_wrap0_s2_clk",
2601             .parent_hws = (const struct clk_hw *[]){
2602                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2603             },
2604             .num_parents = 1,
2605             .flags = CLK_SET_RATE_PARENT,
2606             .ops = &clk_branch2_ops,
2607         },
2608     },
2609 };
2610 
2611 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2612     .halt_reg = 0x1f4d4,
2613     .halt_check = BRANCH_HALT_VOTED,
2614     .clkr = {
2615         .enable_reg = 0x7900c,
2616         .enable_mask = BIT(13),
2617         .hw.init = &(struct clk_init_data){
2618             .name = "gcc_qupv3_wrap0_s3_clk",
2619             .parent_hws = (const struct clk_hw *[]){
2620                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2621             },
2622             .num_parents = 1,
2623             .flags = CLK_SET_RATE_PARENT,
2624             .ops = &clk_branch2_ops,
2625         },
2626     },
2627 };
2628 
2629 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2630     .halt_reg = 0x1f604,
2631     .halt_check = BRANCH_HALT_VOTED,
2632     .clkr = {
2633         .enable_reg = 0x7900c,
2634         .enable_mask = BIT(14),
2635         .hw.init = &(struct clk_init_data){
2636             .name = "gcc_qupv3_wrap0_s4_clk",
2637             .parent_hws = (const struct clk_hw *[]){
2638                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2639             },
2640             .num_parents = 1,
2641             .flags = CLK_SET_RATE_PARENT,
2642             .ops = &clk_branch2_ops,
2643         },
2644     },
2645 };
2646 
2647 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2648     .halt_reg = 0x1f734,
2649     .halt_check = BRANCH_HALT_VOTED,
2650     .clkr = {
2651         .enable_reg = 0x7900c,
2652         .enable_mask = BIT(15),
2653         .hw.init = &(struct clk_init_data){
2654             .name = "gcc_qupv3_wrap0_s5_clk",
2655             .parent_hws = (const struct clk_hw *[]){
2656                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2657             },
2658             .num_parents = 1,
2659             .flags = CLK_SET_RATE_PARENT,
2660             .ops = &clk_branch2_ops,
2661         },
2662     },
2663 };
2664 
2665 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2666     .halt_reg = 0x1f004,
2667     .halt_check = BRANCH_HALT_VOTED,
2668     .hwcg_reg = 0x1f004,
2669     .hwcg_bit = 1,
2670     .clkr = {
2671         .enable_reg = 0x7900c,
2672         .enable_mask = BIT(6),
2673         .hw.init = &(struct clk_init_data){
2674             .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2675             .ops = &clk_branch2_ops,
2676         },
2677     },
2678 };
2679 
2680 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2681     .halt_reg = 0x1f008,
2682     .halt_check = BRANCH_HALT_VOTED,
2683     .hwcg_reg = 0x1f008,
2684     .hwcg_bit = 1,
2685     .clkr = {
2686         .enable_reg = 0x7900c,
2687         .enable_mask = BIT(7),
2688         .hw.init = &(struct clk_init_data){
2689             .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2690             .ops = &clk_branch2_ops,
2691         },
2692     },
2693 };
2694 
2695 static struct clk_branch gcc_sdcc1_ahb_clk = {
2696     .halt_reg = 0x38008,
2697     .halt_check = BRANCH_HALT,
2698     .clkr = {
2699         .enable_reg = 0x38008,
2700         .enable_mask = BIT(0),
2701         .hw.init = &(struct clk_init_data){
2702             .name = "gcc_sdcc1_ahb_clk",
2703             .ops = &clk_branch2_ops,
2704         },
2705     },
2706 };
2707 
2708 static struct clk_branch gcc_sdcc1_apps_clk = {
2709     .halt_reg = 0x38004,
2710     .halt_check = BRANCH_HALT,
2711     .clkr = {
2712         .enable_reg = 0x38004,
2713         .enable_mask = BIT(0),
2714         .hw.init = &(struct clk_init_data){
2715             .name = "gcc_sdcc1_apps_clk",
2716             .parent_hws = (const struct clk_hw *[]){
2717                 &gcc_sdcc1_apps_clk_src.clkr.hw,
2718             },
2719             .num_parents = 1,
2720             .flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */,
2721             .ops = &clk_branch2_ops,
2722         },
2723     },
2724 };
2725 
2726 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2727     .halt_reg = 0x3800c,
2728     .halt_check = BRANCH_HALT,
2729     .hwcg_reg = 0x3800c,
2730     .hwcg_bit = 1,
2731     .clkr = {
2732         .enable_reg = 0x3800c,
2733         .enable_mask = BIT(0),
2734         .hw.init = &(struct clk_init_data){
2735             .name = "gcc_sdcc1_ice_core_clk",
2736             .parent_hws = (const struct clk_hw *[]){
2737                 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
2738             },
2739             .num_parents = 1,
2740             .flags = CLK_SET_RATE_PARENT,
2741             .ops = &clk_branch2_ops,
2742         },
2743     },
2744 };
2745 
2746 static struct clk_branch gcc_sdcc2_ahb_clk = {
2747     .halt_reg = 0x1e008,
2748     .halt_check = BRANCH_HALT,
2749     .clkr = {
2750         .enable_reg = 0x1e008,
2751         .enable_mask = BIT(0),
2752         .hw.init = &(struct clk_init_data){
2753             .name = "gcc_sdcc2_ahb_clk",
2754             .ops = &clk_branch2_ops,
2755         },
2756     },
2757 };
2758 
2759 static struct clk_branch gcc_sdcc2_apps_clk = {
2760     .halt_reg = 0x1e004,
2761     .halt_check = BRANCH_HALT,
2762     .clkr = {
2763         .enable_reg = 0x1e004,
2764         .enable_mask = BIT(0),
2765         .hw.init = &(struct clk_init_data){
2766             .name = "gcc_sdcc2_apps_clk",
2767             .parent_hws = (const struct clk_hw *[]){
2768                 &gcc_sdcc2_apps_clk_src.clkr.hw,
2769             },
2770             .num_parents = 1,
2771             .flags = CLK_SET_RATE_PARENT,
2772             .ops = &clk_branch2_ops,
2773         },
2774     },
2775 };
2776 
2777 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2778     .halt_reg = 0x2b06c,
2779     .halt_check = BRANCH_HALT_VOTED,
2780     .hwcg_reg = 0x2b06c,
2781     .hwcg_bit = 1,
2782     .clkr = {
2783         .enable_reg = 0x79004,
2784         .enable_mask = BIT(0),
2785         .hw.init = &(struct clk_init_data){
2786             .name = "gcc_sys_noc_cpuss_ahb_clk",
2787             .flags = CLK_IS_CRITICAL,
2788             .ops = &clk_branch2_ops,
2789         },
2790     },
2791 };
2792 
2793 static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
2794     .halt_reg = 0x45098,
2795     .halt_check = BRANCH_HALT,
2796     .clkr = {
2797         .enable_reg = 0x45098,
2798         .enable_mask = BIT(0),
2799         .hw.init = &(struct clk_init_data){
2800             .name = "gcc_sys_noc_ufs_phy_axi_clk",
2801             .parent_hws = (const struct clk_hw *[]){
2802                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2803             },
2804             .num_parents = 1,
2805             .flags = CLK_SET_RATE_PARENT,
2806             .ops = &clk_branch2_ops,
2807         },
2808     },
2809 };
2810 
2811 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
2812     .halt_reg = 0x1a080,
2813     .halt_check = BRANCH_HALT,
2814     .hwcg_reg = 0x1a080,
2815     .hwcg_bit = 1,
2816     .clkr = {
2817         .enable_reg = 0x1a080,
2818         .enable_mask = BIT(0),
2819         .hw.init = &(struct clk_init_data){
2820             .name = "gcc_sys_noc_usb3_prim_axi_clk",
2821             .parent_hws = (const struct clk_hw *[]){
2822                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2823             },
2824             .num_parents = 1,
2825             .flags = CLK_SET_RATE_PARENT,
2826             .ops = &clk_branch2_ops,
2827         },
2828     },
2829 };
2830 
2831 static struct clk_branch gcc_ufs_clkref_clk = {
2832     .halt_reg = 0x8c000,
2833     .halt_check = BRANCH_HALT,
2834     .clkr = {
2835         .enable_reg = 0x8c000,
2836         .enable_mask = BIT(0),
2837         .hw.init = &(struct clk_init_data){
2838             .name = "gcc_ufs_clkref_clk",
2839             .ops = &clk_branch2_ops,
2840         },
2841     },
2842 };
2843 
2844 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2845     .halt_reg = 0x45014,
2846     .halt_check = BRANCH_HALT,
2847     .hwcg_reg = 0x45014,
2848     .hwcg_bit = 1,
2849     .clkr = {
2850         .enable_reg = 0x45014,
2851         .enable_mask = BIT(0),
2852         .hw.init = &(struct clk_init_data){
2853             .name = "gcc_ufs_phy_ahb_clk",
2854             .ops = &clk_branch2_ops,
2855         },
2856     },
2857 };
2858 
2859 static struct clk_branch gcc_ufs_phy_axi_clk = {
2860     .halt_reg = 0x45010,
2861     .halt_check = BRANCH_HALT,
2862     .hwcg_reg = 0x45010,
2863     .hwcg_bit = 1,
2864     .clkr = {
2865         .enable_reg = 0x45010,
2866         .enable_mask = BIT(0),
2867         .hw.init = &(struct clk_init_data){
2868             .name = "gcc_ufs_phy_axi_clk",
2869             .parent_hws = (const struct clk_hw *[]){
2870                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2871             },
2872             .num_parents = 1,
2873             .flags = CLK_SET_RATE_PARENT,
2874             .ops = &clk_branch2_ops,
2875         },
2876     },
2877 };
2878 
2879 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2880     .halt_reg = 0x45044,
2881     .halt_check = BRANCH_HALT,
2882     .hwcg_reg = 0x45044,
2883     .hwcg_bit = 1,
2884     .clkr = {
2885         .enable_reg = 0x45044,
2886         .enable_mask = BIT(0),
2887         .hw.init = &(struct clk_init_data){
2888             .name = "gcc_ufs_phy_ice_core_clk",
2889             .parent_hws = (const struct clk_hw *[]){
2890                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2891             },
2892             .num_parents = 1,
2893             .flags = CLK_SET_RATE_PARENT,
2894             .ops = &clk_branch2_ops,
2895         },
2896     },
2897 };
2898 
2899 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2900     .halt_reg = 0x45078,
2901     .halt_check = BRANCH_HALT,
2902     .hwcg_reg = 0x45078,
2903     .hwcg_bit = 1,
2904     .clkr = {
2905         .enable_reg = 0x45078,
2906         .enable_mask = BIT(0),
2907         .hw.init = &(struct clk_init_data){
2908             .name = "gcc_ufs_phy_phy_aux_clk",
2909             .parent_hws = (const struct clk_hw *[]){
2910                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2911             },
2912             .num_parents = 1,
2913             .flags = CLK_SET_RATE_PARENT,
2914             .ops = &clk_branch2_ops,
2915         },
2916     },
2917 };
2918 
2919 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2920     .halt_reg = 0x4501c,
2921     .halt_check = BRANCH_HALT_SKIP,
2922     .clkr = {
2923         .enable_reg = 0x4501c,
2924         .enable_mask = BIT(0),
2925         .hw.init = &(struct clk_init_data){
2926             .name = "gcc_ufs_phy_rx_symbol_0_clk",
2927             .ops = &clk_branch2_ops,
2928         },
2929     },
2930 };
2931 
2932 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2933     .halt_reg = 0x45018,
2934     .halt_check = BRANCH_HALT_SKIP,
2935     .clkr = {
2936         .enable_reg = 0x45018,
2937         .enable_mask = BIT(0),
2938         .hw.init = &(struct clk_init_data){
2939             .name = "gcc_ufs_phy_tx_symbol_0_clk",
2940             .ops = &clk_branch2_ops,
2941         },
2942     },
2943 };
2944 
2945 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2946     .halt_reg = 0x45040,
2947     .halt_check = BRANCH_HALT,
2948     .hwcg_reg = 0x45040,
2949     .hwcg_bit = 1,
2950     .clkr = {
2951         .enable_reg = 0x45040,
2952         .enable_mask = BIT(0),
2953         .hw.init = &(struct clk_init_data){
2954             .name = "gcc_ufs_phy_unipro_core_clk",
2955             .parent_hws = (const struct clk_hw *[]){
2956                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2957             },
2958             .num_parents = 1,
2959             .flags = CLK_SET_RATE_PARENT,
2960             .ops = &clk_branch2_ops,
2961         },
2962     },
2963 };
2964 
2965 static struct clk_branch gcc_usb30_prim_master_clk = {
2966     .halt_reg = 0x1a010,
2967     .halt_check = BRANCH_HALT,
2968     .clkr = {
2969         .enable_reg = 0x1a010,
2970         .enable_mask = BIT(0),
2971         .hw.init = &(struct clk_init_data){
2972             .name = "gcc_usb30_prim_master_clk",
2973             .parent_hws = (const struct clk_hw *[]){
2974                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2975             },
2976             .num_parents = 1,
2977             .flags = CLK_SET_RATE_PARENT,
2978             .ops = &clk_branch2_ops,
2979         },
2980     },
2981 };
2982 
2983 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2984     .halt_reg = 0x1a018,
2985     .halt_check = BRANCH_HALT,
2986     .clkr = {
2987         .enable_reg = 0x1a018,
2988         .enable_mask = BIT(0),
2989         .hw.init = &(struct clk_init_data){
2990             .name = "gcc_usb30_prim_mock_utmi_clk",
2991             .parent_hws = (const struct clk_hw *[]){
2992                 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2993             },
2994             .num_parents = 1,
2995             .flags = CLK_SET_RATE_PARENT,
2996             .ops = &clk_branch2_ops,
2997         },
2998     },
2999 };
3000 
3001 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3002     .halt_reg = 0x1a014,
3003     .halt_check = BRANCH_HALT,
3004     .clkr = {
3005         .enable_reg = 0x1a014,
3006         .enable_mask = BIT(0),
3007         .hw.init = &(struct clk_init_data){
3008             .name = "gcc_usb30_prim_sleep_clk",
3009             .ops = &clk_branch2_ops,
3010         },
3011     },
3012 };
3013 
3014 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3015     .halt_reg = 0x9f000,
3016     .halt_check = BRANCH_HALT,
3017     .clkr = {
3018         .enable_reg = 0x9f000,
3019         .enable_mask = BIT(0),
3020         .hw.init = &(struct clk_init_data){
3021             .name = "gcc_usb3_prim_clkref_clk",
3022             .ops = &clk_branch2_ops,
3023         },
3024     },
3025 };
3026 
3027 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3028     .halt_reg = 0x1a054,
3029     .halt_check = BRANCH_HALT,
3030     .clkr = {
3031         .enable_reg = 0x1a054,
3032         .enable_mask = BIT(0),
3033         .hw.init = &(struct clk_init_data){
3034             .name = "gcc_usb3_prim_phy_com_aux_clk",
3035             .parent_hws = (const struct clk_hw *[]){
3036                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3037             },
3038             .num_parents = 1,
3039             .flags = CLK_SET_RATE_PARENT,
3040             .ops = &clk_branch2_ops,
3041         },
3042     },
3043 };
3044 
3045 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3046     .halt_reg = 0x1a058,
3047     .halt_check = BRANCH_HALT_SKIP,
3048     .hwcg_reg = 0x1a058,
3049     .hwcg_bit = 1,
3050     .clkr = {
3051         .enable_reg = 0x1a058,
3052         .enable_mask = BIT(0),
3053         .hw.init = &(struct clk_init_data){
3054             .name = "gcc_usb3_prim_phy_pipe_clk",
3055             .ops = &clk_branch2_ops,
3056         },
3057     },
3058 };
3059 
3060 static struct clk_branch gcc_vcodec0_axi_clk = {
3061     .halt_reg = 0x6e008,
3062     .halt_check = BRANCH_HALT,
3063     .clkr = {
3064         .enable_reg = 0x6e008,
3065         .enable_mask = BIT(0),
3066         .hw.init = &(struct clk_init_data){
3067             .name = "gcc_vcodec0_axi_clk",
3068             .ops = &clk_branch2_ops,
3069         },
3070     },
3071 };
3072 
3073 static struct clk_branch gcc_venus_ahb_clk = {
3074     .halt_reg = 0x6e010,
3075     .halt_check = BRANCH_HALT,
3076     .clkr = {
3077         .enable_reg = 0x6e010,
3078         .enable_mask = BIT(0),
3079         .hw.init = &(struct clk_init_data){
3080             .name = "gcc_venus_ahb_clk",
3081             .ops = &clk_branch2_ops,
3082         },
3083     },
3084 };
3085 
3086 static struct clk_branch gcc_venus_ctl_axi_clk = {
3087     .halt_reg = 0x6e004,
3088     .halt_check = BRANCH_HALT,
3089     .clkr = {
3090         .enable_reg = 0x6e004,
3091         .enable_mask = BIT(0),
3092         .hw.init = &(struct clk_init_data){
3093             .name = "gcc_venus_ctl_axi_clk",
3094             .ops = &clk_branch2_ops,
3095         },
3096     },
3097 };
3098 
3099 static struct clk_branch gcc_video_ahb_clk = {
3100     .halt_reg = 0x17004,
3101     .halt_check = BRANCH_HALT,
3102     .hwcg_reg = 0x17004,
3103     .hwcg_bit = 1,
3104     .clkr = {
3105         .enable_reg = 0x17004,
3106         .enable_mask = BIT(0),
3107         .hw.init = &(struct clk_init_data){
3108             .name = "gcc_video_ahb_clk",
3109             .ops = &clk_branch2_ops,
3110         },
3111     },
3112 };
3113 
3114 static struct clk_branch gcc_video_axi0_clk = {
3115     .halt_reg = 0x1701c,
3116     .halt_check = BRANCH_HALT,
3117     .hwcg_reg = 0x1701c,
3118     .hwcg_bit = 1,
3119     .clkr = {
3120         .enable_reg = 0x1701c,
3121         .enable_mask = BIT(0),
3122         .hw.init = &(struct clk_init_data){
3123             .name = "gcc_video_axi0_clk",
3124             .ops = &clk_branch2_ops,
3125         },
3126     },
3127 };
3128 
3129 static struct clk_branch gcc_video_throttle_core_clk = {
3130     .halt_reg = 0x17068,
3131     .halt_check = BRANCH_HALT_VOTED,
3132     .hwcg_reg = 0x17068,
3133     .hwcg_bit = 1,
3134     .clkr = {
3135         .enable_reg = 0x79004,
3136         .enable_mask = BIT(28),
3137         .hw.init = &(struct clk_init_data){
3138             .name = "gcc_video_throttle_core_clk",
3139             .ops = &clk_branch2_ops,
3140         },
3141     },
3142 };
3143 
3144 static struct clk_branch gcc_video_vcodec0_sys_clk = {
3145     .halt_reg = 0x580a4,
3146     .halt_check = BRANCH_HALT_DELAY,
3147     .hwcg_reg = 0x580a4,
3148     .hwcg_bit = 1,
3149     .clkr = {
3150         .enable_reg = 0x580a4,
3151         .enable_mask = BIT(0),
3152         .hw.init = &(struct clk_init_data){
3153             .name = "gcc_video_vcodec0_sys_clk",
3154             .parent_hws = (const struct clk_hw *[]){
3155                 &gcc_video_venus_clk_src.clkr.hw,
3156             },
3157             .num_parents = 1,
3158             .flags = CLK_SET_RATE_PARENT,
3159             .ops = &clk_branch2_ops,
3160         },
3161     },
3162 };
3163 
3164 static struct clk_branch gcc_video_venus_ctl_clk = {
3165     .halt_reg = 0x5808c,
3166     .halt_check = BRANCH_HALT,
3167     .clkr = {
3168         .enable_reg = 0x5808c,
3169         .enable_mask = BIT(0),
3170         .hw.init = &(struct clk_init_data){
3171             .name = "gcc_video_venus_ctl_clk",
3172             .parent_hws = (const struct clk_hw *[]){
3173                 &gcc_video_venus_clk_src.clkr.hw,
3174             },
3175             .num_parents = 1,
3176             .flags = CLK_SET_RATE_PARENT,
3177             .ops = &clk_branch2_ops,
3178         },
3179     },
3180 };
3181 
3182 static struct clk_branch gcc_video_xo_clk = {
3183     .halt_reg = 0x17024,
3184     .halt_check = BRANCH_HALT,
3185     .clkr = {
3186         .enable_reg = 0x17024,
3187         .enable_mask = BIT(0),
3188         .hw.init = &(struct clk_init_data){
3189             .name = "gcc_video_xo_clk",
3190             .ops = &clk_branch2_ops,
3191         },
3192     },
3193 };
3194 
3195 static struct gdsc gcc_camss_top_gdsc = {
3196     .gdscr = 0x58004,
3197     .pd = {
3198         .name = "gcc_camss_top",
3199     },
3200     .pwrsts = PWRSTS_OFF_ON,
3201 };
3202 
3203 static struct gdsc gcc_ufs_phy_gdsc = {
3204     .gdscr = 0x45004,
3205     .pd = {
3206         .name = "gcc_ufs_phy",
3207     },
3208     .pwrsts = PWRSTS_OFF_ON,
3209 };
3210 
3211 static struct gdsc gcc_usb30_prim_gdsc = {
3212     .gdscr = 0x1a004,
3213     .pd = {
3214         .name = "gcc_usb30_prim",
3215     },
3216     .pwrsts = PWRSTS_OFF_ON,
3217 };
3218 
3219 static struct gdsc gcc_vcodec0_gdsc = {
3220     .gdscr = 0x58098,
3221     .pd = {
3222         .name = "gcc_vcodec0",
3223     },
3224     .pwrsts = PWRSTS_OFF_ON,
3225 };
3226 
3227 static struct gdsc gcc_venus_gdsc = {
3228     .gdscr = 0x5807c,
3229     .pd = {
3230         .name = "gcc_venus",
3231     },
3232     .pwrsts = PWRSTS_OFF_ON,
3233 };
3234 
3235 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3236     .gdscr = 0x7d060,
3237     .pd = {
3238         .name = "hlos1_vote_turing_mmu_tbu1",
3239     },
3240     .pwrsts = PWRSTS_OFF_ON,
3241     .flags = VOTABLE,
3242 };
3243 
3244 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3245     .gdscr = 0x7d07c,
3246     .pd = {
3247         .name = "hlos1_vote_turing_mmu_tbu0",
3248     },
3249     .pwrsts = PWRSTS_OFF_ON,
3250     .flags = VOTABLE,
3251 };
3252 
3253 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
3254     .gdscr = 0x7d074,
3255     .pd = {
3256         .name = "hlos1_vote_mm_snoc_mmu_tbu_rt",
3257     },
3258     .pwrsts = PWRSTS_OFF_ON,
3259     .flags = VOTABLE,
3260 };
3261 
3262 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
3263     .gdscr = 0x7d078,
3264     .pd = {
3265         .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",
3266     },
3267     .pwrsts = PWRSTS_OFF_ON,
3268     .flags = VOTABLE,
3269 };
3270 
3271 static struct clk_regmap *gcc_sm6115_clocks[] = {
3272     [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
3273     [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
3274     [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
3275     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3276     [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
3277     [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
3278     [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3279     [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3280     [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
3281     [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
3282     [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
3283     [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
3284     [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
3285     [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
3286     [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
3287     [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
3288     [GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,
3289     [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3290     [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
3291     [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3292     [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
3293     [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
3294     [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
3295     [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3296     [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
3297     [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3298     [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
3299     [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3300     [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
3301     [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
3302     [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
3303     [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
3304     [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
3305     [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
3306     [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
3307     [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
3308     [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
3309     [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
3310     [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
3311     [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
3312     [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
3313     [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
3314     [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
3315     [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
3316     [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
3317     [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
3318     [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
3319     [GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,
3320     [GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,
3321     [GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,
3322     [GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,
3323     [GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,
3324     [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
3325     [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3326     [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
3327     [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3328     [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3329     [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3330     [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3331     [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3332     [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3333     [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
3334     [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3335     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3336     [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3337     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3338     [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3339     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3340     [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3341     [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3342     [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3343     [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3344     [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3345     [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3346     [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3347     [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
3348     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3349     [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3350     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3351     [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3352     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3353     [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3354     [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3355     [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3356     [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
3357     [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3358     [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3359     [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3360     [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3361     [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3362     [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3363     [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3364     [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3365     [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3366     [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3367     [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3368     [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3369     [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3370     [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3371     [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3372     [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3373     [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3374     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3375     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3376     [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
3377     [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3378     [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
3379     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3380     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3381     [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3382     [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3383     [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
3384     [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
3385     [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3386     [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3387     [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3388     [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3389     [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3390     [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3391     [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3392     [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3393     [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3394     [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3395     [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3396     [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3397         &gcc_ufs_phy_unipro_core_clk_src.clkr,
3398     [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3399     [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3400     [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3401     [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3402         &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3403     [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =
3404         &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3405     [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3406     [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3407     [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3408     [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3409     [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3410     [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
3411     [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
3412     [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
3413     [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3414     [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3415     [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
3416     [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
3417     [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
3418     [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
3419     [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3420     [GPLL0] = &gpll0.clkr,
3421     [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
3422     [GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
3423     [GPLL10] = &gpll10.clkr,
3424     [GPLL10_OUT_MAIN] = &gpll10_out_main.clkr,
3425     [GPLL11] = &gpll11.clkr,
3426     [GPLL11_OUT_MAIN] = &gpll11_out_main.clkr,
3427     [GPLL3] = &gpll3.clkr,
3428     [GPLL4] = &gpll4.clkr,
3429     [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
3430     [GPLL6] = &gpll6.clkr,
3431     [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
3432     [GPLL7] = &gpll7.clkr,
3433     [GPLL7_OUT_MAIN] = &gpll7_out_main.clkr,
3434     [GPLL8] = &gpll8.clkr,
3435     [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
3436     [GPLL9] = &gpll9.clkr,
3437     [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
3438 };
3439 
3440 static const struct qcom_reset_map gcc_sm6115_resets[] = {
3441     [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
3442     [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
3443     [GCC_SDCC1_BCR] = { 0x38000 },
3444     [GCC_SDCC2_BCR] = { 0x1e000 },
3445     [GCC_UFS_PHY_BCR] = { 0x45000 },
3446     [GCC_USB30_PRIM_BCR] = { 0x1a000 },
3447     [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
3448     [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
3449     [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
3450     [GCC_VCODEC0_BCR] = { 0x58094 },
3451     [GCC_VENUS_BCR] = { 0x58078 },
3452     [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
3453 };
3454 
3455 static struct gdsc *gcc_sm6115_gdscs[] = {
3456     [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
3457     [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3458     [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3459     [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
3460     [GCC_VENUS_GDSC] = &gcc_venus_gdsc,
3461     [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3462     [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3463     [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
3464     [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
3465 };
3466 
3467 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3468     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3469     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3470     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3471     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3472     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3473     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3474 };
3475 
3476 static const struct regmap_config gcc_sm6115_regmap_config = {
3477     .reg_bits = 32,
3478     .reg_stride = 4,
3479     .val_bits = 32,
3480     .max_register = 0xc7000,
3481     .fast_io = true,
3482 };
3483 
3484 static const struct qcom_cc_desc gcc_sm6115_desc = {
3485     .config = &gcc_sm6115_regmap_config,
3486     .clks = gcc_sm6115_clocks,
3487     .num_clks = ARRAY_SIZE(gcc_sm6115_clocks),
3488     .resets = gcc_sm6115_resets,
3489     .num_resets = ARRAY_SIZE(gcc_sm6115_resets),
3490     .gdscs = gcc_sm6115_gdscs,
3491     .num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs),
3492 };
3493 
3494 static const struct of_device_id gcc_sm6115_match_table[] = {
3495     { .compatible = "qcom,gcc-sm6115" },
3496     { }
3497 };
3498 MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table);
3499 
3500 static int gcc_sm6115_probe(struct platform_device *pdev)
3501 {
3502     struct regmap *regmap;
3503     int ret;
3504 
3505     regmap = qcom_cc_map(pdev, &gcc_sm6115_desc);
3506     if (IS_ERR(regmap))
3507         return PTR_ERR(regmap);
3508 
3509     ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3510             ARRAY_SIZE(gcc_dfs_clocks));
3511     if (ret)
3512         return ret;
3513 
3514     clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
3515     clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
3516     clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
3517     clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
3518 
3519     return qcom_cc_really_probe(pdev, &gcc_sm6115_desc, regmap);
3520 }
3521 
3522 static struct platform_driver gcc_sm6115_driver = {
3523     .probe = gcc_sm6115_probe,
3524     .driver = {
3525         .name = "gcc-sm6115",
3526         .of_match_table = gcc_sm6115_match_table,
3527     },
3528 };
3529 
3530 static int __init gcc_sm6115_init(void)
3531 {
3532     return platform_driver_register(&gcc_sm6115_driver);
3533 }
3534 subsys_initcall(gcc_sm6115_init);
3535 
3536 static void __exit gcc_sm6115_exit(void)
3537 {
3538     platform_driver_unregister(&gcc_sm6115_driver);
3539 }
3540 module_exit(gcc_sm6115_exit);
3541 
3542 MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver");
3543 MODULE_LICENSE("GPL v2");
3544 MODULE_ALIAS("platform:gcc-sm6115");