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