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