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