Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
0004  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
0005  */
0006 
0007 #include <linux/clk-provider.h>
0008 #include <linux/module.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/regmap.h>
0011 
0012 #include <dt-bindings/clock/qcom,gcc-sm6350.h>
0013 
0014 #include "clk-alpha-pll.h"
0015 #include "clk-branch.h"
0016 #include "clk-rcg.h"
0017 #include "clk-regmap.h"
0018 #include "clk-regmap-divider.h"
0019 #include "clk-regmap-mux.h"
0020 #include "common.h"
0021 #include "gdsc.h"
0022 #include "reset.h"
0023 
0024 enum {
0025     P_BI_TCXO,
0026     P_GPLL0_OUT_EVEN,
0027     P_GPLL0_OUT_MAIN,
0028     P_GPLL0_OUT_ODD,
0029     P_GPLL6_OUT_EVEN,
0030     P_GPLL7_OUT_MAIN,
0031     P_SLEEP_CLK,
0032 };
0033 
0034 static struct clk_alpha_pll gpll0 = {
0035     .offset = 0x0,
0036     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0037     .clkr = {
0038         .enable_reg = 0x52010,
0039         .enable_mask = BIT(0),
0040         .hw.init = &(struct clk_init_data){
0041             .name = "gpll0",
0042             .parent_data = &(const struct clk_parent_data){
0043                 .fw_name = "bi_tcxo",
0044             },
0045             .num_parents = 1,
0046             .ops = &clk_alpha_pll_fixed_fabia_ops,
0047         },
0048     },
0049 };
0050 
0051 static const struct clk_div_table post_div_table_gpll0_out_even[] = {
0052     { 0x1, 2 },
0053     { }
0054 };
0055 
0056 static struct clk_alpha_pll_postdiv gpll0_out_even = {
0057     .offset = 0x0,
0058     .post_div_shift = 8,
0059     .post_div_table = post_div_table_gpll0_out_even,
0060     .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
0061     .width = 4,
0062     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0063     .clkr.hw.init = &(struct clk_init_data){
0064         .name = "gpll0_out_even",
0065         .parent_hws = (const struct clk_hw*[]){
0066             &gpll0.clkr.hw,
0067         },
0068         .num_parents = 1,
0069         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0070     },
0071 };
0072 
0073 static const struct clk_div_table post_div_table_gpll0_out_odd[] = {
0074     { 0x3, 3 },
0075     { }
0076 };
0077 
0078 static struct clk_alpha_pll_postdiv gpll0_out_odd = {
0079     .offset = 0x0,
0080     .post_div_shift = 12,
0081     .post_div_table = post_div_table_gpll0_out_odd,
0082     .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),
0083     .width = 4,
0084     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0085     .clkr.hw.init = &(struct clk_init_data){
0086         .name = "gpll0_out_odd",
0087         .parent_hws = (const struct clk_hw*[]){
0088             &gpll0.clkr.hw,
0089         },
0090         .num_parents = 1,
0091         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0092     },
0093 };
0094 
0095 static struct clk_alpha_pll gpll6 = {
0096     .offset = 0x6000,
0097     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0098     .clkr = {
0099         .enable_reg = 0x52010,
0100         .enable_mask = BIT(6),
0101         .hw.init = &(struct clk_init_data){
0102             .name = "gpll6",
0103             .parent_hws = (const struct clk_hw*[]){
0104                 &gpll0.clkr.hw,
0105             },
0106             .num_parents = 1,
0107             .ops = &clk_alpha_pll_fixed_fabia_ops,
0108         },
0109     },
0110 };
0111 
0112 static const struct clk_div_table post_div_table_gpll6_out_even[] = {
0113     { 0x1, 2 },
0114     { }
0115 };
0116 
0117 static struct clk_alpha_pll_postdiv gpll6_out_even = {
0118     .offset = 0x6000,
0119     .post_div_shift = 8,
0120     .post_div_table = post_div_table_gpll6_out_even,
0121     .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),
0122     .width = 4,
0123     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0124     .clkr.hw.init = &(struct clk_init_data){
0125         .name = "gpll6_out_even",
0126         .parent_hws = (const struct clk_hw*[]){
0127             &gpll0.clkr.hw,
0128         },
0129         .num_parents = 1,
0130         .ops = &clk_alpha_pll_postdiv_fabia_ops,
0131     },
0132 };
0133 
0134 static struct clk_alpha_pll gpll7 = {
0135     .offset = 0x7000,
0136     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
0137     .clkr = {
0138         .enable_reg = 0x52010,
0139         .enable_mask = BIT(7),
0140         .hw.init = &(struct clk_init_data){
0141             .name = "gpll7",
0142             .parent_hws = (const struct clk_hw*[]){
0143                 &gpll0.clkr.hw,
0144             },
0145             .num_parents = 1,
0146             .ops = &clk_alpha_pll_fixed_fabia_ops,
0147         },
0148     },
0149 };
0150 
0151 static const struct parent_map gcc_parent_map_0[] = {
0152     { P_BI_TCXO, 0 },
0153     { P_GPLL0_OUT_MAIN, 1 },
0154     { P_GPLL6_OUT_EVEN, 2 },
0155     { P_GPLL0_OUT_EVEN, 6 },
0156 };
0157 
0158 static const struct clk_parent_data gcc_parent_data_0[] = {
0159     { .fw_name = "bi_tcxo" },
0160     { .hw = &gpll0.clkr.hw },
0161     { .hw = &gpll6_out_even.clkr.hw },
0162     { .hw = &gpll0_out_even.clkr.hw },
0163 };
0164 
0165 static const struct parent_map gcc_parent_map_1[] = {
0166     { P_BI_TCXO, 0 },
0167     { P_GPLL0_OUT_EVEN, 6 },
0168 };
0169 
0170 static const struct clk_parent_data gcc_parent_data_1[] = {
0171     { .fw_name = "bi_tcxo" },
0172     { .hw = &gpll0_out_even.clkr.hw },
0173 };
0174 
0175 static const struct parent_map gcc_parent_map_2[] = {
0176     { P_BI_TCXO, 0 },
0177     { P_GPLL0_OUT_ODD, 2 },
0178 };
0179 
0180 static const struct clk_parent_data gcc_parent_data_2_ao[] = {
0181     { .fw_name = "bi_tcxo_ao" },
0182     { .hw = &gpll0_out_odd.clkr.hw },
0183 };
0184 
0185 static const struct parent_map gcc_parent_map_4[] = {
0186     { P_BI_TCXO, 0 },
0187     { P_GPLL0_OUT_MAIN, 1 },
0188     { P_GPLL0_OUT_ODD, 2 },
0189 };
0190 
0191 static const struct clk_parent_data gcc_parent_data_4[] = {
0192     { .fw_name = "bi_tcxo" },
0193     { .hw = &gpll0.clkr.hw },
0194     { .hw = &gpll0_out_odd.clkr.hw },
0195 };
0196 
0197 static const struct parent_map gcc_parent_map_5[] = {
0198     { P_BI_TCXO, 0 },
0199     { P_GPLL0_OUT_ODD, 2 },
0200     { P_SLEEP_CLK, 5 },
0201     { P_GPLL0_OUT_EVEN, 6 },
0202 };
0203 
0204 static const struct clk_parent_data gcc_parent_data_5[] = {
0205     { .fw_name = "bi_tcxo" },
0206     { .hw = &gpll0_out_odd.clkr.hw },
0207     { .fw_name = "sleep_clk" },
0208     { .hw = &gpll0_out_even.clkr.hw },
0209 };
0210 
0211 static const struct parent_map gcc_parent_map_6[] = {
0212     { P_BI_TCXO, 0 },
0213     { P_SLEEP_CLK, 5 },
0214 };
0215 
0216 static const struct clk_parent_data gcc_parent_data_6[] = {
0217     { .fw_name = "bi_tcxo" },
0218     { .fw_name = "sleep_clk" }
0219 };
0220 
0221 static const struct parent_map gcc_parent_map_7[] = {
0222     { P_BI_TCXO, 0 },
0223     { P_GPLL6_OUT_EVEN, 2 },
0224     { P_GPLL0_OUT_EVEN, 6 },
0225 };
0226 
0227 static const struct clk_parent_data gcc_parent_data_7[] = {
0228     { .fw_name = "bi_tcxo" },
0229     { .hw = &gpll6_out_even.clkr.hw },
0230     { .hw = &gpll0_out_even.clkr.hw },
0231 };
0232 
0233 static const struct parent_map gcc_parent_map_8[] = {
0234     { P_BI_TCXO, 0 },
0235     { P_GPLL0_OUT_ODD, 2 },
0236     { P_GPLL7_OUT_MAIN, 3 },
0237 };
0238 
0239 static const struct clk_parent_data gcc_parent_data_8[] = {
0240     { .fw_name = "bi_tcxo" },
0241     { .hw = &gpll0_out_odd.clkr.hw },
0242     { .hw = &gpll7.clkr.hw },
0243 };
0244 
0245 static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = {
0246     .reg = 0x4514C,
0247     .shift = 0,
0248     .width = 2,
0249     .clkr.hw.init = &(struct clk_init_data) {
0250         .name = "gcc_gpu_gpll0_main_div_clk_src",
0251         .parent_hws = (const struct clk_hw*[]){
0252             &gpll0.clkr.hw,
0253         },
0254         .num_parents = 1,
0255         .ops = &clk_regmap_div_ro_ops,
0256     },
0257 };
0258 
0259 static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = {
0260     .reg = 0x4ce00,
0261     .shift = 0,
0262     .width = 2,
0263     .clkr.hw.init = &(struct clk_init_data) {
0264         .name = "gcc_npu_pll0_main_div_clk_src",
0265         .parent_hws = (const struct clk_hw*[]){
0266             &gpll0.clkr.hw,
0267         },
0268         .num_parents = 1,
0269         .ops = &clk_regmap_div_ro_ops,
0270     },
0271 };
0272 
0273 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
0274     F(19200000, P_BI_TCXO, 1, 0, 0),
0275     { }
0276 };
0277 
0278 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
0279     .cmd_rcgr = 0x30014,
0280     .mnd_width = 0,
0281     .hid_width = 5,
0282     .parent_map = gcc_parent_map_2,
0283     .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
0284     .clkr.hw.init = &(struct clk_init_data){
0285         .name = "gcc_cpuss_ahb_clk_src",
0286         .parent_data = gcc_parent_data_2_ao,
0287         .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
0288         .ops = &clk_rcg2_ops,
0289     },
0290 };
0291 
0292 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
0293     F(19200000, P_BI_TCXO, 1, 0, 0),
0294     F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
0295     F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
0296     F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
0297     F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
0298     { }
0299 };
0300 
0301 static struct clk_rcg2 gcc_gp1_clk_src = {
0302     .cmd_rcgr = 0x37004,
0303     .mnd_width = 8,
0304     .hid_width = 5,
0305     .parent_map = gcc_parent_map_5,
0306     .freq_tbl = ftbl_gcc_gp1_clk_src,
0307     .clkr.hw.init = &(struct clk_init_data){
0308         .name = "gcc_gp1_clk_src",
0309         .parent_data = gcc_parent_data_5,
0310         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
0311         .ops = &clk_rcg2_ops,
0312     },
0313 };
0314 
0315 static struct clk_rcg2 gcc_gp2_clk_src = {
0316     .cmd_rcgr = 0x38004,
0317     .mnd_width = 8,
0318     .hid_width = 5,
0319     .parent_map = gcc_parent_map_5,
0320     .freq_tbl = ftbl_gcc_gp1_clk_src,
0321     .clkr.hw.init = &(struct clk_init_data){
0322         .name = "gcc_gp2_clk_src",
0323         .parent_data = gcc_parent_data_5,
0324         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
0325         .ops = &clk_rcg2_ops,
0326     },
0327 };
0328 
0329 static struct clk_rcg2 gcc_gp3_clk_src = {
0330     .cmd_rcgr = 0x39004,
0331     .mnd_width = 8,
0332     .hid_width = 5,
0333     .parent_map = gcc_parent_map_5,
0334     .freq_tbl = ftbl_gcc_gp1_clk_src,
0335     .clkr.hw.init = &(struct clk_init_data){
0336         .name = "gcc_gp3_clk_src",
0337         .parent_data = gcc_parent_data_5,
0338         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
0339         .ops = &clk_rcg2_ops,
0340     },
0341 };
0342 
0343 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
0344     F(19200000, P_BI_TCXO, 1, 0, 0),
0345     F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
0346     { }
0347 };
0348 
0349 static struct clk_rcg2 gcc_pdm2_clk_src = {
0350     .cmd_rcgr = 0x23010,
0351     .mnd_width = 0,
0352     .hid_width = 5,
0353     .parent_map = gcc_parent_map_1,
0354     .freq_tbl = ftbl_gcc_pdm2_clk_src,
0355     .clkr.hw.init = &(struct clk_init_data){
0356         .name = "gcc_pdm2_clk_src",
0357         .parent_data = gcc_parent_data_1,
0358         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0359         .ops = &clk_rcg2_ops,
0360     },
0361 };
0362 
0363 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
0364     F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
0365     F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
0366     F(19200000, P_BI_TCXO, 1, 0, 0),
0367     F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
0368     F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
0369     F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
0370     F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
0371     F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
0372     F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
0373     F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
0374     F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
0375     F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
0376     F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
0377     F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
0378     F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
0379     F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),
0380     { }
0381 };
0382 
0383 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
0384     .name = "gcc_qupv3_wrap0_s0_clk_src",
0385     .parent_data = gcc_parent_data_0,
0386     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0387     .ops = &clk_rcg2_ops,
0388 };
0389 
0390 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
0391     .cmd_rcgr = 0x21148,
0392     .mnd_width = 16,
0393     .hid_width = 5,
0394     .parent_map = gcc_parent_map_0,
0395     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0396     .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
0397 };
0398 
0399 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
0400     .name = "gcc_qupv3_wrap0_s1_clk_src",
0401     .parent_data = gcc_parent_data_0,
0402     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0403     .ops = &clk_rcg2_ops,
0404 };
0405 
0406 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
0407     .cmd_rcgr = 0x21278,
0408     .mnd_width = 16,
0409     .hid_width = 5,
0410     .parent_map = gcc_parent_map_0,
0411     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0412     .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
0413 };
0414 
0415 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
0416     .name = "gcc_qupv3_wrap0_s2_clk_src",
0417     .parent_data = gcc_parent_data_0,
0418     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0419     .ops = &clk_rcg2_ops,
0420 };
0421 
0422 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
0423     .cmd_rcgr = 0x213a8,
0424     .mnd_width = 16,
0425     .hid_width = 5,
0426     .parent_map = gcc_parent_map_0,
0427     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0428     .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
0429 };
0430 
0431 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
0432     .name = "gcc_qupv3_wrap0_s3_clk_src",
0433     .parent_data = gcc_parent_data_0,
0434     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0435     .ops = &clk_rcg2_ops,
0436 };
0437 
0438 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
0439     .cmd_rcgr = 0x214d8,
0440     .mnd_width = 16,
0441     .hid_width = 5,
0442     .parent_map = gcc_parent_map_0,
0443     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0444     .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
0445 };
0446 
0447 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
0448     .name = "gcc_qupv3_wrap0_s4_clk_src",
0449     .parent_data = gcc_parent_data_0,
0450     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0451     .ops = &clk_rcg2_ops,
0452 };
0453 
0454 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
0455     .cmd_rcgr = 0x21608,
0456     .mnd_width = 16,
0457     .hid_width = 5,
0458     .parent_map = gcc_parent_map_0,
0459     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0460     .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
0461 };
0462 
0463 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
0464     .name = "gcc_qupv3_wrap0_s5_clk_src",
0465     .parent_data = gcc_parent_data_0,
0466     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0467     .ops = &clk_rcg2_ops,
0468 };
0469 
0470 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
0471     .cmd_rcgr = 0x21738,
0472     .mnd_width = 16,
0473     .hid_width = 5,
0474     .parent_map = gcc_parent_map_0,
0475     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0476     .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
0477 };
0478 
0479 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
0480     .name = "gcc_qupv3_wrap1_s0_clk_src",
0481     .parent_data = gcc_parent_data_0,
0482     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0483     .ops = &clk_rcg2_ops,
0484 };
0485 
0486 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
0487     .cmd_rcgr = 0x22018,
0488     .mnd_width = 16,
0489     .hid_width = 5,
0490     .parent_map = gcc_parent_map_0,
0491     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0492     .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
0493 };
0494 
0495 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
0496     .name = "gcc_qupv3_wrap1_s1_clk_src",
0497     .parent_data = gcc_parent_data_0,
0498     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0499     .ops = &clk_rcg2_ops,
0500 };
0501 
0502 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
0503     .cmd_rcgr = 0x22148,
0504     .mnd_width = 16,
0505     .hid_width = 5,
0506     .parent_map = gcc_parent_map_0,
0507     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0508     .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
0509 };
0510 
0511 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
0512     .name = "gcc_qupv3_wrap1_s2_clk_src",
0513     .parent_data = gcc_parent_data_0,
0514     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0515     .ops = &clk_rcg2_ops,
0516 };
0517 
0518 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
0519     .cmd_rcgr = 0x22278,
0520     .mnd_width = 16,
0521     .hid_width = 5,
0522     .parent_map = gcc_parent_map_0,
0523     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0524     .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
0525 };
0526 
0527 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
0528     .name = "gcc_qupv3_wrap1_s3_clk_src",
0529     .parent_data = gcc_parent_data_0,
0530     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0531     .ops = &clk_rcg2_ops,
0532 };
0533 
0534 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
0535     .cmd_rcgr = 0x223a8,
0536     .mnd_width = 16,
0537     .hid_width = 5,
0538     .parent_map = gcc_parent_map_0,
0539     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0540     .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
0541 };
0542 
0543 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
0544     .name = "gcc_qupv3_wrap1_s4_clk_src",
0545     .parent_data = gcc_parent_data_0,
0546     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0547     .ops = &clk_rcg2_ops,
0548 };
0549 
0550 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
0551     .cmd_rcgr = 0x224d8,
0552     .mnd_width = 16,
0553     .hid_width = 5,
0554     .parent_map = gcc_parent_map_0,
0555     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0556     .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
0557 };
0558 
0559 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
0560     .name = "gcc_qupv3_wrap1_s5_clk_src",
0561     .parent_data = gcc_parent_data_0,
0562     .num_parents = ARRAY_SIZE(gcc_parent_data_0),
0563     .ops = &clk_rcg2_ops,
0564 };
0565 
0566 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
0567     .cmd_rcgr = 0x22608,
0568     .mnd_width = 16,
0569     .hid_width = 5,
0570     .parent_map = gcc_parent_map_0,
0571     .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
0572     .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
0573 };
0574 
0575 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
0576     F(144000, P_BI_TCXO, 16, 3, 25),
0577     F(400000, P_BI_TCXO, 12, 1, 4),
0578     F(19200000, P_BI_TCXO, 1, 0, 0),
0579     F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
0580     F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
0581     F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
0582     F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
0583     F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),
0584     F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),
0585     { }
0586 };
0587 
0588 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
0589     .cmd_rcgr = 0x4b024,
0590     .mnd_width = 8,
0591     .hid_width = 5,
0592     .parent_map = gcc_parent_map_7,
0593     .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
0594     .clkr.hw.init = &(struct clk_init_data){
0595         .name = "gcc_sdcc1_apps_clk_src",
0596         .parent_data = gcc_parent_data_7,
0597         .num_parents = ARRAY_SIZE(gcc_parent_data_7),
0598         .ops = &clk_rcg2_ops,
0599     },
0600 };
0601 
0602 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
0603     F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
0604     F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
0605     F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
0606     { }
0607 };
0608 
0609 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
0610     .cmd_rcgr = 0x4b00c,
0611     .mnd_width = 0,
0612     .hid_width = 5,
0613     .parent_map = gcc_parent_map_1,
0614     .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
0615     .clkr.hw.init = &(struct clk_init_data){
0616         .name = "gcc_sdcc1_ice_core_clk_src",
0617         .parent_data = gcc_parent_data_1,
0618         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0619         .ops = &clk_rcg2_ops,
0620     },
0621 };
0622 
0623 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
0624     F(400000, P_BI_TCXO, 12, 1, 4),
0625     F(9600000, P_BI_TCXO, 2, 0, 0),
0626     F(19200000, P_BI_TCXO, 1, 0, 0),
0627     F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
0628     F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
0629     F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
0630     F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
0631     { }
0632 };
0633 
0634 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
0635     .cmd_rcgr = 0x2000c,
0636     .mnd_width = 8,
0637     .hid_width = 5,
0638     .parent_map = gcc_parent_map_8,
0639     .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
0640     .clkr.hw.init = &(struct clk_init_data){
0641         .name = "gcc_sdcc2_apps_clk_src",
0642         .parent_data = gcc_parent_data_8,
0643         .num_parents = ARRAY_SIZE(gcc_parent_data_8),
0644         .ops = &clk_rcg2_floor_ops,
0645     },
0646 };
0647 
0648 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
0649     F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
0650     F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
0651     F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
0652     F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
0653     F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
0654     { }
0655 };
0656 
0657 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
0658     .cmd_rcgr = 0x3a01c,
0659     .mnd_width = 8,
0660     .hid_width = 5,
0661     .parent_map = gcc_parent_map_4,
0662     .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
0663     .clkr.hw.init = &(struct clk_init_data){
0664         .name = "gcc_ufs_phy_axi_clk_src",
0665         .parent_data = gcc_parent_data_4,
0666         .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0667         .ops = &clk_rcg2_ops,
0668     },
0669 };
0670 
0671 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
0672     F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
0673     F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
0674     F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
0675     F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
0676     { }
0677 };
0678 
0679 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
0680     .cmd_rcgr = 0x3a048,
0681     .mnd_width = 0,
0682     .hid_width = 5,
0683     .parent_map = gcc_parent_map_1,
0684     .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
0685     .clkr.hw.init = &(struct clk_init_data){
0686         .name = "gcc_ufs_phy_ice_core_clk_src",
0687         .parent_data = gcc_parent_data_1,
0688         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0689         .ops = &clk_rcg2_ops,
0690     },
0691 };
0692 
0693 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
0694     F(9600000, P_BI_TCXO, 2, 0, 0),
0695     F(19200000, P_BI_TCXO, 1, 0, 0),
0696     { }
0697 };
0698 
0699 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
0700     .cmd_rcgr = 0x3a0b0,
0701     .mnd_width = 0,
0702     .hid_width = 5,
0703     .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
0704     .clkr.hw.init = &(struct clk_init_data){
0705         .name = "gcc_ufs_phy_phy_aux_clk_src",
0706         .parent_data = &(const struct clk_parent_data){
0707             .fw_name = "bi_tcxo",
0708         },
0709         .num_parents = 1,
0710         .ops = &clk_rcg2_ops,
0711     },
0712 };
0713 
0714 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
0715     F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
0716     F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
0717     F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
0718     { }
0719 };
0720 
0721 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
0722     .cmd_rcgr = 0x3a060,
0723     .mnd_width = 0,
0724     .hid_width = 5,
0725     .parent_map = gcc_parent_map_1,
0726     .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
0727     .clkr.hw.init = &(struct clk_init_data){
0728         .name = "gcc_ufs_phy_unipro_core_clk_src",
0729         .parent_data = gcc_parent_data_1,
0730         .num_parents = ARRAY_SIZE(gcc_parent_data_1),
0731         .ops = &clk_rcg2_ops,
0732     },
0733 };
0734 
0735 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
0736     F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0),
0737     F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
0738     F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
0739     F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
0740     { }
0741 };
0742 
0743 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
0744     .cmd_rcgr = 0x1a01c,
0745     .mnd_width = 8,
0746     .hid_width = 5,
0747     .parent_map = gcc_parent_map_4,
0748     .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
0749     .clkr.hw.init = &(struct clk_init_data){
0750         .name = "gcc_usb30_prim_master_clk_src",
0751         .parent_data = gcc_parent_data_4,
0752         .num_parents = ARRAY_SIZE(gcc_parent_data_4),
0753         .ops = &clk_rcg2_ops,
0754     },
0755 };
0756 
0757 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
0758     F(19200000, P_BI_TCXO, 1, 0, 0),
0759     { }
0760 };
0761 
0762 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
0763     .cmd_rcgr = 0x1a034,
0764     .mnd_width = 0,
0765     .hid_width = 5,
0766     .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
0767     .clkr.hw.init = &(struct clk_init_data){
0768         .name = "gcc_usb30_prim_mock_utmi_clk_src",
0769         .parent_data = &(const struct clk_parent_data){
0770             .fw_name = "bi_tcxo",
0771         },
0772         .num_parents = 1,
0773         .ops = &clk_rcg2_ops,
0774     },
0775 };
0776 
0777 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
0778     .cmd_rcgr = 0x1a060,
0779     .mnd_width = 0,
0780     .hid_width = 5,
0781     .parent_map = gcc_parent_map_6,
0782     .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
0783     .clkr.hw.init = &(struct clk_init_data){
0784         .name = "gcc_usb3_prim_phy_aux_clk_src",
0785         .parent_data = gcc_parent_data_6,
0786         .num_parents = ARRAY_SIZE(gcc_parent_data_6),
0787         .ops = &clk_rcg2_ops,
0788     },
0789 };
0790 
0791 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
0792     .halt_reg = 0x3e014,
0793     .halt_check = BRANCH_HALT_DELAY,
0794     .hwcg_reg = 0x3e014,
0795     .hwcg_bit = 1,
0796     .clkr = {
0797         .enable_reg = 0x3e014,
0798         .enable_mask = BIT(0),
0799         .hw.init = &(struct clk_init_data){
0800             .name = "gcc_aggre_ufs_phy_axi_clk",
0801             .parent_hws = (const struct clk_hw*[]){
0802                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
0803             },
0804             .num_parents = 1,
0805             .flags = CLK_SET_RATE_PARENT,
0806             .ops = &clk_branch2_ops,
0807         },
0808     },
0809 };
0810 
0811 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
0812     .halt_reg = 0x3e014,
0813     .halt_check = BRANCH_HALT,
0814     .hwcg_reg = 0x3e014,
0815     .hwcg_bit = 1,
0816     .clkr = {
0817         .enable_reg = 0x3e014,
0818         .enable_mask = BIT(1),
0819         .hw.init = &(struct clk_init_data){
0820             .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
0821             .parent_hws = (const struct clk_hw*[]){
0822                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
0823             },
0824             .num_parents = 1,
0825             .flags = CLK_SET_RATE_PARENT,
0826             .ops = &clk_branch2_ops,
0827         },
0828     },
0829 };
0830 
0831 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
0832     .halt_reg = 0x3e014,
0833     .halt_check = BRANCH_HALT,
0834     .hwcg_reg = 0x3e014,
0835     .hwcg_bit = 1,
0836     .clkr = {
0837         .enable_reg = 0x3e014,
0838         .enable_mask = BIT(1),
0839         .hw.init = &(struct clk_init_data){
0840             .name = "gcc_ufs_phy_axi_hw_ctl_clk",
0841             .parent_hws = (const struct clk_hw*[]){
0842                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
0843             },
0844             .num_parents = 1,
0845             .flags = CLK_SET_RATE_PARENT,
0846             .ops = &clk_branch2_ops,
0847         },
0848     },
0849 };
0850 
0851 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
0852     .halt_reg = 0x3e010,
0853     .halt_check = BRANCH_HALT,
0854     .hwcg_reg = 0x3e010,
0855     .hwcg_bit = 1,
0856     .clkr = {
0857         .enable_reg = 0x3e010,
0858         .enable_mask = BIT(0),
0859         .hw.init = &(struct clk_init_data){
0860             .name = "gcc_aggre_usb3_prim_axi_clk",
0861             .parent_hws = (const struct clk_hw*[]){
0862                 &gcc_usb30_prim_master_clk_src.clkr.hw,
0863             },
0864             .num_parents = 1,
0865             .flags = CLK_SET_RATE_PARENT,
0866             .ops = &clk_branch2_ops,
0867         },
0868     },
0869 };
0870 
0871 static struct clk_branch gcc_boot_rom_ahb_clk = {
0872     .halt_reg = 0x26004,
0873     .halt_check = BRANCH_HALT_VOTED,
0874     .hwcg_reg = 0x26004,
0875     .hwcg_bit = 1,
0876     .clkr = {
0877         .enable_reg = 0x52000,
0878         .enable_mask = BIT(28),
0879         .hw.init = &(struct clk_init_data){
0880             .name = "gcc_boot_rom_ahb_clk",
0881             .ops = &clk_branch2_ops,
0882         },
0883     },
0884 };
0885 
0886 static struct clk_branch gcc_camera_ahb_clk = {
0887     .halt_reg = 0x17008,
0888     .halt_check = BRANCH_HALT,
0889     .hwcg_reg = 0x17008,
0890     .hwcg_bit = 1,
0891     .clkr = {
0892         .enable_reg = 0x17008,
0893         .enable_mask = BIT(0),
0894         .hw.init = &(struct clk_init_data){
0895             .name = "gcc_camera_ahb_clk",
0896             .flags = CLK_IS_CRITICAL,
0897             .ops = &clk_branch2_ops,
0898         },
0899     },
0900 };
0901 
0902 static struct clk_branch gcc_camera_axi_clk = {
0903     .halt_reg = 0x17018,
0904     .halt_check = BRANCH_HALT,
0905     .hwcg_reg = 0x17018,
0906     .hwcg_bit = 1,
0907     .clkr = {
0908         .enable_reg = 0x17018,
0909         .enable_mask = BIT(0),
0910         .hw.init = &(struct clk_init_data){
0911             .name = "gcc_camera_axi_clk",
0912             .ops = &clk_branch2_ops,
0913         },
0914     },
0915 };
0916 
0917 static struct clk_branch gcc_camera_throttle_nrt_axi_clk = {
0918     .halt_reg = 0x17078,
0919     .halt_check = BRANCH_VOTED,
0920     .hwcg_reg = 0x17078,
0921     .hwcg_bit = 1,
0922     .clkr = {
0923         .enable_reg = 0x17078,
0924         .enable_mask = BIT(0),
0925         .hw.init = &(struct clk_init_data){
0926             .name = "gcc_camera_throttle_nrt_axi_clk",
0927             .ops = &clk_branch2_ops,
0928         },
0929     },
0930 };
0931 
0932 static struct clk_branch gcc_camera_throttle_rt_axi_clk = {
0933     .halt_reg = 0x17024,
0934     .halt_check = BRANCH_VOTED,
0935     .hwcg_reg = 0x17024,
0936     .hwcg_bit = 1,
0937     .clkr = {
0938         .enable_reg = 0x17024,
0939         .enable_mask = BIT(0),
0940         .hw.init = &(struct clk_init_data){
0941             .name = "gcc_camera_throttle_rt_axi_clk",
0942             .ops = &clk_branch2_ops,
0943         },
0944     },
0945 };
0946 
0947 static struct clk_branch gcc_camera_xo_clk = {
0948     .halt_reg = 0x17030,
0949     .halt_check = BRANCH_HALT,
0950     .clkr = {
0951         .enable_reg = 0x17030,
0952         .enable_mask = BIT(0),
0953         .hw.init = &(struct clk_init_data){
0954             .name = "gcc_camera_xo_clk",
0955             .flags = CLK_IS_CRITICAL,
0956             .ops = &clk_branch2_ops,
0957         },
0958     },
0959 };
0960 
0961 static struct clk_branch gcc_ce1_ahb_clk = {
0962     .halt_reg = 0x2b00c,
0963     .halt_check = BRANCH_HALT_VOTED,
0964     .hwcg_reg = 0x2b00c,
0965     .hwcg_bit = 1,
0966     .clkr = {
0967         .enable_reg = 0x52008,
0968         .enable_mask = BIT(3),
0969         .hw.init = &(struct clk_init_data){
0970             .name = "gcc_ce1_ahb_clk",
0971             .ops = &clk_branch2_ops,
0972         },
0973     },
0974 };
0975 
0976 static struct clk_branch gcc_ce1_axi_clk = {
0977     .halt_reg = 0x2b008,
0978     .halt_check = BRANCH_HALT_VOTED,
0979     .clkr = {
0980         .enable_reg = 0x52008,
0981         .enable_mask = BIT(2),
0982         .hw.init = &(struct clk_init_data){
0983             .name = "gcc_ce1_axi_clk",
0984             .ops = &clk_branch2_ops,
0985         },
0986     },
0987 };
0988 
0989 static struct clk_branch gcc_ce1_clk = {
0990     .halt_reg = 0x2b004,
0991     .halt_check = BRANCH_HALT_VOTED,
0992     .clkr = {
0993         .enable_reg = 0x52008,
0994         .enable_mask = BIT(1),
0995         .hw.init = &(struct clk_init_data){
0996             .name = "gcc_ce1_clk",
0997             .ops = &clk_branch2_ops,
0998         },
0999     },
1000 };
1001 
1002 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1003     .halt_reg = 0x1101c,
1004     .halt_check = BRANCH_HALT,
1005     .hwcg_reg = 0x1101c,
1006     .hwcg_bit = 1,
1007     .clkr = {
1008         .enable_reg = 0x1101c,
1009         .enable_mask = BIT(0),
1010         .hw.init = &(struct clk_init_data){
1011             .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1012             .parent_hws = (const struct clk_hw*[]){
1013                 &gcc_usb30_prim_master_clk_src.clkr.hw,
1014             },
1015             .num_parents = 1,
1016             .flags = CLK_SET_RATE_PARENT,
1017             .ops = &clk_branch2_ops,
1018         },
1019     },
1020 };
1021 
1022 static struct clk_branch gcc_cpuss_ahb_clk = {
1023     .halt_reg = 0x30000,
1024     .halt_check = BRANCH_HALT_VOTED,
1025     .hwcg_reg = 0x30000,
1026     .hwcg_bit = 1,
1027     .clkr = {
1028         .enable_reg = 0x52008,
1029         .enable_mask = BIT(4),
1030         .hw.init = &(struct clk_init_data){
1031             .name = "gcc_cpuss_ahb_clk",
1032             .parent_hws = (const struct clk_hw*[]){
1033                 &gcc_cpuss_ahb_clk_src.clkr.hw,
1034             },
1035             .num_parents = 1,
1036             .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1037             .ops = &clk_branch2_ops,
1038         },
1039     },
1040 };
1041 
1042 static struct clk_branch gcc_cpuss_gnoc_clk = {
1043     .halt_reg = 0x30004,
1044     .halt_check = BRANCH_HALT_VOTED,
1045     .hwcg_reg = 0x30004,
1046     .hwcg_bit = 1,
1047     .clkr = {
1048         .enable_reg = 0x52008,
1049         .enable_mask = BIT(5),
1050         .hw.init = &(struct clk_init_data){
1051             .name = "gcc_cpuss_gnoc_clk",
1052             .flags = CLK_IS_CRITICAL,
1053             .ops = &clk_branch2_ops,
1054         },
1055     },
1056 };
1057 
1058 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1059     .halt_reg = 0x30008,
1060     .halt_check = BRANCH_HALT,
1061     .clkr = {
1062         .enable_reg = 0x30008,
1063         .enable_mask = BIT(0),
1064         .hw.init = &(struct clk_init_data){
1065             .name = "gcc_cpuss_rbcpr_clk",
1066             .ops = &clk_branch2_ops,
1067         },
1068     },
1069 };
1070 
1071 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1072     .halt_reg = 0x2d038,
1073     .halt_check = BRANCH_VOTED,
1074     .hwcg_reg = 0x2d038,
1075     .hwcg_bit = 1,
1076     .clkr = {
1077         .enable_reg = 0x2d038,
1078         .enable_mask = BIT(0),
1079         .hw.init = &(struct clk_init_data){
1080             .name = "gcc_ddrss_gpu_axi_clk",
1081             .ops = &clk_branch2_ops,
1082         },
1083     },
1084 };
1085 
1086 static struct clk_branch gcc_disp_ahb_clk = {
1087     .halt_reg = 0x1700c,
1088     .halt_check = BRANCH_HALT,
1089     .hwcg_reg = 0x1700c,
1090     .hwcg_bit = 1,
1091     .clkr = {
1092         .enable_reg = 0x1700c,
1093         .enable_mask = BIT(0),
1094         .hw.init = &(struct clk_init_data){
1095             .name = "gcc_disp_ahb_clk",
1096             .flags = CLK_IS_CRITICAL,
1097             .ops = &clk_branch2_ops,
1098         },
1099     },
1100 };
1101 
1102 static struct clk_branch gcc_disp_axi_clk = {
1103     .halt_reg = 0x1701c,
1104     .halt_check = BRANCH_HALT,
1105     .hwcg_reg = 0x1701c,
1106     .hwcg_bit = 1,
1107     .clkr = {
1108         .enable_reg = 0x1701c,
1109         .enable_mask = BIT(0),
1110         .hw.init = &(struct clk_init_data){
1111             .name = "gcc_disp_axi_clk",
1112             .ops = &clk_branch2_ops,
1113         },
1114     },
1115 };
1116 
1117 static struct clk_branch gcc_disp_cc_sleep_clk = {
1118     .halt_reg = 0x17074,
1119     .halt_check = BRANCH_HALT_DELAY,
1120     .hwcg_reg = 0x17074,
1121     .hwcg_bit = 1,
1122     .clkr = {
1123         .enable_reg = 0x17074,
1124         .enable_mask = BIT(0),
1125         .hw.init = &(struct clk_init_data){
1126             .name = "gcc_disp_cc_sleep_clk",
1127             .ops = &clk_branch2_ops,
1128         },
1129     },
1130 };
1131 
1132 static struct clk_branch gcc_disp_cc_xo_clk = {
1133     .halt_reg = 0x17070,
1134     .halt_check = BRANCH_HALT,
1135     .hwcg_reg = 0x17070,
1136     .hwcg_bit = 1,
1137     .clkr = {
1138         .enable_reg = 0x17070,
1139         .enable_mask = BIT(0),
1140         .hw.init = &(struct clk_init_data){
1141             .name = "gcc_disp_cc_xo_clk",
1142             .flags = CLK_IS_CRITICAL,
1143             .ops = &clk_branch2_ops,
1144         },
1145     },
1146 };
1147 
1148 static struct clk_branch gcc_disp_gpll0_clk = {
1149     .halt_check = BRANCH_HALT_DELAY,
1150     .clkr = {
1151         .enable_reg = 0x52000,
1152         .enable_mask = BIT(2),
1153         .hw.init = &(struct clk_init_data){
1154             .name = "gcc_disp_gpll0_clk",
1155             .parent_hws = (const struct clk_hw*[]){
1156                 &gpll0.clkr.hw,
1157             },
1158             .num_parents = 1,
1159             .ops = &clk_branch2_ops,
1160         },
1161     },
1162 };
1163 
1164 static struct clk_branch gcc_disp_throttle_axi_clk = {
1165     .halt_reg = 0x17028,
1166     .halt_check = BRANCH_HALT,
1167     .hwcg_reg = 0x17028,
1168     .hwcg_bit = 1,
1169     .clkr = {
1170         .enable_reg = 0x17028,
1171         .enable_mask = BIT(0),
1172         .hw.init = &(struct clk_init_data){
1173             .name = "gcc_disp_throttle_axi_clk",
1174             .ops = &clk_branch2_ops,
1175         },
1176     },
1177 };
1178 
1179 static struct clk_branch gcc_disp_xo_clk = {
1180     .halt_reg = 0x17034,
1181     .halt_check = BRANCH_HALT,
1182     .clkr = {
1183         .enable_reg = 0x17034,
1184         .enable_mask = BIT(0),
1185         .hw.init = &(struct clk_init_data){
1186             .name = "gcc_disp_xo_clk",
1187             .ops = &clk_branch2_ops,
1188         },
1189     },
1190 };
1191 
1192 static struct clk_branch gcc_gp1_clk = {
1193     .halt_reg = 0x37000,
1194     .halt_check = BRANCH_HALT,
1195     .clkr = {
1196         .enable_reg = 0x37000,
1197         .enable_mask = BIT(0),
1198         .hw.init = &(struct clk_init_data){
1199             .name = "gcc_gp1_clk",
1200             .parent_hws = (const struct clk_hw*[]){
1201                 &gcc_gp1_clk_src.clkr.hw,
1202             },
1203             .num_parents = 1,
1204             .flags = CLK_SET_RATE_PARENT,
1205             .ops = &clk_branch2_ops,
1206         },
1207     },
1208 };
1209 
1210 static struct clk_branch gcc_gp2_clk = {
1211     .halt_reg = 0x38000,
1212     .halt_check = BRANCH_HALT,
1213     .clkr = {
1214         .enable_reg = 0x38000,
1215         .enable_mask = BIT(0),
1216         .hw.init = &(struct clk_init_data){
1217             .name = "gcc_gp2_clk",
1218             .parent_hws = (const struct clk_hw*[]){
1219                 &gcc_gp2_clk_src.clkr.hw,
1220             },
1221             .num_parents = 1,
1222             .flags = CLK_SET_RATE_PARENT,
1223             .ops = &clk_branch2_ops,
1224         },
1225     },
1226 };
1227 
1228 static struct clk_branch gcc_gp3_clk = {
1229     .halt_reg = 0x39000,
1230     .halt_check = BRANCH_HALT,
1231     .clkr = {
1232         .enable_reg = 0x39000,
1233         .enable_mask = BIT(0),
1234         .hw.init = &(struct clk_init_data){
1235             .name = "gcc_gp3_clk",
1236             .parent_hws = (const struct clk_hw*[]){
1237                 &gcc_gp3_clk_src.clkr.hw,
1238             },
1239             .num_parents = 1,
1240             .flags = CLK_SET_RATE_PARENT,
1241             .ops = &clk_branch2_ops,
1242         },
1243     },
1244 };
1245 
1246 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1247     .halt_reg = 0x45004,
1248     .halt_check = BRANCH_HALT,
1249     .hwcg_reg = 0x45004,
1250     .hwcg_bit = 1,
1251     .clkr = {
1252         .enable_reg = 0x45004,
1253         .enable_mask = BIT(0),
1254         .hw.init = &(struct clk_init_data){
1255             .name = "gcc_gpu_cfg_ahb_clk",
1256             .flags = CLK_IS_CRITICAL,
1257             .ops = &clk_branch2_ops,
1258         },
1259     },
1260 };
1261 
1262 static struct clk_branch gcc_gpu_gpll0_clk = {
1263     .halt_check = BRANCH_HALT_DELAY,
1264     .clkr = {
1265         .enable_reg = 0x52008,
1266         .enable_mask = BIT(7),
1267         .hw.init = &(struct clk_init_data){
1268             .name = "gcc_gpu_gpll0_clk",
1269             .parent_hws = (const struct clk_hw*[]){
1270                 &gpll0.clkr.hw,
1271             },
1272             .num_parents = 1,
1273             .ops = &clk_branch2_ops,
1274         },
1275     },
1276 };
1277 
1278 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1279     .halt_check = BRANCH_HALT_DELAY,
1280     .clkr = {
1281         .enable_reg = 0x52008,
1282         .enable_mask = BIT(8),
1283         .hw.init = &(struct clk_init_data){
1284             .name = "gcc_gpu_gpll0_div_clk",
1285             .parent_hws = (const struct clk_hw*[]){
1286                 &gcc_gpu_gpll0_main_div_clk_src.clkr.hw,
1287             },
1288             .num_parents = 1,
1289             .ops = &clk_branch2_ops,
1290         },
1291     },
1292 };
1293 
1294 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1295     .halt_reg = 0x4500c,
1296     .halt_check = BRANCH_VOTED,
1297     .hwcg_reg = 0x4500c,
1298     .hwcg_bit = 1,
1299     .clkr = {
1300         .enable_reg = 0x4500c,
1301         .enable_mask = BIT(0),
1302         .hw.init = &(struct clk_init_data){
1303             .name = "gcc_gpu_memnoc_gfx_clk",
1304             .ops = &clk_branch2_ops,
1305         },
1306     },
1307 };
1308 
1309 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1310     .halt_reg = 0x45014,
1311     .halt_check = BRANCH_HALT,
1312     .hwcg_reg = 0x45014,
1313     .hwcg_bit = 1,
1314     .clkr = {
1315         .enable_reg = 0x45014,
1316         .enable_mask = BIT(0),
1317         .hw.init = &(struct clk_init_data){
1318             .name = "gcc_gpu_snoc_dvm_gfx_clk",
1319             .ops = &clk_branch2_ops,
1320         },
1321     },
1322 };
1323 
1324 static struct clk_branch gcc_npu_axi_clk = {
1325     .halt_reg = 0x4c008,
1326     .halt_check = BRANCH_VOTED,
1327     .hwcg_reg = 0x4c008,
1328     .hwcg_bit = 1,
1329     .clkr = {
1330         .enable_reg = 0x4c008,
1331         .enable_mask = BIT(0),
1332         .hw.init = &(struct clk_init_data){
1333             .name = "gcc_npu_axi_clk",
1334             .ops = &clk_branch2_ops,
1335         },
1336     },
1337 };
1338 
1339 static struct clk_branch gcc_npu_bwmon_axi_clk = {
1340     .halt_reg = 0x4d004,
1341     .halt_check = BRANCH_HALT_DELAY,
1342     .hwcg_reg = 0x4d004,
1343     .hwcg_bit = 1,
1344     .clkr = {
1345         .enable_reg = 0x4d004,
1346         .enable_mask = BIT(0),
1347         .hw.init = &(struct clk_init_data){
1348             .name = "gcc_npu_bwmon_axi_clk",
1349             .ops = &clk_branch2_ops,
1350         },
1351     },
1352 };
1353 
1354 static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = {
1355     .halt_reg = 0x4d008,
1356     .halt_check = BRANCH_HALT,
1357     .clkr = {
1358         .enable_reg = 0x4d008,
1359         .enable_mask = BIT(0),
1360         .hw.init = &(struct clk_init_data){
1361             .name = "gcc_npu_bwmon_dma_cfg_ahb_clk",
1362             .ops = &clk_branch2_ops,
1363         },
1364     },
1365 };
1366 
1367 static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = {
1368     .halt_reg = 0x4d00c,
1369     .halt_check = BRANCH_HALT,
1370     .clkr = {
1371         .enable_reg = 0x4d00c,
1372         .enable_mask = BIT(0),
1373         .hw.init = &(struct clk_init_data){
1374             .name = "gcc_npu_bwmon_dsp_cfg_ahb_clk",
1375             .ops = &clk_branch2_ops,
1376         },
1377     },
1378 };
1379 
1380 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1381     .halt_reg = 0x4c004,
1382     .halt_check = BRANCH_HALT,
1383     .hwcg_reg = 0x4c004,
1384     .hwcg_bit = 1,
1385     .clkr = {
1386         .enable_reg = 0x4c004,
1387         .enable_mask = BIT(0),
1388         .hw.init = &(struct clk_init_data){
1389             .name = "gcc_npu_cfg_ahb_clk",
1390             .flags = CLK_IS_CRITICAL,
1391             .ops = &clk_branch2_ops,
1392         },
1393     },
1394 };
1395 
1396 static struct clk_branch gcc_npu_dma_clk = {
1397     .halt_reg = 0x4c140,
1398     .halt_check = BRANCH_VOTED,
1399     .hwcg_reg = 0x4c140,
1400     .hwcg_bit = 1,
1401     .clkr = {
1402         .enable_reg = 0x4c140,
1403         .enable_mask = BIT(0),
1404         .hw.init = &(struct clk_init_data){
1405             .name = "gcc_npu_dma_clk",
1406             .ops = &clk_branch2_ops,
1407         },
1408     },
1409 };
1410 
1411 static struct clk_branch gcc_npu_gpll0_clk = {
1412     .halt_check = BRANCH_HALT_DELAY,
1413     .clkr = {
1414         .enable_reg = 0x52008,
1415         .enable_mask = BIT(9),
1416         .hw.init = &(struct clk_init_data){
1417             .name = "gcc_npu_gpll0_clk",
1418             .parent_hws = (const struct clk_hw*[]){
1419                 &gpll0.clkr.hw,
1420             },
1421             .num_parents = 1,
1422             .ops = &clk_branch2_ops,
1423         },
1424     },
1425 };
1426 
1427 static struct clk_branch gcc_npu_gpll0_div_clk = {
1428     .halt_check = BRANCH_HALT_DELAY,
1429     .clkr = {
1430         .enable_reg = 0x52008,
1431         .enable_mask = BIT(10),
1432         .hw.init = &(struct clk_init_data){
1433             .name = "gcc_npu_gpll0_div_clk",
1434             .parent_hws = (const struct clk_hw*[]){
1435                 &gcc_npu_pll0_main_div_clk_src.clkr.hw,
1436             },
1437             .num_parents = 1,
1438             .ops = &clk_branch2_ops,
1439         },
1440     },
1441 };
1442 
1443 static struct clk_branch gcc_pdm2_clk = {
1444     .halt_reg = 0x2300c,
1445     .halt_check = BRANCH_HALT,
1446     .clkr = {
1447         .enable_reg = 0x2300c,
1448         .enable_mask = BIT(0),
1449         .hw.init = &(struct clk_init_data){
1450             .name = "gcc_pdm2_clk",
1451             .parent_hws = (const struct clk_hw*[]){
1452                 &gcc_pdm2_clk_src.clkr.hw,
1453             },
1454             .num_parents = 1,
1455             .flags = CLK_SET_RATE_PARENT,
1456             .ops = &clk_branch2_ops,
1457         },
1458     },
1459 };
1460 
1461 static struct clk_branch gcc_pdm_ahb_clk = {
1462     .halt_reg = 0x23004,
1463     .halt_check = BRANCH_HALT,
1464     .hwcg_reg = 0x23004,
1465     .hwcg_bit = 1,
1466     .clkr = {
1467         .enable_reg = 0x23004,
1468         .enable_mask = BIT(0),
1469         .hw.init = &(struct clk_init_data){
1470             .name = "gcc_pdm_ahb_clk",
1471             .ops = &clk_branch2_ops,
1472         },
1473     },
1474 };
1475 
1476 static struct clk_branch gcc_pdm_xo4_clk = {
1477     .halt_reg = 0x23008,
1478     .halt_check = BRANCH_HALT,
1479     .clkr = {
1480         .enable_reg = 0x23008,
1481         .enable_mask = BIT(0),
1482         .hw.init = &(struct clk_init_data){
1483             .name = "gcc_pdm_xo4_clk",
1484             .ops = &clk_branch2_ops,
1485         },
1486     },
1487 };
1488 
1489 static struct clk_branch gcc_prng_ahb_clk = {
1490     .halt_reg = 0x24004,
1491     .halt_check = BRANCH_HALT_VOTED,
1492     .hwcg_reg = 0x24004,
1493     .hwcg_bit = 1,
1494     .clkr = {
1495         .enable_reg = 0x52000,
1496         .enable_mask = BIT(26),
1497         .hw.init = &(struct clk_init_data){
1498             .name = "gcc_prng_ahb_clk",
1499             .ops = &clk_branch2_ops,
1500         },
1501     },
1502 };
1503 
1504 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1505     .halt_reg = 0x21014,
1506     .halt_check = BRANCH_HALT_VOTED,
1507     .clkr = {
1508         .enable_reg = 0x52000,
1509         .enable_mask = BIT(9),
1510         .hw.init = &(struct clk_init_data){
1511             .name = "gcc_qupv3_wrap0_core_2x_clk",
1512             .ops = &clk_branch2_ops,
1513         },
1514     },
1515 };
1516 
1517 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1518     .halt_reg = 0x2100c,
1519     .halt_check = BRANCH_HALT_VOTED,
1520     .clkr = {
1521         .enable_reg = 0x52000,
1522         .enable_mask = BIT(8),
1523         .hw.init = &(struct clk_init_data){
1524             .name = "gcc_qupv3_wrap0_core_clk",
1525             .ops = &clk_branch2_ops,
1526         },
1527     },
1528 };
1529 
1530 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1531     .halt_reg = 0x21144,
1532     .halt_check = BRANCH_HALT_VOTED,
1533     .clkr = {
1534         .enable_reg = 0x52000,
1535         .enable_mask = BIT(10),
1536         .hw.init = &(struct clk_init_data){
1537             .name = "gcc_qupv3_wrap0_s0_clk",
1538             .parent_hws = (const struct clk_hw*[]){
1539                 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1540             },
1541             .num_parents = 1,
1542             .flags = CLK_SET_RATE_PARENT,
1543             .ops = &clk_branch2_ops,
1544         },
1545     },
1546 };
1547 
1548 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1549     .halt_reg = 0x21274,
1550     .halt_check = BRANCH_HALT_VOTED,
1551     .clkr = {
1552         .enable_reg = 0x52000,
1553         .enable_mask = BIT(11),
1554         .hw.init = &(struct clk_init_data){
1555             .name = "gcc_qupv3_wrap0_s1_clk",
1556             .parent_hws = (const struct clk_hw*[]){
1557                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1558             },
1559             .num_parents = 1,
1560             .flags = CLK_SET_RATE_PARENT,
1561             .ops = &clk_branch2_ops,
1562         },
1563     },
1564 };
1565 
1566 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1567     .halt_reg = 0x213a4,
1568     .halt_check = BRANCH_HALT_VOTED,
1569     .clkr = {
1570         .enable_reg = 0x52000,
1571         .enable_mask = BIT(12),
1572         .hw.init = &(struct clk_init_data){
1573             .name = "gcc_qupv3_wrap0_s2_clk",
1574             .parent_hws = (const struct clk_hw*[]){
1575                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1576             },
1577             .num_parents = 1,
1578             .flags = CLK_SET_RATE_PARENT,
1579             .ops = &clk_branch2_ops,
1580         },
1581     },
1582 };
1583 
1584 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1585     .halt_reg = 0x214d4,
1586     .halt_check = BRANCH_HALT_VOTED,
1587     .clkr = {
1588         .enable_reg = 0x52000,
1589         .enable_mask = BIT(13),
1590         .hw.init = &(struct clk_init_data){
1591             .name = "gcc_qupv3_wrap0_s3_clk",
1592             .parent_hws = (const struct clk_hw*[]){
1593                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1594             },
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_qupv3_wrap0_s4_clk = {
1603     .halt_reg = 0x21604,
1604     .halt_check = BRANCH_HALT_VOTED,
1605     .clkr = {
1606         .enable_reg = 0x52000,
1607         .enable_mask = BIT(14),
1608         .hw.init = &(struct clk_init_data){
1609             .name = "gcc_qupv3_wrap0_s4_clk",
1610             .parent_hws = (const struct clk_hw*[]){
1611                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1612             },
1613             .num_parents = 1,
1614             .flags = CLK_SET_RATE_PARENT,
1615             .ops = &clk_branch2_ops,
1616         },
1617     },
1618 };
1619 
1620 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1621     .halt_reg = 0x21734,
1622     .halt_check = BRANCH_HALT_VOTED,
1623     .clkr = {
1624         .enable_reg = 0x52000,
1625         .enable_mask = BIT(15),
1626         .hw.init = &(struct clk_init_data){
1627             .name = "gcc_qupv3_wrap0_s5_clk",
1628             .parent_hws = (const struct clk_hw*[]){
1629                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1630             },
1631             .num_parents = 1,
1632             .flags = CLK_SET_RATE_PARENT,
1633             .ops = &clk_branch2_ops,
1634         },
1635     },
1636 };
1637 
1638 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1639     .halt_reg = 0x22004,
1640     .halt_check = BRANCH_HALT_VOTED,
1641     .clkr = {
1642         .enable_reg = 0x52000,
1643         .enable_mask = BIT(16),
1644         .hw.init = &(struct clk_init_data){
1645             .name = "gcc_qupv3_wrap1_core_2x_clk",
1646             .ops = &clk_branch2_ops,
1647         },
1648     },
1649 };
1650 
1651 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1652     .halt_reg = 0x22008,
1653     .halt_check = BRANCH_HALT_VOTED,
1654     .clkr = {
1655         .enable_reg = 0x52000,
1656         .enable_mask = BIT(17),
1657         .hw.init = &(struct clk_init_data){
1658             .name = "gcc_qupv3_wrap1_core_clk",
1659             .ops = &clk_branch2_ops,
1660         },
1661     },
1662 };
1663 
1664 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1665     .halt_reg = 0x22014,
1666     .halt_check = BRANCH_HALT_VOTED,
1667     .clkr = {
1668         .enable_reg = 0x52000,
1669         .enable_mask = BIT(20),
1670         .hw.init = &(struct clk_init_data){
1671             .name = "gcc_qupv3_wrap1_s0_clk",
1672             .parent_hws = (const struct clk_hw*[]){
1673                 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1674             },
1675             .num_parents = 1,
1676             .flags = CLK_SET_RATE_PARENT,
1677             .ops = &clk_branch2_ops,
1678         },
1679     },
1680 };
1681 
1682 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1683     .halt_reg = 0x22144,
1684     .halt_check = BRANCH_HALT_VOTED,
1685     .clkr = {
1686         .enable_reg = 0x52000,
1687         .enable_mask = BIT(21),
1688         .hw.init = &(struct clk_init_data){
1689             .name = "gcc_qupv3_wrap1_s1_clk",
1690             .parent_hws = (const struct clk_hw*[]){
1691                 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1692             },
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_qupv3_wrap1_s2_clk = {
1701     .halt_reg = 0x22274,
1702     .halt_check = BRANCH_HALT_VOTED,
1703     .clkr = {
1704         .enable_reg = 0x52000,
1705         .enable_mask = BIT(22),
1706         .hw.init = &(struct clk_init_data){
1707             .name = "gcc_qupv3_wrap1_s2_clk",
1708             .parent_hws = (const struct clk_hw*[]){
1709                 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1710             },
1711             .num_parents = 1,
1712             .flags = CLK_SET_RATE_PARENT,
1713             .ops = &clk_branch2_ops,
1714         },
1715     },
1716 };
1717 
1718 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1719     .halt_reg = 0x223a4,
1720     .halt_check = BRANCH_HALT_VOTED,
1721     .clkr = {
1722         .enable_reg = 0x52000,
1723         .enable_mask = BIT(23),
1724         .hw.init = &(struct clk_init_data){
1725             .name = "gcc_qupv3_wrap1_s3_clk",
1726             .parent_hws = (const struct clk_hw*[]){
1727                 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1728             },
1729             .num_parents = 1,
1730             .flags = CLK_SET_RATE_PARENT,
1731             .ops = &clk_branch2_ops,
1732         },
1733     },
1734 };
1735 
1736 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1737     .halt_reg = 0x224d4,
1738     .halt_check = BRANCH_HALT_VOTED,
1739     .clkr = {
1740         .enable_reg = 0x52000,
1741         .enable_mask = BIT(24),
1742         .hw.init = &(struct clk_init_data){
1743             .name = "gcc_qupv3_wrap1_s4_clk",
1744             .parent_hws = (const struct clk_hw*[]){
1745                 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1746             },
1747             .num_parents = 1,
1748             .flags = CLK_SET_RATE_PARENT,
1749             .ops = &clk_branch2_ops,
1750         },
1751     },
1752 };
1753 
1754 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1755     .halt_reg = 0x22604,
1756     .halt_check = BRANCH_HALT_VOTED,
1757     .clkr = {
1758         .enable_reg = 0x52000,
1759         .enable_mask = BIT(25),
1760         .hw.init = &(struct clk_init_data){
1761             .name = "gcc_qupv3_wrap1_s5_clk",
1762             .parent_hws = (const struct clk_hw*[]){
1763                 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1764             },
1765             .num_parents = 1,
1766             .flags = CLK_SET_RATE_PARENT,
1767             .ops = &clk_branch2_ops,
1768         },
1769     },
1770 };
1771 
1772 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1773     .halt_reg = 0x21004,
1774     .halt_check = BRANCH_HALT_VOTED,
1775     .hwcg_reg = 0x21004,
1776     .hwcg_bit = 1,
1777     .clkr = {
1778         .enable_reg = 0x52000,
1779         .enable_mask = BIT(6),
1780         .hw.init = &(struct clk_init_data){
1781             .name = "gcc_qupv3_wrap_0_m_ahb_clk",
1782             .ops = &clk_branch2_ops,
1783         },
1784     },
1785 };
1786 
1787 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
1788     .halt_reg = 0x21008,
1789     .halt_check = BRANCH_HALT_VOTED,
1790     .hwcg_reg = 0x21008,
1791     .hwcg_bit = 1,
1792     .clkr = {
1793         .enable_reg = 0x52000,
1794         .enable_mask = BIT(7),
1795         .hw.init = &(struct clk_init_data){
1796             .name = "gcc_qupv3_wrap_0_s_ahb_clk",
1797             .ops = &clk_branch2_ops,
1798         },
1799     },
1800 };
1801 
1802 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
1803     .halt_reg = 0x2200c,
1804     .halt_check = BRANCH_HALT_VOTED,
1805     .hwcg_reg = 0x2200c,
1806     .hwcg_bit = 1,
1807     .clkr = {
1808         .enable_reg = 0x52000,
1809         .enable_mask = BIT(18),
1810         .hw.init = &(struct clk_init_data){
1811             .name = "gcc_qupv3_wrap_1_m_ahb_clk",
1812             .ops = &clk_branch2_ops,
1813         },
1814     },
1815 };
1816 
1817 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
1818     .halt_reg = 0x22010,
1819     .halt_check = BRANCH_HALT_VOTED,
1820     .hwcg_reg = 0x22010,
1821     .hwcg_bit = 1,
1822     .clkr = {
1823         .enable_reg = 0x52000,
1824         .enable_mask = BIT(19),
1825         .hw.init = &(struct clk_init_data){
1826             .name = "gcc_qupv3_wrap_1_s_ahb_clk",
1827             .ops = &clk_branch2_ops,
1828         },
1829     },
1830 };
1831 
1832 static struct clk_branch gcc_sdcc1_ahb_clk = {
1833     .halt_reg = 0x4b004,
1834     .halt_check = BRANCH_HALT,
1835     .clkr = {
1836         .enable_reg = 0x4b004,
1837         .enable_mask = BIT(0),
1838         .hw.init = &(struct clk_init_data){
1839             .name = "gcc_sdcc1_ahb_clk",
1840             .ops = &clk_branch2_ops,
1841         },
1842     },
1843 };
1844 
1845 static struct clk_branch gcc_sdcc1_apps_clk = {
1846     .halt_reg = 0x4b008,
1847     .halt_check = BRANCH_HALT,
1848     .clkr = {
1849         .enable_reg = 0x4b008,
1850         .enable_mask = BIT(0),
1851         .hw.init = &(struct clk_init_data){
1852             .name = "gcc_sdcc1_apps_clk",
1853             .parent_hws = (const struct clk_hw*[]){
1854                 &gcc_sdcc1_apps_clk_src.clkr.hw,
1855             },
1856             .num_parents = 1,
1857             .flags = CLK_SET_RATE_PARENT,
1858             .ops = &clk_branch2_ops,
1859         },
1860     },
1861 };
1862 
1863 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1864     .halt_reg = 0x4b03c,
1865     .halt_check = BRANCH_HALT,
1866     .hwcg_reg = 0x4b03c,
1867     .hwcg_bit = 1,
1868     .clkr = {
1869         .enable_reg = 0x4b03c,
1870         .enable_mask = BIT(0),
1871         .hw.init = &(struct clk_init_data){
1872             .name = "gcc_sdcc1_ice_core_clk",
1873             .parent_hws = (const struct clk_hw*[]){
1874                 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
1875             },
1876             .num_parents = 1,
1877             .flags = CLK_SET_RATE_PARENT,
1878             .ops = &clk_branch2_ops,
1879         },
1880     },
1881 };
1882 
1883 static struct clk_branch gcc_sdcc2_ahb_clk = {
1884     .halt_reg = 0x20008,
1885     .halt_check = BRANCH_HALT,
1886     .clkr = {
1887         .enable_reg = 0x20008,
1888         .enable_mask = BIT(0),
1889         .hw.init = &(struct clk_init_data){
1890             .name = "gcc_sdcc2_ahb_clk",
1891             .ops = &clk_branch2_ops,
1892         },
1893     },
1894 };
1895 
1896 static struct clk_branch gcc_sdcc2_apps_clk = {
1897     .halt_reg = 0x20004,
1898     .halt_check = BRANCH_HALT,
1899     .clkr = {
1900         .enable_reg = 0x20004,
1901         .enable_mask = BIT(0),
1902         .hw.init = &(struct clk_init_data){
1903             .name = "gcc_sdcc2_apps_clk",
1904             .parent_hws = (const struct clk_hw*[]){
1905                 &gcc_sdcc2_apps_clk_src.clkr.hw,
1906             },
1907             .num_parents = 1,
1908             .flags = CLK_SET_RATE_PARENT,
1909             .ops = &clk_branch2_ops,
1910         },
1911     },
1912 };
1913 
1914 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
1915     .halt_reg = 0x10140,
1916     .halt_check = BRANCH_HALT_VOTED,
1917     .hwcg_reg = 0x10140,
1918     .hwcg_bit = 1,
1919     .clkr = {
1920         .enable_reg = 0x52000,
1921         .enable_mask = BIT(0),
1922         .hw.init = &(struct clk_init_data){
1923             .name = "gcc_sys_noc_cpuss_ahb_clk",
1924             .parent_hws = (const struct clk_hw*[]){
1925                 &gcc_cpuss_ahb_clk_src.clkr.hw,
1926             },
1927             .num_parents = 1,
1928             .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1929             .ops = &clk_branch2_ops,
1930         },
1931     },
1932 };
1933 
1934 static struct clk_branch gcc_ufs_mem_clkref_clk = {
1935     .halt_reg = 0x8c000,
1936     .halt_check = BRANCH_HALT,
1937     .clkr = {
1938         .enable_reg = 0x8c000,
1939         .enable_mask = BIT(0),
1940         .hw.init = &(struct clk_init_data){
1941             .name = "gcc_ufs_mem_clkref_clk",
1942             .ops = &clk_branch2_ops,
1943         },
1944     },
1945 };
1946 
1947 static struct clk_branch gcc_ufs_phy_ahb_clk = {
1948     .halt_reg = 0x3a00c,
1949     .halt_check = BRANCH_HALT,
1950     .hwcg_reg = 0x3a00c,
1951     .hwcg_bit = 1,
1952     .clkr = {
1953         .enable_reg = 0x3a00c,
1954         .enable_mask = BIT(0),
1955         .hw.init = &(struct clk_init_data){
1956             .name = "gcc_ufs_phy_ahb_clk",
1957             .ops = &clk_branch2_ops,
1958         },
1959     },
1960 };
1961 
1962 static struct clk_branch gcc_ufs_phy_axi_clk = {
1963     .halt_reg = 0x3a034,
1964     .halt_check = BRANCH_HALT,
1965     .hwcg_reg = 0x3a034,
1966     .hwcg_bit = 1,
1967     .clkr = {
1968         .enable_reg = 0x3a034,
1969         .enable_mask = BIT(0),
1970         .hw.init = &(struct clk_init_data){
1971             .name = "gcc_ufs_phy_axi_clk",
1972             .parent_hws = (const struct clk_hw*[]){
1973                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1974             },
1975             .num_parents = 1,
1976             .flags = CLK_SET_RATE_PARENT,
1977             .ops = &clk_branch2_ops,
1978         },
1979     },
1980 };
1981 
1982 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
1983     .halt_reg = 0x3a0a4,
1984     .halt_check = BRANCH_HALT,
1985     .hwcg_reg = 0x3a0a4,
1986     .hwcg_bit = 1,
1987     .clkr = {
1988         .enable_reg = 0x3a0a4,
1989         .enable_mask = BIT(0),
1990         .hw.init = &(struct clk_init_data){
1991             .name = "gcc_ufs_phy_ice_core_clk",
1992             .parent_hws = (const struct clk_hw*[]){
1993                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
1994             },
1995             .num_parents = 1,
1996             .flags = CLK_SET_RATE_PARENT,
1997             .ops = &clk_branch2_ops,
1998         },
1999     },
2000 };
2001 
2002 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2003     .halt_reg = 0x3a0a4,
2004     .halt_check = BRANCH_HALT,
2005     .hwcg_reg = 0x3a0a4,
2006     .hwcg_bit = 1,
2007     .clkr = {
2008         .enable_reg = 0x3a0a4,
2009         .enable_mask = BIT(1),
2010         .hw.init = &(struct clk_init_data){
2011             .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2012             .parent_hws = (const struct clk_hw*[]){
2013                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2014             },
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_ufs_phy_phy_aux_clk = {
2023     .halt_reg = 0x3a0ac,
2024     .halt_check = BRANCH_HALT,
2025     .hwcg_reg = 0x3a0ac,
2026     .hwcg_bit = 1,
2027     .clkr = {
2028         .enable_reg = 0x3a0ac,
2029         .enable_mask = BIT(0),
2030         .hw.init = &(struct clk_init_data){
2031             .name = "gcc_ufs_phy_phy_aux_clk",
2032             .parent_hws = (const struct clk_hw*[]){
2033                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2034             },
2035             .num_parents = 1,
2036             .flags = CLK_SET_RATE_PARENT,
2037             .ops = &clk_branch2_ops,
2038         },
2039     },
2040 };
2041 
2042 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2043     .halt_reg = 0x3a0ac,
2044     .halt_check = BRANCH_HALT,
2045     .hwcg_reg = 0x3a0ac,
2046     .hwcg_bit = 1,
2047     .clkr = {
2048         .enable_reg = 0x3a0ac,
2049         .enable_mask = BIT(1),
2050         .hw.init = &(struct clk_init_data){
2051             .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2052             .parent_hws = (const struct clk_hw*[]){
2053                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2054             },
2055             .num_parents = 1,
2056             .flags = CLK_SET_RATE_PARENT,
2057             .ops = &clk_branch2_ops,
2058         },
2059     },
2060 };
2061 
2062 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2063     .halt_reg = 0x3a014,
2064     .halt_check = BRANCH_HALT_SKIP,
2065     .clkr = {
2066         .enable_reg = 0x3a014,
2067         .enable_mask = BIT(0),
2068         .hw.init = &(struct clk_init_data){
2069             .name = "gcc_ufs_phy_rx_symbol_0_clk",
2070             .ops = &clk_branch2_ops,
2071         },
2072     },
2073 };
2074 
2075 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2076     .halt_reg = 0x3a018,
2077     .halt_check = BRANCH_HALT_SKIP,
2078     .clkr = {
2079         .enable_reg = 0x3a018,
2080         .enable_mask = BIT(0),
2081         .hw.init = &(struct clk_init_data){
2082             .name = "gcc_ufs_phy_rx_symbol_1_clk",
2083             .ops = &clk_branch2_ops,
2084         },
2085     },
2086 };
2087 
2088 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2089     .halt_reg = 0x3a010,
2090     .halt_check = BRANCH_HALT_SKIP,
2091     .clkr = {
2092         .enable_reg = 0x3a010,
2093         .enable_mask = BIT(0),
2094         .hw.init = &(struct clk_init_data){
2095             .name = "gcc_ufs_phy_tx_symbol_0_clk",
2096             .ops = &clk_branch2_ops,
2097         },
2098     },
2099 };
2100 
2101 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2102     .halt_reg = 0x3a09c,
2103     .halt_check = BRANCH_HALT,
2104     .hwcg_reg = 0x3a09c,
2105     .hwcg_bit = 1,
2106     .clkr = {
2107         .enable_reg = 0x3a09c,
2108         .enable_mask = BIT(0),
2109         .hw.init = &(struct clk_init_data){
2110             .name = "gcc_ufs_phy_unipro_core_clk",
2111             .parent_hws = (const struct clk_hw*[]){
2112                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2113             },
2114             .num_parents = 1,
2115             .flags = CLK_SET_RATE_PARENT,
2116             .ops = &clk_branch2_ops,
2117         },
2118     },
2119 };
2120 
2121 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2122     .halt_reg = 0x3a09c,
2123     .halt_check = BRANCH_HALT,
2124     .hwcg_reg = 0x3a09c,
2125     .hwcg_bit = 1,
2126     .clkr = {
2127         .enable_reg = 0x3a09c,
2128         .enable_mask = BIT(1),
2129         .hw.init = &(struct clk_init_data){
2130             .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2131             .parent_hws = (const struct clk_hw*[]){
2132                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2133             },
2134             .num_parents = 1,
2135             .flags = CLK_SET_RATE_PARENT,
2136             .ops = &clk_branch2_ops,
2137         },
2138     },
2139 };
2140 
2141 static struct clk_branch gcc_usb30_prim_master_clk = {
2142     .halt_reg = 0x1a00c,
2143     .halt_check = BRANCH_HALT,
2144     .clkr = {
2145         .enable_reg = 0x1a00c,
2146         .enable_mask = BIT(0),
2147         .hw.init = &(struct clk_init_data){
2148             .name = "gcc_usb30_prim_master_clk",
2149             .parent_hws = (const struct clk_hw*[]){
2150                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2151             },
2152             .num_parents = 1,
2153             .flags = CLK_SET_RATE_PARENT,
2154             .ops = &clk_branch2_ops,
2155         },
2156     },
2157 };
2158 
2159 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2160     .halt_reg = 0x1a018,
2161     .halt_check = BRANCH_HALT,
2162     .clkr = {
2163         .enable_reg = 0x1a018,
2164         .enable_mask = BIT(0),
2165         .hw.init = &(struct clk_init_data){
2166             .name = "gcc_usb30_prim_mock_utmi_clk",
2167             .parent_hws = (const struct clk_hw*[]){
2168                 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2169             },
2170             .num_parents = 1,
2171             .flags = CLK_SET_RATE_PARENT,
2172             .ops = &clk_branch2_ops,
2173         },
2174     },
2175 };
2176 
2177 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2178     .halt_reg = 0x1a014,
2179     .halt_check = BRANCH_HALT,
2180     .clkr = {
2181         .enable_reg = 0x1a014,
2182         .enable_mask = BIT(0),
2183         .hw.init = &(struct clk_init_data){
2184             .name = "gcc_usb30_prim_sleep_clk",
2185             .ops = &clk_branch2_ops,
2186         },
2187     },
2188 };
2189 
2190 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2191     .halt_reg = 0x8c010,
2192     .halt_check = BRANCH_HALT,
2193     .clkr = {
2194         .enable_reg = 0x8c010,
2195         .enable_mask = BIT(0),
2196         .hw.init = &(struct clk_init_data){
2197             .name = "gcc_usb3_prim_clkref_clk",
2198             .ops = &clk_branch2_ops,
2199         },
2200     },
2201 };
2202 
2203 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2204     .halt_reg = 0x1a050,
2205     .halt_check = BRANCH_HALT,
2206     .clkr = {
2207         .enable_reg = 0x1a050,
2208         .enable_mask = BIT(0),
2209         .hw.init = &(struct clk_init_data){
2210             .name = "gcc_usb3_prim_phy_aux_clk",
2211             .parent_hws = (const struct clk_hw*[]){
2212                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2213             },
2214             .num_parents = 1,
2215             .flags = CLK_SET_RATE_PARENT,
2216             .ops = &clk_branch2_ops,
2217         },
2218     },
2219 };
2220 
2221 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2222     .halt_reg = 0x1a054,
2223     .halt_check = BRANCH_HALT,
2224     .clkr = {
2225         .enable_reg = 0x1a054,
2226         .enable_mask = BIT(0),
2227         .hw.init = &(struct clk_init_data){
2228             .name = "gcc_usb3_prim_phy_com_aux_clk",
2229             .parent_hws = (const struct clk_hw*[]){
2230                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2231             },
2232             .num_parents = 1,
2233             .flags = CLK_SET_RATE_PARENT,
2234             .ops = &clk_branch2_ops,
2235         },
2236     },
2237 };
2238 
2239 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2240     .halt_reg = 0x1a058,
2241     .halt_check = BRANCH_HALT_SKIP,
2242     .hwcg_reg = 0x1a058,
2243     .hwcg_bit = 1,
2244     .clkr = {
2245         .enable_reg = 0x1a058,
2246         .enable_mask = BIT(0),
2247         .hw.init = &(struct clk_init_data){
2248             .name = "gcc_usb3_prim_phy_pipe_clk",
2249             .ops = &clk_branch2_ops,
2250         },
2251     },
2252 };
2253 
2254 static struct clk_branch gcc_video_ahb_clk = {
2255     .halt_reg = 0x17004,
2256     .halt_check = BRANCH_HALT,
2257     .hwcg_reg = 0x17004,
2258     .hwcg_bit = 1,
2259     .clkr = {
2260         .enable_reg = 0x17004,
2261         .enable_mask = BIT(0),
2262         .hw.init = &(struct clk_init_data){
2263             .name = "gcc_video_ahb_clk",
2264             .flags = CLK_IS_CRITICAL,
2265             .ops = &clk_branch2_ops,
2266         },
2267     },
2268 };
2269 
2270 static struct clk_branch gcc_video_axi_clk = {
2271     .halt_reg = 0x17014,
2272     .halt_check = BRANCH_HALT,
2273     .hwcg_reg = 0x17014,
2274     .hwcg_bit = 1,
2275     .clkr = {
2276         .enable_reg = 0x17014,
2277         .enable_mask = BIT(0),
2278         .hw.init = &(struct clk_init_data){
2279             .name = "gcc_video_axi_clk",
2280             .ops = &clk_branch2_ops,
2281         },
2282     },
2283 };
2284 
2285 static struct clk_branch gcc_video_throttle_axi_clk = {
2286     .halt_reg = 0x17020,
2287     .halt_check = BRANCH_HALT,
2288     .hwcg_reg = 0x17020,
2289     .hwcg_bit = 1,
2290     .clkr = {
2291         .enable_reg = 0x17020,
2292         .enable_mask = BIT(0),
2293         .hw.init = &(struct clk_init_data){
2294             .name = "gcc_video_throttle_axi_clk",
2295             .ops = &clk_branch2_ops,
2296         },
2297     },
2298 };
2299 
2300 static struct clk_branch gcc_video_xo_clk = {
2301     .halt_reg = 0x1702c,
2302     .halt_check = BRANCH_HALT,
2303     .clkr = {
2304         .enable_reg = 0x1702c,
2305         .enable_mask = BIT(0),
2306         .hw.init = &(struct clk_init_data){
2307             .name = "gcc_video_xo_clk",
2308             .flags = CLK_IS_CRITICAL,
2309             .ops = &clk_branch2_ops,
2310         },
2311     },
2312 };
2313 
2314 static struct gdsc usb30_prim_gdsc = {
2315     .gdscr = 0x1a004,
2316     .pd = {
2317         .name = "usb30_prim_gdsc",
2318     },
2319     .pwrsts = PWRSTS_OFF_ON,
2320 };
2321 
2322 static struct gdsc ufs_phy_gdsc = {
2323     .gdscr = 0x3a004,
2324     .pd = {
2325         .name = "ufs_phy_gdsc",
2326     },
2327     .pwrsts = PWRSTS_OFF_ON,
2328 };
2329 
2330 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2331     .gdscr = 0xb7040,
2332     .pd = {
2333         .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2334     },
2335     .pwrsts = PWRSTS_OFF_ON,
2336     .flags = VOTABLE,
2337 };
2338 
2339 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2340     .gdscr = 0xb7044,
2341     .pd = {
2342         .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2343     },
2344     .pwrsts = PWRSTS_OFF_ON,
2345     .flags = VOTABLE,
2346 };
2347 
2348 static struct clk_regmap *gcc_sm6350_clocks[] = {
2349     [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2350     [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2351     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2352     [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
2353     [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
2354     [GCC_CAMERA_THROTTLE_NRT_AXI_CLK] =
2355         &gcc_camera_throttle_nrt_axi_clk.clkr,
2356     [GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr,
2357     [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
2358     [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2359     [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2360     [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2361     [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2362     [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2363     [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2364     [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
2365     [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2366     [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2367     [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
2368     [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
2369     [GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr,
2370     [GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr,
2371     [GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr,
2372     [GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr,
2373     [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
2374     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2375     [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2376     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2377     [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2378     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2379     [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2380     [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2381     [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2382     [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2383     [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2384     [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2385     [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2386     [GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr,
2387     [GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr,
2388     [GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr,
2389     [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2390     [GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr,
2391     [GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr,
2392     [GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr,
2393     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2394     [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2395     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2396     [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2397     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2398     [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2399     [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2400     [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2401     [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2402     [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2403     [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2404     [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2405     [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2406     [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2407     [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2408     [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2409     [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2410     [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2411     [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2412     [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2413     [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2414     [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2415     [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2416     [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2417     [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2418     [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2419     [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2420     [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2421     [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2422     [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2423     [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2424     [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2425     [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2426     [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2427     [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2428     [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2429     [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2430     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2431     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2432     [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2433     [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2434     [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2435     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2436     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2437     [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2438     [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2439     [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2440     [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2441     [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2442     [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2443     [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2444     [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2445     [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2446     [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2447     [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2448     [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
2449     [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2450     [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2451     [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2452         &gcc_ufs_phy_unipro_core_clk_src.clkr,
2453     [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2454     [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2455     [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2456     [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2457         &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2458     [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2459     [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2460     [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2461     [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2462     [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2463     [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2464     [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
2465     [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2466     [GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr,
2467     [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
2468     [GPLL0] = &gpll0.clkr,
2469     [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2470     [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
2471     [GPLL6] = &gpll6.clkr,
2472     [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,
2473     [GPLL7] = &gpll7.clkr,
2474     [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2475     [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2476     [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2477                 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2478     [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2479                 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2480     [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2481                 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2482     [GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr,
2483     [GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr,
2484 };
2485 
2486 static struct gdsc *gcc_sm6350_gdscs[] = {
2487     [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2488     [UFS_PHY_GDSC] = &ufs_phy_gdsc,
2489     [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2490     [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2491 };
2492 
2493 static const struct qcom_reset_map gcc_sm6350_resets[] = {
2494     [GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 },
2495     [GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 },
2496     [GCC_SDCC1_BCR] = { 0x4b000 },
2497     [GCC_SDCC2_BCR] = { 0x20000 },
2498     [GCC_UFS_PHY_BCR] = { 0x3a000 },
2499     [GCC_USB30_PRIM_BCR] = { 0x1a000 },
2500     [GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 },
2501     [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 },
2502 };
2503 
2504 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2505     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2506     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2507     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2508     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2509     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2510     DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2511     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2512     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2513     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2514     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2515     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2516     DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2517 };
2518 
2519 static const struct regmap_config gcc_sm6350_regmap_config = {
2520     .reg_bits = 32,
2521     .reg_stride = 4,
2522     .val_bits = 32,
2523     .max_register = 0xbf030,
2524     .fast_io = true,
2525 };
2526 
2527 static const struct qcom_cc_desc gcc_sm6350_desc = {
2528     .config = &gcc_sm6350_regmap_config,
2529     .clks = gcc_sm6350_clocks,
2530     .num_clks = ARRAY_SIZE(gcc_sm6350_clocks),
2531     .resets = gcc_sm6350_resets,
2532     .num_resets = ARRAY_SIZE(gcc_sm6350_resets),
2533     .gdscs = gcc_sm6350_gdscs,
2534     .num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs),
2535 };
2536 
2537 static const struct of_device_id gcc_sm6350_match_table[] = {
2538     { .compatible = "qcom,gcc-sm6350" },
2539     { }
2540 };
2541 MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table);
2542 
2543 static int gcc_sm6350_probe(struct platform_device *pdev)
2544 {
2545     struct regmap *regmap;
2546     int ret;
2547 
2548     regmap = qcom_cc_map(pdev, &gcc_sm6350_desc);
2549     if (IS_ERR(regmap))
2550         return PTR_ERR(regmap);
2551 
2552     /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
2553     regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3);
2554     regmap_update_bits(regmap, 0x45f00, 0x3, 0x3);
2555 
2556     ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2557             ARRAY_SIZE(gcc_dfs_clocks));
2558     if (ret)
2559         return ret;
2560 
2561     return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);
2562 }
2563 
2564 static struct platform_driver gcc_sm6350_driver = {
2565     .probe = gcc_sm6350_probe,
2566     .driver = {
2567         .name = "gcc-sm6350",
2568         .of_match_table = gcc_sm6350_match_table,
2569     },
2570 };
2571 
2572 static int __init gcc_sm6350_init(void)
2573 {
2574     return platform_driver_register(&gcc_sm6350_driver);
2575 }
2576 core_initcall(gcc_sm6350_init);
2577 
2578 static void __exit gcc_sm6350_exit(void)
2579 {
2580     platform_driver_unregister(&gcc_sm6350_driver);
2581 }
2582 module_exit(gcc_sm6350_exit);
2583 
2584 MODULE_DESCRIPTION("QTI GCC SM6350 Driver");
2585 MODULE_LICENSE("GPL v2");