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