0001
0002
0003
0004
0005
0006 #include <linux/clk-provider.h>
0007 #include <linux/err.h>
0008 #include <linux/kernel.h>
0009 #include <linux/module.h>
0010 #include <linux/platform_device.h>
0011 #include <linux/regmap.h>
0012
0013 #include <dt-bindings/clock/qcom,gcc-qcm2290.h>
0014
0015 #include "clk-alpha-pll.h"
0016 #include "clk-branch.h"
0017 #include "clk-rcg.h"
0018 #include "clk-regmap-divider.h"
0019 #include "common.h"
0020 #include "gdsc.h"
0021 #include "reset.h"
0022
0023 enum {
0024 P_BI_TCXO,
0025 P_GPLL0_OUT_AUX2,
0026 P_GPLL0_OUT_EARLY,
0027 P_GPLL10_OUT_MAIN,
0028 P_GPLL11_OUT_AUX,
0029 P_GPLL11_OUT_AUX2,
0030 P_GPLL11_OUT_MAIN,
0031 P_GPLL3_OUT_EARLY,
0032 P_GPLL3_OUT_MAIN,
0033 P_GPLL4_OUT_MAIN,
0034 P_GPLL5_OUT_MAIN,
0035 P_GPLL6_OUT_EARLY,
0036 P_GPLL6_OUT_MAIN,
0037 P_GPLL7_OUT_MAIN,
0038 P_GPLL8_OUT_EARLY,
0039 P_GPLL8_OUT_MAIN,
0040 P_GPLL9_OUT_EARLY,
0041 P_GPLL9_OUT_MAIN,
0042 P_SLEEP_CLK,
0043 };
0044
0045 static const struct pll_vco brammo_vco[] = {
0046 { 500000000, 1250000000, 0 },
0047 };
0048
0049 static const struct pll_vco default_vco[] = {
0050 { 500000000, 1000000000, 2 },
0051 };
0052
0053 static const struct pll_vco spark_vco[] = {
0054 { 750000000, 1500000000, 1 },
0055 };
0056
0057 static const u8 clk_alpha_pll_regs_offset[][PLL_OFF_MAX_REGS] = {
0058 [CLK_ALPHA_PLL_TYPE_DEFAULT] = {
0059 [PLL_OFF_L_VAL] = 0x04,
0060 [PLL_OFF_ALPHA_VAL] = 0x08,
0061 [PLL_OFF_ALPHA_VAL_U] = 0x0c,
0062 [PLL_OFF_TEST_CTL] = 0x10,
0063 [PLL_OFF_TEST_CTL_U] = 0x14,
0064 [PLL_OFF_USER_CTL] = 0x18,
0065 [PLL_OFF_USER_CTL_U] = 0x1C,
0066 [PLL_OFF_CONFIG_CTL] = 0x20,
0067 [PLL_OFF_STATUS] = 0x24,
0068 },
0069 [CLK_ALPHA_PLL_TYPE_BRAMMO] = {
0070 [PLL_OFF_L_VAL] = 0x04,
0071 [PLL_OFF_ALPHA_VAL] = 0x08,
0072 [PLL_OFF_ALPHA_VAL_U] = 0x0c,
0073 [PLL_OFF_TEST_CTL] = 0x10,
0074 [PLL_OFF_TEST_CTL_U] = 0x14,
0075 [PLL_OFF_USER_CTL] = 0x18,
0076 [PLL_OFF_CONFIG_CTL] = 0x1C,
0077 [PLL_OFF_STATUS] = 0x20,
0078 },
0079 };
0080
0081 static struct clk_alpha_pll gpll0 = {
0082 .offset = 0x0,
0083 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0084 .clkr = {
0085 .enable_reg = 0x79000,
0086 .enable_mask = BIT(0),
0087 .hw.init = &(struct clk_init_data){
0088 .name = "gpll0",
0089 .parent_data = &(const struct clk_parent_data){
0090 .fw_name = "bi_tcxo",
0091 },
0092 .num_parents = 1,
0093 .ops = &clk_alpha_pll_ops,
0094 },
0095 },
0096 };
0097
0098 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
0099 { 0x1, 2 },
0100 { }
0101 };
0102
0103 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
0104 .offset = 0x0,
0105 .post_div_shift = 8,
0106 .post_div_table = post_div_table_gpll0_out_aux2,
0107 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
0108 .width = 4,
0109 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0110 .clkr.hw.init = &(struct clk_init_data){
0111 .name = "gpll0_out_aux2",
0112 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
0113 .num_parents = 1,
0114 .ops = &clk_alpha_pll_postdiv_ro_ops,
0115 },
0116 };
0117
0118 static struct clk_alpha_pll gpll1 = {
0119 .offset = 0x1000,
0120 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0121 .clkr = {
0122 .enable_reg = 0x79000,
0123 .enable_mask = BIT(1),
0124 .hw.init = &(struct clk_init_data){
0125 .name = "gpll1",
0126 .parent_data = &(const struct clk_parent_data){
0127 .fw_name = "bi_tcxo",
0128 },
0129 .num_parents = 1,
0130 .ops = &clk_alpha_pll_ops,
0131 },
0132 },
0133 };
0134
0135
0136 static const struct alpha_pll_config gpll10_config = {
0137 .l = 0x3c,
0138 .alpha = 0x0,
0139 .vco_val = 0x1 << 20,
0140 .vco_mask = GENMASK(21, 20),
0141 .main_output_mask = BIT(0),
0142 .config_ctl_val = 0x4001055B,
0143 .test_ctl_hi1_val = 0x1,
0144 };
0145
0146 static struct clk_alpha_pll gpll10 = {
0147 .offset = 0xa000,
0148 .vco_table = spark_vco,
0149 .num_vco = ARRAY_SIZE(spark_vco),
0150 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0151 .clkr = {
0152 .enable_reg = 0x79000,
0153 .enable_mask = BIT(10),
0154 .hw.init = &(struct clk_init_data){
0155 .name = "gpll10",
0156 .parent_data = &(const struct clk_parent_data){
0157 .fw_name = "bi_tcxo",
0158 },
0159 .num_parents = 1,
0160 .ops = &clk_alpha_pll_ops,
0161 },
0162 },
0163 };
0164
0165
0166 static const struct alpha_pll_config gpll11_config = {
0167 .l = 0x1B,
0168 .alpha = 0x55555555,
0169 .alpha_hi = 0xB5,
0170 .alpha_en_mask = BIT(24),
0171 .vco_val = 0x2 << 20,
0172 .vco_mask = GENMASK(21, 20),
0173 .main_output_mask = BIT(0),
0174 .config_ctl_val = 0x4001055B,
0175 .test_ctl_hi1_val = 0x1,
0176 };
0177
0178 static struct clk_alpha_pll gpll11 = {
0179 .offset = 0xb000,
0180 .vco_table = default_vco,
0181 .num_vco = ARRAY_SIZE(default_vco),
0182 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0183 .flags = SUPPORTS_DYNAMIC_UPDATE,
0184 .clkr = {
0185 .enable_reg = 0x79000,
0186 .enable_mask = BIT(11),
0187 .hw.init = &(struct clk_init_data){
0188 .name = "gpll11",
0189 .parent_data = &(const struct clk_parent_data){
0190 .fw_name = "bi_tcxo",
0191 },
0192 .num_parents = 1,
0193 .ops = &clk_alpha_pll_ops,
0194 },
0195 },
0196 };
0197
0198 static struct clk_alpha_pll gpll3 = {
0199 .offset = 0x3000,
0200 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0201 .clkr = {
0202 .enable_reg = 0x79000,
0203 .enable_mask = BIT(3),
0204 .hw.init = &(struct clk_init_data){
0205 .name = "gpll3",
0206 .parent_data = &(const struct clk_parent_data){
0207 .fw_name = "bi_tcxo",
0208 },
0209 .num_parents = 1,
0210 .ops = &clk_alpha_pll_ops,
0211 },
0212 },
0213 };
0214
0215 static const struct clk_div_table post_div_table_gpll3_out_main[] = {
0216 { 0x1, 2 },
0217 { }
0218 };
0219
0220 static struct clk_alpha_pll_postdiv gpll3_out_main = {
0221 .offset = 0x3000,
0222 .post_div_shift = 8,
0223 .post_div_table = post_div_table_gpll3_out_main,
0224 .num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_main),
0225 .width = 4,
0226 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0227 .clkr.hw.init = &(struct clk_init_data){
0228 .name = "gpll3_out_main",
0229 .parent_hws = (const struct clk_hw *[]){ &gpll3.clkr.hw },
0230 .num_parents = 1,
0231 .ops = &clk_alpha_pll_postdiv_ro_ops,
0232 },
0233 };
0234
0235 static struct clk_alpha_pll gpll4 = {
0236 .offset = 0x4000,
0237 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0238 .clkr = {
0239 .enable_reg = 0x79000,
0240 .enable_mask = BIT(4),
0241 .hw.init = &(struct clk_init_data){
0242 .name = "gpll4",
0243 .parent_data = &(const struct clk_parent_data){
0244 .fw_name = "bi_tcxo",
0245 },
0246 .num_parents = 1,
0247 .ops = &clk_alpha_pll_ops,
0248 },
0249 },
0250 };
0251
0252 static struct clk_alpha_pll gpll5 = {
0253 .offset = 0x5000,
0254 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0255 .clkr = {
0256 .enable_reg = 0x79000,
0257 .enable_mask = BIT(5),
0258 .hw.init = &(struct clk_init_data){
0259 .name = "gpll5",
0260 .parent_data = &(const struct clk_parent_data){
0261 .fw_name = "bi_tcxo",
0262 },
0263 .num_parents = 1,
0264 .ops = &clk_alpha_pll_ops,
0265 },
0266 },
0267 };
0268
0269 static struct clk_alpha_pll gpll6 = {
0270 .offset = 0x6000,
0271 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0272 .clkr = {
0273 .enable_reg = 0x79000,
0274 .enable_mask = BIT(6),
0275 .hw.init = &(struct clk_init_data){
0276 .name = "gpll6",
0277 .parent_data = &(const struct clk_parent_data){
0278 .fw_name = "bi_tcxo",
0279 },
0280 .num_parents = 1,
0281 .ops = &clk_alpha_pll_ops,
0282 },
0283 },
0284 };
0285
0286 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
0287 { 0x1, 2 },
0288 { }
0289 };
0290
0291 static struct clk_alpha_pll_postdiv gpll6_out_main = {
0292 .offset = 0x6000,
0293 .post_div_shift = 8,
0294 .post_div_table = post_div_table_gpll6_out_main,
0295 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
0296 .width = 4,
0297 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0298 .clkr.hw.init = &(struct clk_init_data){
0299 .name = "gpll6_out_main",
0300 .parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },
0301 .num_parents = 1,
0302 .ops = &clk_alpha_pll_postdiv_ro_ops,
0303 },
0304 };
0305
0306 static struct clk_alpha_pll gpll7 = {
0307 .offset = 0x7000,
0308 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0309 .clkr = {
0310 .enable_reg = 0x79000,
0311 .enable_mask = BIT(7),
0312 .hw.init = &(struct clk_init_data){
0313 .name = "gpll7",
0314 .parent_data = &(const struct clk_parent_data){
0315 .fw_name = "bi_tcxo",
0316 },
0317 .num_parents = 1,
0318 .ops = &clk_alpha_pll_ops,
0319 },
0320 },
0321 };
0322
0323
0324 static const struct alpha_pll_config gpll8_config = {
0325 .l = 0x1B,
0326 .alpha = 0x55555555,
0327 .alpha_hi = 0xC5,
0328 .alpha_en_mask = BIT(24),
0329 .vco_val = 0x2 << 20,
0330 .vco_mask = GENMASK(21, 20),
0331 .main_output_mask = BIT(0),
0332 .early_output_mask = BIT(3),
0333 .post_div_val = 0x1 << 8,
0334 .post_div_mask = GENMASK(11, 8),
0335 .config_ctl_val = 0x4001055B,
0336 .test_ctl_hi1_val = 0x1,
0337 };
0338
0339 static struct clk_alpha_pll gpll8 = {
0340 .offset = 0x8000,
0341 .vco_table = default_vco,
0342 .num_vco = ARRAY_SIZE(default_vco),
0343 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0344 .flags = SUPPORTS_DYNAMIC_UPDATE,
0345 .clkr = {
0346 .enable_reg = 0x79000,
0347 .enable_mask = BIT(8),
0348 .hw.init = &(struct clk_init_data){
0349 .name = "gpll8",
0350 .parent_data = &(const struct clk_parent_data){
0351 .fw_name = "bi_tcxo",
0352 },
0353 .num_parents = 1,
0354 .ops = &clk_alpha_pll_ops,
0355 },
0356 },
0357 };
0358
0359 static const struct clk_div_table post_div_table_gpll8_out_main[] = {
0360 { 0x1, 2 },
0361 { }
0362 };
0363
0364 static struct clk_alpha_pll_postdiv gpll8_out_main = {
0365 .offset = 0x8000,
0366 .post_div_shift = 8,
0367 .post_div_table = post_div_table_gpll8_out_main,
0368 .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
0369 .width = 4,
0370 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_DEFAULT],
0371 .clkr.hw.init = &(struct clk_init_data){
0372 .name = "gpll8_out_main",
0373 .parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },
0374 .num_parents = 1,
0375 .flags = CLK_SET_RATE_PARENT,
0376 .ops = &clk_alpha_pll_postdiv_ro_ops,
0377 },
0378 };
0379
0380
0381 static const struct alpha_pll_config gpll9_config = {
0382 .l = 0x3C,
0383 .alpha = 0x0,
0384 .post_div_val = 0x1 << 8,
0385 .post_div_mask = GENMASK(9, 8),
0386 .main_output_mask = BIT(0),
0387 .early_output_mask = BIT(3),
0388 .config_ctl_val = 0x00004289,
0389 .test_ctl_val = 0x08000000,
0390 };
0391
0392 static struct clk_alpha_pll gpll9 = {
0393 .offset = 0x9000,
0394 .vco_table = brammo_vco,
0395 .num_vco = ARRAY_SIZE(brammo_vco),
0396 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_BRAMMO],
0397 .clkr = {
0398 .enable_reg = 0x79000,
0399 .enable_mask = BIT(9),
0400 .hw.init = &(struct clk_init_data){
0401 .name = "gpll9",
0402 .parent_data = &(const struct clk_parent_data){
0403 .fw_name = "bi_tcxo",
0404 },
0405 .num_parents = 1,
0406 .ops = &clk_alpha_pll_ops,
0407 },
0408 },
0409 };
0410
0411 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
0412 { 0x1, 2 },
0413 { }
0414 };
0415
0416 static struct clk_alpha_pll_postdiv gpll9_out_main = {
0417 .offset = 0x9000,
0418 .post_div_shift = 8,
0419 .post_div_table = post_div_table_gpll9_out_main,
0420 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
0421 .width = 2,
0422 .regs = clk_alpha_pll_regs_offset[CLK_ALPHA_PLL_TYPE_BRAMMO],
0423 .clkr.hw.init = &(struct clk_init_data){
0424 .name = "gpll9_out_main",
0425 .parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },
0426 .num_parents = 1,
0427 .flags = CLK_SET_RATE_PARENT,
0428 .ops = &clk_alpha_pll_postdiv_ro_ops,
0429 },
0430 };
0431
0432 static const struct parent_map gcc_parent_map_0[] = {
0433 { P_BI_TCXO, 0 },
0434 { P_GPLL0_OUT_EARLY, 1 },
0435 { P_GPLL0_OUT_AUX2, 2 },
0436 };
0437
0438 static const struct clk_parent_data gcc_parents_0[] = {
0439 { .fw_name = "bi_tcxo" },
0440 { .hw = &gpll0.clkr.hw },
0441 { .hw = &gpll0_out_aux2.clkr.hw },
0442 };
0443
0444 static const struct parent_map gcc_parent_map_1[] = {
0445 { P_BI_TCXO, 0 },
0446 { P_GPLL0_OUT_EARLY, 1 },
0447 { P_GPLL0_OUT_AUX2, 2 },
0448 { P_GPLL6_OUT_MAIN, 4 },
0449 };
0450
0451 static const struct clk_parent_data gcc_parents_1[] = {
0452 { .fw_name = "bi_tcxo" },
0453 { .hw = &gpll0.clkr.hw },
0454 { .hw = &gpll0_out_aux2.clkr.hw },
0455 { .hw = &gpll6_out_main.clkr.hw },
0456 };
0457
0458 static const struct parent_map gcc_parent_map_2[] = {
0459 { P_BI_TCXO, 0 },
0460 { P_GPLL0_OUT_EARLY, 1 },
0461 { P_GPLL0_OUT_AUX2, 2 },
0462 { P_SLEEP_CLK, 5 },
0463 };
0464
0465 static const struct clk_parent_data gcc_parents_2[] = {
0466 { .fw_name = "bi_tcxo" },
0467 { .hw = &gpll0.clkr.hw },
0468 { .hw = &gpll0_out_aux2.clkr.hw },
0469 { .fw_name = "sleep_clk" },
0470 };
0471
0472 static const struct parent_map gcc_parent_map_3[] = {
0473 { P_BI_TCXO, 0 },
0474 { P_GPLL0_OUT_EARLY, 1 },
0475 { P_GPLL9_OUT_EARLY, 2 },
0476 { P_GPLL10_OUT_MAIN, 3 },
0477 { P_GPLL9_OUT_MAIN, 5 },
0478 { P_GPLL3_OUT_MAIN, 6 },
0479 };
0480
0481 static const struct clk_parent_data gcc_parents_3[] = {
0482 { .fw_name = "bi_tcxo" },
0483 { .hw = &gpll0.clkr.hw },
0484 { .hw = &gpll9.clkr.hw },
0485 { .hw = &gpll10.clkr.hw },
0486 { .hw = &gpll9_out_main.clkr.hw },
0487 { .hw = &gpll3_out_main.clkr.hw },
0488 };
0489
0490 static const struct parent_map gcc_parent_map_4[] = {
0491 { P_BI_TCXO, 0 },
0492 { P_GPLL0_OUT_EARLY, 1 },
0493 { P_GPLL0_OUT_AUX2, 2 },
0494 { P_GPLL10_OUT_MAIN, 3 },
0495 { P_GPLL4_OUT_MAIN, 5 },
0496 { P_GPLL3_OUT_EARLY, 6 },
0497 };
0498
0499 static const struct clk_parent_data gcc_parents_4[] = {
0500 { .fw_name = "bi_tcxo" },
0501 { .hw = &gpll0.clkr.hw },
0502 { .hw = &gpll0_out_aux2.clkr.hw },
0503 { .hw = &gpll10.clkr.hw },
0504 { .hw = &gpll4.clkr.hw },
0505 { .hw = &gpll3.clkr.hw },
0506 };
0507
0508 static const struct parent_map gcc_parent_map_5[] = {
0509 { P_BI_TCXO, 0 },
0510 { P_GPLL0_OUT_EARLY, 1 },
0511 { P_GPLL0_OUT_AUX2, 2 },
0512 { P_GPLL4_OUT_MAIN, 5 },
0513 { P_GPLL3_OUT_MAIN, 6 },
0514 };
0515
0516 static const struct clk_parent_data gcc_parents_5[] = {
0517 { .fw_name = "bi_tcxo" },
0518 { .hw = &gpll0.clkr.hw },
0519 { .hw = &gpll0_out_aux2.clkr.hw },
0520 { .hw = &gpll4.clkr.hw },
0521 { .hw = &gpll3_out_main.clkr.hw },
0522 };
0523
0524 static const struct parent_map gcc_parent_map_6[] = {
0525 { P_BI_TCXO, 0 },
0526 { P_GPLL0_OUT_EARLY, 1 },
0527 { P_GPLL8_OUT_EARLY, 2 },
0528 { P_GPLL10_OUT_MAIN, 3 },
0529 { P_GPLL8_OUT_MAIN, 4 },
0530 { P_GPLL9_OUT_MAIN, 5 },
0531 { P_GPLL3_OUT_EARLY, 6 },
0532 };
0533
0534 static const struct clk_parent_data gcc_parents_6[] = {
0535 { .fw_name = "bi_tcxo" },
0536 { .hw = &gpll0.clkr.hw },
0537 { .hw = &gpll8.clkr.hw },
0538 { .hw = &gpll10.clkr.hw },
0539 { .hw = &gpll8_out_main.clkr.hw },
0540 { .hw = &gpll9_out_main.clkr.hw },
0541 { .hw = &gpll3.clkr.hw },
0542 };
0543
0544 static const struct parent_map gcc_parent_map_7[] = {
0545 { P_BI_TCXO, 0 },
0546 { P_GPLL0_OUT_EARLY, 1 },
0547 { P_GPLL8_OUT_EARLY, 2 },
0548 { P_GPLL10_OUT_MAIN, 3 },
0549 { P_GPLL8_OUT_MAIN, 4 },
0550 { P_GPLL9_OUT_MAIN, 5 },
0551 { P_GPLL3_OUT_MAIN, 6 },
0552 };
0553
0554 static const struct clk_parent_data gcc_parents_7[] = {
0555 { .fw_name = "bi_tcxo" },
0556 { .hw = &gpll0.clkr.hw },
0557 { .hw = &gpll8.clkr.hw },
0558 { .hw = &gpll10.clkr.hw },
0559 { .hw = &gpll8_out_main.clkr.hw },
0560 { .hw = &gpll9_out_main.clkr.hw },
0561 { .hw = &gpll3_out_main.clkr.hw },
0562 };
0563
0564 static const struct parent_map gcc_parent_map_8[] = {
0565 { P_BI_TCXO, 0 },
0566 { P_GPLL0_OUT_EARLY, 1 },
0567 { P_GPLL8_OUT_EARLY, 2 },
0568 { P_GPLL10_OUT_MAIN, 3 },
0569 { P_GPLL6_OUT_MAIN, 4 },
0570 { P_GPLL9_OUT_MAIN, 5 },
0571 { P_GPLL3_OUT_EARLY, 6 },
0572 };
0573
0574 static const struct clk_parent_data gcc_parents_8[] = {
0575 { .fw_name = "bi_tcxo" },
0576 { .hw = &gpll0.clkr.hw },
0577 { .hw = &gpll8.clkr.hw },
0578 { .hw = &gpll10.clkr.hw },
0579 { .hw = &gpll6_out_main.clkr.hw },
0580 { .hw = &gpll9_out_main.clkr.hw },
0581 { .hw = &gpll3.clkr.hw },
0582 };
0583
0584 static const struct parent_map gcc_parent_map_9[] = {
0585 { P_BI_TCXO, 0 },
0586 { P_GPLL0_OUT_EARLY, 1 },
0587 { P_GPLL0_OUT_AUX2, 2 },
0588 { P_GPLL10_OUT_MAIN, 3 },
0589 { P_GPLL8_OUT_MAIN, 4 },
0590 { P_GPLL9_OUT_MAIN, 5 },
0591 { P_GPLL3_OUT_EARLY, 6 },
0592 };
0593
0594 static const struct clk_parent_data gcc_parents_9[] = {
0595 { .fw_name = "bi_tcxo" },
0596 { .hw = &gpll0.clkr.hw },
0597 { .hw = &gpll0_out_aux2.clkr.hw },
0598 { .hw = &gpll10.clkr.hw },
0599 { .hw = &gpll8_out_main.clkr.hw },
0600 { .hw = &gpll9_out_main.clkr.hw },
0601 { .hw = &gpll3.clkr.hw },
0602 };
0603
0604 static const struct parent_map gcc_parent_map_10[] = {
0605 { P_BI_TCXO, 0 },
0606 { P_GPLL0_OUT_EARLY, 1 },
0607 { P_GPLL8_OUT_EARLY, 2 },
0608 { P_GPLL10_OUT_MAIN, 3 },
0609 { P_GPLL6_OUT_EARLY, 5 },
0610 { P_GPLL3_OUT_MAIN, 6 },
0611 };
0612
0613 static const struct clk_parent_data gcc_parents_10[] = {
0614 { .fw_name = "bi_tcxo" },
0615 { .hw = &gpll0.clkr.hw },
0616 { .hw = &gpll8.clkr.hw },
0617 { .hw = &gpll10.clkr.hw },
0618 { .hw = &gpll6.clkr.hw },
0619 { .hw = &gpll3_out_main.clkr.hw },
0620 };
0621
0622 static const struct parent_map gcc_parent_map_12[] = {
0623 { P_BI_TCXO, 0 },
0624 { P_GPLL0_OUT_EARLY, 1 },
0625 { P_GPLL0_OUT_AUX2, 2 },
0626 { P_GPLL7_OUT_MAIN, 3 },
0627 { P_GPLL4_OUT_MAIN, 5 },
0628 };
0629
0630 static const struct clk_parent_data gcc_parents_12[] = {
0631 { .fw_name = "bi_tcxo" },
0632 { .hw = &gpll0.clkr.hw },
0633 { .hw = &gpll0_out_aux2.clkr.hw },
0634 { .hw = &gpll7.clkr.hw },
0635 { .hw = &gpll4.clkr.hw },
0636 };
0637
0638 static const struct parent_map gcc_parent_map_13[] = {
0639 { P_BI_TCXO, 0 },
0640 { P_SLEEP_CLK, 5 },
0641 };
0642
0643 static const struct clk_parent_data gcc_parents_13[] = {
0644 { .fw_name = "bi_tcxo" },
0645 { .fw_name = "sleep_clk" },
0646 };
0647
0648 static const struct parent_map gcc_parent_map_14[] = {
0649 { P_BI_TCXO, 0 },
0650 { P_GPLL11_OUT_MAIN, 1 },
0651 { P_GPLL11_OUT_AUX, 2 },
0652 { P_GPLL11_OUT_AUX2, 3 },
0653 };
0654
0655 static const struct clk_parent_data gcc_parents_14[] = {
0656 { .fw_name = "bi_tcxo" },
0657 { .hw = &gpll11.clkr.hw },
0658 { .hw = &gpll11.clkr.hw },
0659 { .hw = &gpll11.clkr.hw },
0660 };
0661
0662 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
0663 F(19200000, P_BI_TCXO, 1, 0, 0),
0664 { }
0665 };
0666
0667 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
0668 .cmd_rcgr = 0x1a034,
0669 .mnd_width = 0,
0670 .hid_width = 5,
0671 .parent_map = gcc_parent_map_0,
0672 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
0673 .clkr.hw.init = &(struct clk_init_data){
0674 .name = "gcc_usb30_prim_mock_utmi_clk_src",
0675 .parent_data = gcc_parents_0,
0676 .num_parents = ARRAY_SIZE(gcc_parents_0),
0677 .ops = &clk_rcg2_ops,
0678 },
0679 };
0680
0681 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv = {
0682 .reg = 0x1a04c,
0683 .shift = 0,
0684 .width = 2,
0685 .clkr.hw.init = &(struct clk_init_data) {
0686 .name = "gcc_usb30_prim_mock_utmi_postdiv",
0687 .parent_hws = (const struct clk_hw *[])
0688 { &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
0689 .num_parents = 1,
0690 .flags = CLK_SET_RATE_PARENT,
0691 .ops = &clk_regmap_div_ro_ops,
0692 },
0693 };
0694
0695 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
0696 F(19200000, P_BI_TCXO, 1, 0, 0),
0697 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
0698 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
0699 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
0700 { }
0701 };
0702
0703 static struct clk_rcg2 gcc_camss_axi_clk_src = {
0704 .cmd_rcgr = 0x5802c,
0705 .mnd_width = 0,
0706 .hid_width = 5,
0707 .parent_map = gcc_parent_map_4,
0708 .freq_tbl = ftbl_gcc_camss_axi_clk_src,
0709 .clkr.hw.init = &(struct clk_init_data){
0710 .name = "gcc_camss_axi_clk_src",
0711 .parent_data = gcc_parents_4,
0712 .num_parents = ARRAY_SIZE(gcc_parents_4),
0713 .ops = &clk_rcg2_ops,
0714 },
0715 };
0716
0717 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
0718 F(19200000, P_BI_TCXO, 1, 0, 0),
0719 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
0720 { }
0721 };
0722
0723 static struct clk_rcg2 gcc_camss_cci_clk_src = {
0724 .cmd_rcgr = 0x56000,
0725 .mnd_width = 0,
0726 .hid_width = 5,
0727 .parent_map = gcc_parent_map_9,
0728 .freq_tbl = ftbl_gcc_camss_cci_clk_src,
0729 .clkr.hw.init = &(struct clk_init_data){
0730 .name = "gcc_camss_cci_clk_src",
0731 .parent_data = gcc_parents_9,
0732 .num_parents = ARRAY_SIZE(gcc_parents_9),
0733 .ops = &clk_rcg2_ops,
0734 },
0735 };
0736
0737 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
0738 F(19200000, P_BI_TCXO, 1, 0, 0),
0739 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
0740 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
0741 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
0742 { }
0743 };
0744
0745 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
0746 .cmd_rcgr = 0x45000,
0747 .mnd_width = 0,
0748 .hid_width = 5,
0749 .parent_map = gcc_parent_map_5,
0750 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0751 .clkr.hw.init = &(struct clk_init_data){
0752 .name = "gcc_camss_csi0phytimer_clk_src",
0753 .parent_data = gcc_parents_5,
0754 .num_parents = ARRAY_SIZE(gcc_parents_5),
0755 .ops = &clk_rcg2_ops,
0756 },
0757 };
0758
0759 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
0760 .cmd_rcgr = 0x4501c,
0761 .mnd_width = 0,
0762 .hid_width = 5,
0763 .parent_map = gcc_parent_map_5,
0764 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
0765 .clkr.hw.init = &(struct clk_init_data){
0766 .name = "gcc_camss_csi1phytimer_clk_src",
0767 .parent_data = gcc_parents_5,
0768 .num_parents = ARRAY_SIZE(gcc_parents_5),
0769 .ops = &clk_rcg2_ops,
0770 },
0771 };
0772
0773 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
0774 F(19200000, P_BI_TCXO, 1, 0, 0),
0775 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
0776 F(64000000, P_GPLL9_OUT_EARLY, 9, 1, 2),
0777 { }
0778 };
0779
0780 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
0781 .cmd_rcgr = 0x51000,
0782 .mnd_width = 8,
0783 .hid_width = 5,
0784 .parent_map = gcc_parent_map_3,
0785 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0786 .clkr.hw.init = &(struct clk_init_data){
0787 .name = "gcc_camss_mclk0_clk_src",
0788 .parent_data = gcc_parents_3,
0789 .num_parents = ARRAY_SIZE(gcc_parents_3),
0790 .flags = CLK_OPS_PARENT_ENABLE,
0791 .ops = &clk_rcg2_ops,
0792 },
0793 };
0794
0795 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
0796 .cmd_rcgr = 0x5101c,
0797 .mnd_width = 8,
0798 .hid_width = 5,
0799 .parent_map = gcc_parent_map_3,
0800 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0801 .clkr.hw.init = &(struct clk_init_data){
0802 .name = "gcc_camss_mclk1_clk_src",
0803 .parent_data = gcc_parents_3,
0804 .num_parents = ARRAY_SIZE(gcc_parents_3),
0805 .flags = CLK_OPS_PARENT_ENABLE,
0806 .ops = &clk_rcg2_ops,
0807 },
0808 };
0809
0810 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
0811 .cmd_rcgr = 0x51038,
0812 .mnd_width = 8,
0813 .hid_width = 5,
0814 .parent_map = gcc_parent_map_3,
0815 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0816 .clkr.hw.init = &(struct clk_init_data){
0817 .name = "gcc_camss_mclk2_clk_src",
0818 .parent_data = gcc_parents_3,
0819 .num_parents = ARRAY_SIZE(gcc_parents_3),
0820 .flags = CLK_OPS_PARENT_ENABLE,
0821 .ops = &clk_rcg2_ops,
0822 },
0823 };
0824
0825 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
0826 .cmd_rcgr = 0x51054,
0827 .mnd_width = 8,
0828 .hid_width = 5,
0829 .parent_map = gcc_parent_map_3,
0830 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
0831 .clkr.hw.init = &(struct clk_init_data){
0832 .name = "gcc_camss_mclk3_clk_src",
0833 .parent_data = gcc_parents_3,
0834 .num_parents = ARRAY_SIZE(gcc_parents_3),
0835 .flags = CLK_OPS_PARENT_ENABLE,
0836 .ops = &clk_rcg2_ops,
0837 },
0838 };
0839
0840 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
0841 F(19200000, P_BI_TCXO, 1, 0, 0),
0842 F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
0843 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
0844 { }
0845 };
0846
0847 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
0848 .cmd_rcgr = 0x55024,
0849 .mnd_width = 0,
0850 .hid_width = 5,
0851 .parent_map = gcc_parent_map_6,
0852 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
0853 .clkr.hw.init = &(struct clk_init_data){
0854 .name = "gcc_camss_ope_ahb_clk_src",
0855 .parent_data = gcc_parents_6,
0856 .num_parents = ARRAY_SIZE(gcc_parents_6),
0857 .ops = &clk_rcg2_ops,
0858 },
0859 };
0860
0861 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
0862 F(19200000, P_BI_TCXO, 1, 0, 0),
0863 F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
0864 F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
0865 F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
0866 F(580000000, P_GPLL8_OUT_EARLY, 1, 0, 0),
0867 { }
0868 };
0869
0870 static struct clk_rcg2 gcc_camss_ope_clk_src = {
0871 .cmd_rcgr = 0x55004,
0872 .mnd_width = 0,
0873 .hid_width = 5,
0874 .parent_map = gcc_parent_map_6,
0875 .freq_tbl = ftbl_gcc_camss_ope_clk_src,
0876 .clkr.hw.init = &(struct clk_init_data){
0877 .name = "gcc_camss_ope_clk_src",
0878 .parent_data = gcc_parents_6,
0879 .num_parents = ARRAY_SIZE(gcc_parents_6),
0880 .flags = CLK_SET_RATE_PARENT,
0881 .ops = &clk_rcg2_ops,
0882 },
0883 };
0884
0885 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
0886 F(19200000, P_BI_TCXO, 1, 0, 0),
0887 F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
0888 F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
0889 F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
0890 F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
0891 F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
0892 F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
0893 F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
0894 F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
0895 F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
0896 F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
0897 F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
0898 F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
0899 F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
0900 F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
0901 F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
0902 { }
0903 };
0904
0905 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
0906 .cmd_rcgr = 0x52004,
0907 .mnd_width = 8,
0908 .hid_width = 5,
0909 .parent_map = gcc_parent_map_7,
0910 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
0911 .clkr.hw.init = &(struct clk_init_data){
0912 .name = "gcc_camss_tfe_0_clk_src",
0913 .parent_data = gcc_parents_7,
0914 .num_parents = ARRAY_SIZE(gcc_parents_7),
0915 .ops = &clk_rcg2_ops,
0916 },
0917 };
0918
0919 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
0920 F(19200000, P_BI_TCXO, 1, 0, 0),
0921 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
0922 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
0923 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
0924 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
0925 F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
0926 { }
0927 };
0928
0929 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
0930 .cmd_rcgr = 0x52094,
0931 .mnd_width = 0,
0932 .hid_width = 5,
0933 .parent_map = gcc_parent_map_8,
0934 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
0935 .clkr.hw.init = &(struct clk_init_data){
0936 .name = "gcc_camss_tfe_0_csid_clk_src",
0937 .parent_data = gcc_parents_8,
0938 .num_parents = ARRAY_SIZE(gcc_parents_8),
0939 .ops = &clk_rcg2_ops,
0940 },
0941 };
0942
0943 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
0944 .cmd_rcgr = 0x52024,
0945 .mnd_width = 8,
0946 .hid_width = 5,
0947 .parent_map = gcc_parent_map_7,
0948 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
0949 .clkr.hw.init = &(struct clk_init_data){
0950 .name = "gcc_camss_tfe_1_clk_src",
0951 .parent_data = gcc_parents_7,
0952 .num_parents = ARRAY_SIZE(gcc_parents_7),
0953 .ops = &clk_rcg2_ops,
0954 },
0955 };
0956
0957 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
0958 .cmd_rcgr = 0x520b4,
0959 .mnd_width = 0,
0960 .hid_width = 5,
0961 .parent_map = gcc_parent_map_8,
0962 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
0963 .clkr.hw.init = &(struct clk_init_data){
0964 .name = "gcc_camss_tfe_1_csid_clk_src",
0965 .parent_data = gcc_parents_8,
0966 .num_parents = ARRAY_SIZE(gcc_parents_8),
0967 .ops = &clk_rcg2_ops,
0968 },
0969 };
0970
0971 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
0972 F(19200000, P_BI_TCXO, 1, 0, 0),
0973 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
0974 F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
0975 F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
0976 { }
0977 };
0978
0979 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
0980 .cmd_rcgr = 0x52064,
0981 .mnd_width = 16,
0982 .hid_width = 5,
0983 .parent_map = gcc_parent_map_10,
0984 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
0985 .clkr.hw.init = &(struct clk_init_data){
0986 .name = "gcc_camss_tfe_cphy_rx_clk_src",
0987 .parent_data = gcc_parents_10,
0988 .num_parents = ARRAY_SIZE(gcc_parents_10),
0989 .flags = CLK_OPS_PARENT_ENABLE,
0990 .ops = &clk_rcg2_ops,
0991 },
0992 };
0993
0994 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
0995 F(19200000, P_BI_TCXO, 1, 0, 0),
0996 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
0997 F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
0998 { }
0999 };
1000
1001 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1002 .cmd_rcgr = 0x58010,
1003 .mnd_width = 0,
1004 .hid_width = 5,
1005 .parent_map = gcc_parent_map_4,
1006 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1007 .clkr.hw.init = &(struct clk_init_data){
1008 .name = "gcc_camss_top_ahb_clk_src",
1009 .parent_data = gcc_parents_4,
1010 .num_parents = ARRAY_SIZE(gcc_parents_4),
1011 .ops = &clk_rcg2_ops,
1012 },
1013 };
1014
1015 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1016 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1017 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1018 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1019 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1020 { }
1021 };
1022
1023 static struct clk_rcg2 gcc_gp1_clk_src = {
1024 .cmd_rcgr = 0x4d004,
1025 .mnd_width = 8,
1026 .hid_width = 5,
1027 .parent_map = gcc_parent_map_2,
1028 .freq_tbl = ftbl_gcc_gp1_clk_src,
1029 .clkr.hw.init = &(struct clk_init_data){
1030 .name = "gcc_gp1_clk_src",
1031 .parent_data = gcc_parents_2,
1032 .num_parents = ARRAY_SIZE(gcc_parents_2),
1033 .ops = &clk_rcg2_ops,
1034 },
1035 };
1036
1037 static struct clk_rcg2 gcc_gp2_clk_src = {
1038 .cmd_rcgr = 0x4e004,
1039 .mnd_width = 8,
1040 .hid_width = 5,
1041 .parent_map = gcc_parent_map_2,
1042 .freq_tbl = ftbl_gcc_gp1_clk_src,
1043 .clkr.hw.init = &(struct clk_init_data){
1044 .name = "gcc_gp2_clk_src",
1045 .parent_data = gcc_parents_2,
1046 .num_parents = ARRAY_SIZE(gcc_parents_2),
1047 .ops = &clk_rcg2_ops,
1048 },
1049 };
1050
1051 static struct clk_rcg2 gcc_gp3_clk_src = {
1052 .cmd_rcgr = 0x4f004,
1053 .mnd_width = 8,
1054 .hid_width = 5,
1055 .parent_map = gcc_parent_map_2,
1056 .freq_tbl = ftbl_gcc_gp1_clk_src,
1057 .clkr.hw.init = &(struct clk_init_data){
1058 .name = "gcc_gp3_clk_src",
1059 .parent_data = gcc_parents_2,
1060 .num_parents = ARRAY_SIZE(gcc_parents_2),
1061 .ops = &clk_rcg2_ops,
1062 },
1063 };
1064
1065 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1066 F(19200000, P_BI_TCXO, 1, 0, 0),
1067 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1068 { }
1069 };
1070
1071 static struct clk_rcg2 gcc_pdm2_clk_src = {
1072 .cmd_rcgr = 0x20010,
1073 .mnd_width = 0,
1074 .hid_width = 5,
1075 .parent_map = gcc_parent_map_0,
1076 .freq_tbl = ftbl_gcc_pdm2_clk_src,
1077 .clkr.hw.init = &(struct clk_init_data){
1078 .name = "gcc_pdm2_clk_src",
1079 .parent_data = gcc_parents_0,
1080 .num_parents = ARRAY_SIZE(gcc_parents_0),
1081 .ops = &clk_rcg2_ops,
1082 },
1083 };
1084
1085 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1086 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1087 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1088 F(19200000, P_BI_TCXO, 1, 0, 0),
1089 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1090 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1091 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1092 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1093 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1094 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1095 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1096 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1097 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1098 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1099 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1100 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1101 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1102 { }
1103 };
1104
1105 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1106 .name = "gcc_qupv3_wrap0_s0_clk_src",
1107 .parent_data = gcc_parents_1,
1108 .num_parents = ARRAY_SIZE(gcc_parents_1),
1109 .ops = &clk_rcg2_ops,
1110 };
1111
1112 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1113 .cmd_rcgr = 0x1f148,
1114 .mnd_width = 16,
1115 .hid_width = 5,
1116 .parent_map = gcc_parent_map_1,
1117 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1118 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1119 };
1120
1121 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1122 .name = "gcc_qupv3_wrap0_s1_clk_src",
1123 .parent_data = gcc_parents_1,
1124 .num_parents = ARRAY_SIZE(gcc_parents_1),
1125 .ops = &clk_rcg2_ops,
1126 };
1127
1128 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1129 .cmd_rcgr = 0x1f278,
1130 .mnd_width = 16,
1131 .hid_width = 5,
1132 .parent_map = gcc_parent_map_1,
1133 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1134 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1135 };
1136
1137 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1138 .name = "gcc_qupv3_wrap0_s2_clk_src",
1139 .parent_data = gcc_parents_1,
1140 .num_parents = ARRAY_SIZE(gcc_parents_1),
1141 .ops = &clk_rcg2_ops,
1142 };
1143
1144 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1145 .cmd_rcgr = 0x1f3a8,
1146 .mnd_width = 16,
1147 .hid_width = 5,
1148 .parent_map = gcc_parent_map_1,
1149 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1150 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1151 };
1152
1153 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1154 .name = "gcc_qupv3_wrap0_s3_clk_src",
1155 .parent_data = gcc_parents_1,
1156 .num_parents = ARRAY_SIZE(gcc_parents_1),
1157 .ops = &clk_rcg2_ops,
1158 };
1159
1160 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1161 .cmd_rcgr = 0x1f4d8,
1162 .mnd_width = 16,
1163 .hid_width = 5,
1164 .parent_map = gcc_parent_map_1,
1165 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1166 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1167 };
1168
1169 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1170 .name = "gcc_qupv3_wrap0_s4_clk_src",
1171 .parent_data = gcc_parents_1,
1172 .num_parents = ARRAY_SIZE(gcc_parents_1),
1173 .ops = &clk_rcg2_ops,
1174 };
1175
1176 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1177 .cmd_rcgr = 0x1f608,
1178 .mnd_width = 16,
1179 .hid_width = 5,
1180 .parent_map = gcc_parent_map_1,
1181 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1182 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1183 };
1184
1185 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1186 .name = "gcc_qupv3_wrap0_s5_clk_src",
1187 .parent_data = gcc_parents_1,
1188 .num_parents = ARRAY_SIZE(gcc_parents_1),
1189 .ops = &clk_rcg2_ops,
1190 };
1191
1192 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1193 .cmd_rcgr = 0x1f738,
1194 .mnd_width = 16,
1195 .hid_width = 5,
1196 .parent_map = gcc_parent_map_1,
1197 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1198 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1199 };
1200
1201 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1202 F(144000, P_BI_TCXO, 16, 3, 25),
1203 F(400000, P_BI_TCXO, 12, 1, 4),
1204 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1205 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1206 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1207 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1208 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1209 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1210 { }
1211 };
1212
1213 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1214 .cmd_rcgr = 0x38028,
1215 .mnd_width = 8,
1216 .hid_width = 5,
1217 .parent_map = gcc_parent_map_1,
1218 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1219 .clkr.hw.init = &(struct clk_init_data){
1220 .name = "gcc_sdcc1_apps_clk_src",
1221 .parent_data = gcc_parents_1,
1222 .num_parents = ARRAY_SIZE(gcc_parents_1),
1223 .ops = &clk_rcg2_floor_ops,
1224 },
1225 };
1226
1227 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1228 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1229 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1230 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1231 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1232 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1233 { }
1234 };
1235
1236 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1237 .cmd_rcgr = 0x38010,
1238 .mnd_width = 0,
1239 .hid_width = 5,
1240 .parent_map = gcc_parent_map_0,
1241 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1242 .clkr.hw.init = &(struct clk_init_data){
1243 .name = "gcc_sdcc1_ice_core_clk_src",
1244 .parent_data = gcc_parents_0,
1245 .num_parents = ARRAY_SIZE(gcc_parents_0),
1246 .ops = &clk_rcg2_ops,
1247 },
1248 };
1249
1250 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1251 F(400000, P_BI_TCXO, 12, 1, 4),
1252 F(19200000, P_BI_TCXO, 1, 0, 0),
1253 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1254 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1255 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1256 F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
1257 { }
1258 };
1259
1260 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1261 .cmd_rcgr = 0x1e00c,
1262 .mnd_width = 8,
1263 .hid_width = 5,
1264 .parent_map = gcc_parent_map_12,
1265 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1266 .clkr.hw.init = &(struct clk_init_data){
1267 .name = "gcc_sdcc2_apps_clk_src",
1268 .parent_data = gcc_parents_12,
1269 .num_parents = ARRAY_SIZE(gcc_parents_12),
1270 .ops = &clk_rcg2_ops,
1271 },
1272 };
1273
1274 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1275 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1276 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1277 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1278 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1279 { }
1280 };
1281
1282 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1283 .cmd_rcgr = 0x1a01c,
1284 .mnd_width = 8,
1285 .hid_width = 5,
1286 .parent_map = gcc_parent_map_0,
1287 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1288 .clkr.hw.init = &(struct clk_init_data){
1289 .name = "gcc_usb30_prim_master_clk_src",
1290 .parent_data = gcc_parents_0,
1291 .num_parents = ARRAY_SIZE(gcc_parents_0),
1292 .ops = &clk_rcg2_ops,
1293 },
1294 };
1295
1296 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1297 .cmd_rcgr = 0x1a060,
1298 .mnd_width = 0,
1299 .hid_width = 5,
1300 .parent_map = gcc_parent_map_13,
1301 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1302 .clkr.hw.init = &(struct clk_init_data){
1303 .name = "gcc_usb3_prim_phy_aux_clk_src",
1304 .parent_data = gcc_parents_13,
1305 .num_parents = ARRAY_SIZE(gcc_parents_13),
1306 .ops = &clk_rcg2_ops,
1307 },
1308 };
1309
1310 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1311 F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1312 F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1313 F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1314 F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1315 { }
1316 };
1317
1318 static struct clk_rcg2 gcc_video_venus_clk_src = {
1319 .cmd_rcgr = 0x58060,
1320 .mnd_width = 0,
1321 .hid_width = 5,
1322 .parent_map = gcc_parent_map_14,
1323 .freq_tbl = ftbl_gcc_video_venus_clk_src,
1324 .clkr.hw.init = &(struct clk_init_data){
1325 .name = "gcc_video_venus_clk_src",
1326 .parent_data = gcc_parents_14,
1327 .num_parents = ARRAY_SIZE(gcc_parents_14),
1328 .flags = CLK_SET_RATE_PARENT,
1329 .ops = &clk_rcg2_ops,
1330 },
1331 };
1332
1333 static struct clk_branch gcc_ahb2phy_csi_clk = {
1334 .halt_reg = 0x1d004,
1335 .halt_check = BRANCH_HALT_DELAY,
1336 .hwcg_reg = 0x1d004,
1337 .hwcg_bit = 1,
1338 .clkr = {
1339 .enable_reg = 0x1d004,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(struct clk_init_data){
1342 .name = "gcc_ahb2phy_csi_clk",
1343 .ops = &clk_branch2_ops,
1344 },
1345 },
1346 };
1347
1348 static struct clk_branch gcc_ahb2phy_usb_clk = {
1349 .halt_reg = 0x1d008,
1350 .halt_check = BRANCH_HALT,
1351 .hwcg_reg = 0x1d008,
1352 .hwcg_bit = 1,
1353 .clkr = {
1354 .enable_reg = 0x1d008,
1355 .enable_mask = BIT(0),
1356 .hw.init = &(struct clk_init_data){
1357 .name = "gcc_ahb2phy_usb_clk",
1358 .ops = &clk_branch2_ops,
1359 },
1360 },
1361 };
1362
1363 static struct clk_branch gcc_bimc_gpu_axi_clk = {
1364 .halt_reg = 0x71154,
1365 .halt_check = BRANCH_HALT_DELAY,
1366 .hwcg_reg = 0x71154,
1367 .hwcg_bit = 1,
1368 .clkr = {
1369 .enable_reg = 0x71154,
1370 .enable_mask = BIT(0),
1371 .hw.init = &(struct clk_init_data){
1372 .name = "gcc_bimc_gpu_axi_clk",
1373 .ops = &clk_branch2_ops,
1374 },
1375 },
1376 };
1377
1378 static struct clk_branch gcc_boot_rom_ahb_clk = {
1379 .halt_reg = 0x23004,
1380 .halt_check = BRANCH_HALT_VOTED,
1381 .hwcg_reg = 0x23004,
1382 .hwcg_bit = 1,
1383 .clkr = {
1384 .enable_reg = 0x79004,
1385 .enable_mask = BIT(10),
1386 .hw.init = &(struct clk_init_data){
1387 .name = "gcc_boot_rom_ahb_clk",
1388 .ops = &clk_branch2_ops,
1389 },
1390 },
1391 };
1392
1393 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1394 .halt_reg = 0x17070,
1395 .halt_check = BRANCH_HALT_VOTED,
1396 .hwcg_reg = 0x17070,
1397 .hwcg_bit = 1,
1398 .clkr = {
1399 .enable_reg = 0x79004,
1400 .enable_mask = BIT(27),
1401 .hw.init = &(struct clk_init_data){
1402 .name = "gcc_cam_throttle_nrt_clk",
1403 .ops = &clk_branch2_ops,
1404 },
1405 },
1406 };
1407
1408 static struct clk_branch gcc_cam_throttle_rt_clk = {
1409 .halt_reg = 0x1706c,
1410 .halt_check = BRANCH_HALT_VOTED,
1411 .hwcg_reg = 0x1706c,
1412 .hwcg_bit = 1,
1413 .clkr = {
1414 .enable_reg = 0x79004,
1415 .enable_mask = BIT(26),
1416 .hw.init = &(struct clk_init_data){
1417 .name = "gcc_cam_throttle_rt_clk",
1418 .ops = &clk_branch2_ops,
1419 },
1420 },
1421 };
1422
1423 static struct clk_branch gcc_camera_ahb_clk = {
1424 .halt_reg = 0x17008,
1425 .halt_check = BRANCH_HALT_DELAY,
1426 .hwcg_reg = 0x17008,
1427 .hwcg_bit = 1,
1428 .clkr = {
1429 .enable_reg = 0x17008,
1430 .enable_mask = BIT(0),
1431 .hw.init = &(struct clk_init_data){
1432 .name = "gcc_camera_ahb_clk",
1433 .flags = CLK_IS_CRITICAL,
1434 .ops = &clk_branch2_ops,
1435 },
1436 },
1437 };
1438
1439 static struct clk_branch gcc_camera_xo_clk = {
1440 .halt_reg = 0x17028,
1441 .halt_check = BRANCH_HALT,
1442 .clkr = {
1443 .enable_reg = 0x17028,
1444 .enable_mask = BIT(0),
1445 .hw.init = &(struct clk_init_data){
1446 .name = "gcc_camera_xo_clk",
1447 .flags = CLK_IS_CRITICAL,
1448 .ops = &clk_branch2_ops,
1449 },
1450 },
1451 };
1452
1453 static struct clk_branch gcc_camss_axi_clk = {
1454 .halt_reg = 0x58044,
1455 .halt_check = BRANCH_HALT,
1456 .clkr = {
1457 .enable_reg = 0x58044,
1458 .enable_mask = BIT(0),
1459 .hw.init = &(struct clk_init_data){
1460 .name = "gcc_camss_axi_clk",
1461 .parent_hws = (const struct clk_hw *[])
1462 { &gcc_camss_axi_clk_src.clkr.hw },
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_camss_camnoc_atb_clk = {
1471 .halt_reg = 0x5804c,
1472 .halt_check = BRANCH_HALT_DELAY,
1473 .hwcg_reg = 0x5804c,
1474 .hwcg_bit = 1,
1475 .clkr = {
1476 .enable_reg = 0x5804c,
1477 .enable_mask = BIT(0),
1478 .hw.init = &(struct clk_init_data){
1479 .name = "gcc_camss_camnoc_atb_clk",
1480 .ops = &clk_branch2_ops,
1481 },
1482 },
1483 };
1484
1485 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
1486 .halt_reg = 0x58050,
1487 .halt_check = BRANCH_HALT_DELAY,
1488 .hwcg_reg = 0x58050,
1489 .hwcg_bit = 1,
1490 .clkr = {
1491 .enable_reg = 0x58050,
1492 .enable_mask = BIT(0),
1493 .hw.init = &(struct clk_init_data){
1494 .name = "gcc_camss_camnoc_nts_xo_clk",
1495 .ops = &clk_branch2_ops,
1496 },
1497 },
1498 };
1499
1500 static struct clk_branch gcc_camss_cci_0_clk = {
1501 .halt_reg = 0x56018,
1502 .halt_check = BRANCH_HALT,
1503 .clkr = {
1504 .enable_reg = 0x56018,
1505 .enable_mask = BIT(0),
1506 .hw.init = &(struct clk_init_data){
1507 .name = "gcc_camss_cci_0_clk",
1508 .parent_hws = (const struct clk_hw *[])
1509 { &gcc_camss_cci_clk_src.clkr.hw },
1510 .num_parents = 1,
1511 .flags = CLK_SET_RATE_PARENT,
1512 .ops = &clk_branch2_ops,
1513 },
1514 },
1515 };
1516
1517 static struct clk_branch gcc_camss_cphy_0_clk = {
1518 .halt_reg = 0x52088,
1519 .halt_check = BRANCH_HALT,
1520 .clkr = {
1521 .enable_reg = 0x52088,
1522 .enable_mask = BIT(0),
1523 .hw.init = &(struct clk_init_data){
1524 .name = "gcc_camss_cphy_0_clk",
1525 .parent_hws = (const struct clk_hw *[])
1526 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
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_camss_cphy_1_clk = {
1535 .halt_reg = 0x5208c,
1536 .halt_check = BRANCH_HALT,
1537 .clkr = {
1538 .enable_reg = 0x5208c,
1539 .enable_mask = BIT(0),
1540 .hw.init = &(struct clk_init_data){
1541 .name = "gcc_camss_cphy_1_clk",
1542 .parent_hws = (const struct clk_hw *[])
1543 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
1544 .num_parents = 1,
1545 .flags = CLK_SET_RATE_PARENT,
1546 .ops = &clk_branch2_ops,
1547 },
1548 },
1549 };
1550
1551 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1552 .halt_reg = 0x45018,
1553 .halt_check = BRANCH_HALT,
1554 .clkr = {
1555 .enable_reg = 0x45018,
1556 .enable_mask = BIT(0),
1557 .hw.init = &(struct clk_init_data){
1558 .name = "gcc_camss_csi0phytimer_clk",
1559 .parent_hws = (const struct clk_hw *[])
1560 { &gcc_camss_csi0phytimer_clk_src.clkr.hw },
1561 .num_parents = 1,
1562 .flags = CLK_SET_RATE_PARENT,
1563 .ops = &clk_branch2_ops,
1564 },
1565 },
1566 };
1567
1568 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1569 .halt_reg = 0x45034,
1570 .halt_check = BRANCH_HALT,
1571 .clkr = {
1572 .enable_reg = 0x45034,
1573 .enable_mask = BIT(0),
1574 .hw.init = &(struct clk_init_data){
1575 .name = "gcc_camss_csi1phytimer_clk",
1576 .parent_hws = (const struct clk_hw *[])
1577 { &gcc_camss_csi1phytimer_clk_src.clkr.hw },
1578 .num_parents = 1,
1579 .flags = CLK_SET_RATE_PARENT,
1580 .ops = &clk_branch2_ops,
1581 },
1582 },
1583 };
1584
1585 static struct clk_branch gcc_camss_mclk0_clk = {
1586 .halt_reg = 0x51018,
1587 .halt_check = BRANCH_HALT,
1588 .clkr = {
1589 .enable_reg = 0x51018,
1590 .enable_mask = BIT(0),
1591 .hw.init = &(struct clk_init_data){
1592 .name = "gcc_camss_mclk0_clk",
1593 .parent_hws = (const struct clk_hw *[])
1594 { &gcc_camss_mclk0_clk_src.clkr.hw },
1595 .num_parents = 1,
1596 .flags = CLK_SET_RATE_PARENT,
1597 .ops = &clk_branch2_ops,
1598 },
1599 },
1600 };
1601
1602 static struct clk_branch gcc_camss_mclk1_clk = {
1603 .halt_reg = 0x51034,
1604 .halt_check = BRANCH_HALT,
1605 .clkr = {
1606 .enable_reg = 0x51034,
1607 .enable_mask = BIT(0),
1608 .hw.init = &(struct clk_init_data){
1609 .name = "gcc_camss_mclk1_clk",
1610 .parent_hws = (const struct clk_hw *[])
1611 { &gcc_camss_mclk1_clk_src.clkr.hw },
1612 .num_parents = 1,
1613 .flags = CLK_SET_RATE_PARENT,
1614 .ops = &clk_branch2_ops,
1615 },
1616 },
1617 };
1618
1619 static struct clk_branch gcc_camss_mclk2_clk = {
1620 .halt_reg = 0x51050,
1621 .halt_check = BRANCH_HALT,
1622 .clkr = {
1623 .enable_reg = 0x51050,
1624 .enable_mask = BIT(0),
1625 .hw.init = &(struct clk_init_data){
1626 .name = "gcc_camss_mclk2_clk",
1627 .parent_hws = (const struct clk_hw *[])
1628 { &gcc_camss_mclk2_clk_src.clkr.hw },
1629 .num_parents = 1,
1630 .flags = CLK_SET_RATE_PARENT,
1631 .ops = &clk_branch2_ops,
1632 },
1633 },
1634 };
1635
1636 static struct clk_branch gcc_camss_mclk3_clk = {
1637 .halt_reg = 0x5106c,
1638 .halt_check = BRANCH_HALT,
1639 .clkr = {
1640 .enable_reg = 0x5106c,
1641 .enable_mask = BIT(0),
1642 .hw.init = &(struct clk_init_data){
1643 .name = "gcc_camss_mclk3_clk",
1644 .parent_hws = (const struct clk_hw *[])
1645 { &gcc_camss_mclk3_clk_src.clkr.hw },
1646 .num_parents = 1,
1647 .flags = CLK_SET_RATE_PARENT,
1648 .ops = &clk_branch2_ops,
1649 },
1650 },
1651 };
1652
1653 static struct clk_branch gcc_camss_nrt_axi_clk = {
1654 .halt_reg = 0x58054,
1655 .halt_check = BRANCH_HALT,
1656 .clkr = {
1657 .enable_reg = 0x58054,
1658 .enable_mask = BIT(0),
1659 .hw.init = &(struct clk_init_data){
1660 .name = "gcc_camss_nrt_axi_clk",
1661 .ops = &clk_branch2_ops,
1662 },
1663 },
1664 };
1665
1666 static struct clk_branch gcc_camss_ope_ahb_clk = {
1667 .halt_reg = 0x5503c,
1668 .halt_check = BRANCH_HALT,
1669 .clkr = {
1670 .enable_reg = 0x5503c,
1671 .enable_mask = BIT(0),
1672 .hw.init = &(struct clk_init_data){
1673 .name = "gcc_camss_ope_ahb_clk",
1674 .parent_hws = (const struct clk_hw *[])
1675 { &gcc_camss_ope_ahb_clk_src.clkr.hw },
1676 .num_parents = 1,
1677 .flags = CLK_SET_RATE_PARENT,
1678 .ops = &clk_branch2_ops,
1679 },
1680 },
1681 };
1682
1683 static struct clk_branch gcc_camss_ope_clk = {
1684 .halt_reg = 0x5501c,
1685 .halt_check = BRANCH_HALT,
1686 .clkr = {
1687 .enable_reg = 0x5501c,
1688 .enable_mask = BIT(0),
1689 .hw.init = &(struct clk_init_data){
1690 .name = "gcc_camss_ope_clk",
1691 .parent_hws = (const struct clk_hw *[])
1692 { &gcc_camss_ope_clk_src.clkr.hw },
1693 .num_parents = 1,
1694 .flags = CLK_SET_RATE_PARENT,
1695 .ops = &clk_branch2_ops,
1696 },
1697 },
1698 };
1699
1700 static struct clk_branch gcc_camss_rt_axi_clk = {
1701 .halt_reg = 0x5805c,
1702 .halt_check = BRANCH_HALT,
1703 .clkr = {
1704 .enable_reg = 0x5805c,
1705 .enable_mask = BIT(0),
1706 .hw.init = &(struct clk_init_data){
1707 .name = "gcc_camss_rt_axi_clk",
1708 .ops = &clk_branch2_ops,
1709 },
1710 },
1711 };
1712
1713 static struct clk_branch gcc_camss_tfe_0_clk = {
1714 .halt_reg = 0x5201c,
1715 .halt_check = BRANCH_HALT,
1716 .clkr = {
1717 .enable_reg = 0x5201c,
1718 .enable_mask = BIT(0),
1719 .hw.init = &(struct clk_init_data){
1720 .name = "gcc_camss_tfe_0_clk",
1721 .parent_hws = (const struct clk_hw *[])
1722 { &gcc_camss_tfe_0_clk_src.clkr.hw },
1723 .num_parents = 1,
1724 .flags = CLK_SET_RATE_PARENT,
1725 .ops = &clk_branch2_ops,
1726 },
1727 },
1728 };
1729
1730 static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
1731 .halt_reg = 0x5207c,
1732 .halt_check = BRANCH_HALT,
1733 .clkr = {
1734 .enable_reg = 0x5207c,
1735 .enable_mask = BIT(0),
1736 .hw.init = &(struct clk_init_data){
1737 .name = "gcc_camss_tfe_0_cphy_rx_clk",
1738 .parent_hws = (const struct clk_hw *[])
1739 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
1740 .num_parents = 1,
1741 .flags = CLK_SET_RATE_PARENT,
1742 .ops = &clk_branch2_ops,
1743 },
1744 },
1745 };
1746
1747 static struct clk_branch gcc_camss_tfe_0_csid_clk = {
1748 .halt_reg = 0x520ac,
1749 .halt_check = BRANCH_HALT,
1750 .clkr = {
1751 .enable_reg = 0x520ac,
1752 .enable_mask = BIT(0),
1753 .hw.init = &(struct clk_init_data){
1754 .name = "gcc_camss_tfe_0_csid_clk",
1755 .parent_hws = (const struct clk_hw *[])
1756 { &gcc_camss_tfe_0_csid_clk_src.clkr.hw },
1757 .num_parents = 1,
1758 .flags = CLK_SET_RATE_PARENT,
1759 .ops = &clk_branch2_ops,
1760 },
1761 },
1762 };
1763
1764 static struct clk_branch gcc_camss_tfe_1_clk = {
1765 .halt_reg = 0x5203c,
1766 .halt_check = BRANCH_HALT,
1767 .clkr = {
1768 .enable_reg = 0x5203c,
1769 .enable_mask = BIT(0),
1770 .hw.init = &(struct clk_init_data){
1771 .name = "gcc_camss_tfe_1_clk",
1772 .parent_hws = (const struct clk_hw *[])
1773 { &gcc_camss_tfe_1_clk_src.clkr.hw },
1774 .num_parents = 1,
1775 .flags = CLK_SET_RATE_PARENT,
1776 .ops = &clk_branch2_ops,
1777 },
1778 },
1779 };
1780
1781 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
1782 .halt_reg = 0x52080,
1783 .halt_check = BRANCH_HALT,
1784 .clkr = {
1785 .enable_reg = 0x52080,
1786 .enable_mask = BIT(0),
1787 .hw.init = &(struct clk_init_data){
1788 .name = "gcc_camss_tfe_1_cphy_rx_clk",
1789 .parent_hws = (const struct clk_hw *[])
1790 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
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_camss_tfe_1_csid_clk = {
1799 .halt_reg = 0x520cc,
1800 .halt_check = BRANCH_HALT,
1801 .clkr = {
1802 .enable_reg = 0x520cc,
1803 .enable_mask = BIT(0),
1804 .hw.init = &(struct clk_init_data){
1805 .name = "gcc_camss_tfe_1_csid_clk",
1806 .parent_hws = (const struct clk_hw *[])
1807 { &gcc_camss_tfe_1_csid_clk_src.clkr.hw },
1808 .num_parents = 1,
1809 .flags = CLK_SET_RATE_PARENT,
1810 .ops = &clk_branch2_ops,
1811 },
1812 },
1813 };
1814
1815 static struct clk_branch gcc_camss_top_ahb_clk = {
1816 .halt_reg = 0x58028,
1817 .halt_check = BRANCH_HALT,
1818 .clkr = {
1819 .enable_reg = 0x58028,
1820 .enable_mask = BIT(0),
1821 .hw.init = &(struct clk_init_data){
1822 .name = "gcc_camss_top_ahb_clk",
1823 .parent_hws = (const struct clk_hw *[])
1824 { &gcc_camss_top_ahb_clk_src.clkr.hw },
1825 .num_parents = 1,
1826 .flags = CLK_SET_RATE_PARENT,
1827 .ops = &clk_branch2_ops,
1828 },
1829 },
1830 };
1831
1832 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1833 .halt_reg = 0x1a084,
1834 .halt_check = BRANCH_HALT,
1835 .hwcg_reg = 0x1a084,
1836 .hwcg_bit = 1,
1837 .clkr = {
1838 .enable_reg = 0x1a084,
1839 .enable_mask = BIT(0),
1840 .hw.init = &(struct clk_init_data){
1841 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1842 .parent_hws = (const struct clk_hw *[])
1843 { &gcc_usb30_prim_master_clk_src.clkr.hw },
1844 .num_parents = 1,
1845 .flags = CLK_SET_RATE_PARENT,
1846 .ops = &clk_branch2_ops,
1847 },
1848 },
1849 };
1850
1851 static struct clk_branch gcc_disp_ahb_clk = {
1852 .halt_reg = 0x1700c,
1853 .halt_check = BRANCH_HALT,
1854 .hwcg_reg = 0x1700c,
1855 .hwcg_bit = 1,
1856 .clkr = {
1857 .enable_reg = 0x1700c,
1858 .enable_mask = BIT(0),
1859 .hw.init = &(struct clk_init_data){
1860 .name = "gcc_disp_ahb_clk",
1861 .flags = CLK_IS_CRITICAL,
1862 .ops = &clk_branch2_ops,
1863 },
1864 },
1865 };
1866
1867 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
1868 .reg = 0x17058,
1869 .shift = 0,
1870 .width = 2,
1871 .clkr.hw.init = &(struct clk_init_data) {
1872 .name = "gcc_disp_gpll0_clk_src",
1873 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1874 .num_parents = 1,
1875 .ops = &clk_regmap_div_ops,
1876 },
1877 };
1878
1879 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1880 .halt_check = BRANCH_HALT_DELAY,
1881 .clkr = {
1882 .enable_reg = 0x79004,
1883 .enable_mask = BIT(20),
1884 .hw.init = &(struct clk_init_data){
1885 .name = "gcc_disp_gpll0_div_clk_src",
1886 .parent_hws = (const struct clk_hw *[])
1887 { &gcc_disp_gpll0_clk_src.clkr.hw },
1888 .num_parents = 1,
1889 .flags = CLK_SET_RATE_PARENT,
1890 .ops = &clk_branch2_ops,
1891 },
1892 },
1893 };
1894
1895 static struct clk_branch gcc_disp_hf_axi_clk = {
1896 .halt_reg = 0x17020,
1897 .halt_check = BRANCH_HALT,
1898 .hwcg_reg = 0x17020,
1899 .hwcg_bit = 1,
1900 .clkr = {
1901 .enable_reg = 0x17020,
1902 .enable_mask = BIT(0),
1903 .hw.init = &(struct clk_init_data){
1904 .name = "gcc_disp_hf_axi_clk",
1905 .ops = &clk_branch2_ops,
1906 },
1907 },
1908 };
1909
1910 static struct clk_branch gcc_disp_throttle_core_clk = {
1911 .halt_reg = 0x17064,
1912 .halt_check = BRANCH_HALT_VOTED,
1913 .hwcg_reg = 0x17064,
1914 .hwcg_bit = 1,
1915 .clkr = {
1916 .enable_reg = 0x7900c,
1917 .enable_mask = BIT(5),
1918 .hw.init = &(struct clk_init_data){
1919 .name = "gcc_disp_throttle_core_clk",
1920 .ops = &clk_branch2_ops,
1921 },
1922 },
1923 };
1924
1925 static struct clk_branch gcc_disp_xo_clk = {
1926 .halt_reg = 0x1702c,
1927 .halt_check = BRANCH_HALT,
1928 .clkr = {
1929 .enable_reg = 0x1702c,
1930 .enable_mask = BIT(0),
1931 .hw.init = &(struct clk_init_data){
1932 .name = "gcc_disp_xo_clk",
1933 .flags = CLK_IS_CRITICAL,
1934 .ops = &clk_branch2_ops,
1935 },
1936 },
1937 };
1938
1939 static struct clk_branch gcc_gp1_clk = {
1940 .halt_reg = 0x4d000,
1941 .halt_check = BRANCH_HALT,
1942 .clkr = {
1943 .enable_reg = 0x4d000,
1944 .enable_mask = BIT(0),
1945 .hw.init = &(struct clk_init_data){
1946 .name = "gcc_gp1_clk",
1947 .parent_hws = (const struct clk_hw *[])
1948 { &gcc_gp1_clk_src.clkr.hw },
1949 .num_parents = 1,
1950 .flags = CLK_SET_RATE_PARENT,
1951 .ops = &clk_branch2_ops,
1952 },
1953 },
1954 };
1955
1956 static struct clk_branch gcc_gp2_clk = {
1957 .halt_reg = 0x4e000,
1958 .halt_check = BRANCH_HALT,
1959 .clkr = {
1960 .enable_reg = 0x4e000,
1961 .enable_mask = BIT(0),
1962 .hw.init = &(struct clk_init_data){
1963 .name = "gcc_gp2_clk",
1964 .parent_hws = (const struct clk_hw *[])
1965 { &gcc_gp2_clk_src.clkr.hw },
1966 .num_parents = 1,
1967 .flags = CLK_SET_RATE_PARENT,
1968 .ops = &clk_branch2_ops,
1969 },
1970 },
1971 };
1972
1973 static struct clk_branch gcc_gp3_clk = {
1974 .halt_reg = 0x4f000,
1975 .halt_check = BRANCH_HALT,
1976 .clkr = {
1977 .enable_reg = 0x4f000,
1978 .enable_mask = BIT(0),
1979 .hw.init = &(struct clk_init_data){
1980 .name = "gcc_gp3_clk",
1981 .parent_hws = (const struct clk_hw *[])
1982 { &gcc_gp3_clk_src.clkr.hw },
1983 .num_parents = 1,
1984 .flags = CLK_SET_RATE_PARENT,
1985 .ops = &clk_branch2_ops,
1986 },
1987 },
1988 };
1989
1990 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1991 .halt_reg = 0x36004,
1992 .halt_check = BRANCH_HALT,
1993 .hwcg_reg = 0x36004,
1994 .hwcg_bit = 1,
1995 .clkr = {
1996 .enable_reg = 0x36004,
1997 .enable_mask = BIT(0),
1998 .hw.init = &(struct clk_init_data){
1999 .name = "gcc_gpu_cfg_ahb_clk",
2000 .flags = CLK_IS_CRITICAL,
2001 .ops = &clk_branch2_ops,
2002 },
2003 },
2004 };
2005
2006 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2007 .halt_check = BRANCH_HALT_DELAY,
2008 .clkr = {
2009 .enable_reg = 0x79004,
2010 .enable_mask = BIT(15),
2011 .hw.init = &(struct clk_init_data){
2012 .name = "gcc_gpu_gpll0_clk_src",
2013 .parent_hws = (const struct clk_hw *[])
2014 { &gpll0.clkr.hw },
2015 .num_parents = 1,
2016 .flags = CLK_SET_RATE_PARENT,
2017 .ops = &clk_branch2_ops,
2018 },
2019 },
2020 };
2021
2022 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2023 .halt_check = BRANCH_HALT_DELAY,
2024 .clkr = {
2025 .enable_reg = 0x79004,
2026 .enable_mask = BIT(16),
2027 .hw.init = &(struct clk_init_data){
2028 .name = "gcc_gpu_gpll0_div_clk_src",
2029 .parent_hws = (const struct clk_hw *[])
2030 { &gpll0_out_aux2.clkr.hw },
2031 .num_parents = 1,
2032 .flags = CLK_SET_RATE_PARENT,
2033 .ops = &clk_branch2_ops,
2034 },
2035 },
2036 };
2037
2038 static struct clk_branch gcc_gpu_iref_clk = {
2039 .halt_reg = 0x36100,
2040 .halt_check = BRANCH_HALT_DELAY,
2041 .clkr = {
2042 .enable_reg = 0x36100,
2043 .enable_mask = BIT(0),
2044 .hw.init = &(struct clk_init_data){
2045 .name = "gcc_gpu_iref_clk",
2046 .ops = &clk_branch2_ops,
2047 },
2048 },
2049 };
2050
2051 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2052 .halt_reg = 0x3600c,
2053 .halt_check = BRANCH_VOTED,
2054 .hwcg_reg = 0x3600c,
2055 .hwcg_bit = 1,
2056 .clkr = {
2057 .enable_reg = 0x3600c,
2058 .enable_mask = BIT(0),
2059 .hw.init = &(struct clk_init_data){
2060 .name = "gcc_gpu_memnoc_gfx_clk",
2061 .ops = &clk_branch2_ops,
2062 },
2063 },
2064 };
2065
2066 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2067 .halt_reg = 0x36018,
2068 .halt_check = BRANCH_HALT,
2069 .clkr = {
2070 .enable_reg = 0x36018,
2071 .enable_mask = BIT(0),
2072 .hw.init = &(struct clk_init_data){
2073 .name = "gcc_gpu_snoc_dvm_gfx_clk",
2074 .ops = &clk_branch2_ops,
2075 },
2076 },
2077 };
2078
2079 static struct clk_branch gcc_gpu_throttle_core_clk = {
2080 .halt_reg = 0x36048,
2081 .halt_check = BRANCH_HALT_VOTED,
2082 .hwcg_reg = 0x36048,
2083 .hwcg_bit = 1,
2084 .clkr = {
2085 .enable_reg = 0x79004,
2086 .enable_mask = BIT(31),
2087 .hw.init = &(struct clk_init_data){
2088 .name = "gcc_gpu_throttle_core_clk",
2089 .flags = CLK_SET_RATE_PARENT,
2090 .ops = &clk_branch2_ops,
2091 },
2092 },
2093 };
2094
2095 static struct clk_branch gcc_pdm2_clk = {
2096 .halt_reg = 0x2000c,
2097 .halt_check = BRANCH_HALT,
2098 .clkr = {
2099 .enable_reg = 0x2000c,
2100 .enable_mask = BIT(0),
2101 .hw.init = &(struct clk_init_data){
2102 .name = "gcc_pdm2_clk",
2103 .parent_hws = (const struct clk_hw *[])
2104 { &gcc_pdm2_clk_src.clkr.hw },
2105 .num_parents = 1,
2106 .flags = CLK_SET_RATE_PARENT,
2107 .ops = &clk_branch2_ops,
2108 },
2109 },
2110 };
2111
2112 static struct clk_branch gcc_pdm_ahb_clk = {
2113 .halt_reg = 0x20004,
2114 .halt_check = BRANCH_HALT,
2115 .hwcg_reg = 0x20004,
2116 .hwcg_bit = 1,
2117 .clkr = {
2118 .enable_reg = 0x20004,
2119 .enable_mask = BIT(0),
2120 .hw.init = &(struct clk_init_data){
2121 .name = "gcc_pdm_ahb_clk",
2122 .ops = &clk_branch2_ops,
2123 },
2124 },
2125 };
2126
2127 static struct clk_branch gcc_pdm_xo4_clk = {
2128 .halt_reg = 0x20008,
2129 .halt_check = BRANCH_HALT,
2130 .clkr = {
2131 .enable_reg = 0x20008,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(struct clk_init_data){
2134 .name = "gcc_pdm_xo4_clk",
2135 .ops = &clk_branch2_ops,
2136 },
2137 },
2138 };
2139
2140 static struct clk_branch gcc_pwm0_xo512_clk = {
2141 .halt_reg = 0x2002c,
2142 .halt_check = BRANCH_HALT,
2143 .clkr = {
2144 .enable_reg = 0x2002c,
2145 .enable_mask = BIT(0),
2146 .hw.init = &(struct clk_init_data){
2147 .name = "gcc_pwm0_xo512_clk",
2148 .ops = &clk_branch2_ops,
2149 },
2150 },
2151 };
2152
2153 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2154 .halt_reg = 0x17014,
2155 .halt_check = BRANCH_HALT_VOTED,
2156 .hwcg_reg = 0x17014,
2157 .hwcg_bit = 1,
2158 .clkr = {
2159 .enable_reg = 0x7900c,
2160 .enable_mask = BIT(0),
2161 .hw.init = &(struct clk_init_data){
2162 .name = "gcc_qmip_camera_nrt_ahb_clk",
2163 .ops = &clk_branch2_ops,
2164 },
2165 },
2166 };
2167
2168 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2169 .halt_reg = 0x17060,
2170 .halt_check = BRANCH_HALT_VOTED,
2171 .hwcg_reg = 0x17060,
2172 .hwcg_bit = 1,
2173 .clkr = {
2174 .enable_reg = 0x7900c,
2175 .enable_mask = BIT(2),
2176 .hw.init = &(struct clk_init_data){
2177 .name = "gcc_qmip_camera_rt_ahb_clk",
2178 .ops = &clk_branch2_ops,
2179 },
2180 },
2181 };
2182
2183 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2184 .halt_reg = 0x17018,
2185 .halt_check = BRANCH_HALT_VOTED,
2186 .hwcg_reg = 0x17018,
2187 .hwcg_bit = 1,
2188 .clkr = {
2189 .enable_reg = 0x7900c,
2190 .enable_mask = BIT(1),
2191 .hw.init = &(struct clk_init_data){
2192 .name = "gcc_qmip_disp_ahb_clk",
2193 .ops = &clk_branch2_ops,
2194 },
2195 },
2196 };
2197
2198 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2199 .halt_reg = 0x36040,
2200 .halt_check = BRANCH_HALT_VOTED,
2201 .hwcg_reg = 0x36040,
2202 .hwcg_bit = 1,
2203 .clkr = {
2204 .enable_reg = 0x7900c,
2205 .enable_mask = BIT(4),
2206 .hw.init = &(struct clk_init_data){
2207 .name = "gcc_qmip_gpu_cfg_ahb_clk",
2208 .ops = &clk_branch2_ops,
2209 },
2210 },
2211 };
2212
2213 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2214 .halt_reg = 0x17010,
2215 .halt_check = BRANCH_HALT_VOTED,
2216 .hwcg_reg = 0x17010,
2217 .hwcg_bit = 1,
2218 .clkr = {
2219 .enable_reg = 0x79004,
2220 .enable_mask = BIT(25),
2221 .hw.init = &(struct clk_init_data){
2222 .name = "gcc_qmip_video_vcodec_ahb_clk",
2223 .ops = &clk_branch2_ops,
2224 },
2225 },
2226 };
2227
2228 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2229 .halt_reg = 0x1f014,
2230 .halt_check = BRANCH_HALT_VOTED,
2231 .clkr = {
2232 .enable_reg = 0x7900c,
2233 .enable_mask = BIT(9),
2234 .hw.init = &(struct clk_init_data){
2235 .name = "gcc_qupv3_wrap0_core_2x_clk",
2236 .ops = &clk_branch2_ops,
2237 },
2238 },
2239 };
2240
2241 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2242 .halt_reg = 0x1f00c,
2243 .halt_check = BRANCH_HALT_VOTED,
2244 .clkr = {
2245 .enable_reg = 0x7900c,
2246 .enable_mask = BIT(8),
2247 .hw.init = &(struct clk_init_data){
2248 .name = "gcc_qupv3_wrap0_core_clk",
2249 .ops = &clk_branch2_ops,
2250 },
2251 },
2252 };
2253
2254 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2255 .halt_reg = 0x1f144,
2256 .halt_check = BRANCH_HALT_VOTED,
2257 .clkr = {
2258 .enable_reg = 0x7900c,
2259 .enable_mask = BIT(10),
2260 .hw.init = &(struct clk_init_data){
2261 .name = "gcc_qupv3_wrap0_s0_clk",
2262 .parent_hws = (const struct clk_hw *[])
2263 { &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
2264 .num_parents = 1,
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2267 },
2268 },
2269 };
2270
2271 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2272 .halt_reg = 0x1f274,
2273 .halt_check = BRANCH_HALT_VOTED,
2274 .clkr = {
2275 .enable_reg = 0x7900c,
2276 .enable_mask = BIT(11),
2277 .hw.init = &(struct clk_init_data){
2278 .name = "gcc_qupv3_wrap0_s1_clk",
2279 .parent_hws = (const struct clk_hw *[])
2280 { &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
2281 .num_parents = 1,
2282 .flags = CLK_SET_RATE_PARENT,
2283 .ops = &clk_branch2_ops,
2284 },
2285 },
2286 };
2287
2288 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2289 .halt_reg = 0x1f3a4,
2290 .halt_check = BRANCH_HALT_VOTED,
2291 .clkr = {
2292 .enable_reg = 0x7900c,
2293 .enable_mask = BIT(12),
2294 .hw.init = &(struct clk_init_data){
2295 .name = "gcc_qupv3_wrap0_s2_clk",
2296 .parent_hws = (const struct clk_hw *[])
2297 { &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
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_qupv3_wrap0_s3_clk = {
2306 .halt_reg = 0x1f4d4,
2307 .halt_check = BRANCH_HALT_VOTED,
2308 .clkr = {
2309 .enable_reg = 0x7900c,
2310 .enable_mask = BIT(13),
2311 .hw.init = &(struct clk_init_data){
2312 .name = "gcc_qupv3_wrap0_s3_clk",
2313 .parent_hws = (const struct clk_hw *[])
2314 { &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
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_qupv3_wrap0_s4_clk = {
2323 .halt_reg = 0x1f604,
2324 .halt_check = BRANCH_HALT_VOTED,
2325 .clkr = {
2326 .enable_reg = 0x7900c,
2327 .enable_mask = BIT(14),
2328 .hw.init = &(struct clk_init_data){
2329 .name = "gcc_qupv3_wrap0_s4_clk",
2330 .parent_hws = (const struct clk_hw *[])
2331 { &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
2332 .num_parents = 1,
2333 .flags = CLK_SET_RATE_PARENT,
2334 .ops = &clk_branch2_ops,
2335 },
2336 },
2337 };
2338
2339 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2340 .halt_reg = 0x1f734,
2341 .halt_check = BRANCH_HALT_VOTED,
2342 .clkr = {
2343 .enable_reg = 0x7900c,
2344 .enable_mask = BIT(15),
2345 .hw.init = &(struct clk_init_data){
2346 .name = "gcc_qupv3_wrap0_s5_clk",
2347 .parent_hws = (const struct clk_hw *[])
2348 { &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
2349 .num_parents = 1,
2350 .flags = CLK_SET_RATE_PARENT,
2351 .ops = &clk_branch2_ops,
2352 },
2353 },
2354 };
2355
2356 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2357 .halt_reg = 0x1f004,
2358 .halt_check = BRANCH_HALT_VOTED,
2359 .hwcg_reg = 0x1f004,
2360 .hwcg_bit = 1,
2361 .clkr = {
2362 .enable_reg = 0x7900c,
2363 .enable_mask = BIT(6),
2364 .hw.init = &(struct clk_init_data){
2365 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2366 .ops = &clk_branch2_ops,
2367 },
2368 },
2369 };
2370
2371 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2372 .halt_reg = 0x1f008,
2373 .halt_check = BRANCH_HALT_VOTED,
2374 .hwcg_reg = 0x1f008,
2375 .hwcg_bit = 1,
2376 .clkr = {
2377 .enable_reg = 0x7900c,
2378 .enable_mask = BIT(7),
2379 .hw.init = &(struct clk_init_data){
2380 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2381 .ops = &clk_branch2_ops,
2382 },
2383 },
2384 };
2385
2386 static struct clk_branch gcc_sdcc1_ahb_clk = {
2387 .halt_reg = 0x38008,
2388 .halt_check = BRANCH_HALT,
2389 .clkr = {
2390 .enable_reg = 0x38008,
2391 .enable_mask = BIT(0),
2392 .hw.init = &(struct clk_init_data){
2393 .name = "gcc_sdcc1_ahb_clk",
2394 .ops = &clk_branch2_ops,
2395 },
2396 },
2397 };
2398
2399 static struct clk_branch gcc_sdcc1_apps_clk = {
2400 .halt_reg = 0x38004,
2401 .halt_check = BRANCH_HALT,
2402 .clkr = {
2403 .enable_reg = 0x38004,
2404 .enable_mask = BIT(0),
2405 .hw.init = &(struct clk_init_data){
2406 .name = "gcc_sdcc1_apps_clk",
2407 .parent_hws = (const struct clk_hw *[])
2408 { &gcc_sdcc1_apps_clk_src.clkr.hw },
2409 .num_parents = 1,
2410 .flags = CLK_SET_RATE_PARENT,
2411 .ops = &clk_branch2_ops,
2412 },
2413 },
2414 };
2415
2416 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2417 .halt_reg = 0x3800c,
2418 .halt_check = BRANCH_HALT,
2419 .hwcg_reg = 0x3800c,
2420 .hwcg_bit = 1,
2421 .clkr = {
2422 .enable_reg = 0x3800c,
2423 .enable_mask = BIT(0),
2424 .hw.init = &(struct clk_init_data){
2425 .name = "gcc_sdcc1_ice_core_clk",
2426 .parent_hws = (const struct clk_hw *[])
2427 { &gcc_sdcc1_ice_core_clk_src.clkr.hw },
2428 .num_parents = 1,
2429 .flags = CLK_SET_RATE_PARENT,
2430 .ops = &clk_branch2_ops,
2431 },
2432 },
2433 };
2434
2435 static struct clk_branch gcc_sdcc2_ahb_clk = {
2436 .halt_reg = 0x1e008,
2437 .halt_check = BRANCH_HALT,
2438 .clkr = {
2439 .enable_reg = 0x1e008,
2440 .enable_mask = BIT(0),
2441 .hw.init = &(struct clk_init_data){
2442 .name = "gcc_sdcc2_ahb_clk",
2443 .ops = &clk_branch2_ops,
2444 },
2445 },
2446 };
2447
2448 static struct clk_branch gcc_sdcc2_apps_clk = {
2449 .halt_reg = 0x1e004,
2450 .halt_check = BRANCH_HALT,
2451 .clkr = {
2452 .enable_reg = 0x1e004,
2453 .enable_mask = BIT(0),
2454 .hw.init = &(struct clk_init_data){
2455 .name = "gcc_sdcc2_apps_clk",
2456 .parent_hws = (const struct clk_hw *[])
2457 { &gcc_sdcc2_apps_clk_src.clkr.hw },
2458 .num_parents = 1,
2459 .flags = CLK_SET_RATE_PARENT,
2460 .ops = &clk_branch2_ops,
2461 },
2462 },
2463 };
2464
2465 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2466 .halt_reg = 0x2b06c,
2467 .halt_check = BRANCH_HALT_VOTED,
2468 .hwcg_reg = 0x2b06c,
2469 .hwcg_bit = 1,
2470 .clkr = {
2471 .enable_reg = 0x79004,
2472 .enable_mask = BIT(0),
2473 .hw.init = &(struct clk_init_data){
2474 .name = "gcc_sys_noc_cpuss_ahb_clk",
2475 .flags = CLK_IS_CRITICAL,
2476 .ops = &clk_branch2_ops,
2477 },
2478 },
2479 };
2480
2481 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
2482 .halt_reg = 0x1a080,
2483 .halt_check = BRANCH_HALT,
2484 .hwcg_reg = 0x1a080,
2485 .hwcg_bit = 1,
2486 .clkr = {
2487 .enable_reg = 0x1a080,
2488 .enable_mask = BIT(0),
2489 .hw.init = &(struct clk_init_data){
2490 .name = "gcc_sys_noc_usb3_prim_axi_clk",
2491 .parent_hws = (const struct clk_hw *[])
2492 { &gcc_usb30_prim_master_clk_src.clkr.hw },
2493 .num_parents = 1,
2494 .flags = CLK_SET_RATE_PARENT,
2495 .ops = &clk_branch2_ops,
2496 },
2497 },
2498 };
2499
2500 static struct clk_branch gcc_usb30_prim_master_clk = {
2501 .halt_reg = 0x1a010,
2502 .halt_check = BRANCH_HALT,
2503 .clkr = {
2504 .enable_reg = 0x1a010,
2505 .enable_mask = BIT(0),
2506 .hw.init = &(struct clk_init_data){
2507 .name = "gcc_usb30_prim_master_clk",
2508 .parent_hws = (const struct clk_hw *[])
2509 { &gcc_usb30_prim_master_clk_src.clkr.hw },
2510 .num_parents = 1,
2511 .flags = CLK_SET_RATE_PARENT,
2512 .ops = &clk_branch2_ops,
2513 },
2514 },
2515 };
2516
2517 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2518 .halt_reg = 0x1a018,
2519 .halt_check = BRANCH_HALT,
2520 .clkr = {
2521 .enable_reg = 0x1a018,
2522 .enable_mask = BIT(0),
2523 .hw.init = &(struct clk_init_data){
2524 .name = "gcc_usb30_prim_mock_utmi_clk",
2525 .parent_hws = (const struct clk_hw *[])
2526 { &gcc_usb30_prim_mock_utmi_postdiv.clkr.hw },
2527 .num_parents = 1,
2528 .flags = CLK_SET_RATE_PARENT,
2529 .ops = &clk_branch2_ops,
2530 },
2531 },
2532 };
2533
2534 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2535 .halt_reg = 0x1a014,
2536 .halt_check = BRANCH_HALT,
2537 .clkr = {
2538 .enable_reg = 0x1a014,
2539 .enable_mask = BIT(0),
2540 .hw.init = &(struct clk_init_data){
2541 .name = "gcc_usb30_prim_sleep_clk",
2542 .ops = &clk_branch2_ops,
2543 },
2544 },
2545 };
2546
2547 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2548 .halt_reg = 0x9f000,
2549 .halt_check = BRANCH_HALT,
2550 .clkr = {
2551 .enable_reg = 0x9f000,
2552 .enable_mask = BIT(0),
2553 .hw.init = &(struct clk_init_data){
2554 .name = "gcc_usb3_prim_clkref_clk",
2555 .ops = &clk_branch2_ops,
2556 },
2557 },
2558 };
2559
2560 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2561 .halt_reg = 0x1a054,
2562 .halt_check = BRANCH_HALT,
2563 .clkr = {
2564 .enable_reg = 0x1a054,
2565 .enable_mask = BIT(0),
2566 .hw.init = &(struct clk_init_data){
2567 .name = "gcc_usb3_prim_phy_com_aux_clk",
2568 .parent_hws = (const struct clk_hw *[])
2569 { &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
2570 .num_parents = 1,
2571 .flags = CLK_SET_RATE_PARENT,
2572 .ops = &clk_branch2_ops,
2573 },
2574 },
2575 };
2576
2577 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2578 .halt_reg = 0x1a058,
2579 .halt_check = BRANCH_HALT_SKIP,
2580 .hwcg_reg = 0x1a058,
2581 .hwcg_bit = 1,
2582 .clkr = {
2583 .enable_reg = 0x1a058,
2584 .enable_mask = BIT(0),
2585 .hw.init = &(struct clk_init_data){
2586 .name = "gcc_usb3_prim_phy_pipe_clk",
2587 .ops = &clk_branch2_ops,
2588 },
2589 },
2590 };
2591
2592 static struct clk_branch gcc_vcodec0_axi_clk = {
2593 .halt_reg = 0x6e008,
2594 .halt_check = BRANCH_HALT,
2595 .clkr = {
2596 .enable_reg = 0x6e008,
2597 .enable_mask = BIT(0),
2598 .hw.init = &(struct clk_init_data){
2599 .name = "gcc_vcodec0_axi_clk",
2600 .ops = &clk_branch2_ops,
2601 },
2602 },
2603 };
2604
2605 static struct clk_branch gcc_venus_ahb_clk = {
2606 .halt_reg = 0x6e010,
2607 .halt_check = BRANCH_HALT,
2608 .clkr = {
2609 .enable_reg = 0x6e010,
2610 .enable_mask = BIT(0),
2611 .hw.init = &(struct clk_init_data){
2612 .name = "gcc_venus_ahb_clk",
2613 .ops = &clk_branch2_ops,
2614 },
2615 },
2616 };
2617
2618 static struct clk_branch gcc_venus_ctl_axi_clk = {
2619 .halt_reg = 0x6e004,
2620 .halt_check = BRANCH_HALT,
2621 .clkr = {
2622 .enable_reg = 0x6e004,
2623 .enable_mask = BIT(0),
2624 .hw.init = &(struct clk_init_data){
2625 .name = "gcc_venus_ctl_axi_clk",
2626 .ops = &clk_branch2_ops,
2627 },
2628 },
2629 };
2630
2631 static struct clk_branch gcc_video_ahb_clk = {
2632 .halt_reg = 0x17004,
2633 .halt_check = BRANCH_HALT,
2634 .hwcg_reg = 0x17004,
2635 .hwcg_bit = 1,
2636 .clkr = {
2637 .enable_reg = 0x17004,
2638 .enable_mask = BIT(0),
2639 .hw.init = &(struct clk_init_data){
2640 .name = "gcc_video_ahb_clk",
2641 .ops = &clk_branch2_ops,
2642 },
2643 },
2644 };
2645
2646 static struct clk_branch gcc_video_axi0_clk = {
2647 .halt_reg = 0x1701c,
2648 .halt_check = BRANCH_HALT,
2649 .hwcg_reg = 0x1701c,
2650 .hwcg_bit = 1,
2651 .clkr = {
2652 .enable_reg = 0x1701c,
2653 .enable_mask = BIT(0),
2654 .hw.init = &(struct clk_init_data){
2655 .name = "gcc_video_axi0_clk",
2656 .ops = &clk_branch2_ops,
2657 },
2658 },
2659 };
2660
2661 static struct clk_branch gcc_video_throttle_core_clk = {
2662 .halt_reg = 0x17068,
2663 .halt_check = BRANCH_HALT_VOTED,
2664 .hwcg_reg = 0x17068,
2665 .hwcg_bit = 1,
2666 .clkr = {
2667 .enable_reg = 0x79004,
2668 .enable_mask = BIT(28),
2669 .hw.init = &(struct clk_init_data){
2670 .name = "gcc_video_throttle_core_clk",
2671 .ops = &clk_branch2_ops,
2672 },
2673 },
2674 };
2675
2676 static struct clk_branch gcc_video_vcodec0_sys_clk = {
2677 .halt_reg = 0x580a4,
2678 .halt_check = BRANCH_HALT_DELAY,
2679 .hwcg_reg = 0x580a4,
2680 .hwcg_bit = 1,
2681 .clkr = {
2682 .enable_reg = 0x580a4,
2683 .enable_mask = BIT(0),
2684 .hw.init = &(struct clk_init_data){
2685 .name = "gcc_video_vcodec0_sys_clk",
2686 .parent_hws = (const struct clk_hw *[])
2687 { &gcc_video_venus_clk_src.clkr.hw },
2688 .num_parents = 1,
2689 .flags = CLK_SET_RATE_PARENT,
2690 .ops = &clk_branch2_ops,
2691 },
2692 },
2693 };
2694
2695 static struct clk_branch gcc_video_venus_ctl_clk = {
2696 .halt_reg = 0x5808c,
2697 .halt_check = BRANCH_HALT,
2698 .clkr = {
2699 .enable_reg = 0x5808c,
2700 .enable_mask = BIT(0),
2701 .hw.init = &(struct clk_init_data){
2702 .name = "gcc_video_venus_ctl_clk",
2703 .parent_hws = (const struct clk_hw *[])
2704 { &gcc_video_venus_clk_src.clkr.hw },
2705 .num_parents = 1,
2706 .flags = CLK_SET_RATE_PARENT,
2707 .ops = &clk_branch2_ops,
2708 },
2709 },
2710 };
2711
2712 static struct clk_branch gcc_video_xo_clk = {
2713 .halt_reg = 0x17024,
2714 .halt_check = BRANCH_HALT,
2715 .clkr = {
2716 .enable_reg = 0x17024,
2717 .enable_mask = BIT(0),
2718 .hw.init = &(struct clk_init_data){
2719 .name = "gcc_video_xo_clk",
2720 .ops = &clk_branch2_ops,
2721 },
2722 },
2723 };
2724
2725 static struct gdsc gcc_camss_top_gdsc = {
2726 .gdscr = 0x58004,
2727 .pd = {
2728 .name = "gcc_camss_top",
2729 },
2730 .pwrsts = PWRSTS_OFF_ON,
2731 };
2732
2733 static struct gdsc gcc_usb30_prim_gdsc = {
2734 .gdscr = 0x1a004,
2735 .pd = {
2736 .name = "gcc_usb30_prim",
2737 },
2738 .pwrsts = PWRSTS_OFF_ON,
2739 };
2740
2741 static struct gdsc gcc_vcodec0_gdsc = {
2742 .gdscr = 0x58098,
2743 .pd = {
2744 .name = "gcc_vcodec0",
2745 },
2746 .pwrsts = PWRSTS_OFF_ON,
2747 };
2748
2749 static struct gdsc gcc_venus_gdsc = {
2750 .gdscr = 0x5807c,
2751 .pd = {
2752 .name = "gcc_venus",
2753 },
2754 .pwrsts = PWRSTS_OFF_ON,
2755 };
2756
2757 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
2758 .gdscr = 0x7d060,
2759 .pd = {
2760 .name = "hlos1_vote_turing_mmu_tbu1",
2761 },
2762 .pwrsts = PWRSTS_OFF_ON,
2763 .flags = VOTABLE,
2764 };
2765
2766 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
2767 .gdscr = 0x7d07c,
2768 .pd = {
2769 .name = "hlos1_vote_turing_mmu_tbu0",
2770 },
2771 .pwrsts = PWRSTS_OFF_ON,
2772 .flags = VOTABLE,
2773 };
2774
2775 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
2776 .gdscr = 0x7d074,
2777 .pd = {
2778 .name = "hlos1_vote_mm_snoc_mmu_tbu_rt",
2779 },
2780 .pwrsts = PWRSTS_OFF_ON,
2781 .flags = VOTABLE,
2782 };
2783
2784 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
2785 .gdscr = 0x7d078,
2786 .pd = {
2787 .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",
2788 },
2789 .pwrsts = PWRSTS_OFF_ON,
2790 .flags = VOTABLE,
2791 };
2792
2793 static struct clk_regmap *gcc_qcm2290_clocks[] = {
2794 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
2795 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
2796 [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
2797 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2798 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
2799 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
2800 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
2801 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
2802 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
2803 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
2804 [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
2805 [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
2806 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
2807 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
2808 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
2809 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
2810 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
2811 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
2812 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
2813 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
2814 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
2815 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
2816 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
2817 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
2818 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
2819 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
2820 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
2821 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
2822 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
2823 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
2824 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
2825 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
2826 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
2827 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
2828 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
2829 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
2830 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
2831 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
2832 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
2833 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
2834 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
2835 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
2836 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
2837 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
2838 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
2839 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
2840 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
2841 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2842 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
2843 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
2844 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
2845 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2846 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
2847 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
2848 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2849 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2850 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2851 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2852 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2853 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2854 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2855 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2856 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2857 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
2858 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2859 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2860 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
2861 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2862 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2863 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2864 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2865 [GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
2866 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
2867 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
2868 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
2869 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
2870 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
2871 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2872 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2873 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2874 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2875 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2876 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2877 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2878 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2879 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2880 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2881 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2882 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2883 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2884 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2885 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2886 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2887 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2888 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2889 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2890 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2891 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2892 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2893 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2894 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2895 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2896 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
2897 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2898 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2899 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2900 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2901 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2902 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV] =
2903 &gcc_usb30_prim_mock_utmi_postdiv.clkr,
2904 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2905 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2906 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2907 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2908 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2909 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
2910 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
2911 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
2912 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
2913 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
2914 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
2915 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
2916 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
2917 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
2918 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
2919 [GPLL0] = &gpll0.clkr,
2920 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
2921 [GPLL1] = &gpll1.clkr,
2922 [GPLL10] = &gpll10.clkr,
2923 [GPLL11] = &gpll11.clkr,
2924 [GPLL3] = &gpll3.clkr,
2925 [GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
2926 [GPLL4] = &gpll4.clkr,
2927 [GPLL5] = &gpll5.clkr,
2928 [GPLL6] = &gpll6.clkr,
2929 [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
2930 [GPLL7] = &gpll7.clkr,
2931 [GPLL8] = &gpll8.clkr,
2932 [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
2933 [GPLL9] = &gpll9.clkr,
2934 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
2935 };
2936
2937 static const struct qcom_reset_map gcc_qcm2290_resets[] = {
2938 [GCC_CAMSS_OPE_BCR] = { 0x55000 },
2939 [GCC_CAMSS_TFE_BCR] = { 0x52000 },
2940 [GCC_CAMSS_TOP_BCR] = { 0x58000 },
2941 [GCC_GPU_BCR] = { 0x36000 },
2942 [GCC_MMSS_BCR] = { 0x17000 },
2943 [GCC_PDM_BCR] = { 0x20000 },
2944 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },
2945 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
2946 [GCC_SDCC1_BCR] = { 0x38000 },
2947 [GCC_SDCC2_BCR] = { 0x1e000 },
2948 [GCC_USB30_PRIM_BCR] = { 0x1a000 },
2949 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
2950 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
2951 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
2952 [GCC_VCODEC0_BCR] = { 0x58094 },
2953 [GCC_VENUS_BCR] = { 0x58078 },
2954 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
2955 };
2956
2957 static struct gdsc *gcc_qcm2290_gdscs[] = {
2958 [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
2959 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
2960 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
2961 [GCC_VENUS_GDSC] = &gcc_venus_gdsc,
2962 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
2963 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
2964 [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
2965 [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
2966 };
2967
2968 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2969 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2970 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2971 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2972 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2973 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2974 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2975 };
2976
2977 static const struct regmap_config gcc_qcm2290_regmap_config = {
2978 .reg_bits = 32,
2979 .reg_stride = 4,
2980 .val_bits = 32,
2981 .max_register = 0xc7000,
2982 .fast_io = true,
2983 };
2984
2985 static const struct qcom_cc_desc gcc_qcm2290_desc = {
2986 .config = &gcc_qcm2290_regmap_config,
2987 .clks = gcc_qcm2290_clocks,
2988 .num_clks = ARRAY_SIZE(gcc_qcm2290_clocks),
2989 .resets = gcc_qcm2290_resets,
2990 .num_resets = ARRAY_SIZE(gcc_qcm2290_resets),
2991 .gdscs = gcc_qcm2290_gdscs,
2992 .num_gdscs = ARRAY_SIZE(gcc_qcm2290_gdscs),
2993 };
2994
2995 static const struct of_device_id gcc_qcm2290_match_table[] = {
2996 { .compatible = "qcom,gcc-qcm2290" },
2997 { }
2998 };
2999 MODULE_DEVICE_TABLE(of, gcc_qcm2290_match_table);
3000
3001 static int gcc_qcm2290_probe(struct platform_device *pdev)
3002 {
3003 struct regmap *regmap;
3004 int ret;
3005
3006 regmap = qcom_cc_map(pdev, &gcc_qcm2290_desc);
3007 if (IS_ERR(regmap))
3008 return PTR_ERR(regmap);
3009
3010 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3011 ARRAY_SIZE(gcc_dfs_clocks));
3012 if (ret)
3013 return ret;
3014
3015 clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
3016 clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
3017 clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
3018 clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
3019
3020 return qcom_cc_really_probe(pdev, &gcc_qcm2290_desc, regmap);
3021 }
3022
3023 static struct platform_driver gcc_qcm2290_driver = {
3024 .probe = gcc_qcm2290_probe,
3025 .driver = {
3026 .name = "gcc-qcm2290",
3027 .of_match_table = gcc_qcm2290_match_table,
3028 },
3029 };
3030
3031 static int __init gcc_qcm2290_init(void)
3032 {
3033 return platform_driver_register(&gcc_qcm2290_driver);
3034 }
3035 subsys_initcall(gcc_qcm2290_init);
3036
3037 static void __exit gcc_qcm2290_exit(void)
3038 {
3039 platform_driver_unregister(&gcc_qcm2290_driver);
3040 }
3041 module_exit(gcc_qcm2290_exit);
3042
3043 MODULE_DESCRIPTION("QTI GCC QCM2290 Driver");
3044 MODULE_LICENSE("GPL v2");