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