1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2021, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. 5 * Copyright (c) 2023, Linaro Limited 6 */ 7 8 #include <linux/clk-provider.h> 9 #include <linux/mod_devicetable.h> 10 #include <linux/module.h> 11 #include <linux/platform_device.h> 12 #include <linux/regmap.h> 13 14 #include <dt-bindings/clock/qcom,sm8650-gcc.h> 15 16 #include "clk-alpha-pll.h" 17 #include "clk-branch.h" 18 #include "clk-rcg.h" 19 #include "clk-regmap.h" 20 #include "clk-regmap-divider.h" 21 #include "clk-regmap-mux.h" 22 #include "clk-regmap-phy-mux.h" 23 #include "gdsc.h" 24 #include "reset.h" 25 26 /* Need to match the order of clocks in DT binding */ 27 enum { 28 DT_BI_TCXO, 29 DT_BI_TCXO_AO, 30 DT_SLEEP_CLK, 31 32 DT_PCIE_0_PIPE, 33 DT_PCIE_1_PIPE, 34 DT_PCIE_1_PHY_AUX, 35 36 DT_UFS_PHY_RX_SYMBOL_0, 37 DT_UFS_PHY_RX_SYMBOL_1, 38 DT_UFS_PHY_TX_SYMBOL_0, 39 40 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE, 41 }; 42 43 enum { 44 P_BI_TCXO, 45 P_GCC_GPLL0_OUT_EVEN, 46 P_GCC_GPLL0_OUT_MAIN, 47 P_GCC_GPLL1_OUT_MAIN, 48 P_GCC_GPLL3_OUT_MAIN, 49 P_GCC_GPLL4_OUT_MAIN, 50 P_GCC_GPLL6_OUT_MAIN, 51 P_GCC_GPLL7_OUT_MAIN, 52 P_GCC_GPLL9_OUT_MAIN, 53 P_PCIE_0_PIPE_CLK, 54 P_PCIE_1_PHY_AUX_CLK, 55 P_PCIE_1_PIPE_CLK, 56 P_SLEEP_CLK, 57 P_UFS_PHY_RX_SYMBOL_0_CLK, 58 P_UFS_PHY_RX_SYMBOL_1_CLK, 59 P_UFS_PHY_TX_SYMBOL_0_CLK, 60 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 61 }; 62 63 static struct clk_alpha_pll gcc_gpll0 = { 64 .offset = 0x0, 65 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 66 .clkr = { 67 .enable_reg = 0x52020, 68 .enable_mask = BIT(0), 69 .hw.init = &(const struct clk_init_data) { 70 .name = "gcc_gpll0", 71 .parent_data = &(const struct clk_parent_data) { 72 .index = DT_BI_TCXO, 73 }, 74 .num_parents = 1, 75 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 76 }, 77 }, 78 }; 79 80 static struct clk_alpha_pll gcc_gpll0_ao = { 81 .offset = 0x0, 82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 83 .clkr = { 84 .enable_reg = 0x57020, 85 .enable_mask = BIT(0), 86 .hw.init = &(const struct clk_init_data) { 87 .name = "gcc_gpll0_ao", 88 .parent_data = &(const struct clk_parent_data) { 89 .index = DT_BI_TCXO_AO, 90 }, 91 .num_parents = 1, 92 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 93 }, 94 }, 95 }; 96 97 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = { 98 { 0x1, 2 }, 99 { } 100 }; 101 102 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = { 103 .offset = 0x0, 104 .post_div_shift = 10, 105 .post_div_table = post_div_table_gcc_gpll0_out_even, 106 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 107 .width = 4, 108 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 109 .clkr.hw.init = &(const struct clk_init_data) { 110 .name = "gcc_gpll0_out_even", 111 .parent_hws = (const struct clk_hw*[]) { 112 &gcc_gpll0.clkr.hw, 113 }, 114 .num_parents = 1, 115 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops, 116 }, 117 }; 118 119 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even_ao = { 120 .offset = 0x0, 121 .post_div_shift = 10, 122 .post_div_table = post_div_table_gcc_gpll0_out_even, 123 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 124 .width = 4, 125 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 126 .clkr.hw.init = &(const struct clk_init_data) { 127 .name = "gcc_gpll0_out_even_ao", 128 .parent_hws = (const struct clk_hw*[]) { 129 &gcc_gpll0_ao.clkr.hw, 130 }, 131 .num_parents = 1, 132 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops, 133 }, 134 }; 135 136 static struct clk_alpha_pll gcc_gpll1 = { 137 .offset = 0x4000, 138 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 139 .clkr = { 140 .enable_reg = 0x52020, 141 .enable_mask = BIT(1), 142 .hw.init = &(const struct clk_init_data) { 143 .name = "gcc_gpll1", 144 .parent_data = &(const struct clk_parent_data) { 145 .index = DT_BI_TCXO, 146 }, 147 .num_parents = 1, 148 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 149 }, 150 }, 151 }; 152 153 static struct clk_alpha_pll gcc_gpll1_ao = { 154 .offset = 0x1000, 155 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 156 .clkr = { 157 .enable_reg = 0x57020, 158 .enable_mask = BIT(1), 159 .hw.init = &(const struct clk_init_data) { 160 .name = "gcc_gpll1_ao", 161 .parent_data = &(const struct clk_parent_data) { 162 .index = DT_BI_TCXO_AO, 163 }, 164 .num_parents = 1, 165 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 166 }, 167 }, 168 }; 169 170 static struct clk_alpha_pll gcc_gpll3 = { 171 .offset = 0x3000, 172 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 173 .clkr = { 174 .enable_reg = 0x52020, 175 .enable_mask = BIT(3), 176 .hw.init = &(const struct clk_init_data) { 177 .name = "gcc_gpll3", 178 .parent_data = &(const struct clk_parent_data) { 179 .index = DT_BI_TCXO, 180 }, 181 .num_parents = 1, 182 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 183 }, 184 }, 185 }; 186 187 static struct clk_alpha_pll gcc_gpll3_ao = { 188 .offset = 0x3000, 189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 190 .clkr = { 191 .enable_reg = 0x57020, 192 .enable_mask = BIT(3), 193 .hw.init = &(const struct clk_init_data) { 194 .name = "gcc_gpll3_ao", 195 .parent_data = &(const struct clk_parent_data) { 196 .index = DT_BI_TCXO_AO, 197 }, 198 .num_parents = 1, 199 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 200 }, 201 }, 202 }; 203 204 static struct clk_alpha_pll gcc_gpll4 = { 205 .offset = 0x4000, 206 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 207 .clkr = { 208 .enable_reg = 0x52020, 209 .enable_mask = BIT(4), 210 .hw.init = &(const struct clk_init_data) { 211 .name = "gcc_gpll4", 212 .parent_data = &(const struct clk_parent_data) { 213 .index = DT_BI_TCXO, 214 }, 215 .num_parents = 1, 216 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 217 }, 218 }, 219 }; 220 221 static struct clk_alpha_pll gcc_gpll4_ao = { 222 .offset = 0x4000, 223 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 224 .clkr = { 225 .enable_reg = 0x57020, 226 .enable_mask = BIT(4), 227 .hw.init = &(const struct clk_init_data) { 228 .name = "gcc_gpll4_ao", 229 .parent_data = &(const struct clk_parent_data) { 230 .index = DT_BI_TCXO_AO, 231 }, 232 .num_parents = 1, 233 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 234 }, 235 }, 236 }; 237 238 static struct clk_alpha_pll gcc_gpll6 = { 239 .offset = 0x6000, 240 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 241 .clkr = { 242 .enable_reg = 0x52020, 243 .enable_mask = BIT(6), 244 .hw.init = &(const struct clk_init_data) { 245 .name = "gcc_gpll6", 246 .parent_data = &(const struct clk_parent_data) { 247 .index = DT_BI_TCXO, 248 }, 249 .num_parents = 1, 250 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 251 }, 252 }, 253 }; 254 255 static struct clk_alpha_pll gcc_gpll6_ao = { 256 .offset = 0x6000, 257 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 258 .clkr = { 259 .enable_reg = 0x57020, 260 .enable_mask = BIT(6), 261 .hw.init = &(const struct clk_init_data) { 262 .name = "gcc_gpll6_ao", 263 .parent_data = &(const struct clk_parent_data) { 264 .index = DT_BI_TCXO_AO, 265 }, 266 .num_parents = 1, 267 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 268 }, 269 }, 270 }; 271 272 static struct clk_alpha_pll gcc_gpll7 = { 273 .offset = 0x7000, 274 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 275 .clkr = { 276 .enable_reg = 0x52020, 277 .enable_mask = BIT(7), 278 .hw.init = &(const struct clk_init_data) { 279 .name = "gcc_gpll7", 280 .parent_data = &(const struct clk_parent_data) { 281 .index = DT_BI_TCXO, 282 }, 283 .num_parents = 1, 284 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 285 }, 286 }, 287 }; 288 289 static struct clk_alpha_pll gcc_gpll9 = { 290 .offset = 0x9000, 291 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 292 .clkr = { 293 .enable_reg = 0x52020, 294 .enable_mask = BIT(9), 295 .hw.init = &(const struct clk_init_data) { 296 .name = "gcc_gpll9", 297 .parent_data = &(const struct clk_parent_data) { 298 .index = DT_BI_TCXO, 299 }, 300 .num_parents = 1, 301 .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 302 }, 303 }, 304 }; 305 306 static const struct parent_map gcc_parent_map_0[] = { 307 { P_BI_TCXO, 0 }, 308 { P_GCC_GPLL0_OUT_MAIN, 1 }, 309 { P_GCC_GPLL0_OUT_EVEN, 6 }, 310 }; 311 312 static const struct clk_parent_data gcc_parent_data_0[] = { 313 { .index = DT_BI_TCXO }, 314 { .hw = &gcc_gpll0.clkr.hw }, 315 { .hw = &gcc_gpll0_out_even.clkr.hw }, 316 }; 317 318 static const struct parent_map gcc_parent_map_1[] = { 319 { P_BI_TCXO, 0 }, 320 { P_GCC_GPLL0_OUT_MAIN, 1 }, 321 { P_SLEEP_CLK, 5 }, 322 { P_GCC_GPLL0_OUT_EVEN, 6 }, 323 }; 324 325 static const struct clk_parent_data gcc_parent_data_1[] = { 326 { .index = DT_BI_TCXO }, 327 { .hw = &gcc_gpll0.clkr.hw }, 328 { .index = DT_SLEEP_CLK }, 329 { .hw = &gcc_gpll0_out_even.clkr.hw }, 330 }; 331 332 static const struct parent_map gcc_parent_map_2[] = { 333 { P_BI_TCXO, 0 }, 334 { P_GCC_GPLL0_OUT_MAIN, 1 }, 335 { P_GCC_GPLL1_OUT_MAIN, 4 }, 336 { P_GCC_GPLL4_OUT_MAIN, 5 }, 337 { P_GCC_GPLL0_OUT_EVEN, 6 }, 338 }; 339 340 static const struct clk_parent_data gcc_parent_data_2[] = { 341 { .index = DT_BI_TCXO }, 342 { .hw = &gcc_gpll0.clkr.hw }, 343 { .hw = &gcc_gpll1.clkr.hw }, 344 { .hw = &gcc_gpll4.clkr.hw }, 345 { .hw = &gcc_gpll0_out_even.clkr.hw }, 346 }; 347 348 static const struct parent_map gcc_parent_map_3[] = { 349 { P_BI_TCXO, 0 }, 350 { P_GCC_GPLL0_OUT_MAIN, 1 }, 351 { P_GCC_GPLL4_OUT_MAIN, 5 }, 352 { P_GCC_GPLL0_OUT_EVEN, 6 }, 353 }; 354 355 static const struct clk_parent_data gcc_parent_data_3[] = { 356 { .index = DT_BI_TCXO }, 357 { .hw = &gcc_gpll0.clkr.hw }, 358 { .hw = &gcc_gpll4.clkr.hw }, 359 { .hw = &gcc_gpll0_out_even.clkr.hw }, 360 }; 361 362 static const struct parent_map gcc_parent_map_4[] = { 363 { P_BI_TCXO, 0 }, 364 { P_SLEEP_CLK, 5 }, 365 }; 366 367 static const struct clk_parent_data gcc_parent_data_4[] = { 368 { .index = DT_BI_TCXO }, 369 { .index = DT_SLEEP_CLK }, 370 }; 371 372 static const struct parent_map gcc_parent_map_5[] = { 373 { P_BI_TCXO, 0 }, 374 }; 375 376 static const struct clk_parent_data gcc_parent_data_5[] = { 377 { .index = DT_BI_TCXO }, 378 }; 379 380 static const struct parent_map gcc_parent_map_8[] = { 381 { P_PCIE_1_PHY_AUX_CLK, 0 }, 382 { P_BI_TCXO, 2 }, 383 }; 384 385 static const struct clk_parent_data gcc_parent_data_8[] = { 386 { .index = DT_PCIE_1_PHY_AUX }, 387 { .index = DT_BI_TCXO }, 388 }; 389 390 static const struct parent_map gcc_parent_map_10[] = { 391 { P_BI_TCXO, 0 }, 392 { P_GCC_GPLL0_OUT_MAIN, 1 }, 393 { P_GCC_GPLL7_OUT_MAIN, 2 }, 394 { P_GCC_GPLL0_OUT_EVEN, 6 }, 395 }; 396 397 static const struct clk_parent_data gcc_parent_data_10[] = { 398 { .index = DT_BI_TCXO }, 399 { .hw = &gcc_gpll0.clkr.hw }, 400 { .hw = &gcc_gpll7.clkr.hw }, 401 { .hw = &gcc_gpll0_out_even.clkr.hw }, 402 }; 403 404 static const struct parent_map gcc_parent_map_11[] = { 405 { P_BI_TCXO, 0 }, 406 { P_GCC_GPLL0_OUT_MAIN, 1 }, 407 { P_GCC_GPLL9_OUT_MAIN, 2 }, 408 { P_GCC_GPLL4_OUT_MAIN, 5 }, 409 { P_GCC_GPLL0_OUT_EVEN, 6 }, 410 }; 411 412 static const struct clk_parent_data gcc_parent_data_11[] = { 413 { .index = DT_BI_TCXO }, 414 { .hw = &gcc_gpll0.clkr.hw }, 415 { .hw = &gcc_gpll9.clkr.hw }, 416 { .hw = &gcc_gpll4.clkr.hw }, 417 { .hw = &gcc_gpll0_out_even.clkr.hw }, 418 }; 419 420 static const struct parent_map gcc_parent_map_12[] = { 421 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 }, 422 { P_BI_TCXO, 2 }, 423 }; 424 425 static const struct clk_parent_data gcc_parent_data_12[] = { 426 { .index = DT_UFS_PHY_RX_SYMBOL_0 }, 427 { .index = DT_BI_TCXO }, 428 }; 429 430 static const struct parent_map gcc_parent_map_13[] = { 431 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 }, 432 { P_BI_TCXO, 2 }, 433 }; 434 435 static const struct clk_parent_data gcc_parent_data_13[] = { 436 { .index = DT_UFS_PHY_RX_SYMBOL_1 }, 437 { .index = DT_BI_TCXO }, 438 }; 439 440 static const struct parent_map gcc_parent_map_14[] = { 441 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 }, 442 { P_BI_TCXO, 2 }, 443 }; 444 445 static const struct clk_parent_data gcc_parent_data_14[] = { 446 { .index = DT_UFS_PHY_TX_SYMBOL_0 }, 447 { .index = DT_BI_TCXO }, 448 }; 449 450 static const struct parent_map gcc_parent_map_15[] = { 451 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 }, 452 { P_BI_TCXO, 2 }, 453 }; 454 455 static const struct clk_parent_data gcc_parent_data_15[] = { 456 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE }, 457 { .index = DT_BI_TCXO }, 458 }; 459 460 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = { 461 .reg = 0x6b070, 462 .clkr = { 463 .hw.init = &(const struct clk_init_data) { 464 .name = "gcc_pcie_0_pipe_clk_src", 465 .parent_data = &(const struct clk_parent_data){ 466 .index = DT_PCIE_0_PIPE, 467 }, 468 .num_parents = 1, 469 .ops = &clk_regmap_phy_mux_ops, 470 }, 471 }, 472 }; 473 474 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = { 475 .reg = 0x8d094, 476 .shift = 0, 477 .width = 2, 478 .parent_map = gcc_parent_map_8, 479 .clkr = { 480 .hw.init = &(const struct clk_init_data) { 481 .name = "gcc_pcie_1_phy_aux_clk_src", 482 .parent_data = gcc_parent_data_8, 483 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 484 .ops = &clk_regmap_mux_closest_ops, 485 }, 486 }, 487 }; 488 489 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = { 490 .reg = 0x8d078, 491 .clkr = { 492 .hw.init = &(const struct clk_init_data) { 493 .name = "gcc_pcie_1_pipe_clk_src", 494 .parent_data = &(const struct clk_parent_data){ 495 .index = DT_PCIE_1_PIPE, 496 }, 497 .num_parents = 1, 498 .ops = &clk_regmap_phy_mux_ops, 499 }, 500 }, 501 }; 502 503 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = { 504 .reg = 0x77064, 505 .shift = 0, 506 .width = 2, 507 .parent_map = gcc_parent_map_12, 508 .clkr = { 509 .hw.init = &(const struct clk_init_data) { 510 .name = "gcc_ufs_phy_rx_symbol_0_clk_src", 511 .parent_data = gcc_parent_data_12, 512 .num_parents = ARRAY_SIZE(gcc_parent_data_12), 513 .ops = &clk_regmap_mux_closest_ops, 514 }, 515 }, 516 }; 517 518 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = { 519 .reg = 0x770e0, 520 .shift = 0, 521 .width = 2, 522 .parent_map = gcc_parent_map_13, 523 .clkr = { 524 .hw.init = &(const struct clk_init_data) { 525 .name = "gcc_ufs_phy_rx_symbol_1_clk_src", 526 .parent_data = gcc_parent_data_13, 527 .num_parents = ARRAY_SIZE(gcc_parent_data_13), 528 .ops = &clk_regmap_mux_closest_ops, 529 }, 530 }, 531 }; 532 533 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = { 534 .reg = 0x77054, 535 .shift = 0, 536 .width = 2, 537 .parent_map = gcc_parent_map_14, 538 .clkr = { 539 .hw.init = &(const struct clk_init_data) { 540 .name = "gcc_ufs_phy_tx_symbol_0_clk_src", 541 .parent_data = gcc_parent_data_14, 542 .num_parents = ARRAY_SIZE(gcc_parent_data_14), 543 .ops = &clk_regmap_mux_closest_ops, 544 }, 545 }, 546 }; 547 548 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = { 549 .reg = 0x3906c, 550 .shift = 0, 551 .width = 2, 552 .parent_map = gcc_parent_map_15, 553 .clkr = { 554 .hw.init = &(const struct clk_init_data) { 555 .name = "gcc_usb3_prim_phy_pipe_clk_src", 556 .parent_data = gcc_parent_data_15, 557 .num_parents = ARRAY_SIZE(gcc_parent_data_15), 558 .ops = &clk_regmap_mux_closest_ops, 559 }, 560 }, 561 }; 562 563 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 564 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 565 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 566 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 567 { } 568 }; 569 570 static struct clk_rcg2 gcc_gp1_clk_src = { 571 .cmd_rcgr = 0x64004, 572 .mnd_width = 16, 573 .hid_width = 5, 574 .parent_map = gcc_parent_map_1, 575 .freq_tbl = ftbl_gcc_gp1_clk_src, 576 .clkr.hw.init = &(const struct clk_init_data) { 577 .name = "gcc_gp1_clk_src", 578 .parent_data = gcc_parent_data_1, 579 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 580 .flags = CLK_SET_RATE_PARENT, 581 .ops = &clk_rcg2_shared_ops, 582 }, 583 }; 584 585 static struct clk_rcg2 gcc_gp2_clk_src = { 586 .cmd_rcgr = 0x65004, 587 .mnd_width = 16, 588 .hid_width = 5, 589 .parent_map = gcc_parent_map_1, 590 .freq_tbl = ftbl_gcc_gp1_clk_src, 591 .clkr.hw.init = &(const struct clk_init_data) { 592 .name = "gcc_gp2_clk_src", 593 .parent_data = gcc_parent_data_1, 594 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 595 .flags = CLK_SET_RATE_PARENT, 596 .ops = &clk_rcg2_shared_ops, 597 }, 598 }; 599 600 static struct clk_rcg2 gcc_gp3_clk_src = { 601 .cmd_rcgr = 0x66004, 602 .mnd_width = 16, 603 .hid_width = 5, 604 .parent_map = gcc_parent_map_1, 605 .freq_tbl = ftbl_gcc_gp1_clk_src, 606 .clkr.hw.init = &(const struct clk_init_data) { 607 .name = "gcc_gp3_clk_src", 608 .parent_data = gcc_parent_data_1, 609 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 610 .flags = CLK_SET_RATE_PARENT, 611 .ops = &clk_rcg2_shared_ops, 612 }, 613 }; 614 615 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 616 F(19200000, P_BI_TCXO, 1, 0, 0), 617 { } 618 }; 619 620 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 621 .cmd_rcgr = 0x6b074, 622 .mnd_width = 16, 623 .hid_width = 5, 624 .parent_map = gcc_parent_map_4, 625 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 626 .clkr.hw.init = &(const struct clk_init_data) { 627 .name = "gcc_pcie_0_aux_clk_src", 628 .parent_data = gcc_parent_data_4, 629 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 630 .flags = CLK_SET_RATE_PARENT, 631 .ops = &clk_rcg2_shared_ops, 632 }, 633 }; 634 635 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = { 636 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 637 { } 638 }; 639 640 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = { 641 .cmd_rcgr = 0x6b058, 642 .mnd_width = 0, 643 .hid_width = 5, 644 .parent_map = gcc_parent_map_0, 645 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src, 646 .clkr.hw.init = &(const struct clk_init_data) { 647 .name = "gcc_pcie_0_phy_rchng_clk_src", 648 .parent_data = gcc_parent_data_0, 649 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 650 .flags = CLK_SET_RATE_PARENT, 651 .ops = &clk_rcg2_shared_ops, 652 }, 653 }; 654 655 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = { 656 .cmd_rcgr = 0x8d07c, 657 .mnd_width = 16, 658 .hid_width = 5, 659 .parent_map = gcc_parent_map_4, 660 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 661 .clkr.hw.init = &(const struct clk_init_data) { 662 .name = "gcc_pcie_1_aux_clk_src", 663 .parent_data = gcc_parent_data_4, 664 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 665 .flags = CLK_SET_RATE_PARENT, 666 .ops = &clk_rcg2_shared_ops, 667 }, 668 }; 669 670 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = { 671 .cmd_rcgr = 0x8d060, 672 .mnd_width = 0, 673 .hid_width = 5, 674 .parent_map = gcc_parent_map_0, 675 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src, 676 .clkr.hw.init = &(const struct clk_init_data) { 677 .name = "gcc_pcie_1_phy_rchng_clk_src", 678 .parent_data = gcc_parent_data_0, 679 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 680 .flags = CLK_SET_RATE_PARENT, 681 .ops = &clk_rcg2_shared_ops, 682 }, 683 }; 684 685 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 686 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0), 687 { } 688 }; 689 690 static struct clk_rcg2 gcc_pdm2_clk_src = { 691 .cmd_rcgr = 0x33010, 692 .mnd_width = 0, 693 .hid_width = 5, 694 .parent_map = gcc_parent_map_0, 695 .freq_tbl = ftbl_gcc_pdm2_clk_src, 696 .clkr.hw.init = &(const struct clk_init_data) { 697 .name = "gcc_pdm2_clk_src", 698 .parent_data = gcc_parent_data_0, 699 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 700 .flags = CLK_SET_RATE_PARENT, 701 .ops = &clk_rcg2_shared_ops, 702 }, 703 }; 704 705 static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = { 706 .cmd_rcgr = 0x17008, 707 .mnd_width = 0, 708 .hid_width = 5, 709 .parent_map = gcc_parent_map_0, 710 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 711 .clkr.hw.init = &(const struct clk_init_data) { 712 .name = "gcc_qupv3_i2c_s0_clk_src", 713 .parent_data = gcc_parent_data_0, 714 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 715 .flags = CLK_SET_RATE_PARENT, 716 .ops = &clk_rcg2_shared_ops, 717 }, 718 }; 719 720 static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = { 721 .cmd_rcgr = 0x17024, 722 .mnd_width = 0, 723 .hid_width = 5, 724 .parent_map = gcc_parent_map_0, 725 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 726 .clkr.hw.init = &(const struct clk_init_data) { 727 .name = "gcc_qupv3_i2c_s1_clk_src", 728 .parent_data = gcc_parent_data_0, 729 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 730 .flags = CLK_SET_RATE_PARENT, 731 .ops = &clk_rcg2_shared_ops, 732 }, 733 }; 734 735 static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = { 736 .cmd_rcgr = 0x17040, 737 .mnd_width = 0, 738 .hid_width = 5, 739 .parent_map = gcc_parent_map_0, 740 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 741 .clkr.hw.init = &(const struct clk_init_data) { 742 .name = "gcc_qupv3_i2c_s2_clk_src", 743 .parent_data = gcc_parent_data_0, 744 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 745 .flags = CLK_SET_RATE_PARENT, 746 .ops = &clk_rcg2_shared_ops, 747 }, 748 }; 749 750 static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = { 751 .cmd_rcgr = 0x1705c, 752 .mnd_width = 0, 753 .hid_width = 5, 754 .parent_map = gcc_parent_map_0, 755 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 756 .clkr.hw.init = &(const struct clk_init_data) { 757 .name = "gcc_qupv3_i2c_s3_clk_src", 758 .parent_data = gcc_parent_data_0, 759 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 760 .flags = CLK_SET_RATE_PARENT, 761 .ops = &clk_rcg2_shared_ops, 762 }, 763 }; 764 765 static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = { 766 .cmd_rcgr = 0x17078, 767 .mnd_width = 0, 768 .hid_width = 5, 769 .parent_map = gcc_parent_map_0, 770 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 771 .clkr.hw.init = &(const struct clk_init_data) { 772 .name = "gcc_qupv3_i2c_s4_clk_src", 773 .parent_data = gcc_parent_data_0, 774 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 775 .flags = CLK_SET_RATE_PARENT, 776 .ops = &clk_rcg2_shared_ops, 777 }, 778 }; 779 780 static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = { 781 .cmd_rcgr = 0x17094, 782 .mnd_width = 0, 783 .hid_width = 5, 784 .parent_map = gcc_parent_map_0, 785 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 786 .clkr.hw.init = &(const struct clk_init_data) { 787 .name = "gcc_qupv3_i2c_s5_clk_src", 788 .parent_data = gcc_parent_data_0, 789 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 790 .flags = CLK_SET_RATE_PARENT, 791 .ops = &clk_rcg2_shared_ops, 792 }, 793 }; 794 795 static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = { 796 .cmd_rcgr = 0x170b0, 797 .mnd_width = 0, 798 .hid_width = 5, 799 .parent_map = gcc_parent_map_0, 800 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 801 .clkr.hw.init = &(const struct clk_init_data) { 802 .name = "gcc_qupv3_i2c_s6_clk_src", 803 .parent_data = gcc_parent_data_0, 804 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 805 .flags = CLK_SET_RATE_PARENT, 806 .ops = &clk_rcg2_shared_ops, 807 }, 808 }; 809 810 static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = { 811 .cmd_rcgr = 0x170cc, 812 .mnd_width = 0, 813 .hid_width = 5, 814 .parent_map = gcc_parent_map_0, 815 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 816 .clkr.hw.init = &(const struct clk_init_data) { 817 .name = "gcc_qupv3_i2c_s7_clk_src", 818 .parent_data = gcc_parent_data_0, 819 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 820 .flags = CLK_SET_RATE_PARENT, 821 .ops = &clk_rcg2_shared_ops, 822 }, 823 }; 824 825 static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = { 826 .cmd_rcgr = 0x170e8, 827 .mnd_width = 0, 828 .hid_width = 5, 829 .parent_map = gcc_parent_map_0, 830 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 831 .clkr.hw.init = &(const struct clk_init_data) { 832 .name = "gcc_qupv3_i2c_s8_clk_src", 833 .parent_data = gcc_parent_data_0, 834 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 835 .flags = CLK_SET_RATE_PARENT, 836 .ops = &clk_rcg2_shared_ops, 837 }, 838 }; 839 840 static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = { 841 .cmd_rcgr = 0x17104, 842 .mnd_width = 0, 843 .hid_width = 5, 844 .parent_map = gcc_parent_map_0, 845 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 846 .clkr.hw.init = &(const struct clk_init_data) { 847 .name = "gcc_qupv3_i2c_s9_clk_src", 848 .parent_data = gcc_parent_data_0, 849 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 850 .flags = CLK_SET_RATE_PARENT, 851 .ops = &clk_rcg2_shared_ops, 852 }, 853 }; 854 855 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src[] = { 856 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0), 857 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0), 858 { } 859 }; 860 861 static struct clk_init_data gcc_qupv3_wrap1_qspi_ref_clk_src_init = { 862 .name = "gcc_qupv3_wrap1_qspi_ref_clk_src", 863 .parent_data = gcc_parent_data_0, 864 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 865 .flags = CLK_SET_RATE_PARENT, 866 .ops = &clk_rcg2_shared_ops, 867 }; 868 869 static struct clk_rcg2 gcc_qupv3_wrap1_qspi_ref_clk_src = { 870 .cmd_rcgr = 0x188a0, 871 .mnd_width = 16, 872 .hid_width = 5, 873 .parent_map = gcc_parent_map_0, 874 .freq_tbl = ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src, 875 .clkr.hw.init = &gcc_qupv3_wrap1_qspi_ref_clk_src_init, 876 }; 877 878 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = { 879 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 880 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 881 F(19200000, P_BI_TCXO, 1, 0, 0), 882 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 883 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 884 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 885 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 886 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 887 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 888 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 889 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 890 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375), 891 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75), 892 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625), 893 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0), 894 { } 895 }; 896 897 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 898 .name = "gcc_qupv3_wrap1_s0_clk_src", 899 .parent_data = gcc_parent_data_0, 900 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 901 .flags = CLK_SET_RATE_PARENT, 902 .ops = &clk_rcg2_shared_ops, 903 }; 904 905 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 906 .cmd_rcgr = 0x18010, 907 .mnd_width = 16, 908 .hid_width = 5, 909 .parent_map = gcc_parent_map_0, 910 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src, 911 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 912 }; 913 914 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 915 .name = "gcc_qupv3_wrap1_s1_clk_src", 916 .parent_data = gcc_parent_data_0, 917 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 918 .flags = CLK_SET_RATE_PARENT, 919 .ops = &clk_rcg2_shared_ops, 920 }; 921 922 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 923 .cmd_rcgr = 0x18148, 924 .mnd_width = 16, 925 .hid_width = 5, 926 .parent_map = gcc_parent_map_0, 927 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src, 928 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 929 }; 930 931 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s3_clk_src[] = { 932 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 933 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 934 F(19200000, P_BI_TCXO, 1, 0, 0), 935 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 936 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 937 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 938 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 939 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 940 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 941 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 942 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 943 { } 944 }; 945 946 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 947 .name = "gcc_qupv3_wrap1_s3_clk_src", 948 .parent_data = gcc_parent_data_0, 949 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 950 .flags = CLK_SET_RATE_PARENT, 951 .ops = &clk_rcg2_shared_ops, 952 }; 953 954 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 955 .cmd_rcgr = 0x18290, 956 .mnd_width = 16, 957 .hid_width = 5, 958 .parent_map = gcc_parent_map_0, 959 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src, 960 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 961 }; 962 963 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s4_clk_src[] = { 964 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 965 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 966 F(19200000, P_BI_TCXO, 1, 0, 0), 967 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 968 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 969 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 970 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 971 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 972 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 973 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 974 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0), 975 { } 976 }; 977 978 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 979 .name = "gcc_qupv3_wrap1_s4_clk_src", 980 .parent_data = gcc_parent_data_0, 981 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 982 .flags = CLK_SET_RATE_PARENT, 983 .ops = &clk_rcg2_shared_ops, 984 }; 985 986 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 987 .cmd_rcgr = 0x183c8, 988 .mnd_width = 16, 989 .hid_width = 5, 990 .parent_map = gcc_parent_map_0, 991 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src, 992 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 993 }; 994 995 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 996 .name = "gcc_qupv3_wrap1_s5_clk_src", 997 .parent_data = gcc_parent_data_0, 998 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 999 .flags = CLK_SET_RATE_PARENT, 1000 .ops = &clk_rcg2_shared_ops, 1001 }; 1002 1003 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 1004 .cmd_rcgr = 0x18500, 1005 .mnd_width = 16, 1006 .hid_width = 5, 1007 .parent_map = gcc_parent_map_0, 1008 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src, 1009 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 1010 }; 1011 1012 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = { 1013 .name = "gcc_qupv3_wrap1_s6_clk_src", 1014 .parent_data = gcc_parent_data_0, 1015 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1016 .flags = CLK_SET_RATE_PARENT, 1017 .ops = &clk_rcg2_shared_ops, 1018 }; 1019 1020 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { 1021 .cmd_rcgr = 0x18638, 1022 .mnd_width = 16, 1023 .hid_width = 5, 1024 .parent_map = gcc_parent_map_0, 1025 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src, 1026 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init, 1027 }; 1028 1029 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = { 1030 .name = "gcc_qupv3_wrap1_s7_clk_src", 1031 .parent_data = gcc_parent_data_0, 1032 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1033 .flags = CLK_SET_RATE_PARENT, 1034 .ops = &clk_rcg2_shared_ops, 1035 }; 1036 1037 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { 1038 .cmd_rcgr = 0x18770, 1039 .mnd_width = 16, 1040 .hid_width = 5, 1041 .parent_map = gcc_parent_map_0, 1042 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src, 1043 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init, 1044 }; 1045 1046 static const struct freq_tbl ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src[] = { 1047 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0), 1048 { } 1049 }; 1050 1051 static struct clk_rcg2 gcc_qupv3_wrap2_ibi_ctrl_0_clk_src = { 1052 .cmd_rcgr = 0x1e9d4, 1053 .mnd_width = 0, 1054 .hid_width = 5, 1055 .parent_map = gcc_parent_map_2, 1056 .freq_tbl = ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src, 1057 .clkr.hw.init = &(const struct clk_init_data) { 1058 .name = "gcc_qupv3_wrap2_ibi_ctrl_0_clk_src", 1059 .parent_data = gcc_parent_data_2, 1060 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 1061 .flags = CLK_SET_RATE_PARENT, 1062 .ops = &clk_rcg2_shared_ops, 1063 }, 1064 }; 1065 1066 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = { 1067 .name = "gcc_qupv3_wrap2_s0_clk_src", 1068 .parent_data = gcc_parent_data_0, 1069 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1070 .flags = CLK_SET_RATE_PARENT, 1071 .ops = &clk_rcg2_shared_ops, 1072 }; 1073 1074 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = { 1075 .cmd_rcgr = 0x1e010, 1076 .mnd_width = 16, 1077 .hid_width = 5, 1078 .parent_map = gcc_parent_map_0, 1079 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src, 1080 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init, 1081 }; 1082 1083 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = { 1084 .name = "gcc_qupv3_wrap2_s1_clk_src", 1085 .parent_data = gcc_parent_data_0, 1086 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1087 .flags = CLK_SET_RATE_PARENT, 1088 .ops = &clk_rcg2_shared_ops, 1089 }; 1090 1091 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = { 1092 .cmd_rcgr = 0x1e148, 1093 .mnd_width = 16, 1094 .hid_width = 5, 1095 .parent_map = gcc_parent_map_0, 1096 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src, 1097 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init, 1098 }; 1099 1100 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = { 1101 .name = "gcc_qupv3_wrap2_s2_clk_src", 1102 .parent_data = gcc_parent_data_0, 1103 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1104 .flags = CLK_SET_RATE_PARENT, 1105 .ops = &clk_rcg2_shared_ops, 1106 }; 1107 1108 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = { 1109 .cmd_rcgr = 0x1e280, 1110 .mnd_width = 16, 1111 .hid_width = 5, 1112 .parent_map = gcc_parent_map_0, 1113 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src, 1114 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init, 1115 }; 1116 1117 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = { 1118 .name = "gcc_qupv3_wrap2_s3_clk_src", 1119 .parent_data = gcc_parent_data_0, 1120 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1121 .flags = CLK_SET_RATE_PARENT, 1122 .ops = &clk_rcg2_shared_ops, 1123 }; 1124 1125 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = { 1126 .cmd_rcgr = 0x1e3b8, 1127 .mnd_width = 16, 1128 .hid_width = 5, 1129 .parent_map = gcc_parent_map_0, 1130 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src, 1131 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init, 1132 }; 1133 1134 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = { 1135 .name = "gcc_qupv3_wrap2_s4_clk_src", 1136 .parent_data = gcc_parent_data_0, 1137 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1138 .flags = CLK_SET_RATE_PARENT, 1139 .ops = &clk_rcg2_shared_ops, 1140 }; 1141 1142 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = { 1143 .cmd_rcgr = 0x1e4f0, 1144 .mnd_width = 16, 1145 .hid_width = 5, 1146 .parent_map = gcc_parent_map_0, 1147 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src, 1148 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init, 1149 }; 1150 1151 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = { 1152 .name = "gcc_qupv3_wrap2_s5_clk_src", 1153 .parent_data = gcc_parent_data_0, 1154 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1155 .flags = CLK_SET_RATE_PARENT, 1156 .ops = &clk_rcg2_shared_ops, 1157 }; 1158 1159 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = { 1160 .cmd_rcgr = 0x1e628, 1161 .mnd_width = 16, 1162 .hid_width = 5, 1163 .parent_map = gcc_parent_map_0, 1164 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src, 1165 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init, 1166 }; 1167 1168 static const struct freq_tbl ftbl_gcc_qupv3_wrap2_s6_clk_src[] = { 1169 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 1170 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 1171 F(19200000, P_BI_TCXO, 1, 0, 0), 1172 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 1173 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 1174 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 1175 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 1176 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 1177 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 1178 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 1179 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 1180 F(128000000, P_GCC_GPLL0_OUT_MAIN, 1, 16, 75), 1181 { } 1182 }; 1183 1184 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = { 1185 .name = "gcc_qupv3_wrap2_s6_clk_src", 1186 .parent_data = gcc_parent_data_10, 1187 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 1188 .flags = CLK_SET_RATE_PARENT, 1189 .ops = &clk_rcg2_shared_ops, 1190 }; 1191 1192 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = { 1193 .cmd_rcgr = 0x1e760, 1194 .mnd_width = 16, 1195 .hid_width = 5, 1196 .parent_map = gcc_parent_map_10, 1197 .freq_tbl = ftbl_gcc_qupv3_wrap2_s6_clk_src, 1198 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init, 1199 }; 1200 1201 static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = { 1202 .name = "gcc_qupv3_wrap2_s7_clk_src", 1203 .parent_data = gcc_parent_data_0, 1204 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1205 .flags = CLK_SET_RATE_PARENT, 1206 .ops = &clk_rcg2_shared_ops, 1207 }; 1208 1209 static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = { 1210 .cmd_rcgr = 0x1e898, 1211 .mnd_width = 16, 1212 .hid_width = 5, 1213 .parent_map = gcc_parent_map_0, 1214 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src, 1215 .clkr.hw.init = &gcc_qupv3_wrap2_s7_clk_src_init, 1216 }; 1217 1218 static const struct freq_tbl ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src[] = { 1219 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0), 1220 F(400000000, P_GCC_GPLL0_OUT_MAIN, 1.5, 0, 0), 1221 { } 1222 }; 1223 1224 static struct clk_init_data gcc_qupv3_wrap3_qspi_ref_clk_src_init = { 1225 .name = "gcc_qupv3_wrap3_qspi_ref_clk_src", 1226 .parent_data = gcc_parent_data_0, 1227 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1228 .flags = CLK_SET_RATE_PARENT, 1229 .ops = &clk_rcg2_shared_ops, 1230 }; 1231 1232 static struct clk_rcg2 gcc_qupv3_wrap3_qspi_ref_clk_src = { 1233 .cmd_rcgr = 0x19018, 1234 .mnd_width = 16, 1235 .hid_width = 5, 1236 .parent_map = gcc_parent_map_0, 1237 .freq_tbl = ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src, 1238 .clkr.hw.init = &gcc_qupv3_wrap3_qspi_ref_clk_src_init, 1239 }; 1240 1241 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 1242 F(400000, P_BI_TCXO, 12, 1, 4), 1243 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 1244 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 1245 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0), 1246 { } 1247 }; 1248 1249 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 1250 .cmd_rcgr = 0x14018, 1251 .mnd_width = 8, 1252 .hid_width = 5, 1253 .parent_map = gcc_parent_map_11, 1254 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 1255 .clkr.hw.init = &(const struct clk_init_data) { 1256 .name = "gcc_sdcc2_apps_clk_src", 1257 .parent_data = gcc_parent_data_11, 1258 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 1259 .flags = CLK_SET_RATE_PARENT, 1260 .ops = &clk_rcg2_shared_ops, 1261 }, 1262 }; 1263 1264 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = { 1265 F(400000, P_BI_TCXO, 12, 1, 4), 1266 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 1267 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 1268 { } 1269 }; 1270 1271 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = { 1272 .cmd_rcgr = 0x16018, 1273 .mnd_width = 8, 1274 .hid_width = 5, 1275 .parent_map = gcc_parent_map_0, 1276 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src, 1277 .clkr.hw.init = &(const struct clk_init_data) { 1278 .name = "gcc_sdcc4_apps_clk_src", 1279 .parent_data = gcc_parent_data_0, 1280 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1281 .flags = CLK_SET_RATE_PARENT, 1282 .ops = &clk_rcg2_shared_ops, 1283 }, 1284 }; 1285 1286 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 1287 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 1288 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 1289 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0), 1290 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0), 1291 { } 1292 }; 1293 1294 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 1295 .cmd_rcgr = 0x77030, 1296 .mnd_width = 8, 1297 .hid_width = 5, 1298 .parent_map = gcc_parent_map_3, 1299 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 1300 .clkr.hw.init = &(const struct clk_init_data) { 1301 .name = "gcc_ufs_phy_axi_clk_src", 1302 .parent_data = gcc_parent_data_3, 1303 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1304 .flags = CLK_SET_RATE_PARENT, 1305 .ops = &clk_rcg2_shared_ops, 1306 }, 1307 }; 1308 1309 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 1310 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 1311 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0), 1312 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0), 1313 { } 1314 }; 1315 1316 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 1317 .cmd_rcgr = 0x77080, 1318 .mnd_width = 0, 1319 .hid_width = 5, 1320 .parent_map = gcc_parent_map_3, 1321 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 1322 .clkr.hw.init = &(const struct clk_init_data) { 1323 .name = "gcc_ufs_phy_ice_core_clk_src", 1324 .parent_data = gcc_parent_data_3, 1325 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1326 .flags = CLK_SET_RATE_PARENT, 1327 .ops = &clk_rcg2_shared_ops, 1328 }, 1329 }; 1330 1331 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = { 1332 F(9600000, P_BI_TCXO, 2, 0, 0), 1333 F(19200000, P_BI_TCXO, 1, 0, 0), 1334 { } 1335 }; 1336 1337 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 1338 .cmd_rcgr = 0x770b4, 1339 .mnd_width = 0, 1340 .hid_width = 5, 1341 .parent_map = gcc_parent_map_5, 1342 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src, 1343 .clkr.hw.init = &(const struct clk_init_data) { 1344 .name = "gcc_ufs_phy_phy_aux_clk_src", 1345 .parent_data = gcc_parent_data_5, 1346 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 1347 .flags = CLK_SET_RATE_PARENT, 1348 .ops = &clk_rcg2_shared_ops, 1349 }, 1350 }; 1351 1352 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 1353 .cmd_rcgr = 0x77098, 1354 .mnd_width = 0, 1355 .hid_width = 5, 1356 .parent_map = gcc_parent_map_3, 1357 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 1358 .clkr.hw.init = &(const struct clk_init_data) { 1359 .name = "gcc_ufs_phy_unipro_core_clk_src", 1360 .parent_data = gcc_parent_data_3, 1361 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1362 .flags = CLK_SET_RATE_PARENT, 1363 .ops = &clk_rcg2_shared_ops, 1364 }, 1365 }; 1366 1367 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1368 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0), 1369 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0), 1370 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 1371 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0), 1372 { } 1373 }; 1374 1375 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1376 .cmd_rcgr = 0x3902c, 1377 .mnd_width = 8, 1378 .hid_width = 5, 1379 .parent_map = gcc_parent_map_0, 1380 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1381 .clkr.hw.init = &(const struct clk_init_data) { 1382 .name = "gcc_usb30_prim_master_clk_src", 1383 .parent_data = gcc_parent_data_0, 1384 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1385 .flags = CLK_SET_RATE_PARENT, 1386 .ops = &clk_rcg2_shared_ops, 1387 }, 1388 }; 1389 1390 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1391 .cmd_rcgr = 0x39044, 1392 .mnd_width = 0, 1393 .hid_width = 5, 1394 .parent_map = gcc_parent_map_0, 1395 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 1396 .clkr.hw.init = &(const struct clk_init_data) { 1397 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1398 .parent_data = gcc_parent_data_0, 1399 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1400 .flags = CLK_SET_RATE_PARENT, 1401 .ops = &clk_rcg2_shared_ops, 1402 }, 1403 }; 1404 1405 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1406 .cmd_rcgr = 0x39070, 1407 .mnd_width = 0, 1408 .hid_width = 5, 1409 .parent_map = gcc_parent_map_4, 1410 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 1411 .clkr.hw.init = &(const struct clk_init_data) { 1412 .name = "gcc_usb3_prim_phy_aux_clk_src", 1413 .parent_data = gcc_parent_data_4, 1414 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 1415 .flags = CLK_SET_RATE_PARENT, 1416 .ops = &clk_rcg2_shared_ops, 1417 }, 1418 }; 1419 1420 static struct clk_regmap_div gcc_qupv3_wrap1_s2_clk_src = { 1421 .reg = 0x18280, 1422 .shift = 0, 1423 .width = 4, 1424 .clkr.hw.init = &(const struct clk_init_data) { 1425 .name = "gcc_qupv3_wrap1_s2_clk_src", 1426 .parent_hws = (const struct clk_hw*[]) { 1427 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw, 1428 }, 1429 .num_parents = 1, 1430 .flags = CLK_SET_RATE_PARENT, 1431 .ops = &clk_regmap_div_ro_ops, 1432 }, 1433 }; 1434 1435 static struct clk_regmap_div gcc_qupv3_wrap3_s0_clk_src = { 1436 .reg = 0x19010, 1437 .shift = 0, 1438 .width = 4, 1439 .clkr.hw.init = &(const struct clk_init_data) { 1440 .name = "gcc_qupv3_wrap3_s0_clk_src", 1441 .parent_hws = (const struct clk_hw*[]) { 1442 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw, 1443 }, 1444 .num_parents = 1, 1445 .flags = CLK_SET_RATE_PARENT, 1446 .ops = &clk_regmap_div_ro_ops, 1447 }, 1448 }; 1449 1450 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1451 .reg = 0x3905c, 1452 .shift = 0, 1453 .width = 4, 1454 .clkr.hw.init = &(const struct clk_init_data) { 1455 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1456 .parent_hws = (const struct clk_hw*[]) { 1457 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 1458 }, 1459 .num_parents = 1, 1460 .flags = CLK_SET_RATE_PARENT, 1461 .ops = &clk_regmap_div_ro_ops, 1462 }, 1463 }; 1464 1465 static struct clk_branch gcc_aggre_noc_pcie_axi_clk = { 1466 .halt_reg = 0x10064, 1467 .halt_check = BRANCH_HALT_SKIP, 1468 .hwcg_reg = 0x10064, 1469 .hwcg_bit = 1, 1470 .clkr = { 1471 .enable_reg = 0x52000, 1472 .enable_mask = BIT(12), 1473 .hw.init = &(const struct clk_init_data) { 1474 .name = "gcc_aggre_noc_pcie_axi_clk", 1475 .ops = &clk_branch2_ops, 1476 }, 1477 }, 1478 }; 1479 1480 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 1481 .halt_reg = 0x770e4, 1482 .halt_check = BRANCH_HALT_VOTED, 1483 .hwcg_reg = 0x770e4, 1484 .hwcg_bit = 1, 1485 .clkr = { 1486 .enable_reg = 0x770e4, 1487 .enable_mask = BIT(0), 1488 .hw.init = &(const struct clk_init_data) { 1489 .name = "gcc_aggre_ufs_phy_axi_clk", 1490 .parent_hws = (const struct clk_hw*[]) { 1491 &gcc_ufs_phy_axi_clk_src.clkr.hw, 1492 }, 1493 .num_parents = 1, 1494 .flags = CLK_SET_RATE_PARENT, 1495 .ops = &clk_branch2_ops, 1496 }, 1497 }, 1498 }; 1499 1500 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 1501 .halt_reg = 0x770e4, 1502 .halt_check = BRANCH_HALT_VOTED, 1503 .hwcg_reg = 0x770e4, 1504 .hwcg_bit = 1, 1505 .clkr = { 1506 .enable_reg = 0x770e4, 1507 .enable_mask = BIT(1), 1508 .hw.init = &(const struct clk_init_data) { 1509 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 1510 .parent_hws = (const struct clk_hw*[]) { 1511 &gcc_ufs_phy_axi_clk_src.clkr.hw, 1512 }, 1513 .num_parents = 1, 1514 .flags = CLK_SET_RATE_PARENT, 1515 .ops = &clk_branch2_ops, 1516 }, 1517 }, 1518 }; 1519 1520 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 1521 .halt_reg = 0x3908c, 1522 .halt_check = BRANCH_HALT_VOTED, 1523 .hwcg_reg = 0x3908c, 1524 .hwcg_bit = 1, 1525 .clkr = { 1526 .enable_reg = 0x3908c, 1527 .enable_mask = BIT(0), 1528 .hw.init = &(const struct clk_init_data) { 1529 .name = "gcc_aggre_usb3_prim_axi_clk", 1530 .parent_hws = (const struct clk_hw*[]) { 1531 &gcc_usb30_prim_master_clk_src.clkr.hw, 1532 }, 1533 .num_parents = 1, 1534 .flags = CLK_SET_RATE_PARENT, 1535 .ops = &clk_branch2_ops, 1536 }, 1537 }, 1538 }; 1539 1540 static struct clk_branch gcc_boot_rom_ahb_clk = { 1541 .halt_reg = 0x38004, 1542 .halt_check = BRANCH_HALT_VOTED, 1543 .hwcg_reg = 0x38004, 1544 .hwcg_bit = 1, 1545 .clkr = { 1546 .enable_reg = 0x52000, 1547 .enable_mask = BIT(10), 1548 .hw.init = &(const struct clk_init_data) { 1549 .name = "gcc_boot_rom_ahb_clk", 1550 .ops = &clk_branch2_ops, 1551 }, 1552 }, 1553 }; 1554 1555 static struct clk_branch gcc_camera_hf_axi_clk = { 1556 .halt_reg = 0x26010, 1557 .halt_check = BRANCH_HALT_SKIP, 1558 .hwcg_reg = 0x26010, 1559 .hwcg_bit = 1, 1560 .clkr = { 1561 .enable_reg = 0x26010, 1562 .enable_mask = BIT(0), 1563 .hw.init = &(const struct clk_init_data) { 1564 .name = "gcc_camera_hf_axi_clk", 1565 .ops = &clk_branch2_ops, 1566 }, 1567 }, 1568 }; 1569 1570 static struct clk_branch gcc_camera_sf_axi_clk = { 1571 .halt_reg = 0x2601c, 1572 .halt_check = BRANCH_HALT_SKIP, 1573 .hwcg_reg = 0x2601c, 1574 .hwcg_bit = 1, 1575 .clkr = { 1576 .enable_reg = 0x2601c, 1577 .enable_mask = BIT(0), 1578 .hw.init = &(const struct clk_init_data) { 1579 .name = "gcc_camera_sf_axi_clk", 1580 .ops = &clk_branch2_ops, 1581 }, 1582 }, 1583 }; 1584 1585 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = { 1586 .halt_reg = 0x10050, 1587 .halt_check = BRANCH_HALT_SKIP, 1588 .hwcg_reg = 0x10050, 1589 .hwcg_bit = 1, 1590 .clkr = { 1591 .enable_reg = 0x52000, 1592 .enable_mask = BIT(20), 1593 .hw.init = &(const struct clk_init_data) { 1594 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk", 1595 .ops = &clk_branch2_ops, 1596 }, 1597 }, 1598 }; 1599 1600 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1601 .halt_reg = 0x39088, 1602 .halt_check = BRANCH_HALT_VOTED, 1603 .hwcg_reg = 0x39088, 1604 .hwcg_bit = 1, 1605 .clkr = { 1606 .enable_reg = 0x39088, 1607 .enable_mask = BIT(0), 1608 .hw.init = &(const struct clk_init_data) { 1609 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1610 .parent_hws = (const struct clk_hw*[]) { 1611 &gcc_usb30_prim_master_clk_src.clkr.hw, 1612 }, 1613 .num_parents = 1, 1614 .flags = CLK_SET_RATE_PARENT, 1615 .ops = &clk_branch2_ops, 1616 }, 1617 }, 1618 }; 1619 1620 static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = { 1621 .halt_reg = 0x10058, 1622 .halt_check = BRANCH_HALT_VOTED, 1623 .hwcg_reg = 0x10058, 1624 .hwcg_bit = 1, 1625 .clkr = { 1626 .enable_reg = 0x52008, 1627 .enable_mask = BIT(6), 1628 .hw.init = &(const struct clk_init_data) { 1629 .name = "gcc_cnoc_pcie_sf_axi_clk", 1630 .ops = &clk_branch2_ops, 1631 }, 1632 }, 1633 }; 1634 1635 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1636 .halt_reg = 0x71154, 1637 .halt_check = BRANCH_HALT_SKIP, 1638 .hwcg_reg = 0x71154, 1639 .hwcg_bit = 1, 1640 .clkr = { 1641 .enable_reg = 0x71154, 1642 .enable_mask = BIT(0), 1643 .hw.init = &(const struct clk_init_data) { 1644 .name = "gcc_ddrss_gpu_axi_clk", 1645 .ops = &clk_branch2_aon_ops, 1646 }, 1647 }, 1648 }; 1649 1650 static struct clk_branch gcc_ddrss_pcie_sf_qtb_clk = { 1651 .halt_reg = 0x10074, 1652 .halt_check = BRANCH_HALT_SKIP, 1653 .hwcg_reg = 0x10074, 1654 .hwcg_bit = 1, 1655 .clkr = { 1656 .enable_reg = 0x52000, 1657 .enable_mask = BIT(19), 1658 .hw.init = &(const struct clk_init_data) { 1659 .name = "gcc_ddrss_pcie_sf_qtb_clk", 1660 .ops = &clk_branch2_ops, 1661 }, 1662 }, 1663 }; 1664 1665 static struct clk_branch gcc_disp_hf_axi_clk = { 1666 .halt_reg = 0x2700c, 1667 .halt_check = BRANCH_HALT_SKIP, 1668 .hwcg_reg = 0x2700c, 1669 .hwcg_bit = 1, 1670 .clkr = { 1671 .enable_reg = 0x2700c, 1672 .enable_mask = BIT(0), 1673 .hw.init = &(const struct clk_init_data) { 1674 .name = "gcc_disp_hf_axi_clk", 1675 .ops = &clk_branch2_ops, 1676 }, 1677 }, 1678 }; 1679 1680 static struct clk_branch gcc_gp1_clk = { 1681 .halt_reg = 0x64000, 1682 .halt_check = BRANCH_HALT, 1683 .clkr = { 1684 .enable_reg = 0x64000, 1685 .enable_mask = BIT(0), 1686 .hw.init = &(const struct clk_init_data) { 1687 .name = "gcc_gp1_clk", 1688 .parent_hws = (const struct clk_hw*[]) { 1689 &gcc_gp1_clk_src.clkr.hw, 1690 }, 1691 .num_parents = 1, 1692 .flags = CLK_SET_RATE_PARENT, 1693 .ops = &clk_branch2_ops, 1694 }, 1695 }, 1696 }; 1697 1698 static struct clk_branch gcc_gp2_clk = { 1699 .halt_reg = 0x65000, 1700 .halt_check = BRANCH_HALT, 1701 .clkr = { 1702 .enable_reg = 0x65000, 1703 .enable_mask = BIT(0), 1704 .hw.init = &(const struct clk_init_data) { 1705 .name = "gcc_gp2_clk", 1706 .parent_hws = (const struct clk_hw*[]) { 1707 &gcc_gp2_clk_src.clkr.hw, 1708 }, 1709 .num_parents = 1, 1710 .flags = CLK_SET_RATE_PARENT, 1711 .ops = &clk_branch2_ops, 1712 }, 1713 }, 1714 }; 1715 1716 static struct clk_branch gcc_gp3_clk = { 1717 .halt_reg = 0x66000, 1718 .halt_check = BRANCH_HALT, 1719 .clkr = { 1720 .enable_reg = 0x66000, 1721 .enable_mask = BIT(0), 1722 .hw.init = &(const struct clk_init_data) { 1723 .name = "gcc_gp3_clk", 1724 .parent_hws = (const struct clk_hw*[]) { 1725 &gcc_gp3_clk_src.clkr.hw, 1726 }, 1727 .num_parents = 1, 1728 .flags = CLK_SET_RATE_PARENT, 1729 .ops = &clk_branch2_ops, 1730 }, 1731 }, 1732 }; 1733 1734 static struct clk_branch gcc_gpu_gpll0_clk_src = { 1735 .halt_check = BRANCH_HALT_DELAY, 1736 .clkr = { 1737 .enable_reg = 0x52000, 1738 .enable_mask = BIT(15), 1739 .hw.init = &(const struct clk_init_data) { 1740 .name = "gcc_gpu_gpll0_clk_src", 1741 .parent_hws = (const struct clk_hw*[]) { 1742 &gcc_gpll0.clkr.hw, 1743 }, 1744 .num_parents = 1, 1745 .flags = CLK_SET_RATE_PARENT, 1746 .ops = &clk_branch2_ops, 1747 }, 1748 }, 1749 }; 1750 1751 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 1752 .halt_check = BRANCH_HALT_DELAY, 1753 .clkr = { 1754 .enable_reg = 0x52000, 1755 .enable_mask = BIT(16), 1756 .hw.init = &(const struct clk_init_data) { 1757 .name = "gcc_gpu_gpll0_div_clk_src", 1758 .parent_hws = (const struct clk_hw*[]) { 1759 &gcc_gpll0_out_even.clkr.hw, 1760 }, 1761 .num_parents = 1, 1762 .flags = CLK_SET_RATE_PARENT, 1763 .ops = &clk_branch2_ops, 1764 }, 1765 }, 1766 }; 1767 1768 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1769 .halt_reg = 0x71010, 1770 .halt_check = BRANCH_HALT_VOTED, 1771 .hwcg_reg = 0x71010, 1772 .hwcg_bit = 1, 1773 .clkr = { 1774 .enable_reg = 0x71010, 1775 .enable_mask = BIT(0), 1776 .hw.init = &(const struct clk_init_data) { 1777 .name = "gcc_gpu_memnoc_gfx_clk", 1778 .ops = &clk_branch2_ops, 1779 }, 1780 }, 1781 }; 1782 1783 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1784 .halt_reg = 0x71018, 1785 .halt_check = BRANCH_HALT_DELAY, 1786 .clkr = { 1787 .enable_reg = 0x71018, 1788 .enable_mask = BIT(0), 1789 .hw.init = &(const struct clk_init_data) { 1790 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1791 .ops = &clk_branch2_ops, 1792 }, 1793 }, 1794 }; 1795 1796 static struct clk_branch gcc_pcie_0_aux_clk = { 1797 .halt_reg = 0x6b03c, 1798 .halt_check = BRANCH_HALT_VOTED, 1799 .clkr = { 1800 .enable_reg = 0x52008, 1801 .enable_mask = BIT(3), 1802 .hw.init = &(const struct clk_init_data) { 1803 .name = "gcc_pcie_0_aux_clk", 1804 .parent_hws = (const struct clk_hw*[]) { 1805 &gcc_pcie_0_aux_clk_src.clkr.hw, 1806 }, 1807 .num_parents = 1, 1808 .flags = CLK_SET_RATE_PARENT, 1809 .ops = &clk_branch2_ops, 1810 }, 1811 }, 1812 }; 1813 1814 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1815 .halt_reg = 0x6b038, 1816 .halt_check = BRANCH_HALT_VOTED, 1817 .hwcg_reg = 0x6b038, 1818 .hwcg_bit = 1, 1819 .clkr = { 1820 .enable_reg = 0x52008, 1821 .enable_mask = BIT(2), 1822 .hw.init = &(const struct clk_init_data) { 1823 .name = "gcc_pcie_0_cfg_ahb_clk", 1824 .ops = &clk_branch2_ops, 1825 }, 1826 }, 1827 }; 1828 1829 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1830 .halt_reg = 0x6b02c, 1831 .halt_check = BRANCH_HALT_SKIP, 1832 .hwcg_reg = 0x6b02c, 1833 .hwcg_bit = 1, 1834 .clkr = { 1835 .enable_reg = 0x52008, 1836 .enable_mask = BIT(1), 1837 .hw.init = &(const struct clk_init_data) { 1838 .name = "gcc_pcie_0_mstr_axi_clk", 1839 .ops = &clk_branch2_ops, 1840 }, 1841 }, 1842 }; 1843 1844 static struct clk_branch gcc_pcie_0_phy_rchng_clk = { 1845 .halt_reg = 0x6b054, 1846 .halt_check = BRANCH_HALT_VOTED, 1847 .clkr = { 1848 .enable_reg = 0x52000, 1849 .enable_mask = BIT(22), 1850 .hw.init = &(const struct clk_init_data) { 1851 .name = "gcc_pcie_0_phy_rchng_clk", 1852 .parent_hws = (const struct clk_hw*[]) { 1853 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw, 1854 }, 1855 .num_parents = 1, 1856 .flags = CLK_SET_RATE_PARENT, 1857 .ops = &clk_branch2_ops, 1858 }, 1859 }, 1860 }; 1861 1862 static struct clk_branch gcc_pcie_0_pipe_clk = { 1863 .halt_reg = 0x6b048, 1864 .halt_check = BRANCH_HALT_SKIP, 1865 .clkr = { 1866 .enable_reg = 0x52008, 1867 .enable_mask = BIT(4), 1868 .hw.init = &(const struct clk_init_data) { 1869 .name = "gcc_pcie_0_pipe_clk", 1870 .parent_hws = (const struct clk_hw*[]) { 1871 &gcc_pcie_0_pipe_clk_src.clkr.hw, 1872 }, 1873 .num_parents = 1, 1874 .flags = CLK_SET_RATE_PARENT, 1875 .ops = &clk_branch2_ops, 1876 }, 1877 }, 1878 }; 1879 1880 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1881 .halt_reg = 0x6b020, 1882 .halt_check = BRANCH_HALT_VOTED, 1883 .hwcg_reg = 0x6b020, 1884 .hwcg_bit = 1, 1885 .clkr = { 1886 .enable_reg = 0x52008, 1887 .enable_mask = BIT(0), 1888 .hw.init = &(const struct clk_init_data) { 1889 .name = "gcc_pcie_0_slv_axi_clk", 1890 .ops = &clk_branch2_ops, 1891 }, 1892 }, 1893 }; 1894 1895 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1896 .halt_reg = 0x6b01c, 1897 .halt_check = BRANCH_HALT_VOTED, 1898 .clkr = { 1899 .enable_reg = 0x52008, 1900 .enable_mask = BIT(5), 1901 .hw.init = &(const struct clk_init_data) { 1902 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1903 .ops = &clk_branch2_ops, 1904 }, 1905 }, 1906 }; 1907 1908 static struct clk_branch gcc_pcie_1_aux_clk = { 1909 .halt_reg = 0x8d038, 1910 .halt_check = BRANCH_HALT_VOTED, 1911 .clkr = { 1912 .enable_reg = 0x52000, 1913 .enable_mask = BIT(29), 1914 .hw.init = &(const struct clk_init_data) { 1915 .name = "gcc_pcie_1_aux_clk", 1916 .parent_hws = (const struct clk_hw*[]) { 1917 &gcc_pcie_1_aux_clk_src.clkr.hw, 1918 }, 1919 .num_parents = 1, 1920 .flags = CLK_SET_RATE_PARENT, 1921 .ops = &clk_branch2_ops, 1922 }, 1923 }, 1924 }; 1925 1926 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 1927 .halt_reg = 0x8d034, 1928 .halt_check = BRANCH_HALT_VOTED, 1929 .hwcg_reg = 0x8d034, 1930 .hwcg_bit = 1, 1931 .clkr = { 1932 .enable_reg = 0x52000, 1933 .enable_mask = BIT(28), 1934 .hw.init = &(const struct clk_init_data) { 1935 .name = "gcc_pcie_1_cfg_ahb_clk", 1936 .ops = &clk_branch2_ops, 1937 }, 1938 }, 1939 }; 1940 1941 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 1942 .halt_reg = 0x8d028, 1943 .halt_check = BRANCH_HALT_SKIP, 1944 .hwcg_reg = 0x8d028, 1945 .hwcg_bit = 1, 1946 .clkr = { 1947 .enable_reg = 0x52000, 1948 .enable_mask = BIT(27), 1949 .hw.init = &(const struct clk_init_data) { 1950 .name = "gcc_pcie_1_mstr_axi_clk", 1951 .ops = &clk_branch2_ops, 1952 }, 1953 }, 1954 }; 1955 1956 static struct clk_branch gcc_pcie_1_phy_aux_clk = { 1957 .halt_reg = 0x8d044, 1958 .halt_check = BRANCH_HALT_VOTED, 1959 .clkr = { 1960 .enable_reg = 0x52000, 1961 .enable_mask = BIT(24), 1962 .hw.init = &(const struct clk_init_data) { 1963 .name = "gcc_pcie_1_phy_aux_clk", 1964 .parent_hws = (const struct clk_hw*[]) { 1965 &gcc_pcie_1_phy_aux_clk_src.clkr.hw, 1966 }, 1967 .num_parents = 1, 1968 .flags = CLK_SET_RATE_PARENT, 1969 .ops = &clk_branch2_ops, 1970 }, 1971 }, 1972 }; 1973 1974 static struct clk_branch gcc_pcie_1_phy_rchng_clk = { 1975 .halt_reg = 0x8d05c, 1976 .halt_check = BRANCH_HALT_VOTED, 1977 .clkr = { 1978 .enable_reg = 0x52000, 1979 .enable_mask = BIT(23), 1980 .hw.init = &(const struct clk_init_data) { 1981 .name = "gcc_pcie_1_phy_rchng_clk", 1982 .parent_hws = (const struct clk_hw*[]) { 1983 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw, 1984 }, 1985 .num_parents = 1, 1986 .flags = CLK_SET_RATE_PARENT, 1987 .ops = &clk_branch2_ops, 1988 }, 1989 }, 1990 }; 1991 1992 static struct clk_branch gcc_pcie_1_pipe_clk = { 1993 .halt_reg = 0x8d050, 1994 .halt_check = BRANCH_HALT_SKIP, 1995 .clkr = { 1996 .enable_reg = 0x52000, 1997 .enable_mask = BIT(30), 1998 .hw.init = &(const struct clk_init_data) { 1999 .name = "gcc_pcie_1_pipe_clk", 2000 .parent_hws = (const struct clk_hw*[]) { 2001 &gcc_pcie_1_pipe_clk_src.clkr.hw, 2002 }, 2003 .num_parents = 1, 2004 .flags = CLK_SET_RATE_PARENT, 2005 .ops = &clk_branch2_ops, 2006 }, 2007 }, 2008 }; 2009 2010 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 2011 .halt_reg = 0x8d01c, 2012 .halt_check = BRANCH_HALT_VOTED, 2013 .hwcg_reg = 0x8d01c, 2014 .hwcg_bit = 1, 2015 .clkr = { 2016 .enable_reg = 0x52000, 2017 .enable_mask = BIT(26), 2018 .hw.init = &(const struct clk_init_data) { 2019 .name = "gcc_pcie_1_slv_axi_clk", 2020 .ops = &clk_branch2_ops, 2021 }, 2022 }, 2023 }; 2024 2025 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = { 2026 .halt_reg = 0x8d018, 2027 .halt_check = BRANCH_HALT_VOTED, 2028 .clkr = { 2029 .enable_reg = 0x52000, 2030 .enable_mask = BIT(25), 2031 .hw.init = &(const struct clk_init_data) { 2032 .name = "gcc_pcie_1_slv_q2a_axi_clk", 2033 .ops = &clk_branch2_ops, 2034 }, 2035 }, 2036 }; 2037 2038 static struct clk_branch gcc_pdm2_clk = { 2039 .halt_reg = 0x3300c, 2040 .halt_check = BRANCH_HALT, 2041 .clkr = { 2042 .enable_reg = 0x3300c, 2043 .enable_mask = BIT(0), 2044 .hw.init = &(const struct clk_init_data) { 2045 .name = "gcc_pdm2_clk", 2046 .parent_hws = (const struct clk_hw*[]) { 2047 &gcc_pdm2_clk_src.clkr.hw, 2048 }, 2049 .num_parents = 1, 2050 .flags = CLK_SET_RATE_PARENT, 2051 .ops = &clk_branch2_ops, 2052 }, 2053 }, 2054 }; 2055 2056 static struct clk_branch gcc_pdm_ahb_clk = { 2057 .halt_reg = 0x33004, 2058 .halt_check = BRANCH_HALT_VOTED, 2059 .hwcg_reg = 0x33004, 2060 .hwcg_bit = 1, 2061 .clkr = { 2062 .enable_reg = 0x33004, 2063 .enable_mask = BIT(0), 2064 .hw.init = &(const struct clk_init_data) { 2065 .name = "gcc_pdm_ahb_clk", 2066 .ops = &clk_branch2_ops, 2067 }, 2068 }, 2069 }; 2070 2071 static struct clk_branch gcc_pdm_xo4_clk = { 2072 .halt_reg = 0x33008, 2073 .halt_check = BRANCH_HALT, 2074 .clkr = { 2075 .enable_reg = 0x33008, 2076 .enable_mask = BIT(0), 2077 .hw.init = &(const struct clk_init_data) { 2078 .name = "gcc_pdm_xo4_clk", 2079 .ops = &clk_branch2_ops, 2080 }, 2081 }, 2082 }; 2083 2084 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2085 .halt_reg = 0x26008, 2086 .halt_check = BRANCH_HALT_VOTED, 2087 .hwcg_reg = 0x26008, 2088 .hwcg_bit = 1, 2089 .clkr = { 2090 .enable_reg = 0x26008, 2091 .enable_mask = BIT(0), 2092 .hw.init = &(const struct clk_init_data) { 2093 .name = "gcc_qmip_camera_nrt_ahb_clk", 2094 .ops = &clk_branch2_ops, 2095 }, 2096 }, 2097 }; 2098 2099 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2100 .halt_reg = 0x2600c, 2101 .halt_check = BRANCH_HALT_VOTED, 2102 .hwcg_reg = 0x2600c, 2103 .hwcg_bit = 1, 2104 .clkr = { 2105 .enable_reg = 0x2600c, 2106 .enable_mask = BIT(0), 2107 .hw.init = &(const struct clk_init_data) { 2108 .name = "gcc_qmip_camera_rt_ahb_clk", 2109 .ops = &clk_branch2_ops, 2110 }, 2111 }, 2112 }; 2113 2114 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2115 .halt_reg = 0x27008, 2116 .halt_check = BRANCH_HALT_VOTED, 2117 .hwcg_reg = 0x27008, 2118 .hwcg_bit = 1, 2119 .clkr = { 2120 .enable_reg = 0x27008, 2121 .enable_mask = BIT(0), 2122 .hw.init = &(const struct clk_init_data) { 2123 .name = "gcc_qmip_disp_ahb_clk", 2124 .ops = &clk_branch2_ops, 2125 }, 2126 }, 2127 }; 2128 2129 static struct clk_branch gcc_qmip_gpu_ahb_clk = { 2130 .halt_reg = 0x71008, 2131 .halt_check = BRANCH_HALT_VOTED, 2132 .hwcg_reg = 0x71008, 2133 .hwcg_bit = 1, 2134 .clkr = { 2135 .enable_reg = 0x71008, 2136 .enable_mask = BIT(0), 2137 .hw.init = &(const struct clk_init_data) { 2138 .name = "gcc_qmip_gpu_ahb_clk", 2139 .ops = &clk_branch2_ops, 2140 }, 2141 }, 2142 }; 2143 2144 static struct clk_branch gcc_qmip_pcie_ahb_clk = { 2145 .halt_reg = 0x6b018, 2146 .halt_check = BRANCH_HALT_VOTED, 2147 .hwcg_reg = 0x6b018, 2148 .hwcg_bit = 1, 2149 .clkr = { 2150 .enable_reg = 0x52000, 2151 .enable_mask = BIT(11), 2152 .hw.init = &(const struct clk_init_data) { 2153 .name = "gcc_qmip_pcie_ahb_clk", 2154 .ops = &clk_branch2_ops, 2155 }, 2156 }, 2157 }; 2158 2159 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = { 2160 .halt_reg = 0x32014, 2161 .halt_check = BRANCH_HALT_VOTED, 2162 .hwcg_reg = 0x32014, 2163 .hwcg_bit = 1, 2164 .clkr = { 2165 .enable_reg = 0x32014, 2166 .enable_mask = BIT(0), 2167 .hw.init = &(const struct clk_init_data) { 2168 .name = "gcc_qmip_video_cv_cpu_ahb_clk", 2169 .ops = &clk_branch2_ops, 2170 }, 2171 }, 2172 }; 2173 2174 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = { 2175 .halt_reg = 0x32008, 2176 .halt_check = BRANCH_HALT_VOTED, 2177 .hwcg_reg = 0x32008, 2178 .hwcg_bit = 1, 2179 .clkr = { 2180 .enable_reg = 0x32008, 2181 .enable_mask = BIT(0), 2182 .hw.init = &(const struct clk_init_data) { 2183 .name = "gcc_qmip_video_cvp_ahb_clk", 2184 .ops = &clk_branch2_ops, 2185 }, 2186 }, 2187 }; 2188 2189 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = { 2190 .halt_reg = 0x32010, 2191 .halt_check = BRANCH_HALT_VOTED, 2192 .hwcg_reg = 0x32010, 2193 .hwcg_bit = 1, 2194 .clkr = { 2195 .enable_reg = 0x32010, 2196 .enable_mask = BIT(0), 2197 .hw.init = &(const struct clk_init_data) { 2198 .name = "gcc_qmip_video_v_cpu_ahb_clk", 2199 .ops = &clk_branch2_ops, 2200 }, 2201 }, 2202 }; 2203 2204 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2205 .halt_reg = 0x3200c, 2206 .halt_check = BRANCH_HALT_VOTED, 2207 .hwcg_reg = 0x3200c, 2208 .hwcg_bit = 1, 2209 .clkr = { 2210 .enable_reg = 0x3200c, 2211 .enable_mask = BIT(0), 2212 .hw.init = &(const struct clk_init_data) { 2213 .name = "gcc_qmip_video_vcodec_ahb_clk", 2214 .ops = &clk_branch2_ops, 2215 }, 2216 }, 2217 }; 2218 2219 static struct clk_branch gcc_qupv3_i2c_core_clk = { 2220 .halt_reg = 0x23004, 2221 .halt_check = BRANCH_HALT_VOTED, 2222 .clkr = { 2223 .enable_reg = 0x52008, 2224 .enable_mask = BIT(8), 2225 .hw.init = &(const struct clk_init_data) { 2226 .name = "gcc_qupv3_i2c_core_clk", 2227 .ops = &clk_branch2_ops, 2228 }, 2229 }, 2230 }; 2231 2232 static struct clk_branch gcc_qupv3_i2c_s0_clk = { 2233 .halt_reg = 0x17004, 2234 .halt_check = BRANCH_HALT_VOTED, 2235 .clkr = { 2236 .enable_reg = 0x52008, 2237 .enable_mask = BIT(10), 2238 .hw.init = &(const struct clk_init_data) { 2239 .name = "gcc_qupv3_i2c_s0_clk", 2240 .parent_hws = (const struct clk_hw*[]) { 2241 &gcc_qupv3_i2c_s0_clk_src.clkr.hw, 2242 }, 2243 .num_parents = 1, 2244 .flags = CLK_SET_RATE_PARENT, 2245 .ops = &clk_branch2_ops, 2246 }, 2247 }, 2248 }; 2249 2250 static struct clk_branch gcc_qupv3_i2c_s1_clk = { 2251 .halt_reg = 0x17020, 2252 .halt_check = BRANCH_HALT_VOTED, 2253 .clkr = { 2254 .enable_reg = 0x52008, 2255 .enable_mask = BIT(11), 2256 .hw.init = &(const struct clk_init_data) { 2257 .name = "gcc_qupv3_i2c_s1_clk", 2258 .parent_hws = (const struct clk_hw*[]) { 2259 &gcc_qupv3_i2c_s1_clk_src.clkr.hw, 2260 }, 2261 .num_parents = 1, 2262 .flags = CLK_SET_RATE_PARENT, 2263 .ops = &clk_branch2_ops, 2264 }, 2265 }, 2266 }; 2267 2268 static struct clk_branch gcc_qupv3_i2c_s2_clk = { 2269 .halt_reg = 0x1703c, 2270 .halt_check = BRANCH_HALT_VOTED, 2271 .clkr = { 2272 .enable_reg = 0x52008, 2273 .enable_mask = BIT(12), 2274 .hw.init = &(const struct clk_init_data) { 2275 .name = "gcc_qupv3_i2c_s2_clk", 2276 .parent_hws = (const struct clk_hw*[]) { 2277 &gcc_qupv3_i2c_s2_clk_src.clkr.hw, 2278 }, 2279 .num_parents = 1, 2280 .flags = CLK_SET_RATE_PARENT, 2281 .ops = &clk_branch2_ops, 2282 }, 2283 }, 2284 }; 2285 2286 static struct clk_branch gcc_qupv3_i2c_s3_clk = { 2287 .halt_reg = 0x17058, 2288 .halt_check = BRANCH_HALT_VOTED, 2289 .clkr = { 2290 .enable_reg = 0x52008, 2291 .enable_mask = BIT(13), 2292 .hw.init = &(const struct clk_init_data) { 2293 .name = "gcc_qupv3_i2c_s3_clk", 2294 .parent_hws = (const struct clk_hw*[]) { 2295 &gcc_qupv3_i2c_s3_clk_src.clkr.hw, 2296 }, 2297 .num_parents = 1, 2298 .flags = CLK_SET_RATE_PARENT, 2299 .ops = &clk_branch2_ops, 2300 }, 2301 }, 2302 }; 2303 2304 static struct clk_branch gcc_qupv3_i2c_s4_clk = { 2305 .halt_reg = 0x17074, 2306 .halt_check = BRANCH_HALT_VOTED, 2307 .clkr = { 2308 .enable_reg = 0x52008, 2309 .enable_mask = BIT(14), 2310 .hw.init = &(const struct clk_init_data) { 2311 .name = "gcc_qupv3_i2c_s4_clk", 2312 .parent_hws = (const struct clk_hw*[]) { 2313 &gcc_qupv3_i2c_s4_clk_src.clkr.hw, 2314 }, 2315 .num_parents = 1, 2316 .flags = CLK_SET_RATE_PARENT, 2317 .ops = &clk_branch2_ops, 2318 }, 2319 }, 2320 }; 2321 2322 static struct clk_branch gcc_qupv3_i2c_s5_clk = { 2323 .halt_reg = 0x17090, 2324 .halt_check = BRANCH_HALT_VOTED, 2325 .clkr = { 2326 .enable_reg = 0x52008, 2327 .enable_mask = BIT(15), 2328 .hw.init = &(const struct clk_init_data) { 2329 .name = "gcc_qupv3_i2c_s5_clk", 2330 .parent_hws = (const struct clk_hw*[]) { 2331 &gcc_qupv3_i2c_s5_clk_src.clkr.hw, 2332 }, 2333 .num_parents = 1, 2334 .flags = CLK_SET_RATE_PARENT, 2335 .ops = &clk_branch2_ops, 2336 }, 2337 }, 2338 }; 2339 2340 static struct clk_branch gcc_qupv3_i2c_s6_clk = { 2341 .halt_reg = 0x170ac, 2342 .halt_check = BRANCH_HALT_VOTED, 2343 .clkr = { 2344 .enable_reg = 0x52008, 2345 .enable_mask = BIT(16), 2346 .hw.init = &(const struct clk_init_data) { 2347 .name = "gcc_qupv3_i2c_s6_clk", 2348 .parent_hws = (const struct clk_hw*[]) { 2349 &gcc_qupv3_i2c_s6_clk_src.clkr.hw, 2350 }, 2351 .num_parents = 1, 2352 .flags = CLK_SET_RATE_PARENT, 2353 .ops = &clk_branch2_ops, 2354 }, 2355 }, 2356 }; 2357 2358 static struct clk_branch gcc_qupv3_i2c_s7_clk = { 2359 .halt_reg = 0x170c8, 2360 .halt_check = BRANCH_HALT_VOTED, 2361 .clkr = { 2362 .enable_reg = 0x52008, 2363 .enable_mask = BIT(17), 2364 .hw.init = &(const struct clk_init_data) { 2365 .name = "gcc_qupv3_i2c_s7_clk", 2366 .parent_hws = (const struct clk_hw*[]) { 2367 &gcc_qupv3_i2c_s7_clk_src.clkr.hw, 2368 }, 2369 .num_parents = 1, 2370 .flags = CLK_SET_RATE_PARENT, 2371 .ops = &clk_branch2_ops, 2372 }, 2373 }, 2374 }; 2375 2376 static struct clk_branch gcc_qupv3_i2c_s8_clk = { 2377 .halt_reg = 0x170e4, 2378 .halt_check = BRANCH_HALT_VOTED, 2379 .clkr = { 2380 .enable_reg = 0x52010, 2381 .enable_mask = BIT(14), 2382 .hw.init = &(const struct clk_init_data) { 2383 .name = "gcc_qupv3_i2c_s8_clk", 2384 .parent_hws = (const struct clk_hw*[]) { 2385 &gcc_qupv3_i2c_s8_clk_src.clkr.hw, 2386 }, 2387 .num_parents = 1, 2388 .flags = CLK_SET_RATE_PARENT, 2389 .ops = &clk_branch2_ops, 2390 }, 2391 }, 2392 }; 2393 2394 static struct clk_branch gcc_qupv3_i2c_s9_clk = { 2395 .halt_reg = 0x17100, 2396 .halt_check = BRANCH_HALT_VOTED, 2397 .clkr = { 2398 .enable_reg = 0x52010, 2399 .enable_mask = BIT(15), 2400 .hw.init = &(const struct clk_init_data) { 2401 .name = "gcc_qupv3_i2c_s9_clk", 2402 .parent_hws = (const struct clk_hw*[]) { 2403 &gcc_qupv3_i2c_s9_clk_src.clkr.hw, 2404 }, 2405 .num_parents = 1, 2406 .flags = CLK_SET_RATE_PARENT, 2407 .ops = &clk_branch2_ops, 2408 }, 2409 }, 2410 }; 2411 2412 static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = { 2413 .halt_reg = 0x23000, 2414 .halt_check = BRANCH_HALT_VOTED, 2415 .hwcg_reg = 0x23000, 2416 .hwcg_bit = 1, 2417 .clkr = { 2418 .enable_reg = 0x52008, 2419 .enable_mask = BIT(7), 2420 .hw.init = &(const struct clk_init_data) { 2421 .name = "gcc_qupv3_i2c_s_ahb_clk", 2422 .ops = &clk_branch2_ops, 2423 }, 2424 }, 2425 }; 2426 2427 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 2428 .halt_reg = 0x23154, 2429 .halt_check = BRANCH_HALT_VOTED, 2430 .clkr = { 2431 .enable_reg = 0x52008, 2432 .enable_mask = BIT(18), 2433 .hw.init = &(const struct clk_init_data) { 2434 .name = "gcc_qupv3_wrap1_core_2x_clk", 2435 .ops = &clk_branch2_ops, 2436 }, 2437 }, 2438 }; 2439 2440 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 2441 .halt_reg = 0x23144, 2442 .halt_check = BRANCH_HALT_VOTED, 2443 .clkr = { 2444 .enable_reg = 0x52008, 2445 .enable_mask = BIT(19), 2446 .hw.init = &(const struct clk_init_data) { 2447 .name = "gcc_qupv3_wrap1_core_clk", 2448 .ops = &clk_branch2_ops, 2449 }, 2450 }, 2451 }; 2452 2453 static struct clk_branch gcc_qupv3_wrap1_qspi_ref_clk = { 2454 .halt_reg = 0x1889c, 2455 .halt_check = BRANCH_HALT_VOTED, 2456 .clkr = { 2457 .enable_reg = 0x52010, 2458 .enable_mask = BIT(29), 2459 .hw.init = &(const struct clk_init_data) { 2460 .name = "gcc_qupv3_wrap1_qspi_ref_clk", 2461 .parent_hws = (const struct clk_hw*[]) { 2462 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw, 2463 }, 2464 .num_parents = 1, 2465 .flags = CLK_SET_RATE_PARENT, 2466 .ops = &clk_branch2_ops, 2467 }, 2468 }, 2469 }; 2470 2471 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 2472 .halt_reg = 0x18004, 2473 .halt_check = BRANCH_HALT_VOTED, 2474 .clkr = { 2475 .enable_reg = 0x52008, 2476 .enable_mask = BIT(22), 2477 .hw.init = &(const struct clk_init_data) { 2478 .name = "gcc_qupv3_wrap1_s0_clk", 2479 .parent_hws = (const struct clk_hw*[]) { 2480 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 2481 }, 2482 .num_parents = 1, 2483 .flags = CLK_SET_RATE_PARENT, 2484 .ops = &clk_branch2_ops, 2485 }, 2486 }, 2487 }; 2488 2489 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 2490 .halt_reg = 0x1813c, 2491 .halt_check = BRANCH_HALT_VOTED, 2492 .clkr = { 2493 .enable_reg = 0x52008, 2494 .enable_mask = BIT(23), 2495 .hw.init = &(const struct clk_init_data) { 2496 .name = "gcc_qupv3_wrap1_s1_clk", 2497 .parent_hws = (const struct clk_hw*[]) { 2498 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 2499 }, 2500 .num_parents = 1, 2501 .flags = CLK_SET_RATE_PARENT, 2502 .ops = &clk_branch2_ops, 2503 }, 2504 }, 2505 }; 2506 2507 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 2508 .halt_reg = 0x18274, 2509 .halt_check = BRANCH_HALT_VOTED, 2510 .clkr = { 2511 .enable_reg = 0x52008, 2512 .enable_mask = BIT(24), 2513 .hw.init = &(const struct clk_init_data) { 2514 .name = "gcc_qupv3_wrap1_s2_clk", 2515 .parent_hws = (const struct clk_hw*[]) { 2516 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 2517 }, 2518 .num_parents = 1, 2519 .flags = CLK_SET_RATE_PARENT, 2520 .ops = &clk_branch2_ops, 2521 }, 2522 }, 2523 }; 2524 2525 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 2526 .halt_reg = 0x18284, 2527 .halt_check = BRANCH_HALT_VOTED, 2528 .clkr = { 2529 .enable_reg = 0x52008, 2530 .enable_mask = BIT(25), 2531 .hw.init = &(const struct clk_init_data) { 2532 .name = "gcc_qupv3_wrap1_s3_clk", 2533 .parent_hws = (const struct clk_hw*[]) { 2534 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 2535 }, 2536 .num_parents = 1, 2537 .flags = CLK_SET_RATE_PARENT, 2538 .ops = &clk_branch2_ops, 2539 }, 2540 }, 2541 }; 2542 2543 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 2544 .halt_reg = 0x183bc, 2545 .halt_check = BRANCH_HALT_VOTED, 2546 .clkr = { 2547 .enable_reg = 0x52008, 2548 .enable_mask = BIT(26), 2549 .hw.init = &(const struct clk_init_data) { 2550 .name = "gcc_qupv3_wrap1_s4_clk", 2551 .parent_hws = (const struct clk_hw*[]) { 2552 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 2553 }, 2554 .num_parents = 1, 2555 .flags = CLK_SET_RATE_PARENT, 2556 .ops = &clk_branch2_ops, 2557 }, 2558 }, 2559 }; 2560 2561 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 2562 .halt_reg = 0x184f4, 2563 .halt_check = BRANCH_HALT_VOTED, 2564 .clkr = { 2565 .enable_reg = 0x52008, 2566 .enable_mask = BIT(27), 2567 .hw.init = &(const struct clk_init_data) { 2568 .name = "gcc_qupv3_wrap1_s5_clk", 2569 .parent_hws = (const struct clk_hw*[]) { 2570 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 2571 }, 2572 .num_parents = 1, 2573 .flags = CLK_SET_RATE_PARENT, 2574 .ops = &clk_branch2_ops, 2575 }, 2576 }, 2577 }; 2578 2579 static struct clk_branch gcc_qupv3_wrap1_s6_clk = { 2580 .halt_reg = 0x1862c, 2581 .halt_check = BRANCH_HALT_VOTED, 2582 .clkr = { 2583 .enable_reg = 0x52008, 2584 .enable_mask = BIT(28), 2585 .hw.init = &(const struct clk_init_data) { 2586 .name = "gcc_qupv3_wrap1_s6_clk", 2587 .parent_hws = (const struct clk_hw*[]) { 2588 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw, 2589 }, 2590 .num_parents = 1, 2591 .flags = CLK_SET_RATE_PARENT, 2592 .ops = &clk_branch2_ops, 2593 }, 2594 }, 2595 }; 2596 2597 static struct clk_branch gcc_qupv3_wrap1_s7_clk = { 2598 .halt_reg = 0x18764, 2599 .halt_check = BRANCH_HALT_VOTED, 2600 .clkr = { 2601 .enable_reg = 0x52010, 2602 .enable_mask = BIT(16), 2603 .hw.init = &(const struct clk_init_data) { 2604 .name = "gcc_qupv3_wrap1_s7_clk", 2605 .parent_hws = (const struct clk_hw*[]) { 2606 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw, 2607 }, 2608 .num_parents = 1, 2609 .flags = CLK_SET_RATE_PARENT, 2610 .ops = &clk_branch2_ops, 2611 }, 2612 }, 2613 }; 2614 2615 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = { 2616 .halt_reg = 0x232a4, 2617 .halt_check = BRANCH_HALT_VOTED, 2618 .clkr = { 2619 .enable_reg = 0x52010, 2620 .enable_mask = BIT(3), 2621 .hw.init = &(const struct clk_init_data) { 2622 .name = "gcc_qupv3_wrap2_core_2x_clk", 2623 .ops = &clk_branch2_ops, 2624 }, 2625 }, 2626 }; 2627 2628 static struct clk_branch gcc_qupv3_wrap2_core_clk = { 2629 .halt_reg = 0x23294, 2630 .halt_check = BRANCH_HALT_VOTED, 2631 .clkr = { 2632 .enable_reg = 0x52010, 2633 .enable_mask = BIT(0), 2634 .hw.init = &(const struct clk_init_data) { 2635 .name = "gcc_qupv3_wrap2_core_clk", 2636 .ops = &clk_branch2_ops, 2637 }, 2638 }, 2639 }; 2640 2641 static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_2_clk = { 2642 .halt_reg = 0x1e9cc, 2643 .halt_check = BRANCH_HALT_VOTED, 2644 .hwcg_reg = 0x1e9cc, 2645 .hwcg_bit = 1, 2646 .clkr = { 2647 .enable_reg = 0x52010, 2648 .enable_mask = BIT(27), 2649 .hw.init = &(const struct clk_init_data) { 2650 .name = "gcc_qupv3_wrap2_ibi_ctrl_2_clk", 2651 .parent_hws = (const struct clk_hw*[]) { 2652 &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw, 2653 }, 2654 .num_parents = 1, 2655 .flags = CLK_SET_RATE_PARENT, 2656 .ops = &clk_branch2_ops, 2657 }, 2658 }, 2659 }; 2660 2661 static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_3_clk = { 2662 .halt_reg = 0x1e9d0, 2663 .halt_check = BRANCH_HALT_VOTED, 2664 .hwcg_reg = 0x1e9d0, 2665 .hwcg_bit = 1, 2666 .clkr = { 2667 .enable_reg = 0x52010, 2668 .enable_mask = BIT(28), 2669 .hw.init = &(const struct clk_init_data) { 2670 .name = "gcc_qupv3_wrap2_ibi_ctrl_3_clk", 2671 .parent_hws = (const struct clk_hw*[]) { 2672 &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw, 2673 }, 2674 .num_parents = 1, 2675 .flags = CLK_SET_RATE_PARENT, 2676 .ops = &clk_branch2_ops, 2677 }, 2678 }, 2679 }; 2680 2681 static struct clk_branch gcc_qupv3_wrap2_s0_clk = { 2682 .halt_reg = 0x1e004, 2683 .halt_check = BRANCH_HALT_VOTED, 2684 .clkr = { 2685 .enable_reg = 0x52010, 2686 .enable_mask = BIT(4), 2687 .hw.init = &(const struct clk_init_data) { 2688 .name = "gcc_qupv3_wrap2_s0_clk", 2689 .parent_hws = (const struct clk_hw*[]) { 2690 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw, 2691 }, 2692 .num_parents = 1, 2693 .flags = CLK_SET_RATE_PARENT, 2694 .ops = &clk_branch2_ops, 2695 }, 2696 }, 2697 }; 2698 2699 static struct clk_branch gcc_qupv3_wrap2_s1_clk = { 2700 .halt_reg = 0x1e13c, 2701 .halt_check = BRANCH_HALT_VOTED, 2702 .clkr = { 2703 .enable_reg = 0x52010, 2704 .enable_mask = BIT(5), 2705 .hw.init = &(const struct clk_init_data) { 2706 .name = "gcc_qupv3_wrap2_s1_clk", 2707 .parent_hws = (const struct clk_hw*[]) { 2708 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw, 2709 }, 2710 .num_parents = 1, 2711 .flags = CLK_SET_RATE_PARENT, 2712 .ops = &clk_branch2_ops, 2713 }, 2714 }, 2715 }; 2716 2717 static struct clk_branch gcc_qupv3_wrap2_s2_clk = { 2718 .halt_reg = 0x1e274, 2719 .halt_check = BRANCH_HALT_VOTED, 2720 .clkr = { 2721 .enable_reg = 0x52010, 2722 .enable_mask = BIT(6), 2723 .hw.init = &(const struct clk_init_data) { 2724 .name = "gcc_qupv3_wrap2_s2_clk", 2725 .parent_hws = (const struct clk_hw*[]) { 2726 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw, 2727 }, 2728 .num_parents = 1, 2729 .flags = CLK_SET_RATE_PARENT, 2730 .ops = &clk_branch2_ops, 2731 }, 2732 }, 2733 }; 2734 2735 static struct clk_branch gcc_qupv3_wrap2_s3_clk = { 2736 .halt_reg = 0x1e3ac, 2737 .halt_check = BRANCH_HALT_VOTED, 2738 .clkr = { 2739 .enable_reg = 0x52010, 2740 .enable_mask = BIT(7), 2741 .hw.init = &(const struct clk_init_data) { 2742 .name = "gcc_qupv3_wrap2_s3_clk", 2743 .parent_hws = (const struct clk_hw*[]) { 2744 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw, 2745 }, 2746 .num_parents = 1, 2747 .flags = CLK_SET_RATE_PARENT, 2748 .ops = &clk_branch2_ops, 2749 }, 2750 }, 2751 }; 2752 2753 static struct clk_branch gcc_qupv3_wrap2_s4_clk = { 2754 .halt_reg = 0x1e4e4, 2755 .halt_check = BRANCH_HALT_VOTED, 2756 .clkr = { 2757 .enable_reg = 0x52010, 2758 .enable_mask = BIT(8), 2759 .hw.init = &(const struct clk_init_data) { 2760 .name = "gcc_qupv3_wrap2_s4_clk", 2761 .parent_hws = (const struct clk_hw*[]) { 2762 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw, 2763 }, 2764 .num_parents = 1, 2765 .flags = CLK_SET_RATE_PARENT, 2766 .ops = &clk_branch2_ops, 2767 }, 2768 }, 2769 }; 2770 2771 static struct clk_branch gcc_qupv3_wrap2_s5_clk = { 2772 .halt_reg = 0x1e61c, 2773 .halt_check = BRANCH_HALT_VOTED, 2774 .clkr = { 2775 .enable_reg = 0x52010, 2776 .enable_mask = BIT(9), 2777 .hw.init = &(const struct clk_init_data) { 2778 .name = "gcc_qupv3_wrap2_s5_clk", 2779 .parent_hws = (const struct clk_hw*[]) { 2780 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw, 2781 }, 2782 .num_parents = 1, 2783 .flags = CLK_SET_RATE_PARENT, 2784 .ops = &clk_branch2_ops, 2785 }, 2786 }, 2787 }; 2788 2789 static struct clk_branch gcc_qupv3_wrap2_s6_clk = { 2790 .halt_reg = 0x1e754, 2791 .halt_check = BRANCH_HALT_VOTED, 2792 .clkr = { 2793 .enable_reg = 0x52010, 2794 .enable_mask = BIT(10), 2795 .hw.init = &(const struct clk_init_data) { 2796 .name = "gcc_qupv3_wrap2_s6_clk", 2797 .parent_hws = (const struct clk_hw*[]) { 2798 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw, 2799 }, 2800 .num_parents = 1, 2801 .flags = CLK_SET_RATE_PARENT, 2802 .ops = &clk_branch2_ops, 2803 }, 2804 }, 2805 }; 2806 2807 static struct clk_branch gcc_qupv3_wrap2_s7_clk = { 2808 .halt_reg = 0x1e88c, 2809 .halt_check = BRANCH_HALT_VOTED, 2810 .clkr = { 2811 .enable_reg = 0x52010, 2812 .enable_mask = BIT(17), 2813 .hw.init = &(const struct clk_init_data) { 2814 .name = "gcc_qupv3_wrap2_s7_clk", 2815 .parent_hws = (const struct clk_hw*[]) { 2816 &gcc_qupv3_wrap2_s7_clk_src.clkr.hw, 2817 }, 2818 .num_parents = 1, 2819 .flags = CLK_SET_RATE_PARENT, 2820 .ops = &clk_branch2_ops, 2821 }, 2822 }, 2823 }; 2824 2825 static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = { 2826 .halt_reg = 0x233f4, 2827 .halt_check = BRANCH_HALT_VOTED, 2828 .clkr = { 2829 .enable_reg = 0x52018, 2830 .enable_mask = BIT(1), 2831 .hw.init = &(const struct clk_init_data) { 2832 .name = "gcc_qupv3_wrap3_core_2x_clk", 2833 .ops = &clk_branch2_ops, 2834 }, 2835 }, 2836 }; 2837 2838 static struct clk_branch gcc_qupv3_wrap3_core_clk = { 2839 .halt_reg = 0x233e4, 2840 .halt_check = BRANCH_HALT_VOTED, 2841 .clkr = { 2842 .enable_reg = 0x52018, 2843 .enable_mask = BIT(0), 2844 .hw.init = &(const struct clk_init_data) { 2845 .name = "gcc_qupv3_wrap3_core_clk", 2846 .ops = &clk_branch2_ops, 2847 }, 2848 }, 2849 }; 2850 2851 static struct clk_branch gcc_qupv3_wrap3_qspi_ref_clk = { 2852 .halt_reg = 0x19014, 2853 .halt_check = BRANCH_HALT_VOTED, 2854 .clkr = { 2855 .enable_reg = 0x52018, 2856 .enable_mask = BIT(3), 2857 .hw.init = &(const struct clk_init_data) { 2858 .name = "gcc_qupv3_wrap3_qspi_ref_clk", 2859 .parent_hws = (const struct clk_hw*[]) { 2860 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw, 2861 }, 2862 .num_parents = 1, 2863 .flags = CLK_SET_RATE_PARENT, 2864 .ops = &clk_branch2_ops, 2865 }, 2866 }, 2867 }; 2868 2869 static struct clk_branch gcc_qupv3_wrap3_s0_clk = { 2870 .halt_reg = 0x19004, 2871 .halt_check = BRANCH_HALT_VOTED, 2872 .clkr = { 2873 .enable_reg = 0x52018, 2874 .enable_mask = BIT(2), 2875 .hw.init = &(const struct clk_init_data) { 2876 .name = "gcc_qupv3_wrap3_s0_clk", 2877 .parent_hws = (const struct clk_hw*[]) { 2878 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw, 2879 }, 2880 .num_parents = 1, 2881 .flags = CLK_SET_RATE_PARENT, 2882 .ops = &clk_branch2_ops, 2883 }, 2884 }, 2885 }; 2886 2887 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2888 .halt_reg = 0x2313c, 2889 .halt_check = BRANCH_HALT_VOTED, 2890 .hwcg_reg = 0x2313c, 2891 .hwcg_bit = 1, 2892 .clkr = { 2893 .enable_reg = 0x52008, 2894 .enable_mask = BIT(20), 2895 .hw.init = &(const struct clk_init_data) { 2896 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2897 .ops = &clk_branch2_ops, 2898 }, 2899 }, 2900 }; 2901 2902 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2903 .halt_reg = 0x23140, 2904 .halt_check = BRANCH_HALT_VOTED, 2905 .hwcg_reg = 0x23140, 2906 .hwcg_bit = 1, 2907 .clkr = { 2908 .enable_reg = 0x52008, 2909 .enable_mask = BIT(21), 2910 .hw.init = &(const struct clk_init_data) { 2911 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2912 .ops = &clk_branch2_ops, 2913 }, 2914 }, 2915 }; 2916 2917 static struct clk_branch gcc_qupv3_wrap_2_ibi_2_ahb_clk = { 2918 .halt_reg = 0x1e9c4, 2919 .halt_check = BRANCH_HALT_VOTED, 2920 .hwcg_reg = 0x1e9c4, 2921 .hwcg_bit = 1, 2922 .clkr = { 2923 .enable_reg = 0x52010, 2924 .enable_mask = BIT(25), 2925 .hw.init = &(const struct clk_init_data) { 2926 .name = "gcc_qupv3_wrap_2_ibi_2_ahb_clk", 2927 .ops = &clk_branch2_ops, 2928 }, 2929 }, 2930 }; 2931 2932 static struct clk_branch gcc_qupv3_wrap_2_ibi_3_ahb_clk = { 2933 .halt_reg = 0x1e9c8, 2934 .halt_check = BRANCH_HALT_VOTED, 2935 .hwcg_reg = 0x1e9c8, 2936 .hwcg_bit = 1, 2937 .clkr = { 2938 .enable_reg = 0x52010, 2939 .enable_mask = BIT(26), 2940 .hw.init = &(const struct clk_init_data) { 2941 .name = "gcc_qupv3_wrap_2_ibi_3_ahb_clk", 2942 .ops = &clk_branch2_ops, 2943 }, 2944 }, 2945 }; 2946 2947 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = { 2948 .halt_reg = 0x2328c, 2949 .halt_check = BRANCH_HALT_VOTED, 2950 .hwcg_reg = 0x2328c, 2951 .hwcg_bit = 1, 2952 .clkr = { 2953 .enable_reg = 0x52010, 2954 .enable_mask = BIT(2), 2955 .hw.init = &(const struct clk_init_data) { 2956 .name = "gcc_qupv3_wrap_2_m_ahb_clk", 2957 .ops = &clk_branch2_ops, 2958 }, 2959 }, 2960 }; 2961 2962 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = { 2963 .halt_reg = 0x23290, 2964 .halt_check = BRANCH_HALT_VOTED, 2965 .hwcg_reg = 0x23290, 2966 .hwcg_bit = 1, 2967 .clkr = { 2968 .enable_reg = 0x52010, 2969 .enable_mask = BIT(1), 2970 .hw.init = &(const struct clk_init_data) { 2971 .name = "gcc_qupv3_wrap_2_s_ahb_clk", 2972 .ops = &clk_branch2_ops, 2973 }, 2974 }, 2975 }; 2976 2977 static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = { 2978 .halt_reg = 0x233dc, 2979 .halt_check = BRANCH_HALT_VOTED, 2980 .hwcg_reg = 0x233dc, 2981 .hwcg_bit = 1, 2982 .clkr = { 2983 .enable_reg = 0x52010, 2984 .enable_mask = BIT(30), 2985 .hw.init = &(const struct clk_init_data) { 2986 .name = "gcc_qupv3_wrap_3_m_ahb_clk", 2987 .ops = &clk_branch2_ops, 2988 }, 2989 }, 2990 }; 2991 2992 static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = { 2993 .halt_reg = 0x233e0, 2994 .halt_check = BRANCH_HALT_VOTED, 2995 .hwcg_reg = 0x233e0, 2996 .hwcg_bit = 1, 2997 .clkr = { 2998 .enable_reg = 0x52010, 2999 .enable_mask = BIT(31), 3000 .hw.init = &(const struct clk_init_data) { 3001 .name = "gcc_qupv3_wrap_3_s_ahb_clk", 3002 .ops = &clk_branch2_ops, 3003 }, 3004 }, 3005 }; 3006 3007 static struct clk_branch gcc_sdcc2_ahb_clk = { 3008 .halt_reg = 0x14010, 3009 .halt_check = BRANCH_HALT, 3010 .clkr = { 3011 .enable_reg = 0x14010, 3012 .enable_mask = BIT(0), 3013 .hw.init = &(const struct clk_init_data) { 3014 .name = "gcc_sdcc2_ahb_clk", 3015 .ops = &clk_branch2_ops, 3016 }, 3017 }, 3018 }; 3019 3020 static struct clk_branch gcc_sdcc2_apps_clk = { 3021 .halt_reg = 0x14004, 3022 .halt_check = BRANCH_HALT, 3023 .clkr = { 3024 .enable_reg = 0x14004, 3025 .enable_mask = BIT(0), 3026 .hw.init = &(const struct clk_init_data) { 3027 .name = "gcc_sdcc2_apps_clk", 3028 .parent_hws = (const struct clk_hw*[]) { 3029 &gcc_sdcc2_apps_clk_src.clkr.hw, 3030 }, 3031 .num_parents = 1, 3032 .flags = CLK_SET_RATE_PARENT, 3033 .ops = &clk_branch2_ops, 3034 }, 3035 }, 3036 }; 3037 3038 static struct clk_branch gcc_sdcc4_ahb_clk = { 3039 .halt_reg = 0x16010, 3040 .halt_check = BRANCH_HALT, 3041 .clkr = { 3042 .enable_reg = 0x16010, 3043 .enable_mask = BIT(0), 3044 .hw.init = &(const struct clk_init_data) { 3045 .name = "gcc_sdcc4_ahb_clk", 3046 .ops = &clk_branch2_ops, 3047 }, 3048 }, 3049 }; 3050 3051 static struct clk_branch gcc_sdcc4_apps_clk = { 3052 .halt_reg = 0x16004, 3053 .halt_check = BRANCH_HALT, 3054 .clkr = { 3055 .enable_reg = 0x16004, 3056 .enable_mask = BIT(0), 3057 .hw.init = &(const struct clk_init_data) { 3058 .name = "gcc_sdcc4_apps_clk", 3059 .parent_hws = (const struct clk_hw*[]) { 3060 &gcc_sdcc4_apps_clk_src.clkr.hw, 3061 }, 3062 .num_parents = 1, 3063 .flags = CLK_SET_RATE_PARENT, 3064 .ops = &clk_branch2_ops, 3065 }, 3066 }, 3067 }; 3068 3069 static struct clk_branch gcc_ufs_phy_ahb_clk = { 3070 .halt_reg = 0x77024, 3071 .halt_check = BRANCH_HALT_VOTED, 3072 .hwcg_reg = 0x77024, 3073 .hwcg_bit = 1, 3074 .clkr = { 3075 .enable_reg = 0x77024, 3076 .enable_mask = BIT(0), 3077 .hw.init = &(const struct clk_init_data) { 3078 .name = "gcc_ufs_phy_ahb_clk", 3079 .ops = &clk_branch2_ops, 3080 }, 3081 }, 3082 }; 3083 3084 static struct clk_branch gcc_ufs_phy_axi_clk = { 3085 .halt_reg = 0x77018, 3086 .halt_check = BRANCH_HALT_VOTED, 3087 .hwcg_reg = 0x77018, 3088 .hwcg_bit = 1, 3089 .clkr = { 3090 .enable_reg = 0x77018, 3091 .enable_mask = BIT(0), 3092 .hw.init = &(const struct clk_init_data) { 3093 .name = "gcc_ufs_phy_axi_clk", 3094 .parent_hws = (const struct clk_hw*[]) { 3095 &gcc_ufs_phy_axi_clk_src.clkr.hw, 3096 }, 3097 .num_parents = 1, 3098 .flags = CLK_SET_RATE_PARENT, 3099 .ops = &clk_branch2_ops, 3100 }, 3101 }, 3102 }; 3103 3104 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 3105 .halt_reg = 0x77018, 3106 .halt_check = BRANCH_HALT_VOTED, 3107 .hwcg_reg = 0x77018, 3108 .hwcg_bit = 1, 3109 .clkr = { 3110 .enable_reg = 0x77018, 3111 .enable_mask = BIT(1), 3112 .hw.init = &(const struct clk_init_data) { 3113 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 3114 .parent_hws = (const struct clk_hw*[]) { 3115 &gcc_ufs_phy_axi_clk_src.clkr.hw, 3116 }, 3117 .num_parents = 1, 3118 .flags = CLK_SET_RATE_PARENT, 3119 .ops = &clk_branch2_ops, 3120 }, 3121 }, 3122 }; 3123 3124 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 3125 .halt_reg = 0x77074, 3126 .halt_check = BRANCH_HALT_VOTED, 3127 .hwcg_reg = 0x77074, 3128 .hwcg_bit = 1, 3129 .clkr = { 3130 .enable_reg = 0x77074, 3131 .enable_mask = BIT(0), 3132 .hw.init = &(const struct clk_init_data) { 3133 .name = "gcc_ufs_phy_ice_core_clk", 3134 .parent_hws = (const struct clk_hw*[]) { 3135 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 3136 }, 3137 .num_parents = 1, 3138 .flags = CLK_SET_RATE_PARENT, 3139 .ops = &clk_branch2_ops, 3140 }, 3141 }, 3142 }; 3143 3144 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 3145 .halt_reg = 0x77074, 3146 .halt_check = BRANCH_HALT_VOTED, 3147 .hwcg_reg = 0x77074, 3148 .hwcg_bit = 1, 3149 .clkr = { 3150 .enable_reg = 0x77074, 3151 .enable_mask = BIT(1), 3152 .hw.init = &(const struct clk_init_data) { 3153 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 3154 .parent_hws = (const struct clk_hw*[]) { 3155 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 3156 }, 3157 .num_parents = 1, 3158 .flags = CLK_SET_RATE_PARENT, 3159 .ops = &clk_branch2_ops, 3160 }, 3161 }, 3162 }; 3163 3164 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 3165 .halt_reg = 0x770b0, 3166 .halt_check = BRANCH_HALT_VOTED, 3167 .hwcg_reg = 0x770b0, 3168 .hwcg_bit = 1, 3169 .clkr = { 3170 .enable_reg = 0x770b0, 3171 .enable_mask = BIT(0), 3172 .hw.init = &(const struct clk_init_data) { 3173 .name = "gcc_ufs_phy_phy_aux_clk", 3174 .parent_hws = (const struct clk_hw*[]) { 3175 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 3176 }, 3177 .num_parents = 1, 3178 .flags = CLK_SET_RATE_PARENT, 3179 .ops = &clk_branch2_ops, 3180 }, 3181 }, 3182 }; 3183 3184 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 3185 .halt_reg = 0x770b0, 3186 .halt_check = BRANCH_HALT_VOTED, 3187 .hwcg_reg = 0x770b0, 3188 .hwcg_bit = 1, 3189 .clkr = { 3190 .enable_reg = 0x770b0, 3191 .enable_mask = BIT(1), 3192 .hw.init = &(const struct clk_init_data) { 3193 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 3194 .parent_hws = (const struct clk_hw*[]) { 3195 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 3196 }, 3197 .num_parents = 1, 3198 .flags = CLK_SET_RATE_PARENT, 3199 .ops = &clk_branch2_ops, 3200 }, 3201 }, 3202 }; 3203 3204 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 3205 .halt_reg = 0x7702c, 3206 .halt_check = BRANCH_HALT_DELAY, 3207 .clkr = { 3208 .enable_reg = 0x7702c, 3209 .enable_mask = BIT(0), 3210 .hw.init = &(const struct clk_init_data) { 3211 .name = "gcc_ufs_phy_rx_symbol_0_clk", 3212 .parent_hws = (const struct clk_hw*[]) { 3213 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw, 3214 }, 3215 .num_parents = 1, 3216 .flags = CLK_SET_RATE_PARENT, 3217 .ops = &clk_branch2_ops, 3218 }, 3219 }, 3220 }; 3221 3222 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 3223 .halt_reg = 0x770cc, 3224 .halt_check = BRANCH_HALT_DELAY, 3225 .clkr = { 3226 .enable_reg = 0x770cc, 3227 .enable_mask = BIT(0), 3228 .hw.init = &(const struct clk_init_data) { 3229 .name = "gcc_ufs_phy_rx_symbol_1_clk", 3230 .parent_hws = (const struct clk_hw*[]) { 3231 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw, 3232 }, 3233 .num_parents = 1, 3234 .flags = CLK_SET_RATE_PARENT, 3235 .ops = &clk_branch2_ops, 3236 }, 3237 }, 3238 }; 3239 3240 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 3241 .halt_reg = 0x77028, 3242 .halt_check = BRANCH_HALT_DELAY, 3243 .clkr = { 3244 .enable_reg = 0x77028, 3245 .enable_mask = BIT(0), 3246 .hw.init = &(const struct clk_init_data) { 3247 .name = "gcc_ufs_phy_tx_symbol_0_clk", 3248 .parent_hws = (const struct clk_hw*[]) { 3249 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw, 3250 }, 3251 .num_parents = 1, 3252 .flags = CLK_SET_RATE_PARENT, 3253 .ops = &clk_branch2_ops, 3254 }, 3255 }, 3256 }; 3257 3258 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 3259 .halt_reg = 0x77068, 3260 .halt_check = BRANCH_HALT_VOTED, 3261 .hwcg_reg = 0x77068, 3262 .hwcg_bit = 1, 3263 .clkr = { 3264 .enable_reg = 0x77068, 3265 .enable_mask = BIT(0), 3266 .hw.init = &(const struct clk_init_data) { 3267 .name = "gcc_ufs_phy_unipro_core_clk", 3268 .parent_hws = (const struct clk_hw*[]) { 3269 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 3270 }, 3271 .num_parents = 1, 3272 .flags = CLK_SET_RATE_PARENT, 3273 .ops = &clk_branch2_ops, 3274 }, 3275 }, 3276 }; 3277 3278 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 3279 .halt_reg = 0x77068, 3280 .halt_check = BRANCH_HALT_VOTED, 3281 .hwcg_reg = 0x77068, 3282 .hwcg_bit = 1, 3283 .clkr = { 3284 .enable_reg = 0x77068, 3285 .enable_mask = BIT(1), 3286 .hw.init = &(const struct clk_init_data) { 3287 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 3288 .parent_hws = (const struct clk_hw*[]) { 3289 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 3290 }, 3291 .num_parents = 1, 3292 .flags = CLK_SET_RATE_PARENT, 3293 .ops = &clk_branch2_ops, 3294 }, 3295 }, 3296 }; 3297 3298 static struct clk_branch gcc_usb30_prim_master_clk = { 3299 .halt_reg = 0x39018, 3300 .halt_check = BRANCH_HALT, 3301 .clkr = { 3302 .enable_reg = 0x39018, 3303 .enable_mask = BIT(0), 3304 .hw.init = &(const struct clk_init_data) { 3305 .name = "gcc_usb30_prim_master_clk", 3306 .parent_hws = (const struct clk_hw*[]) { 3307 &gcc_usb30_prim_master_clk_src.clkr.hw, 3308 }, 3309 .num_parents = 1, 3310 .flags = CLK_SET_RATE_PARENT, 3311 .ops = &clk_branch2_ops, 3312 }, 3313 }, 3314 }; 3315 3316 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3317 .halt_reg = 0x39028, 3318 .halt_check = BRANCH_HALT, 3319 .clkr = { 3320 .enable_reg = 0x39028, 3321 .enable_mask = BIT(0), 3322 .hw.init = &(const struct clk_init_data) { 3323 .name = "gcc_usb30_prim_mock_utmi_clk", 3324 .parent_hws = (const struct clk_hw*[]) { 3325 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 3326 }, 3327 .num_parents = 1, 3328 .flags = CLK_SET_RATE_PARENT, 3329 .ops = &clk_branch2_ops, 3330 }, 3331 }, 3332 }; 3333 3334 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3335 .halt_reg = 0x39024, 3336 .halt_check = BRANCH_HALT, 3337 .clkr = { 3338 .enable_reg = 0x39024, 3339 .enable_mask = BIT(0), 3340 .hw.init = &(const struct clk_init_data) { 3341 .name = "gcc_usb30_prim_sleep_clk", 3342 .ops = &clk_branch2_ops, 3343 }, 3344 }, 3345 }; 3346 3347 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 3348 .halt_reg = 0x39060, 3349 .halt_check = BRANCH_HALT, 3350 .clkr = { 3351 .enable_reg = 0x39060, 3352 .enable_mask = BIT(0), 3353 .hw.init = &(const struct clk_init_data) { 3354 .name = "gcc_usb3_prim_phy_aux_clk", 3355 .parent_hws = (const struct clk_hw*[]) { 3356 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 3357 }, 3358 .num_parents = 1, 3359 .flags = CLK_SET_RATE_PARENT, 3360 .ops = &clk_branch2_ops, 3361 }, 3362 }, 3363 }; 3364 3365 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3366 .halt_reg = 0x39064, 3367 .halt_check = BRANCH_HALT, 3368 .clkr = { 3369 .enable_reg = 0x39064, 3370 .enable_mask = BIT(0), 3371 .hw.init = &(const struct clk_init_data) { 3372 .name = "gcc_usb3_prim_phy_com_aux_clk", 3373 .parent_hws = (const struct clk_hw*[]) { 3374 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 3375 }, 3376 .num_parents = 1, 3377 .flags = CLK_SET_RATE_PARENT, 3378 .ops = &clk_branch2_ops, 3379 }, 3380 }, 3381 }; 3382 3383 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3384 .halt_reg = 0x39068, 3385 .halt_check = BRANCH_HALT_DELAY, 3386 .hwcg_reg = 0x39068, 3387 .hwcg_bit = 1, 3388 .clkr = { 3389 .enable_reg = 0x39068, 3390 .enable_mask = BIT(0), 3391 .hw.init = &(const struct clk_init_data) { 3392 .name = "gcc_usb3_prim_phy_pipe_clk", 3393 .parent_hws = (const struct clk_hw*[]) { 3394 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 3395 }, 3396 .num_parents = 1, 3397 .flags = CLK_SET_RATE_PARENT, 3398 .ops = &clk_branch2_ops, 3399 }, 3400 }, 3401 }; 3402 3403 static struct clk_branch gcc_video_axi0_clk = { 3404 .halt_reg = 0x32018, 3405 .halt_check = BRANCH_HALT_SKIP, 3406 .hwcg_reg = 0x32018, 3407 .hwcg_bit = 1, 3408 .clkr = { 3409 .enable_reg = 0x32018, 3410 .enable_mask = BIT(0), 3411 .hw.init = &(const struct clk_init_data) { 3412 .name = "gcc_video_axi0_clk", 3413 .ops = &clk_branch2_ops, 3414 }, 3415 }, 3416 }; 3417 3418 static struct clk_branch gcc_video_axi1_clk = { 3419 .halt_reg = 0x32024, 3420 .halt_check = BRANCH_HALT_SKIP, 3421 .hwcg_reg = 0x32024, 3422 .hwcg_bit = 1, 3423 .clkr = { 3424 .enable_reg = 0x32024, 3425 .enable_mask = BIT(0), 3426 .hw.init = &(const struct clk_init_data) { 3427 .name = "gcc_video_axi1_clk", 3428 .ops = &clk_branch2_ops, 3429 }, 3430 }, 3431 }; 3432 3433 static struct gdsc pcie_0_gdsc = { 3434 .gdscr = 0x6b004, 3435 .collapse_ctrl = 0x5214c, 3436 .collapse_mask = BIT(0), 3437 .pd = { 3438 .name = "pcie_0_gdsc", 3439 }, 3440 .pwrsts = PWRSTS_OFF_ON, 3441 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE, 3442 }; 3443 3444 static struct gdsc pcie_0_phy_gdsc = { 3445 .gdscr = 0x6c000, 3446 .collapse_ctrl = 0x5214c, 3447 .collapse_mask = BIT(3), 3448 .pd = { 3449 .name = "pcie_0_phy_gdsc", 3450 }, 3451 .pwrsts = PWRSTS_OFF_ON, 3452 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE, 3453 }; 3454 3455 static struct gdsc pcie_1_gdsc = { 3456 .gdscr = 0x8d004, 3457 .collapse_ctrl = 0x5214c, 3458 .collapse_mask = BIT(1), 3459 .pd = { 3460 .name = "pcie_1_gdsc", 3461 }, 3462 .pwrsts = PWRSTS_OFF_ON, 3463 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE, 3464 }; 3465 3466 static struct gdsc pcie_1_phy_gdsc = { 3467 .gdscr = 0x8e000, 3468 .collapse_ctrl = 0x5214c, 3469 .collapse_mask = BIT(4), 3470 .pd = { 3471 .name = "pcie_1_phy_gdsc", 3472 }, 3473 .pwrsts = PWRSTS_OFF_ON, 3474 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE, 3475 }; 3476 3477 static struct gdsc ufs_phy_gdsc = { 3478 .gdscr = 0x77004, 3479 .pd = { 3480 .name = "ufs_phy_gdsc", 3481 }, 3482 .pwrsts = PWRSTS_OFF_ON, 3483 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3484 }; 3485 3486 static struct gdsc ufs_mem_phy_gdsc = { 3487 .gdscr = 0x9e000, 3488 .pd = { 3489 .name = "ufs_mem_phy_gdsc", 3490 }, 3491 .pwrsts = PWRSTS_OFF_ON, 3492 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3493 }; 3494 3495 static struct gdsc usb30_prim_gdsc = { 3496 .gdscr = 0x39004, 3497 .pd = { 3498 .name = "usb30_prim_gdsc", 3499 }, 3500 .pwrsts = PWRSTS_OFF_ON, 3501 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3502 }; 3503 3504 static struct gdsc usb3_phy_gdsc = { 3505 .gdscr = 0x50018, 3506 .pd = { 3507 .name = "usb3_phy_gdsc", 3508 }, 3509 .pwrsts = PWRSTS_OFF_ON, 3510 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3511 }; 3512 3513 static struct clk_regmap *gcc_sm8650_clocks[] = { 3514 [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr, 3515 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 3516 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 3517 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 3518 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3519 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 3520 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 3521 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr, 3522 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3523 [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr, 3524 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 3525 [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr, 3526 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3527 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3528 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3529 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3530 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3531 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3532 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3533 [GCC_GPLL0] = &gcc_gpll0.clkr, 3534 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr, 3535 [GCC_GPLL1] = &gcc_gpll1.clkr, 3536 [GCC_GPLL3] = &gcc_gpll3.clkr, 3537 [GCC_GPLL4] = &gcc_gpll4.clkr, 3538 [GCC_GPLL6] = &gcc_gpll6.clkr, 3539 [GCC_GPLL7] = &gcc_gpll7.clkr, 3540 [GCC_GPLL9] = &gcc_gpll9.clkr, 3541 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3542 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3543 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3544 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3545 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3546 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 3547 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3548 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3549 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr, 3550 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr, 3551 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3552 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 3553 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3554 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 3555 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3556 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr, 3557 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3558 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3559 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr, 3560 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr, 3561 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr, 3562 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr, 3563 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3564 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr, 3565 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3566 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr, 3567 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3568 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3569 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3570 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3571 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3572 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3573 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3574 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr, 3575 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr, 3576 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr, 3577 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr, 3578 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr, 3579 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3580 [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr, 3581 [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr, 3582 [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr, 3583 [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr, 3584 [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr, 3585 [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr, 3586 [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr, 3587 [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr, 3588 [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr, 3589 [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr, 3590 [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr, 3591 [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr, 3592 [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr, 3593 [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr, 3594 [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr, 3595 [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr, 3596 [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr, 3597 [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr, 3598 [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr, 3599 [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr, 3600 [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr, 3601 [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr, 3602 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 3603 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 3604 [GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr, 3605 [GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr, 3606 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 3607 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 3608 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 3609 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 3610 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 3611 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 3612 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 3613 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 3614 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 3615 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 3616 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 3617 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 3618 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr, 3619 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr, 3620 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr, 3621 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr, 3622 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr, 3623 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr, 3624 [GCC_QUPV3_WRAP2_IBI_CTRL_0_CLK_SRC] = &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr, 3625 [GCC_QUPV3_WRAP2_IBI_CTRL_2_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_2_clk.clkr, 3626 [GCC_QUPV3_WRAP2_IBI_CTRL_3_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_3_clk.clkr, 3627 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr, 3628 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr, 3629 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr, 3630 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr, 3631 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr, 3632 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr, 3633 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr, 3634 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr, 3635 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr, 3636 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr, 3637 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr, 3638 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr, 3639 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr, 3640 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr, 3641 [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr, 3642 [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr, 3643 [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr, 3644 [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr, 3645 [GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr, 3646 [GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr, 3647 [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr, 3648 [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr, 3649 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 3650 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 3651 [GCC_QUPV3_WRAP_2_IBI_2_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_2_ahb_clk.clkr, 3652 [GCC_QUPV3_WRAP_2_IBI_3_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_3_ahb_clk.clkr, 3653 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr, 3654 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr, 3655 [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr, 3656 [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr, 3657 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3658 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3659 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3660 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3661 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3662 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 3663 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3664 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3665 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3666 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 3667 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3668 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3669 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 3670 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3671 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3672 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 3673 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 3674 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr, 3675 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 3676 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr, 3677 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 3678 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr, 3679 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3680 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr, 3681 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 3682 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3683 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3684 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3685 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3686 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 3687 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3688 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 3689 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3690 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3691 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3692 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr, 3693 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3694 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr, 3695 [GCC_GPLL0_AO] = &gcc_gpll0_ao.clkr, 3696 [GCC_GPLL0_OUT_EVEN_AO] = &gcc_gpll0_out_even_ao.clkr, 3697 [GCC_GPLL1_AO] = &gcc_gpll1_ao.clkr, 3698 [GCC_GPLL3_AO] = &gcc_gpll3_ao.clkr, 3699 [GCC_GPLL4_AO] = &gcc_gpll4_ao.clkr, 3700 [GCC_GPLL6_AO] = &gcc_gpll6_ao.clkr, 3701 }; 3702 3703 static const struct qcom_reset_map gcc_sm8650_resets[] = { 3704 [GCC_CAMERA_BCR] = { 0x26000 }, 3705 [GCC_DISPLAY_BCR] = { 0x27000 }, 3706 [GCC_GPU_BCR] = { 0x71000 }, 3707 [GCC_PCIE_0_BCR] = { 0x6b000 }, 3708 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 }, 3709 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 }, 3710 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3711 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 }, 3712 [GCC_PCIE_1_BCR] = { 0x8d000 }, 3713 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 }, 3714 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 }, 3715 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c }, 3716 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 }, 3717 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3718 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c }, 3719 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 }, 3720 [GCC_PDM_BCR] = { 0x33000 }, 3721 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 }, 3722 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 }, 3723 [GCC_QUPV3_WRAPPER_3_BCR] = { 0x19000 }, 3724 [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 }, 3725 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 3726 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 3727 [GCC_SDCC2_BCR] = { 0x14000 }, 3728 [GCC_SDCC4_BCR] = { 0x16000 }, 3729 [GCC_UFS_PHY_BCR] = { 0x77000 }, 3730 [GCC_USB30_PRIM_BCR] = { 0x39000 }, 3731 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 }, 3732 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 }, 3733 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 }, 3734 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c }, 3735 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 }, 3736 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 }, 3737 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x32018, .bit = 2, .udelay = 1000 }, 3738 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x32024, .bit = 2, .udelay = 1000 }, 3739 [GCC_VIDEO_BCR] = { 0x32000 }, 3740 }; 3741 3742 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 3743 DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src), 3744 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 3745 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 3746 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 3747 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 3748 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 3749 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src), 3750 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src), 3751 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src), 3752 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src), 3753 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src), 3754 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src), 3755 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src), 3756 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src), 3757 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src), 3758 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src), 3759 DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src), 3760 }; 3761 3762 static struct gdsc *gcc_sm8650_gdscs[] = { 3763 [PCIE_0_GDSC] = &pcie_0_gdsc, 3764 [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc, 3765 [PCIE_1_GDSC] = &pcie_1_gdsc, 3766 [PCIE_1_PHY_GDSC] = &pcie_1_phy_gdsc, 3767 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 3768 [UFS_MEM_PHY_GDSC] = &ufs_mem_phy_gdsc, 3769 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 3770 [USB3_PHY_GDSC] = &usb3_phy_gdsc, 3771 }; 3772 3773 static const struct regmap_config gcc_sm8650_regmap_config = { 3774 .reg_bits = 32, 3775 .reg_stride = 4, 3776 .val_bits = 32, 3777 .max_register = 0x1f41f0, 3778 .fast_io = true, 3779 }; 3780 3781 static const struct qcom_cc_desc gcc_sm8650_desc = { 3782 .config = &gcc_sm8650_regmap_config, 3783 .clks = gcc_sm8650_clocks, 3784 .num_clks = ARRAY_SIZE(gcc_sm8650_clocks), 3785 .resets = gcc_sm8650_resets, 3786 .num_resets = ARRAY_SIZE(gcc_sm8650_resets), 3787 .gdscs = gcc_sm8650_gdscs, 3788 .num_gdscs = ARRAY_SIZE(gcc_sm8650_gdscs), 3789 }; 3790 3791 static const struct of_device_id gcc_sm8650_match_table[] = { 3792 { .compatible = "qcom,sm8650-gcc" }, 3793 { } 3794 }; 3795 MODULE_DEVICE_TABLE(of, gcc_sm8650_match_table); 3796 3797 static int gcc_sm8650_probe(struct platform_device *pdev) 3798 { 3799 struct regmap *regmap; 3800 int ret; 3801 3802 regmap = qcom_cc_map(pdev, &gcc_sm8650_desc); 3803 if (IS_ERR(regmap)) 3804 return PTR_ERR(regmap); 3805 3806 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 3807 ARRAY_SIZE(gcc_dfs_clocks)); 3808 if (ret) 3809 return ret; 3810 3811 /* Keep some clocks always-on */ 3812 qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */ 3813 qcom_branch_set_clk_en(regmap, 0x26028); /* GCC_CAMERA_XO_CLK */ 3814 qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */ 3815 qcom_branch_set_clk_en(regmap, 0x27018); /* GCC_DISP_XO_CLK */ 3816 qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */ 3817 qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_VIDEO_AHB_CLK */ 3818 qcom_branch_set_clk_en(regmap, 0x32030); /* GCC_VIDEO_XO_CLK */ 3819 3820 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true); 3821 3822 /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */ 3823 regmap_write(regmap, 0x52150, 0x0); 3824 3825 return qcom_cc_really_probe(&pdev->dev, &gcc_sm8650_desc, regmap); 3826 } 3827 3828 static struct platform_driver gcc_sm8650_driver = { 3829 .probe = gcc_sm8650_probe, 3830 .driver = { 3831 .name = "gcc-sm8650", 3832 .of_match_table = gcc_sm8650_match_table, 3833 }, 3834 }; 3835 3836 static int __init gcc_sm8650_init(void) 3837 { 3838 return platform_driver_register(&gcc_sm8650_driver); 3839 } 3840 subsys_initcall(gcc_sm8650_init); 3841 3842 static void __exit gcc_sm8650_exit(void) 3843 { 3844 platform_driver_unregister(&gcc_sm8650_driver); 3845 } 3846 module_exit(gcc_sm8650_exit); 3847 3848 MODULE_DESCRIPTION("QTI GCC SM8650 Driver"); 3849 MODULE_LICENSE("GPL"); 3850