0001
0002
0003
0004
0005
0006 #include <linux/kernel.h>
0007 #include <linux/bitops.h>
0008 #include <linux/err.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/module.h>
0011 #include <linux/of.h>
0012 #include <linux/of_device.h>
0013 #include <linux/clk-provider.h>
0014 #include <linux/regmap.h>
0015 #include <linux/reset-controller.h>
0016
0017 #include <dt-bindings/clock/qcom,gcc-msm8974.h>
0018 #include <dt-bindings/reset/qcom,gcc-msm8974.h>
0019
0020 #include "common.h"
0021 #include "clk-regmap.h"
0022 #include "clk-pll.h"
0023 #include "clk-rcg.h"
0024 #include "clk-branch.h"
0025 #include "reset.h"
0026 #include "gdsc.h"
0027
0028 enum {
0029 P_XO,
0030 P_GPLL0,
0031 P_GPLL1,
0032 P_GPLL4,
0033 };
0034
0035 static const struct parent_map gcc_xo_gpll0_map[] = {
0036 { P_XO, 0 },
0037 { P_GPLL0, 1 }
0038 };
0039
0040 static const char * const gcc_xo_gpll0[] = {
0041 "xo",
0042 "gpll0_vote",
0043 };
0044
0045 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
0046 { P_XO, 0 },
0047 { P_GPLL0, 1 },
0048 { P_GPLL4, 5 }
0049 };
0050
0051 static const char * const gcc_xo_gpll0_gpll4[] = {
0052 "xo",
0053 "gpll0_vote",
0054 "gpll4_vote",
0055 };
0056
0057 static struct clk_pll gpll0 = {
0058 .l_reg = 0x0004,
0059 .m_reg = 0x0008,
0060 .n_reg = 0x000c,
0061 .config_reg = 0x0014,
0062 .mode_reg = 0x0000,
0063 .status_reg = 0x001c,
0064 .status_bit = 17,
0065 .clkr.hw.init = &(struct clk_init_data){
0066 .name = "gpll0",
0067 .parent_names = (const char *[]){ "xo" },
0068 .num_parents = 1,
0069 .ops = &clk_pll_ops,
0070 },
0071 };
0072
0073 static struct clk_regmap gpll0_vote = {
0074 .enable_reg = 0x1480,
0075 .enable_mask = BIT(0),
0076 .hw.init = &(struct clk_init_data){
0077 .name = "gpll0_vote",
0078 .parent_names = (const char *[]){ "gpll0" },
0079 .num_parents = 1,
0080 .ops = &clk_pll_vote_ops,
0081 },
0082 };
0083
0084 static struct clk_rcg2 config_noc_clk_src = {
0085 .cmd_rcgr = 0x0150,
0086 .hid_width = 5,
0087 .parent_map = gcc_xo_gpll0_map,
0088 .clkr.hw.init = &(struct clk_init_data){
0089 .name = "config_noc_clk_src",
0090 .parent_names = gcc_xo_gpll0,
0091 .num_parents = 2,
0092 .ops = &clk_rcg2_ops,
0093 },
0094 };
0095
0096 static struct clk_rcg2 periph_noc_clk_src = {
0097 .cmd_rcgr = 0x0190,
0098 .hid_width = 5,
0099 .parent_map = gcc_xo_gpll0_map,
0100 .clkr.hw.init = &(struct clk_init_data){
0101 .name = "periph_noc_clk_src",
0102 .parent_names = gcc_xo_gpll0,
0103 .num_parents = 2,
0104 .ops = &clk_rcg2_ops,
0105 },
0106 };
0107
0108 static struct clk_rcg2 system_noc_clk_src = {
0109 .cmd_rcgr = 0x0120,
0110 .hid_width = 5,
0111 .parent_map = gcc_xo_gpll0_map,
0112 .clkr.hw.init = &(struct clk_init_data){
0113 .name = "system_noc_clk_src",
0114 .parent_names = gcc_xo_gpll0,
0115 .num_parents = 2,
0116 .ops = &clk_rcg2_ops,
0117 },
0118 };
0119
0120 static struct clk_pll gpll1 = {
0121 .l_reg = 0x0044,
0122 .m_reg = 0x0048,
0123 .n_reg = 0x004c,
0124 .config_reg = 0x0054,
0125 .mode_reg = 0x0040,
0126 .status_reg = 0x005c,
0127 .status_bit = 17,
0128 .clkr.hw.init = &(struct clk_init_data){
0129 .name = "gpll1",
0130 .parent_names = (const char *[]){ "xo" },
0131 .num_parents = 1,
0132 .ops = &clk_pll_ops,
0133 },
0134 };
0135
0136 static struct clk_regmap gpll1_vote = {
0137 .enable_reg = 0x1480,
0138 .enable_mask = BIT(1),
0139 .hw.init = &(struct clk_init_data){
0140 .name = "gpll1_vote",
0141 .parent_names = (const char *[]){ "gpll1" },
0142 .num_parents = 1,
0143 .ops = &clk_pll_vote_ops,
0144 },
0145 };
0146
0147 static struct clk_pll gpll4 = {
0148 .l_reg = 0x1dc4,
0149 .m_reg = 0x1dc8,
0150 .n_reg = 0x1dcc,
0151 .config_reg = 0x1dd4,
0152 .mode_reg = 0x1dc0,
0153 .status_reg = 0x1ddc,
0154 .status_bit = 17,
0155 .clkr.hw.init = &(struct clk_init_data){
0156 .name = "gpll4",
0157 .parent_names = (const char *[]){ "xo" },
0158 .num_parents = 1,
0159 .ops = &clk_pll_ops,
0160 },
0161 };
0162
0163 static struct clk_regmap gpll4_vote = {
0164 .enable_reg = 0x1480,
0165 .enable_mask = BIT(4),
0166 .hw.init = &(struct clk_init_data){
0167 .name = "gpll4_vote",
0168 .parent_names = (const char *[]){ "gpll4" },
0169 .num_parents = 1,
0170 .ops = &clk_pll_vote_ops,
0171 },
0172 };
0173
0174 static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = {
0175 F(125000000, P_GPLL0, 1, 5, 24),
0176 { }
0177 };
0178
0179 static struct clk_rcg2 usb30_master_clk_src = {
0180 .cmd_rcgr = 0x03d4,
0181 .mnd_width = 8,
0182 .hid_width = 5,
0183 .parent_map = gcc_xo_gpll0_map,
0184 .freq_tbl = ftbl_gcc_usb30_master_clk,
0185 .clkr.hw.init = &(struct clk_init_data){
0186 .name = "usb30_master_clk_src",
0187 .parent_names = gcc_xo_gpll0,
0188 .num_parents = 2,
0189 .ops = &clk_rcg2_ops,
0190 },
0191 };
0192
0193 static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
0194 F(19200000, P_XO, 1, 0, 0),
0195 F(37500000, P_GPLL0, 16, 0, 0),
0196 F(50000000, P_GPLL0, 12, 0, 0),
0197 { }
0198 };
0199
0200 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
0201 .cmd_rcgr = 0x0660,
0202 .hid_width = 5,
0203 .parent_map = gcc_xo_gpll0_map,
0204 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0205 .clkr.hw.init = &(struct clk_init_data){
0206 .name = "blsp1_qup1_i2c_apps_clk_src",
0207 .parent_names = gcc_xo_gpll0,
0208 .num_parents = 2,
0209 .ops = &clk_rcg2_ops,
0210 },
0211 };
0212
0213 static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
0214 F(960000, P_XO, 10, 1, 2),
0215 F(4800000, P_XO, 4, 0, 0),
0216 F(9600000, P_XO, 2, 0, 0),
0217 F(15000000, P_GPLL0, 10, 1, 4),
0218 F(19200000, P_XO, 1, 0, 0),
0219 F(25000000, P_GPLL0, 12, 1, 2),
0220 F(50000000, P_GPLL0, 12, 0, 0),
0221 { }
0222 };
0223
0224 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
0225 .cmd_rcgr = 0x064c,
0226 .mnd_width = 8,
0227 .hid_width = 5,
0228 .parent_map = gcc_xo_gpll0_map,
0229 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0230 .clkr.hw.init = &(struct clk_init_data){
0231 .name = "blsp1_qup1_spi_apps_clk_src",
0232 .parent_names = gcc_xo_gpll0,
0233 .num_parents = 2,
0234 .ops = &clk_rcg2_ops,
0235 },
0236 };
0237
0238 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
0239 .cmd_rcgr = 0x06e0,
0240 .hid_width = 5,
0241 .parent_map = gcc_xo_gpll0_map,
0242 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0243 .clkr.hw.init = &(struct clk_init_data){
0244 .name = "blsp1_qup2_i2c_apps_clk_src",
0245 .parent_names = gcc_xo_gpll0,
0246 .num_parents = 2,
0247 .ops = &clk_rcg2_ops,
0248 },
0249 };
0250
0251 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
0252 .cmd_rcgr = 0x06cc,
0253 .mnd_width = 8,
0254 .hid_width = 5,
0255 .parent_map = gcc_xo_gpll0_map,
0256 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0257 .clkr.hw.init = &(struct clk_init_data){
0258 .name = "blsp1_qup2_spi_apps_clk_src",
0259 .parent_names = gcc_xo_gpll0,
0260 .num_parents = 2,
0261 .ops = &clk_rcg2_ops,
0262 },
0263 };
0264
0265 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
0266 .cmd_rcgr = 0x0760,
0267 .hid_width = 5,
0268 .parent_map = gcc_xo_gpll0_map,
0269 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0270 .clkr.hw.init = &(struct clk_init_data){
0271 .name = "blsp1_qup3_i2c_apps_clk_src",
0272 .parent_names = gcc_xo_gpll0,
0273 .num_parents = 2,
0274 .ops = &clk_rcg2_ops,
0275 },
0276 };
0277
0278 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
0279 .cmd_rcgr = 0x074c,
0280 .mnd_width = 8,
0281 .hid_width = 5,
0282 .parent_map = gcc_xo_gpll0_map,
0283 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0284 .clkr.hw.init = &(struct clk_init_data){
0285 .name = "blsp1_qup3_spi_apps_clk_src",
0286 .parent_names = gcc_xo_gpll0,
0287 .num_parents = 2,
0288 .ops = &clk_rcg2_ops,
0289 },
0290 };
0291
0292 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
0293 .cmd_rcgr = 0x07e0,
0294 .hid_width = 5,
0295 .parent_map = gcc_xo_gpll0_map,
0296 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0297 .clkr.hw.init = &(struct clk_init_data){
0298 .name = "blsp1_qup4_i2c_apps_clk_src",
0299 .parent_names = gcc_xo_gpll0,
0300 .num_parents = 2,
0301 .ops = &clk_rcg2_ops,
0302 },
0303 };
0304
0305 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
0306 .cmd_rcgr = 0x07cc,
0307 .mnd_width = 8,
0308 .hid_width = 5,
0309 .parent_map = gcc_xo_gpll0_map,
0310 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0311 .clkr.hw.init = &(struct clk_init_data){
0312 .name = "blsp1_qup4_spi_apps_clk_src",
0313 .parent_names = gcc_xo_gpll0,
0314 .num_parents = 2,
0315 .ops = &clk_rcg2_ops,
0316 },
0317 };
0318
0319 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
0320 .cmd_rcgr = 0x0860,
0321 .hid_width = 5,
0322 .parent_map = gcc_xo_gpll0_map,
0323 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0324 .clkr.hw.init = &(struct clk_init_data){
0325 .name = "blsp1_qup5_i2c_apps_clk_src",
0326 .parent_names = gcc_xo_gpll0,
0327 .num_parents = 2,
0328 .ops = &clk_rcg2_ops,
0329 },
0330 };
0331
0332 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
0333 .cmd_rcgr = 0x084c,
0334 .mnd_width = 8,
0335 .hid_width = 5,
0336 .parent_map = gcc_xo_gpll0_map,
0337 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0338 .clkr.hw.init = &(struct clk_init_data){
0339 .name = "blsp1_qup5_spi_apps_clk_src",
0340 .parent_names = gcc_xo_gpll0,
0341 .num_parents = 2,
0342 .ops = &clk_rcg2_ops,
0343 },
0344 };
0345
0346 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
0347 .cmd_rcgr = 0x08e0,
0348 .hid_width = 5,
0349 .parent_map = gcc_xo_gpll0_map,
0350 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0351 .clkr.hw.init = &(struct clk_init_data){
0352 .name = "blsp1_qup6_i2c_apps_clk_src",
0353 .parent_names = gcc_xo_gpll0,
0354 .num_parents = 2,
0355 .ops = &clk_rcg2_ops,
0356 },
0357 };
0358
0359 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
0360 .cmd_rcgr = 0x08cc,
0361 .mnd_width = 8,
0362 .hid_width = 5,
0363 .parent_map = gcc_xo_gpll0_map,
0364 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0365 .clkr.hw.init = &(struct clk_init_data){
0366 .name = "blsp1_qup6_spi_apps_clk_src",
0367 .parent_names = gcc_xo_gpll0,
0368 .num_parents = 2,
0369 .ops = &clk_rcg2_ops,
0370 },
0371 };
0372
0373 static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
0374 F(3686400, P_GPLL0, 1, 96, 15625),
0375 F(7372800, P_GPLL0, 1, 192, 15625),
0376 F(14745600, P_GPLL0, 1, 384, 15625),
0377 F(16000000, P_GPLL0, 5, 2, 15),
0378 F(19200000, P_XO, 1, 0, 0),
0379 F(24000000, P_GPLL0, 5, 1, 5),
0380 F(32000000, P_GPLL0, 1, 4, 75),
0381 F(40000000, P_GPLL0, 15, 0, 0),
0382 F(46400000, P_GPLL0, 1, 29, 375),
0383 F(48000000, P_GPLL0, 12.5, 0, 0),
0384 F(51200000, P_GPLL0, 1, 32, 375),
0385 F(56000000, P_GPLL0, 1, 7, 75),
0386 F(58982400, P_GPLL0, 1, 1536, 15625),
0387 F(60000000, P_GPLL0, 10, 0, 0),
0388 F(63160000, P_GPLL0, 9.5, 0, 0),
0389 { }
0390 };
0391
0392 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
0393 .cmd_rcgr = 0x068c,
0394 .mnd_width = 16,
0395 .hid_width = 5,
0396 .parent_map = gcc_xo_gpll0_map,
0397 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0398 .clkr.hw.init = &(struct clk_init_data){
0399 .name = "blsp1_uart1_apps_clk_src",
0400 .parent_names = gcc_xo_gpll0,
0401 .num_parents = 2,
0402 .ops = &clk_rcg2_ops,
0403 },
0404 };
0405
0406 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
0407 .cmd_rcgr = 0x070c,
0408 .mnd_width = 16,
0409 .hid_width = 5,
0410 .parent_map = gcc_xo_gpll0_map,
0411 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0412 .clkr.hw.init = &(struct clk_init_data){
0413 .name = "blsp1_uart2_apps_clk_src",
0414 .parent_names = gcc_xo_gpll0,
0415 .num_parents = 2,
0416 .ops = &clk_rcg2_ops,
0417 },
0418 };
0419
0420 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
0421 .cmd_rcgr = 0x078c,
0422 .mnd_width = 16,
0423 .hid_width = 5,
0424 .parent_map = gcc_xo_gpll0_map,
0425 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0426 .clkr.hw.init = &(struct clk_init_data){
0427 .name = "blsp1_uart3_apps_clk_src",
0428 .parent_names = gcc_xo_gpll0,
0429 .num_parents = 2,
0430 .ops = &clk_rcg2_ops,
0431 },
0432 };
0433
0434 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
0435 .cmd_rcgr = 0x080c,
0436 .mnd_width = 16,
0437 .hid_width = 5,
0438 .parent_map = gcc_xo_gpll0_map,
0439 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0440 .clkr.hw.init = &(struct clk_init_data){
0441 .name = "blsp1_uart4_apps_clk_src",
0442 .parent_names = gcc_xo_gpll0,
0443 .num_parents = 2,
0444 .ops = &clk_rcg2_ops,
0445 },
0446 };
0447
0448 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
0449 .cmd_rcgr = 0x088c,
0450 .mnd_width = 16,
0451 .hid_width = 5,
0452 .parent_map = gcc_xo_gpll0_map,
0453 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0454 .clkr.hw.init = &(struct clk_init_data){
0455 .name = "blsp1_uart5_apps_clk_src",
0456 .parent_names = gcc_xo_gpll0,
0457 .num_parents = 2,
0458 .ops = &clk_rcg2_ops,
0459 },
0460 };
0461
0462 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
0463 .cmd_rcgr = 0x090c,
0464 .mnd_width = 16,
0465 .hid_width = 5,
0466 .parent_map = gcc_xo_gpll0_map,
0467 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0468 .clkr.hw.init = &(struct clk_init_data){
0469 .name = "blsp1_uart6_apps_clk_src",
0470 .parent_names = gcc_xo_gpll0,
0471 .num_parents = 2,
0472 .ops = &clk_rcg2_ops,
0473 },
0474 };
0475
0476 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
0477 .cmd_rcgr = 0x09a0,
0478 .hid_width = 5,
0479 .parent_map = gcc_xo_gpll0_map,
0480 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0481 .clkr.hw.init = &(struct clk_init_data){
0482 .name = "blsp2_qup1_i2c_apps_clk_src",
0483 .parent_names = gcc_xo_gpll0,
0484 .num_parents = 2,
0485 .ops = &clk_rcg2_ops,
0486 },
0487 };
0488
0489 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
0490 .cmd_rcgr = 0x098c,
0491 .mnd_width = 8,
0492 .hid_width = 5,
0493 .parent_map = gcc_xo_gpll0_map,
0494 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0495 .clkr.hw.init = &(struct clk_init_data){
0496 .name = "blsp2_qup1_spi_apps_clk_src",
0497 .parent_names = gcc_xo_gpll0,
0498 .num_parents = 2,
0499 .ops = &clk_rcg2_ops,
0500 },
0501 };
0502
0503 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
0504 .cmd_rcgr = 0x0a20,
0505 .hid_width = 5,
0506 .parent_map = gcc_xo_gpll0_map,
0507 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0508 .clkr.hw.init = &(struct clk_init_data){
0509 .name = "blsp2_qup2_i2c_apps_clk_src",
0510 .parent_names = gcc_xo_gpll0,
0511 .num_parents = 2,
0512 .ops = &clk_rcg2_ops,
0513 },
0514 };
0515
0516 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
0517 .cmd_rcgr = 0x0a0c,
0518 .mnd_width = 8,
0519 .hid_width = 5,
0520 .parent_map = gcc_xo_gpll0_map,
0521 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0522 .clkr.hw.init = &(struct clk_init_data){
0523 .name = "blsp2_qup2_spi_apps_clk_src",
0524 .parent_names = gcc_xo_gpll0,
0525 .num_parents = 2,
0526 .ops = &clk_rcg2_ops,
0527 },
0528 };
0529
0530 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
0531 .cmd_rcgr = 0x0aa0,
0532 .hid_width = 5,
0533 .parent_map = gcc_xo_gpll0_map,
0534 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0535 .clkr.hw.init = &(struct clk_init_data){
0536 .name = "blsp2_qup3_i2c_apps_clk_src",
0537 .parent_names = gcc_xo_gpll0,
0538 .num_parents = 2,
0539 .ops = &clk_rcg2_ops,
0540 },
0541 };
0542
0543 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
0544 .cmd_rcgr = 0x0a8c,
0545 .mnd_width = 8,
0546 .hid_width = 5,
0547 .parent_map = gcc_xo_gpll0_map,
0548 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0549 .clkr.hw.init = &(struct clk_init_data){
0550 .name = "blsp2_qup3_spi_apps_clk_src",
0551 .parent_names = gcc_xo_gpll0,
0552 .num_parents = 2,
0553 .ops = &clk_rcg2_ops,
0554 },
0555 };
0556
0557 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
0558 .cmd_rcgr = 0x0b20,
0559 .hid_width = 5,
0560 .parent_map = gcc_xo_gpll0_map,
0561 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0562 .clkr.hw.init = &(struct clk_init_data){
0563 .name = "blsp2_qup4_i2c_apps_clk_src",
0564 .parent_names = gcc_xo_gpll0,
0565 .num_parents = 2,
0566 .ops = &clk_rcg2_ops,
0567 },
0568 };
0569
0570 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
0571 .cmd_rcgr = 0x0b0c,
0572 .mnd_width = 8,
0573 .hid_width = 5,
0574 .parent_map = gcc_xo_gpll0_map,
0575 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0576 .clkr.hw.init = &(struct clk_init_data){
0577 .name = "blsp2_qup4_spi_apps_clk_src",
0578 .parent_names = gcc_xo_gpll0,
0579 .num_parents = 2,
0580 .ops = &clk_rcg2_ops,
0581 },
0582 };
0583
0584 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
0585 .cmd_rcgr = 0x0ba0,
0586 .hid_width = 5,
0587 .parent_map = gcc_xo_gpll0_map,
0588 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0589 .clkr.hw.init = &(struct clk_init_data){
0590 .name = "blsp2_qup5_i2c_apps_clk_src",
0591 .parent_names = gcc_xo_gpll0,
0592 .num_parents = 2,
0593 .ops = &clk_rcg2_ops,
0594 },
0595 };
0596
0597 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
0598 .cmd_rcgr = 0x0b8c,
0599 .mnd_width = 8,
0600 .hid_width = 5,
0601 .parent_map = gcc_xo_gpll0_map,
0602 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0603 .clkr.hw.init = &(struct clk_init_data){
0604 .name = "blsp2_qup5_spi_apps_clk_src",
0605 .parent_names = gcc_xo_gpll0,
0606 .num_parents = 2,
0607 .ops = &clk_rcg2_ops,
0608 },
0609 };
0610
0611 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
0612 .cmd_rcgr = 0x0c20,
0613 .hid_width = 5,
0614 .parent_map = gcc_xo_gpll0_map,
0615 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
0616 .clkr.hw.init = &(struct clk_init_data){
0617 .name = "blsp2_qup6_i2c_apps_clk_src",
0618 .parent_names = gcc_xo_gpll0,
0619 .num_parents = 2,
0620 .ops = &clk_rcg2_ops,
0621 },
0622 };
0623
0624 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
0625 .cmd_rcgr = 0x0c0c,
0626 .mnd_width = 8,
0627 .hid_width = 5,
0628 .parent_map = gcc_xo_gpll0_map,
0629 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
0630 .clkr.hw.init = &(struct clk_init_data){
0631 .name = "blsp2_qup6_spi_apps_clk_src",
0632 .parent_names = gcc_xo_gpll0,
0633 .num_parents = 2,
0634 .ops = &clk_rcg2_ops,
0635 },
0636 };
0637
0638 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
0639 .cmd_rcgr = 0x09cc,
0640 .mnd_width = 16,
0641 .hid_width = 5,
0642 .parent_map = gcc_xo_gpll0_map,
0643 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0644 .clkr.hw.init = &(struct clk_init_data){
0645 .name = "blsp2_uart1_apps_clk_src",
0646 .parent_names = gcc_xo_gpll0,
0647 .num_parents = 2,
0648 .ops = &clk_rcg2_ops,
0649 },
0650 };
0651
0652 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
0653 .cmd_rcgr = 0x0a4c,
0654 .mnd_width = 16,
0655 .hid_width = 5,
0656 .parent_map = gcc_xo_gpll0_map,
0657 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0658 .clkr.hw.init = &(struct clk_init_data){
0659 .name = "blsp2_uart2_apps_clk_src",
0660 .parent_names = gcc_xo_gpll0,
0661 .num_parents = 2,
0662 .ops = &clk_rcg2_ops,
0663 },
0664 };
0665
0666 static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
0667 .cmd_rcgr = 0x0acc,
0668 .mnd_width = 16,
0669 .hid_width = 5,
0670 .parent_map = gcc_xo_gpll0_map,
0671 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0672 .clkr.hw.init = &(struct clk_init_data){
0673 .name = "blsp2_uart3_apps_clk_src",
0674 .parent_names = gcc_xo_gpll0,
0675 .num_parents = 2,
0676 .ops = &clk_rcg2_ops,
0677 },
0678 };
0679
0680 static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
0681 .cmd_rcgr = 0x0b4c,
0682 .mnd_width = 16,
0683 .hid_width = 5,
0684 .parent_map = gcc_xo_gpll0_map,
0685 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0686 .clkr.hw.init = &(struct clk_init_data){
0687 .name = "blsp2_uart4_apps_clk_src",
0688 .parent_names = gcc_xo_gpll0,
0689 .num_parents = 2,
0690 .ops = &clk_rcg2_ops,
0691 },
0692 };
0693
0694 static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
0695 .cmd_rcgr = 0x0bcc,
0696 .mnd_width = 16,
0697 .hid_width = 5,
0698 .parent_map = gcc_xo_gpll0_map,
0699 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0700 .clkr.hw.init = &(struct clk_init_data){
0701 .name = "blsp2_uart5_apps_clk_src",
0702 .parent_names = gcc_xo_gpll0,
0703 .num_parents = 2,
0704 .ops = &clk_rcg2_ops,
0705 },
0706 };
0707
0708 static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
0709 .cmd_rcgr = 0x0c4c,
0710 .mnd_width = 16,
0711 .hid_width = 5,
0712 .parent_map = gcc_xo_gpll0_map,
0713 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
0714 .clkr.hw.init = &(struct clk_init_data){
0715 .name = "blsp2_uart6_apps_clk_src",
0716 .parent_names = gcc_xo_gpll0,
0717 .num_parents = 2,
0718 .ops = &clk_rcg2_ops,
0719 },
0720 };
0721
0722 static const struct freq_tbl ftbl_gcc_ce1_clk_msm8226[] = {
0723 F(50000000, P_GPLL0, 12, 0, 0),
0724 F(100000000, P_GPLL0, 6, 0, 0),
0725 { }
0726 };
0727
0728 static const struct freq_tbl ftbl_gcc_ce1_clk[] = {
0729 F(50000000, P_GPLL0, 12, 0, 0),
0730 F(75000000, P_GPLL0, 8, 0, 0),
0731 F(100000000, P_GPLL0, 6, 0, 0),
0732 F(150000000, P_GPLL0, 4, 0, 0),
0733 { }
0734 };
0735
0736 static struct clk_rcg2 ce1_clk_src = {
0737 .cmd_rcgr = 0x1050,
0738 .hid_width = 5,
0739 .parent_map = gcc_xo_gpll0_map,
0740 .freq_tbl = ftbl_gcc_ce1_clk,
0741 .clkr.hw.init = &(struct clk_init_data){
0742 .name = "ce1_clk_src",
0743 .parent_names = gcc_xo_gpll0,
0744 .num_parents = 2,
0745 .ops = &clk_rcg2_ops,
0746 },
0747 };
0748
0749 static const struct freq_tbl ftbl_gcc_ce2_clk[] = {
0750 F(50000000, P_GPLL0, 12, 0, 0),
0751 F(75000000, P_GPLL0, 8, 0, 0),
0752 F(100000000, P_GPLL0, 6, 0, 0),
0753 F(150000000, P_GPLL0, 4, 0, 0),
0754 { }
0755 };
0756
0757 static struct clk_rcg2 ce2_clk_src = {
0758 .cmd_rcgr = 0x1090,
0759 .hid_width = 5,
0760 .parent_map = gcc_xo_gpll0_map,
0761 .freq_tbl = ftbl_gcc_ce2_clk,
0762 .clkr.hw.init = &(struct clk_init_data){
0763 .name = "ce2_clk_src",
0764 .parent_names = gcc_xo_gpll0,
0765 .num_parents = 2,
0766 .ops = &clk_rcg2_ops,
0767 },
0768 };
0769
0770 static const struct freq_tbl ftbl_gcc_gp_clk_msm8226[] = {
0771 F(19200000, P_XO, 1, 0, 0),
0772 { }
0773 };
0774
0775 static const struct freq_tbl ftbl_gcc_gp_clk[] = {
0776 F(4800000, P_XO, 4, 0, 0),
0777 F(6000000, P_GPLL0, 10, 1, 10),
0778 F(6750000, P_GPLL0, 1, 1, 89),
0779 F(8000000, P_GPLL0, 15, 1, 5),
0780 F(9600000, P_XO, 2, 0, 0),
0781 F(16000000, P_GPLL0, 1, 2, 75),
0782 F(19200000, P_XO, 1, 0, 0),
0783 F(24000000, P_GPLL0, 5, 1, 5),
0784 { }
0785 };
0786
0787
0788 static struct clk_rcg2 gp1_clk_src = {
0789 .cmd_rcgr = 0x1904,
0790 .mnd_width = 8,
0791 .hid_width = 5,
0792 .parent_map = gcc_xo_gpll0_map,
0793 .freq_tbl = ftbl_gcc_gp_clk,
0794 .clkr.hw.init = &(struct clk_init_data){
0795 .name = "gp1_clk_src",
0796 .parent_names = gcc_xo_gpll0,
0797 .num_parents = 2,
0798 .ops = &clk_rcg2_ops,
0799 },
0800 };
0801
0802 static struct clk_rcg2 gp2_clk_src = {
0803 .cmd_rcgr = 0x1944,
0804 .mnd_width = 8,
0805 .hid_width = 5,
0806 .parent_map = gcc_xo_gpll0_map,
0807 .freq_tbl = ftbl_gcc_gp_clk,
0808 .clkr.hw.init = &(struct clk_init_data){
0809 .name = "gp2_clk_src",
0810 .parent_names = gcc_xo_gpll0,
0811 .num_parents = 2,
0812 .ops = &clk_rcg2_ops,
0813 },
0814 };
0815
0816 static struct clk_rcg2 gp3_clk_src = {
0817 .cmd_rcgr = 0x1984,
0818 .mnd_width = 8,
0819 .hid_width = 5,
0820 .parent_map = gcc_xo_gpll0_map,
0821 .freq_tbl = ftbl_gcc_gp_clk,
0822 .clkr.hw.init = &(struct clk_init_data){
0823 .name = "gp3_clk_src",
0824 .parent_names = gcc_xo_gpll0,
0825 .num_parents = 2,
0826 .ops = &clk_rcg2_ops,
0827 },
0828 };
0829
0830 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
0831 F(60000000, P_GPLL0, 10, 0, 0),
0832 { }
0833 };
0834
0835 static struct clk_rcg2 pdm2_clk_src = {
0836 .cmd_rcgr = 0x0cd0,
0837 .hid_width = 5,
0838 .parent_map = gcc_xo_gpll0_map,
0839 .freq_tbl = ftbl_gcc_pdm2_clk,
0840 .clkr.hw.init = &(struct clk_init_data){
0841 .name = "pdm2_clk_src",
0842 .parent_names = gcc_xo_gpll0,
0843 .num_parents = 2,
0844 .ops = &clk_rcg2_ops,
0845 },
0846 };
0847
0848 static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
0849 F(144000, P_XO, 16, 3, 25),
0850 F(400000, P_XO, 12, 1, 4),
0851 F(20000000, P_GPLL0, 15, 1, 2),
0852 F(25000000, P_GPLL0, 12, 1, 2),
0853 F(50000000, P_GPLL0, 12, 0, 0),
0854 F(100000000, P_GPLL0, 6, 0, 0),
0855 F(200000000, P_GPLL0, 3, 0, 0),
0856 { }
0857 };
0858
0859 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_pro[] = {
0860 F(144000, P_XO, 16, 3, 25),
0861 F(400000, P_XO, 12, 1, 4),
0862 F(20000000, P_GPLL0, 15, 1, 2),
0863 F(25000000, P_GPLL0, 12, 1, 2),
0864 F(50000000, P_GPLL0, 12, 0, 0),
0865 F(100000000, P_GPLL0, 6, 0, 0),
0866 F(192000000, P_GPLL4, 4, 0, 0),
0867 F(200000000, P_GPLL0, 3, 0, 0),
0868 F(384000000, P_GPLL4, 2, 0, 0),
0869 { }
0870 };
0871
0872 static struct clk_init_data sdcc1_apps_clk_src_init = {
0873 .name = "sdcc1_apps_clk_src",
0874 .parent_names = gcc_xo_gpll0,
0875 .num_parents = 2,
0876 .ops = &clk_rcg2_floor_ops,
0877 };
0878
0879 static struct clk_rcg2 sdcc1_apps_clk_src = {
0880 .cmd_rcgr = 0x04d0,
0881 .mnd_width = 8,
0882 .hid_width = 5,
0883 .parent_map = gcc_xo_gpll0_map,
0884 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
0885 .clkr.hw.init = &sdcc1_apps_clk_src_init,
0886 };
0887
0888 static struct clk_rcg2 sdcc2_apps_clk_src = {
0889 .cmd_rcgr = 0x0510,
0890 .mnd_width = 8,
0891 .hid_width = 5,
0892 .parent_map = gcc_xo_gpll0_map,
0893 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
0894 .clkr.hw.init = &(struct clk_init_data){
0895 .name = "sdcc2_apps_clk_src",
0896 .parent_names = gcc_xo_gpll0,
0897 .num_parents = 2,
0898 .ops = &clk_rcg2_floor_ops,
0899 },
0900 };
0901
0902 static struct clk_rcg2 sdcc3_apps_clk_src = {
0903 .cmd_rcgr = 0x0550,
0904 .mnd_width = 8,
0905 .hid_width = 5,
0906 .parent_map = gcc_xo_gpll0_map,
0907 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
0908 .clkr.hw.init = &(struct clk_init_data){
0909 .name = "sdcc3_apps_clk_src",
0910 .parent_names = gcc_xo_gpll0,
0911 .num_parents = 2,
0912 .ops = &clk_rcg2_floor_ops,
0913 },
0914 };
0915
0916 static struct clk_rcg2 sdcc4_apps_clk_src = {
0917 .cmd_rcgr = 0x0590,
0918 .mnd_width = 8,
0919 .hid_width = 5,
0920 .parent_map = gcc_xo_gpll0_map,
0921 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
0922 .clkr.hw.init = &(struct clk_init_data){
0923 .name = "sdcc4_apps_clk_src",
0924 .parent_names = gcc_xo_gpll0,
0925 .num_parents = 2,
0926 .ops = &clk_rcg2_floor_ops,
0927 },
0928 };
0929
0930 static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = {
0931 F(105000, P_XO, 2, 1, 91),
0932 { }
0933 };
0934
0935 static struct clk_rcg2 tsif_ref_clk_src = {
0936 .cmd_rcgr = 0x0d90,
0937 .mnd_width = 8,
0938 .hid_width = 5,
0939 .parent_map = gcc_xo_gpll0_map,
0940 .freq_tbl = ftbl_gcc_tsif_ref_clk,
0941 .clkr.hw.init = &(struct clk_init_data){
0942 .name = "tsif_ref_clk_src",
0943 .parent_names = gcc_xo_gpll0,
0944 .num_parents = 2,
0945 .ops = &clk_rcg2_ops,
0946 },
0947 };
0948
0949 static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
0950 F(60000000, P_GPLL0, 10, 0, 0),
0951 { }
0952 };
0953
0954 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
0955 .cmd_rcgr = 0x03e8,
0956 .hid_width = 5,
0957 .parent_map = gcc_xo_gpll0_map,
0958 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
0959 .clkr.hw.init = &(struct clk_init_data){
0960 .name = "usb30_mock_utmi_clk_src",
0961 .parent_names = gcc_xo_gpll0,
0962 .num_parents = 2,
0963 .ops = &clk_rcg2_ops,
0964 },
0965 };
0966
0967 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
0968 F(60000000, P_GPLL0, 10, 0, 0),
0969 F(75000000, P_GPLL0, 8, 0, 0),
0970 { }
0971 };
0972
0973 static struct clk_rcg2 usb_hs_system_clk_src = {
0974 .cmd_rcgr = 0x0490,
0975 .hid_width = 5,
0976 .parent_map = gcc_xo_gpll0_map,
0977 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
0978 .clkr.hw.init = &(struct clk_init_data){
0979 .name = "usb_hs_system_clk_src",
0980 .parent_names = gcc_xo_gpll0,
0981 .num_parents = 2,
0982 .ops = &clk_rcg2_ops,
0983 },
0984 };
0985
0986 static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = {
0987 F(480000000, P_GPLL1, 1, 0, 0),
0988 { }
0989 };
0990
0991 static const struct parent_map usb_hsic_clk_src_map[] = {
0992 { P_XO, 0 },
0993 { P_GPLL1, 4 }
0994 };
0995
0996 static struct clk_rcg2 usb_hsic_clk_src = {
0997 .cmd_rcgr = 0x0440,
0998 .hid_width = 5,
0999 .parent_map = usb_hsic_clk_src_map,
1000 .freq_tbl = ftbl_gcc_usb_hsic_clk,
1001 .clkr.hw.init = &(struct clk_init_data){
1002 .name = "usb_hsic_clk_src",
1003 .parent_names = (const char *[]){
1004 "xo",
1005 "gpll1_vote",
1006 },
1007 .num_parents = 2,
1008 .ops = &clk_rcg2_ops,
1009 },
1010 };
1011
1012 static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1013 F(9600000, P_XO, 2, 0, 0),
1014 { }
1015 };
1016
1017 static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
1018 .cmd_rcgr = 0x0458,
1019 .hid_width = 5,
1020 .parent_map = gcc_xo_gpll0_map,
1021 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1022 .clkr.hw.init = &(struct clk_init_data){
1023 .name = "usb_hsic_io_cal_clk_src",
1024 .parent_names = gcc_xo_gpll0,
1025 .num_parents = 1,
1026 .ops = &clk_rcg2_ops,
1027 },
1028 };
1029
1030 static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1031 F(60000000, P_GPLL0, 10, 0, 0),
1032 F(75000000, P_GPLL0, 8, 0, 0),
1033 { }
1034 };
1035
1036 static struct clk_rcg2 usb_hsic_system_clk_src = {
1037 .cmd_rcgr = 0x041c,
1038 .hid_width = 5,
1039 .parent_map = gcc_xo_gpll0_map,
1040 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1041 .clkr.hw.init = &(struct clk_init_data){
1042 .name = "usb_hsic_system_clk_src",
1043 .parent_names = gcc_xo_gpll0,
1044 .num_parents = 2,
1045 .ops = &clk_rcg2_ops,
1046 },
1047 };
1048
1049 static struct clk_regmap gcc_mmss_gpll0_clk_src = {
1050 .enable_reg = 0x1484,
1051 .enable_mask = BIT(26),
1052 .hw.init = &(struct clk_init_data){
1053 .name = "mmss_gpll0_vote",
1054 .parent_names = (const char *[]){
1055 "gpll0_vote",
1056 },
1057 .num_parents = 1,
1058 .ops = &clk_branch_simple_ops,
1059 },
1060 };
1061
1062 static struct clk_branch gcc_bam_dma_ahb_clk = {
1063 .halt_reg = 0x0d44,
1064 .halt_check = BRANCH_HALT_VOTED,
1065 .clkr = {
1066 .enable_reg = 0x1484,
1067 .enable_mask = BIT(12),
1068 .hw.init = &(struct clk_init_data){
1069 .name = "gcc_bam_dma_ahb_clk",
1070 .parent_names = (const char *[]){
1071 "periph_noc_clk_src",
1072 },
1073 .num_parents = 1,
1074 .ops = &clk_branch2_ops,
1075 },
1076 },
1077 };
1078
1079 static struct clk_branch gcc_blsp1_ahb_clk = {
1080 .halt_reg = 0x05c4,
1081 .halt_check = BRANCH_HALT_VOTED,
1082 .clkr = {
1083 .enable_reg = 0x1484,
1084 .enable_mask = BIT(17),
1085 .hw.init = &(struct clk_init_data){
1086 .name = "gcc_blsp1_ahb_clk",
1087 .parent_names = (const char *[]){
1088 "periph_noc_clk_src",
1089 },
1090 .num_parents = 1,
1091 .ops = &clk_branch2_ops,
1092 },
1093 },
1094 };
1095
1096 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1097 .halt_reg = 0x0648,
1098 .clkr = {
1099 .enable_reg = 0x0648,
1100 .enable_mask = BIT(0),
1101 .hw.init = &(struct clk_init_data){
1102 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1103 .parent_names = (const char *[]){
1104 "blsp1_qup1_i2c_apps_clk_src",
1105 },
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_blsp1_qup1_spi_apps_clk = {
1114 .halt_reg = 0x0644,
1115 .clkr = {
1116 .enable_reg = 0x0644,
1117 .enable_mask = BIT(0),
1118 .hw.init = &(struct clk_init_data){
1119 .name = "gcc_blsp1_qup1_spi_apps_clk",
1120 .parent_names = (const char *[]){
1121 "blsp1_qup1_spi_apps_clk_src",
1122 },
1123 .num_parents = 1,
1124 .flags = CLK_SET_RATE_PARENT,
1125 .ops = &clk_branch2_ops,
1126 },
1127 },
1128 };
1129
1130 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1131 .halt_reg = 0x06c8,
1132 .clkr = {
1133 .enable_reg = 0x06c8,
1134 .enable_mask = BIT(0),
1135 .hw.init = &(struct clk_init_data){
1136 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1137 .parent_names = (const char *[]){
1138 "blsp1_qup2_i2c_apps_clk_src",
1139 },
1140 .num_parents = 1,
1141 .flags = CLK_SET_RATE_PARENT,
1142 .ops = &clk_branch2_ops,
1143 },
1144 },
1145 };
1146
1147 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1148 .halt_reg = 0x06c4,
1149 .clkr = {
1150 .enable_reg = 0x06c4,
1151 .enable_mask = BIT(0),
1152 .hw.init = &(struct clk_init_data){
1153 .name = "gcc_blsp1_qup2_spi_apps_clk",
1154 .parent_names = (const char *[]){
1155 "blsp1_qup2_spi_apps_clk_src",
1156 },
1157 .num_parents = 1,
1158 .flags = CLK_SET_RATE_PARENT,
1159 .ops = &clk_branch2_ops,
1160 },
1161 },
1162 };
1163
1164 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1165 .halt_reg = 0x0748,
1166 .clkr = {
1167 .enable_reg = 0x0748,
1168 .enable_mask = BIT(0),
1169 .hw.init = &(struct clk_init_data){
1170 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1171 .parent_names = (const char *[]){
1172 "blsp1_qup3_i2c_apps_clk_src",
1173 },
1174 .num_parents = 1,
1175 .flags = CLK_SET_RATE_PARENT,
1176 .ops = &clk_branch2_ops,
1177 },
1178 },
1179 };
1180
1181 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1182 .halt_reg = 0x0744,
1183 .clkr = {
1184 .enable_reg = 0x0744,
1185 .enable_mask = BIT(0),
1186 .hw.init = &(struct clk_init_data){
1187 .name = "gcc_blsp1_qup3_spi_apps_clk",
1188 .parent_names = (const char *[]){
1189 "blsp1_qup3_spi_apps_clk_src",
1190 },
1191 .num_parents = 1,
1192 .flags = CLK_SET_RATE_PARENT,
1193 .ops = &clk_branch2_ops,
1194 },
1195 },
1196 };
1197
1198 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1199 .halt_reg = 0x07c8,
1200 .clkr = {
1201 .enable_reg = 0x07c8,
1202 .enable_mask = BIT(0),
1203 .hw.init = &(struct clk_init_data){
1204 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1205 .parent_names = (const char *[]){
1206 "blsp1_qup4_i2c_apps_clk_src",
1207 },
1208 .num_parents = 1,
1209 .flags = CLK_SET_RATE_PARENT,
1210 .ops = &clk_branch2_ops,
1211 },
1212 },
1213 };
1214
1215 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1216 .halt_reg = 0x07c4,
1217 .clkr = {
1218 .enable_reg = 0x07c4,
1219 .enable_mask = BIT(0),
1220 .hw.init = &(struct clk_init_data){
1221 .name = "gcc_blsp1_qup4_spi_apps_clk",
1222 .parent_names = (const char *[]){
1223 "blsp1_qup4_spi_apps_clk_src",
1224 },
1225 .num_parents = 1,
1226 .flags = CLK_SET_RATE_PARENT,
1227 .ops = &clk_branch2_ops,
1228 },
1229 },
1230 };
1231
1232 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1233 .halt_reg = 0x0848,
1234 .clkr = {
1235 .enable_reg = 0x0848,
1236 .enable_mask = BIT(0),
1237 .hw.init = &(struct clk_init_data){
1238 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1239 .parent_names = (const char *[]){
1240 "blsp1_qup5_i2c_apps_clk_src",
1241 },
1242 .num_parents = 1,
1243 .flags = CLK_SET_RATE_PARENT,
1244 .ops = &clk_branch2_ops,
1245 },
1246 },
1247 };
1248
1249 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1250 .halt_reg = 0x0844,
1251 .clkr = {
1252 .enable_reg = 0x0844,
1253 .enable_mask = BIT(0),
1254 .hw.init = &(struct clk_init_data){
1255 .name = "gcc_blsp1_qup5_spi_apps_clk",
1256 .parent_names = (const char *[]){
1257 "blsp1_qup5_spi_apps_clk_src",
1258 },
1259 .num_parents = 1,
1260 .flags = CLK_SET_RATE_PARENT,
1261 .ops = &clk_branch2_ops,
1262 },
1263 },
1264 };
1265
1266 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1267 .halt_reg = 0x08c8,
1268 .clkr = {
1269 .enable_reg = 0x08c8,
1270 .enable_mask = BIT(0),
1271 .hw.init = &(struct clk_init_data){
1272 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1273 .parent_names = (const char *[]){
1274 "blsp1_qup6_i2c_apps_clk_src",
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_blsp1_qup6_spi_apps_clk = {
1284 .halt_reg = 0x08c4,
1285 .clkr = {
1286 .enable_reg = 0x08c4,
1287 .enable_mask = BIT(0),
1288 .hw.init = &(struct clk_init_data){
1289 .name = "gcc_blsp1_qup6_spi_apps_clk",
1290 .parent_names = (const char *[]){
1291 "blsp1_qup6_spi_apps_clk_src",
1292 },
1293 .num_parents = 1,
1294 .flags = CLK_SET_RATE_PARENT,
1295 .ops = &clk_branch2_ops,
1296 },
1297 },
1298 };
1299
1300 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1301 .halt_reg = 0x0684,
1302 .clkr = {
1303 .enable_reg = 0x0684,
1304 .enable_mask = BIT(0),
1305 .hw.init = &(struct clk_init_data){
1306 .name = "gcc_blsp1_uart1_apps_clk",
1307 .parent_names = (const char *[]){
1308 "blsp1_uart1_apps_clk_src",
1309 },
1310 .num_parents = 1,
1311 .flags = CLK_SET_RATE_PARENT,
1312 .ops = &clk_branch2_ops,
1313 },
1314 },
1315 };
1316
1317 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1318 .halt_reg = 0x0704,
1319 .clkr = {
1320 .enable_reg = 0x0704,
1321 .enable_mask = BIT(0),
1322 .hw.init = &(struct clk_init_data){
1323 .name = "gcc_blsp1_uart2_apps_clk",
1324 .parent_names = (const char *[]){
1325 "blsp1_uart2_apps_clk_src",
1326 },
1327 .num_parents = 1,
1328 .flags = CLK_SET_RATE_PARENT,
1329 .ops = &clk_branch2_ops,
1330 },
1331 },
1332 };
1333
1334 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1335 .halt_reg = 0x0784,
1336 .clkr = {
1337 .enable_reg = 0x0784,
1338 .enable_mask = BIT(0),
1339 .hw.init = &(struct clk_init_data){
1340 .name = "gcc_blsp1_uart3_apps_clk",
1341 .parent_names = (const char *[]){
1342 "blsp1_uart3_apps_clk_src",
1343 },
1344 .num_parents = 1,
1345 .flags = CLK_SET_RATE_PARENT,
1346 .ops = &clk_branch2_ops,
1347 },
1348 },
1349 };
1350
1351 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1352 .halt_reg = 0x0804,
1353 .clkr = {
1354 .enable_reg = 0x0804,
1355 .enable_mask = BIT(0),
1356 .hw.init = &(struct clk_init_data){
1357 .name = "gcc_blsp1_uart4_apps_clk",
1358 .parent_names = (const char *[]){
1359 "blsp1_uart4_apps_clk_src",
1360 },
1361 .num_parents = 1,
1362 .flags = CLK_SET_RATE_PARENT,
1363 .ops = &clk_branch2_ops,
1364 },
1365 },
1366 };
1367
1368 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1369 .halt_reg = 0x0884,
1370 .clkr = {
1371 .enable_reg = 0x0884,
1372 .enable_mask = BIT(0),
1373 .hw.init = &(struct clk_init_data){
1374 .name = "gcc_blsp1_uart5_apps_clk",
1375 .parent_names = (const char *[]){
1376 "blsp1_uart5_apps_clk_src",
1377 },
1378 .num_parents = 1,
1379 .flags = CLK_SET_RATE_PARENT,
1380 .ops = &clk_branch2_ops,
1381 },
1382 },
1383 };
1384
1385 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1386 .halt_reg = 0x0904,
1387 .clkr = {
1388 .enable_reg = 0x0904,
1389 .enable_mask = BIT(0),
1390 .hw.init = &(struct clk_init_data){
1391 .name = "gcc_blsp1_uart6_apps_clk",
1392 .parent_names = (const char *[]){
1393 "blsp1_uart6_apps_clk_src",
1394 },
1395 .num_parents = 1,
1396 .flags = CLK_SET_RATE_PARENT,
1397 .ops = &clk_branch2_ops,
1398 },
1399 },
1400 };
1401
1402 static struct clk_branch gcc_blsp2_ahb_clk = {
1403 .halt_reg = 0x0944,
1404 .halt_check = BRANCH_HALT_VOTED,
1405 .clkr = {
1406 .enable_reg = 0x1484,
1407 .enable_mask = BIT(15),
1408 .hw.init = &(struct clk_init_data){
1409 .name = "gcc_blsp2_ahb_clk",
1410 .parent_names = (const char *[]){
1411 "periph_noc_clk_src",
1412 },
1413 .num_parents = 1,
1414 .ops = &clk_branch2_ops,
1415 },
1416 },
1417 };
1418
1419 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1420 .halt_reg = 0x0988,
1421 .clkr = {
1422 .enable_reg = 0x0988,
1423 .enable_mask = BIT(0),
1424 .hw.init = &(struct clk_init_data){
1425 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1426 .parent_names = (const char *[]){
1427 "blsp2_qup1_i2c_apps_clk_src",
1428 },
1429 .num_parents = 1,
1430 .flags = CLK_SET_RATE_PARENT,
1431 .ops = &clk_branch2_ops,
1432 },
1433 },
1434 };
1435
1436 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1437 .halt_reg = 0x0984,
1438 .clkr = {
1439 .enable_reg = 0x0984,
1440 .enable_mask = BIT(0),
1441 .hw.init = &(struct clk_init_data){
1442 .name = "gcc_blsp2_qup1_spi_apps_clk",
1443 .parent_names = (const char *[]){
1444 "blsp2_qup1_spi_apps_clk_src",
1445 },
1446 .num_parents = 1,
1447 .flags = CLK_SET_RATE_PARENT,
1448 .ops = &clk_branch2_ops,
1449 },
1450 },
1451 };
1452
1453 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1454 .halt_reg = 0x0a08,
1455 .clkr = {
1456 .enable_reg = 0x0a08,
1457 .enable_mask = BIT(0),
1458 .hw.init = &(struct clk_init_data){
1459 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1460 .parent_names = (const char *[]){
1461 "blsp2_qup2_i2c_apps_clk_src",
1462 },
1463 .num_parents = 1,
1464 .flags = CLK_SET_RATE_PARENT,
1465 .ops = &clk_branch2_ops,
1466 },
1467 },
1468 };
1469
1470 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1471 .halt_reg = 0x0a04,
1472 .clkr = {
1473 .enable_reg = 0x0a04,
1474 .enable_mask = BIT(0),
1475 .hw.init = &(struct clk_init_data){
1476 .name = "gcc_blsp2_qup2_spi_apps_clk",
1477 .parent_names = (const char *[]){
1478 "blsp2_qup2_spi_apps_clk_src",
1479 },
1480 .num_parents = 1,
1481 .flags = CLK_SET_RATE_PARENT,
1482 .ops = &clk_branch2_ops,
1483 },
1484 },
1485 };
1486
1487 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1488 .halt_reg = 0x0a88,
1489 .clkr = {
1490 .enable_reg = 0x0a88,
1491 .enable_mask = BIT(0),
1492 .hw.init = &(struct clk_init_data){
1493 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1494 .parent_names = (const char *[]){
1495 "blsp2_qup3_i2c_apps_clk_src",
1496 },
1497 .num_parents = 1,
1498 .flags = CLK_SET_RATE_PARENT,
1499 .ops = &clk_branch2_ops,
1500 },
1501 },
1502 };
1503
1504 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1505 .halt_reg = 0x0a84,
1506 .clkr = {
1507 .enable_reg = 0x0a84,
1508 .enable_mask = BIT(0),
1509 .hw.init = &(struct clk_init_data){
1510 .name = "gcc_blsp2_qup3_spi_apps_clk",
1511 .parent_names = (const char *[]){
1512 "blsp2_qup3_spi_apps_clk_src",
1513 },
1514 .num_parents = 1,
1515 .flags = CLK_SET_RATE_PARENT,
1516 .ops = &clk_branch2_ops,
1517 },
1518 },
1519 };
1520
1521 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1522 .halt_reg = 0x0b08,
1523 .clkr = {
1524 .enable_reg = 0x0b08,
1525 .enable_mask = BIT(0),
1526 .hw.init = &(struct clk_init_data){
1527 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1528 .parent_names = (const char *[]){
1529 "blsp2_qup4_i2c_apps_clk_src",
1530 },
1531 .num_parents = 1,
1532 .flags = CLK_SET_RATE_PARENT,
1533 .ops = &clk_branch2_ops,
1534 },
1535 },
1536 };
1537
1538 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1539 .halt_reg = 0x0b04,
1540 .clkr = {
1541 .enable_reg = 0x0b04,
1542 .enable_mask = BIT(0),
1543 .hw.init = &(struct clk_init_data){
1544 .name = "gcc_blsp2_qup4_spi_apps_clk",
1545 .parent_names = (const char *[]){
1546 "blsp2_qup4_spi_apps_clk_src",
1547 },
1548 .num_parents = 1,
1549 .flags = CLK_SET_RATE_PARENT,
1550 .ops = &clk_branch2_ops,
1551 },
1552 },
1553 };
1554
1555 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1556 .halt_reg = 0x0b88,
1557 .clkr = {
1558 .enable_reg = 0x0b88,
1559 .enable_mask = BIT(0),
1560 .hw.init = &(struct clk_init_data){
1561 .name = "gcc_blsp2_qup5_i2c_apps_clk",
1562 .parent_names = (const char *[]){
1563 "blsp2_qup5_i2c_apps_clk_src",
1564 },
1565 .num_parents = 1,
1566 .flags = CLK_SET_RATE_PARENT,
1567 .ops = &clk_branch2_ops,
1568 },
1569 },
1570 };
1571
1572 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1573 .halt_reg = 0x0b84,
1574 .clkr = {
1575 .enable_reg = 0x0b84,
1576 .enable_mask = BIT(0),
1577 .hw.init = &(struct clk_init_data){
1578 .name = "gcc_blsp2_qup5_spi_apps_clk",
1579 .parent_names = (const char *[]){
1580 "blsp2_qup5_spi_apps_clk_src",
1581 },
1582 .num_parents = 1,
1583 .flags = CLK_SET_RATE_PARENT,
1584 .ops = &clk_branch2_ops,
1585 },
1586 },
1587 };
1588
1589 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1590 .halt_reg = 0x0c08,
1591 .clkr = {
1592 .enable_reg = 0x0c08,
1593 .enable_mask = BIT(0),
1594 .hw.init = &(struct clk_init_data){
1595 .name = "gcc_blsp2_qup6_i2c_apps_clk",
1596 .parent_names = (const char *[]){
1597 "blsp2_qup6_i2c_apps_clk_src",
1598 },
1599 .num_parents = 1,
1600 .flags = CLK_SET_RATE_PARENT,
1601 .ops = &clk_branch2_ops,
1602 },
1603 },
1604 };
1605
1606 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1607 .halt_reg = 0x0c04,
1608 .clkr = {
1609 .enable_reg = 0x0c04,
1610 .enable_mask = BIT(0),
1611 .hw.init = &(struct clk_init_data){
1612 .name = "gcc_blsp2_qup6_spi_apps_clk",
1613 .parent_names = (const char *[]){
1614 "blsp2_qup6_spi_apps_clk_src",
1615 },
1616 .num_parents = 1,
1617 .flags = CLK_SET_RATE_PARENT,
1618 .ops = &clk_branch2_ops,
1619 },
1620 },
1621 };
1622
1623 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1624 .halt_reg = 0x09c4,
1625 .clkr = {
1626 .enable_reg = 0x09c4,
1627 .enable_mask = BIT(0),
1628 .hw.init = &(struct clk_init_data){
1629 .name = "gcc_blsp2_uart1_apps_clk",
1630 .parent_names = (const char *[]){
1631 "blsp2_uart1_apps_clk_src",
1632 },
1633 .num_parents = 1,
1634 .flags = CLK_SET_RATE_PARENT,
1635 .ops = &clk_branch2_ops,
1636 },
1637 },
1638 };
1639
1640 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1641 .halt_reg = 0x0a44,
1642 .clkr = {
1643 .enable_reg = 0x0a44,
1644 .enable_mask = BIT(0),
1645 .hw.init = &(struct clk_init_data){
1646 .name = "gcc_blsp2_uart2_apps_clk",
1647 .parent_names = (const char *[]){
1648 "blsp2_uart2_apps_clk_src",
1649 },
1650 .num_parents = 1,
1651 .flags = CLK_SET_RATE_PARENT,
1652 .ops = &clk_branch2_ops,
1653 },
1654 },
1655 };
1656
1657 static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1658 .halt_reg = 0x0ac4,
1659 .clkr = {
1660 .enable_reg = 0x0ac4,
1661 .enable_mask = BIT(0),
1662 .hw.init = &(struct clk_init_data){
1663 .name = "gcc_blsp2_uart3_apps_clk",
1664 .parent_names = (const char *[]){
1665 "blsp2_uart3_apps_clk_src",
1666 },
1667 .num_parents = 1,
1668 .flags = CLK_SET_RATE_PARENT,
1669 .ops = &clk_branch2_ops,
1670 },
1671 },
1672 };
1673
1674 static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1675 .halt_reg = 0x0b44,
1676 .clkr = {
1677 .enable_reg = 0x0b44,
1678 .enable_mask = BIT(0),
1679 .hw.init = &(struct clk_init_data){
1680 .name = "gcc_blsp2_uart4_apps_clk",
1681 .parent_names = (const char *[]){
1682 "blsp2_uart4_apps_clk_src",
1683 },
1684 .num_parents = 1,
1685 .flags = CLK_SET_RATE_PARENT,
1686 .ops = &clk_branch2_ops,
1687 },
1688 },
1689 };
1690
1691 static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1692 .halt_reg = 0x0bc4,
1693 .clkr = {
1694 .enable_reg = 0x0bc4,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "gcc_blsp2_uart5_apps_clk",
1698 .parent_names = (const char *[]){
1699 "blsp2_uart5_apps_clk_src",
1700 },
1701 .num_parents = 1,
1702 .flags = CLK_SET_RATE_PARENT,
1703 .ops = &clk_branch2_ops,
1704 },
1705 },
1706 };
1707
1708 static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1709 .halt_reg = 0x0c44,
1710 .clkr = {
1711 .enable_reg = 0x0c44,
1712 .enable_mask = BIT(0),
1713 .hw.init = &(struct clk_init_data){
1714 .name = "gcc_blsp2_uart6_apps_clk",
1715 .parent_names = (const char *[]){
1716 "blsp2_uart6_apps_clk_src",
1717 },
1718 .num_parents = 1,
1719 .flags = CLK_SET_RATE_PARENT,
1720 .ops = &clk_branch2_ops,
1721 },
1722 },
1723 };
1724
1725 static struct clk_branch gcc_boot_rom_ahb_clk = {
1726 .halt_reg = 0x0e04,
1727 .halt_check = BRANCH_HALT_VOTED,
1728 .clkr = {
1729 .enable_reg = 0x1484,
1730 .enable_mask = BIT(10),
1731 .hw.init = &(struct clk_init_data){
1732 .name = "gcc_boot_rom_ahb_clk",
1733 .parent_names = (const char *[]){
1734 "config_noc_clk_src",
1735 },
1736 .num_parents = 1,
1737 .ops = &clk_branch2_ops,
1738 },
1739 },
1740 };
1741
1742 static struct clk_branch gcc_ce1_ahb_clk = {
1743 .halt_reg = 0x104c,
1744 .halt_check = BRANCH_HALT_VOTED,
1745 .clkr = {
1746 .enable_reg = 0x1484,
1747 .enable_mask = BIT(3),
1748 .hw.init = &(struct clk_init_data){
1749 .name = "gcc_ce1_ahb_clk",
1750 .parent_names = (const char *[]){
1751 "config_noc_clk_src",
1752 },
1753 .num_parents = 1,
1754 .ops = &clk_branch2_ops,
1755 },
1756 },
1757 };
1758
1759 static struct clk_branch gcc_ce1_axi_clk = {
1760 .halt_reg = 0x1048,
1761 .halt_check = BRANCH_HALT_VOTED,
1762 .clkr = {
1763 .enable_reg = 0x1484,
1764 .enable_mask = BIT(4),
1765 .hw.init = &(struct clk_init_data){
1766 .name = "gcc_ce1_axi_clk",
1767 .parent_names = (const char *[]){
1768 "system_noc_clk_src",
1769 },
1770 .num_parents = 1,
1771 .ops = &clk_branch2_ops,
1772 },
1773 },
1774 };
1775
1776 static struct clk_branch gcc_ce1_clk = {
1777 .halt_reg = 0x1050,
1778 .halt_check = BRANCH_HALT_VOTED,
1779 .clkr = {
1780 .enable_reg = 0x1484,
1781 .enable_mask = BIT(5),
1782 .hw.init = &(struct clk_init_data){
1783 .name = "gcc_ce1_clk",
1784 .parent_names = (const char *[]){
1785 "ce1_clk_src",
1786 },
1787 .num_parents = 1,
1788 .flags = CLK_SET_RATE_PARENT,
1789 .ops = &clk_branch2_ops,
1790 },
1791 },
1792 };
1793
1794 static struct clk_branch gcc_ce2_ahb_clk = {
1795 .halt_reg = 0x108c,
1796 .halt_check = BRANCH_HALT_VOTED,
1797 .clkr = {
1798 .enable_reg = 0x1484,
1799 .enable_mask = BIT(0),
1800 .hw.init = &(struct clk_init_data){
1801 .name = "gcc_ce2_ahb_clk",
1802 .parent_names = (const char *[]){
1803 "config_noc_clk_src",
1804 },
1805 .num_parents = 1,
1806 .ops = &clk_branch2_ops,
1807 },
1808 },
1809 };
1810
1811 static struct clk_branch gcc_ce2_axi_clk = {
1812 .halt_reg = 0x1088,
1813 .halt_check = BRANCH_HALT_VOTED,
1814 .clkr = {
1815 .enable_reg = 0x1484,
1816 .enable_mask = BIT(1),
1817 .hw.init = &(struct clk_init_data){
1818 .name = "gcc_ce2_axi_clk",
1819 .parent_names = (const char *[]){
1820 "system_noc_clk_src",
1821 },
1822 .num_parents = 1,
1823 .ops = &clk_branch2_ops,
1824 },
1825 },
1826 };
1827
1828 static struct clk_branch gcc_ce2_clk = {
1829 .halt_reg = 0x1090,
1830 .halt_check = BRANCH_HALT_VOTED,
1831 .clkr = {
1832 .enable_reg = 0x1484,
1833 .enable_mask = BIT(2),
1834 .hw.init = &(struct clk_init_data){
1835 .name = "gcc_ce2_clk",
1836 .parent_names = (const char *[]){
1837 "ce2_clk_src",
1838 },
1839 .num_parents = 1,
1840 .flags = CLK_SET_RATE_PARENT,
1841 .ops = &clk_branch2_ops,
1842 },
1843 },
1844 };
1845
1846 static struct clk_branch gcc_gp1_clk = {
1847 .halt_reg = 0x1900,
1848 .clkr = {
1849 .enable_reg = 0x1900,
1850 .enable_mask = BIT(0),
1851 .hw.init = &(struct clk_init_data){
1852 .name = "gcc_gp1_clk",
1853 .parent_names = (const char *[]){
1854 "gp1_clk_src",
1855 },
1856 .num_parents = 1,
1857 .flags = CLK_SET_RATE_PARENT,
1858 .ops = &clk_branch2_ops,
1859 },
1860 },
1861 };
1862
1863 static struct clk_branch gcc_gp2_clk = {
1864 .halt_reg = 0x1940,
1865 .clkr = {
1866 .enable_reg = 0x1940,
1867 .enable_mask = BIT(0),
1868 .hw.init = &(struct clk_init_data){
1869 .name = "gcc_gp2_clk",
1870 .parent_names = (const char *[]){
1871 "gp2_clk_src",
1872 },
1873 .num_parents = 1,
1874 .flags = CLK_SET_RATE_PARENT,
1875 .ops = &clk_branch2_ops,
1876 },
1877 },
1878 };
1879
1880 static struct clk_branch gcc_gp3_clk = {
1881 .halt_reg = 0x1980,
1882 .clkr = {
1883 .enable_reg = 0x1980,
1884 .enable_mask = BIT(0),
1885 .hw.init = &(struct clk_init_data){
1886 .name = "gcc_gp3_clk",
1887 .parent_names = (const char *[]){
1888 "gp3_clk_src",
1889 },
1890 .num_parents = 1,
1891 .flags = CLK_SET_RATE_PARENT,
1892 .ops = &clk_branch2_ops,
1893 },
1894 },
1895 };
1896
1897 static struct clk_branch gcc_lpass_q6_axi_clk = {
1898 .halt_reg = 0x11c0,
1899 .clkr = {
1900 .enable_reg = 0x11c0,
1901 .enable_mask = BIT(0),
1902 .hw.init = &(struct clk_init_data){
1903 .name = "gcc_lpass_q6_axi_clk",
1904 .parent_names = (const char *[]){
1905 "system_noc_clk_src",
1906 },
1907 .num_parents = 1,
1908 .ops = &clk_branch2_ops,
1909 },
1910 },
1911 };
1912
1913 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1914 .halt_reg = 0x024c,
1915 .clkr = {
1916 .enable_reg = 0x024c,
1917 .enable_mask = BIT(0),
1918 .hw.init = &(struct clk_init_data){
1919 .name = "gcc_mmss_noc_cfg_ahb_clk",
1920 .parent_names = (const char *[]){
1921 "config_noc_clk_src",
1922 },
1923 .num_parents = 1,
1924 .ops = &clk_branch2_ops,
1925 .flags = CLK_IGNORE_UNUSED,
1926 },
1927 },
1928 };
1929
1930 static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = {
1931 .halt_reg = 0x0248,
1932 .clkr = {
1933 .enable_reg = 0x0248,
1934 .enable_mask = BIT(0),
1935 .hw.init = &(struct clk_init_data){
1936 .name = "gcc_ocmem_noc_cfg_ahb_clk",
1937 .parent_names = (const char *[]){
1938 "config_noc_clk_src",
1939 },
1940 .num_parents = 1,
1941 .ops = &clk_branch2_ops,
1942 },
1943 },
1944 };
1945
1946 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1947 .halt_reg = 0x0280,
1948 .clkr = {
1949 .enable_reg = 0x0280,
1950 .enable_mask = BIT(0),
1951 .hw.init = &(struct clk_init_data){
1952 .name = "gcc_mss_cfg_ahb_clk",
1953 .parent_names = (const char *[]){
1954 "config_noc_clk_src",
1955 },
1956 .num_parents = 1,
1957 .ops = &clk_branch2_ops,
1958 },
1959 },
1960 };
1961
1962 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1963 .halt_reg = 0x0284,
1964 .clkr = {
1965 .enable_reg = 0x0284,
1966 .enable_mask = BIT(0),
1967 .hw.init = &(struct clk_init_data){
1968 .name = "gcc_mss_q6_bimc_axi_clk",
1969 .parent_names = (const char *[]){
1970 "system_noc_clk_src",
1971 },
1972 .num_parents = 1,
1973 .ops = &clk_branch2_ops,
1974 },
1975 },
1976 };
1977
1978 static struct clk_branch gcc_pdm2_clk = {
1979 .halt_reg = 0x0ccc,
1980 .clkr = {
1981 .enable_reg = 0x0ccc,
1982 .enable_mask = BIT(0),
1983 .hw.init = &(struct clk_init_data){
1984 .name = "gcc_pdm2_clk",
1985 .parent_names = (const char *[]){
1986 "pdm2_clk_src",
1987 },
1988 .num_parents = 1,
1989 .flags = CLK_SET_RATE_PARENT,
1990 .ops = &clk_branch2_ops,
1991 },
1992 },
1993 };
1994
1995 static struct clk_branch gcc_pdm_ahb_clk = {
1996 .halt_reg = 0x0cc4,
1997 .clkr = {
1998 .enable_reg = 0x0cc4,
1999 .enable_mask = BIT(0),
2000 .hw.init = &(struct clk_init_data){
2001 .name = "gcc_pdm_ahb_clk",
2002 .parent_names = (const char *[]){
2003 "periph_noc_clk_src",
2004 },
2005 .num_parents = 1,
2006 .ops = &clk_branch2_ops,
2007 },
2008 },
2009 };
2010
2011 static struct clk_branch gcc_pdm_xo4_clk = {
2012 .halt_reg = 0x0cc8,
2013 .clkr = {
2014 .enable_reg = 0x0cc8,
2015 .enable_mask = BIT(0),
2016 .hw.init = &(struct clk_init_data){
2017 .name = "gcc_pdm_xo4_clk",
2018 .parent_names = (const char *[]){ "xo" },
2019 .num_parents = 1,
2020 .ops = &clk_branch2_ops,
2021 },
2022 },
2023 };
2024
2025 static struct clk_branch gcc_prng_ahb_clk = {
2026 .halt_reg = 0x0d04,
2027 .halt_check = BRANCH_HALT_VOTED,
2028 .clkr = {
2029 .enable_reg = 0x1484,
2030 .enable_mask = BIT(13),
2031 .hw.init = &(struct clk_init_data){
2032 .name = "gcc_prng_ahb_clk",
2033 .parent_names = (const char *[]){
2034 "periph_noc_clk_src",
2035 },
2036 .num_parents = 1,
2037 .ops = &clk_branch2_ops,
2038 },
2039 },
2040 };
2041
2042 static struct clk_branch gcc_sdcc1_ahb_clk = {
2043 .halt_reg = 0x04c8,
2044 .clkr = {
2045 .enable_reg = 0x04c8,
2046 .enable_mask = BIT(0),
2047 .hw.init = &(struct clk_init_data){
2048 .name = "gcc_sdcc1_ahb_clk",
2049 .parent_names = (const char *[]){
2050 "periph_noc_clk_src",
2051 },
2052 .num_parents = 1,
2053 .ops = &clk_branch2_ops,
2054 },
2055 },
2056 };
2057
2058 static struct clk_branch gcc_sdcc1_apps_clk = {
2059 .halt_reg = 0x04c4,
2060 .clkr = {
2061 .enable_reg = 0x04c4,
2062 .enable_mask = BIT(0),
2063 .hw.init = &(struct clk_init_data){
2064 .name = "gcc_sdcc1_apps_clk",
2065 .parent_names = (const char *[]){
2066 "sdcc1_apps_clk_src",
2067 },
2068 .num_parents = 1,
2069 .flags = CLK_SET_RATE_PARENT,
2070 .ops = &clk_branch2_ops,
2071 },
2072 },
2073 };
2074
2075 static struct clk_branch gcc_sdcc1_cdccal_ff_clk = {
2076 .halt_reg = 0x04e8,
2077 .clkr = {
2078 .enable_reg = 0x04e8,
2079 .enable_mask = BIT(0),
2080 .hw.init = &(struct clk_init_data){
2081 .name = "gcc_sdcc1_cdccal_ff_clk",
2082 .parent_names = (const char *[]){
2083 "xo"
2084 },
2085 .num_parents = 1,
2086 .ops = &clk_branch2_ops,
2087 },
2088 },
2089 };
2090
2091 static struct clk_branch gcc_sdcc1_cdccal_sleep_clk = {
2092 .halt_reg = 0x04e4,
2093 .clkr = {
2094 .enable_reg = 0x04e4,
2095 .enable_mask = BIT(0),
2096 .hw.init = &(struct clk_init_data){
2097 .name = "gcc_sdcc1_cdccal_sleep_clk",
2098 .parent_names = (const char *[]){
2099 "sleep_clk_src"
2100 },
2101 .num_parents = 1,
2102 .ops = &clk_branch2_ops,
2103 },
2104 },
2105 };
2106
2107 static struct clk_branch gcc_sdcc2_ahb_clk = {
2108 .halt_reg = 0x0508,
2109 .clkr = {
2110 .enable_reg = 0x0508,
2111 .enable_mask = BIT(0),
2112 .hw.init = &(struct clk_init_data){
2113 .name = "gcc_sdcc2_ahb_clk",
2114 .parent_names = (const char *[]){
2115 "periph_noc_clk_src",
2116 },
2117 .num_parents = 1,
2118 .ops = &clk_branch2_ops,
2119 },
2120 },
2121 };
2122
2123 static struct clk_branch gcc_sdcc2_apps_clk = {
2124 .halt_reg = 0x0504,
2125 .clkr = {
2126 .enable_reg = 0x0504,
2127 .enable_mask = BIT(0),
2128 .hw.init = &(struct clk_init_data){
2129 .name = "gcc_sdcc2_apps_clk",
2130 .parent_names = (const char *[]){
2131 "sdcc2_apps_clk_src",
2132 },
2133 .num_parents = 1,
2134 .flags = CLK_SET_RATE_PARENT,
2135 .ops = &clk_branch2_ops,
2136 },
2137 },
2138 };
2139
2140 static struct clk_branch gcc_sdcc3_ahb_clk = {
2141 .halt_reg = 0x0548,
2142 .clkr = {
2143 .enable_reg = 0x0548,
2144 .enable_mask = BIT(0),
2145 .hw.init = &(struct clk_init_data){
2146 .name = "gcc_sdcc3_ahb_clk",
2147 .parent_names = (const char *[]){
2148 "periph_noc_clk_src",
2149 },
2150 .num_parents = 1,
2151 .ops = &clk_branch2_ops,
2152 },
2153 },
2154 };
2155
2156 static struct clk_branch gcc_sdcc3_apps_clk = {
2157 .halt_reg = 0x0544,
2158 .clkr = {
2159 .enable_reg = 0x0544,
2160 .enable_mask = BIT(0),
2161 .hw.init = &(struct clk_init_data){
2162 .name = "gcc_sdcc3_apps_clk",
2163 .parent_names = (const char *[]){
2164 "sdcc3_apps_clk_src",
2165 },
2166 .num_parents = 1,
2167 .flags = CLK_SET_RATE_PARENT,
2168 .ops = &clk_branch2_ops,
2169 },
2170 },
2171 };
2172
2173 static struct clk_branch gcc_sdcc4_ahb_clk = {
2174 .halt_reg = 0x0588,
2175 .clkr = {
2176 .enable_reg = 0x0588,
2177 .enable_mask = BIT(0),
2178 .hw.init = &(struct clk_init_data){
2179 .name = "gcc_sdcc4_ahb_clk",
2180 .parent_names = (const char *[]){
2181 "periph_noc_clk_src",
2182 },
2183 .num_parents = 1,
2184 .ops = &clk_branch2_ops,
2185 },
2186 },
2187 };
2188
2189 static struct clk_branch gcc_sdcc4_apps_clk = {
2190 .halt_reg = 0x0584,
2191 .clkr = {
2192 .enable_reg = 0x0584,
2193 .enable_mask = BIT(0),
2194 .hw.init = &(struct clk_init_data){
2195 .name = "gcc_sdcc4_apps_clk",
2196 .parent_names = (const char *[]){
2197 "sdcc4_apps_clk_src",
2198 },
2199 .num_parents = 1,
2200 .flags = CLK_SET_RATE_PARENT,
2201 .ops = &clk_branch2_ops,
2202 },
2203 },
2204 };
2205
2206 static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2207 .halt_reg = 0x0108,
2208 .clkr = {
2209 .enable_reg = 0x0108,
2210 .enable_mask = BIT(0),
2211 .hw.init = &(struct clk_init_data){
2212 .name = "gcc_sys_noc_usb3_axi_clk",
2213 .parent_names = (const char *[]){
2214 "usb30_master_clk_src",
2215 },
2216 .num_parents = 1,
2217 .flags = CLK_SET_RATE_PARENT,
2218 .ops = &clk_branch2_ops,
2219 },
2220 },
2221 };
2222
2223 static struct clk_branch gcc_tsif_ahb_clk = {
2224 .halt_reg = 0x0d84,
2225 .clkr = {
2226 .enable_reg = 0x0d84,
2227 .enable_mask = BIT(0),
2228 .hw.init = &(struct clk_init_data){
2229 .name = "gcc_tsif_ahb_clk",
2230 .parent_names = (const char *[]){
2231 "periph_noc_clk_src",
2232 },
2233 .num_parents = 1,
2234 .ops = &clk_branch2_ops,
2235 },
2236 },
2237 };
2238
2239 static struct clk_branch gcc_tsif_ref_clk = {
2240 .halt_reg = 0x0d88,
2241 .clkr = {
2242 .enable_reg = 0x0d88,
2243 .enable_mask = BIT(0),
2244 .hw.init = &(struct clk_init_data){
2245 .name = "gcc_tsif_ref_clk",
2246 .parent_names = (const char *[]){
2247 "tsif_ref_clk_src",
2248 },
2249 .num_parents = 1,
2250 .flags = CLK_SET_RATE_PARENT,
2251 .ops = &clk_branch2_ops,
2252 },
2253 },
2254 };
2255
2256 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2257 .halt_reg = 0x04ac,
2258 .clkr = {
2259 .enable_reg = 0x04ac,
2260 .enable_mask = BIT(0),
2261 .hw.init = &(struct clk_init_data){
2262 .name = "gcc_usb2a_phy_sleep_clk",
2263 .parent_names = (const char *[]){
2264 "sleep_clk_src",
2265 },
2266 .num_parents = 1,
2267 .ops = &clk_branch2_ops,
2268 },
2269 },
2270 };
2271
2272 static struct clk_branch gcc_usb2b_phy_sleep_clk = {
2273 .halt_reg = 0x04b4,
2274 .clkr = {
2275 .enable_reg = 0x04b4,
2276 .enable_mask = BIT(0),
2277 .hw.init = &(struct clk_init_data){
2278 .name = "gcc_usb2b_phy_sleep_clk",
2279 .parent_names = (const char *[]){
2280 "sleep_clk_src",
2281 },
2282 .num_parents = 1,
2283 .ops = &clk_branch2_ops,
2284 },
2285 },
2286 };
2287
2288 static struct clk_branch gcc_usb30_master_clk = {
2289 .halt_reg = 0x03c8,
2290 .clkr = {
2291 .enable_reg = 0x03c8,
2292 .enable_mask = BIT(0),
2293 .hw.init = &(struct clk_init_data){
2294 .name = "gcc_usb30_master_clk",
2295 .parent_names = (const char *[]){
2296 "usb30_master_clk_src",
2297 },
2298 .num_parents = 1,
2299 .flags = CLK_SET_RATE_PARENT,
2300 .ops = &clk_branch2_ops,
2301 },
2302 },
2303 };
2304
2305 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2306 .halt_reg = 0x03d0,
2307 .clkr = {
2308 .enable_reg = 0x03d0,
2309 .enable_mask = BIT(0),
2310 .hw.init = &(struct clk_init_data){
2311 .name = "gcc_usb30_mock_utmi_clk",
2312 .parent_names = (const char *[]){
2313 "usb30_mock_utmi_clk_src",
2314 },
2315 .num_parents = 1,
2316 .flags = CLK_SET_RATE_PARENT,
2317 .ops = &clk_branch2_ops,
2318 },
2319 },
2320 };
2321
2322 static struct clk_branch gcc_usb30_sleep_clk = {
2323 .halt_reg = 0x03cc,
2324 .clkr = {
2325 .enable_reg = 0x03cc,
2326 .enable_mask = BIT(0),
2327 .hw.init = &(struct clk_init_data){
2328 .name = "gcc_usb30_sleep_clk",
2329 .parent_names = (const char *[]){
2330 "sleep_clk_src",
2331 },
2332 .num_parents = 1,
2333 .ops = &clk_branch2_ops,
2334 },
2335 },
2336 };
2337
2338 static struct clk_branch gcc_usb_hs_ahb_clk = {
2339 .halt_reg = 0x0488,
2340 .clkr = {
2341 .enable_reg = 0x0488,
2342 .enable_mask = BIT(0),
2343 .hw.init = &(struct clk_init_data){
2344 .name = "gcc_usb_hs_ahb_clk",
2345 .parent_names = (const char *[]){
2346 "periph_noc_clk_src",
2347 },
2348 .num_parents = 1,
2349 .ops = &clk_branch2_ops,
2350 },
2351 },
2352 };
2353
2354 static struct clk_branch gcc_usb_hs_system_clk = {
2355 .halt_reg = 0x0484,
2356 .clkr = {
2357 .enable_reg = 0x0484,
2358 .enable_mask = BIT(0),
2359 .hw.init = &(struct clk_init_data){
2360 .name = "gcc_usb_hs_system_clk",
2361 .parent_names = (const char *[]){
2362 "usb_hs_system_clk_src",
2363 },
2364 .num_parents = 1,
2365 .flags = CLK_SET_RATE_PARENT,
2366 .ops = &clk_branch2_ops,
2367 },
2368 },
2369 };
2370
2371 static struct clk_branch gcc_usb_hsic_ahb_clk = {
2372 .halt_reg = 0x0408,
2373 .clkr = {
2374 .enable_reg = 0x0408,
2375 .enable_mask = BIT(0),
2376 .hw.init = &(struct clk_init_data){
2377 .name = "gcc_usb_hsic_ahb_clk",
2378 .parent_names = (const char *[]){
2379 "periph_noc_clk_src",
2380 },
2381 .num_parents = 1,
2382 .ops = &clk_branch2_ops,
2383 },
2384 },
2385 };
2386
2387 static struct clk_branch gcc_usb_hsic_clk = {
2388 .halt_reg = 0x0410,
2389 .clkr = {
2390 .enable_reg = 0x0410,
2391 .enable_mask = BIT(0),
2392 .hw.init = &(struct clk_init_data){
2393 .name = "gcc_usb_hsic_clk",
2394 .parent_names = (const char *[]){
2395 "usb_hsic_clk_src",
2396 },
2397 .num_parents = 1,
2398 .flags = CLK_SET_RATE_PARENT,
2399 .ops = &clk_branch2_ops,
2400 },
2401 },
2402 };
2403
2404 static struct clk_branch gcc_usb_hsic_io_cal_clk = {
2405 .halt_reg = 0x0414,
2406 .clkr = {
2407 .enable_reg = 0x0414,
2408 .enable_mask = BIT(0),
2409 .hw.init = &(struct clk_init_data){
2410 .name = "gcc_usb_hsic_io_cal_clk",
2411 .parent_names = (const char *[]){
2412 "usb_hsic_io_cal_clk_src",
2413 },
2414 .num_parents = 1,
2415 .flags = CLK_SET_RATE_PARENT,
2416 .ops = &clk_branch2_ops,
2417 },
2418 },
2419 };
2420
2421 static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
2422 .halt_reg = 0x0418,
2423 .clkr = {
2424 .enable_reg = 0x0418,
2425 .enable_mask = BIT(0),
2426 .hw.init = &(struct clk_init_data){
2427 .name = "gcc_usb_hsic_io_cal_sleep_clk",
2428 .parent_names = (const char *[]){
2429 "sleep_clk_src",
2430 },
2431 .num_parents = 1,
2432 .ops = &clk_branch2_ops,
2433 },
2434 },
2435 };
2436
2437 static struct clk_branch gcc_usb_hsic_system_clk = {
2438 .halt_reg = 0x040c,
2439 .clkr = {
2440 .enable_reg = 0x040c,
2441 .enable_mask = BIT(0),
2442 .hw.init = &(struct clk_init_data){
2443 .name = "gcc_usb_hsic_system_clk",
2444 .parent_names = (const char *[]){
2445 "usb_hsic_system_clk_src",
2446 },
2447 .num_parents = 1,
2448 .flags = CLK_SET_RATE_PARENT,
2449 .ops = &clk_branch2_ops,
2450 },
2451 },
2452 };
2453
2454 static struct gdsc usb_hs_hsic_gdsc = {
2455 .gdscr = 0x404,
2456 .pd = {
2457 .name = "usb_hs_hsic",
2458 },
2459 .pwrsts = PWRSTS_OFF_ON,
2460 };
2461
2462 static struct clk_regmap *gcc_msm8226_clocks[] = {
2463 [GPLL0] = &gpll0.clkr,
2464 [GPLL0_VOTE] = &gpll0_vote,
2465 [GPLL1] = &gpll1.clkr,
2466 [GPLL1_VOTE] = &gpll1_vote,
2467 [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2468 [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2469 [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2470 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2471 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2472 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2473 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2474 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2475 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2476 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2477 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2478 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2479 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2480 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2481 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2482 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2483 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2484 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2485 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2486 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2487 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2488 [CE1_CLK_SRC] = &ce1_clk_src.clkr,
2489 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2490 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2491 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2492 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2493 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2494 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2495 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2496 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2497 [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2498 [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2499 [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2500 [GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2501 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2502 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2503 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2504 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2505 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2506 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2507 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2508 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2509 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2510 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2511 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2512 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2513 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2514 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2515 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2516 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2517 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2518 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2519 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2520 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2521 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2522 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2523 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2524 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2525 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2526 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2527 [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2528 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2529 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2530 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2531 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2532 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2533 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2534 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2535 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2536 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2537 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2538 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2539 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2540 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2541 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2542 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2543 [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2544 [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2545 [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2546 [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2547 };
2548
2549 static const struct qcom_reset_map gcc_msm8226_resets[] = {
2550 [GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2551 [GCC_USB_HS_BCR] = { 0x0480 },
2552 [GCC_USB2A_PHY_BCR] = { 0x04a8 },
2553 };
2554
2555 static struct gdsc *gcc_msm8226_gdscs[] = {
2556 [USB_HS_HSIC_GDSC] = &usb_hs_hsic_gdsc,
2557 };
2558
2559 static const struct regmap_config gcc_msm8226_regmap_config = {
2560 .reg_bits = 32,
2561 .reg_stride = 4,
2562 .val_bits = 32,
2563 .max_register = 0x1a80,
2564 .fast_io = true,
2565 };
2566
2567 static const struct qcom_cc_desc gcc_msm8226_desc = {
2568 .config = &gcc_msm8226_regmap_config,
2569 .clks = gcc_msm8226_clocks,
2570 .num_clks = ARRAY_SIZE(gcc_msm8226_clocks),
2571 .resets = gcc_msm8226_resets,
2572 .num_resets = ARRAY_SIZE(gcc_msm8226_resets),
2573 .gdscs = gcc_msm8226_gdscs,
2574 .num_gdscs = ARRAY_SIZE(gcc_msm8226_gdscs),
2575 };
2576
2577 static struct clk_regmap *gcc_msm8974_clocks[] = {
2578 [GPLL0] = &gpll0.clkr,
2579 [GPLL0_VOTE] = &gpll0_vote,
2580 [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2581 [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2582 [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2583 [GPLL1] = &gpll1.clkr,
2584 [GPLL1_VOTE] = &gpll1_vote,
2585 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2586 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2587 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2588 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2589 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2590 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2591 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2592 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2593 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2594 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2595 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2596 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2597 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2598 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2599 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2600 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2601 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2602 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2603 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2604 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2605 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2606 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2607 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2608 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2609 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2610 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2611 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2612 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2613 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2614 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2615 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2616 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2617 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2618 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2619 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2620 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2621 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2622 [CE1_CLK_SRC] = &ce1_clk_src.clkr,
2623 [CE2_CLK_SRC] = &ce2_clk_src.clkr,
2624 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2625 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2626 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2627 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2628 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2629 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2630 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2631 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2632 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2633 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2634 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2635 [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2636 [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2637 [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2638 [GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2639 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2640 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2641 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2642 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2643 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2644 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2645 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2646 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2647 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2648 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2649 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2650 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2651 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2652 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2653 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2654 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2655 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2656 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2657 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2658 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2659 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2660 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2661 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2662 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2663 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2664 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2665 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2666 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2667 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2668 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2669 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2670 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2671 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2672 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2673 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2674 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2675 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2676 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2677 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2678 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2679 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2680 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2681 [GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr,
2682 [GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr,
2683 [GCC_CE2_CLK] = &gcc_ce2_clk.clkr,
2684 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2685 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2686 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2687 [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2688 [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2689 [GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr,
2690 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2691 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2692 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2693 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2694 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2695 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2696 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2697 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2698 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2699 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2700 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2701 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2702 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2703 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2704 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2705 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2706 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2707 [GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr,
2708 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2709 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2710 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2711 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2712 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2713 [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2714 [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2715 [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2716 [GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
2717 [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2718 [GCC_MMSS_GPLL0_CLK_SRC] = &gcc_mmss_gpll0_clk_src,
2719 [GPLL4] = NULL,
2720 [GPLL4_VOTE] = NULL,
2721 [GCC_SDCC1_CDCCAL_SLEEP_CLK] = NULL,
2722 [GCC_SDCC1_CDCCAL_FF_CLK] = NULL,
2723 };
2724
2725 static const struct qcom_reset_map gcc_msm8974_resets[] = {
2726 [GCC_SYSTEM_NOC_BCR] = { 0x0100 },
2727 [GCC_CONFIG_NOC_BCR] = { 0x0140 },
2728 [GCC_PERIPH_NOC_BCR] = { 0x0180 },
2729 [GCC_IMEM_BCR] = { 0x0200 },
2730 [GCC_MMSS_BCR] = { 0x0240 },
2731 [GCC_QDSS_BCR] = { 0x0300 },
2732 [GCC_USB_30_BCR] = { 0x03c0 },
2733 [GCC_USB3_PHY_BCR] = { 0x03fc },
2734 [GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2735 [GCC_USB_HS_BCR] = { 0x0480 },
2736 [GCC_USB2A_PHY_BCR] = { 0x04a8 },
2737 [GCC_USB2B_PHY_BCR] = { 0x04b0 },
2738 [GCC_SDCC1_BCR] = { 0x04c0 },
2739 [GCC_SDCC2_BCR] = { 0x0500 },
2740 [GCC_SDCC3_BCR] = { 0x0540 },
2741 [GCC_SDCC4_BCR] = { 0x0580 },
2742 [GCC_BLSP1_BCR] = { 0x05c0 },
2743 [GCC_BLSP1_QUP1_BCR] = { 0x0640 },
2744 [GCC_BLSP1_UART1_BCR] = { 0x0680 },
2745 [GCC_BLSP1_QUP2_BCR] = { 0x06c0 },
2746 [GCC_BLSP1_UART2_BCR] = { 0x0700 },
2747 [GCC_BLSP1_QUP3_BCR] = { 0x0740 },
2748 [GCC_BLSP1_UART3_BCR] = { 0x0780 },
2749 [GCC_BLSP1_QUP4_BCR] = { 0x07c0 },
2750 [GCC_BLSP1_UART4_BCR] = { 0x0800 },
2751 [GCC_BLSP1_QUP5_BCR] = { 0x0840 },
2752 [GCC_BLSP1_UART5_BCR] = { 0x0880 },
2753 [GCC_BLSP1_QUP6_BCR] = { 0x08c0 },
2754 [GCC_BLSP1_UART6_BCR] = { 0x0900 },
2755 [GCC_BLSP2_BCR] = { 0x0940 },
2756 [GCC_BLSP2_QUP1_BCR] = { 0x0980 },
2757 [GCC_BLSP2_UART1_BCR] = { 0x09c0 },
2758 [GCC_BLSP2_QUP2_BCR] = { 0x0a00 },
2759 [GCC_BLSP2_UART2_BCR] = { 0x0a40 },
2760 [GCC_BLSP2_QUP3_BCR] = { 0x0a80 },
2761 [GCC_BLSP2_UART3_BCR] = { 0x0ac0 },
2762 [GCC_BLSP2_QUP4_BCR] = { 0x0b00 },
2763 [GCC_BLSP2_UART4_BCR] = { 0x0b40 },
2764 [GCC_BLSP2_QUP5_BCR] = { 0x0b80 },
2765 [GCC_BLSP2_UART5_BCR] = { 0x0bc0 },
2766 [GCC_BLSP2_QUP6_BCR] = { 0x0c00 },
2767 [GCC_BLSP2_UART6_BCR] = { 0x0c40 },
2768 [GCC_PDM_BCR] = { 0x0cc0 },
2769 [GCC_BAM_DMA_BCR] = { 0x0d40 },
2770 [GCC_TSIF_BCR] = { 0x0d80 },
2771 [GCC_TCSR_BCR] = { 0x0dc0 },
2772 [GCC_BOOT_ROM_BCR] = { 0x0e00 },
2773 [GCC_MSG_RAM_BCR] = { 0x0e40 },
2774 [GCC_TLMM_BCR] = { 0x0e80 },
2775 [GCC_MPM_BCR] = { 0x0ec0 },
2776 [GCC_SEC_CTRL_BCR] = { 0x0f40 },
2777 [GCC_SPMI_BCR] = { 0x0fc0 },
2778 [GCC_SPDM_BCR] = { 0x1000 },
2779 [GCC_CE1_BCR] = { 0x1040 },
2780 [GCC_CE2_BCR] = { 0x1080 },
2781 [GCC_BIMC_BCR] = { 0x1100 },
2782 [GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 },
2783 [GCC_MPM_AHB_RESET] = { 0x0ec4, 1 },
2784 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 },
2785 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 },
2786 [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 },
2787 [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 },
2788 [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 },
2789 [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 },
2790 [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 },
2791 [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 },
2792 [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 },
2793 [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 },
2794 [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 },
2795 [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 },
2796 [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 },
2797 [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 },
2798 [GCC_DEHR_BCR] = { 0x1300 },
2799 [GCC_RBCPR_BCR] = { 0x1380 },
2800 [GCC_MSS_RESTART] = { 0x1680 },
2801 [GCC_LPASS_RESTART] = { 0x16c0 },
2802 [GCC_WCSS_RESTART] = { 0x1700 },
2803 [GCC_VENUS_RESTART] = { 0x1740 },
2804 };
2805
2806 static struct gdsc *gcc_msm8974_gdscs[] = {
2807 [USB_HS_HSIC_GDSC] = &usb_hs_hsic_gdsc,
2808 };
2809
2810 static const struct regmap_config gcc_msm8974_regmap_config = {
2811 .reg_bits = 32,
2812 .reg_stride = 4,
2813 .val_bits = 32,
2814 .max_register = 0x1fc0,
2815 .fast_io = true,
2816 };
2817
2818 static const struct qcom_cc_desc gcc_msm8974_desc = {
2819 .config = &gcc_msm8974_regmap_config,
2820 .clks = gcc_msm8974_clocks,
2821 .num_clks = ARRAY_SIZE(gcc_msm8974_clocks),
2822 .resets = gcc_msm8974_resets,
2823 .num_resets = ARRAY_SIZE(gcc_msm8974_resets),
2824 .gdscs = gcc_msm8974_gdscs,
2825 .num_gdscs = ARRAY_SIZE(gcc_msm8974_gdscs),
2826 };
2827
2828 static const struct of_device_id gcc_msm8974_match_table[] = {
2829 { .compatible = "qcom,gcc-msm8226", .data = &gcc_msm8226_desc },
2830 { .compatible = "qcom,gcc-msm8974", .data = &gcc_msm8974_desc },
2831 { .compatible = "qcom,gcc-msm8974pro", .data = &gcc_msm8974_desc },
2832 { .compatible = "qcom,gcc-msm8974pro-ac", .data = &gcc_msm8974_desc },
2833 { }
2834 };
2835 MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
2836
2837 static void msm8226_clock_override(void)
2838 {
2839 ce1_clk_src.freq_tbl = ftbl_gcc_ce1_clk_msm8226;
2840 gp1_clk_src.freq_tbl = ftbl_gcc_gp_clk_msm8226;
2841 gp2_clk_src.freq_tbl = ftbl_gcc_gp_clk_msm8226;
2842 gp3_clk_src.freq_tbl = ftbl_gcc_gp_clk_msm8226;
2843 }
2844
2845 static void msm8974_pro_clock_override(void)
2846 {
2847 sdcc1_apps_clk_src_init.parent_names = gcc_xo_gpll0_gpll4;
2848 sdcc1_apps_clk_src_init.num_parents = 3;
2849 sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_pro;
2850 sdcc1_apps_clk_src.parent_map = gcc_xo_gpll0_gpll4_map;
2851
2852 gcc_msm8974_clocks[GPLL4] = &gpll4.clkr;
2853 gcc_msm8974_clocks[GPLL4_VOTE] = &gpll4_vote;
2854 gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_SLEEP_CLK] =
2855 &gcc_sdcc1_cdccal_sleep_clk.clkr;
2856 gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_FF_CLK] =
2857 &gcc_sdcc1_cdccal_ff_clk.clkr;
2858 }
2859
2860 static int gcc_msm8974_probe(struct platform_device *pdev)
2861 {
2862 int ret;
2863 struct device *dev = &pdev->dev;
2864 const struct of_device_id *id;
2865
2866 id = of_match_device(gcc_msm8974_match_table, dev);
2867 if (!id)
2868 return -ENODEV;
2869
2870 if (!of_device_is_compatible(dev->of_node, "qcom,gcc-msm8974")) {
2871 if (id->data == &gcc_msm8226_desc)
2872 msm8226_clock_override();
2873 else
2874 msm8974_pro_clock_override();
2875 }
2876
2877 ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
2878 if (ret)
2879 return ret;
2880
2881 ret = qcom_cc_register_sleep_clk(dev);
2882 if (ret)
2883 return ret;
2884
2885 return qcom_cc_probe(pdev, &gcc_msm8974_desc);
2886 }
2887
2888 static struct platform_driver gcc_msm8974_driver = {
2889 .probe = gcc_msm8974_probe,
2890 .driver = {
2891 .name = "gcc-msm8974",
2892 .of_match_table = gcc_msm8974_match_table,
2893 },
2894 };
2895
2896 static int __init gcc_msm8974_init(void)
2897 {
2898 return platform_driver_register(&gcc_msm8974_driver);
2899 }
2900 core_initcall(gcc_msm8974_init);
2901
2902 static void __exit gcc_msm8974_exit(void)
2903 {
2904 platform_driver_unregister(&gcc_msm8974_driver);
2905 }
2906 module_exit(gcc_msm8974_exit);
2907
2908 MODULE_DESCRIPTION("QCOM GCC MSM8974 Driver");
2909 MODULE_LICENSE("GPL v2");
2910 MODULE_ALIAS("platform:gcc-msm8974");