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