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