Back to home page

OSCL-LXR

 
 

    


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