Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
0004  * Copyright (c) 2018, Craig Tatlor.
0005  */
0006 
0007 #include <linux/kernel.h>
0008 #include <linux/bitops.h>
0009 #include <linux/err.h>
0010 #include <linux/platform_device.h>
0011 #include <linux/module.h>
0012 #include <linux/of.h>
0013 #include <linux/of_device.h>
0014 #include <linux/clk-provider.h>
0015 #include <linux/regmap.h>
0016 #include <linux/reset-controller.h>
0017 
0018 #include <dt-bindings/clock/qcom,gcc-sdm660.h>
0019 
0020 #include "common.h"
0021 #include "clk-regmap.h"
0022 #include "clk-alpha-pll.h"
0023 #include "clk-rcg.h"
0024 #include "clk-branch.h"
0025 #include "reset.h"
0026 #include "gdsc.h"
0027 
0028 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
0029 
0030 enum {
0031     P_XO,
0032     P_SLEEP_CLK,
0033     P_GPLL0,
0034     P_GPLL1,
0035     P_GPLL4,
0036     P_GPLL0_EARLY_DIV,
0037     P_GPLL1_EARLY_DIV,
0038 };
0039 
0040 static struct clk_fixed_factor xo = {
0041     .mult = 1,
0042     .div = 1,
0043     .hw.init = &(struct clk_init_data){
0044         .name = "xo",
0045         .parent_data = &(const struct clk_parent_data) {
0046             .fw_name = "xo"
0047         },
0048         .num_parents = 1,
0049         .ops = &clk_fixed_factor_ops,
0050     },
0051 };
0052 
0053 static struct clk_alpha_pll gpll0_early = {
0054     .offset = 0x0,
0055     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0056     .clkr = {
0057         .enable_reg = 0x52000,
0058         .enable_mask = BIT(0),
0059         .hw.init = &(struct clk_init_data){
0060             .name = "gpll0_early",
0061             .parent_data = &(const struct clk_parent_data){
0062                 .fw_name = "xo",
0063             },
0064             .num_parents = 1,
0065             .ops = &clk_alpha_pll_ops,
0066         },
0067     },
0068 };
0069 
0070 static struct clk_fixed_factor gpll0_early_div = {
0071     .mult = 1,
0072     .div = 2,
0073     .hw.init = &(struct clk_init_data){
0074         .name = "gpll0_early_div",
0075         .parent_hws = (const struct clk_hw*[]){
0076             &gpll0_early.clkr.hw,
0077         },
0078         .num_parents = 1,
0079         .ops = &clk_fixed_factor_ops,
0080     },
0081 };
0082 
0083 static struct clk_alpha_pll_postdiv gpll0 = {
0084     .offset = 0x00000,
0085     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0086     .clkr.hw.init = &(struct clk_init_data){
0087         .name = "gpll0",
0088         .parent_hws = (const struct clk_hw*[]){
0089             &gpll0_early.clkr.hw,
0090         },
0091         .num_parents = 1,
0092         .ops = &clk_alpha_pll_postdiv_ops,
0093     },
0094 };
0095 
0096 static struct clk_alpha_pll gpll1_early = {
0097     .offset = 0x1000,
0098     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0099     .clkr = {
0100         .enable_reg = 0x52000,
0101         .enable_mask = BIT(1),
0102         .hw.init = &(struct clk_init_data){
0103             .name = "gpll1_early",
0104             .parent_data = &(const struct clk_parent_data){
0105                 .fw_name = "xo",
0106             },
0107             .num_parents = 1,
0108             .ops = &clk_alpha_pll_ops,
0109         },
0110     },
0111 };
0112 
0113 static struct clk_fixed_factor gpll1_early_div = {
0114     .mult = 1,
0115     .div = 2,
0116     .hw.init = &(struct clk_init_data){
0117         .name = "gpll1_early_div",
0118         .parent_hws = (const struct clk_hw*[]){
0119             &gpll1_early.clkr.hw,
0120         },
0121         .num_parents = 1,
0122         .ops = &clk_fixed_factor_ops,
0123     },
0124 };
0125 
0126 static struct clk_alpha_pll_postdiv gpll1 = {
0127     .offset = 0x1000,
0128     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0129     .clkr.hw.init = &(struct clk_init_data){
0130         .name = "gpll1",
0131         .parent_hws = (const struct clk_hw*[]){
0132             &gpll1_early.clkr.hw,
0133         },
0134         .num_parents = 1,
0135         .ops = &clk_alpha_pll_postdiv_ops,
0136     },
0137 };
0138 
0139 static struct clk_alpha_pll gpll4_early = {
0140     .offset = 0x77000,
0141     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0142     .clkr = {
0143         .enable_reg = 0x52000,
0144         .enable_mask = BIT(4),
0145         .hw.init = &(struct clk_init_data){
0146             .name = "gpll4_early",
0147             .parent_data = &(const struct clk_parent_data){
0148                 .fw_name = "xo",
0149             },
0150             .num_parents = 1,
0151             .ops = &clk_alpha_pll_ops,
0152         },
0153     },
0154 };
0155 
0156 static struct clk_alpha_pll_postdiv gpll4 = {
0157     .offset = 0x77000,
0158     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
0159     .clkr.hw.init = &(struct clk_init_data)
0160     {
0161         .name = "gpll4",
0162         .parent_hws = (const struct clk_hw*[]){
0163             &gpll4_early.clkr.hw,
0164         },
0165         .num_parents = 1,
0166         .ops = &clk_alpha_pll_postdiv_ops,
0167     },
0168 };
0169 
0170 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = {
0171     { P_XO, 0 },
0172     { P_GPLL0, 1 },
0173     { P_GPLL0_EARLY_DIV, 6 },
0174 };
0175 
0176 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div[] = {
0177     { .fw_name = "xo" },
0178     { .hw = &gpll0.clkr.hw },
0179     { .hw = &gpll0_early_div.hw },
0180 };
0181 
0182 static const struct parent_map gcc_parent_map_xo_gpll0[] = {
0183     { P_XO, 0 },
0184     { P_GPLL0, 1 },
0185 };
0186 
0187 static const struct clk_parent_data gcc_parent_data_xo_gpll0[] = {
0188     { .fw_name = "xo" },
0189     { .hw = &gpll0.clkr.hw },
0190 };
0191 
0192 static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = {
0193     { P_XO, 0 },
0194     { P_GPLL0, 1 },
0195     { P_SLEEP_CLK, 5 },
0196     { P_GPLL0_EARLY_DIV, 6 },
0197 };
0198 
0199 static const struct clk_parent_data gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div[] = {
0200     { .fw_name = "xo" },
0201     { .hw = &gpll0.clkr.hw },
0202     { .fw_name = "sleep_clk" },
0203     { .hw = &gpll0_early_div.hw },
0204 };
0205 
0206 static const struct parent_map gcc_parent_map_xo_sleep_clk[] = {
0207     { P_XO, 0 },
0208     { P_SLEEP_CLK, 5 },
0209 };
0210 
0211 static const struct clk_parent_data gcc_parent_data_xo_sleep_clk[] = {
0212     { .fw_name = "xo" },
0213     { .fw_name = "sleep_clk" },
0214 };
0215 
0216 static const struct parent_map gcc_parent_map_xo_gpll4[] = {
0217     { P_XO, 0 },
0218     { P_GPLL4, 5 },
0219 };
0220 
0221 static const struct clk_parent_data gcc_parent_data_xo_gpll4[] = {
0222     { .fw_name = "xo" },
0223     { .hw = &gpll4.clkr.hw },
0224 };
0225 
0226 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
0227     { P_XO, 0 },
0228     { P_GPLL0, 1 },
0229     { P_GPLL0_EARLY_DIV, 3 },
0230     { P_GPLL1, 4 },
0231     { P_GPLL4, 5 },
0232     { P_GPLL1_EARLY_DIV, 6 },
0233 };
0234 
0235 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
0236     { .fw_name = "xo" },
0237     { .hw = &gpll0.clkr.hw },
0238     { .hw = &gpll0_early_div.hw },
0239     { .hw = &gpll1.clkr.hw },
0240     { .hw = &gpll4.clkr.hw },
0241     { .hw = &gpll1_early_div.hw },
0242 };
0243 
0244 static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = {
0245     { P_XO, 0 },
0246     { P_GPLL0, 1 },
0247     { P_GPLL4, 5 },
0248     { P_GPLL0_EARLY_DIV, 6 },
0249 };
0250 
0251 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div[] = {
0252     { .fw_name = "xo" },
0253     { .hw = &gpll0.clkr.hw },
0254     { .hw = &gpll4.clkr.hw },
0255     { .hw = &gpll0_early_div.hw },
0256 };
0257 
0258 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = {
0259     { P_XO, 0 },
0260     { P_GPLL0, 1 },
0261     { P_GPLL0_EARLY_DIV, 2 },
0262     { P_GPLL4, 5 },
0263 };
0264 
0265 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4[] = {
0266     { .fw_name = "xo" },
0267     { .hw = &gpll0.clkr.hw },
0268     { .hw = &gpll0_early_div.hw },
0269     { .hw = &gpll4.clkr.hw },
0270 };
0271 
0272 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
0273     F(19200000, P_XO, 1, 0, 0),
0274     F(50000000, P_GPLL0, 12, 0, 0),
0275     { }
0276 };
0277 
0278 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
0279     .cmd_rcgr = 0x19020,
0280     .mnd_width = 0,
0281     .hid_width = 5,
0282     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0283     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0284     .clkr.hw.init = &(struct clk_init_data){
0285         .name = "blsp1_qup1_i2c_apps_clk_src",
0286         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0287         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0288         .ops = &clk_rcg2_ops,
0289     },
0290 };
0291 
0292 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
0293     F(960000, P_XO, 10, 1, 2),
0294     F(4800000, P_XO, 4, 0, 0),
0295     F(9600000, P_XO, 2, 0, 0),
0296     F(15000000, P_GPLL0, 10, 1, 4),
0297     F(19200000, P_XO, 1, 0, 0),
0298     F(25000000, P_GPLL0, 12, 1, 2),
0299     F(50000000, P_GPLL0, 12, 0, 0),
0300     { }
0301 };
0302 
0303 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
0304     .cmd_rcgr = 0x1900c,
0305     .mnd_width = 8,
0306     .hid_width = 5,
0307     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0308     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0309     .clkr.hw.init = &(struct clk_init_data){
0310         .name = "blsp1_qup1_spi_apps_clk_src",
0311         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0312         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0313         .ops = &clk_rcg2_ops,
0314     },
0315 };
0316 
0317 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
0318     .cmd_rcgr = 0x1b020,
0319     .mnd_width = 0,
0320     .hid_width = 5,
0321     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0322     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0323     .clkr.hw.init = &(struct clk_init_data){
0324         .name = "blsp1_qup2_i2c_apps_clk_src",
0325         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0326         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0327         .ops = &clk_rcg2_ops,
0328     },
0329 };
0330 
0331 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
0332     .cmd_rcgr = 0x1b00c,
0333     .mnd_width = 8,
0334     .hid_width = 5,
0335     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0336     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0337     .clkr.hw.init = &(struct clk_init_data){
0338         .name = "blsp1_qup2_spi_apps_clk_src",
0339         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0340         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0341         .ops = &clk_rcg2_ops,
0342     },
0343 };
0344 
0345 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
0346     .cmd_rcgr = 0x1d020,
0347     .mnd_width = 0,
0348     .hid_width = 5,
0349     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0350     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0351     .clkr.hw.init = &(struct clk_init_data){
0352         .name = "blsp1_qup3_i2c_apps_clk_src",
0353         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0354         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0355         .ops = &clk_rcg2_ops,
0356     },
0357 };
0358 
0359 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
0360     .cmd_rcgr = 0x1d00c,
0361     .mnd_width = 8,
0362     .hid_width = 5,
0363     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0364     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0365     .clkr.hw.init = &(struct clk_init_data){
0366         .name = "blsp1_qup3_spi_apps_clk_src",
0367         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0368         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0369         .ops = &clk_rcg2_ops,
0370     },
0371 };
0372 
0373 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
0374     .cmd_rcgr = 0x1f020,
0375     .mnd_width = 0,
0376     .hid_width = 5,
0377     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0378     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0379     .clkr.hw.init = &(struct clk_init_data){
0380         .name = "blsp1_qup4_i2c_apps_clk_src",
0381         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0382         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0383         .ops = &clk_rcg2_ops,
0384     },
0385 };
0386 
0387 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
0388     .cmd_rcgr = 0x1f00c,
0389     .mnd_width = 8,
0390     .hid_width = 5,
0391     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0392     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0393     .clkr.hw.init = &(struct clk_init_data){
0394         .name = "blsp1_qup4_spi_apps_clk_src",
0395         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0396         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0397         .ops = &clk_rcg2_ops,
0398     },
0399 };
0400 
0401 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
0402     F(3686400, P_GPLL0, 1, 96, 15625),
0403     F(7372800, P_GPLL0, 1, 192, 15625),
0404     F(14745600, P_GPLL0, 1, 384, 15625),
0405     F(16000000, P_GPLL0, 5, 2, 15),
0406     F(19200000, P_XO, 1, 0, 0),
0407     F(24000000, P_GPLL0, 5, 1, 5),
0408     F(32000000, P_GPLL0, 1, 4, 75),
0409     F(40000000, P_GPLL0, 15, 0, 0),
0410     F(46400000, P_GPLL0, 1, 29, 375),
0411     F(48000000, P_GPLL0, 12.5, 0, 0),
0412     F(51200000, P_GPLL0, 1, 32, 375),
0413     F(56000000, P_GPLL0, 1, 7, 75),
0414     F(58982400, P_GPLL0, 1, 1536, 15625),
0415     F(60000000, P_GPLL0, 10, 0, 0),
0416     F(63157895, P_GPLL0, 9.5, 0, 0),
0417     { }
0418 };
0419 
0420 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
0421     .cmd_rcgr = 0x1a00c,
0422     .mnd_width = 16,
0423     .hid_width = 5,
0424     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0425     .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
0426     .clkr.hw.init = &(struct clk_init_data){
0427         .name = "blsp1_uart1_apps_clk_src",
0428         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0429         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0430         .ops = &clk_rcg2_ops,
0431     },
0432 };
0433 
0434 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
0435     .cmd_rcgr = 0x1c00c,
0436     .mnd_width = 16,
0437     .hid_width = 5,
0438     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0439     .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
0440     .clkr.hw.init = &(struct clk_init_data){
0441         .name = "blsp1_uart2_apps_clk_src",
0442         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0443         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0444         .ops = &clk_rcg2_ops,
0445     },
0446 };
0447 
0448 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
0449     .cmd_rcgr = 0x26020,
0450     .mnd_width = 0,
0451     .hid_width = 5,
0452     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0453     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0454     .clkr.hw.init = &(struct clk_init_data){
0455         .name = "blsp2_qup1_i2c_apps_clk_src",
0456         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0457         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0458         .ops = &clk_rcg2_ops,
0459     },
0460 };
0461 
0462 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
0463     .cmd_rcgr = 0x2600c,
0464     .mnd_width = 8,
0465     .hid_width = 5,
0466     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0467     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0468     .clkr.hw.init = &(struct clk_init_data){
0469         .name = "blsp2_qup1_spi_apps_clk_src",
0470         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0471         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0472         .ops = &clk_rcg2_ops,
0473     },
0474 };
0475 
0476 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
0477     .cmd_rcgr = 0x28020,
0478     .mnd_width = 0,
0479     .hid_width = 5,
0480     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0481     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0482     .clkr.hw.init = &(struct clk_init_data){
0483         .name = "blsp2_qup2_i2c_apps_clk_src",
0484         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0485         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0486         .ops = &clk_rcg2_ops,
0487     },
0488 };
0489 
0490 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
0491     .cmd_rcgr = 0x2800c,
0492     .mnd_width = 8,
0493     .hid_width = 5,
0494     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0495     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0496     .clkr.hw.init = &(struct clk_init_data){
0497         .name = "blsp2_qup2_spi_apps_clk_src",
0498         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0499         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0500         .ops = &clk_rcg2_ops,
0501     },
0502 };
0503 
0504 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
0505     .cmd_rcgr = 0x2a020,
0506     .mnd_width = 0,
0507     .hid_width = 5,
0508     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0509     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0510     .clkr.hw.init = &(struct clk_init_data){
0511         .name = "blsp2_qup3_i2c_apps_clk_src",
0512         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0513         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0514         .ops = &clk_rcg2_ops,
0515     },
0516 };
0517 
0518 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
0519     .cmd_rcgr = 0x2a00c,
0520     .mnd_width = 8,
0521     .hid_width = 5,
0522     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0523     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0524     .clkr.hw.init = &(struct clk_init_data){
0525         .name = "blsp2_qup3_spi_apps_clk_src",
0526         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0527         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0528         .ops = &clk_rcg2_ops,
0529     },
0530 };
0531 
0532 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
0533     .cmd_rcgr = 0x2c020,
0534     .mnd_width = 0,
0535     .hid_width = 5,
0536     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0537     .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
0538     .clkr.hw.init = &(struct clk_init_data){
0539         .name = "blsp2_qup4_i2c_apps_clk_src",
0540         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0541         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0542         .ops = &clk_rcg2_ops,
0543     },
0544 };
0545 
0546 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
0547     .cmd_rcgr = 0x2c00c,
0548     .mnd_width = 8,
0549     .hid_width = 5,
0550     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0551     .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
0552     .clkr.hw.init = &(struct clk_init_data){
0553         .name = "blsp2_qup4_spi_apps_clk_src",
0554         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0555         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0556         .ops = &clk_rcg2_ops,
0557     },
0558 };
0559 
0560 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
0561     .cmd_rcgr = 0x2700c,
0562     .mnd_width = 16,
0563     .hid_width = 5,
0564     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0565     .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
0566     .clkr.hw.init = &(struct clk_init_data){
0567         .name = "blsp2_uart1_apps_clk_src",
0568         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0569         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0570         .ops = &clk_rcg2_ops,
0571     },
0572 };
0573 
0574 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
0575     .cmd_rcgr = 0x2900c,
0576     .mnd_width = 16,
0577     .hid_width = 5,
0578     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0579     .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
0580     .clkr.hw.init = &(struct clk_init_data){
0581         .name = "blsp2_uart2_apps_clk_src",
0582         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0583         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0584         .ops = &clk_rcg2_ops,
0585     },
0586 };
0587 
0588 static const struct freq_tbl ftbl_gp1_clk_src[] = {
0589     F(19200000, P_XO, 1, 0, 0),
0590     F(100000000, P_GPLL0, 6, 0, 0),
0591     F(200000000, P_GPLL0, 3, 0, 0),
0592     { }
0593 };
0594 
0595 static struct clk_rcg2 gp1_clk_src = {
0596     .cmd_rcgr = 0x64004,
0597     .mnd_width = 8,
0598     .hid_width = 5,
0599     .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
0600     .freq_tbl = ftbl_gp1_clk_src,
0601     .clkr.hw.init = &(struct clk_init_data){
0602         .name = "gp1_clk_src",
0603         .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
0604         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
0605         .ops = &clk_rcg2_ops,
0606     },
0607 };
0608 
0609 static struct clk_rcg2 gp2_clk_src = {
0610     .cmd_rcgr = 0x65004,
0611     .mnd_width = 8,
0612     .hid_width = 5,
0613     .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
0614     .freq_tbl = ftbl_gp1_clk_src,
0615     .clkr.hw.init = &(struct clk_init_data){
0616         .name = "gp2_clk_src",
0617         .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
0618         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
0619         .ops = &clk_rcg2_ops,
0620     },
0621 };
0622 
0623 static struct clk_rcg2 gp3_clk_src = {
0624     .cmd_rcgr = 0x66004,
0625     .mnd_width = 8,
0626     .hid_width = 5,
0627     .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
0628     .freq_tbl = ftbl_gp1_clk_src,
0629     .clkr.hw.init = &(struct clk_init_data){
0630         .name = "gp3_clk_src",
0631         .parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
0632         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
0633         .ops = &clk_rcg2_ops,
0634     },
0635 };
0636 
0637 static const struct freq_tbl ftbl_hmss_gpll0_clk_src[] = {
0638     F(300000000, P_GPLL0, 2, 0, 0),
0639     F(600000000, P_GPLL0, 1, 0, 0),
0640     { }
0641 };
0642 
0643 static struct clk_rcg2 hmss_gpll0_clk_src = {
0644     .cmd_rcgr = 0x4805c,
0645     .mnd_width = 0,
0646     .hid_width = 5,
0647     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0648     .freq_tbl = ftbl_hmss_gpll0_clk_src,
0649     .clkr.hw.init = &(struct clk_init_data){
0650         .name = "hmss_gpll0_clk_src",
0651         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0652         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0653         .ops = &clk_rcg2_ops,
0654     },
0655 };
0656 
0657 static const struct freq_tbl ftbl_hmss_gpll4_clk_src[] = {
0658     F(384000000, P_GPLL4, 4, 0, 0),
0659     F(768000000, P_GPLL4, 2, 0, 0),
0660     F(1536000000, P_GPLL4, 1, 0, 0),
0661     { }
0662 };
0663 
0664 static struct clk_rcg2 hmss_gpll4_clk_src = {
0665     .cmd_rcgr = 0x48074,
0666     .mnd_width = 0,
0667     .hid_width = 5,
0668     .parent_map = gcc_parent_map_xo_gpll4,
0669     .freq_tbl = ftbl_hmss_gpll4_clk_src,
0670     .clkr.hw.init = &(struct clk_init_data){
0671         .name = "hmss_gpll4_clk_src",
0672         .parent_data = gcc_parent_data_xo_gpll4,
0673         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll4),
0674         .ops = &clk_rcg2_ops,
0675     },
0676 };
0677 
0678 static const struct freq_tbl ftbl_hmss_rbcpr_clk_src[] = {
0679     F(19200000, P_XO, 1, 0, 0),
0680     { }
0681 };
0682 
0683 static struct clk_rcg2 hmss_rbcpr_clk_src = {
0684     .cmd_rcgr = 0x48044,
0685     .mnd_width = 0,
0686     .hid_width = 5,
0687     .parent_map = gcc_parent_map_xo_gpll0,
0688     .freq_tbl = ftbl_hmss_rbcpr_clk_src,
0689     .clkr.hw.init = &(struct clk_init_data){
0690         .name = "hmss_rbcpr_clk_src",
0691         .parent_data = gcc_parent_data_xo_gpll0,
0692         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0),
0693         .ops = &clk_rcg2_ops,
0694     },
0695 };
0696 
0697 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
0698     F(60000000, P_GPLL0, 10, 0, 0),
0699     { }
0700 };
0701 
0702 static struct clk_rcg2 pdm2_clk_src = {
0703     .cmd_rcgr = 0x33010,
0704     .mnd_width = 0,
0705     .hid_width = 5,
0706     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0707     .freq_tbl = ftbl_pdm2_clk_src,
0708     .clkr.hw.init = &(struct clk_init_data){
0709         .name = "pdm2_clk_src",
0710         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0711         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0712         .ops = &clk_rcg2_ops,
0713     },
0714 };
0715 
0716 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
0717     F(19200000, P_XO, 1, 0, 0),
0718     F(80200000, P_GPLL1_EARLY_DIV, 5, 0, 0),
0719     F(160400000, P_GPLL1, 5, 0, 0),
0720     F(267333333, P_GPLL1, 3, 0, 0),
0721     { }
0722 };
0723 
0724 static struct clk_rcg2 qspi_ser_clk_src = {
0725     .cmd_rcgr = 0x4d00c,
0726     .mnd_width = 0,
0727     .hid_width = 5,
0728     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
0729     .freq_tbl = ftbl_qspi_ser_clk_src,
0730     .clkr.hw.init = &(struct clk_init_data){
0731         .name = "qspi_ser_clk_src",
0732         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
0733         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div),
0734         .ops = &clk_rcg2_ops,
0735     },
0736 };
0737 
0738 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
0739     F(144000, P_XO, 16, 3, 25),
0740     F(400000, P_XO, 12, 1, 4),
0741     F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
0742     F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
0743     F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
0744     F(100000000, P_GPLL0, 6, 0, 0),
0745     F(192000000, P_GPLL4, 8, 0, 0),
0746     F(384000000, P_GPLL4, 4, 0, 0),
0747     { }
0748 };
0749 
0750 static struct clk_rcg2 sdcc1_apps_clk_src = {
0751     .cmd_rcgr = 0x1602c,
0752     .mnd_width = 8,
0753     .hid_width = 5,
0754     .parent_map = gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div,
0755     .freq_tbl = ftbl_sdcc1_apps_clk_src,
0756     .clkr.hw.init = &(struct clk_init_data){
0757         .name = "sdcc1_apps_clk_src",
0758         .parent_data = gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div,
0759         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div),
0760         .ops = &clk_rcg2_ops,
0761     },
0762 };
0763 
0764 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
0765     F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
0766     F(150000000, P_GPLL0, 4, 0, 0),
0767     F(200000000, P_GPLL0, 3, 0, 0),
0768     F(300000000, P_GPLL0, 2, 0, 0),
0769     { }
0770 };
0771 
0772 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
0773     .cmd_rcgr = 0x16010,
0774     .mnd_width = 0,
0775     .hid_width = 5,
0776     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0777     .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
0778     .clkr.hw.init = &(struct clk_init_data){
0779         .name = "sdcc1_ice_core_clk_src",
0780         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0781         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0782         .ops = &clk_rcg2_ops,
0783     },
0784 };
0785 
0786 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
0787     F(144000, P_XO, 16, 3, 25),
0788     F(400000, P_XO, 12, 1, 4),
0789     F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
0790     F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
0791     F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
0792     F(100000000, P_GPLL0, 6, 0, 0),
0793     F(192000000, P_GPLL4, 8, 0, 0),
0794     F(200000000, P_GPLL0, 3, 0, 0),
0795     { }
0796 };
0797 
0798 static struct clk_rcg2 sdcc2_apps_clk_src = {
0799     .cmd_rcgr = 0x14010,
0800     .mnd_width = 8,
0801     .hid_width = 5,
0802     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4,
0803     .freq_tbl = ftbl_sdcc2_apps_clk_src,
0804     .clkr.hw.init = &(struct clk_init_data){
0805         .name = "sdcc2_apps_clk_src",
0806         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4,
0807         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4),
0808         .ops = &clk_rcg2_floor_ops,
0809     },
0810 };
0811 
0812 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
0813     F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
0814     F(100000000, P_GPLL0, 6, 0, 0),
0815     F(150000000, P_GPLL0, 4, 0, 0),
0816     F(200000000, P_GPLL0, 3, 0, 0),
0817     F(240000000, P_GPLL0, 2.5, 0, 0),
0818     { }
0819 };
0820 
0821 static struct clk_rcg2 ufs_axi_clk_src = {
0822     .cmd_rcgr = 0x75018,
0823     .mnd_width = 8,
0824     .hid_width = 5,
0825     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0826     .freq_tbl = ftbl_ufs_axi_clk_src,
0827     .clkr.hw.init = &(struct clk_init_data){
0828         .name = "ufs_axi_clk_src",
0829         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0830         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0831         .ops = &clk_rcg2_ops,
0832     },
0833 };
0834 
0835 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
0836     F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
0837     F(150000000, P_GPLL0, 4, 0, 0),
0838     F(300000000, P_GPLL0, 2, 0, 0),
0839     { }
0840 };
0841 
0842 static struct clk_rcg2 ufs_ice_core_clk_src = {
0843     .cmd_rcgr = 0x76010,
0844     .mnd_width = 0,
0845     .hid_width = 5,
0846     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0847     .freq_tbl = ftbl_ufs_ice_core_clk_src,
0848     .clkr.hw.init = &(struct clk_init_data){
0849         .name = "ufs_ice_core_clk_src",
0850         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0851         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0852         .ops = &clk_rcg2_ops,
0853     },
0854 };
0855 
0856 static struct clk_rcg2 ufs_phy_aux_clk_src = {
0857     .cmd_rcgr = 0x76044,
0858     .mnd_width = 0,
0859     .hid_width = 5,
0860     .parent_map = gcc_parent_map_xo_sleep_clk,
0861     .freq_tbl = ftbl_hmss_rbcpr_clk_src,
0862     .clkr.hw.init = &(struct clk_init_data){
0863         .name = "ufs_phy_aux_clk_src",
0864         .parent_data = gcc_parent_data_xo_sleep_clk,
0865         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_sleep_clk),
0866         .ops = &clk_rcg2_ops,
0867     },
0868 };
0869 
0870 static const struct freq_tbl ftbl_ufs_unipro_core_clk_src[] = {
0871     F(37500000, P_GPLL0_EARLY_DIV, 8, 0, 0),
0872     F(75000000, P_GPLL0, 8, 0, 0),
0873     F(150000000, P_GPLL0, 4, 0, 0),
0874     { }
0875 };
0876 
0877 static struct clk_rcg2 ufs_unipro_core_clk_src = {
0878     .cmd_rcgr = 0x76028,
0879     .mnd_width = 0,
0880     .hid_width = 5,
0881     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0882     .freq_tbl = ftbl_ufs_unipro_core_clk_src,
0883     .clkr.hw.init = &(struct clk_init_data){
0884         .name = "ufs_unipro_core_clk_src",
0885         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0886         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0887         .ops = &clk_rcg2_ops,
0888     },
0889 };
0890 
0891 static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
0892     F(19200000, P_XO, 1, 0, 0),
0893     F(60000000, P_GPLL0, 10, 0, 0),
0894     F(120000000, P_GPLL0, 5, 0, 0),
0895     { }
0896 };
0897 
0898 static struct clk_rcg2 usb20_master_clk_src = {
0899     .cmd_rcgr = 0x2f010,
0900     .mnd_width = 8,
0901     .hid_width = 5,
0902     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0903     .freq_tbl = ftbl_usb20_master_clk_src,
0904     .clkr.hw.init = &(struct clk_init_data){
0905         .name = "usb20_master_clk_src",
0906         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0907         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0908         .ops = &clk_rcg2_ops,
0909     },
0910 };
0911 
0912 static const struct freq_tbl ftbl_usb20_mock_utmi_clk_src[] = {
0913     F(19200000, P_XO, 1, 0, 0),
0914     F(60000000, P_GPLL0, 10, 0, 0),
0915     { }
0916 };
0917 
0918 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
0919     .cmd_rcgr = 0x2f024,
0920     .mnd_width = 0,
0921     .hid_width = 5,
0922     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0923     .freq_tbl = ftbl_usb20_mock_utmi_clk_src,
0924     .clkr.hw.init = &(struct clk_init_data){
0925         .name = "usb20_mock_utmi_clk_src",
0926         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0927         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0928         .ops = &clk_rcg2_ops,
0929     },
0930 };
0931 
0932 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
0933     F(19200000, P_XO, 1, 0, 0),
0934     F(66666667, P_GPLL0_EARLY_DIV, 4.5, 0, 0),
0935     F(120000000, P_GPLL0, 5, 0, 0),
0936     F(133333333, P_GPLL0, 4.5, 0, 0),
0937     F(150000000, P_GPLL0, 4, 0, 0),
0938     F(200000000, P_GPLL0, 3, 0, 0),
0939     F(240000000, P_GPLL0, 2.5, 0, 0),
0940     { }
0941 };
0942 
0943 static struct clk_rcg2 usb30_master_clk_src = {
0944     .cmd_rcgr = 0xf014,
0945     .mnd_width = 8,
0946     .hid_width = 5,
0947     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0948     .freq_tbl = ftbl_usb30_master_clk_src,
0949     .clkr.hw.init = &(struct clk_init_data){
0950         .name = "usb30_master_clk_src",
0951         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0952         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0953         .ops = &clk_rcg2_ops,
0954     },
0955 };
0956 
0957 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
0958     F(19200000, P_XO, 1, 0, 0),
0959     F(40000000, P_GPLL0_EARLY_DIV, 7.5, 0, 0),
0960     F(60000000, P_GPLL0, 10, 0, 0),
0961     { }
0962 };
0963 
0964 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
0965     .cmd_rcgr = 0xf028,
0966     .mnd_width = 0,
0967     .hid_width = 5,
0968     .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
0969     .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
0970     .clkr.hw.init = &(struct clk_init_data){
0971         .name = "usb30_mock_utmi_clk_src",
0972         .parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
0973         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
0974         .ops = &clk_rcg2_ops,
0975     },
0976 };
0977 
0978 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
0979     F(1200000, P_XO, 16, 0, 0),
0980     F(19200000, P_XO, 1, 0, 0),
0981     { }
0982 };
0983 
0984 static struct clk_rcg2 usb3_phy_aux_clk_src = {
0985     .cmd_rcgr = 0x5000c,
0986     .mnd_width = 0,
0987     .hid_width = 5,
0988     .parent_map = gcc_parent_map_xo_sleep_clk,
0989     .freq_tbl = ftbl_usb3_phy_aux_clk_src,
0990     .clkr.hw.init = &(struct clk_init_data){
0991         .name = "usb3_phy_aux_clk_src",
0992         .parent_data = gcc_parent_data_xo_sleep_clk,
0993         .num_parents = ARRAY_SIZE(gcc_parent_data_xo_sleep_clk),
0994         .ops = &clk_rcg2_ops,
0995     },
0996 };
0997 
0998 static struct clk_branch gcc_aggre2_ufs_axi_clk = {
0999     .halt_reg = 0x75034,
1000     .halt_check = BRANCH_HALT,
1001     .clkr = {
1002         .enable_reg = 0x75034,
1003         .enable_mask = BIT(0),
1004         .hw.init = &(struct clk_init_data){
1005             .name = "gcc_aggre2_ufs_axi_clk",
1006             .parent_hws = (const struct clk_hw*[]) {
1007                 &ufs_axi_clk_src.clkr.hw,
1008             },
1009             .num_parents = 1,
1010             .ops = &clk_branch2_ops,
1011         },
1012     },
1013 };
1014 
1015 static struct clk_branch gcc_aggre2_usb3_axi_clk = {
1016     .halt_reg = 0xf03c,
1017     .halt_check = BRANCH_HALT,
1018     .clkr = {
1019         .enable_reg = 0xf03c,
1020         .enable_mask = BIT(0),
1021         .hw.init = &(struct clk_init_data){
1022             .name = "gcc_aggre2_usb3_axi_clk",
1023             .parent_hws = (const struct clk_hw*[]) {
1024                 &usb30_master_clk_src.clkr.hw,
1025             },
1026             .num_parents = 1,
1027             .ops = &clk_branch2_ops,
1028         },
1029     },
1030 };
1031 
1032 static struct clk_branch gcc_bimc_gfx_clk = {
1033     .halt_reg = 0x7106c,
1034     .halt_check = BRANCH_VOTED,
1035     .clkr = {
1036         .enable_reg = 0x7106c,
1037         .enable_mask = BIT(0),
1038         .hw.init = &(struct clk_init_data){
1039             .name = "gcc_bimc_gfx_clk",
1040             .ops = &clk_branch2_ops,
1041         },
1042     },
1043 };
1044 
1045 static struct clk_branch gcc_bimc_hmss_axi_clk = {
1046     .halt_reg = 0x48004,
1047     .halt_check = BRANCH_HALT_VOTED,
1048     .clkr = {
1049         .enable_reg = 0x52004,
1050         .enable_mask = BIT(22),
1051         .hw.init = &(struct clk_init_data){
1052             .name = "gcc_bimc_hmss_axi_clk",
1053             .ops = &clk_branch2_ops,
1054         },
1055     },
1056 };
1057 
1058 static struct clk_branch gcc_bimc_mss_q6_axi_clk = {
1059     .halt_reg = 0x4401c,
1060     .halt_check = BRANCH_HALT,
1061     .clkr = {
1062         .enable_reg = 0x4401c,
1063         .enable_mask = BIT(0),
1064         .hw.init = &(struct clk_init_data){
1065             .name = "gcc_bimc_mss_q6_axi_clk",
1066             .ops = &clk_branch2_ops,
1067         },
1068     },
1069 };
1070 
1071 static struct clk_branch gcc_blsp1_ahb_clk = {
1072     .halt_reg = 0x17004,
1073     .halt_check = BRANCH_HALT_VOTED,
1074     .clkr = {
1075         .enable_reg = 0x52004,
1076         .enable_mask = BIT(17),
1077         .hw.init = &(struct clk_init_data){
1078             .name = "gcc_blsp1_ahb_clk",
1079             .ops = &clk_branch2_ops,
1080         },
1081     },
1082 };
1083 
1084 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1085     .halt_reg = 0x19008,
1086     .halt_check = BRANCH_HALT,
1087     .clkr = {
1088         .enable_reg = 0x19008,
1089         .enable_mask = BIT(0),
1090         .hw.init = &(struct clk_init_data){
1091             .name = "gcc_blsp1_qup1_i2c_apps_clk",
1092             .parent_hws = (const struct clk_hw*[]) {
1093                 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1094             },
1095             .num_parents = 1,
1096             .flags = CLK_SET_RATE_PARENT,
1097             .ops = &clk_branch2_ops,
1098         },
1099     },
1100 };
1101 
1102 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1103     .halt_reg = 0x19004,
1104     .halt_check = BRANCH_HALT,
1105     .clkr = {
1106         .enable_reg = 0x19004,
1107         .enable_mask = BIT(0),
1108         .hw.init = &(struct clk_init_data){
1109             .name = "gcc_blsp1_qup1_spi_apps_clk",
1110             .parent_hws = (const struct clk_hw*[]) {
1111                 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1112             },
1113             .num_parents = 1,
1114             .flags = CLK_SET_RATE_PARENT,
1115             .ops = &clk_branch2_ops,
1116         },
1117     },
1118 };
1119 
1120 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1121     .halt_reg = 0x1b008,
1122     .halt_check = BRANCH_HALT,
1123     .clkr = {
1124         .enable_reg = 0x1b008,
1125         .enable_mask = BIT(0),
1126         .hw.init = &(struct clk_init_data){
1127             .name = "gcc_blsp1_qup2_i2c_apps_clk",
1128             .parent_hws = (const struct clk_hw*[]) {
1129                 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1130             },
1131             .num_parents = 1,
1132             .flags = CLK_SET_RATE_PARENT,
1133             .ops = &clk_branch2_ops,
1134         },
1135     },
1136 };
1137 
1138 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1139     .halt_reg = 0x1b004,
1140     .halt_check = BRANCH_HALT,
1141     .clkr = {
1142         .enable_reg = 0x1b004,
1143         .enable_mask = BIT(0),
1144         .hw.init = &(struct clk_init_data){
1145             .name = "gcc_blsp1_qup2_spi_apps_clk",
1146             .parent_hws = (const struct clk_hw*[]) {
1147                 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1148             },
1149             .num_parents = 1,
1150             .flags = CLK_SET_RATE_PARENT,
1151             .ops = &clk_branch2_ops,
1152         },
1153     },
1154 };
1155 
1156 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1157     .halt_reg = 0x1d008,
1158     .halt_check = BRANCH_HALT,
1159     .clkr = {
1160         .enable_reg = 0x1d008,
1161         .enable_mask = BIT(0),
1162         .hw.init = &(struct clk_init_data){
1163             .name = "gcc_blsp1_qup3_i2c_apps_clk",
1164             .parent_hws = (const struct clk_hw*[]) {
1165                 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1166             },
1167             .num_parents = 1,
1168             .flags = CLK_SET_RATE_PARENT,
1169             .ops = &clk_branch2_ops,
1170         },
1171     },
1172 };
1173 
1174 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1175     .halt_reg = 0x1d004,
1176     .halt_check = BRANCH_HALT,
1177     .clkr = {
1178         .enable_reg = 0x1d004,
1179         .enable_mask = BIT(0),
1180         .hw.init = &(struct clk_init_data){
1181             .name = "gcc_blsp1_qup3_spi_apps_clk",
1182             .parent_hws = (const struct clk_hw*[]) {
1183                 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1184             },
1185             .num_parents = 1,
1186             .flags = CLK_SET_RATE_PARENT,
1187             .ops = &clk_branch2_ops,
1188         },
1189     },
1190 };
1191 
1192 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1193     .halt_reg = 0x1f008,
1194     .halt_check = BRANCH_HALT,
1195     .clkr = {
1196         .enable_reg = 0x1f008,
1197         .enable_mask = BIT(0),
1198         .hw.init = &(struct clk_init_data){
1199             .name = "gcc_blsp1_qup4_i2c_apps_clk",
1200             .parent_hws = (const struct clk_hw*[]) {
1201                 &blsp1_qup4_i2c_apps_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_blsp1_qup4_spi_apps_clk = {
1211     .halt_reg = 0x1f004,
1212     .halt_check = BRANCH_HALT,
1213     .clkr = {
1214         .enable_reg = 0x1f004,
1215         .enable_mask = BIT(0),
1216         .hw.init = &(struct clk_init_data){
1217             .name = "gcc_blsp1_qup4_spi_apps_clk",
1218             .parent_hws = (const struct clk_hw*[]) {
1219                 &blsp1_qup4_spi_apps_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_blsp1_uart1_apps_clk = {
1229     .halt_reg = 0x1a004,
1230     .halt_check = BRANCH_HALT,
1231     .clkr = {
1232         .enable_reg = 0x1a004,
1233         .enable_mask = BIT(0),
1234         .hw.init = &(struct clk_init_data){
1235             .name = "gcc_blsp1_uart1_apps_clk",
1236             .parent_hws = (const struct clk_hw*[]) {
1237                 &blsp1_uart1_apps_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_blsp1_uart2_apps_clk = {
1247     .halt_reg = 0x1c004,
1248     .halt_check = BRANCH_HALT,
1249     .clkr = {
1250         .enable_reg = 0x1c004,
1251         .enable_mask = BIT(0),
1252         .hw.init = &(struct clk_init_data){
1253             .name = "gcc_blsp1_uart2_apps_clk",
1254             .parent_hws = (const struct clk_hw*[]) {
1255                 &blsp1_uart2_apps_clk_src.clkr.hw,
1256             },
1257             .num_parents = 1,
1258             .flags = CLK_SET_RATE_PARENT,
1259             .ops = &clk_branch2_ops,
1260         },
1261     },
1262 };
1263 
1264 static struct clk_branch gcc_blsp2_ahb_clk = {
1265     .halt_reg = 0x25004,
1266     .halt_check = BRANCH_HALT_VOTED,
1267     .clkr = {
1268         .enable_reg = 0x52004,
1269         .enable_mask = BIT(15),
1270         .hw.init = &(struct clk_init_data){
1271             .name = "gcc_blsp2_ahb_clk",
1272             .ops = &clk_branch2_ops,
1273         },
1274     },
1275 };
1276 
1277 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1278     .halt_reg = 0x26008,
1279     .halt_check = BRANCH_HALT,
1280     .clkr = {
1281         .enable_reg = 0x26008,
1282         .enable_mask = BIT(0),
1283         .hw.init = &(struct clk_init_data){
1284             .name = "gcc_blsp2_qup1_i2c_apps_clk",
1285             .parent_hws = (const struct clk_hw*[]) {
1286                 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1287             },
1288             .num_parents = 1,
1289             .flags = CLK_SET_RATE_PARENT,
1290             .ops = &clk_branch2_ops,
1291         },
1292     },
1293 };
1294 
1295 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1296     .halt_reg = 0x26004,
1297     .halt_check = BRANCH_HALT,
1298     .clkr = {
1299         .enable_reg = 0x26004,
1300         .enable_mask = BIT(0),
1301         .hw.init = &(struct clk_init_data){
1302             .name = "gcc_blsp2_qup1_spi_apps_clk",
1303             .parent_hws = (const struct clk_hw*[]) {
1304                 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
1305             },
1306             .num_parents = 1,
1307             .flags = CLK_SET_RATE_PARENT,
1308             .ops = &clk_branch2_ops,
1309         },
1310     },
1311 };
1312 
1313 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1314     .halt_reg = 0x28008,
1315     .halt_check = BRANCH_HALT,
1316     .clkr = {
1317         .enable_reg = 0x28008,
1318         .enable_mask = BIT(0),
1319         .hw.init = &(struct clk_init_data){
1320             .name = "gcc_blsp2_qup2_i2c_apps_clk",
1321             .parent_hws = (const struct clk_hw*[]) {
1322                 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1323             },
1324             .num_parents = 1,
1325             .flags = CLK_SET_RATE_PARENT,
1326             .ops = &clk_branch2_ops,
1327         },
1328     },
1329 };
1330 
1331 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1332     .halt_reg = 0x28004,
1333     .halt_check = BRANCH_HALT,
1334     .clkr = {
1335         .enable_reg = 0x28004,
1336         .enable_mask = BIT(0),
1337         .hw.init = &(struct clk_init_data){
1338             .name = "gcc_blsp2_qup2_spi_apps_clk",
1339             .parent_hws = (const struct clk_hw*[]) {
1340                 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
1341             },
1342             .num_parents = 1,
1343             .flags = CLK_SET_RATE_PARENT,
1344             .ops = &clk_branch2_ops,
1345         },
1346     },
1347 };
1348 
1349 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1350     .halt_reg = 0x2a008,
1351     .halt_check = BRANCH_HALT,
1352     .clkr = {
1353         .enable_reg = 0x2a008,
1354         .enable_mask = BIT(0),
1355         .hw.init = &(struct clk_init_data){
1356             .name = "gcc_blsp2_qup3_i2c_apps_clk",
1357             .parent_hws = (const struct clk_hw*[]) {
1358                 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1359             },
1360             .num_parents = 1,
1361             .flags = CLK_SET_RATE_PARENT,
1362             .ops = &clk_branch2_ops,
1363         },
1364     },
1365 };
1366 
1367 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1368     .halt_reg = 0x2a004,
1369     .halt_check = BRANCH_HALT,
1370     .clkr = {
1371         .enable_reg = 0x2a004,
1372         .enable_mask = BIT(0),
1373         .hw.init = &(struct clk_init_data){
1374             .name = "gcc_blsp2_qup3_spi_apps_clk",
1375             .parent_hws = (const struct clk_hw*[]) {
1376                 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
1377             },
1378             .num_parents = 1,
1379             .flags = CLK_SET_RATE_PARENT,
1380             .ops = &clk_branch2_ops,
1381         },
1382     },
1383 };
1384 
1385 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1386     .halt_reg = 0x2c008,
1387     .halt_check = BRANCH_HALT,
1388     .clkr = {
1389         .enable_reg = 0x2c008,
1390         .enable_mask = BIT(0),
1391         .hw.init = &(struct clk_init_data){
1392             .name = "gcc_blsp2_qup4_i2c_apps_clk",
1393             .parent_hws = (const struct clk_hw*[]) {
1394                 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1395             },
1396             .num_parents = 1,
1397             .flags = CLK_SET_RATE_PARENT,
1398             .ops = &clk_branch2_ops,
1399         },
1400     },
1401 };
1402 
1403 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1404     .halt_reg = 0x2c004,
1405     .halt_check = BRANCH_HALT,
1406     .clkr = {
1407         .enable_reg = 0x2c004,
1408         .enable_mask = BIT(0),
1409         .hw.init = &(struct clk_init_data){
1410             .name = "gcc_blsp2_qup4_spi_apps_clk",
1411             .parent_hws = (const struct clk_hw*[]) {
1412                 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
1413             },
1414             .num_parents = 1,
1415             .flags = CLK_SET_RATE_PARENT,
1416             .ops = &clk_branch2_ops,
1417         },
1418     },
1419 };
1420 
1421 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1422     .halt_reg = 0x27004,
1423     .halt_check = BRANCH_HALT,
1424     .clkr = {
1425         .enable_reg = 0x27004,
1426         .enable_mask = BIT(0),
1427         .hw.init = &(struct clk_init_data){
1428             .name = "gcc_blsp2_uart1_apps_clk",
1429             .parent_hws = (const struct clk_hw*[]) {
1430                 &blsp2_uart1_apps_clk_src.clkr.hw,
1431             },
1432             .num_parents = 1,
1433             .flags = CLK_SET_RATE_PARENT,
1434             .ops = &clk_branch2_ops,
1435         },
1436     },
1437 };
1438 
1439 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1440     .halt_reg = 0x29004,
1441     .halt_check = BRANCH_HALT,
1442     .clkr = {
1443         .enable_reg = 0x29004,
1444         .enable_mask = BIT(0),
1445         .hw.init = &(struct clk_init_data){
1446             .name = "gcc_blsp2_uart2_apps_clk",
1447             .parent_hws = (const struct clk_hw*[]) {
1448                 &blsp2_uart2_apps_clk_src.clkr.hw,
1449             },
1450             .num_parents = 1,
1451             .flags = CLK_SET_RATE_PARENT,
1452             .ops = &clk_branch2_ops,
1453         },
1454     },
1455 };
1456 
1457 static struct clk_branch gcc_boot_rom_ahb_clk = {
1458     .halt_reg = 0x38004,
1459     .halt_check = BRANCH_HALT_VOTED,
1460     .clkr = {
1461         .enable_reg = 0x52004,
1462         .enable_mask = BIT(10),
1463         .hw.init = &(struct clk_init_data){
1464             .name = "gcc_boot_rom_ahb_clk",
1465             .ops = &clk_branch2_ops,
1466         },
1467     },
1468 };
1469 
1470 static struct clk_branch gcc_cfg_noc_usb2_axi_clk = {
1471     .halt_reg = 0x5058,
1472     .halt_check = BRANCH_HALT,
1473     .clkr = {
1474         .enable_reg = 0x5058,
1475         .enable_mask = BIT(0),
1476         .hw.init = &(struct clk_init_data){
1477             .name = "gcc_cfg_noc_usb2_axi_clk",
1478             .parent_hws = (const struct clk_hw*[]) {
1479                 &usb20_master_clk_src.clkr.hw,
1480             },
1481             .num_parents = 1,
1482             .ops = &clk_branch2_ops,
1483         },
1484     },
1485 };
1486 
1487 static struct clk_branch gcc_cfg_noc_usb3_axi_clk = {
1488     .halt_reg = 0x5018,
1489     .halt_check = BRANCH_HALT,
1490     .clkr = {
1491         .enable_reg = 0x5018,
1492         .enable_mask = BIT(0),
1493         .hw.init = &(struct clk_init_data){
1494             .name = "gcc_cfg_noc_usb3_axi_clk",
1495             .parent_hws = (const struct clk_hw*[]) {
1496                 &usb30_master_clk_src.clkr.hw,
1497             },
1498             .num_parents = 1,
1499             .ops = &clk_branch2_ops,
1500         },
1501     },
1502 };
1503 
1504 static struct clk_branch gcc_dcc_ahb_clk = {
1505     .halt_reg = 0x84004,
1506     .clkr = {
1507         .enable_reg = 0x84004,
1508         .enable_mask = BIT(0),
1509         .hw.init = &(struct clk_init_data){
1510             .name = "gcc_dcc_ahb_clk",
1511             .ops = &clk_branch2_ops,
1512         },
1513     },
1514 };
1515 
1516 static struct clk_branch gcc_gp1_clk = {
1517     .halt_reg = 0x64000,
1518     .halt_check = BRANCH_HALT,
1519     .clkr = {
1520         .enable_reg = 0x64000,
1521         .enable_mask = BIT(0),
1522         .hw.init = &(struct clk_init_data){
1523             .name = "gcc_gp1_clk",
1524             .parent_hws = (const struct clk_hw*[]) {
1525                 &gp1_clk_src.clkr.hw,
1526             },
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_gp2_clk = {
1535     .halt_reg = 0x65000,
1536     .halt_check = BRANCH_HALT,
1537     .clkr = {
1538         .enable_reg = 0x65000,
1539         .enable_mask = BIT(0),
1540         .hw.init = &(struct clk_init_data){
1541             .name = "gcc_gp2_clk",
1542             .parent_hws = (const struct clk_hw*[]) {
1543                 &gp2_clk_src.clkr.hw,
1544             },
1545             .num_parents = 1,
1546             .flags = CLK_SET_RATE_PARENT,
1547             .ops = &clk_branch2_ops,
1548         },
1549     },
1550 };
1551 
1552 static struct clk_branch gcc_gp3_clk = {
1553     .halt_reg = 0x66000,
1554     .halt_check = BRANCH_HALT,
1555     .clkr = {
1556         .enable_reg = 0x66000,
1557         .enable_mask = BIT(0),
1558         .hw.init = &(struct clk_init_data){
1559             .name = "gcc_gp3_clk",
1560             .parent_hws = (const struct clk_hw*[]) {
1561                 &gp3_clk_src.clkr.hw,
1562             },
1563             .num_parents = 1,
1564             .flags = CLK_SET_RATE_PARENT,
1565             .ops = &clk_branch2_ops,
1566         },
1567     },
1568 };
1569 
1570 static struct clk_branch gcc_gpu_bimc_gfx_clk = {
1571     .halt_reg = 0x71010,
1572     .halt_check = BRANCH_VOTED,
1573     .clkr = {
1574         .enable_reg = 0x71010,
1575         .enable_mask = BIT(0),
1576         .hw.init = &(struct clk_init_data){
1577             .name = "gcc_gpu_bimc_gfx_clk",
1578             .ops = &clk_branch2_ops,
1579         },
1580     },
1581 };
1582 
1583 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1584     .halt_reg = 0x71004,
1585     .halt_check = BRANCH_VOTED,
1586     .clkr = {
1587         .enable_reg = 0x71004,
1588         .enable_mask = BIT(0),
1589         .hw.init = &(struct clk_init_data){
1590             .name = "gcc_gpu_cfg_ahb_clk",
1591             .ops = &clk_branch2_ops,
1592             .flags = CLK_IS_CRITICAL,
1593         },
1594     },
1595 };
1596 
1597 static struct clk_branch gcc_gpu_gpll0_clk = {
1598     .halt_reg = 0x5200c,
1599     .halt_check = BRANCH_HALT_DELAY,
1600     .clkr = {
1601         .enable_reg = 0x5200c,
1602         .enable_mask = BIT(4),
1603         .hw.init = &(struct clk_init_data){
1604             .name = "gcc_gpu_gpll0_clk",
1605             .parent_hws = (const struct clk_hw*[]) {
1606                 &gpll0.clkr.hw,
1607             },
1608             .num_parents = 1,
1609             .ops = &clk_branch2_ops,
1610         },
1611     },
1612 };
1613 
1614 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1615     .halt_reg = 0x5200c,
1616     .halt_check = BRANCH_HALT_DELAY,
1617     .clkr = {
1618         .enable_reg = 0x5200c,
1619         .enable_mask = BIT(3),
1620         .hw.init = &(struct clk_init_data){
1621             .name = "gcc_gpu_gpll0_div_clk",
1622             .parent_hws = (const struct clk_hw*[]) {
1623                 &gpll0_early_div.hw,
1624             },
1625             .num_parents = 1,
1626             .ops = &clk_branch2_ops,
1627         },
1628     },
1629 };
1630 
1631 static struct clk_branch gcc_hmss_dvm_bus_clk = {
1632     .halt_reg = 0x4808c,
1633     .halt_check = BRANCH_HALT,
1634     .clkr = {
1635         .enable_reg = 0x4808c,
1636         .enable_mask = BIT(0),
1637         .hw.init = &(struct clk_init_data){
1638             .name = "gcc_hmss_dvm_bus_clk",
1639             .ops = &clk_branch2_ops,
1640             .flags = CLK_IGNORE_UNUSED,
1641         },
1642     },
1643 };
1644 
1645 static struct clk_branch gcc_hmss_rbcpr_clk = {
1646     .halt_reg = 0x48008,
1647     .halt_check = BRANCH_HALT,
1648     .clkr = {
1649         .enable_reg = 0x48008,
1650         .enable_mask = BIT(0),
1651         .hw.init = &(struct clk_init_data){
1652             .name = "gcc_hmss_rbcpr_clk",
1653             .parent_hws = (const struct clk_hw*[]) {
1654                 &hmss_rbcpr_clk_src.clkr.hw,
1655             },
1656             .num_parents = 1,
1657             .flags = CLK_SET_RATE_PARENT,
1658             .ops = &clk_branch2_ops,
1659         },
1660     },
1661 };
1662 
1663 static struct clk_branch gcc_mmss_gpll0_clk = {
1664     .halt_reg = 0x5200c,
1665     .halt_check = BRANCH_HALT_DELAY,
1666     .clkr = {
1667         .enable_reg = 0x5200c,
1668         .enable_mask = BIT(1),
1669         .hw.init = &(struct clk_init_data){
1670             .name = "gcc_mmss_gpll0_clk",
1671             .parent_hws = (const struct clk_hw*[]) {
1672                 &gpll0.clkr.hw,
1673             },
1674             .num_parents = 1,
1675             .ops = &clk_branch2_ops,
1676         },
1677     },
1678 };
1679 
1680 static struct clk_branch gcc_mmss_gpll0_div_clk = {
1681     .halt_reg = 0x5200c,
1682     .halt_check = BRANCH_HALT_DELAY,
1683     .clkr = {
1684         .enable_reg = 0x5200c,
1685         .enable_mask = BIT(0),
1686         .hw.init = &(struct clk_init_data){
1687             .name = "gcc_mmss_gpll0_div_clk",
1688             .parent_hws = (const struct clk_hw*[]) {
1689                 &gpll0_early_div.hw,
1690             },
1691             .num_parents = 1,
1692             .ops = &clk_branch2_ops,
1693         },
1694     },
1695 };
1696 
1697 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1698     .halt_reg = 0x9004,
1699     .halt_check = BRANCH_HALT,
1700     .clkr = {
1701         .enable_reg = 0x9004,
1702         .enable_mask = BIT(0),
1703         .hw.init = &(struct clk_init_data){
1704             .name = "gcc_mmss_noc_cfg_ahb_clk",
1705             .ops = &clk_branch2_ops,
1706             /*
1707              * Any access to mmss depends on this clock.
1708              * Gating this clock has been shown to crash the system
1709              * when mmssnoc_axi_rpm_clk is inited in rpmcc.
1710              */
1711             .flags = CLK_IS_CRITICAL,
1712         },
1713     },
1714 };
1715 
1716 static struct clk_branch gcc_mmss_sys_noc_axi_clk = {
1717     .halt_reg = 0x9000,
1718     .halt_check = BRANCH_HALT,
1719     .clkr = {
1720         .enable_reg = 0x9000,
1721         .enable_mask = BIT(0),
1722         .hw.init = &(struct clk_init_data){
1723             .name = "gcc_mmss_sys_noc_axi_clk",
1724             .ops = &clk_branch2_ops,
1725         },
1726     },
1727 };
1728 
1729 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1730     .halt_reg = 0x8a000,
1731     .clkr = {
1732         .enable_reg = 0x8a000,
1733         .enable_mask = BIT(0),
1734         .hw.init = &(struct clk_init_data){
1735             .name = "gcc_mss_cfg_ahb_clk",
1736             .ops = &clk_branch2_ops,
1737         },
1738     },
1739 };
1740 
1741 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
1742     .halt_reg = 0x8a004,
1743     .halt_check = BRANCH_HALT,
1744     .hwcg_reg = 0x8a004,
1745     .hwcg_bit = 1,
1746     .clkr = {
1747         .enable_reg = 0x8a004,
1748         .enable_mask = BIT(0),
1749         .hw.init = &(struct clk_init_data){
1750             .name = "gcc_mss_mnoc_bimc_axi_clk",
1751             .ops = &clk_branch2_ops,
1752         },
1753     },
1754 };
1755 
1756 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1757     .halt_reg = 0x8a040,
1758     .clkr = {
1759         .enable_reg = 0x8a040,
1760         .enable_mask = BIT(0),
1761         .hw.init = &(struct clk_init_data){
1762             .name = "gcc_mss_q6_bimc_axi_clk",
1763             .ops = &clk_branch2_ops,
1764         },
1765     },
1766 };
1767 
1768 static struct clk_branch gcc_mss_snoc_axi_clk = {
1769     .halt_reg = 0x8a03c,
1770     .clkr = {
1771         .enable_reg = 0x8a03c,
1772         .enable_mask = BIT(0),
1773         .hw.init = &(struct clk_init_data){
1774             .name = "gcc_mss_snoc_axi_clk",
1775             .ops = &clk_branch2_ops,
1776         },
1777     },
1778 };
1779 
1780 static struct clk_branch gcc_pdm2_clk = {
1781     .halt_reg = 0x3300c,
1782     .halt_check = BRANCH_HALT,
1783     .clkr = {
1784         .enable_reg = 0x3300c,
1785         .enable_mask = BIT(0),
1786         .hw.init = &(struct clk_init_data){
1787             .name = "gcc_pdm2_clk",
1788             .parent_hws = (const struct clk_hw*[]) {
1789                 &pdm2_clk_src.clkr.hw,
1790             },
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_pdm_ahb_clk = {
1799     .halt_reg = 0x33004,
1800     .halt_check = BRANCH_HALT,
1801     .clkr = {
1802         .enable_reg = 0x33004,
1803         .enable_mask = BIT(0),
1804         .hw.init = &(struct clk_init_data){
1805             .name = "gcc_pdm_ahb_clk",
1806             .ops = &clk_branch2_ops,
1807         },
1808     },
1809 };
1810 
1811 static struct clk_branch gcc_prng_ahb_clk = {
1812     .halt_reg = 0x34004,
1813     .halt_check = BRANCH_HALT_VOTED,
1814     .clkr = {
1815         .enable_reg = 0x52004,
1816         .enable_mask = BIT(13),
1817         .hw.init = &(struct clk_init_data){
1818             .name = "gcc_prng_ahb_clk",
1819             .ops = &clk_branch2_ops,
1820         },
1821     },
1822 };
1823 
1824 static struct clk_branch gcc_qspi_ahb_clk = {
1825     .halt_reg = 0x4d004,
1826     .halt_check = BRANCH_HALT,
1827     .clkr = {
1828         .enable_reg = 0x4d004,
1829         .enable_mask = BIT(0),
1830         .hw.init = &(struct clk_init_data){
1831             .name = "gcc_qspi_ahb_clk",
1832             .ops = &clk_branch2_ops,
1833         },
1834     },
1835 };
1836 
1837 static struct clk_branch gcc_qspi_ser_clk = {
1838     .halt_reg = 0x4d008,
1839     .halt_check = BRANCH_HALT,
1840     .clkr = {
1841         .enable_reg = 0x4d008,
1842         .enable_mask = BIT(0),
1843         .hw.init = &(struct clk_init_data){
1844             .name = "gcc_qspi_ser_clk",
1845             .parent_hws = (const struct clk_hw*[]) {
1846                 &qspi_ser_clk_src.clkr.hw,
1847             },
1848             .num_parents = 1,
1849             .flags = CLK_SET_RATE_PARENT,
1850             .ops = &clk_branch2_ops,
1851         },
1852     },
1853 };
1854 
1855 static struct clk_branch gcc_rx0_usb2_clkref_clk = {
1856     .halt_reg = 0x88018,
1857     .halt_check = BRANCH_HALT_VOTED,
1858     .clkr = {
1859         .enable_reg = 0x88018,
1860         .enable_mask = BIT(0),
1861         .hw.init = &(struct clk_init_data){
1862             .name = "gcc_rx0_usb2_clkref_clk",
1863             .ops = &clk_branch2_ops,
1864         },
1865     },
1866 };
1867 
1868 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
1869     .halt_reg = 0x88014,
1870     .halt_check = BRANCH_HALT_VOTED,
1871     .clkr = {
1872         .enable_reg = 0x88014,
1873         .enable_mask = BIT(0),
1874         .hw.init = &(struct clk_init_data){
1875             .name = "gcc_rx1_usb2_clkref_clk",
1876             .ops = &clk_branch2_ops,
1877         },
1878     },
1879 };
1880 
1881 static struct clk_branch gcc_sdcc1_ahb_clk = {
1882     .halt_reg = 0x16008,
1883     .halt_check = BRANCH_HALT,
1884     .clkr = {
1885         .enable_reg = 0x16008,
1886         .enable_mask = BIT(0),
1887         .hw.init = &(struct clk_init_data){
1888             .name = "gcc_sdcc1_ahb_clk",
1889             .ops = &clk_branch2_ops,
1890         },
1891     },
1892 };
1893 
1894 static struct clk_branch gcc_sdcc1_apps_clk = {
1895     .halt_reg = 0x16004,
1896     .halt_check = BRANCH_HALT,
1897     .clkr = {
1898         .enable_reg = 0x16004,
1899         .enable_mask = BIT(0),
1900         .hw.init = &(struct clk_init_data){
1901             .name = "gcc_sdcc1_apps_clk",
1902             .parent_hws = (const struct clk_hw*[]) {
1903                 &sdcc1_apps_clk_src.clkr.hw,
1904             },
1905             .num_parents = 1,
1906             .flags = CLK_SET_RATE_PARENT,
1907             .ops = &clk_branch2_ops,
1908         },
1909     },
1910 };
1911 
1912 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1913     .halt_reg = 0x1600c,
1914     .halt_check = BRANCH_HALT,
1915     .clkr = {
1916         .enable_reg = 0x1600c,
1917         .enable_mask = BIT(0),
1918         .hw.init = &(struct clk_init_data){
1919             .name = "gcc_sdcc1_ice_core_clk",
1920             .parent_hws = (const struct clk_hw*[]) {
1921                 &sdcc1_ice_core_clk_src.clkr.hw,
1922             },
1923             .num_parents = 1,
1924             .flags = CLK_SET_RATE_PARENT,
1925             .ops = &clk_branch2_ops,
1926         },
1927     },
1928 };
1929 
1930 static struct clk_branch gcc_sdcc2_ahb_clk = {
1931     .halt_reg = 0x14008,
1932     .halt_check = BRANCH_HALT,
1933     .clkr = {
1934         .enable_reg = 0x14008,
1935         .enable_mask = BIT(0),
1936         .hw.init = &(struct clk_init_data){
1937             .name = "gcc_sdcc2_ahb_clk",
1938             .ops = &clk_branch2_ops,
1939         },
1940     },
1941 };
1942 
1943 static struct clk_branch gcc_sdcc2_apps_clk = {
1944     .halt_reg = 0x14004,
1945     .halt_check = BRANCH_HALT,
1946     .clkr = {
1947         .enable_reg = 0x14004,
1948         .enable_mask = BIT(0),
1949         .hw.init = &(struct clk_init_data){
1950             .name = "gcc_sdcc2_apps_clk",
1951             .parent_hws = (const struct clk_hw*[]) {
1952                 &sdcc2_apps_clk_src.clkr.hw,
1953             },
1954             .num_parents = 1,
1955             .flags = CLK_SET_RATE_PARENT,
1956             .ops = &clk_branch2_ops,
1957         },
1958     },
1959 };
1960 
1961 static struct clk_branch gcc_ufs_ahb_clk = {
1962     .halt_reg = 0x7500c,
1963     .halt_check = BRANCH_HALT,
1964     .clkr = {
1965         .enable_reg = 0x7500c,
1966         .enable_mask = BIT(0),
1967         .hw.init = &(struct clk_init_data){
1968             .name = "gcc_ufs_ahb_clk",
1969             .ops = &clk_branch2_ops,
1970         },
1971     },
1972 };
1973 
1974 static struct clk_branch gcc_ufs_axi_clk = {
1975     .halt_reg = 0x75008,
1976     .halt_check = BRANCH_HALT,
1977     .clkr = {
1978         .enable_reg = 0x75008,
1979         .enable_mask = BIT(0),
1980         .hw.init = &(struct clk_init_data){
1981             .name = "gcc_ufs_axi_clk",
1982             .parent_hws = (const struct clk_hw*[]) {
1983                 &ufs_axi_clk_src.clkr.hw,
1984             },
1985             .num_parents = 1,
1986             .flags = CLK_SET_RATE_PARENT,
1987             .ops = &clk_branch2_ops,
1988         },
1989     },
1990 };
1991 
1992 static struct clk_branch gcc_ufs_clkref_clk = {
1993     .halt_reg = 0x88008,
1994     .halt_check = BRANCH_HALT,
1995     .clkr = {
1996         .enable_reg = 0x88008,
1997         .enable_mask = BIT(0),
1998         .hw.init = &(struct clk_init_data){
1999             .name = "gcc_ufs_clkref_clk",
2000             .ops = &clk_branch2_ops,
2001         },
2002     },
2003 };
2004 
2005 static struct clk_branch gcc_ufs_ice_core_clk = {
2006     .halt_reg = 0x7600c,
2007     .halt_check = BRANCH_HALT,
2008     .clkr = {
2009         .enable_reg = 0x7600c,
2010         .enable_mask = BIT(0),
2011         .hw.init = &(struct clk_init_data){
2012             .name = "gcc_ufs_ice_core_clk",
2013             .parent_hws = (const struct clk_hw*[]) {
2014                 &ufs_ice_core_clk_src.clkr.hw,
2015             },
2016             .num_parents = 1,
2017             .flags = CLK_SET_RATE_PARENT,
2018             .ops = &clk_branch2_ops,
2019         },
2020     },
2021 };
2022 
2023 static struct clk_branch gcc_ufs_phy_aux_clk = {
2024     .halt_reg = 0x76040,
2025     .halt_check = BRANCH_HALT,
2026     .clkr = {
2027         .enable_reg = 0x76040,
2028         .enable_mask = BIT(0),
2029         .hw.init = &(struct clk_init_data){
2030             .name = "gcc_ufs_phy_aux_clk",
2031             .parent_hws = (const struct clk_hw*[]) {
2032                 &ufs_phy_aux_clk_src.clkr.hw,
2033             },
2034             .num_parents = 1,
2035             .flags = CLK_SET_RATE_PARENT,
2036             .ops = &clk_branch2_ops,
2037         },
2038     },
2039 };
2040 
2041 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2042     .halt_reg = 0x75014,
2043     .halt_check = BRANCH_HALT_SKIP,
2044     .clkr = {
2045         .enable_reg = 0x75014,
2046         .enable_mask = BIT(0),
2047         .hw.init = &(struct clk_init_data){
2048             .name = "gcc_ufs_rx_symbol_0_clk",
2049             .ops = &clk_branch2_ops,
2050         },
2051     },
2052 };
2053 
2054 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2055     .halt_reg = 0x7605c,
2056     .halt_check = BRANCH_HALT_SKIP,
2057     .clkr = {
2058         .enable_reg = 0x7605c,
2059         .enable_mask = BIT(0),
2060         .hw.init = &(struct clk_init_data){
2061             .name = "gcc_ufs_rx_symbol_1_clk",
2062             .ops = &clk_branch2_ops,
2063         },
2064     },
2065 };
2066 
2067 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2068     .halt_reg = 0x75010,
2069     .halt_check = BRANCH_HALT_SKIP,
2070     .clkr = {
2071         .enable_reg = 0x75010,
2072         .enable_mask = BIT(0),
2073         .hw.init = &(struct clk_init_data){
2074             .name = "gcc_ufs_tx_symbol_0_clk",
2075             .ops = &clk_branch2_ops,
2076         },
2077     },
2078 };
2079 
2080 static struct clk_branch gcc_ufs_unipro_core_clk = {
2081     .halt_reg = 0x76008,
2082     .halt_check = BRANCH_HALT,
2083     .clkr = {
2084         .enable_reg = 0x76008,
2085         .enable_mask = BIT(0),
2086         .hw.init = &(struct clk_init_data){
2087             .name = "gcc_ufs_unipro_core_clk",
2088             .parent_hws = (const struct clk_hw*[]) {
2089                 &ufs_unipro_core_clk_src.clkr.hw,
2090             },
2091             .flags = CLK_SET_RATE_PARENT,
2092             .num_parents = 1,
2093             .ops = &clk_branch2_ops,
2094         },
2095     },
2096 };
2097 
2098 static struct clk_branch gcc_usb20_master_clk = {
2099     .halt_reg = 0x2f004,
2100     .halt_check = BRANCH_HALT,
2101     .clkr = {
2102         .enable_reg = 0x2f004,
2103         .enable_mask = BIT(0),
2104         .hw.init = &(struct clk_init_data){
2105             .name = "gcc_usb20_master_clk",
2106             .parent_hws = (const struct clk_hw*[]) {
2107                 &usb20_master_clk_src.clkr.hw,
2108             },
2109             .flags = CLK_SET_RATE_PARENT,
2110             .num_parents = 1,
2111             .ops = &clk_branch2_ops,
2112         },
2113     },
2114 };
2115 
2116 static struct clk_branch gcc_usb20_mock_utmi_clk = {
2117     .halt_reg = 0x2f00c,
2118     .halt_check = BRANCH_HALT,
2119     .clkr = {
2120         .enable_reg = 0x2f00c,
2121         .enable_mask = BIT(0),
2122         .hw.init = &(struct clk_init_data){
2123             .name = "gcc_usb20_mock_utmi_clk",
2124             .parent_hws = (const struct clk_hw*[]) {
2125                 &usb20_mock_utmi_clk_src.clkr.hw,
2126             },
2127             .num_parents = 1,
2128             .flags = CLK_SET_RATE_PARENT,
2129             .ops = &clk_branch2_ops,
2130         },
2131     },
2132 };
2133 
2134 static struct clk_branch gcc_usb20_sleep_clk = {
2135     .halt_reg = 0x2f008,
2136     .halt_check = BRANCH_HALT,
2137     .clkr = {
2138         .enable_reg = 0x2f008,
2139         .enable_mask = BIT(0),
2140         .hw.init = &(struct clk_init_data){
2141             .name = "gcc_usb20_sleep_clk",
2142             .ops = &clk_branch2_ops,
2143         },
2144     },
2145 };
2146 
2147 static struct clk_branch gcc_usb30_master_clk = {
2148     .halt_reg = 0xf008,
2149     .halt_check = BRANCH_HALT,
2150     .clkr = {
2151         .enable_reg = 0xf008,
2152         .enable_mask = BIT(0),
2153         .hw.init = &(struct clk_init_data){
2154             .name = "gcc_usb30_master_clk",
2155             .parent_hws = (const struct clk_hw*[]) {
2156                 &usb30_master_clk_src.clkr.hw,
2157             },
2158             .num_parents = 1,
2159             .flags = CLK_SET_RATE_PARENT,
2160             .ops = &clk_branch2_ops,
2161         },
2162     },
2163 };
2164 
2165 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2166     .halt_reg = 0xf010,
2167     .halt_check = BRANCH_HALT,
2168     .clkr = {
2169         .enable_reg = 0xf010,
2170         .enable_mask = BIT(0),
2171         .hw.init = &(struct clk_init_data){
2172             .name = "gcc_usb30_mock_utmi_clk",
2173             .parent_hws = (const struct clk_hw*[]) {
2174                 &usb30_mock_utmi_clk_src.clkr.hw,
2175             },
2176             .num_parents = 1,
2177             .flags = CLK_SET_RATE_PARENT,
2178             .ops = &clk_branch2_ops,
2179         },
2180     },
2181 };
2182 
2183 static struct clk_branch gcc_usb30_sleep_clk = {
2184     .halt_reg = 0xf00c,
2185     .halt_check = BRANCH_HALT,
2186     .clkr = {
2187         .enable_reg = 0xf00c,
2188         .enable_mask = BIT(0),
2189         .hw.init = &(struct clk_init_data){
2190             .name = "gcc_usb30_sleep_clk",
2191             .ops = &clk_branch2_ops,
2192         },
2193     },
2194 };
2195 
2196 static struct clk_branch gcc_usb3_clkref_clk = {
2197     .halt_reg = 0x8800c,
2198     .halt_check = BRANCH_HALT,
2199     .clkr = {
2200         .enable_reg = 0x8800c,
2201         .enable_mask = BIT(0),
2202         .hw.init = &(struct clk_init_data){
2203             .name = "gcc_usb3_clkref_clk",
2204             .ops = &clk_branch2_ops,
2205         },
2206     },
2207 };
2208 
2209 static struct clk_branch gcc_usb3_phy_aux_clk = {
2210     .halt_reg = 0x50000,
2211     .halt_check = BRANCH_HALT,
2212     .clkr = {
2213         .enable_reg = 0x50000,
2214         .enable_mask = BIT(0),
2215         .hw.init = &(struct clk_init_data){
2216             .name = "gcc_usb3_phy_aux_clk",
2217             .parent_hws = (const struct clk_hw*[]) {
2218                 &usb3_phy_aux_clk_src.clkr.hw,
2219             },
2220             .num_parents = 1,
2221             .flags = CLK_SET_RATE_PARENT,
2222             .ops = &clk_branch2_ops,
2223         },
2224     },
2225 };
2226 
2227 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2228     .halt_reg = 0x50004,
2229     .halt_check = BRANCH_HALT_DELAY,
2230     .clkr = {
2231         .enable_reg = 0x50004,
2232         .enable_mask = BIT(0),
2233         .hw.init = &(struct clk_init_data){
2234             .name = "gcc_usb3_phy_pipe_clk",
2235             .ops = &clk_branch2_ops,
2236         },
2237     },
2238 };
2239 
2240 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2241     .halt_reg = 0x6a004,
2242     .halt_check = BRANCH_HALT,
2243     .clkr = {
2244         .enable_reg = 0x6a004,
2245         .enable_mask = BIT(0),
2246         .hw.init = &(struct clk_init_data){
2247             .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2248             .ops = &clk_branch2_ops,
2249         },
2250     },
2251 };
2252 
2253 static struct gdsc ufs_gdsc = {
2254     .gdscr = 0x75004,
2255     .gds_hw_ctrl = 0x0,
2256     .pd = {
2257         .name = "ufs_gdsc",
2258     },
2259     .pwrsts = PWRSTS_OFF_ON,
2260     .flags = VOTABLE,
2261 };
2262 
2263 static struct gdsc usb_30_gdsc = {
2264     .gdscr = 0xf004,
2265     .gds_hw_ctrl = 0x0,
2266     .pd = {
2267         .name = "usb_30_gdsc",
2268     },
2269     .pwrsts = PWRSTS_OFF_ON,
2270     .flags = VOTABLE,
2271 };
2272 
2273 static struct gdsc pcie_0_gdsc = {
2274     .gdscr = 0x6b004,
2275     .gds_hw_ctrl = 0x0,
2276     .pd = {
2277         .name = "pcie_0_gdsc",
2278     },
2279     .pwrsts = PWRSTS_OFF_ON,
2280     .flags = VOTABLE,
2281 };
2282 
2283 static struct clk_hw *gcc_sdm660_hws[] = {
2284     &xo.hw,
2285     &gpll0_early_div.hw,
2286     &gpll1_early_div.hw,
2287 };
2288 
2289 static struct clk_regmap *gcc_sdm660_clocks[] = {
2290     [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2291     [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2292     [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2293     [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2294     [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2295     [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2296     [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2297     [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2298     [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2299     [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2300     [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2301     [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2302     [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2303     [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2304     [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2305     [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2306     [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2307     [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2308     [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2309     [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2310     [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
2311     [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
2312     [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2313     [GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr,
2314     [GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr,
2315     [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2316     [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2317     [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2318     [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2319     [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2320     [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2321     [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2322     [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2323     [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2324     [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2325     [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2326     [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2327     [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2328     [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2329     [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2330     [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2331     [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2332     [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2333     [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2334     [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2335     [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2336     [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2337     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2338     [GCC_CFG_NOC_USB2_AXI_CLK] = &gcc_cfg_noc_usb2_axi_clk.clkr,
2339     [GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr,
2340     [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
2341     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2342     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2343     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2344     [GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr,
2345     [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2346     [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2347     [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2348     [GCC_HMSS_DVM_BUS_CLK] = &gcc_hmss_dvm_bus_clk.clkr,
2349     [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
2350     [GCC_MMSS_GPLL0_CLK] = &gcc_mmss_gpll0_clk.clkr,
2351     [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
2352     [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2353     [GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr,
2354     [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2355     [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
2356     [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2357     [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
2358     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2359     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2360     [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2361     [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
2362     [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
2363     [GCC_RX0_USB2_CLKREF_CLK] = &gcc_rx0_usb2_clkref_clk.clkr,
2364     [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
2365     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2366     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2367     [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2368     [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2369     [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2370     [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2371     [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2372     [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
2373     [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
2374     [GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr,
2375     [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2376     [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2377     [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2378     [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
2379     [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
2380     [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2381     [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
2382     [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2383     [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2384     [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2385     [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
2386     [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2387     [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2388     [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2389     [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2390     [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2391     [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2392     [GPLL0] = &gpll0.clkr,
2393     [GPLL0_EARLY] = &gpll0_early.clkr,
2394     [GPLL1] = &gpll1.clkr,
2395     [GPLL1_EARLY] = &gpll1_early.clkr,
2396     [GPLL4] = &gpll4.clkr,
2397     [GPLL4_EARLY] = &gpll4_early.clkr,
2398     [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
2399     [HMSS_GPLL4_CLK_SRC] = &hmss_gpll4_clk_src.clkr,
2400     [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
2401     [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2402     [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
2403     [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2404     [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2405     [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2406     [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2407     [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
2408     [UFS_PHY_AUX_CLK_SRC] = &ufs_phy_aux_clk_src.clkr,
2409     [UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr,
2410     [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
2411     [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2412     [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2413     [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2414     [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2415 };
2416 
2417 static struct gdsc *gcc_sdm660_gdscs[] = {
2418     [UFS_GDSC] = &ufs_gdsc,
2419     [USB_30_GDSC] = &usb_30_gdsc,
2420     [PCIE_0_GDSC] = &pcie_0_gdsc,
2421 };
2422 
2423 static const struct qcom_reset_map gcc_sdm660_resets[] = {
2424     [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
2425     [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
2426     [GCC_UFS_BCR] = { 0x75000 },
2427     [GCC_USB3_DP_PHY_BCR] = { 0x50028 },
2428     [GCC_USB3_PHY_BCR] = { 0x50020 },
2429     [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
2430     [GCC_USB_20_BCR] = { 0x2f000 },
2431     [GCC_USB_30_BCR] = { 0xf000 },
2432     [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
2433     [GCC_MSS_RESTART] = { 0x79000 },
2434 };
2435 
2436 static const struct regmap_config gcc_sdm660_regmap_config = {
2437     .reg_bits   = 32,
2438     .reg_stride = 4,
2439     .val_bits   = 32,
2440     .max_register   = 0x94000,
2441     .fast_io    = true,
2442 };
2443 
2444 static const struct qcom_cc_desc gcc_sdm660_desc = {
2445     .config = &gcc_sdm660_regmap_config,
2446     .clks = gcc_sdm660_clocks,
2447     .num_clks = ARRAY_SIZE(gcc_sdm660_clocks),
2448     .resets = gcc_sdm660_resets,
2449     .num_resets = ARRAY_SIZE(gcc_sdm660_resets),
2450     .gdscs = gcc_sdm660_gdscs,
2451     .num_gdscs = ARRAY_SIZE(gcc_sdm660_gdscs),
2452     .clk_hws = gcc_sdm660_hws,
2453     .num_clk_hws = ARRAY_SIZE(gcc_sdm660_hws),
2454 };
2455 
2456 static const struct of_device_id gcc_sdm660_match_table[] = {
2457     { .compatible = "qcom,gcc-sdm630" },
2458     { .compatible = "qcom,gcc-sdm660" },
2459     { }
2460 };
2461 MODULE_DEVICE_TABLE(of, gcc_sdm660_match_table);
2462 
2463 static int gcc_sdm660_probe(struct platform_device *pdev)
2464 {
2465     int ret;
2466     struct regmap *regmap;
2467 
2468     regmap = qcom_cc_map(pdev, &gcc_sdm660_desc);
2469     if (IS_ERR(regmap))
2470         return PTR_ERR(regmap);
2471 
2472     /*
2473      * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
2474      * turned off by hardware during certain apps low power modes.
2475      */
2476     ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
2477     if (ret)
2478         return ret;
2479 
2480     return qcom_cc_really_probe(pdev, &gcc_sdm660_desc, regmap);
2481 }
2482 
2483 static struct platform_driver gcc_sdm660_driver = {
2484     .probe      = gcc_sdm660_probe,
2485     .driver     = {
2486         .name   = "gcc-sdm660",
2487         .of_match_table = gcc_sdm660_match_table,
2488     },
2489 };
2490 
2491 static int __init gcc_sdm660_init(void)
2492 {
2493     return platform_driver_register(&gcc_sdm660_driver);
2494 }
2495 core_initcall_sync(gcc_sdm660_init);
2496 
2497 static void __exit gcc_sdm660_exit(void)
2498 {
2499     platform_driver_unregister(&gcc_sdm660_driver);
2500 }
2501 module_exit(gcc_sdm660_exit);
2502 
2503 MODULE_LICENSE("GPL v2");
2504 MODULE_DESCRIPTION("QCOM GCC sdm660 Driver");