Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2021, Qualcomm Innovation Center, Inc. All rights reserved.
0004  */
0005 
0006 #include <linux/clk-provider.h>
0007 #include <linux/err.h>
0008 #include <linux/kernel.h>
0009 #include <linux/module.h>
0010 #include <linux/of_device.h>
0011 #include <linux/of.h>
0012 #include <linux/regmap.h>
0013 
0014 #include <dt-bindings/clock/qcom,gcc-sdx65.h>
0015 
0016 #include "clk-alpha-pll.h"
0017 #include "clk-branch.h"
0018 #include "clk-rcg.h"
0019 #include "clk-regmap.h"
0020 #include "clk-regmap-divider.h"
0021 #include "clk-regmap-mux.h"
0022 #include "common.h"
0023 #include "gdsc.h"
0024 #include "reset.h"
0025 
0026 enum {
0027     P_BI_TCXO,
0028     P_GPLL0_OUT_EVEN,
0029     P_GPLL0_OUT_MAIN,
0030     P_PCIE_PIPE_CLK,
0031     P_SLEEP_CLK,
0032     P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
0033 };
0034 
0035 static struct clk_alpha_pll gpll0 = {
0036     .offset = 0x0,
0037     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
0038     .clkr = {
0039         .enable_reg = 0x6d000,
0040         .enable_mask = BIT(0),
0041         .hw.init = &(struct clk_init_data){
0042             .name = "gpll0",
0043             .parent_data = &(const struct clk_parent_data){
0044                 .fw_name = "bi_tcxo",
0045             },
0046             .num_parents = 1,
0047             .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
0048         },
0049     },
0050 };
0051 
0052 static const struct clk_div_table post_div_table_gpll0_out_even[] = {
0053     { 0x1, 2 },
0054     { }
0055 };
0056 
0057 static struct clk_alpha_pll_postdiv gpll0_out_even = {
0058     .offset = 0x0,
0059     .post_div_shift = 10,
0060     .post_div_table = post_div_table_gpll0_out_even,
0061     .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
0062     .width = 4,
0063     .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
0064     .clkr.hw.init = &(struct clk_init_data){
0065         .name = "gpll0_out_even",
0066         .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
0067         .num_parents = 1,
0068         .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
0069     },
0070 };
0071 
0072 static const struct parent_map gcc_parent_map_0[] = {
0073     { P_BI_TCXO, 0 },
0074     { P_GPLL0_OUT_MAIN, 1 },
0075     { P_GPLL0_OUT_EVEN, 6 },
0076 };
0077 
0078 static const struct clk_parent_data gcc_parent_data_0[] = {
0079     { .fw_name = "bi_tcxo" },
0080     { .hw = &gpll0.clkr.hw },
0081     { .hw = &gpll0_out_even.clkr.hw },
0082 };
0083 
0084 static const struct clk_parent_data gcc_parent_data_0_ao[] = {
0085     { .fw_name = "bi_tcxo_ao" },
0086     { .hw = &gpll0.clkr.hw },
0087     { .hw = &gpll0_out_even.clkr.hw },
0088 };
0089 
0090 static const struct parent_map gcc_parent_map_2[] = {
0091     { P_BI_TCXO, 0 },
0092     { P_GPLL0_OUT_MAIN, 1 },
0093     { P_SLEEP_CLK, 5 },
0094     { P_GPLL0_OUT_EVEN, 6 },
0095 };
0096 
0097 static const struct clk_parent_data gcc_parent_data_2[] = {
0098     { .fw_name = "bi_tcxo" },
0099     { .hw = &gpll0.clkr.hw },
0100     { .fw_name = "sleep_clk" },
0101     { .hw = &gpll0_out_even.clkr.hw },
0102 };
0103 
0104 static const struct parent_map gcc_parent_map_3[] = {
0105     { P_BI_TCXO, 0 },
0106     { P_SLEEP_CLK, 5 },
0107 };
0108 
0109 static const struct clk_parent_data gcc_parent_data_3[] = {
0110     { .fw_name = "bi_tcxo" },
0111     { .fw_name = "sleep_clk" },
0112 };
0113 
0114 static const struct parent_map gcc_parent_map_4[] = {
0115     { P_BI_TCXO, 2 },
0116 };
0117 
0118 static const struct parent_map gcc_parent_map_5[] = {
0119     { P_PCIE_PIPE_CLK, 0 },
0120     { P_BI_TCXO, 2 },
0121 };
0122 
0123 static const struct clk_parent_data gcc_parent_data_5[] = {
0124     { .fw_name = "pcie_pipe_clk"},
0125     { .fw_name = "bi_tcxo"},
0126 };
0127 
0128 static const struct parent_map gcc_parent_map_6[] = {
0129     { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
0130     { P_BI_TCXO, 2 },
0131 };
0132 
0133 static const struct clk_parent_data gcc_parent_data_6[] = {
0134     { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk"},
0135     { .fw_name = "bi_tcxo"},
0136 };
0137 
0138 static struct clk_regmap_mux gcc_pcie_aux_clk_src = {
0139     .reg = 0x43060,
0140     .shift = 0,
0141     .width = 2,
0142     .parent_map = gcc_parent_map_4,
0143     .clkr = {
0144         .hw.init = &(struct clk_init_data){
0145             .name = "gcc_pcie_aux_clk_src",
0146             .parent_data = &(const struct clk_parent_data){
0147                 .fw_name = "bi_tcxo",
0148             },
0149             .num_parents = 1,
0150             .ops = &clk_regmap_mux_closest_ops,
0151         },
0152     },
0153 };
0154 
0155 static struct clk_regmap_mux gcc_pcie_pipe_clk_src = {
0156     .reg = 0x43044,
0157     .shift = 0,
0158     .width = 2,
0159     .parent_map = gcc_parent_map_5,
0160     .clkr = {
0161         .hw.init = &(struct clk_init_data){
0162             .name = "gcc_pcie_pipe_clk_src",
0163             .parent_data = gcc_parent_data_5,
0164             .num_parents = 2,
0165             .ops = &clk_regmap_mux_closest_ops,
0166         },
0167     },
0168 };
0169 
0170 static struct clk_regmap_mux gcc_usb3_phy_pipe_clk_src = {
0171     .reg = 0x1706c,
0172     .shift = 0,
0173     .width = 2,
0174     .parent_map = gcc_parent_map_6,
0175     .clkr = {
0176         .hw.init = &(struct clk_init_data){
0177             .name = "gcc_usb3_phy_pipe_clk_src",
0178             .parent_data = gcc_parent_data_6,
0179             .num_parents = 2,
0180             .ops = &clk_regmap_mux_closest_ops,
0181         },
0182     },
0183 };
0184 
0185 static const struct freq_tbl ftbl_gcc_blsp1_qup1_i2c_apps_clk_src[] = {
0186     F(9600000, P_BI_TCXO, 2, 0, 0),
0187     F(19200000, P_BI_TCXO, 1, 0, 0),
0188     F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
0189     { }
0190 };
0191 
0192 static struct clk_rcg2 gcc_blsp1_qup1_i2c_apps_clk_src = {
0193     .cmd_rcgr = 0x1c024,
0194     .mnd_width = 8,
0195     .hid_width = 5,
0196     .parent_map = gcc_parent_map_0,
0197     .freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
0198     .clkr.hw.init = &(struct clk_init_data){
0199         .name = "gcc_blsp1_qup1_i2c_apps_clk_src",
0200         .parent_data = gcc_parent_data_0,
0201         .num_parents = 3,
0202         .flags = CLK_SET_RATE_PARENT,
0203         .ops = &clk_rcg2_ops,
0204     },
0205 };
0206 
0207 static const struct freq_tbl ftbl_gcc_blsp1_qup1_spi_apps_clk_src[] = {
0208     F(960000, P_BI_TCXO, 10, 1, 2),
0209     F(4800000, P_BI_TCXO, 4, 0, 0),
0210     F(9600000, P_BI_TCXO, 2, 0, 0),
0211     F(15000000, P_GPLL0_OUT_EVEN, 5, 1, 4),
0212     F(19200000, P_BI_TCXO, 1, 0, 0),
0213     F(24000000, P_GPLL0_OUT_MAIN, 12.5, 1, 2),
0214     F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
0215     F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
0216     { }
0217 };
0218 
0219 static struct clk_rcg2 gcc_blsp1_qup1_spi_apps_clk_src = {
0220     .cmd_rcgr = 0x1c00c,
0221     .mnd_width = 8,
0222     .hid_width = 5,
0223     .parent_map = gcc_parent_map_0,
0224     .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
0225     .clkr.hw.init = &(struct clk_init_data){
0226         .name = "gcc_blsp1_qup1_spi_apps_clk_src",
0227         .parent_data = gcc_parent_data_0,
0228         .num_parents = 3,
0229         .flags = CLK_SET_RATE_PARENT,
0230         .ops = &clk_rcg2_ops,
0231     },
0232 };
0233 
0234 static struct clk_rcg2 gcc_blsp1_qup2_i2c_apps_clk_src = {
0235     .cmd_rcgr = 0x1e024,
0236     .mnd_width = 8,
0237     .hid_width = 5,
0238     .parent_map = gcc_parent_map_0,
0239     .freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
0240     .clkr.hw.init = &(struct clk_init_data){
0241         .name = "gcc_blsp1_qup2_i2c_apps_clk_src",
0242         .parent_data = gcc_parent_data_0,
0243         .num_parents = 3,
0244         .flags = CLK_SET_RATE_PARENT,
0245         .ops = &clk_rcg2_ops,
0246     },
0247 };
0248 
0249 static struct clk_rcg2 gcc_blsp1_qup2_spi_apps_clk_src = {
0250     .cmd_rcgr = 0x1e00c,
0251     .mnd_width = 8,
0252     .hid_width = 5,
0253     .parent_map = gcc_parent_map_0,
0254     .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
0255     .clkr.hw.init = &(struct clk_init_data){
0256         .name = "gcc_blsp1_qup2_spi_apps_clk_src",
0257         .parent_data = gcc_parent_data_0,
0258         .num_parents = 3,
0259         .flags = CLK_SET_RATE_PARENT,
0260         .ops = &clk_rcg2_ops,
0261     },
0262 };
0263 
0264 static struct clk_rcg2 gcc_blsp1_qup3_i2c_apps_clk_src = {
0265     .cmd_rcgr = 0x20024,
0266     .mnd_width = 8,
0267     .hid_width = 5,
0268     .parent_map = gcc_parent_map_0,
0269     .freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
0270     .clkr.hw.init = &(struct clk_init_data){
0271         .name = "gcc_blsp1_qup3_i2c_apps_clk_src",
0272         .parent_data = gcc_parent_data_0,
0273         .num_parents = 3,
0274         .flags = CLK_SET_RATE_PARENT,
0275         .ops = &clk_rcg2_ops,
0276     },
0277 };
0278 
0279 static struct clk_rcg2 gcc_blsp1_qup3_spi_apps_clk_src = {
0280     .cmd_rcgr = 0x2000c,
0281     .mnd_width = 8,
0282     .hid_width = 5,
0283     .parent_map = gcc_parent_map_0,
0284     .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
0285     .clkr.hw.init = &(struct clk_init_data){
0286         .name = "gcc_blsp1_qup3_spi_apps_clk_src",
0287         .parent_data = gcc_parent_data_0,
0288         .num_parents = 3,
0289         .flags = CLK_SET_RATE_PARENT,
0290         .ops = &clk_rcg2_ops,
0291     },
0292 };
0293 
0294 static struct clk_rcg2 gcc_blsp1_qup4_i2c_apps_clk_src = {
0295     .cmd_rcgr = 0x22024,
0296     .mnd_width = 8,
0297     .hid_width = 5,
0298     .parent_map = gcc_parent_map_0,
0299     .freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
0300     .clkr.hw.init = &(struct clk_init_data){
0301         .name = "gcc_blsp1_qup4_i2c_apps_clk_src",
0302         .parent_data = gcc_parent_data_0,
0303         .num_parents = 3,
0304         .flags = CLK_SET_RATE_PARENT,
0305         .ops = &clk_rcg2_ops,
0306     },
0307 };
0308 
0309 static struct clk_rcg2 gcc_blsp1_qup4_spi_apps_clk_src = {
0310     .cmd_rcgr = 0x2200c,
0311     .mnd_width = 8,
0312     .hid_width = 5,
0313     .parent_map = gcc_parent_map_0,
0314     .freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
0315     .clkr.hw.init = &(struct clk_init_data){
0316         .name = "gcc_blsp1_qup4_spi_apps_clk_src",
0317         .parent_data = gcc_parent_data_0,
0318         .num_parents = 3,
0319         .flags = CLK_SET_RATE_PARENT,
0320         .ops = &clk_rcg2_ops,
0321     },
0322 };
0323 
0324 static const struct freq_tbl ftbl_gcc_blsp1_uart1_apps_clk_src[] = {
0325     F(3686400, P_GPLL0_OUT_EVEN, 1, 192, 15625),
0326     F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
0327     F(9600000, P_BI_TCXO, 2, 0, 0),
0328     F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
0329     F(16000000, P_GPLL0_OUT_EVEN, 1, 4, 75),
0330     F(19200000, P_BI_TCXO, 1, 0, 0),
0331     F(19354839, P_GPLL0_OUT_MAIN, 15.5, 1, 2),
0332     F(20000000, P_GPLL0_OUT_MAIN, 15, 1, 2),
0333     F(20689655, P_GPLL0_OUT_MAIN, 14.5, 1, 2),
0334     F(21428571, P_GPLL0_OUT_MAIN, 14, 1, 2),
0335     F(22222222, P_GPLL0_OUT_MAIN, 13.5, 1, 2),
0336     F(23076923, P_GPLL0_OUT_MAIN, 13, 1, 2),
0337     F(24000000, P_GPLL0_OUT_MAIN, 5, 1, 5),
0338     F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
0339     F(26086957, P_GPLL0_OUT_MAIN, 11.5, 1, 2),
0340     F(27272727, P_GPLL0_OUT_MAIN, 11, 1, 2),
0341     F(28571429, P_GPLL0_OUT_MAIN, 10.5, 1, 2),
0342     F(32000000, P_GPLL0_OUT_MAIN, 1, 4, 75),
0343     F(40000000, P_GPLL0_OUT_MAIN, 15, 0, 0),
0344     F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 375),
0345     F(48000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
0346     F(51200000, P_GPLL0_OUT_MAIN, 1, 32, 375),
0347     F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 75),
0348     F(58982400, P_GPLL0_OUT_MAIN, 1, 1536, 15625),
0349     F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
0350     F(63157895, P_GPLL0_OUT_MAIN, 9.5, 0, 0),
0351     { }
0352 };
0353 
0354 static struct clk_rcg2 gcc_blsp1_uart1_apps_clk_src = {
0355     .cmd_rcgr = 0x1d00c,
0356     .mnd_width = 16,
0357     .hid_width = 5,
0358     .parent_map = gcc_parent_map_0,
0359     .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
0360     .clkr.hw.init = &(struct clk_init_data){
0361         .name = "gcc_blsp1_uart1_apps_clk_src",
0362         .parent_data = gcc_parent_data_0,
0363         .num_parents = 3,
0364         .flags = CLK_SET_RATE_PARENT,
0365         .ops = &clk_rcg2_ops,
0366     },
0367 };
0368 
0369 static struct clk_rcg2 gcc_blsp1_uart2_apps_clk_src = {
0370     .cmd_rcgr = 0x1f00c,
0371     .mnd_width = 16,
0372     .hid_width = 5,
0373     .parent_map = gcc_parent_map_0,
0374     .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
0375     .clkr.hw.init = &(struct clk_init_data){
0376         .name = "gcc_blsp1_uart2_apps_clk_src",
0377         .parent_data = gcc_parent_data_0,
0378         .num_parents = 3,
0379         .flags = CLK_SET_RATE_PARENT,
0380         .ops = &clk_rcg2_ops,
0381     },
0382 };
0383 
0384 static struct clk_rcg2 gcc_blsp1_uart3_apps_clk_src = {
0385     .cmd_rcgr = 0x2100c,
0386     .mnd_width = 16,
0387     .hid_width = 5,
0388     .parent_map = gcc_parent_map_0,
0389     .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
0390     .clkr.hw.init = &(struct clk_init_data){
0391         .name = "gcc_blsp1_uart3_apps_clk_src",
0392         .parent_data = gcc_parent_data_0,
0393         .num_parents = 3,
0394         .flags = CLK_SET_RATE_PARENT,
0395         .ops = &clk_rcg2_ops,
0396     },
0397 };
0398 
0399 static struct clk_rcg2 gcc_blsp1_uart4_apps_clk_src = {
0400     .cmd_rcgr = 0x2300c,
0401     .mnd_width = 16,
0402     .hid_width = 5,
0403     .parent_map = gcc_parent_map_0,
0404     .freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
0405     .clkr.hw.init = &(struct clk_init_data){
0406         .name = "gcc_blsp1_uart4_apps_clk_src",
0407         .parent_data = gcc_parent_data_0,
0408         .num_parents = 3,
0409         .flags = CLK_SET_RATE_PARENT,
0410         .ops = &clk_rcg2_ops,
0411     },
0412 };
0413 
0414 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
0415     F(19200000, P_BI_TCXO, 1, 0, 0),
0416     F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
0417     F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
0418     F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
0419     { }
0420 };
0421 
0422 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
0423     .cmd_rcgr = 0x3000c,
0424     .mnd_width = 0,
0425     .hid_width = 5,
0426     .parent_map = gcc_parent_map_0,
0427     .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
0428     .clkr.hw.init = &(struct clk_init_data){
0429         .name = "gcc_cpuss_ahb_clk_src",
0430         .parent_data = gcc_parent_data_0_ao,
0431         .num_parents = 3,
0432         .flags = CLK_SET_RATE_PARENT,
0433         .ops = &clk_rcg2_ops,
0434     },
0435 };
0436 
0437 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
0438     F(19200000, P_BI_TCXO, 1, 0, 0),
0439     F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
0440     F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
0441     F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
0442     { }
0443 };
0444 
0445 static struct clk_rcg2 gcc_gp1_clk_src = {
0446     .cmd_rcgr = 0x37004,
0447     .mnd_width = 16,
0448     .hid_width = 5,
0449     .parent_map = gcc_parent_map_2,
0450     .freq_tbl = ftbl_gcc_gp1_clk_src,
0451     .clkr.hw.init = &(struct clk_init_data){
0452         .name = "gcc_gp1_clk_src",
0453         .parent_data = gcc_parent_data_2,
0454         .num_parents = 4,
0455         .flags = CLK_SET_RATE_PARENT,
0456         .ops = &clk_rcg2_ops,
0457     },
0458 };
0459 
0460 static struct clk_rcg2 gcc_gp2_clk_src = {
0461     .cmd_rcgr = 0x38004,
0462     .mnd_width = 16,
0463     .hid_width = 5,
0464     .parent_map = gcc_parent_map_2,
0465     .freq_tbl = ftbl_gcc_gp1_clk_src,
0466     .clkr.hw.init = &(struct clk_init_data){
0467         .name = "gcc_gp2_clk_src",
0468         .parent_data = gcc_parent_data_2,
0469         .num_parents = 4,
0470         .flags = CLK_SET_RATE_PARENT,
0471         .ops = &clk_rcg2_ops,
0472     },
0473 };
0474 
0475 static struct clk_rcg2 gcc_gp3_clk_src = {
0476     .cmd_rcgr = 0x39004,
0477     .mnd_width = 16,
0478     .hid_width = 5,
0479     .parent_map = gcc_parent_map_2,
0480     .freq_tbl = ftbl_gcc_gp1_clk_src,
0481     .clkr.hw.init = &(struct clk_init_data){
0482         .name = "gcc_gp3_clk_src",
0483         .parent_data = gcc_parent_data_2,
0484         .num_parents = 4,
0485         .flags = CLK_SET_RATE_PARENT,
0486         .ops = &clk_rcg2_ops,
0487     },
0488 };
0489 
0490 static const struct freq_tbl ftbl_gcc_pcie_aux_phy_clk_src[] = {
0491     F(19200000, P_BI_TCXO, 1, 0, 0),
0492     { }
0493 };
0494 
0495 static struct clk_rcg2 gcc_pcie_aux_phy_clk_src = {
0496     .cmd_rcgr = 0x43048,
0497     .mnd_width = 16,
0498     .hid_width = 5,
0499     .parent_map = gcc_parent_map_3,
0500     .freq_tbl = ftbl_gcc_pcie_aux_phy_clk_src,
0501     .clkr.hw.init = &(struct clk_init_data){
0502         .name = "gcc_pcie_aux_phy_clk_src",
0503         .parent_data = gcc_parent_data_3,
0504         .num_parents = 2,
0505         .flags = CLK_SET_RATE_PARENT,
0506         .ops = &clk_rcg2_ops,
0507     },
0508 };
0509 
0510 static const struct freq_tbl ftbl_gcc_pcie_rchng_phy_clk_src[] = {
0511     F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
0512     { }
0513 };
0514 
0515 static struct clk_rcg2 gcc_pcie_rchng_phy_clk_src = {
0516     .cmd_rcgr = 0x43064,
0517     .mnd_width = 0,
0518     .hid_width = 5,
0519     .parent_map = gcc_parent_map_2,
0520     .freq_tbl = ftbl_gcc_pcie_rchng_phy_clk_src,
0521     .clkr.hw.init = &(struct clk_init_data){
0522         .name = "gcc_pcie_rchng_phy_clk_src",
0523         .parent_data = gcc_parent_data_2,
0524         .num_parents = 4,
0525         .flags = CLK_SET_RATE_PARENT,
0526         .ops = &clk_rcg2_ops,
0527     },
0528 };
0529 
0530 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
0531     F(19200000, P_BI_TCXO, 1, 0, 0),
0532     F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
0533     { }
0534 };
0535 
0536 static struct clk_rcg2 gcc_pdm2_clk_src = {
0537     .cmd_rcgr = 0x24010,
0538     .mnd_width = 0,
0539     .hid_width = 5,
0540     .parent_map = gcc_parent_map_0,
0541     .freq_tbl = ftbl_gcc_pdm2_clk_src,
0542     .clkr.hw.init = &(struct clk_init_data){
0543         .name = "gcc_pdm2_clk_src",
0544         .parent_data = gcc_parent_data_0,
0545         .num_parents = 3,
0546         .flags = CLK_SET_RATE_PARENT,
0547         .ops = &clk_rcg2_ops,
0548     },
0549 };
0550 
0551 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
0552     F(400000, P_BI_TCXO, 12, 1, 4),
0553     F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
0554     F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
0555     F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
0556     F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
0557     { }
0558 };
0559 
0560 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
0561     .cmd_rcgr = 0x1a010,
0562     .mnd_width = 8,
0563     .hid_width = 5,
0564     .parent_map = gcc_parent_map_0,
0565     .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
0566     .clkr.hw.init = &(struct clk_init_data){
0567         .name = "gcc_sdcc1_apps_clk_src",
0568         .parent_data = gcc_parent_data_0,
0569         .num_parents = 3,
0570         .flags = CLK_SET_RATE_PARENT,
0571         .ops = &clk_rcg2_ops,
0572     },
0573 };
0574 
0575 static const struct freq_tbl ftbl_gcc_usb30_master_clk_src[] = {
0576     F(200000000, P_GPLL0_OUT_EVEN, 1.5, 0, 0),
0577     { }
0578 };
0579 
0580 static struct clk_rcg2 gcc_usb30_master_clk_src = {
0581     .cmd_rcgr = 0x17030,
0582     .mnd_width = 8,
0583     .hid_width = 5,
0584     .parent_map = gcc_parent_map_0,
0585     .freq_tbl = ftbl_gcc_usb30_master_clk_src,
0586     .clkr.hw.init = &(struct clk_init_data){
0587         .name = "gcc_usb30_master_clk_src",
0588         .parent_data = gcc_parent_data_0,
0589         .num_parents = 3,
0590         .flags = CLK_SET_RATE_PARENT,
0591         .ops = &clk_rcg2_ops,
0592     },
0593 };
0594 
0595 static struct clk_rcg2 gcc_usb30_mock_utmi_clk_src = {
0596     .cmd_rcgr = 0x17048,
0597     .mnd_width = 0,
0598     .hid_width = 5,
0599     .parent_map = gcc_parent_map_0,
0600     .freq_tbl = ftbl_gcc_pcie_aux_phy_clk_src,
0601     .clkr.hw.init = &(struct clk_init_data){
0602         .name = "gcc_usb30_mock_utmi_clk_src",
0603         .parent_data = gcc_parent_data_0,
0604         .num_parents = 3,
0605         .flags = CLK_SET_RATE_PARENT,
0606         .ops = &clk_rcg2_ops,
0607     },
0608 };
0609 
0610 static const struct freq_tbl ftbl_gcc_usb3_phy_aux_clk_src[] = {
0611     F(1000000, P_BI_TCXO, 1, 5, 96),
0612     F(19200000, P_BI_TCXO, 1, 0, 0),
0613     { }
0614 };
0615 
0616 static struct clk_rcg2 gcc_usb3_phy_aux_clk_src = {
0617     .cmd_rcgr = 0x17070,
0618     .mnd_width = 16,
0619     .hid_width = 5,
0620     .parent_map = gcc_parent_map_3,
0621     .freq_tbl = ftbl_gcc_usb3_phy_aux_clk_src,
0622     .clkr.hw.init = &(struct clk_init_data){
0623         .name = "gcc_usb3_phy_aux_clk_src",
0624         .parent_data = gcc_parent_data_3,
0625         .num_parents = 2,
0626         .flags = CLK_SET_RATE_PARENT,
0627         .ops = &clk_rcg2_ops,
0628     },
0629 };
0630 
0631 static struct clk_regmap_div gcc_cpuss_ahb_postdiv_clk_src = {
0632     .reg = 0x30024,
0633     .shift = 0,
0634     .width = 4,
0635     .clkr.hw.init = &(struct clk_init_data) {
0636         .name = "gcc_cpuss_ahb_postdiv_clk_src",
0637         .parent_data = &(const struct clk_parent_data){
0638             .hw = &gcc_cpuss_ahb_clk_src.clkr.hw,
0639         },
0640         .num_parents = 1,
0641         .flags = CLK_SET_RATE_PARENT,
0642         .ops = &clk_regmap_div_ro_ops,
0643     },
0644 };
0645 
0646 static struct clk_regmap_div gcc_usb30_mock_utmi_postdiv_clk_src = {
0647     .reg = 0x17060,
0648     .shift = 0,
0649     .width = 4,
0650     .clkr.hw.init = &(struct clk_init_data) {
0651         .name = "gcc_usb30_mock_utmi_postdiv_clk_src",
0652         .parent_data = &(const struct clk_parent_data){
0653             .hw = &gcc_usb30_mock_utmi_clk_src.clkr.hw,
0654         },
0655         .num_parents = 1,
0656         .flags = CLK_SET_RATE_PARENT,
0657         .ops = &clk_regmap_div_ro_ops,
0658     },
0659 };
0660 
0661 static struct clk_branch gcc_ahb_pcie_link_clk = {
0662     .halt_reg = 0x2e004,
0663     .halt_check = BRANCH_HALT,
0664     .clkr = {
0665         .enable_reg = 0x2e004,
0666         .enable_mask = BIT(0),
0667         .hw.init = &(struct clk_init_data){
0668             .name = "gcc_ahb_pcie_link_clk",
0669             .ops = &clk_branch2_ops,
0670         },
0671     },
0672 };
0673 
0674 static struct clk_branch gcc_blsp1_ahb_clk = {
0675     .halt_reg = 0x1b004,
0676     .halt_check = BRANCH_HALT_VOTED,
0677     .clkr = {
0678         .enable_reg = 0x6d008,
0679         .enable_mask = BIT(14),
0680         .hw.init = &(struct clk_init_data){
0681             .name = "gcc_blsp1_ahb_clk",
0682             .ops = &clk_branch2_ops,
0683         },
0684     },
0685 };
0686 
0687 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
0688     .halt_reg = 0x1c008,
0689     .halt_check = BRANCH_HALT,
0690     .clkr = {
0691         .enable_reg = 0x1c008,
0692         .enable_mask = BIT(0),
0693         .hw.init = &(struct clk_init_data){
0694             .name = "gcc_blsp1_qup1_i2c_apps_clk",
0695             .parent_data = &(const struct clk_parent_data){
0696                 .hw = &gcc_blsp1_qup1_i2c_apps_clk_src.clkr.hw,
0697             },
0698             .num_parents = 1,
0699             .flags = CLK_SET_RATE_PARENT,
0700             .ops = &clk_branch2_ops,
0701         },
0702     },
0703 };
0704 
0705 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
0706     .halt_reg = 0x1c004,
0707     .halt_check = BRANCH_HALT,
0708     .clkr = {
0709         .enable_reg = 0x1c004,
0710         .enable_mask = BIT(0),
0711         .hw.init = &(struct clk_init_data){
0712             .name = "gcc_blsp1_qup1_spi_apps_clk",
0713             .parent_data = &(const struct clk_parent_data){
0714                 .hw = &gcc_blsp1_qup1_spi_apps_clk_src.clkr.hw,
0715             },
0716             .num_parents = 1,
0717             .flags = CLK_SET_RATE_PARENT,
0718             .ops = &clk_branch2_ops,
0719         },
0720     },
0721 };
0722 
0723 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
0724     .halt_reg = 0x1e008,
0725     .halt_check = BRANCH_HALT,
0726     .clkr = {
0727         .enable_reg = 0x1e008,
0728         .enable_mask = BIT(0),
0729         .hw.init = &(struct clk_init_data){
0730             .name = "gcc_blsp1_qup2_i2c_apps_clk",
0731             .parent_data = &(const struct clk_parent_data){
0732                 .hw = &gcc_blsp1_qup2_i2c_apps_clk_src.clkr.hw,
0733             },
0734             .num_parents = 1,
0735             .flags = CLK_SET_RATE_PARENT,
0736             .ops = &clk_branch2_ops,
0737         },
0738     },
0739 };
0740 
0741 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
0742     .halt_reg = 0x1e004,
0743     .halt_check = BRANCH_HALT,
0744     .clkr = {
0745         .enable_reg = 0x1e004,
0746         .enable_mask = BIT(0),
0747         .hw.init = &(struct clk_init_data){
0748             .name = "gcc_blsp1_qup2_spi_apps_clk",
0749             .parent_data = &(const struct clk_parent_data){
0750                 .hw = &gcc_blsp1_qup2_spi_apps_clk_src.clkr.hw,
0751             },
0752             .num_parents = 1,
0753             .flags = CLK_SET_RATE_PARENT,
0754             .ops = &clk_branch2_ops,
0755         },
0756     },
0757 };
0758 
0759 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
0760     .halt_reg = 0x20008,
0761     .halt_check = BRANCH_HALT,
0762     .clkr = {
0763         .enable_reg = 0x20008,
0764         .enable_mask = BIT(0),
0765         .hw.init = &(struct clk_init_data){
0766             .name = "gcc_blsp1_qup3_i2c_apps_clk",
0767             .parent_data = &(const struct clk_parent_data){
0768                 .hw = &gcc_blsp1_qup3_i2c_apps_clk_src.clkr.hw,
0769             },
0770             .num_parents = 1,
0771             .flags = CLK_SET_RATE_PARENT,
0772             .ops = &clk_branch2_ops,
0773         },
0774     },
0775 };
0776 
0777 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
0778     .halt_reg = 0x20004,
0779     .halt_check = BRANCH_HALT,
0780     .clkr = {
0781         .enable_reg = 0x20004,
0782         .enable_mask = BIT(0),
0783         .hw.init = &(struct clk_init_data){
0784             .name = "gcc_blsp1_qup3_spi_apps_clk",
0785             .parent_data = &(const struct clk_parent_data){
0786                 .hw = &gcc_blsp1_qup3_spi_apps_clk_src.clkr.hw,
0787             },
0788             .num_parents = 1,
0789             .flags = CLK_SET_RATE_PARENT,
0790             .ops = &clk_branch2_ops,
0791         },
0792     },
0793 };
0794 
0795 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
0796     .halt_reg = 0x22008,
0797     .halt_check = BRANCH_HALT,
0798     .clkr = {
0799         .enable_reg = 0x22008,
0800         .enable_mask = BIT(0),
0801         .hw.init = &(struct clk_init_data){
0802             .name = "gcc_blsp1_qup4_i2c_apps_clk",
0803             .parent_data = &(const struct clk_parent_data){
0804                 .hw = &gcc_blsp1_qup4_i2c_apps_clk_src.clkr.hw,
0805             },
0806             .num_parents = 1,
0807             .flags = CLK_SET_RATE_PARENT,
0808             .ops = &clk_branch2_ops,
0809         },
0810     },
0811 };
0812 
0813 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
0814     .halt_reg = 0x22004,
0815     .halt_check = BRANCH_HALT,
0816     .clkr = {
0817         .enable_reg = 0x22004,
0818         .enable_mask = BIT(0),
0819         .hw.init = &(struct clk_init_data){
0820             .name = "gcc_blsp1_qup4_spi_apps_clk",
0821             .parent_data = &(const struct clk_parent_data){
0822                 .hw = &gcc_blsp1_qup4_spi_apps_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_blsp1_sleep_clk = {
0832     .halt_reg = 0x1b00c,
0833     .halt_check = BRANCH_HALT_VOTED,
0834     .clkr = {
0835         .enable_reg = 0x6d008,
0836         .enable_mask = BIT(15),
0837         .hw.init = &(struct clk_init_data){
0838             .name = "gcc_blsp1_sleep_clk",
0839             .ops = &clk_branch2_ops,
0840         },
0841     },
0842 };
0843 
0844 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
0845     .halt_reg = 0x1d004,
0846     .halt_check = BRANCH_HALT,
0847     .clkr = {
0848         .enable_reg = 0x1d004,
0849         .enable_mask = BIT(0),
0850         .hw.init = &(struct clk_init_data){
0851             .name = "gcc_blsp1_uart1_apps_clk",
0852             .parent_data = &(const struct clk_parent_data){
0853                 .hw = &gcc_blsp1_uart1_apps_clk_src.clkr.hw,
0854             },
0855             .num_parents = 1,
0856             .flags = CLK_SET_RATE_PARENT,
0857             .ops = &clk_branch2_ops,
0858         },
0859     },
0860 };
0861 
0862 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
0863     .halt_reg = 0x1f004,
0864     .halt_check = BRANCH_HALT,
0865     .clkr = {
0866         .enable_reg = 0x1f004,
0867         .enable_mask = BIT(0),
0868         .hw.init = &(struct clk_init_data){
0869             .name = "gcc_blsp1_uart2_apps_clk",
0870             .parent_data = &(const struct clk_parent_data){
0871                 .hw = &gcc_blsp1_uart2_apps_clk_src.clkr.hw,
0872             },
0873             .num_parents = 1,
0874             .flags = CLK_SET_RATE_PARENT,
0875             .ops = &clk_branch2_ops,
0876         },
0877     },
0878 };
0879 
0880 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
0881     .halt_reg = 0x21004,
0882     .halt_check = BRANCH_HALT,
0883     .clkr = {
0884         .enable_reg = 0x21004,
0885         .enable_mask = BIT(0),
0886         .hw.init = &(struct clk_init_data){
0887             .name = "gcc_blsp1_uart3_apps_clk",
0888             .parent_data = &(const struct clk_parent_data){
0889                 .hw = &gcc_blsp1_uart3_apps_clk_src.clkr.hw,
0890             },
0891             .num_parents = 1,
0892             .flags = CLK_SET_RATE_PARENT,
0893             .ops = &clk_branch2_ops,
0894         },
0895     },
0896 };
0897 
0898 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
0899     .halt_reg = 0x23004,
0900     .halt_check = BRANCH_HALT,
0901     .clkr = {
0902         .enable_reg = 0x23004,
0903         .enable_mask = BIT(0),
0904         .hw.init = &(struct clk_init_data){
0905             .name = "gcc_blsp1_uart4_apps_clk",
0906             .parent_data = &(const struct clk_parent_data){
0907                 .hw = &gcc_blsp1_uart4_apps_clk_src.clkr.hw,
0908             },
0909             .num_parents = 1,
0910             .flags = CLK_SET_RATE_PARENT,
0911             .ops = &clk_branch2_ops,
0912         },
0913     },
0914 };
0915 
0916 static struct clk_branch gcc_boot_rom_ahb_clk = {
0917     .halt_reg = 0x27004,
0918     .halt_check = BRANCH_HALT_VOTED,
0919     .hwcg_reg = 0x27004,
0920     .hwcg_bit = 1,
0921     .clkr = {
0922         .enable_reg = 0x6d008,
0923         .enable_mask = BIT(10),
0924         .hw.init = &(struct clk_init_data){
0925             .name = "gcc_boot_rom_ahb_clk",
0926             .ops = &clk_branch2_ops,
0927         },
0928     },
0929 };
0930 
0931 static struct clk_branch gcc_gp1_clk = {
0932     .halt_reg = 0x37000,
0933     .halt_check = BRANCH_HALT,
0934     .clkr = {
0935         .enable_reg = 0x37000,
0936         .enable_mask = BIT(0),
0937         .hw.init = &(struct clk_init_data){
0938             .name = "gcc_gp1_clk",
0939             .parent_data = &(const struct clk_parent_data){
0940                 .hw = &gcc_gp1_clk_src.clkr.hw,
0941             },
0942             .num_parents = 1,
0943             .flags = CLK_SET_RATE_PARENT,
0944             .ops = &clk_branch2_ops,
0945         },
0946     },
0947 };
0948 
0949 static struct clk_branch gcc_gp2_clk = {
0950     .halt_reg = 0x38000,
0951     .halt_check = BRANCH_HALT,
0952     .clkr = {
0953         .enable_reg = 0x38000,
0954         .enable_mask = BIT(0),
0955         .hw.init = &(struct clk_init_data){
0956             .name = "gcc_gp2_clk",
0957             .parent_data = &(const struct clk_parent_data){
0958                 .hw = &gcc_gp2_clk_src.clkr.hw,
0959             },
0960             .num_parents = 1,
0961             .flags = CLK_SET_RATE_PARENT,
0962             .ops = &clk_branch2_ops,
0963         },
0964     },
0965 };
0966 
0967 static struct clk_branch gcc_gp3_clk = {
0968     .halt_reg = 0x39000,
0969     .halt_check = BRANCH_HALT,
0970     .clkr = {
0971         .enable_reg = 0x39000,
0972         .enable_mask = BIT(0),
0973         .hw.init = &(struct clk_init_data){
0974             .name = "gcc_gp3_clk",
0975             .parent_data = &(const struct clk_parent_data){
0976                 .hw = &gcc_gp3_clk_src.clkr.hw,
0977             },
0978             .num_parents = 1,
0979             .flags = CLK_SET_RATE_PARENT,
0980             .ops = &clk_branch2_ops,
0981         },
0982     },
0983 };
0984 
0985 static struct clk_branch gcc_pcie_0_clkref_en = {
0986     .halt_reg = 0x88004,
0987     /*
0988      * The clock controller does not handle the status bit for
0989      * the clocks with gdscs(powerdomains) in hw controlled mode
0990      * and hence avoid checking for the status bit of those clocks
0991      * by setting the BRANCH_HALT_DELAY flag
0992      */
0993     .halt_check = BRANCH_HALT_DELAY,
0994     .clkr = {
0995         .enable_reg = 0x88004,
0996         .enable_mask = BIT(0),
0997         .hw.init = &(struct clk_init_data){
0998             .name = "gcc_pcie_0_clkref_en",
0999             .ops = &clk_branch2_ops,
1000         },
1001     },
1002 };
1003 
1004 static struct clk_branch gcc_pcie_aux_clk = {
1005     .halt_reg = 0x43034,
1006     /*
1007      * The clock controller does not handle the status bit for
1008      * the clocks with gdscs(powerdomains) in hw controlled mode
1009      * and hence avoid checking for the status bit of those clocks
1010      * by setting the BRANCH_HALT_DELAY flag
1011      */
1012     .halt_check = BRANCH_HALT_DELAY,
1013     .hwcg_reg = 0x43034,
1014     .hwcg_bit = 1,
1015     .clkr = {
1016         .enable_reg = 0x6d010,
1017         .enable_mask = BIT(3),
1018         .hw.init = &(struct clk_init_data){
1019             .name = "gcc_pcie_aux_clk",
1020             .parent_data = &(const struct clk_parent_data){
1021                 .hw = &gcc_pcie_aux_clk_src.clkr.hw,
1022             },
1023             .num_parents = 1,
1024             .flags = CLK_SET_RATE_PARENT,
1025             .ops = &clk_branch2_ops,
1026         },
1027     },
1028 };
1029 
1030 static struct clk_branch gcc_pcie_cfg_ahb_clk = {
1031     .halt_reg = 0x4302c,
1032     .halt_check = BRANCH_HALT_VOTED,
1033     .hwcg_reg = 0x4302c,
1034     .hwcg_bit = 1,
1035     .clkr = {
1036         .enable_reg = 0x6d010,
1037         .enable_mask = BIT(2),
1038         .hw.init = &(struct clk_init_data){
1039             .name = "gcc_pcie_cfg_ahb_clk",
1040             .ops = &clk_branch2_ops,
1041         },
1042     },
1043 };
1044 
1045 static struct clk_branch gcc_pcie_mstr_axi_clk = {
1046     .halt_reg = 0x43024,
1047     .halt_check = BRANCH_HALT_VOTED,
1048     .hwcg_reg = 0x43024,
1049     .hwcg_bit = 1,
1050     .clkr = {
1051         .enable_reg = 0x6d010,
1052         .enable_mask = BIT(1),
1053         .hw.init = &(struct clk_init_data){
1054             .name = "gcc_pcie_mstr_axi_clk",
1055             .ops = &clk_branch2_ops,
1056         },
1057     },
1058 };
1059 
1060 static struct clk_branch gcc_pcie_pipe_clk = {
1061     .halt_reg = 0x4303c,
1062     /*
1063      * The clock controller does not handle the status bit for
1064      * the clocks with gdscs(powerdomains) in hw controlled mode
1065      * and hence avoid checking for the status bit of those clocks
1066      * by setting the BRANCH_HALT_DELAY flag
1067      */
1068     .halt_check = BRANCH_HALT_DELAY,
1069     .hwcg_reg = 0x4303c,
1070     .hwcg_bit = 1,
1071     .clkr = {
1072         .enable_reg = 0x6d010,
1073         .enable_mask = BIT(4),
1074         .hw.init = &(struct clk_init_data){
1075             .name = "gcc_pcie_pipe_clk",
1076             .parent_data = &(const struct clk_parent_data){
1077                 .hw = &gcc_pcie_pipe_clk_src.clkr.hw,
1078             },
1079             .num_parents = 1,
1080             .flags = CLK_SET_RATE_PARENT,
1081             .ops = &clk_branch2_ops,
1082         },
1083     },
1084 };
1085 
1086 static struct clk_branch gcc_pcie_rchng_phy_clk = {
1087     .halt_reg = 0x43030,
1088     .halt_check = BRANCH_HALT_VOTED,
1089     .hwcg_reg = 0x43030,
1090     .hwcg_bit = 1,
1091     .clkr = {
1092         .enable_reg = 0x6d010,
1093         .enable_mask = BIT(7),
1094         .hw.init = &(struct clk_init_data){
1095             .name = "gcc_pcie_rchng_phy_clk",
1096             .parent_data = &(const struct clk_parent_data){
1097                 .hw = &gcc_pcie_rchng_phy_clk_src.clkr.hw,
1098             },
1099             .num_parents = 1,
1100             .flags = CLK_SET_RATE_PARENT,
1101             .ops = &clk_branch2_ops,
1102         },
1103     },
1104 };
1105 
1106 static struct clk_branch gcc_pcie_sleep_clk = {
1107     .halt_reg = 0x43038,
1108     .halt_check = BRANCH_HALT_VOTED,
1109     .hwcg_reg = 0x43038,
1110     .hwcg_bit = 1,
1111     .clkr = {
1112         .enable_reg = 0x6d010,
1113         .enable_mask = BIT(6),
1114         .hw.init = &(struct clk_init_data){
1115             .name = "gcc_pcie_sleep_clk",
1116             .parent_data = &(const struct clk_parent_data){
1117                 .hw = &gcc_pcie_aux_phy_clk_src.clkr.hw,
1118             },
1119             .num_parents = 1,
1120             .flags = CLK_SET_RATE_PARENT,
1121             .ops = &clk_branch2_ops,
1122         },
1123     },
1124 };
1125 
1126 static struct clk_branch gcc_pcie_slv_axi_clk = {
1127     .halt_reg = 0x4301c,
1128     .halt_check = BRANCH_HALT_VOTED,
1129     .hwcg_reg = 0x4301c,
1130     .hwcg_bit = 1,
1131     .clkr = {
1132         .enable_reg = 0x6d010,
1133         .enable_mask = BIT(0),
1134         .hw.init = &(struct clk_init_data){
1135             .name = "gcc_pcie_slv_axi_clk",
1136             .ops = &clk_branch2_ops,
1137         },
1138     },
1139 };
1140 
1141 static struct clk_branch gcc_pcie_slv_q2a_axi_clk = {
1142     .halt_reg = 0x43018,
1143     .halt_check = BRANCH_HALT_VOTED,
1144     .hwcg_reg = 0x43018,
1145     .hwcg_bit = 1,
1146     .clkr = {
1147         .enable_reg = 0x6d010,
1148         .enable_mask = BIT(5),
1149         .hw.init = &(struct clk_init_data){
1150             .name = "gcc_pcie_slv_q2a_axi_clk",
1151             .ops = &clk_branch2_ops,
1152         },
1153     },
1154 };
1155 
1156 static struct clk_branch gcc_pdm2_clk = {
1157     .halt_reg = 0x2400c,
1158     .halt_check = BRANCH_HALT,
1159     .clkr = {
1160         .enable_reg = 0x2400c,
1161         .enable_mask = BIT(0),
1162         .hw.init = &(struct clk_init_data){
1163             .name = "gcc_pdm2_clk",
1164             .parent_data = &(const struct clk_parent_data){
1165                 .hw = &gcc_pdm2_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_pdm_ahb_clk = {
1175     .halt_reg = 0x24004,
1176     .halt_check = BRANCH_HALT,
1177     .hwcg_reg = 0x24004,
1178     .hwcg_bit = 1,
1179     .clkr = {
1180         .enable_reg = 0x24004,
1181         .enable_mask = BIT(0),
1182         .hw.init = &(struct clk_init_data){
1183             .name = "gcc_pdm_ahb_clk",
1184             .ops = &clk_branch2_ops,
1185         },
1186     },
1187 };
1188 
1189 static struct clk_branch gcc_pdm_xo4_clk = {
1190     .halt_reg = 0x24008,
1191     .halt_check = BRANCH_HALT,
1192     .clkr = {
1193         .enable_reg = 0x24008,
1194         .enable_mask = BIT(0),
1195         .hw.init = &(struct clk_init_data){
1196             .name = "gcc_pdm_xo4_clk",
1197             .ops = &clk_branch2_ops,
1198         },
1199     },
1200 };
1201 
1202 static struct clk_branch gcc_rx1_usb2_clkref_en = {
1203     .halt_reg = 0x88008,
1204     .halt_check = BRANCH_HALT,
1205     .clkr = {
1206         .enable_reg = 0x88008,
1207         .enable_mask = BIT(0),
1208         .hw.init = &(struct clk_init_data){
1209             .name = "gcc_rx1_usb2_clkref_en",
1210             .ops = &clk_branch2_ops,
1211         },
1212     },
1213 };
1214 
1215 static struct clk_branch gcc_sdcc1_ahb_clk = {
1216     .halt_reg = 0x1a00c,
1217     .halt_check = BRANCH_HALT,
1218     .clkr = {
1219         .enable_reg = 0x1a00c,
1220         .enable_mask = BIT(0),
1221         .hw.init = &(struct clk_init_data){
1222             .name = "gcc_sdcc1_ahb_clk",
1223             .ops = &clk_branch2_ops,
1224         },
1225     },
1226 };
1227 
1228 static struct clk_branch gcc_sdcc1_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_sdcc1_apps_clk",
1236             .parent_data = &(const struct clk_parent_data){
1237                 .hw = &gcc_sdcc1_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_usb30_master_clk = {
1247     .halt_reg = 0x17018,
1248     .halt_check = BRANCH_HALT,
1249     .clkr = {
1250         .enable_reg = 0x17018,
1251         .enable_mask = BIT(0),
1252         .hw.init = &(struct clk_init_data){
1253             .name = "gcc_usb30_master_clk",
1254             .parent_data = &(const struct clk_parent_data){
1255                 .hw = &gcc_usb30_master_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_usb30_mock_utmi_clk = {
1265     .halt_reg = 0x1702c,
1266     .halt_check = BRANCH_HALT,
1267     .clkr = {
1268         .enable_reg = 0x1702c,
1269         .enable_mask = BIT(0),
1270         .hw.init = &(struct clk_init_data){
1271             .name = "gcc_usb30_mock_utmi_clk",
1272             .parent_data = &(const struct clk_parent_data){
1273                 .hw =
1274                     &gcc_usb30_mock_utmi_postdiv_clk_src.clkr.hw,
1275             },
1276             .num_parents = 1,
1277             .flags = CLK_SET_RATE_PARENT,
1278             .ops = &clk_branch2_ops,
1279         },
1280     },
1281 };
1282 
1283 static struct clk_branch gcc_usb30_mstr_axi_clk = {
1284     .halt_reg = 0x17020,
1285     .halt_check = BRANCH_HALT,
1286     .clkr = {
1287         .enable_reg = 0x17020,
1288         .enable_mask = BIT(0),
1289         .hw.init = &(struct clk_init_data){
1290             .name = "gcc_usb30_mstr_axi_clk",
1291             .ops = &clk_branch2_ops,
1292         },
1293     },
1294 };
1295 
1296 static struct clk_branch gcc_usb30_sleep_clk = {
1297     .halt_reg = 0x17028,
1298     .halt_check = BRANCH_HALT,
1299     .clkr = {
1300         .enable_reg = 0x17028,
1301         .enable_mask = BIT(0),
1302         .hw.init = &(struct clk_init_data){
1303             .name = "gcc_usb30_sleep_clk",
1304             .ops = &clk_branch2_ops,
1305         },
1306     },
1307 };
1308 
1309 static struct clk_branch gcc_usb30_slv_ahb_clk = {
1310     .halt_reg = 0x17024,
1311     .halt_check = BRANCH_HALT,
1312     .clkr = {
1313         .enable_reg = 0x17024,
1314         .enable_mask = BIT(0),
1315         .hw.init = &(struct clk_init_data){
1316             .name = "gcc_usb30_slv_ahb_clk",
1317             .ops = &clk_branch2_ops,
1318         },
1319     },
1320 };
1321 
1322 static struct clk_branch gcc_usb3_phy_aux_clk = {
1323     .halt_reg = 0x17064,
1324     .halt_check = BRANCH_HALT,
1325     .clkr = {
1326         .enable_reg = 0x17064,
1327         .enable_mask = BIT(0),
1328         .hw.init = &(struct clk_init_data){
1329             .name = "gcc_usb3_phy_aux_clk",
1330             .parent_data = &(const struct clk_parent_data){
1331                 .hw = &gcc_usb3_phy_aux_clk_src.clkr.hw,
1332             },
1333             .num_parents = 1,
1334             .flags = CLK_SET_RATE_PARENT,
1335             .ops = &clk_branch2_ops,
1336         },
1337     },
1338 };
1339 
1340 static struct gdsc usb30_gdsc = {
1341     .gdscr = 0x17004,
1342     .pd = {
1343         .name = "usb30_gdsc",
1344     },
1345     .pwrsts = PWRSTS_OFF_ON,
1346 };
1347 
1348 static struct gdsc pcie_gdsc = {
1349     .gdscr = 0x43004,
1350     .pd = {
1351         .name = "pcie_gdsc",
1352     },
1353     .pwrsts = PWRSTS_OFF_ON,
1354 };
1355 
1356 static struct clk_branch gcc_usb3_phy_pipe_clk = {
1357     .halt_reg = 0x17068,
1358     /*
1359      * The clock controller does not handle the status bit for
1360      * the clocks with gdscs(powerdomains) in hw controlled mode
1361      * and hence avoid checking for the status bit of those clocks
1362      * by setting the BRANCH_HALT_DELAY flag
1363      */
1364     .halt_check = BRANCH_HALT_DELAY,
1365     .hwcg_reg = 0x17068,
1366     .hwcg_bit = 1,
1367     .clkr = {
1368         .enable_reg = 0x17068,
1369         .enable_mask = BIT(0),
1370         .hw.init = &(struct clk_init_data){
1371             .name = "gcc_usb3_phy_pipe_clk",
1372             .parent_data = &(const struct clk_parent_data){
1373                 .hw = &gcc_usb3_phy_pipe_clk_src.clkr.hw,
1374             },
1375             .num_parents = 1,
1376             .flags = CLK_SET_RATE_PARENT,
1377             .ops = &clk_branch2_ops,
1378         },
1379     },
1380 };
1381 
1382 static struct clk_branch gcc_usb3_prim_clkref_en = {
1383     .halt_reg = 0x88000,
1384     .halt_check = BRANCH_HALT,
1385     .clkr = {
1386         .enable_reg = 0x88000,
1387         .enable_mask = BIT(0),
1388         .hw.init = &(struct clk_init_data){
1389             .name = "gcc_usb3_prim_clkref_en",
1390             .ops = &clk_branch2_ops,
1391         },
1392     },
1393 };
1394 
1395 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
1396     .halt_reg = 0x19008,
1397     .halt_check = BRANCH_HALT,
1398     .hwcg_reg = 0x19008,
1399     .hwcg_bit = 1,
1400     .clkr = {
1401         .enable_reg = 0x19008,
1402         .enable_mask = BIT(0),
1403         .hw.init = &(struct clk_init_data){
1404             .name = "gcc_usb_phy_cfg_ahb2phy_clk",
1405             .ops = &clk_branch2_ops,
1406         },
1407     },
1408 };
1409 
1410 static struct clk_branch gcc_xo_div4_clk = {
1411     .halt_reg = 0x2e010,
1412     .halt_check = BRANCH_HALT,
1413     .clkr = {
1414         .enable_reg = 0x2e010,
1415         .enable_mask = BIT(0),
1416         .hw.init = &(struct clk_init_data){
1417             .name = "gcc_xo_div4_clk",
1418             .ops = &clk_branch2_ops,
1419         },
1420     },
1421 };
1422 
1423 static struct clk_branch gcc_xo_pcie_link_clk = {
1424     .halt_reg = 0x2e008,
1425     .halt_check = BRANCH_HALT,
1426     .hwcg_reg = 0x2e008,
1427     .hwcg_bit = 1,
1428     .clkr = {
1429         .enable_reg = 0x2e008,
1430         .enable_mask = BIT(0),
1431         .hw.init = &(struct clk_init_data){
1432             .name = "gcc_xo_pcie_link_clk",
1433             .ops = &clk_branch2_ops,
1434         },
1435     },
1436 };
1437 
1438 static struct clk_regmap *gcc_sdx65_clocks[] = {
1439     [GCC_AHB_PCIE_LINK_CLK] = &gcc_ahb_pcie_link_clk.clkr,
1440     [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
1441     [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
1442     [GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup1_i2c_apps_clk_src.clkr,
1443     [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
1444     [GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup1_spi_apps_clk_src.clkr,
1445     [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
1446     [GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup2_i2c_apps_clk_src.clkr,
1447     [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
1448     [GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup2_spi_apps_clk_src.clkr,
1449     [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
1450     [GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup3_i2c_apps_clk_src.clkr,
1451     [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
1452     [GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup3_spi_apps_clk_src.clkr,
1453     [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
1454     [GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup4_i2c_apps_clk_src.clkr,
1455     [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
1456     [GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup4_spi_apps_clk_src.clkr,
1457     [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
1458     [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
1459     [GCC_BLSP1_UART1_APPS_CLK_SRC] = &gcc_blsp1_uart1_apps_clk_src.clkr,
1460     [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
1461     [GCC_BLSP1_UART2_APPS_CLK_SRC] = &gcc_blsp1_uart2_apps_clk_src.clkr,
1462     [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
1463     [GCC_BLSP1_UART3_APPS_CLK_SRC] = &gcc_blsp1_uart3_apps_clk_src.clkr,
1464     [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
1465     [GCC_BLSP1_UART4_APPS_CLK_SRC] = &gcc_blsp1_uart4_apps_clk_src.clkr,
1466     [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
1467     [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
1468     [GCC_CPUSS_AHB_POSTDIV_CLK_SRC] = &gcc_cpuss_ahb_postdiv_clk_src.clkr,
1469     [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
1470     [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
1471     [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
1472     [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
1473     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
1474     [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
1475     [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
1476     [GCC_PCIE_AUX_CLK] = &gcc_pcie_aux_clk.clkr,
1477     [GCC_PCIE_AUX_CLK_SRC] = &gcc_pcie_aux_clk_src.clkr,
1478     [GCC_PCIE_AUX_PHY_CLK_SRC] = &gcc_pcie_aux_phy_clk_src.clkr,
1479     [GCC_PCIE_CFG_AHB_CLK] = &gcc_pcie_cfg_ahb_clk.clkr,
1480     [GCC_PCIE_MSTR_AXI_CLK] = &gcc_pcie_mstr_axi_clk.clkr,
1481     [GCC_PCIE_PIPE_CLK] = &gcc_pcie_pipe_clk.clkr,
1482     [GCC_PCIE_PIPE_CLK_SRC] = &gcc_pcie_pipe_clk_src.clkr,
1483     [GCC_PCIE_RCHNG_PHY_CLK] = &gcc_pcie_rchng_phy_clk.clkr,
1484     [GCC_PCIE_RCHNG_PHY_CLK_SRC] = &gcc_pcie_rchng_phy_clk_src.clkr,
1485     [GCC_PCIE_SLEEP_CLK] = &gcc_pcie_sleep_clk.clkr,
1486     [GCC_PCIE_SLV_AXI_CLK] = &gcc_pcie_slv_axi_clk.clkr,
1487     [GCC_PCIE_SLV_Q2A_AXI_CLK] = &gcc_pcie_slv_q2a_axi_clk.clkr,
1488     [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
1489     [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
1490     [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
1491     [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
1492     [GCC_RX1_USB2_CLKREF_EN] = &gcc_rx1_usb2_clkref_en.clkr,
1493     [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
1494     [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
1495     [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
1496     [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
1497     [GCC_USB30_MASTER_CLK_SRC] = &gcc_usb30_master_clk_src.clkr,
1498     [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
1499     [GCC_USB30_MOCK_UTMI_CLK_SRC] = &gcc_usb30_mock_utmi_clk_src.clkr,
1500     [GCC_USB30_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_mock_utmi_postdiv_clk_src.clkr,
1501     [GCC_USB30_MSTR_AXI_CLK] = &gcc_usb30_mstr_axi_clk.clkr,
1502     [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
1503     [GCC_USB30_SLV_AHB_CLK] = &gcc_usb30_slv_ahb_clk.clkr,
1504     [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
1505     [GCC_USB3_PHY_AUX_CLK_SRC] = &gcc_usb3_phy_aux_clk_src.clkr,
1506     [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
1507     [GCC_USB3_PHY_PIPE_CLK_SRC] = &gcc_usb3_phy_pipe_clk_src.clkr,
1508     [GCC_USB3_PRIM_CLKREF_EN] = &gcc_usb3_prim_clkref_en.clkr,
1509     [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
1510     [GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr,
1511     [GCC_XO_PCIE_LINK_CLK] = &gcc_xo_pcie_link_clk.clkr,
1512     [GPLL0] = &gpll0.clkr,
1513     [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
1514 };
1515 
1516 static const struct qcom_reset_map gcc_sdx65_resets[] = {
1517     [GCC_BLSP1_QUP1_BCR] = { 0x1c000 },
1518     [GCC_BLSP1_QUP2_BCR] = { 0x1e000 },
1519     [GCC_BLSP1_QUP3_BCR] = { 0x20000 },
1520     [GCC_BLSP1_QUP4_BCR] = { 0x22000 },
1521     [GCC_BLSP1_UART1_BCR] = { 0x1d000 },
1522     [GCC_BLSP1_UART2_BCR] = { 0x1f000 },
1523     [GCC_BLSP1_UART3_BCR] = { 0x21000 },
1524     [GCC_BLSP1_UART4_BCR] = { 0x23000 },
1525     [GCC_PCIE_BCR] = { 0x43000 },
1526     [GCC_PCIE_LINK_DOWN_BCR] = { 0x77000 },
1527     [GCC_PCIE_NOCSR_COM_PHY_BCR] = { 0x78008 },
1528     [GCC_PCIE_PHY_BCR] = { 0x44000 },
1529     [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x78000 },
1530     [GCC_PCIE_PHY_COM_BCR] = { 0x78004 },
1531     [GCC_PCIE_PHY_NOCSR_COM_PHY_BCR] = { 0x7800c },
1532     [GCC_PDM_BCR] = { 0x24000 },
1533     [GCC_QUSB2PHY_BCR] = { 0x19000 },
1534     [GCC_SDCC1_BCR] = { 0x1a000 },
1535     [GCC_TCSR_PCIE_BCR] = { 0x57000 },
1536     [GCC_USB30_BCR] = { 0x17000 },
1537     [GCC_USB3_PHY_BCR] = { 0x18000 },
1538     [GCC_USB3PHY_PHY_BCR] = { 0x18004 },
1539     [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x19004 },
1540 };
1541 
1542 static struct gdsc *gcc_sdx65_gdscs[] = {
1543     [USB30_GDSC] = &usb30_gdsc,
1544     [PCIE_GDSC] = &pcie_gdsc,
1545 };
1546 
1547 static const struct regmap_config gcc_sdx65_regmap_config = {
1548     .reg_bits = 32,
1549     .reg_stride = 4,
1550     .val_bits = 32,
1551     .max_register = 0x1f101c,
1552     .fast_io = true,
1553 };
1554 
1555 static const struct qcom_cc_desc gcc_sdx65_desc = {
1556     .config = &gcc_sdx65_regmap_config,
1557     .clks = gcc_sdx65_clocks,
1558     .num_clks = ARRAY_SIZE(gcc_sdx65_clocks),
1559     .resets = gcc_sdx65_resets,
1560     .num_resets = ARRAY_SIZE(gcc_sdx65_resets),
1561     .gdscs = gcc_sdx65_gdscs,
1562     .num_gdscs = ARRAY_SIZE(gcc_sdx65_gdscs),
1563 };
1564 
1565 static const struct of_device_id gcc_sdx65_match_table[] = {
1566     { .compatible = "qcom,gcc-sdx65" },
1567     { }
1568 };
1569 MODULE_DEVICE_TABLE(of, gcc_sdx65_match_table);
1570 
1571 static int gcc_sdx65_probe(struct platform_device *pdev)
1572 {
1573     struct regmap *regmap;
1574 
1575     regmap = qcom_cc_map(pdev, &gcc_sdx65_desc);
1576     if (IS_ERR(regmap))
1577         return PTR_ERR(regmap);
1578     /*
1579      * Keep the clocks always-ON as they are critical to the functioning
1580      * of the system:
1581      * GCC_SYS_NOC_CPUSS_AHB_CLK, GCC_CPUSS_AHB_CLK, GCC_CPUSS_GNOC_CLK
1582      */
1583     regmap_update_bits(regmap, 0x6d008, BIT(0), BIT(0));
1584     regmap_update_bits(regmap, 0x6d008, BIT(21), BIT(21));
1585     regmap_update_bits(regmap, 0x6d008, BIT(22), BIT(22));
1586 
1587     return qcom_cc_really_probe(pdev, &gcc_sdx65_desc, regmap);
1588 }
1589 
1590 static struct platform_driver gcc_sdx65_driver = {
1591     .probe = gcc_sdx65_probe,
1592     .driver = {
1593         .name = "gcc-sdx65",
1594         .of_match_table = gcc_sdx65_match_table,
1595     },
1596 };
1597 
1598 static int __init gcc_sdx65_init(void)
1599 {
1600     return platform_driver_register(&gcc_sdx65_driver);
1601 }
1602 subsys_initcall(gcc_sdx65_init);
1603 
1604 static void __exit gcc_sdx65_exit(void)
1605 {
1606     platform_driver_unregister(&gcc_sdx65_driver);
1607 }
1608 module_exit(gcc_sdx65_exit);
1609 
1610 MODULE_DESCRIPTION("QTI GCC SDX65 Driver");
1611 MODULE_LICENSE("GPL v2");