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