1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/module.h> 8 #include <linux/platform_device.h> 9 #include <linux/regmap.h> 10 11 #include <dt-bindings/clock/qcom,shikra-gcc.h> 12 13 #include "clk-alpha-pll.h" 14 #include "clk-branch.h" 15 #include "clk-pll.h" 16 #include "clk-rcg.h" 17 #include "clk-regmap.h" 18 #include "clk-regmap-divider.h" 19 #include "clk-regmap-mux.h" 20 #include "clk-regmap-phy-mux.h" 21 #include "common.h" 22 #include "gdsc.h" 23 #include "reset.h" 24 25 enum { 26 DT_BI_TCXO, 27 DT_SLEEP_CLK, 28 DT_EMAC0_SGMIIPHY_RCLK, 29 DT_EMAC0_SGMIIPHY_TCLK, 30 DT_EMAC1_SGMIIPHY_RCLK, 31 DT_EMAC1_SGMIIPHY_TCLK, 32 DT_PCIE_PIPE_CLK, 33 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 34 }; 35 36 enum { 37 P_BI_TCXO, 38 P_EMAC0_SGMIIPHY_RCLK, 39 P_EMAC0_SGMIIPHY_TCLK, 40 P_EMAC1_SGMIIPHY_RCLK, 41 P_EMAC1_SGMIIPHY_TCLK, 42 P_GPLL0_OUT_AUX2, 43 P_GPLL0_OUT_EARLY, 44 P_GPLL10_OUT_MAIN, 45 P_GPLL11_OUT_AUX, 46 P_GPLL11_OUT_AUX2, 47 P_GPLL11_OUT_MAIN, 48 P_GPLL12_OUT_AUX2, 49 P_GPLL12_OUT_EARLY, 50 P_GPLL3_OUT_EARLY, 51 P_GPLL3_OUT_MAIN, 52 P_GPLL4_OUT_MAIN, 53 P_GPLL5_OUT_MAIN, 54 P_GPLL6_OUT_EARLY, 55 P_GPLL6_OUT_MAIN, 56 P_GPLL7_OUT_MAIN, 57 P_GPLL8_OUT_EARLY, 58 P_GPLL8_OUT_MAIN, 59 P_GPLL9_OUT_EARLY, 60 P_GPLL9_OUT_MAIN, 61 P_PCIE_PIPE_CLK, 62 P_SLEEP_CLK, 63 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 64 }; 65 66 static const struct pll_vco brammo_vco[] = { 67 { 500000000, 1250000000, 0 }, 68 }; 69 70 static const struct pll_vco default_vco[] = { 71 { 500000000, 1000000000, 2 }, 72 }; 73 74 static const struct pll_vco spark_vco[] = { 75 { 750000000, 1500000000, 1 }, 76 }; 77 78 static struct clk_alpha_pll gpll0 = { 79 .offset = 0x0, 80 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 81 .clkr = { 82 .enable_reg = 0x79000, 83 .enable_mask = BIT(0), 84 .hw.init = &(const struct clk_init_data) { 85 .name = "gpll0", 86 .parent_data = &(const struct clk_parent_data) { 87 .index = DT_BI_TCXO, 88 }, 89 .num_parents = 1, 90 .ops = &clk_alpha_pll_fixed_ops, 91 }, 92 }, 93 }; 94 95 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = { 96 { 0x1, 2 }, 97 { } 98 }; 99 100 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = { 101 .offset = 0x0, 102 .post_div_shift = 8, 103 .post_div_table = post_div_table_gpll0_out_aux2, 104 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2), 105 .width = 4, 106 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 107 .clkr.hw.init = &(const struct clk_init_data) { 108 .name = "gpll0_out_aux2", 109 .parent_hws = (const struct clk_hw*[]) { 110 &gpll0.clkr.hw, 111 }, 112 .num_parents = 1, 113 .ops = &clk_alpha_pll_postdiv_ro_ops, 114 }, 115 }; 116 117 /* 1152.0 MHz Configuration */ 118 static const struct alpha_pll_config gpll10_config = { 119 .l = 0x3c, 120 .alpha = 0x0, 121 .vco_val = BIT(20), 122 .vco_mask = GENMASK(21, 20), 123 .main_output_mask = BIT(0), 124 .config_ctl_val = 0x4001055b, 125 .test_ctl_hi_val = 0x1, 126 }; 127 128 static struct clk_alpha_pll gpll10 = { 129 .offset = 0xa000, 130 .config = &gpll10_config, 131 .vco_table = spark_vco, 132 .num_vco = ARRAY_SIZE(spark_vco), 133 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 134 .clkr = { 135 .enable_reg = 0x79000, 136 .enable_mask = BIT(10), 137 .hw.init = &(const struct clk_init_data) { 138 .name = "gpll10", 139 .parent_data = &(const struct clk_parent_data) { 140 .index = DT_BI_TCXO, 141 }, 142 .num_parents = 1, 143 .ops = &clk_alpha_pll_ops, 144 }, 145 }, 146 }; 147 148 /* 600.0 MHz Configuration */ 149 static const struct alpha_pll_config gpll11_config = { 150 .l = 0x1f, 151 .alpha = 0x0, 152 .alpha_hi = 0x40, 153 .alpha_en_mask = BIT(24), 154 .vco_val = BIT(21), 155 .vco_mask = GENMASK(21, 20), 156 .main_output_mask = BIT(0), 157 .config_ctl_val = 0x4001055b, 158 .test_ctl_hi_val = 0x1, 159 }; 160 161 static struct clk_alpha_pll gpll11 = { 162 .offset = 0xb000, 163 .config = &gpll11_config, 164 .vco_table = default_vco, 165 .num_vco = ARRAY_SIZE(default_vco), 166 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 167 .flags = SUPPORTS_DYNAMIC_UPDATE, 168 .clkr = { 169 .enable_reg = 0x79000, 170 .enable_mask = BIT(11), 171 .hw.init = &(const struct clk_init_data) { 172 .name = "gpll11", 173 .parent_data = &(const struct clk_parent_data) { 174 .index = DT_BI_TCXO, 175 }, 176 .num_parents = 1, 177 .ops = &clk_alpha_pll_ops, 178 }, 179 }, 180 }; 181 182 static struct clk_alpha_pll gpll12 = { 183 .offset = 0xc000, 184 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 185 .clkr = { 186 .enable_reg = 0x79000, 187 .enable_mask = BIT(12), 188 .hw.init = &(const struct clk_init_data) { 189 .name = "gpll12", 190 .parent_data = &(const struct clk_parent_data) { 191 .index = DT_BI_TCXO, 192 }, 193 .num_parents = 1, 194 .ops = &clk_alpha_pll_fixed_ops, 195 }, 196 }, 197 }; 198 199 static const struct clk_div_table post_div_table_gpll12_out_aux2[] = { 200 { 0x1, 2 }, 201 { } 202 }; 203 204 static struct clk_alpha_pll_postdiv gpll12_out_aux2 = { 205 .offset = 0xc000, 206 .post_div_shift = 8, 207 .post_div_table = post_div_table_gpll12_out_aux2, 208 .num_post_div = ARRAY_SIZE(post_div_table_gpll12_out_aux2), 209 .width = 4, 210 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 211 .clkr.hw.init = &(const struct clk_init_data) { 212 .name = "gpll12_out_aux2", 213 .parent_hws = (const struct clk_hw*[]) { 214 &gpll12.clkr.hw, 215 }, 216 .num_parents = 1, 217 .ops = &clk_alpha_pll_postdiv_ro_ops, 218 }, 219 }; 220 221 static struct clk_alpha_pll gpll3 = { 222 .offset = 0x3000, 223 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 224 .clkr = { 225 .enable_reg = 0x79000, 226 .enable_mask = BIT(3), 227 .hw.init = &(const struct clk_init_data) { 228 .name = "gpll3", 229 .parent_data = &(const struct clk_parent_data) { 230 .index = DT_BI_TCXO, 231 }, 232 .num_parents = 1, 233 .ops = &clk_alpha_pll_fixed_ops, 234 }, 235 }, 236 }; 237 238 static const struct clk_div_table post_div_table_gpll3_out_main[] = { 239 { 0x1, 2 }, 240 { } 241 }; 242 243 static struct clk_alpha_pll_postdiv gpll3_out_main = { 244 .offset = 0x3000, 245 .post_div_shift = 8, 246 .post_div_table = post_div_table_gpll3_out_main, 247 .num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_main), 248 .width = 4, 249 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 250 .clkr.hw.init = &(const struct clk_init_data) { 251 .name = "gpll3_out_main", 252 .parent_hws = (const struct clk_hw*[]) { 253 &gpll3.clkr.hw, 254 }, 255 .num_parents = 1, 256 .ops = &clk_alpha_pll_postdiv_ro_ops, 257 }, 258 }; 259 260 static struct clk_alpha_pll gpll4 = { 261 .offset = 0x4000, 262 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 263 .clkr = { 264 .enable_reg = 0x79000, 265 .enable_mask = BIT(4), 266 .hw.init = &(const struct clk_init_data) { 267 .name = "gpll4", 268 .parent_data = &(const struct clk_parent_data) { 269 .index = DT_BI_TCXO, 270 }, 271 .num_parents = 1, 272 .ops = &clk_alpha_pll_fixed_ops, 273 }, 274 }, 275 }; 276 277 static struct clk_alpha_pll gpll5 = { 278 .offset = 0x5000, 279 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 280 .clkr = { 281 .enable_reg = 0x79000, 282 .enable_mask = BIT(5), 283 .hw.init = &(const struct clk_init_data) { 284 .name = "gpll5", 285 .parent_data = &(const struct clk_parent_data) { 286 .index = DT_BI_TCXO, 287 }, 288 .num_parents = 1, 289 .ops = &clk_alpha_pll_fixed_ops, 290 }, 291 }, 292 }; 293 294 static struct clk_alpha_pll gpll6 = { 295 .offset = 0x6000, 296 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 297 .clkr = { 298 .enable_reg = 0x79000, 299 .enable_mask = BIT(6), 300 .hw.init = &(const struct clk_init_data) { 301 .name = "gpll6", 302 .parent_data = &(const struct clk_parent_data) { 303 .index = DT_BI_TCXO, 304 }, 305 .num_parents = 1, 306 .ops = &clk_alpha_pll_fixed_ops, 307 }, 308 }, 309 }; 310 311 static const struct clk_div_table post_div_table_gpll6_out_main[] = { 312 { 0x1, 2 }, 313 { } 314 }; 315 316 static struct clk_alpha_pll_postdiv gpll6_out_main = { 317 .offset = 0x6000, 318 .post_div_shift = 8, 319 .post_div_table = post_div_table_gpll6_out_main, 320 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main), 321 .width = 4, 322 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 323 .clkr.hw.init = &(const struct clk_init_data) { 324 .name = "gpll6_out_main", 325 .parent_hws = (const struct clk_hw*[]) { 326 &gpll6.clkr.hw, 327 }, 328 .num_parents = 1, 329 .ops = &clk_alpha_pll_postdiv_ro_ops, 330 }, 331 }; 332 333 static struct clk_alpha_pll gpll7 = { 334 .offset = 0x7000, 335 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 336 .clkr = { 337 .enable_reg = 0x79000, 338 .enable_mask = BIT(7), 339 .hw.init = &(const struct clk_init_data) { 340 .name = "gpll7", 341 .parent_data = &(const struct clk_parent_data) { 342 .index = DT_BI_TCXO, 343 }, 344 .num_parents = 1, 345 .ops = &clk_alpha_pll_fixed_ops, 346 }, 347 }, 348 }; 349 350 /* 533.2 MHz Configuration */ 351 static const struct alpha_pll_config gpll8_config = { 352 .l = 0x1b, 353 .alpha = 0x55555555, 354 .alpha_hi = 0xc5, 355 .alpha_en_mask = BIT(24), 356 .vco_val = BIT(21), 357 .vco_mask = GENMASK(21, 20), 358 .main_output_mask = BIT(0), 359 .early_output_mask = BIT(3), 360 .post_div_val = BIT(8), 361 .post_div_mask = GENMASK(11, 8), 362 .config_ctl_val = 0x4001055b, 363 .test_ctl_hi_val = 0x1, 364 }; 365 366 static struct clk_alpha_pll gpll8 = { 367 .offset = 0x8000, 368 .config = &gpll8_config, 369 .vco_table = default_vco, 370 .num_vco = ARRAY_SIZE(default_vco), 371 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 372 .flags = SUPPORTS_DYNAMIC_UPDATE, 373 .clkr = { 374 .enable_reg = 0x79000, 375 .enable_mask = BIT(8), 376 .hw.init = &(const struct clk_init_data) { 377 .name = "gpll8", 378 .parent_data = &(const struct clk_parent_data) { 379 .index = DT_BI_TCXO, 380 }, 381 .num_parents = 1, 382 .ops = &clk_alpha_pll_ops, 383 }, 384 }, 385 }; 386 387 static const struct clk_div_table post_div_table_gpll8_out_main[] = { 388 { 0x1, 2 }, 389 { } 390 }; 391 392 static struct clk_alpha_pll_postdiv gpll8_out_main = { 393 .offset = 0x8000, 394 .post_div_shift = 8, 395 .post_div_table = post_div_table_gpll8_out_main, 396 .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main), 397 .width = 4, 398 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], 399 .clkr.hw.init = &(const struct clk_init_data) { 400 .name = "gpll8_out_main", 401 .parent_hws = (const struct clk_hw*[]) { 402 &gpll8.clkr.hw, 403 }, 404 .num_parents = 1, 405 .flags = CLK_SET_RATE_PARENT, 406 .ops = &clk_alpha_pll_postdiv_ro_ops, 407 }, 408 }; 409 410 /* 1152.0 MHz Configuration */ 411 static const struct alpha_pll_config gpll9_config = { 412 .l = 0x3c, 413 .alpha = 0x0, 414 .post_div_val = BIT(8), 415 .post_div_mask = GENMASK(9, 8), 416 .main_output_mask = BIT(0), 417 .early_output_mask = BIT(3), 418 .config_ctl_val = 0x00004289, 419 .test_ctl_val = 0x08000000, 420 }; 421 422 static struct clk_alpha_pll gpll9 = { 423 .offset = 0x9000, 424 .config = &gpll9_config, 425 .vco_table = brammo_vco, 426 .num_vco = ARRAY_SIZE(brammo_vco), 427 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO], 428 .clkr = { 429 .enable_reg = 0x79000, 430 .enable_mask = BIT(9), 431 .hw.init = &(const struct clk_init_data) { 432 .name = "gpll9", 433 .parent_data = &(const struct clk_parent_data) { 434 .index = DT_BI_TCXO, 435 }, 436 .num_parents = 1, 437 .ops = &clk_alpha_pll_ops, 438 }, 439 }, 440 }; 441 442 static const struct clk_div_table post_div_table_gpll9_out_main[] = { 443 { 0x1, 2 }, 444 { } 445 }; 446 447 static struct clk_alpha_pll_postdiv gpll9_out_main = { 448 .offset = 0x9000, 449 .post_div_shift = 8, 450 .post_div_table = post_div_table_gpll9_out_main, 451 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main), 452 .width = 2, 453 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO], 454 .clkr.hw.init = &(const struct clk_init_data) { 455 .name = "gpll9_out_main", 456 .parent_hws = (const struct clk_hw*[]) { 457 &gpll9.clkr.hw, 458 }, 459 .num_parents = 1, 460 .flags = CLK_SET_RATE_PARENT, 461 .ops = &clk_alpha_pll_postdiv_ro_ops, 462 }, 463 }; 464 465 static const struct parent_map gcc_parent_map_0[] = { 466 { P_BI_TCXO, 0 }, 467 { P_GPLL0_OUT_EARLY, 1 }, 468 { P_GPLL0_OUT_AUX2, 2 }, 469 }; 470 471 static const struct clk_parent_data gcc_parent_data_0[] = { 472 { .index = DT_BI_TCXO }, 473 { .hw = &gpll0.clkr.hw }, 474 { .hw = &gpll0_out_aux2.clkr.hw }, 475 }; 476 477 static const struct parent_map gcc_parent_map_1[] = { 478 { P_BI_TCXO, 0 }, 479 { P_GPLL0_OUT_EARLY, 1 }, 480 { P_GPLL0_OUT_AUX2, 2 }, 481 { P_GPLL6_OUT_MAIN, 4 }, 482 }; 483 484 static const struct clk_parent_data gcc_parent_data_1[] = { 485 { .index = DT_BI_TCXO }, 486 { .hw = &gpll0.clkr.hw }, 487 { .hw = &gpll0_out_aux2.clkr.hw }, 488 { .hw = &gpll6_out_main.clkr.hw }, 489 }; 490 491 static const struct parent_map gcc_parent_map_2[] = { 492 { P_BI_TCXO, 0 }, 493 { P_GPLL0_OUT_EARLY, 1 }, 494 { P_GPLL0_OUT_AUX2, 2 }, 495 { P_SLEEP_CLK, 5 }, 496 }; 497 498 static const struct clk_parent_data gcc_parent_data_2[] = { 499 { .index = DT_BI_TCXO }, 500 { .hw = &gpll0.clkr.hw }, 501 { .hw = &gpll0_out_aux2.clkr.hw }, 502 { .index = DT_SLEEP_CLK }, 503 }; 504 505 static const struct parent_map gcc_parent_map_3[] = { 506 { P_BI_TCXO, 0 }, 507 { P_GPLL0_OUT_EARLY, 1 }, 508 { P_GPLL9_OUT_EARLY, 2 }, 509 { P_GPLL10_OUT_MAIN, 3 }, 510 { P_GPLL9_OUT_MAIN, 5 }, 511 { P_GPLL3_OUT_MAIN, 6 }, 512 }; 513 514 static const struct clk_parent_data gcc_parent_data_3[] = { 515 { .index = DT_BI_TCXO }, 516 { .hw = &gpll0.clkr.hw }, 517 { .hw = &gpll9.clkr.hw }, 518 { .hw = &gpll10.clkr.hw }, 519 { .hw = &gpll9_out_main.clkr.hw }, 520 { .hw = &gpll3_out_main.clkr.hw }, 521 }; 522 523 static const struct parent_map gcc_parent_map_4[] = { 524 { P_BI_TCXO, 0 }, 525 { P_SLEEP_CLK, 5 }, 526 }; 527 528 static const struct clk_parent_data gcc_parent_data_4[] = { 529 { .index = DT_BI_TCXO }, 530 { .index = DT_SLEEP_CLK }, 531 }; 532 533 static const struct parent_map gcc_parent_map_5[] = { 534 { P_BI_TCXO, 0 }, 535 { P_GPLL0_OUT_EARLY, 1 }, 536 { P_GPLL0_OUT_AUX2, 2 }, 537 { P_GPLL10_OUT_MAIN, 3 }, 538 { P_GPLL4_OUT_MAIN, 5 }, 539 { P_GPLL3_OUT_EARLY, 6 }, 540 }; 541 542 static const struct clk_parent_data gcc_parent_data_5[] = { 543 { .index = DT_BI_TCXO }, 544 { .hw = &gpll0.clkr.hw }, 545 { .hw = &gpll0_out_aux2.clkr.hw }, 546 { .hw = &gpll10.clkr.hw }, 547 { .hw = &gpll4.clkr.hw }, 548 { .hw = &gpll3.clkr.hw }, 549 }; 550 551 static const struct parent_map gcc_parent_map_6[] = { 552 { P_BI_TCXO, 0 }, 553 { P_GPLL0_OUT_EARLY, 1 }, 554 { P_GPLL0_OUT_AUX2, 2 }, 555 { P_GPLL4_OUT_MAIN, 5 }, 556 { P_GPLL3_OUT_MAIN, 6 }, 557 }; 558 559 static const struct clk_parent_data gcc_parent_data_6[] = { 560 { .index = DT_BI_TCXO }, 561 { .hw = &gpll0.clkr.hw }, 562 { .hw = &gpll0_out_aux2.clkr.hw }, 563 { .hw = &gpll4.clkr.hw }, 564 { .hw = &gpll3_out_main.clkr.hw }, 565 }; 566 567 static const struct parent_map gcc_parent_map_7[] = { 568 { P_BI_TCXO, 0 }, 569 { P_GPLL0_OUT_EARLY, 1 }, 570 { P_GPLL8_OUT_EARLY, 2 }, 571 { P_GPLL10_OUT_MAIN, 3 }, 572 { P_GPLL8_OUT_MAIN, 4 }, 573 { P_GPLL9_OUT_MAIN, 5 }, 574 { P_GPLL3_OUT_EARLY, 6 }, 575 }; 576 577 static const struct clk_parent_data gcc_parent_data_7[] = { 578 { .index = DT_BI_TCXO }, 579 { .hw = &gpll0.clkr.hw }, 580 { .hw = &gpll8.clkr.hw }, 581 { .hw = &gpll10.clkr.hw }, 582 { .hw = &gpll8_out_main.clkr.hw }, 583 { .hw = &gpll9.clkr.hw }, 584 { .hw = &gpll3.clkr.hw }, 585 }; 586 587 static const struct parent_map gcc_parent_map_8[] = { 588 { P_BI_TCXO, 0 }, 589 { P_GPLL0_OUT_EARLY, 1 }, 590 { P_GPLL8_OUT_EARLY, 2 }, 591 { P_GPLL10_OUT_MAIN, 3 }, 592 { P_GPLL8_OUT_MAIN, 4 }, 593 { P_GPLL9_OUT_MAIN, 5 }, 594 { P_GPLL3_OUT_MAIN, 6 }, 595 }; 596 597 static const struct clk_parent_data gcc_parent_data_8[] = { 598 { .index = DT_BI_TCXO }, 599 { .hw = &gpll0.clkr.hw }, 600 { .hw = &gpll8.clkr.hw }, 601 { .hw = &gpll10.clkr.hw }, 602 { .hw = &gpll8_out_main.clkr.hw }, 603 { .hw = &gpll9.clkr.hw }, 604 { .hw = &gpll3_out_main.clkr.hw }, 605 }; 606 607 static const struct parent_map gcc_parent_map_9[] = { 608 { P_BI_TCXO, 0 }, 609 { P_GPLL0_OUT_EARLY, 1 }, 610 { P_GPLL8_OUT_EARLY, 2 }, 611 { P_GPLL10_OUT_MAIN, 3 }, 612 { P_GPLL6_OUT_MAIN, 4 }, 613 { P_GPLL9_OUT_MAIN, 5 }, 614 { P_GPLL3_OUT_EARLY, 6 }, 615 }; 616 617 static const struct clk_parent_data gcc_parent_data_9[] = { 618 { .index = DT_BI_TCXO }, 619 { .hw = &gpll0.clkr.hw }, 620 { .hw = &gpll8.clkr.hw }, 621 { .hw = &gpll10.clkr.hw }, 622 { .hw = &gpll6_out_main.clkr.hw }, 623 { .hw = &gpll9.clkr.hw }, 624 { .hw = &gpll3.clkr.hw }, 625 }; 626 627 static const struct parent_map gcc_parent_map_10[] = { 628 { P_BI_TCXO, 0 }, 629 { P_GPLL0_OUT_EARLY, 1 }, 630 { P_SLEEP_CLK, 5 }, 631 }; 632 633 static const struct clk_parent_data gcc_parent_data_10[] = { 634 { .index = DT_BI_TCXO }, 635 { .hw = &gpll0.clkr.hw }, 636 { .index = DT_SLEEP_CLK }, 637 }; 638 639 static const struct parent_map gcc_parent_map_11[] = { 640 { P_BI_TCXO, 0 }, 641 { P_GPLL12_OUT_EARLY, 1 }, 642 { P_GPLL12_OUT_AUX2, 4 }, 643 { P_GPLL3_OUT_EARLY, 6 }, 644 }; 645 646 static const struct clk_parent_data gcc_parent_data_11[] = { 647 { .index = DT_BI_TCXO }, 648 { .hw = &gpll12.clkr.hw }, 649 { .hw = &gpll12_out_aux2.clkr.hw }, 650 { .hw = &gpll3.clkr.hw }, 651 }; 652 653 static const struct parent_map gcc_parent_map_12[] = { 654 { P_BI_TCXO, 0 }, 655 { P_GPLL12_OUT_EARLY, 1 }, 656 { P_GPLL0_OUT_AUX2, 2 }, 657 { P_GPLL12_OUT_AUX2, 4 }, 658 }; 659 660 static const struct clk_parent_data gcc_parent_data_12[] = { 661 { .index = DT_BI_TCXO }, 662 { .hw = &gpll12.clkr.hw }, 663 { .hw = &gpll0_out_aux2.clkr.hw }, 664 { .hw = &gpll12_out_aux2.clkr.hw }, 665 }; 666 667 static const struct parent_map gcc_parent_map_13[] = { 668 { P_BI_TCXO, 0 }, 669 { P_GPLL0_OUT_EARLY, 1 }, 670 }; 671 672 static const struct clk_parent_data gcc_parent_data_13[] = { 673 { .index = DT_BI_TCXO }, 674 { .hw = &gpll0.clkr.hw }, 675 }; 676 677 static const struct parent_map gcc_parent_map_14[] = { 678 { P_BI_TCXO, 0 }, 679 { P_GPLL0_OUT_EARLY, 1 }, 680 { P_GPLL0_OUT_AUX2, 2 }, 681 { P_GPLL10_OUT_MAIN, 3 }, 682 { P_GPLL8_OUT_MAIN, 4 }, 683 { P_GPLL9_OUT_MAIN, 5 }, 684 { P_GPLL3_OUT_EARLY, 6 }, 685 }; 686 687 static const struct clk_parent_data gcc_parent_data_14[] = { 688 { .index = DT_BI_TCXO }, 689 { .hw = &gpll0.clkr.hw }, 690 { .hw = &gpll0_out_aux2.clkr.hw }, 691 { .hw = &gpll10.clkr.hw }, 692 { .hw = &gpll8_out_main.clkr.hw }, 693 { .hw = &gpll9.clkr.hw }, 694 { .hw = &gpll3.clkr.hw }, 695 }; 696 697 static const struct parent_map gcc_parent_map_15[] = { 698 { P_BI_TCXO, 0 }, 699 { P_GPLL0_OUT_EARLY, 1 }, 700 { P_GPLL8_OUT_EARLY, 2 }, 701 { P_GPLL10_OUT_MAIN, 3 }, 702 { P_GPLL6_OUT_EARLY, 5 }, 703 { P_GPLL3_OUT_MAIN, 6 }, 704 }; 705 706 static const struct clk_parent_data gcc_parent_data_15[] = { 707 { .index = DT_BI_TCXO }, 708 { .hw = &gpll0.clkr.hw }, 709 { .hw = &gpll8.clkr.hw }, 710 { .hw = &gpll10.clkr.hw }, 711 { .hw = &gpll6.clkr.hw }, 712 { .hw = &gpll3_out_main.clkr.hw }, 713 }; 714 715 static const struct parent_map gcc_parent_map_21[] = { 716 { P_BI_TCXO, 0 }, 717 { P_GPLL0_OUT_EARLY, 1 }, 718 { P_GPLL0_OUT_AUX2, 2 }, 719 { P_GPLL7_OUT_MAIN, 3 }, 720 { P_GPLL4_OUT_MAIN, 5 }, 721 }; 722 723 static const struct clk_parent_data gcc_parent_data_21[] = { 724 { .index = DT_BI_TCXO }, 725 { .hw = &gpll0.clkr.hw }, 726 { .hw = &gpll0_out_aux2.clkr.hw }, 727 { .hw = &gpll7.clkr.hw }, 728 { .hw = &gpll4.clkr.hw }, 729 }; 730 731 static const struct parent_map gcc_parent_map_22[] = { 732 { P_BI_TCXO, 0 }, 733 { P_GPLL12_OUT_EARLY, 1 }, 734 { P_GPLL5_OUT_MAIN, 3 }, 735 { P_GPLL12_OUT_AUX2, 4 }, 736 { P_GPLL3_OUT_EARLY, 6 }, 737 }; 738 739 static const struct clk_parent_data gcc_parent_data_22[] = { 740 { .index = DT_BI_TCXO }, 741 { .hw = &gpll12.clkr.hw }, 742 { .hw = &gpll5.clkr.hw }, 743 { .hw = &gpll12_out_aux2.clkr.hw }, 744 { .hw = &gpll3.clkr.hw }, 745 }; 746 747 static const struct parent_map gcc_parent_map_24[] = { 748 { P_BI_TCXO, 0 }, 749 { P_GPLL11_OUT_MAIN, 1 }, 750 { P_GPLL11_OUT_AUX, 2 }, 751 { P_GPLL11_OUT_AUX2, 3 }, 752 }; 753 754 static const struct clk_parent_data gcc_parent_data_24[] = { 755 { .index = DT_BI_TCXO }, 756 { .hw = &gpll11.clkr.hw }, 757 { .hw = &gpll11.clkr.hw }, 758 { .hw = &gpll11.clkr.hw }, 759 }; 760 761 static struct clk_regmap_phy_mux gcc_emac0_cc_sgmiiphy_rx_clk_src = { 762 .reg = 0xad048, 763 .clkr = { 764 .hw.init = &(const struct clk_init_data) { 765 .name = "gcc_emac0_cc_sgmiiphy_rx_clk_src", 766 .parent_data = &(const struct clk_parent_data) { 767 .index = DT_EMAC0_SGMIIPHY_RCLK, 768 }, 769 .num_parents = 1, 770 .ops = &clk_regmap_phy_mux_ops, 771 }, 772 }, 773 }; 774 775 static struct clk_regmap_phy_mux gcc_emac0_cc_sgmiiphy_tx_clk_src = { 776 .reg = 0xad040, 777 .clkr = { 778 .hw.init = &(const struct clk_init_data) { 779 .name = "gcc_emac0_cc_sgmiiphy_tx_clk_src", 780 .parent_data = &(const struct clk_parent_data) { 781 .index = DT_EMAC0_SGMIIPHY_TCLK, 782 }, 783 .num_parents = 1, 784 .ops = &clk_regmap_phy_mux_ops, 785 }, 786 }, 787 }; 788 789 static struct clk_regmap_phy_mux gcc_emac1_cc_sgmiiphy_rx_clk_src = { 790 .reg = 0xae048, 791 .clkr = { 792 .hw.init = &(const struct clk_init_data) { 793 .name = "gcc_emac1_cc_sgmiiphy_rx_clk_src", 794 .parent_data = &(const struct clk_parent_data) { 795 .index = DT_EMAC1_SGMIIPHY_RCLK, 796 }, 797 .num_parents = 1, 798 .ops = &clk_regmap_phy_mux_ops, 799 }, 800 }, 801 }; 802 803 static struct clk_regmap_phy_mux gcc_emac1_cc_sgmiiphy_tx_clk_src = { 804 .reg = 0xae040, 805 .clkr = { 806 .hw.init = &(const struct clk_init_data) { 807 .name = "gcc_emac1_cc_sgmiiphy_tx_clk_src", 808 .parent_data = &(const struct clk_parent_data) { 809 .index = DT_EMAC1_SGMIIPHY_TCLK, 810 }, 811 .num_parents = 1, 812 .ops = &clk_regmap_phy_mux_ops, 813 }, 814 }, 815 }; 816 817 static struct clk_regmap_phy_mux gcc_pcie_pipe_clk_src = { 818 .reg = 0xaf058, 819 .clkr = { 820 .hw.init = &(const struct clk_init_data) { 821 .name = "gcc_pcie_pipe_clk_src", 822 .parent_data = &(const struct clk_parent_data) { 823 .index = DT_PCIE_PIPE_CLK, 824 }, 825 .num_parents = 1, 826 .ops = &clk_regmap_phy_mux_ops, 827 }, 828 }, 829 }; 830 831 static struct clk_regmap_phy_mux gcc_usb3_prim_phy_pipe_clk_src = { 832 .reg = 0x1a05c, 833 .clkr = { 834 .hw.init = &(const struct clk_init_data) { 835 .name = "gcc_usb3_prim_phy_pipe_clk_src", 836 .parent_data = &(const struct clk_parent_data) { 837 .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 838 }, 839 .num_parents = 1, 840 .ops = &clk_regmap_phy_mux_ops, 841 }, 842 }, 843 }; 844 845 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = { 846 F(19200000, P_BI_TCXO, 1, 0, 0), 847 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 848 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 849 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 850 { } 851 }; 852 853 static struct clk_rcg2 gcc_camss_axi_clk_src = { 854 .cmd_rcgr = 0x5802c, 855 .mnd_width = 0, 856 .hid_width = 5, 857 .parent_map = gcc_parent_map_5, 858 .freq_tbl = ftbl_gcc_camss_axi_clk_src, 859 .hw_clk_ctrl = true, 860 .clkr.hw.init = &(const struct clk_init_data) { 861 .name = "gcc_camss_axi_clk_src", 862 .parent_data = gcc_parent_data_5, 863 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 864 .ops = &clk_rcg2_shared_ops, 865 }, 866 }; 867 868 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = { 869 F(19200000, P_BI_TCXO, 1, 0, 0), 870 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0), 871 { } 872 }; 873 874 static struct clk_rcg2 gcc_camss_cci_clk_src = { 875 .cmd_rcgr = 0x56000, 876 .mnd_width = 0, 877 .hid_width = 5, 878 .parent_map = gcc_parent_map_14, 879 .freq_tbl = ftbl_gcc_camss_cci_clk_src, 880 .hw_clk_ctrl = true, 881 .clkr.hw.init = &(const struct clk_init_data) { 882 .name = "gcc_camss_cci_clk_src", 883 .parent_data = gcc_parent_data_14, 884 .num_parents = ARRAY_SIZE(gcc_parent_data_14), 885 .ops = &clk_rcg2_shared_ops, 886 }, 887 }; 888 889 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = { 890 F(19200000, P_BI_TCXO, 1, 0, 0), 891 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 892 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 893 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0), 894 { } 895 }; 896 897 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = { 898 .cmd_rcgr = 0x45000, 899 .mnd_width = 0, 900 .hid_width = 5, 901 .parent_map = gcc_parent_map_6, 902 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 903 .hw_clk_ctrl = true, 904 .clkr.hw.init = &(const struct clk_init_data) { 905 .name = "gcc_camss_csi0phytimer_clk_src", 906 .parent_data = gcc_parent_data_6, 907 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 908 .ops = &clk_rcg2_shared_ops, 909 }, 910 }; 911 912 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = { 913 .cmd_rcgr = 0x4501c, 914 .mnd_width = 0, 915 .hid_width = 5, 916 .parent_map = gcc_parent_map_6, 917 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src, 918 .hw_clk_ctrl = true, 919 .clkr.hw.init = &(const struct clk_init_data) { 920 .name = "gcc_camss_csi1phytimer_clk_src", 921 .parent_data = gcc_parent_data_6, 922 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 923 .ops = &clk_rcg2_shared_ops, 924 }, 925 }; 926 927 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = { 928 F(19200000, P_GPLL9_OUT_EARLY, 1, 1, 60), 929 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24), 930 F(64000000, P_GPLL9_OUT_EARLY, 9, 1, 2), 931 { } 932 }; 933 934 static struct clk_rcg2 gcc_camss_mclk0_clk_src = { 935 .cmd_rcgr = 0x51000, 936 .mnd_width = 8, 937 .hid_width = 5, 938 .parent_map = gcc_parent_map_3, 939 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 940 .hw_clk_ctrl = true, 941 .clkr.hw.init = &(const struct clk_init_data) { 942 .name = "gcc_camss_mclk0_clk_src", 943 .parent_data = gcc_parent_data_3, 944 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 945 .flags = CLK_SET_RATE_PARENT, 946 .ops = &clk_rcg2_shared_ops, 947 }, 948 }; 949 950 static struct clk_rcg2 gcc_camss_mclk1_clk_src = { 951 .cmd_rcgr = 0x5101c, 952 .mnd_width = 8, 953 .hid_width = 5, 954 .parent_map = gcc_parent_map_3, 955 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 956 .hw_clk_ctrl = true, 957 .clkr.hw.init = &(const struct clk_init_data) { 958 .name = "gcc_camss_mclk1_clk_src", 959 .parent_data = gcc_parent_data_3, 960 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 961 .flags = CLK_SET_RATE_PARENT, 962 .ops = &clk_rcg2_shared_ops, 963 }, 964 }; 965 966 static struct clk_rcg2 gcc_camss_mclk2_clk_src = { 967 .cmd_rcgr = 0x51038, 968 .mnd_width = 8, 969 .hid_width = 5, 970 .parent_map = gcc_parent_map_3, 971 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 972 .hw_clk_ctrl = true, 973 .clkr.hw.init = &(const struct clk_init_data) { 974 .name = "gcc_camss_mclk2_clk_src", 975 .parent_data = gcc_parent_data_3, 976 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 977 .flags = CLK_SET_RATE_PARENT, 978 .ops = &clk_rcg2_shared_ops, 979 }, 980 }; 981 982 static struct clk_rcg2 gcc_camss_mclk3_clk_src = { 983 .cmd_rcgr = 0x51054, 984 .mnd_width = 8, 985 .hid_width = 5, 986 .parent_map = gcc_parent_map_3, 987 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src, 988 .hw_clk_ctrl = true, 989 .clkr.hw.init = &(const struct clk_init_data) { 990 .name = "gcc_camss_mclk3_clk_src", 991 .parent_data = gcc_parent_data_3, 992 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 993 .flags = CLK_SET_RATE_PARENT, 994 .ops = &clk_rcg2_shared_ops, 995 }, 996 }; 997 998 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = { 999 F(19200000, P_BI_TCXO, 1, 0, 0), 1000 F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0), 1001 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1002 { } 1003 }; 1004 1005 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = { 1006 .cmd_rcgr = 0x55024, 1007 .mnd_width = 0, 1008 .hid_width = 5, 1009 .parent_map = gcc_parent_map_7, 1010 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src, 1011 .hw_clk_ctrl = true, 1012 .clkr.hw.init = &(const struct clk_init_data) { 1013 .name = "gcc_camss_ope_ahb_clk_src", 1014 .parent_data = gcc_parent_data_7, 1015 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 1016 .ops = &clk_rcg2_shared_ops, 1017 }, 1018 }; 1019 1020 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = { 1021 F(19200000, P_BI_TCXO, 1, 0, 0), 1022 F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0), 1023 F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0), 1024 F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0), 1025 F(580000000, P_GPLL8_OUT_EARLY, 1, 0, 0), 1026 { } 1027 }; 1028 1029 static struct clk_rcg2 gcc_camss_ope_clk_src = { 1030 .cmd_rcgr = 0x55004, 1031 .mnd_width = 0, 1032 .hid_width = 5, 1033 .parent_map = gcc_parent_map_7, 1034 .freq_tbl = ftbl_gcc_camss_ope_clk_src, 1035 .hw_clk_ctrl = true, 1036 .clkr.hw.init = &(const struct clk_init_data) { 1037 .name = "gcc_camss_ope_clk_src", 1038 .parent_data = gcc_parent_data_7, 1039 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 1040 .flags = CLK_SET_RATE_PARENT, 1041 .ops = &clk_rcg2_shared_ops, 1042 }, 1043 }; 1044 1045 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = { 1046 F(19200000, P_BI_TCXO, 1, 0, 0), 1047 F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0), 1048 F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0), 1049 F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0), 1050 F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0), 1051 F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0), 1052 F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0), 1053 F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0), 1054 F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0), 1055 F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0), 1056 F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0), 1057 F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0), 1058 F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0), 1059 F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0), 1060 F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0), 1061 F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0), 1062 { } 1063 }; 1064 1065 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = { 1066 .cmd_rcgr = 0x52004, 1067 .mnd_width = 8, 1068 .hid_width = 5, 1069 .parent_map = gcc_parent_map_8, 1070 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 1071 .hw_clk_ctrl = true, 1072 .clkr.hw.init = &(const struct clk_init_data) { 1073 .name = "gcc_camss_tfe_0_clk_src", 1074 .parent_data = gcc_parent_data_8, 1075 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 1076 .flags = CLK_SET_RATE_PARENT, 1077 .ops = &clk_rcg2_shared_ops, 1078 }, 1079 }; 1080 1081 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = { 1082 F(19200000, P_BI_TCXO, 1, 0, 0), 1083 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0), 1084 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 1085 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1086 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 1087 F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0), 1088 { } 1089 }; 1090 1091 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = { 1092 .cmd_rcgr = 0x52094, 1093 .mnd_width = 0, 1094 .hid_width = 5, 1095 .parent_map = gcc_parent_map_9, 1096 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 1097 .hw_clk_ctrl = true, 1098 .clkr.hw.init = &(const struct clk_init_data) { 1099 .name = "gcc_camss_tfe_0_csid_clk_src", 1100 .parent_data = gcc_parent_data_9, 1101 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 1102 .ops = &clk_rcg2_shared_ops, 1103 }, 1104 }; 1105 1106 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = { 1107 .cmd_rcgr = 0x52024, 1108 .mnd_width = 8, 1109 .hid_width = 5, 1110 .parent_map = gcc_parent_map_8, 1111 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src, 1112 .hw_clk_ctrl = true, 1113 .clkr.hw.init = &(const struct clk_init_data) { 1114 .name = "gcc_camss_tfe_1_clk_src", 1115 .parent_data = gcc_parent_data_8, 1116 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 1117 .ops = &clk_rcg2_shared_ops, 1118 }, 1119 }; 1120 1121 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = { 1122 .cmd_rcgr = 0x520b4, 1123 .mnd_width = 0, 1124 .hid_width = 5, 1125 .parent_map = gcc_parent_map_9, 1126 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src, 1127 .hw_clk_ctrl = true, 1128 .clkr.hw.init = &(const struct clk_init_data) { 1129 .name = "gcc_camss_tfe_1_csid_clk_src", 1130 .parent_data = gcc_parent_data_9, 1131 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 1132 .ops = &clk_rcg2_shared_ops, 1133 }, 1134 }; 1135 1136 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = { 1137 F(19200000, P_BI_TCXO, 1, 0, 0), 1138 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1139 F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9), 1140 F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0), 1141 { } 1142 }; 1143 1144 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = { 1145 .cmd_rcgr = 0x52064, 1146 .mnd_width = 16, 1147 .hid_width = 5, 1148 .parent_map = gcc_parent_map_15, 1149 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src, 1150 .hw_clk_ctrl = true, 1151 .clkr.hw.init = &(const struct clk_init_data) { 1152 .name = "gcc_camss_tfe_cphy_rx_clk_src", 1153 .parent_data = gcc_parent_data_15, 1154 .num_parents = ARRAY_SIZE(gcc_parent_data_15), 1155 .ops = &clk_rcg2_shared_ops, 1156 }, 1157 }; 1158 1159 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = { 1160 F(19200000, P_BI_TCXO, 1, 0, 0), 1161 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0), 1162 F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0), 1163 { } 1164 }; 1165 1166 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = { 1167 .cmd_rcgr = 0x58010, 1168 .mnd_width = 0, 1169 .hid_width = 5, 1170 .parent_map = gcc_parent_map_5, 1171 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src, 1172 .hw_clk_ctrl = true, 1173 .clkr.hw.init = &(const struct clk_init_data) { 1174 .name = "gcc_camss_top_ahb_clk_src", 1175 .parent_data = gcc_parent_data_5, 1176 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 1177 .ops = &clk_rcg2_shared_ops, 1178 }, 1179 }; 1180 1181 static const struct freq_tbl ftbl_gcc_emac0_axi_clk_src[] = { 1182 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1183 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0), 1184 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1185 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 1186 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1187 { } 1188 }; 1189 1190 static struct clk_rcg2 gcc_emac0_axi_clk_src = { 1191 .cmd_rcgr = 0x109dc, 1192 .mnd_width = 0, 1193 .hid_width = 5, 1194 .parent_map = gcc_parent_map_0, 1195 .freq_tbl = ftbl_gcc_emac0_axi_clk_src, 1196 .hw_clk_ctrl = true, 1197 .clkr.hw.init = &(const struct clk_init_data) { 1198 .name = "gcc_emac0_axi_clk_src", 1199 .parent_data = gcc_parent_data_0, 1200 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1201 .ops = &clk_rcg2_shared_ops, 1202 }, 1203 }; 1204 1205 static const struct freq_tbl ftbl_gcc_emac0_phy_aux_clk_src[] = { 1206 F(19200000, P_BI_TCXO, 1, 0, 0), 1207 { } 1208 }; 1209 1210 static struct clk_rcg2 gcc_emac0_phy_aux_clk_src = { 1211 .cmd_rcgr = 0xad01c, 1212 .mnd_width = 0, 1213 .hid_width = 5, 1214 .parent_map = gcc_parent_map_10, 1215 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1216 .hw_clk_ctrl = true, 1217 .clkr.hw.init = &(const struct clk_init_data) { 1218 .name = "gcc_emac0_phy_aux_clk_src", 1219 .parent_data = gcc_parent_data_10, 1220 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 1221 .ops = &clk_rcg2_shared_ops, 1222 }, 1223 }; 1224 1225 static const struct freq_tbl ftbl_gcc_emac0_ptp_clk_src[] = { 1226 F(250000000, P_GPLL12_OUT_AUX2, 2, 0, 0), 1227 { } 1228 }; 1229 1230 static struct clk_rcg2 gcc_emac0_ptp_clk_src = { 1231 .cmd_rcgr = 0xad064, 1232 .mnd_width = 0, 1233 .hid_width = 5, 1234 .parent_map = gcc_parent_map_11, 1235 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src, 1236 .hw_clk_ctrl = true, 1237 .clkr.hw.init = &(const struct clk_init_data) { 1238 .name = "gcc_emac0_ptp_clk_src", 1239 .parent_data = gcc_parent_data_11, 1240 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1241 .ops = &clk_rcg2_shared_ops, 1242 }, 1243 }; 1244 1245 static const struct freq_tbl ftbl_gcc_emac0_rgmii_clk_src[] = { 1246 F(2500000, P_GPLL0_OUT_AUX2, 10, 1, 12), 1247 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1248 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1249 F(125000000, P_GPLL12_OUT_AUX2, 4, 0, 0), 1250 F(250000000, P_GPLL12_OUT_EARLY, 4, 0, 0), 1251 { } 1252 }; 1253 1254 static struct clk_rcg2 gcc_emac0_rgmii_clk_src = { 1255 .cmd_rcgr = 0xad04c, 1256 .mnd_width = 8, 1257 .hid_width = 5, 1258 .parent_map = gcc_parent_map_12, 1259 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src, 1260 .hw_clk_ctrl = true, 1261 .clkr.hw.init = &(const struct clk_init_data) { 1262 .name = "gcc_emac0_rgmii_clk_src", 1263 .parent_data = gcc_parent_data_12, 1264 .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1265 .ops = &clk_rcg2_shared_ops, 1266 }, 1267 }; 1268 1269 static struct clk_rcg2 gcc_emac1_axi_clk_src = { 1270 .cmd_rcgr = 0x109fc, 1271 .mnd_width = 0, 1272 .hid_width = 5, 1273 .parent_map = gcc_parent_map_0, 1274 .freq_tbl = ftbl_gcc_emac0_axi_clk_src, 1275 .hw_clk_ctrl = true, 1276 .clkr.hw.init = &(const struct clk_init_data) { 1277 .name = "gcc_emac1_axi_clk_src", 1278 .parent_data = gcc_parent_data_0, 1279 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1280 .ops = &clk_rcg2_shared_ops, 1281 }, 1282 }; 1283 1284 static struct clk_rcg2 gcc_emac1_phy_aux_clk_src = { 1285 .cmd_rcgr = 0xae01c, 1286 .mnd_width = 0, 1287 .hid_width = 5, 1288 .parent_map = gcc_parent_map_10, 1289 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1290 .hw_clk_ctrl = true, 1291 .clkr.hw.init = &(const struct clk_init_data) { 1292 .name = "gcc_emac1_phy_aux_clk_src", 1293 .parent_data = gcc_parent_data_10, 1294 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 1295 .ops = &clk_rcg2_shared_ops, 1296 }, 1297 }; 1298 1299 static struct clk_rcg2 gcc_emac1_ptp_clk_src = { 1300 .cmd_rcgr = 0xae064, 1301 .mnd_width = 0, 1302 .hid_width = 5, 1303 .parent_map = gcc_parent_map_11, 1304 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src, 1305 .hw_clk_ctrl = true, 1306 .clkr.hw.init = &(const struct clk_init_data) { 1307 .name = "gcc_emac1_ptp_clk_src", 1308 .parent_data = gcc_parent_data_11, 1309 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1310 .ops = &clk_rcg2_shared_ops, 1311 }, 1312 }; 1313 1314 static struct clk_rcg2 gcc_emac1_rgmii_clk_src = { 1315 .cmd_rcgr = 0xae04c, 1316 .mnd_width = 8, 1317 .hid_width = 5, 1318 .parent_map = gcc_parent_map_12, 1319 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src, 1320 .hw_clk_ctrl = true, 1321 .clkr.hw.init = &(const struct clk_init_data) { 1322 .name = "gcc_emac1_rgmii_clk_src", 1323 .parent_data = gcc_parent_data_12, 1324 .num_parents = ARRAY_SIZE(gcc_parent_data_12), 1325 .ops = &clk_rcg2_shared_ops, 1326 }, 1327 }; 1328 1329 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 1330 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1331 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1332 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1333 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0), 1334 { } 1335 }; 1336 1337 static struct clk_rcg2 gcc_gp1_clk_src = { 1338 .cmd_rcgr = 0x4d004, 1339 .mnd_width = 8, 1340 .hid_width = 5, 1341 .parent_map = gcc_parent_map_2, 1342 .freq_tbl = ftbl_gcc_gp1_clk_src, 1343 .hw_clk_ctrl = true, 1344 .clkr.hw.init = &(const struct clk_init_data) { 1345 .name = "gcc_gp1_clk_src", 1346 .parent_data = gcc_parent_data_2, 1347 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 1348 .ops = &clk_rcg2_shared_ops, 1349 }, 1350 }; 1351 1352 static struct clk_rcg2 gcc_gp2_clk_src = { 1353 .cmd_rcgr = 0x4e004, 1354 .mnd_width = 8, 1355 .hid_width = 5, 1356 .parent_map = gcc_parent_map_2, 1357 .freq_tbl = ftbl_gcc_gp1_clk_src, 1358 .hw_clk_ctrl = true, 1359 .clkr.hw.init = &(const struct clk_init_data) { 1360 .name = "gcc_gp2_clk_src", 1361 .parent_data = gcc_parent_data_2, 1362 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 1363 .ops = &clk_rcg2_shared_ops, 1364 }, 1365 }; 1366 1367 static struct clk_rcg2 gcc_gp3_clk_src = { 1368 .cmd_rcgr = 0x4f004, 1369 .mnd_width = 8, 1370 .hid_width = 5, 1371 .parent_map = gcc_parent_map_2, 1372 .freq_tbl = ftbl_gcc_gp1_clk_src, 1373 .hw_clk_ctrl = true, 1374 .clkr.hw.init = &(const struct clk_init_data) { 1375 .name = "gcc_gp3_clk_src", 1376 .parent_data = gcc_parent_data_2, 1377 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 1378 .ops = &clk_rcg2_shared_ops, 1379 }, 1380 }; 1381 1382 static struct clk_rcg2 gcc_pcie_aux_clk_src = { 1383 .cmd_rcgr = 0xaf074, 1384 .mnd_width = 16, 1385 .hid_width = 5, 1386 .parent_map = gcc_parent_map_4, 1387 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1388 .hw_clk_ctrl = true, 1389 .clkr.hw.init = &(const struct clk_init_data) { 1390 .name = "gcc_pcie_aux_clk_src", 1391 .parent_data = gcc_parent_data_4, 1392 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 1393 .ops = &clk_rcg2_shared_ops, 1394 }, 1395 }; 1396 1397 static struct clk_rcg2 gcc_pcie_aux_phy_clk_src = { 1398 .cmd_rcgr = 0xaf05c, 1399 .mnd_width = 0, 1400 .hid_width = 5, 1401 .parent_map = gcc_parent_map_4, 1402 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1403 .hw_clk_ctrl = true, 1404 .clkr.hw.init = &(const struct clk_init_data) { 1405 .name = "gcc_pcie_aux_phy_clk_src", 1406 .parent_data = gcc_parent_data_4, 1407 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 1408 .ops = &clk_rcg2_shared_ops, 1409 }, 1410 }; 1411 1412 static const struct freq_tbl ftbl_gcc_pcie_rchng_phy_clk_src[] = { 1413 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1414 { } 1415 }; 1416 1417 static struct clk_rcg2 gcc_pcie_rchng_phy_clk_src = { 1418 .cmd_rcgr = 0xaf028, 1419 .mnd_width = 0, 1420 .hid_width = 5, 1421 .parent_map = gcc_parent_map_0, 1422 .freq_tbl = ftbl_gcc_pcie_rchng_phy_clk_src, 1423 .hw_clk_ctrl = true, 1424 .clkr.hw.init = &(const struct clk_init_data) { 1425 .name = "gcc_pcie_rchng_phy_clk_src", 1426 .parent_data = gcc_parent_data_0, 1427 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1428 .ops = &clk_rcg2_shared_ops, 1429 }, 1430 }; 1431 1432 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 1433 F(19200000, P_BI_TCXO, 1, 0, 0), 1434 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0), 1435 { } 1436 }; 1437 1438 static struct clk_rcg2 gcc_pdm2_clk_src = { 1439 .cmd_rcgr = 0x20010, 1440 .mnd_width = 0, 1441 .hid_width = 5, 1442 .parent_map = gcc_parent_map_0, 1443 .freq_tbl = ftbl_gcc_pdm2_clk_src, 1444 .hw_clk_ctrl = true, 1445 .clkr.hw.init = &(const struct clk_init_data) { 1446 .name = "gcc_pdm2_clk_src", 1447 .parent_data = gcc_parent_data_0, 1448 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1449 .ops = &clk_rcg2_shared_ops, 1450 }, 1451 }; 1452 1453 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 1454 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625), 1455 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625), 1456 F(19200000, P_BI_TCXO, 1, 0, 0), 1457 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625), 1458 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75), 1459 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25), 1460 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75), 1461 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1462 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15), 1463 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25), 1464 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1465 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375), 1466 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75), 1467 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625), 1468 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0), 1469 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0), 1470 { } 1471 }; 1472 1473 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 1474 .name = "gcc_qupv3_wrap0_s0_clk_src", 1475 .parent_data = gcc_parent_data_1, 1476 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1477 .ops = &clk_rcg2_shared_ops, 1478 }; 1479 1480 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 1481 .cmd_rcgr = 0x1f148, 1482 .mnd_width = 16, 1483 .hid_width = 5, 1484 .parent_map = gcc_parent_map_1, 1485 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1486 .hw_clk_ctrl = true, 1487 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 1488 }; 1489 1490 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 1491 .name = "gcc_qupv3_wrap0_s1_clk_src", 1492 .parent_data = gcc_parent_data_1, 1493 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1494 .ops = &clk_rcg2_shared_ops, 1495 }; 1496 1497 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 1498 .cmd_rcgr = 0x1f278, 1499 .mnd_width = 16, 1500 .hid_width = 5, 1501 .parent_map = gcc_parent_map_1, 1502 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1503 .hw_clk_ctrl = true, 1504 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 1505 }; 1506 1507 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 1508 .name = "gcc_qupv3_wrap0_s2_clk_src", 1509 .parent_data = gcc_parent_data_1, 1510 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1511 .ops = &clk_rcg2_shared_ops, 1512 }; 1513 1514 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 1515 .cmd_rcgr = 0x1f3a8, 1516 .mnd_width = 16, 1517 .hid_width = 5, 1518 .parent_map = gcc_parent_map_1, 1519 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1520 .hw_clk_ctrl = true, 1521 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 1522 }; 1523 1524 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 1525 .name = "gcc_qupv3_wrap0_s3_clk_src", 1526 .parent_data = gcc_parent_data_1, 1527 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1528 .ops = &clk_rcg2_shared_ops, 1529 }; 1530 1531 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 1532 .cmd_rcgr = 0x1f4d8, 1533 .mnd_width = 16, 1534 .hid_width = 5, 1535 .parent_map = gcc_parent_map_1, 1536 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1537 .hw_clk_ctrl = true, 1538 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 1539 }; 1540 1541 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 1542 .name = "gcc_qupv3_wrap0_s4_clk_src", 1543 .parent_data = gcc_parent_data_1, 1544 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1545 .ops = &clk_rcg2_shared_ops, 1546 }; 1547 1548 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 1549 .cmd_rcgr = 0x1f608, 1550 .mnd_width = 16, 1551 .hid_width = 5, 1552 .parent_map = gcc_parent_map_1, 1553 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1554 .hw_clk_ctrl = true, 1555 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 1556 }; 1557 1558 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 1559 .name = "gcc_qupv3_wrap0_s5_clk_src", 1560 .parent_data = gcc_parent_data_1, 1561 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1562 .ops = &clk_rcg2_shared_ops, 1563 }; 1564 1565 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 1566 .cmd_rcgr = 0x1f738, 1567 .mnd_width = 16, 1568 .hid_width = 5, 1569 .parent_map = gcc_parent_map_1, 1570 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1571 .hw_clk_ctrl = true, 1572 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 1573 }; 1574 1575 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = { 1576 .name = "gcc_qupv3_wrap0_s6_clk_src", 1577 .parent_data = gcc_parent_data_1, 1578 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1579 .ops = &clk_rcg2_shared_ops, 1580 }; 1581 1582 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 1583 .cmd_rcgr = 0x1f868, 1584 .mnd_width = 16, 1585 .hid_width = 5, 1586 .parent_map = gcc_parent_map_1, 1587 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1588 .hw_clk_ctrl = true, 1589 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init, 1590 }; 1591 1592 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = { 1593 .name = "gcc_qupv3_wrap0_s7_clk_src", 1594 .parent_data = gcc_parent_data_1, 1595 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1596 .ops = &clk_rcg2_shared_ops, 1597 }; 1598 1599 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 1600 .cmd_rcgr = 0x1f998, 1601 .mnd_width = 16, 1602 .hid_width = 5, 1603 .parent_map = gcc_parent_map_1, 1604 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1605 .hw_clk_ctrl = true, 1606 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init, 1607 }; 1608 1609 static struct clk_init_data gcc_qupv3_wrap0_s8_clk_src_init = { 1610 .name = "gcc_qupv3_wrap0_s8_clk_src", 1611 .parent_data = gcc_parent_data_1, 1612 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1613 .ops = &clk_rcg2_shared_ops, 1614 }; 1615 1616 static struct clk_rcg2 gcc_qupv3_wrap0_s8_clk_src = { 1617 .cmd_rcgr = 0x1fac8, 1618 .mnd_width = 16, 1619 .hid_width = 5, 1620 .parent_map = gcc_parent_map_1, 1621 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1622 .hw_clk_ctrl = true, 1623 .clkr.hw.init = &gcc_qupv3_wrap0_s8_clk_src_init, 1624 }; 1625 1626 static struct clk_init_data gcc_qupv3_wrap0_s9_clk_src_init = { 1627 .name = "gcc_qupv3_wrap0_s9_clk_src", 1628 .parent_data = gcc_parent_data_1, 1629 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1630 .ops = &clk_rcg2_shared_ops, 1631 }; 1632 1633 static struct clk_rcg2 gcc_qupv3_wrap0_s9_clk_src = { 1634 .cmd_rcgr = 0x1fbf8, 1635 .mnd_width = 16, 1636 .hid_width = 5, 1637 .parent_map = gcc_parent_map_1, 1638 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 1639 .hw_clk_ctrl = true, 1640 .clkr.hw.init = &gcc_qupv3_wrap0_s9_clk_src_init, 1641 }; 1642 1643 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 1644 F(144000, P_BI_TCXO, 16, 3, 25), 1645 F(400000, P_BI_TCXO, 12, 1, 4), 1646 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3), 1647 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2), 1648 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1649 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1650 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 1651 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 1652 { } 1653 }; 1654 1655 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 1656 .cmd_rcgr = 0x38028, 1657 .mnd_width = 8, 1658 .hid_width = 5, 1659 .parent_map = gcc_parent_map_1, 1660 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 1661 .hw_clk_ctrl = true, 1662 .clkr.hw.init = &(const struct clk_init_data) { 1663 .name = "gcc_sdcc1_apps_clk_src", 1664 .parent_data = gcc_parent_data_1, 1665 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1666 .ops = &clk_rcg2_shared_floor_ops, 1667 }, 1668 }; 1669 1670 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 1671 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0), 1672 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1673 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0), 1674 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1675 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0), 1676 { } 1677 }; 1678 1679 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 1680 .cmd_rcgr = 0x38010, 1681 .mnd_width = 0, 1682 .hid_width = 5, 1683 .parent_map = gcc_parent_map_0, 1684 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 1685 .hw_clk_ctrl = true, 1686 .clkr.hw.init = &(const struct clk_init_data) { 1687 .name = "gcc_sdcc1_ice_core_clk_src", 1688 .parent_data = gcc_parent_data_0, 1689 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1690 .ops = &clk_rcg2_shared_floor_ops, 1691 }, 1692 }; 1693 1694 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1695 F(400000, P_BI_TCXO, 12, 1, 4), 1696 F(19200000, P_BI_TCXO, 1, 0, 0), 1697 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0), 1698 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0), 1699 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0), 1700 F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 1701 { } 1702 }; 1703 1704 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 1705 .cmd_rcgr = 0x1e00c, 1706 .mnd_width = 8, 1707 .hid_width = 5, 1708 .parent_map = gcc_parent_map_21, 1709 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 1710 .hw_clk_ctrl = true, 1711 .clkr.hw.init = &(const struct clk_init_data) { 1712 .name = "gcc_sdcc2_apps_clk_src", 1713 .parent_data = gcc_parent_data_21, 1714 .num_parents = ARRAY_SIZE(gcc_parent_data_21), 1715 .ops = &clk_rcg2_shared_floor_ops, 1716 }, 1717 }; 1718 1719 static struct clk_rcg2 gcc_tscss_clk_src = { 1720 .cmd_rcgr = 0xac004, 1721 .mnd_width = 0, 1722 .hid_width = 5, 1723 .parent_map = gcc_parent_map_22, 1724 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src, 1725 .hw_clk_ctrl = true, 1726 .clkr.hw.init = &(const struct clk_init_data) { 1727 .name = "gcc_tscss_clk_src", 1728 .parent_data = gcc_parent_data_22, 1729 .num_parents = ARRAY_SIZE(gcc_parent_data_22), 1730 .ops = &clk_rcg2_shared_ops, 1731 }, 1732 }; 1733 1734 static const struct freq_tbl ftbl_gcc_usb20_master_clk_src[] = { 1735 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0), 1736 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0), 1737 { } 1738 }; 1739 1740 static struct clk_rcg2 gcc_usb20_master_clk_src = { 1741 .cmd_rcgr = 0xb003c, 1742 .mnd_width = 8, 1743 .hid_width = 5, 1744 .parent_map = gcc_parent_map_0, 1745 .freq_tbl = ftbl_gcc_usb20_master_clk_src, 1746 .hw_clk_ctrl = true, 1747 .clkr.hw.init = &(const struct clk_init_data) { 1748 .name = "gcc_usb20_master_clk_src", 1749 .parent_data = gcc_parent_data_0, 1750 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1751 .ops = &clk_rcg2_shared_ops, 1752 }, 1753 }; 1754 1755 static struct clk_rcg2 gcc_usb20_mock_utmi_clk_src = { 1756 .cmd_rcgr = 0xb0020, 1757 .mnd_width = 0, 1758 .hid_width = 5, 1759 .parent_map = gcc_parent_map_13, 1760 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1761 .hw_clk_ctrl = true, 1762 .clkr.hw.init = &(const struct clk_init_data) { 1763 .name = "gcc_usb20_mock_utmi_clk_src", 1764 .parent_data = gcc_parent_data_13, 1765 .num_parents = ARRAY_SIZE(gcc_parent_data_13), 1766 .ops = &clk_rcg2_shared_ops, 1767 }, 1768 }; 1769 1770 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1771 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0), 1772 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0), 1773 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0), 1774 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0), 1775 { } 1776 }; 1777 1778 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1779 .cmd_rcgr = 0x1a01c, 1780 .mnd_width = 8, 1781 .hid_width = 5, 1782 .parent_map = gcc_parent_map_0, 1783 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1784 .hw_clk_ctrl = true, 1785 .clkr.hw.init = &(const struct clk_init_data) { 1786 .name = "gcc_usb30_prim_master_clk_src", 1787 .parent_data = gcc_parent_data_0, 1788 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1789 .ops = &clk_rcg2_shared_ops, 1790 }, 1791 }; 1792 1793 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1794 .cmd_rcgr = 0x1a034, 1795 .mnd_width = 0, 1796 .hid_width = 5, 1797 .parent_map = gcc_parent_map_0, 1798 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1799 .hw_clk_ctrl = true, 1800 .clkr.hw.init = &(const struct clk_init_data) { 1801 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1802 .parent_data = gcc_parent_data_0, 1803 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1804 .ops = &clk_rcg2_shared_ops, 1805 }, 1806 }; 1807 1808 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1809 .cmd_rcgr = 0x1a060, 1810 .mnd_width = 0, 1811 .hid_width = 5, 1812 .parent_map = gcc_parent_map_4, 1813 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src, 1814 .hw_clk_ctrl = true, 1815 .clkr.hw.init = &(const struct clk_init_data) { 1816 .name = "gcc_usb3_prim_phy_aux_clk_src", 1817 .parent_data = gcc_parent_data_4, 1818 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 1819 .ops = &clk_rcg2_shared_ops, 1820 }, 1821 }; 1822 1823 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = { 1824 F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0), 1825 F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0), 1826 F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0), 1827 F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0), 1828 { } 1829 }; 1830 1831 static struct clk_rcg2 gcc_video_venus_clk_src = { 1832 .cmd_rcgr = 0x6d000, 1833 .mnd_width = 0, 1834 .hid_width = 5, 1835 .parent_map = gcc_parent_map_24, 1836 .freq_tbl = ftbl_gcc_video_venus_clk_src, 1837 .hw_clk_ctrl = true, 1838 .clkr.hw.init = &(const struct clk_init_data) { 1839 .name = "gcc_video_venus_clk_src", 1840 .parent_data = gcc_parent_data_24, 1841 .num_parents = ARRAY_SIZE(gcc_parent_data_24), 1842 .flags = CLK_SET_RATE_PARENT, 1843 .ops = &clk_rcg2_shared_ops, 1844 }, 1845 }; 1846 1847 static struct clk_regmap_div gcc_disp_gpll0_clk_src = { 1848 .reg = 0x17058, 1849 .shift = 0, 1850 .width = 2, 1851 .clkr.hw.init = &(const struct clk_init_data) { 1852 .name = "gcc_disp_gpll0_clk_src", 1853 .parent_hws = (const struct clk_hw*[]) { 1854 &gpll0.clkr.hw, 1855 }, 1856 .num_parents = 1, 1857 .ops = &clk_regmap_div_ops, 1858 }, 1859 }; 1860 1861 static struct clk_regmap_div gcc_usb20_mock_utmi_postdiv_clk_src = { 1862 .reg = 0xb0038, 1863 .shift = 0, 1864 .width = 4, 1865 .clkr.hw.init = &(const struct clk_init_data) { 1866 .name = "gcc_usb20_mock_utmi_postdiv_clk_src", 1867 .parent_hws = (const struct clk_hw*[]) { 1868 &gcc_usb20_mock_utmi_clk_src.clkr.hw, 1869 }, 1870 .num_parents = 1, 1871 .flags = CLK_SET_RATE_PARENT, 1872 .ops = &clk_regmap_div_ro_ops, 1873 }, 1874 }; 1875 1876 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1877 .reg = 0x1a04c, 1878 .shift = 0, 1879 .width = 2, 1880 .clkr.hw.init = &(const struct clk_init_data) { 1881 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1882 .parent_hws = (const struct clk_hw*[]) { 1883 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 1884 }, 1885 .num_parents = 1, 1886 .flags = CLK_SET_RATE_PARENT, 1887 .ops = &clk_regmap_div_ro_ops, 1888 }, 1889 }; 1890 1891 static struct clk_branch gcc_ahb2phy_csi_clk = { 1892 .halt_reg = 0x1d004, 1893 .halt_check = BRANCH_HALT_DELAY, 1894 .hwcg_reg = 0x1d004, 1895 .hwcg_bit = 1, 1896 .clkr = { 1897 .enable_reg = 0x1d004, 1898 .enable_mask = BIT(0), 1899 .hw.init = &(const struct clk_init_data) { 1900 .name = "gcc_ahb2phy_csi_clk", 1901 .ops = &clk_branch2_ops, 1902 }, 1903 }, 1904 }; 1905 1906 static struct clk_branch gcc_ahb2phy_usb_clk = { 1907 .halt_reg = 0x1d008, 1908 .halt_check = BRANCH_HALT, 1909 .hwcg_reg = 0x1d008, 1910 .hwcg_bit = 1, 1911 .clkr = { 1912 .enable_reg = 0x1d008, 1913 .enable_mask = BIT(0), 1914 .hw.init = &(const struct clk_init_data) { 1915 .name = "gcc_ahb2phy_usb_clk", 1916 .ops = &clk_branch2_ops, 1917 }, 1918 }, 1919 }; 1920 1921 static struct clk_branch gcc_boot_rom_ahb_clk = { 1922 .halt_reg = 0x23004, 1923 .halt_check = BRANCH_HALT_VOTED, 1924 .hwcg_reg = 0x23004, 1925 .hwcg_bit = 1, 1926 .clkr = { 1927 .enable_reg = 0x7900c, 1928 .enable_mask = BIT(1), 1929 .hw.init = &(const struct clk_init_data) { 1930 .name = "gcc_boot_rom_ahb_clk", 1931 .ops = &clk_branch2_ops, 1932 }, 1933 }, 1934 }; 1935 1936 static struct clk_branch gcc_cam_throttle_nrt_clk = { 1937 .halt_reg = 0x17070, 1938 .halt_check = BRANCH_HALT_VOTED, 1939 .hwcg_reg = 0x17070, 1940 .hwcg_bit = 1, 1941 .clkr = { 1942 .enable_reg = 0x79004, 1943 .enable_mask = BIT(16), 1944 .hw.init = &(const struct clk_init_data) { 1945 .name = "gcc_cam_throttle_nrt_clk", 1946 .ops = &clk_branch2_ops, 1947 }, 1948 }, 1949 }; 1950 1951 static struct clk_branch gcc_cam_throttle_rt_clk = { 1952 .halt_reg = 0x1706c, 1953 .halt_check = BRANCH_HALT_VOTED, 1954 .hwcg_reg = 0x1706c, 1955 .hwcg_bit = 1, 1956 .clkr = { 1957 .enable_reg = 0x79004, 1958 .enable_mask = BIT(15), 1959 .hw.init = &(const struct clk_init_data) { 1960 .name = "gcc_cam_throttle_rt_clk", 1961 .ops = &clk_branch2_ops, 1962 }, 1963 }, 1964 }; 1965 1966 static struct clk_branch gcc_camss_axi_clk = { 1967 .halt_reg = 0x58044, 1968 .halt_check = BRANCH_HALT, 1969 .clkr = { 1970 .enable_reg = 0x58044, 1971 .enable_mask = BIT(0), 1972 .hw.init = &(const struct clk_init_data) { 1973 .name = "gcc_camss_axi_clk", 1974 .parent_hws = (const struct clk_hw*[]) { 1975 &gcc_camss_axi_clk_src.clkr.hw, 1976 }, 1977 .num_parents = 1, 1978 .flags = CLK_SET_RATE_PARENT, 1979 .ops = &clk_branch2_ops, 1980 }, 1981 }, 1982 }; 1983 1984 static struct clk_branch gcc_camss_camnoc_atb_clk = { 1985 .halt_reg = 0x5804c, 1986 .halt_check = BRANCH_HALT_DELAY, 1987 .hwcg_reg = 0x5804c, 1988 .hwcg_bit = 1, 1989 .clkr = { 1990 .enable_reg = 0x5804c, 1991 .enable_mask = BIT(0), 1992 .hw.init = &(const struct clk_init_data) { 1993 .name = "gcc_camss_camnoc_atb_clk", 1994 .ops = &clk_branch2_ops, 1995 }, 1996 }, 1997 }; 1998 1999 static struct clk_branch gcc_camss_camnoc_dragonlink_atb_clk = { 2000 .halt_reg = 0x58060, 2001 .halt_check = BRANCH_HALT_VOTED, 2002 .hwcg_reg = 0x58060, 2003 .hwcg_bit = 1, 2004 .clkr = { 2005 .enable_reg = 0x58060, 2006 .enable_mask = BIT(0), 2007 .hw.init = &(const struct clk_init_data) { 2008 .name = "gcc_camss_camnoc_dragonlink_atb_clk", 2009 .ops = &clk_branch2_ops, 2010 }, 2011 }, 2012 }; 2013 2014 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = { 2015 .halt_reg = 0x58050, 2016 .halt_check = BRANCH_HALT_DELAY, 2017 .hwcg_reg = 0x58050, 2018 .hwcg_bit = 1, 2019 .clkr = { 2020 .enable_reg = 0x58050, 2021 .enable_mask = BIT(0), 2022 .hw.init = &(const struct clk_init_data) { 2023 .name = "gcc_camss_camnoc_nts_xo_clk", 2024 .ops = &clk_branch2_ops, 2025 }, 2026 }, 2027 }; 2028 2029 static struct clk_branch gcc_camss_cci_0_clk = { 2030 .halt_reg = 0x56018, 2031 .halt_check = BRANCH_HALT, 2032 .clkr = { 2033 .enable_reg = 0x56018, 2034 .enable_mask = BIT(0), 2035 .hw.init = &(const struct clk_init_data) { 2036 .name = "gcc_camss_cci_0_clk", 2037 .parent_hws = (const struct clk_hw*[]) { 2038 &gcc_camss_cci_clk_src.clkr.hw, 2039 }, 2040 .num_parents = 1, 2041 .flags = CLK_SET_RATE_PARENT, 2042 .ops = &clk_branch2_ops, 2043 }, 2044 }, 2045 }; 2046 2047 static struct clk_branch gcc_camss_cphy_0_clk = { 2048 .halt_reg = 0x52088, 2049 .halt_check = BRANCH_HALT, 2050 .clkr = { 2051 .enable_reg = 0x52088, 2052 .enable_mask = BIT(0), 2053 .hw.init = &(const struct clk_init_data) { 2054 .name = "gcc_camss_cphy_0_clk", 2055 .parent_hws = (const struct clk_hw*[]) { 2056 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2057 }, 2058 .num_parents = 1, 2059 .flags = CLK_SET_RATE_PARENT, 2060 .ops = &clk_branch2_ops, 2061 }, 2062 }, 2063 }; 2064 2065 static struct clk_branch gcc_camss_cphy_1_clk = { 2066 .halt_reg = 0x5208c, 2067 .halt_check = BRANCH_HALT, 2068 .clkr = { 2069 .enable_reg = 0x5208c, 2070 .enable_mask = BIT(0), 2071 .hw.init = &(const struct clk_init_data) { 2072 .name = "gcc_camss_cphy_1_clk", 2073 .parent_hws = (const struct clk_hw*[]) { 2074 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2075 }, 2076 .num_parents = 1, 2077 .flags = CLK_SET_RATE_PARENT, 2078 .ops = &clk_branch2_ops, 2079 }, 2080 }, 2081 }; 2082 2083 static struct clk_branch gcc_camss_csi0phytimer_clk = { 2084 .halt_reg = 0x45018, 2085 .halt_check = BRANCH_HALT, 2086 .clkr = { 2087 .enable_reg = 0x45018, 2088 .enable_mask = BIT(0), 2089 .hw.init = &(const struct clk_init_data) { 2090 .name = "gcc_camss_csi0phytimer_clk", 2091 .parent_hws = (const struct clk_hw*[]) { 2092 &gcc_camss_csi0phytimer_clk_src.clkr.hw, 2093 }, 2094 .num_parents = 1, 2095 .flags = CLK_SET_RATE_PARENT, 2096 .ops = &clk_branch2_ops, 2097 }, 2098 }, 2099 }; 2100 2101 static struct clk_branch gcc_camss_csi1phytimer_clk = { 2102 .halt_reg = 0x45034, 2103 .halt_check = BRANCH_HALT, 2104 .clkr = { 2105 .enable_reg = 0x45034, 2106 .enable_mask = BIT(0), 2107 .hw.init = &(const struct clk_init_data) { 2108 .name = "gcc_camss_csi1phytimer_clk", 2109 .parent_hws = (const struct clk_hw*[]) { 2110 &gcc_camss_csi1phytimer_clk_src.clkr.hw, 2111 }, 2112 .num_parents = 1, 2113 .flags = CLK_SET_RATE_PARENT, 2114 .ops = &clk_branch2_ops, 2115 }, 2116 }, 2117 }; 2118 2119 static struct clk_branch gcc_camss_mclk0_clk = { 2120 .halt_reg = 0x51018, 2121 .halt_check = BRANCH_HALT, 2122 .clkr = { 2123 .enable_reg = 0x51018, 2124 .enable_mask = BIT(0), 2125 .hw.init = &(const struct clk_init_data) { 2126 .name = "gcc_camss_mclk0_clk", 2127 .parent_hws = (const struct clk_hw*[]) { 2128 &gcc_camss_mclk0_clk_src.clkr.hw, 2129 }, 2130 .num_parents = 1, 2131 .flags = CLK_SET_RATE_PARENT, 2132 .ops = &clk_branch2_ops, 2133 }, 2134 }, 2135 }; 2136 2137 static struct clk_branch gcc_camss_mclk1_clk = { 2138 .halt_reg = 0x51034, 2139 .halt_check = BRANCH_HALT, 2140 .clkr = { 2141 .enable_reg = 0x51034, 2142 .enable_mask = BIT(0), 2143 .hw.init = &(const struct clk_init_data) { 2144 .name = "gcc_camss_mclk1_clk", 2145 .parent_hws = (const struct clk_hw*[]) { 2146 &gcc_camss_mclk1_clk_src.clkr.hw, 2147 }, 2148 .num_parents = 1, 2149 .flags = CLK_SET_RATE_PARENT, 2150 .ops = &clk_branch2_ops, 2151 }, 2152 }, 2153 }; 2154 2155 static struct clk_branch gcc_camss_mclk2_clk = { 2156 .halt_reg = 0x51050, 2157 .halt_check = BRANCH_HALT, 2158 .clkr = { 2159 .enable_reg = 0x51050, 2160 .enable_mask = BIT(0), 2161 .hw.init = &(const struct clk_init_data) { 2162 .name = "gcc_camss_mclk2_clk", 2163 .parent_hws = (const struct clk_hw*[]) { 2164 &gcc_camss_mclk2_clk_src.clkr.hw, 2165 }, 2166 .num_parents = 1, 2167 .flags = CLK_SET_RATE_PARENT, 2168 .ops = &clk_branch2_ops, 2169 }, 2170 }, 2171 }; 2172 2173 static struct clk_branch gcc_camss_mclk3_clk = { 2174 .halt_reg = 0x5106c, 2175 .halt_check = BRANCH_HALT, 2176 .clkr = { 2177 .enable_reg = 0x5106c, 2178 .enable_mask = BIT(0), 2179 .hw.init = &(const struct clk_init_data) { 2180 .name = "gcc_camss_mclk3_clk", 2181 .parent_hws = (const struct clk_hw*[]) { 2182 &gcc_camss_mclk3_clk_src.clkr.hw, 2183 }, 2184 .num_parents = 1, 2185 .flags = CLK_SET_RATE_PARENT, 2186 .ops = &clk_branch2_ops, 2187 }, 2188 }, 2189 }; 2190 2191 static struct clk_branch gcc_camss_nrt_axi_clk = { 2192 .halt_reg = 0x58054, 2193 .halt_check = BRANCH_HALT, 2194 .clkr = { 2195 .enable_reg = 0x58054, 2196 .enable_mask = BIT(0), 2197 .hw.init = &(const struct clk_init_data) { 2198 .name = "gcc_camss_nrt_axi_clk", 2199 .ops = &clk_branch2_ops, 2200 }, 2201 }, 2202 }; 2203 2204 static struct clk_branch gcc_camss_ope_ahb_clk = { 2205 .halt_reg = 0x5503c, 2206 .halt_check = BRANCH_HALT, 2207 .clkr = { 2208 .enable_reg = 0x5503c, 2209 .enable_mask = BIT(0), 2210 .hw.init = &(const struct clk_init_data) { 2211 .name = "gcc_camss_ope_ahb_clk", 2212 .parent_hws = (const struct clk_hw*[]) { 2213 &gcc_camss_ope_ahb_clk_src.clkr.hw, 2214 }, 2215 .num_parents = 1, 2216 .flags = CLK_SET_RATE_PARENT, 2217 .ops = &clk_branch2_ops, 2218 }, 2219 }, 2220 }; 2221 2222 static struct clk_branch gcc_camss_ope_clk = { 2223 .halt_reg = 0x5501c, 2224 .halt_check = BRANCH_HALT, 2225 .clkr = { 2226 .enable_reg = 0x5501c, 2227 .enable_mask = BIT(0), 2228 .hw.init = &(const struct clk_init_data) { 2229 .name = "gcc_camss_ope_clk", 2230 .parent_hws = (const struct clk_hw*[]) { 2231 &gcc_camss_ope_clk_src.clkr.hw, 2232 }, 2233 .num_parents = 1, 2234 .flags = CLK_SET_RATE_PARENT, 2235 .ops = &clk_branch2_ops, 2236 }, 2237 }, 2238 }; 2239 2240 static struct clk_branch gcc_camss_rt_axi_clk = { 2241 .halt_reg = 0x5805c, 2242 .halt_check = BRANCH_HALT, 2243 .clkr = { 2244 .enable_reg = 0x5805c, 2245 .enable_mask = BIT(0), 2246 .hw.init = &(const struct clk_init_data) { 2247 .name = "gcc_camss_rt_axi_clk", 2248 .ops = &clk_branch2_ops, 2249 }, 2250 }, 2251 }; 2252 2253 static struct clk_branch gcc_camss_tfe_0_clk = { 2254 .halt_reg = 0x5201c, 2255 .halt_check = BRANCH_HALT, 2256 .clkr = { 2257 .enable_reg = 0x5201c, 2258 .enable_mask = BIT(0), 2259 .hw.init = &(const struct clk_init_data) { 2260 .name = "gcc_camss_tfe_0_clk", 2261 .parent_hws = (const struct clk_hw*[]) { 2262 &gcc_camss_tfe_0_clk_src.clkr.hw, 2263 }, 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_camss_tfe_0_cphy_rx_clk = { 2272 .halt_reg = 0x5207c, 2273 .halt_check = BRANCH_HALT, 2274 .clkr = { 2275 .enable_reg = 0x5207c, 2276 .enable_mask = BIT(0), 2277 .hw.init = &(const struct clk_init_data) { 2278 .name = "gcc_camss_tfe_0_cphy_rx_clk", 2279 .parent_hws = (const struct clk_hw*[]) { 2280 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2281 }, 2282 .num_parents = 1, 2283 .flags = CLK_SET_RATE_PARENT, 2284 .ops = &clk_branch2_ops, 2285 }, 2286 }, 2287 }; 2288 2289 static struct clk_branch gcc_camss_tfe_0_csid_clk = { 2290 .halt_reg = 0x520ac, 2291 .halt_check = BRANCH_HALT, 2292 .clkr = { 2293 .enable_reg = 0x520ac, 2294 .enable_mask = BIT(0), 2295 .hw.init = &(const struct clk_init_data) { 2296 .name = "gcc_camss_tfe_0_csid_clk", 2297 .parent_hws = (const struct clk_hw*[]) { 2298 &gcc_camss_tfe_0_csid_clk_src.clkr.hw, 2299 }, 2300 .num_parents = 1, 2301 .flags = CLK_SET_RATE_PARENT, 2302 .ops = &clk_branch2_ops, 2303 }, 2304 }, 2305 }; 2306 2307 static struct clk_branch gcc_camss_tfe_1_clk = { 2308 .halt_reg = 0x5203c, 2309 .halt_check = BRANCH_HALT, 2310 .clkr = { 2311 .enable_reg = 0x5203c, 2312 .enable_mask = BIT(0), 2313 .hw.init = &(const struct clk_init_data) { 2314 .name = "gcc_camss_tfe_1_clk", 2315 .parent_hws = (const struct clk_hw*[]) { 2316 &gcc_camss_tfe_1_clk_src.clkr.hw, 2317 }, 2318 .num_parents = 1, 2319 .flags = CLK_SET_RATE_PARENT, 2320 .ops = &clk_branch2_ops, 2321 }, 2322 }, 2323 }; 2324 2325 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = { 2326 .halt_reg = 0x52080, 2327 .halt_check = BRANCH_HALT, 2328 .clkr = { 2329 .enable_reg = 0x52080, 2330 .enable_mask = BIT(0), 2331 .hw.init = &(const struct clk_init_data) { 2332 .name = "gcc_camss_tfe_1_cphy_rx_clk", 2333 .parent_hws = (const struct clk_hw*[]) { 2334 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw, 2335 }, 2336 .num_parents = 1, 2337 .flags = CLK_SET_RATE_PARENT, 2338 .ops = &clk_branch2_ops, 2339 }, 2340 }, 2341 }; 2342 2343 static struct clk_branch gcc_camss_tfe_1_csid_clk = { 2344 .halt_reg = 0x520cc, 2345 .halt_check = BRANCH_HALT, 2346 .clkr = { 2347 .enable_reg = 0x520cc, 2348 .enable_mask = BIT(0), 2349 .hw.init = &(const struct clk_init_data) { 2350 .name = "gcc_camss_tfe_1_csid_clk", 2351 .parent_hws = (const struct clk_hw*[]) { 2352 &gcc_camss_tfe_1_csid_clk_src.clkr.hw, 2353 }, 2354 .num_parents = 1, 2355 .flags = CLK_SET_RATE_PARENT, 2356 .ops = &clk_branch2_ops, 2357 }, 2358 }, 2359 }; 2360 2361 static struct clk_branch gcc_camss_top_ahb_clk = { 2362 .halt_reg = 0x58028, 2363 .halt_check = BRANCH_HALT, 2364 .clkr = { 2365 .enable_reg = 0x58028, 2366 .enable_mask = BIT(0), 2367 .hw.init = &(const struct clk_init_data) { 2368 .name = "gcc_camss_top_ahb_clk", 2369 .parent_hws = (const struct clk_hw*[]) { 2370 &gcc_camss_top_ahb_clk_src.clkr.hw, 2371 }, 2372 .num_parents = 1, 2373 .flags = CLK_SET_RATE_PARENT, 2374 .ops = &clk_branch2_ops, 2375 }, 2376 }, 2377 }; 2378 2379 static struct clk_branch gcc_cfg_noc_usb2_prim_axi_clk = { 2380 .halt_reg = 0x111c4, 2381 .halt_check = BRANCH_HALT_VOTED, 2382 .hwcg_reg = 0x111c4, 2383 .hwcg_bit = 1, 2384 .clkr = { 2385 .enable_reg = 0x111c4, 2386 .enable_mask = BIT(0), 2387 .hw.init = &(const struct clk_init_data) { 2388 .name = "gcc_cfg_noc_usb2_prim_axi_clk", 2389 .parent_hws = (const struct clk_hw*[]) { 2390 &gcc_usb20_master_clk_src.clkr.hw, 2391 }, 2392 .num_parents = 1, 2393 .flags = CLK_SET_RATE_PARENT, 2394 .ops = &clk_branch2_ops, 2395 }, 2396 }, 2397 }; 2398 2399 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 2400 .halt_reg = 0x1a07c, 2401 .halt_check = BRANCH_HALT_VOTED, 2402 .hwcg_reg = 0x1a07c, 2403 .hwcg_bit = 1, 2404 .clkr = { 2405 .enable_reg = 0x1a07c, 2406 .enable_mask = BIT(0), 2407 .hw.init = &(const struct clk_init_data) { 2408 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 2409 .parent_hws = (const struct clk_hw*[]) { 2410 &gcc_usb30_prim_master_clk_src.clkr.hw, 2411 }, 2412 .num_parents = 1, 2413 .flags = CLK_SET_RATE_PARENT, 2414 .ops = &clk_branch2_ops, 2415 }, 2416 }, 2417 }; 2418 2419 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 2420 .halt_reg = 0x71000, 2421 .halt_check = BRANCH_HALT_SKIP, 2422 .hwcg_reg = 0x71000, 2423 .hwcg_bit = 1, 2424 .clkr = { 2425 .enable_reg = 0x71000, 2426 .enable_mask = BIT(0), 2427 .hw.init = &(const struct clk_init_data) { 2428 .name = "gcc_ddrss_gpu_axi_clk", 2429 .ops = &clk_branch2_aon_ops, 2430 }, 2431 }, 2432 }; 2433 2434 static struct clk_branch gcc_ddrss_memnoc_pcie_sf_clk = { 2435 .halt_reg = 0x29044, 2436 .halt_check = BRANCH_HALT_VOTED, 2437 .hwcg_reg = 0x29044, 2438 .hwcg_bit = 1, 2439 .clkr = { 2440 .enable_reg = 0x29044, 2441 .enable_mask = BIT(0), 2442 .hw.init = &(const struct clk_init_data) { 2443 .name = "gcc_ddrss_memnoc_pcie_sf_clk", 2444 .ops = &clk_branch2_ops, 2445 }, 2446 }, 2447 }; 2448 2449 static struct clk_branch gcc_disp_gpll0_div_clk_src = { 2450 .halt_check = BRANCH_HALT_DELAY, 2451 .clkr = { 2452 .enable_reg = 0x79004, 2453 .enable_mask = BIT(11), 2454 .hw.init = &(const struct clk_init_data) { 2455 .name = "gcc_disp_gpll0_div_clk_src", 2456 .parent_hws = (const struct clk_hw*[]) { 2457 &gcc_disp_gpll0_clk_src.clkr.hw, 2458 }, 2459 .num_parents = 1, 2460 .flags = CLK_SET_RATE_PARENT, 2461 .ops = &clk_branch2_ops, 2462 }, 2463 }, 2464 }; 2465 2466 static struct clk_branch gcc_disp_hf_axi_clk = { 2467 .halt_reg = 0x17020, 2468 .halt_check = BRANCH_HALT, 2469 .hwcg_reg = 0x17020, 2470 .hwcg_bit = 1, 2471 .clkr = { 2472 .enable_reg = 0x17020, 2473 .enable_mask = BIT(0), 2474 .hw.init = &(const struct clk_init_data) { 2475 .name = "gcc_disp_hf_axi_clk", 2476 .ops = &clk_branch2_ops, 2477 }, 2478 }, 2479 }; 2480 2481 static struct clk_branch gcc_disp_throttle_core_clk = { 2482 .halt_reg = 0x17064, 2483 .halt_check = BRANCH_HALT_VOTED, 2484 .hwcg_reg = 0x17064, 2485 .hwcg_bit = 1, 2486 .clkr = { 2487 .enable_reg = 0x79004, 2488 .enable_mask = BIT(13), 2489 .hw.init = &(const struct clk_init_data) { 2490 .name = "gcc_disp_throttle_core_clk", 2491 .ops = &clk_branch2_ops, 2492 }, 2493 }, 2494 }; 2495 2496 static struct clk_branch gcc_emac0_ahb_clk = { 2497 .halt_reg = 0xad010, 2498 .halt_check = BRANCH_HALT_VOTED, 2499 .hwcg_reg = 0xad010, 2500 .hwcg_bit = 1, 2501 .clkr = { 2502 .enable_reg = 0xad010, 2503 .enable_mask = BIT(0), 2504 .hw.init = &(const struct clk_init_data) { 2505 .name = "gcc_emac0_ahb_clk", 2506 .ops = &clk_branch2_ops, 2507 }, 2508 }, 2509 }; 2510 2511 static struct clk_branch gcc_emac0_axi_clk = { 2512 .halt_reg = 0xad014, 2513 .halt_check = BRANCH_HALT_VOTED, 2514 .hwcg_reg = 0xad014, 2515 .hwcg_bit = 1, 2516 .clkr = { 2517 .enable_reg = 0xad014, 2518 .enable_mask = BIT(0), 2519 .hw.init = &(const struct clk_init_data) { 2520 .name = "gcc_emac0_axi_clk", 2521 .parent_hws = (const struct clk_hw*[]) { 2522 &gcc_emac0_axi_clk_src.clkr.hw, 2523 }, 2524 .num_parents = 1, 2525 .flags = CLK_SET_RATE_PARENT, 2526 .ops = &clk_branch2_ops, 2527 }, 2528 }, 2529 }; 2530 2531 static struct clk_branch gcc_emac0_axi_sys_noc_clk = { 2532 .halt_reg = 0x109d4, 2533 .halt_check = BRANCH_HALT_VOTED, 2534 .hwcg_reg = 0x109d4, 2535 .hwcg_bit = 1, 2536 .clkr = { 2537 .enable_reg = 0x109d4, 2538 .enable_mask = BIT(0), 2539 .hw.init = &(const struct clk_init_data) { 2540 .name = "gcc_emac0_axi_sys_noc_clk", 2541 .parent_hws = (const struct clk_hw*[]) { 2542 &gcc_emac0_axi_clk_src.clkr.hw, 2543 }, 2544 .num_parents = 1, 2545 .flags = CLK_SET_RATE_PARENT, 2546 .ops = &clk_branch2_ops, 2547 }, 2548 }, 2549 }; 2550 2551 static struct clk_branch gcc_emac0_cc_sgmiiphy_rx_clk = { 2552 .halt_reg = 0xad044, 2553 .halt_check = BRANCH_HALT_DELAY, 2554 .clkr = { 2555 .enable_reg = 0xad044, 2556 .enable_mask = BIT(0), 2557 .hw.init = &(const struct clk_init_data) { 2558 .name = "gcc_emac0_cc_sgmiiphy_rx_clk", 2559 .parent_hws = (const struct clk_hw*[]) { 2560 &gcc_emac0_cc_sgmiiphy_rx_clk_src.clkr.hw, 2561 }, 2562 .num_parents = 1, 2563 .flags = CLK_SET_RATE_PARENT, 2564 .ops = &clk_branch2_ops, 2565 }, 2566 }, 2567 }; 2568 2569 static struct clk_branch gcc_emac0_cc_sgmiiphy_tx_clk = { 2570 .halt_reg = 0xad03c, 2571 .halt_check = BRANCH_HALT_DELAY, 2572 .hwcg_reg = 0xad03c, 2573 .hwcg_bit = 1, 2574 .clkr = { 2575 .enable_reg = 0xad03c, 2576 .enable_mask = BIT(0), 2577 .hw.init = &(const struct clk_init_data) { 2578 .name = "gcc_emac0_cc_sgmiiphy_tx_clk", 2579 .parent_hws = (const struct clk_hw*[]) { 2580 &gcc_emac0_cc_sgmiiphy_tx_clk_src.clkr.hw, 2581 }, 2582 .num_parents = 1, 2583 .flags = CLK_SET_RATE_PARENT, 2584 .ops = &clk_branch2_ops, 2585 }, 2586 }, 2587 }; 2588 2589 static struct clk_branch gcc_emac0_phy_aux_clk = { 2590 .halt_reg = 0xad018, 2591 .halt_check = BRANCH_HALT, 2592 .clkr = { 2593 .enable_reg = 0xad018, 2594 .enable_mask = BIT(0), 2595 .hw.init = &(const struct clk_init_data) { 2596 .name = "gcc_emac0_phy_aux_clk", 2597 .parent_hws = (const struct clk_hw*[]) { 2598 &gcc_emac0_phy_aux_clk_src.clkr.hw, 2599 }, 2600 .num_parents = 1, 2601 .flags = CLK_SET_RATE_PARENT, 2602 .ops = &clk_branch2_ops, 2603 }, 2604 }, 2605 }; 2606 2607 static struct clk_branch gcc_emac0_ptp_clk = { 2608 .halt_reg = 0xad034, 2609 .halt_check = BRANCH_HALT, 2610 .clkr = { 2611 .enable_reg = 0xad034, 2612 .enable_mask = BIT(0), 2613 .hw.init = &(const struct clk_init_data) { 2614 .name = "gcc_emac0_ptp_clk", 2615 .parent_hws = (const struct clk_hw*[]) { 2616 &gcc_emac0_ptp_clk_src.clkr.hw, 2617 }, 2618 .num_parents = 1, 2619 .flags = CLK_SET_RATE_PARENT, 2620 .ops = &clk_branch2_ops, 2621 }, 2622 }, 2623 }; 2624 2625 static struct clk_branch gcc_emac0_rgmii_clk = { 2626 .halt_reg = 0xad038, 2627 .halt_check = BRANCH_HALT, 2628 .clkr = { 2629 .enable_reg = 0xad038, 2630 .enable_mask = BIT(0), 2631 .hw.init = &(const struct clk_init_data) { 2632 .name = "gcc_emac0_rgmii_clk", 2633 .parent_hws = (const struct clk_hw*[]) { 2634 &gcc_emac0_rgmii_clk_src.clkr.hw, 2635 }, 2636 .num_parents = 1, 2637 .flags = CLK_SET_RATE_PARENT, 2638 .ops = &clk_branch2_ops, 2639 }, 2640 }, 2641 }; 2642 2643 static struct clk_branch gcc_emac1_ahb_clk = { 2644 .halt_reg = 0xae010, 2645 .halt_check = BRANCH_HALT_VOTED, 2646 .hwcg_reg = 0xae010, 2647 .hwcg_bit = 1, 2648 .clkr = { 2649 .enable_reg = 0xae010, 2650 .enable_mask = BIT(0), 2651 .hw.init = &(const struct clk_init_data) { 2652 .name = "gcc_emac1_ahb_clk", 2653 .ops = &clk_branch2_ops, 2654 }, 2655 }, 2656 }; 2657 2658 static struct clk_branch gcc_emac1_axi_clk = { 2659 .halt_reg = 0xae014, 2660 .halt_check = BRANCH_HALT_VOTED, 2661 .hwcg_reg = 0xae014, 2662 .hwcg_bit = 1, 2663 .clkr = { 2664 .enable_reg = 0xae014, 2665 .enable_mask = BIT(0), 2666 .hw.init = &(const struct clk_init_data) { 2667 .name = "gcc_emac1_axi_clk", 2668 .parent_hws = (const struct clk_hw*[]) { 2669 &gcc_emac1_axi_clk_src.clkr.hw, 2670 }, 2671 .num_parents = 1, 2672 .flags = CLK_SET_RATE_PARENT, 2673 .ops = &clk_branch2_ops, 2674 }, 2675 }, 2676 }; 2677 2678 static struct clk_branch gcc_emac1_axi_sys_noc_clk = { 2679 .halt_reg = 0x109f4, 2680 .halt_check = BRANCH_HALT_VOTED, 2681 .hwcg_reg = 0x109f4, 2682 .hwcg_bit = 1, 2683 .clkr = { 2684 .enable_reg = 0x109f4, 2685 .enable_mask = BIT(0), 2686 .hw.init = &(const struct clk_init_data) { 2687 .name = "gcc_emac1_axi_sys_noc_clk", 2688 .parent_hws = (const struct clk_hw*[]) { 2689 &gcc_emac1_axi_clk_src.clkr.hw, 2690 }, 2691 .num_parents = 1, 2692 .flags = CLK_SET_RATE_PARENT, 2693 .ops = &clk_branch2_ops, 2694 }, 2695 }, 2696 }; 2697 2698 static struct clk_branch gcc_emac1_cc_sgmiiphy_rx_clk = { 2699 .halt_reg = 0xae044, 2700 .halt_check = BRANCH_HALT_DELAY, 2701 .clkr = { 2702 .enable_reg = 0xae044, 2703 .enable_mask = BIT(0), 2704 .hw.init = &(const struct clk_init_data) { 2705 .name = "gcc_emac1_cc_sgmiiphy_rx_clk", 2706 .parent_hws = (const struct clk_hw*[]) { 2707 &gcc_emac1_cc_sgmiiphy_rx_clk_src.clkr.hw, 2708 }, 2709 .num_parents = 1, 2710 .flags = CLK_SET_RATE_PARENT, 2711 .ops = &clk_branch2_ops, 2712 }, 2713 }, 2714 }; 2715 2716 static struct clk_branch gcc_emac1_cc_sgmiiphy_tx_clk = { 2717 .halt_reg = 0xae03c, 2718 .halt_check = BRANCH_HALT_DELAY, 2719 .hwcg_reg = 0xae03c, 2720 .hwcg_bit = 1, 2721 .clkr = { 2722 .enable_reg = 0xae03c, 2723 .enable_mask = BIT(0), 2724 .hw.init = &(const struct clk_init_data) { 2725 .name = "gcc_emac1_cc_sgmiiphy_tx_clk", 2726 .parent_hws = (const struct clk_hw*[]) { 2727 &gcc_emac1_cc_sgmiiphy_tx_clk_src.clkr.hw, 2728 }, 2729 .num_parents = 1, 2730 .flags = CLK_SET_RATE_PARENT, 2731 .ops = &clk_branch2_ops, 2732 }, 2733 }, 2734 }; 2735 2736 static struct clk_branch gcc_emac1_phy_aux_clk = { 2737 .halt_reg = 0xae018, 2738 .halt_check = BRANCH_HALT, 2739 .clkr = { 2740 .enable_reg = 0xae018, 2741 .enable_mask = BIT(0), 2742 .hw.init = &(const struct clk_init_data) { 2743 .name = "gcc_emac1_phy_aux_clk", 2744 .parent_hws = (const struct clk_hw*[]) { 2745 &gcc_emac1_phy_aux_clk_src.clkr.hw, 2746 }, 2747 .num_parents = 1, 2748 .flags = CLK_SET_RATE_PARENT, 2749 .ops = &clk_branch2_ops, 2750 }, 2751 }, 2752 }; 2753 2754 static struct clk_branch gcc_emac1_ptp_clk = { 2755 .halt_reg = 0xae034, 2756 .halt_check = BRANCH_HALT, 2757 .clkr = { 2758 .enable_reg = 0xae034, 2759 .enable_mask = BIT(0), 2760 .hw.init = &(const struct clk_init_data) { 2761 .name = "gcc_emac1_ptp_clk", 2762 .parent_hws = (const struct clk_hw*[]) { 2763 &gcc_emac1_ptp_clk_src.clkr.hw, 2764 }, 2765 .num_parents = 1, 2766 .flags = CLK_SET_RATE_PARENT, 2767 .ops = &clk_branch2_ops, 2768 }, 2769 }, 2770 }; 2771 2772 static struct clk_branch gcc_emac1_rgmii_clk = { 2773 .halt_reg = 0xae038, 2774 .halt_check = BRANCH_HALT, 2775 .clkr = { 2776 .enable_reg = 0xae038, 2777 .enable_mask = BIT(0), 2778 .hw.init = &(const struct clk_init_data) { 2779 .name = "gcc_emac1_rgmii_clk", 2780 .parent_hws = (const struct clk_hw*[]) { 2781 &gcc_emac1_rgmii_clk_src.clkr.hw, 2782 }, 2783 .num_parents = 1, 2784 .flags = CLK_SET_RATE_PARENT, 2785 .ops = &clk_branch2_ops, 2786 }, 2787 }, 2788 }; 2789 2790 static struct clk_branch gcc_gp1_clk = { 2791 .halt_reg = 0x4d000, 2792 .halt_check = BRANCH_HALT, 2793 .clkr = { 2794 .enable_reg = 0x4d000, 2795 .enable_mask = BIT(0), 2796 .hw.init = &(const struct clk_init_data) { 2797 .name = "gcc_gp1_clk", 2798 .parent_hws = (const struct clk_hw*[]) { 2799 &gcc_gp1_clk_src.clkr.hw, 2800 }, 2801 .num_parents = 1, 2802 .flags = CLK_SET_RATE_PARENT, 2803 .ops = &clk_branch2_ops, 2804 }, 2805 }, 2806 }; 2807 2808 static struct clk_branch gcc_gp2_clk = { 2809 .halt_reg = 0x4e000, 2810 .halt_check = BRANCH_HALT, 2811 .clkr = { 2812 .enable_reg = 0x4e000, 2813 .enable_mask = BIT(0), 2814 .hw.init = &(const struct clk_init_data) { 2815 .name = "gcc_gp2_clk", 2816 .parent_hws = (const struct clk_hw*[]) { 2817 &gcc_gp2_clk_src.clkr.hw, 2818 }, 2819 .num_parents = 1, 2820 .flags = CLK_SET_RATE_PARENT, 2821 .ops = &clk_branch2_ops, 2822 }, 2823 }, 2824 }; 2825 2826 static struct clk_branch gcc_gp3_clk = { 2827 .halt_reg = 0x4f000, 2828 .halt_check = BRANCH_HALT, 2829 .clkr = { 2830 .enable_reg = 0x4f000, 2831 .enable_mask = BIT(0), 2832 .hw.init = &(const struct clk_init_data) { 2833 .name = "gcc_gp3_clk", 2834 .parent_hws = (const struct clk_hw*[]) { 2835 &gcc_gp3_clk_src.clkr.hw, 2836 }, 2837 .num_parents = 1, 2838 .flags = CLK_SET_RATE_PARENT, 2839 .ops = &clk_branch2_ops, 2840 }, 2841 }, 2842 }; 2843 2844 static struct clk_branch gcc_gpu_gpll0_clk_src = { 2845 .halt_check = BRANCH_HALT_DELAY, 2846 .clkr = { 2847 .enable_reg = 0x7900c, 2848 .enable_mask = BIT(18), 2849 .hw.init = &(const struct clk_init_data) { 2850 .name = "gcc_gpu_gpll0_clk_src", 2851 .parent_hws = (const struct clk_hw*[]) { 2852 &gpll0.clkr.hw, 2853 }, 2854 .num_parents = 1, 2855 .flags = CLK_SET_RATE_PARENT, 2856 .ops = &clk_branch2_ops, 2857 }, 2858 }, 2859 }; 2860 2861 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 2862 .halt_check = BRANCH_HALT_DELAY, 2863 .clkr = { 2864 .enable_reg = 0x7900c, 2865 .enable_mask = BIT(19), 2866 .hw.init = &(const struct clk_init_data) { 2867 .name = "gcc_gpu_gpll0_div_clk_src", 2868 .parent_hws = (const struct clk_hw*[]) { 2869 &gpll0_out_aux2.clkr.hw, 2870 }, 2871 .num_parents = 1, 2872 .flags = CLK_SET_RATE_PARENT, 2873 .ops = &clk_branch2_ops, 2874 }, 2875 }, 2876 }; 2877 2878 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 2879 .halt_reg = 0x3600c, 2880 .halt_check = BRANCH_VOTED, 2881 .hwcg_reg = 0x3600c, 2882 .hwcg_bit = 1, 2883 .clkr = { 2884 .enable_reg = 0x3600c, 2885 .enable_mask = BIT(0), 2886 .hw.init = &(const struct clk_init_data) { 2887 .name = "gcc_gpu_memnoc_gfx_clk", 2888 .ops = &clk_branch2_aon_ops, 2889 }, 2890 }, 2891 }; 2892 2893 static struct clk_branch gcc_gpu_smmu_vote_clk = { 2894 .halt_reg = 0x7d000, 2895 .halt_check = BRANCH_HALT_VOTED, 2896 .clkr = { 2897 .enable_reg = 0x7d000, 2898 .enable_mask = BIT(0), 2899 .hw.init = &(const struct clk_init_data) { 2900 .name = "gcc_gpu_smmu_vote_clk", 2901 .ops = &clk_branch2_ops, 2902 }, 2903 }, 2904 }; 2905 2906 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 2907 .halt_reg = 0x36018, 2908 .halt_check = BRANCH_HALT, 2909 .clkr = { 2910 .enable_reg = 0x36018, 2911 .enable_mask = BIT(0), 2912 .hw.init = &(const struct clk_init_data) { 2913 .name = "gcc_gpu_snoc_dvm_gfx_clk", 2914 .ops = &clk_branch2_ops, 2915 }, 2916 }, 2917 }; 2918 2919 static struct clk_branch gcc_gpu_throttle_core_clk = { 2920 .halt_reg = 0x36048, 2921 .halt_check = BRANCH_HALT_VOTED, 2922 .hwcg_reg = 0x36048, 2923 .hwcg_bit = 1, 2924 .clkr = { 2925 .enable_reg = 0x7900c, 2926 .enable_mask = BIT(21), 2927 .hw.init = &(const struct clk_init_data) { 2928 .name = "gcc_gpu_throttle_core_clk", 2929 .ops = &clk_branch2_ops, 2930 }, 2931 }, 2932 }; 2933 2934 static struct clk_branch gcc_mmu_tcu_vote_clk = { 2935 .halt_reg = 0x7d06c, 2936 .halt_check = BRANCH_HALT_VOTED, 2937 .clkr = { 2938 .enable_reg = 0x7d06c, 2939 .enable_mask = BIT(0), 2940 .hw.init = &(const struct clk_init_data) { 2941 .name = "gcc_mmu_tcu_vote_clk", 2942 .ops = &clk_branch2_ops, 2943 }, 2944 }, 2945 }; 2946 2947 static struct clk_branch gcc_pcie_aux_clk = { 2948 .halt_reg = 0xaf044, 2949 .halt_check = BRANCH_HALT_VOTED, 2950 .hwcg_reg = 0xaf044, 2951 .hwcg_bit = 1, 2952 .clkr = { 2953 .enable_reg = 0x79018, 2954 .enable_mask = BIT(0), 2955 .hw.init = &(const struct clk_init_data) { 2956 .name = "gcc_pcie_aux_clk", 2957 .parent_hws = (const struct clk_hw*[]) { 2958 &gcc_pcie_aux_clk_src.clkr.hw, 2959 }, 2960 .num_parents = 1, 2961 .flags = CLK_SET_RATE_PARENT, 2962 .ops = &clk_branch2_ops, 2963 }, 2964 }, 2965 }; 2966 2967 static struct clk_branch gcc_pcie_cfg_ahb_clk = { 2968 .halt_reg = 0xaf010, 2969 .halt_check = BRANCH_HALT_VOTED, 2970 .hwcg_reg = 0xaf010, 2971 .hwcg_bit = 1, 2972 .clkr = { 2973 .enable_reg = 0x7900c, 2974 .enable_mask = BIT(27), 2975 .hw.init = &(const struct clk_init_data) { 2976 .name = "gcc_pcie_cfg_ahb_clk", 2977 .ops = &clk_branch2_ops, 2978 }, 2979 }, 2980 }; 2981 2982 static struct clk_branch gcc_pcie_clkref_en = { 2983 .halt_reg = 0xb8000, 2984 .halt_check = BRANCH_HALT_DELAY, 2985 .clkr = { 2986 .enable_reg = 0xb8000, 2987 .enable_mask = BIT(0), 2988 .hw.init = &(const struct clk_init_data) { 2989 .name = "gcc_pcie_clkref_en", 2990 .ops = &clk_branch2_ops, 2991 }, 2992 }, 2993 }; 2994 2995 static struct clk_branch gcc_pcie_mstr_axi_clk = { 2996 .halt_reg = 0xaf020, 2997 .halt_check = BRANCH_HALT_VOTED, 2998 .hwcg_reg = 0xaf020, 2999 .hwcg_bit = 1, 3000 .clkr = { 3001 .enable_reg = 0x7900c, 3002 .enable_mask = BIT(30), 3003 .hw.init = &(const struct clk_init_data) { 3004 .name = "gcc_pcie_mstr_axi_clk", 3005 .ops = &clk_branch2_ops, 3006 }, 3007 }, 3008 }; 3009 3010 static struct clk_branch gcc_pcie_pipe_clk = { 3011 .halt_reg = 0xaf050, 3012 .halt_check = BRANCH_HALT_DELAY, 3013 .hwcg_reg = 0xaf050, 3014 .hwcg_bit = 1, 3015 .clkr = { 3016 .enable_reg = 0x79018, 3017 .enable_mask = BIT(2), 3018 .hw.init = &(const struct clk_init_data) { 3019 .name = "gcc_pcie_pipe_clk", 3020 .parent_hws = (const struct clk_hw*[]) { 3021 &gcc_pcie_pipe_clk_src.clkr.hw, 3022 }, 3023 .num_parents = 1, 3024 .flags = CLK_SET_RATE_PARENT, 3025 .ops = &clk_branch2_ops, 3026 }, 3027 }, 3028 }; 3029 3030 static struct clk_branch gcc_pcie_rchng_phy_clk = { 3031 .halt_reg = 0xaf040, 3032 .halt_check = BRANCH_HALT_VOTED, 3033 .hwcg_reg = 0xaf040, 3034 .hwcg_bit = 1, 3035 .clkr = { 3036 .enable_reg = 0x7900c, 3037 .enable_mask = BIT(31), 3038 .hw.init = &(const struct clk_init_data) { 3039 .name = "gcc_pcie_rchng_phy_clk", 3040 .parent_hws = (const struct clk_hw*[]) { 3041 &gcc_pcie_rchng_phy_clk_src.clkr.hw, 3042 }, 3043 .num_parents = 1, 3044 .flags = CLK_SET_RATE_PARENT, 3045 .ops = &clk_branch2_ops, 3046 }, 3047 }, 3048 }; 3049 3050 static struct clk_branch gcc_pcie_sleep_clk = { 3051 .halt_reg = 0xaf04c, 3052 .halt_check = BRANCH_HALT_VOTED, 3053 .hwcg_reg = 0xaf04c, 3054 .hwcg_bit = 1, 3055 .clkr = { 3056 .enable_reg = 0x79018, 3057 .enable_mask = BIT(1), 3058 .hw.init = &(const struct clk_init_data) { 3059 .name = "gcc_pcie_sleep_clk", 3060 .parent_hws = (const struct clk_hw*[]) { 3061 &gcc_pcie_aux_phy_clk_src.clkr.hw, 3062 }, 3063 .num_parents = 1, 3064 .flags = CLK_SET_RATE_PARENT, 3065 .ops = &clk_branch2_ops, 3066 }, 3067 }, 3068 }; 3069 3070 static struct clk_branch gcc_pcie_slv_axi_clk = { 3071 .halt_reg = 0xaf018, 3072 .halt_check = BRANCH_HALT_VOTED, 3073 .clkr = { 3074 .enable_reg = 0x7900c, 3075 .enable_mask = BIT(29), 3076 .hw.init = &(const struct clk_init_data) { 3077 .name = "gcc_pcie_slv_axi_clk", 3078 .ops = &clk_branch2_ops, 3079 }, 3080 }, 3081 }; 3082 3083 static struct clk_branch gcc_pcie_slv_q2a_axi_clk = { 3084 .halt_reg = 0xaf014, 3085 .halt_check = BRANCH_HALT_VOTED, 3086 .hwcg_reg = 0xaf014, 3087 .hwcg_bit = 1, 3088 .clkr = { 3089 .enable_reg = 0x7900c, 3090 .enable_mask = BIT(28), 3091 .hw.init = &(const struct clk_init_data) { 3092 .name = "gcc_pcie_slv_q2a_axi_clk", 3093 .ops = &clk_branch2_ops, 3094 }, 3095 }, 3096 }; 3097 3098 static struct clk_branch gcc_pcie_tbu_clk = { 3099 .halt_reg = 0xaf098, 3100 .halt_check = BRANCH_HALT_VOTED, 3101 .hwcg_reg = 0xaf098, 3102 .hwcg_bit = 1, 3103 .clkr = { 3104 .enable_reg = 0x79018, 3105 .enable_mask = BIT(6), 3106 .hw.init = &(const struct clk_init_data) { 3107 .name = "gcc_pcie_tbu_clk", 3108 .ops = &clk_branch2_ops, 3109 }, 3110 }, 3111 }; 3112 3113 static struct clk_branch gcc_pcie_throttle_core_clk = { 3114 .halt_reg = 0xaf094, 3115 .halt_check = BRANCH_HALT_VOTED, 3116 .hwcg_reg = 0xaf094, 3117 .hwcg_bit = 1, 3118 .clkr = { 3119 .enable_reg = 0x79018, 3120 .enable_mask = BIT(5), 3121 .hw.init = &(const struct clk_init_data) { 3122 .name = "gcc_pcie_throttle_core_clk", 3123 .ops = &clk_branch2_ops, 3124 }, 3125 }, 3126 }; 3127 3128 static struct clk_branch gcc_pcie_throttle_xo_clk = { 3129 .halt_reg = 0xaf090, 3130 .halt_check = BRANCH_HALT_VOTED, 3131 .clkr = { 3132 .enable_reg = 0x79018, 3133 .enable_mask = BIT(4), 3134 .hw.init = &(const struct clk_init_data) { 3135 .name = "gcc_pcie_throttle_xo_clk", 3136 .ops = &clk_branch2_ops, 3137 }, 3138 }, 3139 }; 3140 3141 static struct clk_branch gcc_pcie_tile_axi_sys_noc_clk = { 3142 .halt_reg = 0x10f2c, 3143 .halt_check = BRANCH_HALT_VOTED, 3144 .hwcg_reg = 0x10f2c, 3145 .hwcg_bit = 1, 3146 .clkr = { 3147 .enable_reg = 0x10f2c, 3148 .enable_mask = BIT(0), 3149 .hw.init = &(const struct clk_init_data) { 3150 .name = "gcc_pcie_tile_axi_sys_noc_clk", 3151 .parent_hws = (const struct clk_hw*[]) { 3152 &gcc_emac0_axi_clk_src.clkr.hw, 3153 }, 3154 .num_parents = 1, 3155 .flags = CLK_SET_RATE_PARENT, 3156 .ops = &clk_branch2_ops, 3157 }, 3158 }, 3159 }; 3160 3161 static struct clk_branch gcc_pdm2_clk = { 3162 .halt_reg = 0x2000c, 3163 .halt_check = BRANCH_HALT, 3164 .clkr = { 3165 .enable_reg = 0x2000c, 3166 .enable_mask = BIT(0), 3167 .hw.init = &(const struct clk_init_data) { 3168 .name = "gcc_pdm2_clk", 3169 .parent_hws = (const struct clk_hw*[]) { 3170 &gcc_pdm2_clk_src.clkr.hw, 3171 }, 3172 .num_parents = 1, 3173 .flags = CLK_SET_RATE_PARENT, 3174 .ops = &clk_branch2_ops, 3175 }, 3176 }, 3177 }; 3178 3179 static struct clk_branch gcc_pdm_ahb_clk = { 3180 .halt_reg = 0x20004, 3181 .halt_check = BRANCH_HALT, 3182 .hwcg_reg = 0x20004, 3183 .hwcg_bit = 1, 3184 .clkr = { 3185 .enable_reg = 0x20004, 3186 .enable_mask = BIT(0), 3187 .hw.init = &(const struct clk_init_data) { 3188 .name = "gcc_pdm_ahb_clk", 3189 .ops = &clk_branch2_ops, 3190 }, 3191 }, 3192 }; 3193 3194 static struct clk_branch gcc_pdm_xo4_clk = { 3195 .halt_reg = 0x20008, 3196 .halt_check = BRANCH_HALT, 3197 .clkr = { 3198 .enable_reg = 0x20008, 3199 .enable_mask = BIT(0), 3200 .hw.init = &(const struct clk_init_data) { 3201 .name = "gcc_pdm_xo4_clk", 3202 .ops = &clk_branch2_ops, 3203 }, 3204 }, 3205 }; 3206 3207 static struct clk_branch gcc_pwm0_xo512_clk = { 3208 .halt_reg = 0x2002c, 3209 .halt_check = BRANCH_HALT, 3210 .clkr = { 3211 .enable_reg = 0x2002c, 3212 .enable_mask = BIT(0), 3213 .hw.init = &(const struct clk_init_data) { 3214 .name = "gcc_pwm0_xo512_clk", 3215 .ops = &clk_branch2_ops, 3216 }, 3217 }, 3218 }; 3219 3220 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 3221 .halt_reg = 0x17014, 3222 .halt_check = BRANCH_HALT_VOTED, 3223 .hwcg_reg = 0x17014, 3224 .hwcg_bit = 1, 3225 .clkr = { 3226 .enable_reg = 0x79004, 3227 .enable_mask = BIT(9), 3228 .hw.init = &(const struct clk_init_data) { 3229 .name = "gcc_qmip_camera_nrt_ahb_clk", 3230 .ops = &clk_branch2_ops, 3231 }, 3232 }, 3233 }; 3234 3235 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 3236 .halt_reg = 0x17060, 3237 .halt_check = BRANCH_HALT_VOTED, 3238 .hwcg_reg = 0x17060, 3239 .hwcg_bit = 1, 3240 .clkr = { 3241 .enable_reg = 0x79004, 3242 .enable_mask = BIT(12), 3243 .hw.init = &(const struct clk_init_data) { 3244 .name = "gcc_qmip_camera_rt_ahb_clk", 3245 .ops = &clk_branch2_ops, 3246 }, 3247 }, 3248 }; 3249 3250 static struct clk_branch gcc_qmip_disp_ahb_clk = { 3251 .halt_reg = 0x17018, 3252 .halt_check = BRANCH_HALT_VOTED, 3253 .hwcg_reg = 0x17018, 3254 .hwcg_bit = 1, 3255 .clkr = { 3256 .enable_reg = 0x79004, 3257 .enable_mask = BIT(10), 3258 .hw.init = &(const struct clk_init_data) { 3259 .name = "gcc_qmip_disp_ahb_clk", 3260 .ops = &clk_branch2_ops, 3261 }, 3262 }, 3263 }; 3264 3265 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = { 3266 .halt_reg = 0x36040, 3267 .halt_check = BRANCH_HALT_VOTED, 3268 .hwcg_reg = 0x36040, 3269 .hwcg_bit = 1, 3270 .clkr = { 3271 .enable_reg = 0x7900c, 3272 .enable_mask = BIT(20), 3273 .hw.init = &(const struct clk_init_data) { 3274 .name = "gcc_qmip_gpu_cfg_ahb_clk", 3275 .ops = &clk_branch2_ops, 3276 }, 3277 }, 3278 }; 3279 3280 static struct clk_branch gcc_qmip_pcie_cfg_ahb_clk = { 3281 .halt_reg = 0xaf08c, 3282 .halt_check = BRANCH_HALT_VOTED, 3283 .hwcg_reg = 0xaf08c, 3284 .hwcg_bit = 1, 3285 .clkr = { 3286 .enable_reg = 0x79018, 3287 .enable_mask = BIT(3), 3288 .hw.init = &(const struct clk_init_data) { 3289 .name = "gcc_qmip_pcie_cfg_ahb_clk", 3290 .ops = &clk_branch2_ops, 3291 }, 3292 }, 3293 }; 3294 3295 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 3296 .halt_reg = 0x17010, 3297 .halt_check = BRANCH_HALT_VOTED, 3298 .hwcg_reg = 0x17010, 3299 .hwcg_bit = 1, 3300 .clkr = { 3301 .enable_reg = 0x79004, 3302 .enable_mask = BIT(8), 3303 .hw.init = &(const struct clk_init_data) { 3304 .name = "gcc_qmip_video_vcodec_ahb_clk", 3305 .ops = &clk_branch2_ops, 3306 }, 3307 }, 3308 }; 3309 3310 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 3311 .halt_reg = 0x1f014, 3312 .halt_check = BRANCH_HALT_VOTED, 3313 .clkr = { 3314 .enable_reg = 0x79004, 3315 .enable_mask = BIT(21), 3316 .hw.init = &(const struct clk_init_data) { 3317 .name = "gcc_qupv3_wrap0_core_2x_clk", 3318 .ops = &clk_branch2_ops, 3319 }, 3320 }, 3321 }; 3322 3323 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 3324 .halt_reg = 0x1f00c, 3325 .halt_check = BRANCH_HALT_VOTED, 3326 .clkr = { 3327 .enable_reg = 0x79004, 3328 .enable_mask = BIT(20), 3329 .hw.init = &(const struct clk_init_data) { 3330 .name = "gcc_qupv3_wrap0_core_clk", 3331 .ops = &clk_branch2_ops, 3332 }, 3333 }, 3334 }; 3335 3336 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 3337 .halt_reg = 0x1f144, 3338 .halt_check = BRANCH_HALT_VOTED, 3339 .clkr = { 3340 .enable_reg = 0x79004, 3341 .enable_mask = BIT(22), 3342 .hw.init = &(const struct clk_init_data) { 3343 .name = "gcc_qupv3_wrap0_s0_clk", 3344 .parent_hws = (const struct clk_hw*[]) { 3345 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 3346 }, 3347 .num_parents = 1, 3348 .flags = CLK_SET_RATE_PARENT, 3349 .ops = &clk_branch2_ops, 3350 }, 3351 }, 3352 }; 3353 3354 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 3355 .halt_reg = 0x1f274, 3356 .halt_check = BRANCH_HALT_VOTED, 3357 .clkr = { 3358 .enable_reg = 0x79004, 3359 .enable_mask = BIT(23), 3360 .hw.init = &(const struct clk_init_data) { 3361 .name = "gcc_qupv3_wrap0_s1_clk", 3362 .parent_hws = (const struct clk_hw*[]) { 3363 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 3364 }, 3365 .num_parents = 1, 3366 .flags = CLK_SET_RATE_PARENT, 3367 .ops = &clk_branch2_ops, 3368 }, 3369 }, 3370 }; 3371 3372 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 3373 .halt_reg = 0x1f3a4, 3374 .halt_check = BRANCH_HALT_VOTED, 3375 .clkr = { 3376 .enable_reg = 0x79004, 3377 .enable_mask = BIT(24), 3378 .hw.init = &(const struct clk_init_data) { 3379 .name = "gcc_qupv3_wrap0_s2_clk", 3380 .parent_hws = (const struct clk_hw*[]) { 3381 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 3382 }, 3383 .num_parents = 1, 3384 .flags = CLK_SET_RATE_PARENT, 3385 .ops = &clk_branch2_ops, 3386 }, 3387 }, 3388 }; 3389 3390 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 3391 .halt_reg = 0x1f4d4, 3392 .halt_check = BRANCH_HALT_VOTED, 3393 .clkr = { 3394 .enable_reg = 0x79004, 3395 .enable_mask = BIT(25), 3396 .hw.init = &(const struct clk_init_data) { 3397 .name = "gcc_qupv3_wrap0_s3_clk", 3398 .parent_hws = (const struct clk_hw*[]) { 3399 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 3400 }, 3401 .num_parents = 1, 3402 .flags = CLK_SET_RATE_PARENT, 3403 .ops = &clk_branch2_ops, 3404 }, 3405 }, 3406 }; 3407 3408 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 3409 .halt_reg = 0x1f604, 3410 .halt_check = BRANCH_HALT_VOTED, 3411 .clkr = { 3412 .enable_reg = 0x79004, 3413 .enable_mask = BIT(26), 3414 .hw.init = &(const struct clk_init_data) { 3415 .name = "gcc_qupv3_wrap0_s4_clk", 3416 .parent_hws = (const struct clk_hw*[]) { 3417 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 3418 }, 3419 .num_parents = 1, 3420 .flags = CLK_SET_RATE_PARENT, 3421 .ops = &clk_branch2_ops, 3422 }, 3423 }, 3424 }; 3425 3426 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 3427 .halt_reg = 0x1f734, 3428 .halt_check = BRANCH_HALT_VOTED, 3429 .clkr = { 3430 .enable_reg = 0x79004, 3431 .enable_mask = BIT(27), 3432 .hw.init = &(const struct clk_init_data) { 3433 .name = "gcc_qupv3_wrap0_s5_clk", 3434 .parent_hws = (const struct clk_hw*[]) { 3435 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 3436 }, 3437 .num_parents = 1, 3438 .flags = CLK_SET_RATE_PARENT, 3439 .ops = &clk_branch2_ops, 3440 }, 3441 }, 3442 }; 3443 3444 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 3445 .halt_reg = 0x1f864, 3446 .halt_check = BRANCH_HALT_VOTED, 3447 .clkr = { 3448 .enable_reg = 0x79004, 3449 .enable_mask = BIT(28), 3450 .hw.init = &(const struct clk_init_data) { 3451 .name = "gcc_qupv3_wrap0_s6_clk", 3452 .parent_hws = (const struct clk_hw*[]) { 3453 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw, 3454 }, 3455 .num_parents = 1, 3456 .flags = CLK_SET_RATE_PARENT, 3457 .ops = &clk_branch2_ops, 3458 }, 3459 }, 3460 }; 3461 3462 static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 3463 .halt_reg = 0x1f994, 3464 .halt_check = BRANCH_HALT_VOTED, 3465 .clkr = { 3466 .enable_reg = 0x79004, 3467 .enable_mask = BIT(29), 3468 .hw.init = &(const struct clk_init_data) { 3469 .name = "gcc_qupv3_wrap0_s7_clk", 3470 .parent_hws = (const struct clk_hw*[]) { 3471 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw, 3472 }, 3473 .num_parents = 1, 3474 .flags = CLK_SET_RATE_PARENT, 3475 .ops = &clk_branch2_ops, 3476 }, 3477 }, 3478 }; 3479 3480 static struct clk_branch gcc_qupv3_wrap0_s8_clk = { 3481 .halt_reg = 0x1fac4, 3482 .halt_check = BRANCH_HALT_VOTED, 3483 .clkr = { 3484 .enable_reg = 0x79004, 3485 .enable_mask = BIT(30), 3486 .hw.init = &(const struct clk_init_data) { 3487 .name = "gcc_qupv3_wrap0_s8_clk", 3488 .parent_hws = (const struct clk_hw*[]) { 3489 &gcc_qupv3_wrap0_s8_clk_src.clkr.hw, 3490 }, 3491 .num_parents = 1, 3492 .flags = CLK_SET_RATE_PARENT, 3493 .ops = &clk_branch2_ops, 3494 }, 3495 }, 3496 }; 3497 3498 static struct clk_branch gcc_qupv3_wrap0_s9_clk = { 3499 .halt_reg = 0x1fbf4, 3500 .halt_check = BRANCH_HALT_VOTED, 3501 .clkr = { 3502 .enable_reg = 0x79004, 3503 .enable_mask = BIT(31), 3504 .hw.init = &(const struct clk_init_data) { 3505 .name = "gcc_qupv3_wrap0_s9_clk", 3506 .parent_hws = (const struct clk_hw*[]) { 3507 &gcc_qupv3_wrap0_s9_clk_src.clkr.hw, 3508 }, 3509 .num_parents = 1, 3510 .flags = CLK_SET_RATE_PARENT, 3511 .ops = &clk_branch2_ops, 3512 }, 3513 }, 3514 }; 3515 3516 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 3517 .halt_reg = 0x1f004, 3518 .halt_check = BRANCH_HALT_VOTED, 3519 .hwcg_reg = 0x1f004, 3520 .hwcg_bit = 1, 3521 .clkr = { 3522 .enable_reg = 0x79004, 3523 .enable_mask = BIT(18), 3524 .hw.init = &(const struct clk_init_data) { 3525 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 3526 .ops = &clk_branch2_ops, 3527 }, 3528 }, 3529 }; 3530 3531 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 3532 .halt_reg = 0x1f008, 3533 .halt_check = BRANCH_HALT_VOTED, 3534 .hwcg_reg = 0x1f008, 3535 .hwcg_bit = 1, 3536 .clkr = { 3537 .enable_reg = 0x79004, 3538 .enable_mask = BIT(19), 3539 .hw.init = &(const struct clk_init_data) { 3540 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 3541 .ops = &clk_branch2_ops, 3542 }, 3543 }, 3544 }; 3545 3546 static struct clk_branch gcc_sdcc1_ahb_clk = { 3547 .halt_reg = 0x38008, 3548 .halt_check = BRANCH_HALT, 3549 .hwcg_reg = 0x38008, 3550 .hwcg_bit = 1, 3551 .clkr = { 3552 .enable_reg = 0x38008, 3553 .enable_mask = BIT(0), 3554 .hw.init = &(const struct clk_init_data) { 3555 .name = "gcc_sdcc1_ahb_clk", 3556 .ops = &clk_branch2_ops, 3557 }, 3558 }, 3559 }; 3560 3561 static struct clk_branch gcc_sdcc1_apps_clk = { 3562 .halt_reg = 0x38004, 3563 .halt_check = BRANCH_HALT, 3564 .clkr = { 3565 .enable_reg = 0x38004, 3566 .enable_mask = BIT(0), 3567 .hw.init = &(const struct clk_init_data) { 3568 .name = "gcc_sdcc1_apps_clk", 3569 .parent_hws = (const struct clk_hw*[]) { 3570 &gcc_sdcc1_apps_clk_src.clkr.hw, 3571 }, 3572 .num_parents = 1, 3573 .flags = CLK_SET_RATE_PARENT, 3574 .ops = &clk_branch2_ops, 3575 }, 3576 }, 3577 }; 3578 3579 static struct clk_branch gcc_sdcc1_ice_core_clk = { 3580 .halt_reg = 0x3800c, 3581 .halt_check = BRANCH_HALT, 3582 .hwcg_reg = 0x3800c, 3583 .hwcg_bit = 1, 3584 .clkr = { 3585 .enable_reg = 0x3800c, 3586 .enable_mask = BIT(0), 3587 .hw.init = &(const struct clk_init_data) { 3588 .name = "gcc_sdcc1_ice_core_clk", 3589 .parent_hws = (const struct clk_hw*[]) { 3590 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 3591 }, 3592 .num_parents = 1, 3593 .flags = CLK_SET_RATE_PARENT, 3594 .ops = &clk_branch2_ops, 3595 }, 3596 }, 3597 }; 3598 3599 static struct clk_branch gcc_sdcc2_ahb_clk = { 3600 .halt_reg = 0x1e008, 3601 .halt_check = BRANCH_HALT, 3602 .hwcg_reg = 0x1e008, 3603 .hwcg_bit = 1, 3604 .clkr = { 3605 .enable_reg = 0x1e008, 3606 .enable_mask = BIT(0), 3607 .hw.init = &(const struct clk_init_data) { 3608 .name = "gcc_sdcc2_ahb_clk", 3609 .ops = &clk_branch2_ops, 3610 }, 3611 }, 3612 }; 3613 3614 static struct clk_branch gcc_sdcc2_apps_clk = { 3615 .halt_reg = 0x1e004, 3616 .halt_check = BRANCH_HALT, 3617 .clkr = { 3618 .enable_reg = 0x1e004, 3619 .enable_mask = BIT(0), 3620 .hw.init = &(const struct clk_init_data) { 3621 .name = "gcc_sdcc2_apps_clk", 3622 .parent_hws = (const struct clk_hw*[]) { 3623 &gcc_sdcc2_apps_clk_src.clkr.hw, 3624 }, 3625 .num_parents = 1, 3626 .flags = CLK_SET_RATE_PARENT, 3627 .ops = &clk_branch2_ops, 3628 }, 3629 }, 3630 }; 3631 3632 static struct clk_branch gcc_sys_noc_usb2_prim_axi_clk = { 3633 .halt_reg = 0x10a14, 3634 .halt_check = BRANCH_HALT_VOTED, 3635 .hwcg_reg = 0x10a14, 3636 .hwcg_bit = 1, 3637 .clkr = { 3638 .enable_reg = 0x10a14, 3639 .enable_mask = BIT(0), 3640 .hw.init = &(const struct clk_init_data) { 3641 .name = "gcc_sys_noc_usb2_prim_axi_clk", 3642 .parent_hws = (const struct clk_hw*[]) { 3643 &gcc_usb20_master_clk_src.clkr.hw, 3644 }, 3645 .num_parents = 1, 3646 .flags = CLK_SET_RATE_PARENT, 3647 .ops = &clk_branch2_ops, 3648 }, 3649 }, 3650 }; 3651 3652 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = { 3653 .halt_reg = 0x1a078, 3654 .halt_check = BRANCH_HALT_VOTED, 3655 .hwcg_reg = 0x1a078, 3656 .hwcg_bit = 1, 3657 .clkr = { 3658 .enable_reg = 0x1a078, 3659 .enable_mask = BIT(0), 3660 .hw.init = &(const struct clk_init_data) { 3661 .name = "gcc_sys_noc_usb3_prim_axi_clk", 3662 .parent_hws = (const struct clk_hw*[]) { 3663 &gcc_usb30_prim_master_clk_src.clkr.hw, 3664 }, 3665 .num_parents = 1, 3666 .flags = CLK_SET_RATE_PARENT, 3667 .ops = &clk_branch2_ops, 3668 }, 3669 }, 3670 }; 3671 3672 static struct clk_branch gcc_tscss_ahb_clk = { 3673 .halt_reg = 0xac024, 3674 .halt_check = BRANCH_HALT_VOTED, 3675 .hwcg_reg = 0xac024, 3676 .hwcg_bit = 1, 3677 .clkr = { 3678 .enable_reg = 0xac024, 3679 .enable_mask = BIT(0), 3680 .hw.init = &(const struct clk_init_data) { 3681 .name = "gcc_tscss_ahb_clk", 3682 .ops = &clk_branch2_ops, 3683 }, 3684 }, 3685 }; 3686 3687 static struct clk_branch gcc_tscss_cntr_clk = { 3688 .halt_reg = 0xac020, 3689 .halt_check = BRANCH_HALT, 3690 .clkr = { 3691 .enable_reg = 0xac020, 3692 .enable_mask = BIT(0), 3693 .hw.init = &(const struct clk_init_data) { 3694 .name = "gcc_tscss_cntr_clk", 3695 .parent_hws = (const struct clk_hw*[]) { 3696 &gcc_tscss_clk_src.clkr.hw, 3697 }, 3698 .num_parents = 1, 3699 .flags = CLK_SET_RATE_PARENT, 3700 .ops = &clk_branch2_ops, 3701 }, 3702 }, 3703 }; 3704 3705 static struct clk_branch gcc_tscss_etu_clk = { 3706 .halt_reg = 0xac01c, 3707 .halt_check = BRANCH_HALT, 3708 .clkr = { 3709 .enable_reg = 0xac01c, 3710 .enable_mask = BIT(0), 3711 .hw.init = &(const struct clk_init_data) { 3712 .name = "gcc_tscss_etu_clk", 3713 .parent_hws = (const struct clk_hw*[]) { 3714 &gcc_tscss_clk_src.clkr.hw, 3715 }, 3716 .num_parents = 1, 3717 .flags = CLK_SET_RATE_PARENT, 3718 .ops = &clk_branch2_ops, 3719 }, 3720 }, 3721 }; 3722 3723 static struct clk_branch gcc_ufs_clkref_en = { 3724 .halt_reg = 0x8c000, 3725 .halt_check = BRANCH_HALT_DELAY, 3726 .clkr = { 3727 .enable_reg = 0x8c000, 3728 .enable_mask = BIT(0), 3729 .hw.init = &(const struct clk_init_data) { 3730 .name = "gcc_ufs_clkref_en", 3731 .ops = &clk_branch2_ops, 3732 }, 3733 }, 3734 }; 3735 3736 static struct clk_branch gcc_usb20_master_clk = { 3737 .halt_reg = 0xb0010, 3738 .halt_check = BRANCH_HALT_VOTED, 3739 .hwcg_reg = 0xb0010, 3740 .hwcg_bit = 1, 3741 .clkr = { 3742 .enable_reg = 0xb0010, 3743 .enable_mask = BIT(0), 3744 .hw.init = &(const struct clk_init_data) { 3745 .name = "gcc_usb20_master_clk", 3746 .parent_hws = (const struct clk_hw*[]) { 3747 &gcc_usb20_master_clk_src.clkr.hw, 3748 }, 3749 .num_parents = 1, 3750 .flags = CLK_SET_RATE_PARENT, 3751 .ops = &clk_branch2_ops, 3752 }, 3753 }, 3754 }; 3755 3756 static struct clk_branch gcc_usb20_mock_utmi_clk = { 3757 .halt_reg = 0xb001c, 3758 .halt_check = BRANCH_HALT_VOTED, 3759 .clkr = { 3760 .enable_reg = 0xb001c, 3761 .enable_mask = BIT(0), 3762 .hw.init = &(const struct clk_init_data) { 3763 .name = "gcc_usb20_mock_utmi_clk", 3764 .parent_hws = (const struct clk_hw*[]) { 3765 &gcc_usb20_mock_utmi_postdiv_clk_src.clkr.hw, 3766 }, 3767 .num_parents = 1, 3768 .flags = CLK_SET_RATE_PARENT, 3769 .ops = &clk_branch2_ops, 3770 }, 3771 }, 3772 }; 3773 3774 static struct clk_branch gcc_usb20_sleep_clk = { 3775 .halt_reg = 0xb0018, 3776 .halt_check = BRANCH_HALT_VOTED, 3777 .clkr = { 3778 .enable_reg = 0xb0018, 3779 .enable_mask = BIT(0), 3780 .hw.init = &(const struct clk_init_data) { 3781 .name = "gcc_usb20_sleep_clk", 3782 .ops = &clk_branch2_ops, 3783 }, 3784 }, 3785 }; 3786 3787 static struct clk_branch gcc_usb30_prim_master_clk = { 3788 .halt_reg = 0x1a010, 3789 .halt_check = BRANCH_HALT, 3790 .hwcg_reg = 0x1a010, 3791 .hwcg_bit = 1, 3792 .clkr = { 3793 .enable_reg = 0x1a010, 3794 .enable_mask = BIT(0), 3795 .hw.init = &(const struct clk_init_data) { 3796 .name = "gcc_usb30_prim_master_clk", 3797 .parent_hws = (const struct clk_hw*[]) { 3798 &gcc_usb30_prim_master_clk_src.clkr.hw, 3799 }, 3800 .num_parents = 1, 3801 .flags = CLK_SET_RATE_PARENT, 3802 .ops = &clk_branch2_ops, 3803 }, 3804 }, 3805 }; 3806 3807 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3808 .halt_reg = 0x1a018, 3809 .halt_check = BRANCH_HALT, 3810 .clkr = { 3811 .enable_reg = 0x1a018, 3812 .enable_mask = BIT(0), 3813 .hw.init = &(const struct clk_init_data) { 3814 .name = "gcc_usb30_prim_mock_utmi_clk", 3815 .parent_hws = (const struct clk_hw*[]) { 3816 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 3817 }, 3818 .num_parents = 1, 3819 .flags = CLK_SET_RATE_PARENT, 3820 .ops = &clk_branch2_ops, 3821 }, 3822 }, 3823 }; 3824 3825 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3826 .halt_reg = 0x1a014, 3827 .halt_check = BRANCH_HALT, 3828 .clkr = { 3829 .enable_reg = 0x1a014, 3830 .enable_mask = BIT(0), 3831 .hw.init = &(const struct clk_init_data) { 3832 .name = "gcc_usb30_prim_sleep_clk", 3833 .ops = &clk_branch2_ops, 3834 }, 3835 }, 3836 }; 3837 3838 static struct clk_branch gcc_usb3_prim_clkref_en = { 3839 .halt_reg = 0x9f000, 3840 .halt_check = BRANCH_HALT_DELAY, 3841 .clkr = { 3842 .enable_reg = 0x9f000, 3843 .enable_mask = BIT(0), 3844 .hw.init = &(const struct clk_init_data) { 3845 .name = "gcc_usb3_prim_clkref_en", 3846 .ops = &clk_branch2_ops, 3847 }, 3848 }, 3849 }; 3850 3851 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3852 .halt_reg = 0x1a054, 3853 .halt_check = BRANCH_HALT, 3854 .clkr = { 3855 .enable_reg = 0x1a054, 3856 .enable_mask = BIT(0), 3857 .hw.init = &(const struct clk_init_data) { 3858 .name = "gcc_usb3_prim_phy_com_aux_clk", 3859 .parent_hws = (const struct clk_hw*[]) { 3860 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 3861 }, 3862 .num_parents = 1, 3863 .flags = CLK_SET_RATE_PARENT, 3864 .ops = &clk_branch2_ops, 3865 }, 3866 }, 3867 }; 3868 3869 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3870 .halt_reg = 0x1a058, 3871 .halt_check = BRANCH_HALT_DELAY, 3872 .hwcg_reg = 0x1a058, 3873 .hwcg_bit = 1, 3874 .clkr = { 3875 .enable_reg = 0x1a058, 3876 .enable_mask = BIT(0), 3877 .hw.init = &(const struct clk_init_data) { 3878 .name = "gcc_usb3_prim_phy_pipe_clk", 3879 .parent_hws = (const struct clk_hw*[]) { 3880 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 3881 }, 3882 .num_parents = 1, 3883 .flags = CLK_SET_RATE_PARENT, 3884 .ops = &clk_branch2_ops, 3885 }, 3886 }, 3887 }; 3888 3889 static struct clk_branch gcc_vcodec0_axi_clk = { 3890 .halt_reg = 0x6e008, 3891 .halt_check = BRANCH_HALT, 3892 .clkr = { 3893 .enable_reg = 0x6e008, 3894 .enable_mask = BIT(0), 3895 .hw.init = &(const struct clk_init_data) { 3896 .name = "gcc_vcodec0_axi_clk", 3897 .ops = &clk_branch2_ops, 3898 }, 3899 }, 3900 }; 3901 3902 static struct clk_branch gcc_venus_ahb_clk = { 3903 .halt_reg = 0x6e010, 3904 .halt_check = BRANCH_HALT, 3905 .clkr = { 3906 .enable_reg = 0x6e010, 3907 .enable_mask = BIT(0), 3908 .hw.init = &(const struct clk_init_data) { 3909 .name = "gcc_venus_ahb_clk", 3910 .ops = &clk_branch2_ops, 3911 }, 3912 }, 3913 }; 3914 3915 static struct clk_branch gcc_venus_ctl_axi_clk = { 3916 .halt_reg = 0x6e004, 3917 .halt_check = BRANCH_HALT, 3918 .clkr = { 3919 .enable_reg = 0x6e004, 3920 .enable_mask = BIT(0), 3921 .hw.init = &(const struct clk_init_data) { 3922 .name = "gcc_venus_ctl_axi_clk", 3923 .ops = &clk_branch2_ops, 3924 }, 3925 }, 3926 }; 3927 3928 static struct clk_branch gcc_video_axi0_clk = { 3929 .halt_reg = 0x1701c, 3930 .halt_check = BRANCH_HALT, 3931 .hwcg_reg = 0x1701c, 3932 .hwcg_bit = 1, 3933 .clkr = { 3934 .enable_reg = 0x1701c, 3935 .enable_mask = BIT(0), 3936 .hw.init = &(const struct clk_init_data) { 3937 .name = "gcc_video_axi0_clk", 3938 .ops = &clk_branch2_ops, 3939 }, 3940 }, 3941 }; 3942 3943 static struct clk_branch gcc_video_throttle_core_clk = { 3944 .halt_reg = 0x17068, 3945 .halt_check = BRANCH_HALT_VOTED, 3946 .hwcg_reg = 0x17068, 3947 .hwcg_bit = 1, 3948 .clkr = { 3949 .enable_reg = 0x79004, 3950 .enable_mask = BIT(14), 3951 .hw.init = &(const struct clk_init_data) { 3952 .name = "gcc_video_throttle_core_clk", 3953 .ops = &clk_branch2_ops, 3954 }, 3955 }, 3956 }; 3957 3958 static struct clk_branch gcc_video_vcodec0_sys_clk = { 3959 .halt_reg = 0x6d044, 3960 .halt_check = BRANCH_HALT_DELAY, 3961 .hwcg_reg = 0x6d044, 3962 .hwcg_bit = 1, 3963 .clkr = { 3964 .enable_reg = 0x6d044, 3965 .enable_mask = BIT(0), 3966 .hw.init = &(const struct clk_init_data) { 3967 .name = "gcc_video_vcodec0_sys_clk", 3968 .parent_hws = (const struct clk_hw*[]) { 3969 &gcc_video_venus_clk_src.clkr.hw, 3970 }, 3971 .num_parents = 1, 3972 .flags = CLK_SET_RATE_PARENT, 3973 .ops = &clk_branch2_ops, 3974 }, 3975 }, 3976 }; 3977 3978 static struct clk_branch gcc_video_venus_ctl_clk = { 3979 .halt_reg = 0x6d02c, 3980 .halt_check = BRANCH_HALT, 3981 .clkr = { 3982 .enable_reg = 0x6d02c, 3983 .enable_mask = BIT(0), 3984 .hw.init = &(const struct clk_init_data) { 3985 .name = "gcc_video_venus_ctl_clk", 3986 .parent_hws = (const struct clk_hw*[]) { 3987 &gcc_video_venus_clk_src.clkr.hw, 3988 }, 3989 .num_parents = 1, 3990 .flags = CLK_SET_RATE_PARENT, 3991 .ops = &clk_branch2_ops, 3992 }, 3993 }, 3994 }; 3995 3996 static struct gdsc gcc_camss_top_gdsc = { 3997 .gdscr = 0x58004, 3998 .en_rest_wait_val = 0x2, 3999 .en_few_wait_val = 0x2, 4000 .clk_dis_wait_val = 0xf, 4001 .pd = { 4002 .name = "gcc_camss_top_gdsc", 4003 }, 4004 .pwrsts = PWRSTS_OFF_ON, 4005 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4006 }; 4007 4008 static struct gdsc gcc_emac0_gdsc = { 4009 .gdscr = 0xad004, 4010 .en_rest_wait_val = 0x2, 4011 .en_few_wait_val = 0x2, 4012 .clk_dis_wait_val = 0x2, 4013 .pd = { 4014 .name = "gcc_emac0_gdsc", 4015 }, 4016 .pwrsts = PWRSTS_OFF_ON, 4017 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4018 }; 4019 4020 static struct gdsc gcc_emac1_gdsc = { 4021 .gdscr = 0xae004, 4022 .en_rest_wait_val = 0x2, 4023 .en_few_wait_val = 0x2, 4024 .clk_dis_wait_val = 0x2, 4025 .pd = { 4026 .name = "gcc_emac1_gdsc", 4027 }, 4028 .pwrsts = PWRSTS_OFF_ON, 4029 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4030 }; 4031 4032 static struct gdsc gcc_pcie_gdsc = { 4033 .gdscr = 0xaf004, 4034 .en_rest_wait_val = 0x2, 4035 .en_few_wait_val = 0x2, 4036 .clk_dis_wait_val = 0xf, 4037 .pd = { 4038 .name = "gcc_pcie_gdsc", 4039 }, 4040 .pwrsts = PWRSTS_OFF_ON, 4041 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4042 }; 4043 4044 static struct gdsc gcc_usb20_gdsc = { 4045 .gdscr = 0xb0004, 4046 .en_rest_wait_val = 0x2, 4047 .en_few_wait_val = 0x2, 4048 .clk_dis_wait_val = 0xf, 4049 .pd = { 4050 .name = "gcc_usb20_gdsc", 4051 }, 4052 .pwrsts = PWRSTS_OFF_ON, 4053 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4054 }; 4055 4056 static struct gdsc gcc_usb30_prim_gdsc = { 4057 .gdscr = 0x1a004, 4058 .en_rest_wait_val = 0x2, 4059 .en_few_wait_val = 0x2, 4060 .clk_dis_wait_val = 0x2, 4061 .pd = { 4062 .name = "gcc_usb30_prim_gdsc", 4063 }, 4064 .pwrsts = PWRSTS_OFF_ON, 4065 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4066 }; 4067 4068 static struct gdsc gcc_venus_gdsc = { 4069 .gdscr = 0x6d01c, 4070 .en_rest_wait_val = 0x2, 4071 .en_few_wait_val = 0x2, 4072 .clk_dis_wait_val = 0xf, 4073 .pd = { 4074 .name = "gcc_venus_gdsc", 4075 }, 4076 .pwrsts = PWRSTS_OFF_ON, 4077 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4078 }; 4079 4080 static struct gdsc gcc_vcodec0_gdsc = { 4081 .gdscr = 0x6d038, 4082 .en_rest_wait_val = 0x2, 4083 .en_few_wait_val = 0x2, 4084 .clk_dis_wait_val = 0xf, 4085 .pd = { 4086 .name = "gcc_vcodec0_gdsc", 4087 }, 4088 .pwrsts = PWRSTS_OFF_ON, 4089 .parent = &gcc_venus_gdsc.pd, 4090 .flags = HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 4091 }; 4092 4093 static struct clk_regmap *gcc_shikra_clocks[] = { 4094 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr, 4095 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr, 4096 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 4097 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr, 4098 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr, 4099 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr, 4100 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr, 4101 [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr, 4102 [GCC_CAMSS_CAMNOC_DRAGONLINK_ATB_CLK] = &gcc_camss_camnoc_dragonlink_atb_clk.clkr, 4103 [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr, 4104 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr, 4105 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr, 4106 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr, 4107 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr, 4108 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 4109 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr, 4110 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 4111 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr, 4112 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 4113 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr, 4114 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 4115 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr, 4116 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 4117 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr, 4118 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr, 4119 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr, 4120 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr, 4121 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr, 4122 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr, 4123 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr, 4124 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr, 4125 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr, 4126 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr, 4127 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr, 4128 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr, 4129 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr, 4130 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr, 4131 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr, 4132 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr, 4133 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr, 4134 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr, 4135 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr, 4136 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr, 4137 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 4138 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr, 4139 [GCC_CFG_NOC_USB2_PRIM_AXI_CLK] = &gcc_cfg_noc_usb2_prim_axi_clk.clkr, 4140 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 4141 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 4142 [GCC_DDRSS_MEMNOC_PCIE_SF_CLK] = &gcc_ddrss_memnoc_pcie_sf_clk.clkr, 4143 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr, 4144 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr, 4145 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 4146 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr, 4147 [GCC_EMAC0_AHB_CLK] = &gcc_emac0_ahb_clk.clkr, 4148 [GCC_EMAC0_AXI_CLK] = &gcc_emac0_axi_clk.clkr, 4149 [GCC_EMAC0_AXI_CLK_SRC] = &gcc_emac0_axi_clk_src.clkr, 4150 [GCC_EMAC0_AXI_SYS_NOC_CLK] = &gcc_emac0_axi_sys_noc_clk.clkr, 4151 [GCC_EMAC0_CC_SGMIIPHY_RX_CLK] = &gcc_emac0_cc_sgmiiphy_rx_clk.clkr, 4152 [GCC_EMAC0_CC_SGMIIPHY_RX_CLK_SRC] = &gcc_emac0_cc_sgmiiphy_rx_clk_src.clkr, 4153 [GCC_EMAC0_CC_SGMIIPHY_TX_CLK] = &gcc_emac0_cc_sgmiiphy_tx_clk.clkr, 4154 [GCC_EMAC0_CC_SGMIIPHY_TX_CLK_SRC] = &gcc_emac0_cc_sgmiiphy_tx_clk_src.clkr, 4155 [GCC_EMAC0_PHY_AUX_CLK] = &gcc_emac0_phy_aux_clk.clkr, 4156 [GCC_EMAC0_PHY_AUX_CLK_SRC] = &gcc_emac0_phy_aux_clk_src.clkr, 4157 [GCC_EMAC0_PTP_CLK] = &gcc_emac0_ptp_clk.clkr, 4158 [GCC_EMAC0_PTP_CLK_SRC] = &gcc_emac0_ptp_clk_src.clkr, 4159 [GCC_EMAC0_RGMII_CLK] = &gcc_emac0_rgmii_clk.clkr, 4160 [GCC_EMAC0_RGMII_CLK_SRC] = &gcc_emac0_rgmii_clk_src.clkr, 4161 [GCC_EMAC1_AHB_CLK] = &gcc_emac1_ahb_clk.clkr, 4162 [GCC_EMAC1_AXI_CLK] = &gcc_emac1_axi_clk.clkr, 4163 [GCC_EMAC1_AXI_CLK_SRC] = &gcc_emac1_axi_clk_src.clkr, 4164 [GCC_EMAC1_AXI_SYS_NOC_CLK] = &gcc_emac1_axi_sys_noc_clk.clkr, 4165 [GCC_EMAC1_CC_SGMIIPHY_RX_CLK] = &gcc_emac1_cc_sgmiiphy_rx_clk.clkr, 4166 [GCC_EMAC1_CC_SGMIIPHY_RX_CLK_SRC] = &gcc_emac1_cc_sgmiiphy_rx_clk_src.clkr, 4167 [GCC_EMAC1_CC_SGMIIPHY_TX_CLK] = &gcc_emac1_cc_sgmiiphy_tx_clk.clkr, 4168 [GCC_EMAC1_CC_SGMIIPHY_TX_CLK_SRC] = &gcc_emac1_cc_sgmiiphy_tx_clk_src.clkr, 4169 [GCC_EMAC1_PHY_AUX_CLK] = &gcc_emac1_phy_aux_clk.clkr, 4170 [GCC_EMAC1_PHY_AUX_CLK_SRC] = &gcc_emac1_phy_aux_clk_src.clkr, 4171 [GCC_EMAC1_PTP_CLK] = &gcc_emac1_ptp_clk.clkr, 4172 [GCC_EMAC1_PTP_CLK_SRC] = &gcc_emac1_ptp_clk_src.clkr, 4173 [GCC_EMAC1_RGMII_CLK] = &gcc_emac1_rgmii_clk.clkr, 4174 [GCC_EMAC1_RGMII_CLK_SRC] = &gcc_emac1_rgmii_clk_src.clkr, 4175 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 4176 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 4177 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 4178 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 4179 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 4180 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 4181 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 4182 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 4183 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 4184 [GCC_GPU_SMMU_VOTE_CLK] = &gcc_gpu_smmu_vote_clk.clkr, 4185 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 4186 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr, 4187 [GCC_MMU_TCU_VOTE_CLK] = &gcc_mmu_tcu_vote_clk.clkr, 4188 [GCC_PCIE_AUX_CLK] = &gcc_pcie_aux_clk.clkr, 4189 [GCC_PCIE_AUX_CLK_SRC] = &gcc_pcie_aux_clk_src.clkr, 4190 [GCC_PCIE_AUX_PHY_CLK_SRC] = &gcc_pcie_aux_phy_clk_src.clkr, 4191 [GCC_PCIE_CFG_AHB_CLK] = &gcc_pcie_cfg_ahb_clk.clkr, 4192 [GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr, 4193 [GCC_PCIE_MSTR_AXI_CLK] = &gcc_pcie_mstr_axi_clk.clkr, 4194 [GCC_PCIE_PIPE_CLK] = &gcc_pcie_pipe_clk.clkr, 4195 [GCC_PCIE_PIPE_CLK_SRC] = &gcc_pcie_pipe_clk_src.clkr, 4196 [GCC_PCIE_RCHNG_PHY_CLK] = &gcc_pcie_rchng_phy_clk.clkr, 4197 [GCC_PCIE_RCHNG_PHY_CLK_SRC] = &gcc_pcie_rchng_phy_clk_src.clkr, 4198 [GCC_PCIE_SLEEP_CLK] = &gcc_pcie_sleep_clk.clkr, 4199 [GCC_PCIE_SLV_AXI_CLK] = &gcc_pcie_slv_axi_clk.clkr, 4200 [GCC_PCIE_SLV_Q2A_AXI_CLK] = &gcc_pcie_slv_q2a_axi_clk.clkr, 4201 [GCC_PCIE_TBU_CLK] = &gcc_pcie_tbu_clk.clkr, 4202 [GCC_PCIE_THROTTLE_CORE_CLK] = &gcc_pcie_throttle_core_clk.clkr, 4203 [GCC_PCIE_THROTTLE_XO_CLK] = &gcc_pcie_throttle_xo_clk.clkr, 4204 [GCC_PCIE_TILE_AXI_SYS_NOC_CLK] = &gcc_pcie_tile_axi_sys_noc_clk.clkr, 4205 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 4206 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 4207 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 4208 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 4209 [GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr, 4210 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 4211 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 4212 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 4213 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr, 4214 [GCC_QMIP_PCIE_CFG_AHB_CLK] = &gcc_qmip_pcie_cfg_ahb_clk.clkr, 4215 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 4216 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 4217 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 4218 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 4219 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 4220 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 4221 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 4222 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 4223 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 4224 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 4225 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 4226 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 4227 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 4228 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 4229 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 4230 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 4231 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 4232 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 4233 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 4234 [GCC_QUPV3_WRAP0_S8_CLK] = &gcc_qupv3_wrap0_s8_clk.clkr, 4235 [GCC_QUPV3_WRAP0_S8_CLK_SRC] = &gcc_qupv3_wrap0_s8_clk_src.clkr, 4236 [GCC_QUPV3_WRAP0_S9_CLK] = &gcc_qupv3_wrap0_s9_clk.clkr, 4237 [GCC_QUPV3_WRAP0_S9_CLK_SRC] = &gcc_qupv3_wrap0_s9_clk_src.clkr, 4238 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 4239 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 4240 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 4241 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 4242 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 4243 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 4244 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 4245 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 4246 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 4247 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 4248 [GCC_SYS_NOC_USB2_PRIM_AXI_CLK] = &gcc_sys_noc_usb2_prim_axi_clk.clkr, 4249 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr, 4250 [GCC_TSCSS_AHB_CLK] = &gcc_tscss_ahb_clk.clkr, 4251 [GCC_TSCSS_CLK_SRC] = &gcc_tscss_clk_src.clkr, 4252 [GCC_TSCSS_CNTR_CLK] = &gcc_tscss_cntr_clk.clkr, 4253 [GCC_TSCSS_ETU_CLK] = &gcc_tscss_etu_clk.clkr, 4254 [GCC_UFS_CLKREF_EN] = &gcc_ufs_clkref_en.clkr, 4255 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr, 4256 [GCC_USB20_MASTER_CLK_SRC] = &gcc_usb20_master_clk_src.clkr, 4257 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr, 4258 [GCC_USB20_MOCK_UTMI_CLK_SRC] = &gcc_usb20_mock_utmi_clk_src.clkr, 4259 [GCC_USB20_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb20_mock_utmi_postdiv_clk_src.clkr, 4260 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr, 4261 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 4262 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 4263 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 4264 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 4265 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 4266 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 4267 [GCC_USB3_PRIM_CLKREF_EN] = &gcc_usb3_prim_clkref_en.clkr, 4268 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 4269 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 4270 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 4271 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr, 4272 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr, 4273 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr, 4274 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr, 4275 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 4276 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr, 4277 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr, 4278 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr, 4279 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr, 4280 [GPLL0] = &gpll0.clkr, 4281 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr, 4282 [GPLL10] = &gpll10.clkr, 4283 [GPLL11] = &gpll11.clkr, 4284 [GPLL12] = &gpll12.clkr, 4285 [GPLL12_OUT_AUX2] = &gpll12_out_aux2.clkr, 4286 [GPLL3] = &gpll3.clkr, 4287 [GPLL3_OUT_MAIN] = &gpll3_out_main.clkr, 4288 [GPLL4] = &gpll4.clkr, 4289 [GPLL5] = &gpll5.clkr, 4290 [GPLL6] = &gpll6.clkr, 4291 [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr, 4292 [GPLL7] = &gpll7.clkr, 4293 [GPLL8] = &gpll8.clkr, 4294 [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr, 4295 [GPLL9] = &gpll9.clkr, 4296 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr, 4297 }; 4298 4299 static struct gdsc *gcc_shikra_gdscs[] = { 4300 [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc, 4301 [GCC_EMAC0_GDSC] = &gcc_emac0_gdsc, 4302 [GCC_EMAC1_GDSC] = &gcc_emac1_gdsc, 4303 [GCC_PCIE_GDSC] = &gcc_pcie_gdsc, 4304 [GCC_USB20_GDSC] = &gcc_usb20_gdsc, 4305 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc, 4306 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc, 4307 [GCC_VENUS_GDSC] = &gcc_venus_gdsc, 4308 }; 4309 4310 static const struct qcom_reset_map gcc_shikra_resets[] = { 4311 [GCC_CAMSS_OPE_BCR] = { 0x55000 }, 4312 [GCC_CAMSS_TFE_BCR] = { 0x52000 }, 4313 [GCC_CAMSS_TOP_BCR] = { 0x58000 }, 4314 [GCC_EMAC0_BCR] = { 0xad000 }, 4315 [GCC_EMAC1_BCR] = { 0xae000 }, 4316 [GCC_GPU_BCR] = { 0x36000 }, 4317 [GCC_MMSS_BCR] = { 0x17000 }, 4318 [GCC_PCIE_BCR] = { 0xaf000 }, 4319 [GCC_PCIE_PHY_BCR] = { 0xb1000 }, 4320 [GCC_PDM_BCR] = { 0x20000 }, 4321 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 }, 4322 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 }, 4323 [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 }, 4324 [GCC_SDCC1_BCR] = { 0x38000 }, 4325 [GCC_SDCC2_BCR] = { 0x1e000 }, 4326 [GCC_TSCSS_BCR] = { 0xac000 }, 4327 [GCC_USB20_BCR] = { 0xb0000 }, 4328 [GCC_USB30_PRIM_BCR] = { 0x1a000 }, 4329 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 }, 4330 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1b020 }, 4331 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 }, 4332 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 }, 4333 [GCC_VCODEC0_BCR] = { 0x6d034 }, 4334 [GCC_VENUS_BCR] = { 0x6d018 }, 4335 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 }, 4336 }; 4337 4338 static struct clk_alpha_pll *gcc_shikra_plls[] = { 4339 &gpll10, 4340 &gpll11, 4341 &gpll8, 4342 &gpll9, 4343 }; 4344 4345 static const u32 gcc_shikra_critical_cbcrs[] = { 4346 0x17008, /* GCC_CAMERA_AHB_CLK */ 4347 0x17028, /* GCC_CAMERA_XO_CLK */ 4348 0x1700c, /* GCC_DISP_AHB_CLK */ 4349 0x1702c, /* GCC_DISP_XO_CLK */ 4350 0x36004, /* GCC_GPU_CFG_AHB_CLK */ 4351 0x36100, /* GCC_GPU_IREF_CLK */ 4352 0x3a00c, /* GCC_LPASS_CONFIG_CLK */ 4353 0x3a008, /* GCC_LPASS_CORE_AXIM_CLK */ 4354 0x79004, /* GCC_SYS_NOC_CPUSS_AHB_CLK */ 4355 0x17004, /* GCC_VIDEO_AHB_CLK */ 4356 0x17024, /* GCC_VIDEO_XO_CLK */ 4357 }; 4358 4359 static const struct clk_rcg_dfs_data gcc_shikra_dfs_clocks[] = { 4360 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 4361 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 4362 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 4363 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 4364 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 4365 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 4366 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src), 4367 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src), 4368 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s8_clk_src), 4369 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s9_clk_src), 4370 }; 4371 4372 static const struct regmap_config gcc_shikra_regmap_config = { 4373 .reg_bits = 32, 4374 .reg_stride = 4, 4375 .val_bits = 32, 4376 .max_register = 0xc7000, 4377 .fast_io = true, 4378 }; 4379 4380 static const struct qcom_cc_driver_data gcc_shikra_driver_data = { 4381 .alpha_plls = gcc_shikra_plls, 4382 .num_alpha_plls = ARRAY_SIZE(gcc_shikra_plls), 4383 .clk_cbcrs = gcc_shikra_critical_cbcrs, 4384 .num_clk_cbcrs = ARRAY_SIZE(gcc_shikra_critical_cbcrs), 4385 .dfs_rcgs = gcc_shikra_dfs_clocks, 4386 .num_dfs_rcgs = ARRAY_SIZE(gcc_shikra_dfs_clocks), 4387 }; 4388 4389 static const struct qcom_cc_desc gcc_shikra_desc = { 4390 .config = &gcc_shikra_regmap_config, 4391 .clks = gcc_shikra_clocks, 4392 .num_clks = ARRAY_SIZE(gcc_shikra_clocks), 4393 .resets = gcc_shikra_resets, 4394 .num_resets = ARRAY_SIZE(gcc_shikra_resets), 4395 .gdscs = gcc_shikra_gdscs, 4396 .num_gdscs = ARRAY_SIZE(gcc_shikra_gdscs), 4397 .driver_data = &gcc_shikra_driver_data, 4398 }; 4399 4400 static const struct of_device_id gcc_shikra_match_table[] = { 4401 { .compatible = "qcom,shikra-gcc" }, 4402 { } 4403 }; 4404 MODULE_DEVICE_TABLE(of, gcc_shikra_match_table); 4405 4406 static int gcc_shikra_probe(struct platform_device *pdev) 4407 { 4408 return qcom_cc_probe(pdev, &gcc_shikra_desc); 4409 } 4410 4411 static struct platform_driver gcc_shikra_driver = { 4412 .probe = gcc_shikra_probe, 4413 .driver = { 4414 .name = "gcc-shikra", 4415 .of_match_table = gcc_shikra_match_table, 4416 }, 4417 }; 4418 4419 static int __init gcc_shikra_init(void) 4420 { 4421 return platform_driver_register(&gcc_shikra_driver); 4422 } 4423 subsys_initcall(gcc_shikra_init); 4424 4425 static void __exit gcc_shikra_exit(void) 4426 { 4427 platform_driver_unregister(&gcc_shikra_driver); 4428 } 4429 module_exit(gcc_shikra_exit); 4430 4431 MODULE_DESCRIPTION("QTI GCC Shikra Driver"); 4432 MODULE_LICENSE("GPL"); 4433