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