1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/mod_devicetable.h> 8 #include <linux/module.h> 9 #include <linux/platform_device.h> 10 #include <linux/regmap.h> 11 12 #include <dt-bindings/clock/qcom,sm4450-gcc.h> 13 14 #include "clk-alpha-pll.h" 15 #include "clk-branch.h" 16 #include "clk-rcg.h" 17 #include "clk-regmap.h" 18 #include "clk-regmap-divider.h" 19 #include "clk-regmap-mux.h" 20 #include "clk-regmap-phy-mux.h" 21 #include "gdsc.h" 22 #include "reset.h" 23 24 enum { 25 DT_BI_TCXO, 26 DT_SLEEP_CLK, 27 DT_PCIE_0_PIPE_CLK, 28 DT_UFS_PHY_RX_SYMBOL_0_CLK, 29 DT_UFS_PHY_RX_SYMBOL_1_CLK, 30 DT_UFS_PHY_TX_SYMBOL_0_CLK, 31 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 32 }; 33 34 enum { 35 P_BI_TCXO, 36 P_GCC_GPLL0_OUT_EVEN, 37 P_GCC_GPLL0_OUT_MAIN, 38 P_GCC_GPLL0_OUT_ODD, 39 P_GCC_GPLL1_OUT_MAIN, 40 P_GCC_GPLL3_OUT_MAIN, 41 P_GCC_GPLL4_OUT_MAIN, 42 P_GCC_GPLL9_OUT_MAIN, 43 P_GCC_GPLL10_OUT_MAIN, 44 P_SLEEP_CLK, 45 P_UFS_PHY_RX_SYMBOL_0_CLK, 46 P_UFS_PHY_RX_SYMBOL_1_CLK, 47 P_UFS_PHY_TX_SYMBOL_0_CLK, 48 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 49 }; 50 51 static const struct pll_vco lucid_evo_vco[] = { 52 { 249600000, 2020000000, 0 }, 53 }; 54 55 static struct clk_alpha_pll gcc_gpll0 = { 56 .offset = 0x0, 57 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 58 .clkr = { 59 .enable_reg = 0x62018, 60 .enable_mask = BIT(0), 61 .hw.init = &(const struct clk_init_data) { 62 .name = "gcc_gpll0", 63 .parent_data = &(const struct clk_parent_data) { 64 .index = DT_BI_TCXO, 65 }, 66 .num_parents = 1, 67 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 68 }, 69 }, 70 }; 71 72 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = { 73 { 0x1, 2 }, 74 { } 75 }; 76 77 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = { 78 .offset = 0x0, 79 .post_div_shift = 10, 80 .post_div_table = post_div_table_gcc_gpll0_out_even, 81 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 82 .width = 4, 83 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 84 .clkr.hw.init = &(const struct clk_init_data) { 85 .name = "gcc_gpll0_out_even", 86 .parent_hws = (const struct clk_hw*[]) { 87 &gcc_gpll0.clkr.hw, 88 }, 89 .num_parents = 1, 90 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 91 }, 92 }; 93 94 static const struct clk_div_table post_div_table_gcc_gpll0_out_odd[] = { 95 { 0x2, 3 }, 96 { } 97 }; 98 99 static struct clk_alpha_pll_postdiv gcc_gpll0_out_odd = { 100 .offset = 0x0, 101 .post_div_shift = 14, 102 .post_div_table = post_div_table_gcc_gpll0_out_odd, 103 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_odd), 104 .width = 4, 105 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 106 .clkr.hw.init = &(const struct clk_init_data) { 107 .name = "gcc_gpll0_out_odd", 108 .parent_hws = (const struct clk_hw*[]) { 109 &gcc_gpll0.clkr.hw, 110 }, 111 .num_parents = 1, 112 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 113 }, 114 }; 115 116 static struct clk_alpha_pll gcc_gpll1 = { 117 .offset = 0x1000, 118 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 119 .clkr = { 120 .enable_reg = 0x62018, 121 .enable_mask = BIT(1), 122 .hw.init = &(const struct clk_init_data) { 123 .name = "gcc_gpll1", 124 .parent_data = &(const struct clk_parent_data) { 125 .index = DT_BI_TCXO, 126 }, 127 .num_parents = 1, 128 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 129 }, 130 }, 131 }; 132 133 static const struct alpha_pll_config gcc_gpll3_config = { 134 .l = 0x14, 135 .alpha = 0xd555, 136 .config_ctl_val = 0x20485699, 137 .config_ctl_hi_val = 0x00182261, 138 .config_ctl_hi1_val = 0x32aa299c, 139 .user_ctl_val = 0x00000000, 140 .user_ctl_hi_val = 0x00000805, 141 }; 142 143 static struct clk_alpha_pll gcc_gpll3 = { 144 .offset = 0x3000, 145 .vco_table = lucid_evo_vco, 146 .num_vco = ARRAY_SIZE(lucid_evo_vco), 147 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 148 .clkr = { 149 .enable_reg = 0x62018, 150 .enable_mask = BIT(3), 151 .hw.init = &(const struct clk_init_data) { 152 .name = "gcc_gpll3", 153 .parent_data = &(const struct clk_parent_data) { 154 .index = DT_BI_TCXO, 155 }, 156 .num_parents = 1, 157 .ops = &clk_alpha_pll_lucid_evo_ops, 158 }, 159 }, 160 }; 161 162 static struct clk_alpha_pll gcc_gpll4 = { 163 .offset = 0x4000, 164 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 165 .clkr = { 166 .enable_reg = 0x62018, 167 .enable_mask = BIT(4), 168 .hw.init = &(const struct clk_init_data) { 169 .name = "gcc_gpll4", 170 .parent_data = &(const struct clk_parent_data) { 171 .index = DT_BI_TCXO, 172 }, 173 .num_parents = 1, 174 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 175 }, 176 }, 177 }; 178 179 static struct clk_alpha_pll gcc_gpll9 = { 180 .offset = 0x9000, 181 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 182 .clkr = { 183 .enable_reg = 0x62018, 184 .enable_mask = BIT(9), 185 .hw.init = &(const struct clk_init_data) { 186 .name = "gcc_gpll9", 187 .parent_data = &(const struct clk_parent_data) { 188 .index = DT_BI_TCXO, 189 }, 190 .num_parents = 1, 191 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 192 }, 193 }, 194 }; 195 196 static struct clk_alpha_pll gcc_gpll10 = { 197 .offset = 0xa000, 198 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 199 .clkr = { 200 .enable_reg = 0x62018, 201 .enable_mask = BIT(10), 202 .hw.init = &(const struct clk_init_data) { 203 .name = "gcc_gpll10", 204 .parent_data = &(const struct clk_parent_data) { 205 .index = DT_BI_TCXO, 206 }, 207 .num_parents = 1, 208 .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 209 }, 210 }, 211 }; 212 213 static const struct parent_map gcc_parent_map_0[] = { 214 { P_BI_TCXO, 0 }, 215 { P_GCC_GPLL0_OUT_MAIN, 1 }, 216 { P_GCC_GPLL0_OUT_EVEN, 6 }, 217 }; 218 219 static const struct clk_parent_data gcc_parent_data_0[] = { 220 { .index = DT_BI_TCXO }, 221 { .hw = &gcc_gpll0.clkr.hw }, 222 { .hw = &gcc_gpll0_out_even.clkr.hw }, 223 }; 224 225 static const struct parent_map gcc_parent_map_1[] = { 226 { P_BI_TCXO, 0 }, 227 { P_GCC_GPLL0_OUT_MAIN, 1 }, 228 { P_SLEEP_CLK, 5 }, 229 { P_GCC_GPLL0_OUT_EVEN, 6 }, 230 }; 231 232 static const struct clk_parent_data gcc_parent_data_1[] = { 233 { .index = DT_BI_TCXO }, 234 { .hw = &gcc_gpll0.clkr.hw }, 235 { .index = DT_SLEEP_CLK }, 236 { .hw = &gcc_gpll0_out_even.clkr.hw }, 237 }; 238 239 static const struct parent_map gcc_parent_map_2[] = { 240 { P_BI_TCXO, 0 }, 241 { P_GCC_GPLL0_OUT_MAIN, 1 }, 242 { P_GCC_GPLL1_OUT_MAIN, 4 }, 243 { P_GCC_GPLL4_OUT_MAIN, 5 }, 244 { P_GCC_GPLL0_OUT_EVEN, 6 }, 245 }; 246 247 static const struct clk_parent_data gcc_parent_data_2[] = { 248 { .index = DT_BI_TCXO }, 249 { .hw = &gcc_gpll0.clkr.hw }, 250 { .hw = &gcc_gpll1.clkr.hw }, 251 { .hw = &gcc_gpll4.clkr.hw }, 252 { .hw = &gcc_gpll0_out_even.clkr.hw }, 253 }; 254 255 static const struct parent_map gcc_parent_map_3[] = { 256 { P_BI_TCXO, 0 }, 257 { P_SLEEP_CLK, 5 }, 258 }; 259 260 static const struct clk_parent_data gcc_parent_data_3[] = { 261 { .index = DT_BI_TCXO }, 262 { .index = DT_SLEEP_CLK }, 263 }; 264 265 static const struct parent_map gcc_parent_map_4[] = { 266 { P_BI_TCXO, 0 }, 267 { P_GCC_GPLL0_OUT_MAIN, 1 }, 268 { P_GCC_GPLL0_OUT_ODD, 2 }, 269 { P_GCC_GPLL10_OUT_MAIN, 3 }, 270 { P_GCC_GPLL0_OUT_EVEN, 6 }, 271 }; 272 273 static const struct clk_parent_data gcc_parent_data_4[] = { 274 { .index = DT_BI_TCXO }, 275 { .hw = &gcc_gpll0.clkr.hw }, 276 { .hw = &gcc_gpll0_out_odd.clkr.hw }, 277 { .hw = &gcc_gpll10.clkr.hw }, 278 { .hw = &gcc_gpll0_out_even.clkr.hw }, 279 }; 280 281 static const struct parent_map gcc_parent_map_5[] = { 282 { P_BI_TCXO, 0 }, 283 }; 284 285 static const struct clk_parent_data gcc_parent_data_5[] = { 286 { .index = DT_BI_TCXO }, 287 }; 288 289 static const struct parent_map gcc_parent_map_6[] = { 290 { P_BI_TCXO, 0 }, 291 { P_GCC_GPLL0_OUT_MAIN, 1 }, 292 { P_GCC_GPLL9_OUT_MAIN, 2 }, 293 { P_GCC_GPLL4_OUT_MAIN, 5 }, 294 { P_GCC_GPLL0_OUT_EVEN, 6 }, 295 }; 296 297 static const struct clk_parent_data gcc_parent_data_6[] = { 298 { .index = DT_BI_TCXO }, 299 { .hw = &gcc_gpll0.clkr.hw }, 300 { .hw = &gcc_gpll9.clkr.hw }, 301 { .hw = &gcc_gpll4.clkr.hw }, 302 { .hw = &gcc_gpll0_out_even.clkr.hw }, 303 }; 304 305 static const struct parent_map gcc_parent_map_7[] = { 306 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 }, 307 { P_BI_TCXO, 2 }, 308 }; 309 310 static const struct clk_parent_data gcc_parent_data_7[] = { 311 { .index = DT_UFS_PHY_RX_SYMBOL_0_CLK }, 312 { .index = DT_BI_TCXO }, 313 }; 314 315 static const struct parent_map gcc_parent_map_8[] = { 316 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 }, 317 { P_BI_TCXO, 2 }, 318 }; 319 320 static const struct clk_parent_data gcc_parent_data_8[] = { 321 { .index = DT_UFS_PHY_RX_SYMBOL_1_CLK }, 322 { .index = DT_BI_TCXO }, 323 }; 324 325 static const struct parent_map gcc_parent_map_9[] = { 326 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 }, 327 { P_BI_TCXO, 2 }, 328 }; 329 330 static const struct clk_parent_data gcc_parent_data_9[] = { 331 { .index = DT_UFS_PHY_TX_SYMBOL_0_CLK }, 332 { .index = DT_BI_TCXO }, 333 }; 334 335 static const struct parent_map gcc_parent_map_10[] = { 336 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 }, 337 { P_BI_TCXO, 2 }, 338 }; 339 340 static const struct clk_parent_data gcc_parent_data_10[] = { 341 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK }, 342 { .index = DT_BI_TCXO }, 343 }; 344 345 static const struct parent_map gcc_parent_map_11[] = { 346 { P_BI_TCXO, 0 }, 347 { P_GCC_GPLL0_OUT_MAIN, 1 }, 348 { P_GCC_GPLL3_OUT_MAIN, 5 }, 349 }; 350 351 static const struct clk_parent_data gcc_parent_data_11[] = { 352 { .index = DT_BI_TCXO }, 353 { .hw = &gcc_gpll0.clkr.hw }, 354 { .hw = &gcc_gpll3.clkr.hw }, 355 }; 356 357 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = { 358 .reg = 0x7b060, 359 .clkr = { 360 .hw.init = &(const struct clk_init_data) { 361 .name = "gcc_pcie_0_pipe_clk_src", 362 .parent_data = &(const struct clk_parent_data) { 363 .index = DT_PCIE_0_PIPE_CLK, 364 }, 365 .num_parents = 1, 366 .ops = &clk_regmap_phy_mux_ops, 367 }, 368 }, 369 }; 370 371 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = { 372 .reg = 0x87060, 373 .shift = 0, 374 .width = 2, 375 .parent_map = gcc_parent_map_7, 376 .clkr = { 377 .hw.init = &(const struct clk_init_data) { 378 .name = "gcc_ufs_phy_rx_symbol_0_clk_src", 379 .parent_data = gcc_parent_data_7, 380 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 381 .ops = &clk_regmap_mux_closest_ops, 382 }, 383 }, 384 }; 385 386 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = { 387 .reg = 0x870d0, 388 .shift = 0, 389 .width = 2, 390 .parent_map = gcc_parent_map_8, 391 .clkr = { 392 .hw.init = &(const struct clk_init_data) { 393 .name = "gcc_ufs_phy_rx_symbol_1_clk_src", 394 .parent_data = gcc_parent_data_8, 395 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 396 .ops = &clk_regmap_mux_closest_ops, 397 }, 398 }, 399 }; 400 401 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = { 402 .reg = 0x87050, 403 .shift = 0, 404 .width = 2, 405 .parent_map = gcc_parent_map_9, 406 .clkr = { 407 .hw.init = &(const struct clk_init_data) { 408 .name = "gcc_ufs_phy_tx_symbol_0_clk_src", 409 .parent_data = gcc_parent_data_9, 410 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 411 .ops = &clk_regmap_mux_closest_ops, 412 }, 413 }, 414 }; 415 416 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = { 417 .reg = 0x49068, 418 .shift = 0, 419 .width = 2, 420 .parent_map = gcc_parent_map_10, 421 .clkr = { 422 .hw.init = &(const struct clk_init_data) { 423 .name = "gcc_usb3_prim_phy_pipe_clk_src", 424 .parent_data = gcc_parent_data_10, 425 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 426 .ops = &clk_regmap_mux_closest_ops, 427 }, 428 }, 429 }; 430 431 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 432 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 433 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 434 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 435 { } 436 }; 437 438 static struct clk_rcg2 gcc_gp1_clk_src = { 439 .cmd_rcgr = 0x74004, 440 .mnd_width = 16, 441 .hid_width = 5, 442 .parent_map = gcc_parent_map_1, 443 .freq_tbl = ftbl_gcc_gp1_clk_src, 444 .clkr.hw.init = &(const struct clk_init_data) { 445 .name = "gcc_gp1_clk_src", 446 .parent_data = gcc_parent_data_1, 447 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 448 .flags = CLK_SET_RATE_PARENT, 449 .ops = &clk_rcg2_shared_ops, 450 }, 451 }; 452 453 static struct clk_rcg2 gcc_gp2_clk_src = { 454 .cmd_rcgr = 0x75004, 455 .mnd_width = 16, 456 .hid_width = 5, 457 .parent_map = gcc_parent_map_1, 458 .freq_tbl = ftbl_gcc_gp1_clk_src, 459 .clkr.hw.init = &(const struct clk_init_data) { 460 .name = "gcc_gp2_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_shared_ops, 465 }, 466 }; 467 468 static struct clk_rcg2 gcc_gp3_clk_src = { 469 .cmd_rcgr = 0x76004, 470 .mnd_width = 16, 471 .hid_width = 5, 472 .parent_map = gcc_parent_map_1, 473 .freq_tbl = ftbl_gcc_gp1_clk_src, 474 .clkr.hw.init = &(const struct clk_init_data) { 475 .name = "gcc_gp3_clk_src", 476 .parent_data = gcc_parent_data_1, 477 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 478 .flags = CLK_SET_RATE_PARENT, 479 .ops = &clk_rcg2_shared_ops, 480 }, 481 }; 482 483 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 484 F(9600000, P_BI_TCXO, 2, 0, 0), 485 F(19200000, P_BI_TCXO, 1, 0, 0), 486 { } 487 }; 488 489 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 490 .cmd_rcgr = 0x7b064, 491 .mnd_width = 16, 492 .hid_width = 5, 493 .parent_map = gcc_parent_map_3, 494 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 495 .clkr.hw.init = &(const struct clk_init_data) { 496 .name = "gcc_pcie_0_aux_clk_src", 497 .parent_data = gcc_parent_data_3, 498 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 499 .flags = CLK_SET_RATE_PARENT, 500 .ops = &clk_rcg2_shared_ops, 501 }, 502 }; 503 504 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = { 505 F(19200000, P_BI_TCXO, 1, 0, 0), 506 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 507 { } 508 }; 509 510 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = { 511 .cmd_rcgr = 0x7b048, 512 .mnd_width = 0, 513 .hid_width = 5, 514 .parent_map = gcc_parent_map_0, 515 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src, 516 .clkr.hw.init = &(const struct clk_init_data) { 517 .name = "gcc_pcie_0_phy_rchng_clk_src", 518 .parent_data = gcc_parent_data_0, 519 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 520 .flags = CLK_SET_RATE_PARENT, 521 .ops = &clk_rcg2_shared_ops, 522 }, 523 }; 524 525 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 526 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0), 527 { } 528 }; 529 530 static struct clk_rcg2 gcc_pdm2_clk_src = { 531 .cmd_rcgr = 0x43010, 532 .mnd_width = 0, 533 .hid_width = 5, 534 .parent_map = gcc_parent_map_0, 535 .freq_tbl = ftbl_gcc_pdm2_clk_src, 536 .clkr.hw.init = &(const struct clk_init_data) { 537 .name = "gcc_pdm2_clk_src", 538 .parent_data = gcc_parent_data_0, 539 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 540 .flags = CLK_SET_RATE_PARENT, 541 .ops = &clk_rcg2_shared_ops, 542 }, 543 }; 544 545 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 546 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 547 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 548 F(19200000, P_BI_TCXO, 1, 0, 0), 549 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 550 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 551 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 552 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 553 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 554 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 555 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 556 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 557 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375), 558 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75), 559 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625), 560 F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0), 561 { } 562 }; 563 564 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 565 .name = "gcc_qupv3_wrap0_s0_clk_src", 566 .parent_data = gcc_parent_data_0, 567 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 568 .flags = CLK_SET_RATE_PARENT, 569 .ops = &clk_rcg2_shared_ops, 570 }; 571 572 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 573 .cmd_rcgr = 0x27014, 574 .mnd_width = 16, 575 .hid_width = 5, 576 .parent_map = gcc_parent_map_0, 577 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 578 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 579 }; 580 581 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s1_clk_src[] = { 582 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 583 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 584 F(19200000, P_BI_TCXO, 1, 0, 0), 585 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 586 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 587 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 588 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 589 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 590 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 591 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 592 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 593 { } 594 }; 595 596 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 597 .name = "gcc_qupv3_wrap0_s1_clk_src", 598 .parent_data = gcc_parent_data_0, 599 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 600 .flags = CLK_SET_RATE_PARENT, 601 .ops = &clk_rcg2_shared_ops, 602 }; 603 604 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 605 .cmd_rcgr = 0x27148, 606 .mnd_width = 16, 607 .hid_width = 5, 608 .parent_map = gcc_parent_map_0, 609 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 610 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 611 }; 612 613 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 614 .name = "gcc_qupv3_wrap0_s2_clk_src", 615 .parent_data = gcc_parent_data_0, 616 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 617 .flags = CLK_SET_RATE_PARENT, 618 .ops = &clk_rcg2_shared_ops, 619 }; 620 621 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 622 .cmd_rcgr = 0x2727c, 623 .mnd_width = 16, 624 .hid_width = 5, 625 .parent_map = gcc_parent_map_0, 626 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 627 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 628 }; 629 630 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 631 .name = "gcc_qupv3_wrap0_s3_clk_src", 632 .parent_data = gcc_parent_data_0, 633 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 634 .flags = CLK_SET_RATE_PARENT, 635 .ops = &clk_rcg2_shared_ops, 636 }; 637 638 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 639 .cmd_rcgr = 0x273b0, 640 .mnd_width = 16, 641 .hid_width = 5, 642 .parent_map = gcc_parent_map_0, 643 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 644 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 645 }; 646 647 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 648 .name = "gcc_qupv3_wrap0_s4_clk_src", 649 .parent_data = gcc_parent_data_0, 650 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 651 .flags = CLK_SET_RATE_PARENT, 652 .ops = &clk_rcg2_shared_ops, 653 }; 654 655 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 656 .cmd_rcgr = 0x274e4, 657 .mnd_width = 16, 658 .hid_width = 5, 659 .parent_map = gcc_parent_map_0, 660 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 661 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 662 }; 663 664 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 665 .name = "gcc_qupv3_wrap1_s0_clk_src", 666 .parent_data = gcc_parent_data_0, 667 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 668 .flags = CLK_SET_RATE_PARENT, 669 .ops = &clk_rcg2_shared_ops, 670 }; 671 672 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 673 .cmd_rcgr = 0x28014, 674 .mnd_width = 16, 675 .hid_width = 5, 676 .parent_map = gcc_parent_map_0, 677 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 678 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 679 }; 680 681 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 682 .name = "gcc_qupv3_wrap1_s1_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_shared_ops, 687 }; 688 689 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 690 .cmd_rcgr = 0x28148, 691 .mnd_width = 16, 692 .hid_width = 5, 693 .parent_map = gcc_parent_map_0, 694 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 695 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 696 }; 697 698 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 699 .name = "gcc_qupv3_wrap1_s2_clk_src", 700 .parent_data = gcc_parent_data_0, 701 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 702 .flags = CLK_SET_RATE_PARENT, 703 .ops = &clk_rcg2_shared_ops, 704 }; 705 706 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 707 .cmd_rcgr = 0x2827c, 708 .mnd_width = 16, 709 .hid_width = 5, 710 .parent_map = gcc_parent_map_0, 711 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 712 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 713 }; 714 715 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 716 .name = "gcc_qupv3_wrap1_s3_clk_src", 717 .parent_data = gcc_parent_data_0, 718 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 719 .flags = CLK_SET_RATE_PARENT, 720 .ops = &clk_rcg2_shared_ops, 721 }; 722 723 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 724 .cmd_rcgr = 0x283b0, 725 .mnd_width = 16, 726 .hid_width = 5, 727 .parent_map = gcc_parent_map_0, 728 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 729 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 730 }; 731 732 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 733 .name = "gcc_qupv3_wrap1_s4_clk_src", 734 .parent_data = gcc_parent_data_0, 735 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 736 .flags = CLK_SET_RATE_PARENT, 737 .ops = &clk_rcg2_shared_ops, 738 }; 739 740 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 741 .cmd_rcgr = 0x284e4, 742 .mnd_width = 16, 743 .hid_width = 5, 744 .parent_map = gcc_parent_map_0, 745 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src, 746 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 747 }; 748 749 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 750 F(144000, P_BI_TCXO, 16, 3, 25), 751 F(400000, P_BI_TCXO, 12, 1, 4), 752 F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3), 753 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 754 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 755 F(100000000, P_GCC_GPLL0_OUT_ODD, 2, 0, 0), 756 F(192000000, P_GCC_GPLL10_OUT_MAIN, 2, 0, 0), 757 F(384000000, P_GCC_GPLL10_OUT_MAIN, 1, 0, 0), 758 { } 759 }; 760 761 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 762 .cmd_rcgr = 0xb3010, 763 .mnd_width = 8, 764 .hid_width = 5, 765 .parent_map = gcc_parent_map_4, 766 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 767 .clkr.hw.init = &(const struct clk_init_data) { 768 .name = "gcc_sdcc1_apps_clk_src", 769 .parent_data = gcc_parent_data_4, 770 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 771 .flags = CLK_SET_RATE_PARENT, 772 .ops = &clk_rcg2_floor_ops, 773 }, 774 }; 775 776 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 777 F(100000000, P_GCC_GPLL0_OUT_ODD, 2, 0, 0), 778 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0), 779 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0), 780 { } 781 }; 782 783 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 784 .cmd_rcgr = 0xb3030, 785 .mnd_width = 0, 786 .hid_width = 5, 787 .parent_map = gcc_parent_map_4, 788 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 789 .clkr.hw.init = &(const struct clk_init_data) { 790 .name = "gcc_sdcc1_ice_core_clk_src", 791 .parent_data = gcc_parent_data_4, 792 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 793 .flags = CLK_SET_RATE_PARENT, 794 .ops = &clk_rcg2_floor_ops, 795 }, 796 }; 797 798 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 799 F(400000, P_BI_TCXO, 12, 1, 4), 800 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 801 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0), 802 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 803 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0), 804 { } 805 }; 806 807 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 808 .cmd_rcgr = 0x24014, 809 .mnd_width = 8, 810 .hid_width = 5, 811 .parent_map = gcc_parent_map_6, 812 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 813 .clkr.hw.init = &(const struct clk_init_data) { 814 .name = "gcc_sdcc2_apps_clk_src", 815 .parent_data = gcc_parent_data_6, 816 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 817 .flags = CLK_SET_RATE_PARENT, 818 .ops = &clk_rcg2_floor_ops, 819 }, 820 }; 821 822 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 823 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0), 824 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 825 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0), 826 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 827 { } 828 }; 829 830 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 831 .cmd_rcgr = 0x8702c, 832 .mnd_width = 8, 833 .hid_width = 5, 834 .parent_map = gcc_parent_map_0, 835 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 836 .clkr.hw.init = &(const struct clk_init_data) { 837 .name = "gcc_ufs_phy_axi_clk_src", 838 .parent_data = gcc_parent_data_0, 839 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 840 .flags = CLK_SET_RATE_PARENT, 841 .ops = &clk_rcg2_shared_ops, 842 }, 843 }; 844 845 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 846 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 847 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 848 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0), 849 { } 850 }; 851 852 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 853 .cmd_rcgr = 0x87074, 854 .mnd_width = 0, 855 .hid_width = 5, 856 .parent_map = gcc_parent_map_2, 857 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 858 .clkr.hw.init = &(const struct clk_init_data) { 859 .name = "gcc_ufs_phy_ice_core_clk_src", 860 .parent_data = gcc_parent_data_2, 861 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 862 .flags = CLK_SET_RATE_PARENT, 863 .ops = &clk_rcg2_shared_ops, 864 }, 865 }; 866 867 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 868 .cmd_rcgr = 0x870a8, 869 .mnd_width = 0, 870 .hid_width = 5, 871 .parent_map = gcc_parent_map_5, 872 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 873 .clkr.hw.init = &(const struct clk_init_data) { 874 .name = "gcc_ufs_phy_phy_aux_clk_src", 875 .parent_data = gcc_parent_data_5, 876 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 877 .flags = CLK_SET_RATE_PARENT, 878 .ops = &clk_rcg2_shared_ops, 879 }, 880 }; 881 882 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 883 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0), 884 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0), 885 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 886 { } 887 }; 888 889 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 890 .cmd_rcgr = 0x8708c, 891 .mnd_width = 0, 892 .hid_width = 5, 893 .parent_map = gcc_parent_map_0, 894 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 895 .clkr.hw.init = &(const struct clk_init_data) { 896 .name = "gcc_ufs_phy_unipro_core_clk_src", 897 .parent_data = gcc_parent_data_0, 898 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 899 .flags = CLK_SET_RATE_PARENT, 900 .ops = &clk_rcg2_shared_ops, 901 }, 902 }; 903 904 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 905 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0), 906 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0), 907 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 908 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0), 909 { } 910 }; 911 912 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 913 .cmd_rcgr = 0x49028, 914 .mnd_width = 8, 915 .hid_width = 5, 916 .parent_map = gcc_parent_map_0, 917 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 918 .clkr.hw.init = &(const struct clk_init_data) { 919 .name = "gcc_usb30_prim_master_clk_src", 920 .parent_data = gcc_parent_data_0, 921 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 922 .flags = CLK_SET_RATE_PARENT, 923 .ops = &clk_rcg2_shared_ops, 924 }, 925 }; 926 927 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 928 F(19200000, P_BI_TCXO, 1, 0, 0), 929 { } 930 }; 931 932 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 933 .cmd_rcgr = 0x49040, 934 .mnd_width = 0, 935 .hid_width = 5, 936 .parent_map = gcc_parent_map_0, 937 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 938 .clkr.hw.init = &(const struct clk_init_data) { 939 .name = "gcc_usb30_prim_mock_utmi_clk_src", 940 .parent_data = gcc_parent_data_0, 941 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 942 .flags = CLK_SET_RATE_PARENT, 943 .ops = &clk_rcg2_shared_ops, 944 }, 945 }; 946 947 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 948 .cmd_rcgr = 0x4906c, 949 .mnd_width = 0, 950 .hid_width = 5, 951 .parent_map = gcc_parent_map_3, 952 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 953 .clkr.hw.init = &(const struct clk_init_data) { 954 .name = "gcc_usb3_prim_phy_aux_clk_src", 955 .parent_data = gcc_parent_data_3, 956 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 957 .flags = CLK_SET_RATE_PARENT, 958 .ops = &clk_rcg2_shared_ops, 959 }, 960 }; 961 962 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = { 963 F(133333333, P_GCC_GPLL3_OUT_MAIN, 3, 0, 0), 964 F(240000000, P_GCC_GPLL3_OUT_MAIN, 2, 0, 0), 965 F(365000000, P_GCC_GPLL3_OUT_MAIN, 2, 0, 0), 966 F(384000000, P_GCC_GPLL3_OUT_MAIN, 2, 0, 0), 967 { } 968 }; 969 970 static struct clk_rcg2 gcc_video_venus_clk_src = { 971 .cmd_rcgr = 0xb6004, 972 .mnd_width = 0, 973 .hid_width = 5, 974 .parent_map = gcc_parent_map_11, 975 .freq_tbl = ftbl_gcc_video_venus_clk_src, 976 .clkr.hw.init = &(const struct clk_init_data) { 977 .name = "gcc_video_venus_clk_src", 978 .parent_data = gcc_parent_data_11, 979 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 980 .flags = CLK_SET_RATE_PARENT, 981 .ops = &clk_rcg2_shared_ops, 982 }, 983 }; 984 985 static struct clk_regmap_div gcc_pcie_0_pipe_div2_clk_src = { 986 .reg = 0x7b084, 987 .shift = 0, 988 .width = 4, 989 .clkr.hw.init = &(const struct clk_init_data) { 990 .name = "gcc_pcie_0_pipe_div2_clk_src", 991 .parent_hws = (const struct clk_hw*[]) { 992 &gcc_pcie_0_pipe_clk_src.clkr.hw, 993 }, 994 .num_parents = 1, 995 .flags = CLK_SET_RATE_PARENT, 996 .ops = &clk_regmap_div_ro_ops, 997 }, 998 }; 999 1000 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1001 .reg = 0x49058, 1002 .shift = 0, 1003 .width = 4, 1004 .clkr.hw.init = &(const struct clk_init_data) { 1005 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1006 .parent_hws = (const struct clk_hw*[]) { 1007 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 1008 }, 1009 .num_parents = 1, 1010 .flags = CLK_SET_RATE_PARENT, 1011 .ops = &clk_regmap_div_ro_ops, 1012 }, 1013 }; 1014 1015 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = { 1016 .halt_reg = 0x7b08c, 1017 .halt_check = BRANCH_HALT_SKIP, 1018 .hwcg_reg = 0x7b08c, 1019 .hwcg_bit = 1, 1020 .clkr = { 1021 .enable_reg = 0x62000, 1022 .enable_mask = BIT(12), 1023 .hw.init = &(const struct clk_init_data) { 1024 .name = "gcc_aggre_noc_pcie_0_axi_clk", 1025 .ops = &clk_branch2_ops, 1026 }, 1027 }, 1028 }; 1029 1030 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 1031 .halt_reg = 0x870d4, 1032 .halt_check = BRANCH_HALT_VOTED, 1033 .hwcg_reg = 0x870d4, 1034 .hwcg_bit = 1, 1035 .clkr = { 1036 .enable_reg = 0x870d4, 1037 .enable_mask = BIT(0), 1038 .hw.init = &(const struct clk_init_data) { 1039 .name = "gcc_aggre_ufs_phy_axi_clk", 1040 .parent_hws = (const struct clk_hw*[]) { 1041 &gcc_ufs_phy_axi_clk_src.clkr.hw, 1042 }, 1043 .num_parents = 1, 1044 .flags = CLK_SET_RATE_PARENT, 1045 .ops = &clk_branch2_ops, 1046 }, 1047 }, 1048 }; 1049 1050 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 1051 .halt_reg = 0x870d4, 1052 .halt_check = BRANCH_HALT_VOTED, 1053 .hwcg_reg = 0x870d4, 1054 .hwcg_bit = 1, 1055 .clkr = { 1056 .enable_reg = 0x870d4, 1057 .enable_mask = BIT(1), 1058 .hw.init = &(const struct clk_init_data) { 1059 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 1060 .parent_hws = (const struct clk_hw*[]) { 1061 &gcc_ufs_phy_axi_clk_src.clkr.hw, 1062 }, 1063 .num_parents = 1, 1064 .flags = CLK_SET_RATE_PARENT, 1065 .ops = &clk_branch2_ops, 1066 }, 1067 }, 1068 }; 1069 1070 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 1071 .halt_reg = 0x49088, 1072 .halt_check = BRANCH_HALT_VOTED, 1073 .hwcg_reg = 0x49088, 1074 .hwcg_bit = 1, 1075 .clkr = { 1076 .enable_reg = 0x49088, 1077 .enable_mask = BIT(0), 1078 .hw.init = &(const struct clk_init_data) { 1079 .name = "gcc_aggre_usb3_prim_axi_clk", 1080 .parent_hws = (const struct clk_hw*[]) { 1081 &gcc_usb30_prim_master_clk_src.clkr.hw, 1082 }, 1083 .num_parents = 1, 1084 .flags = CLK_SET_RATE_PARENT, 1085 .ops = &clk_branch2_ops, 1086 }, 1087 }, 1088 }; 1089 1090 static struct clk_branch gcc_boot_rom_ahb_clk = { 1091 .halt_reg = 0x48004, 1092 .halt_check = BRANCH_HALT_VOTED, 1093 .hwcg_reg = 0x48004, 1094 .hwcg_bit = 1, 1095 .clkr = { 1096 .enable_reg = 0x62000, 1097 .enable_mask = BIT(10), 1098 .hw.init = &(const struct clk_init_data) { 1099 .name = "gcc_boot_rom_ahb_clk", 1100 .ops = &clk_branch2_ops, 1101 }, 1102 }, 1103 }; 1104 1105 static struct clk_branch gcc_camera_hf_axi_clk = { 1106 .halt_reg = 0x36010, 1107 .halt_check = BRANCH_HALT_SKIP, 1108 .hwcg_reg = 0x36010, 1109 .hwcg_bit = 1, 1110 .clkr = { 1111 .enable_reg = 0x36010, 1112 .enable_mask = BIT(0), 1113 .hw.init = &(const struct clk_init_data) { 1114 .name = "gcc_camera_hf_axi_clk", 1115 .ops = &clk_branch2_ops, 1116 }, 1117 }, 1118 }; 1119 1120 static struct clk_branch gcc_camera_sf_axi_clk = { 1121 .halt_reg = 0x36014, 1122 .halt_check = BRANCH_HALT_SKIP, 1123 .hwcg_reg = 0x36014, 1124 .hwcg_bit = 1, 1125 .clkr = { 1126 .enable_reg = 0x36014, 1127 .enable_mask = BIT(0), 1128 .hw.init = &(const struct clk_init_data) { 1129 .name = "gcc_camera_sf_axi_clk", 1130 .ops = &clk_branch2_ops, 1131 }, 1132 }, 1133 }; 1134 1135 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = { 1136 .halt_reg = 0x20030, 1137 .halt_check = BRANCH_HALT_VOTED, 1138 .hwcg_reg = 0x20030, 1139 .hwcg_bit = 1, 1140 .clkr = { 1141 .enable_reg = 0x62000, 1142 .enable_mask = BIT(20), 1143 .hw.init = &(const struct clk_init_data) { 1144 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk", 1145 .ops = &clk_branch2_ops, 1146 }, 1147 }, 1148 }; 1149 1150 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1151 .halt_reg = 0x49084, 1152 .halt_check = BRANCH_HALT_VOTED, 1153 .hwcg_reg = 0x49084, 1154 .hwcg_bit = 1, 1155 .clkr = { 1156 .enable_reg = 0x49084, 1157 .enable_mask = BIT(0), 1158 .hw.init = &(const struct clk_init_data) { 1159 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1160 .parent_hws = (const struct clk_hw*[]) { 1161 &gcc_usb30_prim_master_clk_src.clkr.hw, 1162 }, 1163 .num_parents = 1, 1164 .flags = CLK_SET_RATE_PARENT, 1165 .ops = &clk_branch2_ops, 1166 }, 1167 }, 1168 }; 1169 1170 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1171 .halt_reg = 0x81154, 1172 .halt_check = BRANCH_HALT_SKIP, 1173 .hwcg_reg = 0x81154, 1174 .hwcg_bit = 1, 1175 .clkr = { 1176 .enable_reg = 0x81154, 1177 .enable_mask = BIT(0), 1178 .hw.init = &(const struct clk_init_data) { 1179 .name = "gcc_ddrss_gpu_axi_clk", 1180 .ops = &clk_branch2_aon_ops, 1181 }, 1182 }, 1183 }; 1184 1185 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = { 1186 .halt_reg = 0x7b090, 1187 .halt_check = BRANCH_HALT_SKIP, 1188 .hwcg_reg = 0x7b090, 1189 .hwcg_bit = 1, 1190 .clkr = { 1191 .enable_reg = 0x62000, 1192 .enable_mask = BIT(19), 1193 .hw.init = &(const struct clk_init_data) { 1194 .name = "gcc_ddrss_pcie_sf_tbu_clk", 1195 .ops = &clk_branch2_ops, 1196 }, 1197 }, 1198 }; 1199 1200 static struct clk_branch gcc_disp_hf_axi_clk = { 1201 .halt_reg = 0x3700c, 1202 .halt_check = BRANCH_HALT_SKIP, 1203 .hwcg_reg = 0x3700c, 1204 .hwcg_bit = 1, 1205 .clkr = { 1206 .enable_reg = 0x3700c, 1207 .enable_mask = BIT(0), 1208 .hw.init = &(const struct clk_init_data) { 1209 .name = "gcc_disp_hf_axi_clk", 1210 .ops = &clk_branch2_ops, 1211 }, 1212 }, 1213 }; 1214 1215 static struct clk_branch gcc_eusb3_0_clkref_en = { 1216 .halt_reg = 0x9c00c, 1217 .halt_check = BRANCH_HALT_DELAY, 1218 .clkr = { 1219 .enable_reg = 0x9c00c, 1220 .enable_mask = BIT(0), 1221 .hw.init = &(const struct clk_init_data) { 1222 .name = "gcc_eusb3_0_clkref_en", 1223 .ops = &clk_branch2_ops, 1224 }, 1225 }, 1226 }; 1227 1228 static struct clk_branch gcc_gp1_clk = { 1229 .halt_reg = 0x74000, 1230 .halt_check = BRANCH_HALT, 1231 .clkr = { 1232 .enable_reg = 0x74000, 1233 .enable_mask = BIT(0), 1234 .hw.init = &(const struct clk_init_data) { 1235 .name = "gcc_gp1_clk", 1236 .parent_hws = (const struct clk_hw*[]) { 1237 &gcc_gp1_clk_src.clkr.hw, 1238 }, 1239 .num_parents = 1, 1240 .flags = CLK_SET_RATE_PARENT, 1241 .ops = &clk_branch2_ops, 1242 }, 1243 }, 1244 }; 1245 1246 static struct clk_branch gcc_gp2_clk = { 1247 .halt_reg = 0x75000, 1248 .halt_check = BRANCH_HALT, 1249 .clkr = { 1250 .enable_reg = 0x75000, 1251 .enable_mask = BIT(0), 1252 .hw.init = &(const struct clk_init_data) { 1253 .name = "gcc_gp2_clk", 1254 .parent_hws = (const struct clk_hw*[]) { 1255 &gcc_gp2_clk_src.clkr.hw, 1256 }, 1257 .num_parents = 1, 1258 .flags = CLK_SET_RATE_PARENT, 1259 .ops = &clk_branch2_ops, 1260 }, 1261 }, 1262 }; 1263 1264 static struct clk_branch gcc_gp3_clk = { 1265 .halt_reg = 0x76000, 1266 .halt_check = BRANCH_HALT, 1267 .clkr = { 1268 .enable_reg = 0x76000, 1269 .enable_mask = BIT(0), 1270 .hw.init = &(const struct clk_init_data) { 1271 .name = "gcc_gp3_clk", 1272 .parent_hws = (const struct clk_hw*[]) { 1273 &gcc_gp3_clk_src.clkr.hw, 1274 }, 1275 .num_parents = 1, 1276 .flags = CLK_SET_RATE_PARENT, 1277 .ops = &clk_branch2_ops, 1278 }, 1279 }, 1280 }; 1281 1282 static struct clk_branch gcc_gpu_gpll0_clk_src = { 1283 .halt_check = BRANCH_HALT_DELAY, 1284 .clkr = { 1285 .enable_reg = 0x62000, 1286 .enable_mask = BIT(15), 1287 .hw.init = &(const struct clk_init_data) { 1288 .name = "gcc_gpu_gpll0_clk_src", 1289 .parent_hws = (const struct clk_hw*[]) { 1290 &gcc_gpll0.clkr.hw, 1291 }, 1292 .num_parents = 1, 1293 .flags = CLK_SET_RATE_PARENT, 1294 .ops = &clk_branch2_ops, 1295 }, 1296 }, 1297 }; 1298 1299 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 1300 .halt_check = BRANCH_HALT_DELAY, 1301 .clkr = { 1302 .enable_reg = 0x62000, 1303 .enable_mask = BIT(16), 1304 .hw.init = &(const struct clk_init_data) { 1305 .name = "gcc_gpu_gpll0_div_clk_src", 1306 .parent_hws = (const struct clk_hw*[]) { 1307 &gcc_gpll0_out_even.clkr.hw, 1308 }, 1309 .num_parents = 1, 1310 .flags = CLK_SET_RATE_PARENT, 1311 .ops = &clk_branch2_ops, 1312 }, 1313 }, 1314 }; 1315 1316 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1317 .halt_reg = 0x81010, 1318 .halt_check = BRANCH_HALT_VOTED, 1319 .hwcg_reg = 0x81010, 1320 .hwcg_bit = 1, 1321 .clkr = { 1322 .enable_reg = 0x81010, 1323 .enable_mask = BIT(0), 1324 .hw.init = &(const struct clk_init_data) { 1325 .name = "gcc_gpu_memnoc_gfx_clk", 1326 .ops = &clk_branch2_ops, 1327 }, 1328 }, 1329 }; 1330 1331 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1332 .halt_reg = 0x81018, 1333 .halt_check = BRANCH_HALT_DELAY, 1334 .clkr = { 1335 .enable_reg = 0x81018, 1336 .enable_mask = BIT(0), 1337 .hw.init = &(const struct clk_init_data) { 1338 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1339 .ops = &clk_branch2_ops, 1340 }, 1341 }, 1342 }; 1343 1344 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_audio_tbu_clk = { 1345 .halt_reg = 0x8d004, 1346 .halt_check = BRANCH_HALT_VOTED, 1347 .clkr = { 1348 .enable_reg = 0x8d004, 1349 .enable_mask = BIT(0), 1350 .hw.init = &(const struct clk_init_data){ 1351 .name = "gcc_hlos1_vote_aggre_noc_mmu_audio_tbu_clk", 1352 .ops = &clk_branch2_ops, 1353 }, 1354 }, 1355 }; 1356 1357 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_pcie_tbu_clk = { 1358 .halt_reg = 0x8d010, 1359 .halt_check = BRANCH_HALT_VOTED, 1360 .clkr = { 1361 .enable_reg = 0x8d010, 1362 .enable_mask = BIT(0), 1363 .hw.init = &(const struct clk_init_data){ 1364 .name = "gcc_hlos1_vote_aggre_noc_mmu_pcie_tbu_clk", 1365 .ops = &clk_branch2_ops, 1366 }, 1367 }, 1368 }; 1369 1370 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_tbu1_clk = { 1371 .halt_reg = 0x8d008, 1372 .halt_check = BRANCH_HALT_VOTED, 1373 .clkr = { 1374 .enable_reg = 0x8d008, 1375 .enable_mask = BIT(0), 1376 .hw.init = &(const struct clk_init_data){ 1377 .name = "gcc_hlos1_vote_aggre_noc_mmu_tbu1_clk", 1378 .ops = &clk_branch2_ops, 1379 }, 1380 }, 1381 }; 1382 1383 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_tbu2_clk = { 1384 .halt_reg = 0x8d00c, 1385 .halt_check = BRANCH_HALT_VOTED, 1386 .clkr = { 1387 .enable_reg = 0x8d00c, 1388 .enable_mask = BIT(0), 1389 .hw.init = &(const struct clk_init_data){ 1390 .name = "gcc_hlos1_vote_aggre_noc_mmu_tbu2_clk", 1391 .ops = &clk_branch2_ops, 1392 }, 1393 }, 1394 }; 1395 1396 static struct clk_branch gcc_hlos1_vote_mmnoc_mmu_tbu_hf0_clk = { 1397 .halt_reg = 0x8d018, 1398 .halt_check = BRANCH_HALT_VOTED, 1399 .clkr = { 1400 .enable_reg = 0x8d018, 1401 .enable_mask = BIT(0), 1402 .hw.init = &(const struct clk_init_data){ 1403 .name = "gcc_hlos1_vote_mmnoc_mmu_tbu_hf0_clk", 1404 .ops = &clk_branch2_ops, 1405 }, 1406 }, 1407 }; 1408 1409 static struct clk_branch gcc_hlos1_vote_mmnoc_mmu_tbu_hf1_clk = { 1410 .halt_reg = 0x8d01c, 1411 .halt_check = BRANCH_HALT_VOTED, 1412 .clkr = { 1413 .enable_reg = 0x8d01c, 1414 .enable_mask = BIT(0), 1415 .hw.init = &(const struct clk_init_data){ 1416 .name = "gcc_hlos1_vote_mmnoc_mmu_tbu_hf1_clk", 1417 .ops = &clk_branch2_ops, 1418 }, 1419 }, 1420 }; 1421 1422 static struct clk_branch gcc_hlos1_vote_mmnoc_mmu_tbu_sf0_clk = { 1423 .halt_reg = 0x8d014, 1424 .halt_check = BRANCH_HALT_VOTED, 1425 .clkr = { 1426 .enable_reg = 0x8d014, 1427 .enable_mask = BIT(0), 1428 .hw.init = &(const struct clk_init_data){ 1429 .name = "gcc_hlos1_vote_mmnoc_mmu_tbu_sf0_clk", 1430 .ops = &clk_branch2_ops, 1431 }, 1432 }, 1433 }; 1434 1435 static struct clk_branch gcc_hlos1_vote_mmu_tcu_clk = { 1436 .halt_reg = 0x8d02c, 1437 .halt_check = BRANCH_HALT_VOTED, 1438 .clkr = { 1439 .enable_reg = 0x8d02c, 1440 .enable_mask = BIT(0), 1441 .hw.init = &(const struct clk_init_data){ 1442 .name = "gcc_hlos1_vote_mmu_tcu_clk", 1443 .ops = &clk_branch2_ops, 1444 }, 1445 }, 1446 }; 1447 1448 static struct clk_branch gcc_pcie_0_aux_clk = { 1449 .halt_reg = 0x7b034, 1450 .halt_check = BRANCH_HALT_VOTED, 1451 .clkr = { 1452 .enable_reg = 0x62008, 1453 .enable_mask = BIT(3), 1454 .hw.init = &(const struct clk_init_data) { 1455 .name = "gcc_pcie_0_aux_clk", 1456 .parent_hws = (const struct clk_hw*[]) { 1457 &gcc_pcie_0_aux_clk_src.clkr.hw, 1458 }, 1459 .num_parents = 1, 1460 .flags = CLK_SET_RATE_PARENT, 1461 .ops = &clk_branch2_ops, 1462 }, 1463 }, 1464 }; 1465 1466 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1467 .halt_reg = 0x7b030, 1468 .halt_check = BRANCH_HALT_VOTED, 1469 .hwcg_reg = 0x7b030, 1470 .hwcg_bit = 1, 1471 .clkr = { 1472 .enable_reg = 0x62008, 1473 .enable_mask = BIT(2), 1474 .hw.init = &(const struct clk_init_data) { 1475 .name = "gcc_pcie_0_cfg_ahb_clk", 1476 .ops = &clk_branch2_ops, 1477 }, 1478 }, 1479 }; 1480 1481 static struct clk_branch gcc_pcie_0_clkref_en = { 1482 .halt_reg = 0x9c004, 1483 .halt_check = BRANCH_HALT_DELAY, 1484 .clkr = { 1485 .enable_reg = 0x9c004, 1486 .enable_mask = BIT(0), 1487 .hw.init = &(const struct clk_init_data) { 1488 .name = "gcc_pcie_0_clkref_en", 1489 .ops = &clk_branch2_ops, 1490 }, 1491 }, 1492 }; 1493 1494 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1495 .halt_reg = 0x7b028, 1496 .halt_check = BRANCH_HALT_SKIP, 1497 .clkr = { 1498 .enable_reg = 0x62008, 1499 .enable_mask = BIT(1), 1500 .hw.init = &(const struct clk_init_data) { 1501 .name = "gcc_pcie_0_mstr_axi_clk", 1502 .ops = &clk_branch2_ops, 1503 }, 1504 }, 1505 }; 1506 1507 static struct clk_branch gcc_pcie_0_phy_rchng_clk = { 1508 .halt_reg = 0x7b044, 1509 .halt_check = BRANCH_HALT_VOTED, 1510 .clkr = { 1511 .enable_reg = 0x62000, 1512 .enable_mask = BIT(22), 1513 .hw.init = &(const struct clk_init_data) { 1514 .name = "gcc_pcie_0_phy_rchng_clk", 1515 .parent_hws = (const struct clk_hw*[]) { 1516 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw, 1517 }, 1518 .num_parents = 1, 1519 .flags = CLK_SET_RATE_PARENT, 1520 .ops = &clk_branch2_ops, 1521 }, 1522 }, 1523 }; 1524 1525 static struct clk_branch gcc_pcie_0_pipe_clk = { 1526 .halt_reg = 0x7b03c, 1527 .halt_check = BRANCH_HALT_SKIP, 1528 .clkr = { 1529 .enable_reg = 0x62008, 1530 .enable_mask = BIT(4), 1531 .hw.init = &(const struct clk_init_data) { 1532 .name = "gcc_pcie_0_pipe_clk", 1533 .parent_hws = (const struct clk_hw*[]) { 1534 &gcc_pcie_0_pipe_clk_src.clkr.hw, 1535 }, 1536 .num_parents = 1, 1537 .flags = CLK_SET_RATE_PARENT, 1538 .ops = &clk_branch2_ops, 1539 }, 1540 }, 1541 }; 1542 1543 static struct clk_branch gcc_pcie_0_pipe_div2_clk = { 1544 .halt_reg = 0x7b094, 1545 .halt_check = BRANCH_HALT_SKIP, 1546 .clkr = { 1547 .enable_reg = 0x62010, 1548 .enable_mask = BIT(26), 1549 .hw.init = &(const struct clk_init_data) { 1550 .name = "gcc_pcie_0_pipe_div2_clk", 1551 .parent_hws = (const struct clk_hw*[]) { 1552 &gcc_pcie_0_pipe_div2_clk_src.clkr.hw, 1553 }, 1554 .num_parents = 1, 1555 .flags = CLK_SET_RATE_PARENT, 1556 .ops = &clk_branch2_ops, 1557 }, 1558 }, 1559 }; 1560 1561 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1562 .halt_reg = 0x7b020, 1563 .halt_check = BRANCH_HALT_VOTED, 1564 .hwcg_reg = 0x7b020, 1565 .hwcg_bit = 1, 1566 .clkr = { 1567 .enable_reg = 0x62008, 1568 .enable_mask = BIT(0), 1569 .hw.init = &(const struct clk_init_data) { 1570 .name = "gcc_pcie_0_slv_axi_clk", 1571 .ops = &clk_branch2_ops, 1572 }, 1573 }, 1574 }; 1575 1576 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1577 .halt_reg = 0x7b01c, 1578 .halt_check = BRANCH_HALT_VOTED, 1579 .clkr = { 1580 .enable_reg = 0x62008, 1581 .enable_mask = BIT(5), 1582 .hw.init = &(const struct clk_init_data) { 1583 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1584 .ops = &clk_branch2_ops, 1585 }, 1586 }, 1587 }; 1588 1589 static struct clk_branch gcc_pdm2_clk = { 1590 .halt_reg = 0x4300c, 1591 .halt_check = BRANCH_HALT, 1592 .clkr = { 1593 .enable_reg = 0x4300c, 1594 .enable_mask = BIT(0), 1595 .hw.init = &(const struct clk_init_data) { 1596 .name = "gcc_pdm2_clk", 1597 .parent_hws = (const struct clk_hw*[]) { 1598 &gcc_pdm2_clk_src.clkr.hw, 1599 }, 1600 .num_parents = 1, 1601 .flags = CLK_SET_RATE_PARENT, 1602 .ops = &clk_branch2_ops, 1603 }, 1604 }, 1605 }; 1606 1607 static struct clk_branch gcc_pdm_ahb_clk = { 1608 .halt_reg = 0x43004, 1609 .halt_check = BRANCH_HALT_VOTED, 1610 .hwcg_reg = 0x43004, 1611 .hwcg_bit = 1, 1612 .clkr = { 1613 .enable_reg = 0x43004, 1614 .enable_mask = BIT(0), 1615 .hw.init = &(const struct clk_init_data) { 1616 .name = "gcc_pdm_ahb_clk", 1617 .ops = &clk_branch2_ops, 1618 }, 1619 }, 1620 }; 1621 1622 static struct clk_branch gcc_pdm_xo4_clk = { 1623 .halt_reg = 0x43008, 1624 .halt_check = BRANCH_HALT, 1625 .clkr = { 1626 .enable_reg = 0x43008, 1627 .enable_mask = BIT(0), 1628 .hw.init = &(const struct clk_init_data) { 1629 .name = "gcc_pdm_xo4_clk", 1630 .ops = &clk_branch2_ops, 1631 }, 1632 }, 1633 }; 1634 1635 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 1636 .halt_reg = 0x36008, 1637 .halt_check = BRANCH_HALT_VOTED, 1638 .hwcg_reg = 0x36008, 1639 .hwcg_bit = 1, 1640 .clkr = { 1641 .enable_reg = 0x36008, 1642 .enable_mask = BIT(0), 1643 .hw.init = &(const struct clk_init_data) { 1644 .name = "gcc_qmip_camera_nrt_ahb_clk", 1645 .ops = &clk_branch2_ops, 1646 }, 1647 }, 1648 }; 1649 1650 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 1651 .halt_reg = 0x3600c, 1652 .halt_check = BRANCH_HALT_VOTED, 1653 .hwcg_reg = 0x3600c, 1654 .hwcg_bit = 1, 1655 .clkr = { 1656 .enable_reg = 0x3600c, 1657 .enable_mask = BIT(0), 1658 .hw.init = &(const struct clk_init_data) { 1659 .name = "gcc_qmip_camera_rt_ahb_clk", 1660 .ops = &clk_branch2_ops, 1661 }, 1662 }, 1663 }; 1664 1665 static struct clk_branch gcc_qmip_disp_ahb_clk = { 1666 .halt_reg = 0x37008, 1667 .halt_check = BRANCH_HALT_VOTED, 1668 .hwcg_reg = 0x37008, 1669 .hwcg_bit = 1, 1670 .clkr = { 1671 .enable_reg = 0x37008, 1672 .enable_mask = BIT(0), 1673 .hw.init = &(const struct clk_init_data) { 1674 .name = "gcc_qmip_disp_ahb_clk", 1675 .ops = &clk_branch2_ops, 1676 }, 1677 }, 1678 }; 1679 1680 static struct clk_branch gcc_qmip_gpu_ahb_clk = { 1681 .halt_reg = 0x81008, 1682 .halt_check = BRANCH_HALT_VOTED, 1683 .hwcg_reg = 0x81008, 1684 .hwcg_bit = 1, 1685 .clkr = { 1686 .enable_reg = 0x81008, 1687 .enable_mask = BIT(0), 1688 .hw.init = &(const struct clk_init_data) { 1689 .name = "gcc_qmip_gpu_ahb_clk", 1690 .ops = &clk_branch2_ops, 1691 }, 1692 }, 1693 }; 1694 1695 static struct clk_branch gcc_qmip_pcie_ahb_clk = { 1696 .halt_reg = 0x7b018, 1697 .halt_check = BRANCH_HALT_VOTED, 1698 .hwcg_reg = 0x7b018, 1699 .hwcg_bit = 1, 1700 .clkr = { 1701 .enable_reg = 0x7b018, 1702 .enable_mask = BIT(0), 1703 .hw.init = &(const struct clk_init_data) { 1704 .name = "gcc_qmip_pcie_ahb_clk", 1705 .ops = &clk_branch2_ops, 1706 }, 1707 }, 1708 }; 1709 1710 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 1711 .halt_reg = 0x42008, 1712 .halt_check = BRANCH_HALT_VOTED, 1713 .hwcg_reg = 0x42008, 1714 .hwcg_bit = 1, 1715 .clkr = { 1716 .enable_reg = 0x42008, 1717 .enable_mask = BIT(0), 1718 .hw.init = &(const struct clk_init_data) { 1719 .name = "gcc_qmip_video_vcodec_ahb_clk", 1720 .ops = &clk_branch2_ops, 1721 }, 1722 }, 1723 }; 1724 1725 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1726 .halt_reg = 0x3300c, 1727 .halt_check = BRANCH_HALT_VOTED, 1728 .clkr = { 1729 .enable_reg = 0x62008, 1730 .enable_mask = BIT(9), 1731 .hw.init = &(const struct clk_init_data) { 1732 .name = "gcc_qupv3_wrap0_core_2x_clk", 1733 .ops = &clk_branch2_ops, 1734 }, 1735 }, 1736 }; 1737 1738 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1739 .halt_reg = 0x33000, 1740 .halt_check = BRANCH_HALT_VOTED, 1741 .clkr = { 1742 .enable_reg = 0x62008, 1743 .enable_mask = BIT(8), 1744 .hw.init = &(const struct clk_init_data) { 1745 .name = "gcc_qupv3_wrap0_core_clk", 1746 .ops = &clk_branch2_ops, 1747 }, 1748 }, 1749 }; 1750 1751 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1752 .halt_reg = 0x2700c, 1753 .halt_check = BRANCH_HALT_VOTED, 1754 .clkr = { 1755 .enable_reg = 0x62008, 1756 .enable_mask = BIT(10), 1757 .hw.init = &(const struct clk_init_data) { 1758 .name = "gcc_qupv3_wrap0_s0_clk", 1759 .parent_hws = (const struct clk_hw*[]) { 1760 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1761 }, 1762 .num_parents = 1, 1763 .flags = CLK_SET_RATE_PARENT, 1764 .ops = &clk_branch2_ops, 1765 }, 1766 }, 1767 }; 1768 1769 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1770 .halt_reg = 0x27140, 1771 .halt_check = BRANCH_HALT_VOTED, 1772 .clkr = { 1773 .enable_reg = 0x62008, 1774 .enable_mask = BIT(11), 1775 .hw.init = &(const struct clk_init_data) { 1776 .name = "gcc_qupv3_wrap0_s1_clk", 1777 .parent_hws = (const struct clk_hw*[]) { 1778 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1779 }, 1780 .num_parents = 1, 1781 .flags = CLK_SET_RATE_PARENT, 1782 .ops = &clk_branch2_ops, 1783 }, 1784 }, 1785 }; 1786 1787 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1788 .halt_reg = 0x27274, 1789 .halt_check = BRANCH_HALT_VOTED, 1790 .clkr = { 1791 .enable_reg = 0x62008, 1792 .enable_mask = BIT(12), 1793 .hw.init = &(const struct clk_init_data) { 1794 .name = "gcc_qupv3_wrap0_s2_clk", 1795 .parent_hws = (const struct clk_hw*[]) { 1796 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1797 }, 1798 .num_parents = 1, 1799 .flags = CLK_SET_RATE_PARENT, 1800 .ops = &clk_branch2_ops, 1801 }, 1802 }, 1803 }; 1804 1805 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1806 .halt_reg = 0x273a8, 1807 .halt_check = BRANCH_HALT_VOTED, 1808 .clkr = { 1809 .enable_reg = 0x62008, 1810 .enable_mask = BIT(13), 1811 .hw.init = &(const struct clk_init_data) { 1812 .name = "gcc_qupv3_wrap0_s3_clk", 1813 .parent_hws = (const struct clk_hw*[]) { 1814 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1815 }, 1816 .num_parents = 1, 1817 .flags = CLK_SET_RATE_PARENT, 1818 .ops = &clk_branch2_ops, 1819 }, 1820 }, 1821 }; 1822 1823 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1824 .halt_reg = 0x274dc, 1825 .halt_check = BRANCH_HALT_VOTED, 1826 .clkr = { 1827 .enable_reg = 0x62008, 1828 .enable_mask = BIT(14), 1829 .hw.init = &(const struct clk_init_data) { 1830 .name = "gcc_qupv3_wrap0_s4_clk", 1831 .parent_hws = (const struct clk_hw*[]) { 1832 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1833 }, 1834 .num_parents = 1, 1835 .flags = CLK_SET_RATE_PARENT, 1836 .ops = &clk_branch2_ops, 1837 }, 1838 }, 1839 }; 1840 1841 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1842 .halt_reg = 0x3314c, 1843 .halt_check = BRANCH_HALT_VOTED, 1844 .clkr = { 1845 .enable_reg = 0x62008, 1846 .enable_mask = BIT(18), 1847 .hw.init = &(const struct clk_init_data) { 1848 .name = "gcc_qupv3_wrap1_core_2x_clk", 1849 .ops = &clk_branch2_ops, 1850 }, 1851 }, 1852 }; 1853 1854 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1855 .halt_reg = 0x33140, 1856 .halt_check = BRANCH_HALT_VOTED, 1857 .clkr = { 1858 .enable_reg = 0x62008, 1859 .enable_mask = BIT(19), 1860 .hw.init = &(const struct clk_init_data) { 1861 .name = "gcc_qupv3_wrap1_core_clk", 1862 .ops = &clk_branch2_ops, 1863 }, 1864 }, 1865 }; 1866 1867 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1868 .halt_reg = 0x2800c, 1869 .halt_check = BRANCH_HALT_VOTED, 1870 .clkr = { 1871 .enable_reg = 0x62008, 1872 .enable_mask = BIT(22), 1873 .hw.init = &(const struct clk_init_data) { 1874 .name = "gcc_qupv3_wrap1_s0_clk", 1875 .parent_hws = (const struct clk_hw*[]) { 1876 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1877 }, 1878 .num_parents = 1, 1879 .flags = CLK_SET_RATE_PARENT, 1880 .ops = &clk_branch2_ops, 1881 }, 1882 }, 1883 }; 1884 1885 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1886 .halt_reg = 0x28140, 1887 .halt_check = BRANCH_HALT_VOTED, 1888 .clkr = { 1889 .enable_reg = 0x62008, 1890 .enable_mask = BIT(23), 1891 .hw.init = &(const struct clk_init_data) { 1892 .name = "gcc_qupv3_wrap1_s1_clk", 1893 .parent_hws = (const struct clk_hw*[]) { 1894 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1895 }, 1896 .num_parents = 1, 1897 .flags = CLK_SET_RATE_PARENT, 1898 .ops = &clk_branch2_ops, 1899 }, 1900 }, 1901 }; 1902 1903 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1904 .halt_reg = 0x28274, 1905 .halt_check = BRANCH_HALT_VOTED, 1906 .clkr = { 1907 .enable_reg = 0x62008, 1908 .enable_mask = BIT(24), 1909 .hw.init = &(const struct clk_init_data) { 1910 .name = "gcc_qupv3_wrap1_s2_clk", 1911 .parent_hws = (const struct clk_hw*[]) { 1912 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1913 }, 1914 .num_parents = 1, 1915 .flags = CLK_SET_RATE_PARENT, 1916 .ops = &clk_branch2_ops, 1917 }, 1918 }, 1919 }; 1920 1921 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1922 .halt_reg = 0x283a8, 1923 .halt_check = BRANCH_HALT_VOTED, 1924 .clkr = { 1925 .enable_reg = 0x62008, 1926 .enable_mask = BIT(25), 1927 .hw.init = &(const struct clk_init_data) { 1928 .name = "gcc_qupv3_wrap1_s3_clk", 1929 .parent_hws = (const struct clk_hw*[]) { 1930 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1931 }, 1932 .num_parents = 1, 1933 .flags = CLK_SET_RATE_PARENT, 1934 .ops = &clk_branch2_ops, 1935 }, 1936 }, 1937 }; 1938 1939 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1940 .halt_reg = 0x284dc, 1941 .halt_check = BRANCH_HALT_VOTED, 1942 .clkr = { 1943 .enable_reg = 0x62008, 1944 .enable_mask = BIT(26), 1945 .hw.init = &(const struct clk_init_data) { 1946 .name = "gcc_qupv3_wrap1_s4_clk", 1947 .parent_hws = (const struct clk_hw*[]) { 1948 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 1949 }, 1950 .num_parents = 1, 1951 .flags = CLK_SET_RATE_PARENT, 1952 .ops = &clk_branch2_ops, 1953 }, 1954 }, 1955 }; 1956 1957 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 1958 .halt_reg = 0x27004, 1959 .halt_check = BRANCH_HALT_VOTED, 1960 .hwcg_reg = 0x27004, 1961 .hwcg_bit = 1, 1962 .clkr = { 1963 .enable_reg = 0x62008, 1964 .enable_mask = BIT(6), 1965 .hw.init = &(const struct clk_init_data) { 1966 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 1967 .ops = &clk_branch2_ops, 1968 }, 1969 }, 1970 }; 1971 1972 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 1973 .halt_reg = 0x27008, 1974 .halt_check = BRANCH_HALT_VOTED, 1975 .hwcg_reg = 0x27008, 1976 .hwcg_bit = 1, 1977 .clkr = { 1978 .enable_reg = 0x62008, 1979 .enable_mask = BIT(7), 1980 .hw.init = &(const struct clk_init_data) { 1981 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 1982 .ops = &clk_branch2_ops, 1983 }, 1984 }, 1985 }; 1986 1987 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 1988 .halt_reg = 0x28004, 1989 .halt_check = BRANCH_HALT_VOTED, 1990 .hwcg_reg = 0x28004, 1991 .hwcg_bit = 1, 1992 .clkr = { 1993 .enable_reg = 0x62008, 1994 .enable_mask = BIT(20), 1995 .hw.init = &(const struct clk_init_data) { 1996 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 1997 .ops = &clk_branch2_ops, 1998 }, 1999 }, 2000 }; 2001 2002 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2003 .halt_reg = 0x28008, 2004 .halt_check = BRANCH_HALT_VOTED, 2005 .hwcg_reg = 0x28008, 2006 .hwcg_bit = 1, 2007 .clkr = { 2008 .enable_reg = 0x62008, 2009 .enable_mask = BIT(21), 2010 .hw.init = &(const struct clk_init_data) { 2011 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2012 .ops = &clk_branch2_ops, 2013 }, 2014 }, 2015 }; 2016 2017 static struct clk_branch gcc_sdcc1_ahb_clk = { 2018 .halt_reg = 0xb3004, 2019 .halt_check = BRANCH_HALT, 2020 .clkr = { 2021 .enable_reg = 0xb3004, 2022 .enable_mask = BIT(0), 2023 .hw.init = &(const struct clk_init_data) { 2024 .name = "gcc_sdcc1_ahb_clk", 2025 .ops = &clk_branch2_ops, 2026 }, 2027 }, 2028 }; 2029 2030 static struct clk_branch gcc_sdcc1_apps_clk = { 2031 .halt_reg = 0xb3008, 2032 .halt_check = BRANCH_HALT, 2033 .clkr = { 2034 .enable_reg = 0xb3008, 2035 .enable_mask = BIT(0), 2036 .hw.init = &(const struct clk_init_data) { 2037 .name = "gcc_sdcc1_apps_clk", 2038 .parent_hws = (const struct clk_hw*[]) { 2039 &gcc_sdcc1_apps_clk_src.clkr.hw, 2040 }, 2041 .num_parents = 1, 2042 .flags = CLK_SET_RATE_PARENT, 2043 .ops = &clk_branch2_ops, 2044 }, 2045 }, 2046 }; 2047 2048 static struct clk_branch gcc_sdcc1_ice_core_clk = { 2049 .halt_reg = 0xb3028, 2050 .halt_check = BRANCH_HALT_VOTED, 2051 .hwcg_reg = 0xb3028, 2052 .hwcg_bit = 1, 2053 .clkr = { 2054 .enable_reg = 0xb3028, 2055 .enable_mask = BIT(0), 2056 .hw.init = &(const struct clk_init_data) { 2057 .name = "gcc_sdcc1_ice_core_clk", 2058 .parent_hws = (const struct clk_hw*[]) { 2059 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 2060 }, 2061 .num_parents = 1, 2062 .flags = CLK_SET_RATE_PARENT, 2063 .ops = &clk_branch2_ops, 2064 }, 2065 }, 2066 }; 2067 2068 static struct clk_branch gcc_sdcc2_ahb_clk = { 2069 .halt_reg = 0x2400c, 2070 .halt_check = BRANCH_HALT, 2071 .clkr = { 2072 .enable_reg = 0x2400c, 2073 .enable_mask = BIT(0), 2074 .hw.init = &(const struct clk_init_data) { 2075 .name = "gcc_sdcc2_ahb_clk", 2076 .ops = &clk_branch2_ops, 2077 }, 2078 }, 2079 }; 2080 2081 static struct clk_branch gcc_sdcc2_apps_clk = { 2082 .halt_reg = 0x24004, 2083 .halt_check = BRANCH_HALT, 2084 .clkr = { 2085 .enable_reg = 0x24004, 2086 .enable_mask = BIT(0), 2087 .hw.init = &(const struct clk_init_data) { 2088 .name = "gcc_sdcc2_apps_clk", 2089 .parent_hws = (const struct clk_hw*[]) { 2090 &gcc_sdcc2_apps_clk_src.clkr.hw, 2091 }, 2092 .num_parents = 1, 2093 .flags = CLK_SET_RATE_PARENT, 2094 .ops = &clk_branch2_ops, 2095 }, 2096 }, 2097 }; 2098 2099 static struct clk_branch gcc_ufs_0_clkref_en = { 2100 .halt_reg = 0x9c000, 2101 .halt_check = BRANCH_HALT_DELAY, 2102 .clkr = { 2103 .enable_reg = 0x9c000, 2104 .enable_mask = BIT(0), 2105 .hw.init = &(const struct clk_init_data) { 2106 .name = "gcc_ufs_0_clkref_en", 2107 .ops = &clk_branch2_ops, 2108 }, 2109 }, 2110 }; 2111 2112 static struct clk_branch gcc_ufs_pad_clkref_en = { 2113 .halt_reg = 0x9c024, 2114 .halt_check = BRANCH_HALT_DELAY, 2115 .clkr = { 2116 .enable_reg = 0x9c024, 2117 .enable_mask = BIT(0), 2118 .hw.init = &(const struct clk_init_data) { 2119 .name = "gcc_ufs_pad_clkref_en", 2120 .ops = &clk_branch2_ops, 2121 }, 2122 }, 2123 }; 2124 2125 static struct clk_branch gcc_ufs_phy_ahb_clk = { 2126 .halt_reg = 0x87020, 2127 .halt_check = BRANCH_HALT_VOTED, 2128 .hwcg_reg = 0x87020, 2129 .hwcg_bit = 1, 2130 .clkr = { 2131 .enable_reg = 0x87020, 2132 .enable_mask = BIT(0), 2133 .hw.init = &(const struct clk_init_data) { 2134 .name = "gcc_ufs_phy_ahb_clk", 2135 .ops = &clk_branch2_ops, 2136 }, 2137 }, 2138 }; 2139 2140 static struct clk_branch gcc_ufs_phy_axi_clk = { 2141 .halt_reg = 0x87018, 2142 .halt_check = BRANCH_HALT_VOTED, 2143 .hwcg_reg = 0x87018, 2144 .hwcg_bit = 1, 2145 .clkr = { 2146 .enable_reg = 0x87018, 2147 .enable_mask = BIT(0), 2148 .hw.init = &(const struct clk_init_data) { 2149 .name = "gcc_ufs_phy_axi_clk", 2150 .parent_hws = (const struct clk_hw*[]) { 2151 &gcc_ufs_phy_axi_clk_src.clkr.hw, 2152 }, 2153 .num_parents = 1, 2154 .flags = CLK_SET_RATE_PARENT, 2155 .ops = &clk_branch2_ops, 2156 }, 2157 }, 2158 }; 2159 2160 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 2161 .halt_reg = 0x87018, 2162 .halt_check = BRANCH_HALT_VOTED, 2163 .hwcg_reg = 0x87018, 2164 .hwcg_bit = 1, 2165 .clkr = { 2166 .enable_reg = 0x87018, 2167 .enable_mask = BIT(1), 2168 .hw.init = &(const struct clk_init_data) { 2169 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 2170 .parent_hws = (const struct clk_hw*[]) { 2171 &gcc_ufs_phy_axi_clk_src.clkr.hw, 2172 }, 2173 .num_parents = 1, 2174 .flags = CLK_SET_RATE_PARENT, 2175 .ops = &clk_branch2_ops, 2176 }, 2177 }, 2178 }; 2179 2180 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 2181 .halt_reg = 0x8706c, 2182 .halt_check = BRANCH_HALT_VOTED, 2183 .hwcg_reg = 0x8706c, 2184 .hwcg_bit = 1, 2185 .clkr = { 2186 .enable_reg = 0x8706c, 2187 .enable_mask = BIT(0), 2188 .hw.init = &(const struct clk_init_data) { 2189 .name = "gcc_ufs_phy_ice_core_clk", 2190 .parent_hws = (const struct clk_hw*[]) { 2191 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2192 }, 2193 .num_parents = 1, 2194 .flags = CLK_SET_RATE_PARENT, 2195 .ops = &clk_branch2_ops, 2196 }, 2197 }, 2198 }; 2199 2200 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 2201 .halt_reg = 0x8706c, 2202 .halt_check = BRANCH_HALT_VOTED, 2203 .hwcg_reg = 0x8706c, 2204 .hwcg_bit = 1, 2205 .clkr = { 2206 .enable_reg = 0x8706c, 2207 .enable_mask = BIT(1), 2208 .hw.init = &(const struct clk_init_data) { 2209 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 2210 .parent_hws = (const struct clk_hw*[]) { 2211 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2212 }, 2213 .num_parents = 1, 2214 .flags = CLK_SET_RATE_PARENT, 2215 .ops = &clk_branch2_ops, 2216 }, 2217 }, 2218 }; 2219 2220 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2221 .halt_reg = 0x870a4, 2222 .halt_check = BRANCH_HALT_VOTED, 2223 .hwcg_reg = 0x870a4, 2224 .hwcg_bit = 1, 2225 .clkr = { 2226 .enable_reg = 0x870a4, 2227 .enable_mask = BIT(0), 2228 .hw.init = &(const struct clk_init_data) { 2229 .name = "gcc_ufs_phy_phy_aux_clk", 2230 .parent_hws = (const struct clk_hw*[]) { 2231 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2232 }, 2233 .num_parents = 1, 2234 .flags = CLK_SET_RATE_PARENT, 2235 .ops = &clk_branch2_ops, 2236 }, 2237 }, 2238 }; 2239 2240 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 2241 .halt_reg = 0x870a4, 2242 .halt_check = BRANCH_HALT_VOTED, 2243 .hwcg_reg = 0x870a4, 2244 .hwcg_bit = 1, 2245 .clkr = { 2246 .enable_reg = 0x870a4, 2247 .enable_mask = BIT(1), 2248 .hw.init = &(const struct clk_init_data) { 2249 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 2250 .parent_hws = (const struct clk_hw*[]) { 2251 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2252 }, 2253 .num_parents = 1, 2254 .flags = CLK_SET_RATE_PARENT, 2255 .ops = &clk_branch2_ops, 2256 }, 2257 }, 2258 }; 2259 2260 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2261 .halt_reg = 0x87028, 2262 .halt_check = BRANCH_HALT_DELAY, 2263 .clkr = { 2264 .enable_reg = 0x87028, 2265 .enable_mask = BIT(0), 2266 .hw.init = &(const struct clk_init_data) { 2267 .name = "gcc_ufs_phy_rx_symbol_0_clk", 2268 .parent_hws = (const struct clk_hw*[]) { 2269 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw, 2270 }, 2271 .num_parents = 1, 2272 .flags = CLK_SET_RATE_PARENT, 2273 .ops = &clk_branch2_ops, 2274 }, 2275 }, 2276 }; 2277 2278 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 2279 .halt_reg = 0x870c0, 2280 .halt_check = BRANCH_HALT_DELAY, 2281 .clkr = { 2282 .enable_reg = 0x870c0, 2283 .enable_mask = BIT(0), 2284 .hw.init = &(const struct clk_init_data) { 2285 .name = "gcc_ufs_phy_rx_symbol_1_clk", 2286 .parent_hws = (const struct clk_hw*[]) { 2287 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw, 2288 }, 2289 .num_parents = 1, 2290 .flags = CLK_SET_RATE_PARENT, 2291 .ops = &clk_branch2_ops, 2292 }, 2293 }, 2294 }; 2295 2296 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2297 .halt_reg = 0x87024, 2298 .halt_check = BRANCH_HALT_DELAY, 2299 .clkr = { 2300 .enable_reg = 0x87024, 2301 .enable_mask = BIT(0), 2302 .hw.init = &(const struct clk_init_data) { 2303 .name = "gcc_ufs_phy_tx_symbol_0_clk", 2304 .parent_hws = (const struct clk_hw*[]) { 2305 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw, 2306 }, 2307 .num_parents = 1, 2308 .flags = CLK_SET_RATE_PARENT, 2309 .ops = &clk_branch2_ops, 2310 }, 2311 }, 2312 }; 2313 2314 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2315 .halt_reg = 0x87064, 2316 .halt_check = BRANCH_HALT_VOTED, 2317 .hwcg_reg = 0x87064, 2318 .hwcg_bit = 1, 2319 .clkr = { 2320 .enable_reg = 0x87064, 2321 .enable_mask = BIT(0), 2322 .hw.init = &(const struct clk_init_data) { 2323 .name = "gcc_ufs_phy_unipro_core_clk", 2324 .parent_hws = (const struct clk_hw*[]) { 2325 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2326 }, 2327 .num_parents = 1, 2328 .flags = CLK_SET_RATE_PARENT, 2329 .ops = &clk_branch2_ops, 2330 }, 2331 }, 2332 }; 2333 2334 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 2335 .halt_reg = 0x87064, 2336 .halt_check = BRANCH_HALT_VOTED, 2337 .hwcg_reg = 0x87064, 2338 .hwcg_bit = 1, 2339 .clkr = { 2340 .enable_reg = 0x87064, 2341 .enable_mask = BIT(1), 2342 .hw.init = &(const struct clk_init_data) { 2343 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 2344 .parent_hws = (const struct clk_hw*[]) { 2345 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2346 }, 2347 .num_parents = 1, 2348 .flags = CLK_SET_RATE_PARENT, 2349 .ops = &clk_branch2_ops, 2350 }, 2351 }, 2352 }; 2353 2354 static struct clk_branch gcc_usb30_prim_master_clk = { 2355 .halt_reg = 0x49018, 2356 .halt_check = BRANCH_HALT, 2357 .clkr = { 2358 .enable_reg = 0x49018, 2359 .enable_mask = BIT(0), 2360 .hw.init = &(const struct clk_init_data) { 2361 .name = "gcc_usb30_prim_master_clk", 2362 .parent_hws = (const struct clk_hw*[]) { 2363 &gcc_usb30_prim_master_clk_src.clkr.hw, 2364 }, 2365 .num_parents = 1, 2366 .flags = CLK_SET_RATE_PARENT, 2367 .ops = &clk_branch2_ops, 2368 }, 2369 }, 2370 }; 2371 2372 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2373 .halt_reg = 0x49024, 2374 .halt_check = BRANCH_HALT, 2375 .clkr = { 2376 .enable_reg = 0x49024, 2377 .enable_mask = BIT(0), 2378 .hw.init = &(const struct clk_init_data) { 2379 .name = "gcc_usb30_prim_mock_utmi_clk", 2380 .parent_hws = (const struct clk_hw*[]) { 2381 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 2382 }, 2383 .num_parents = 1, 2384 .flags = CLK_SET_RATE_PARENT, 2385 .ops = &clk_branch2_ops, 2386 }, 2387 }, 2388 }; 2389 2390 static struct clk_branch gcc_usb30_prim_sleep_clk = { 2391 .halt_reg = 0x49020, 2392 .halt_check = BRANCH_HALT, 2393 .clkr = { 2394 .enable_reg = 0x49020, 2395 .enable_mask = BIT(0), 2396 .hw.init = &(const struct clk_init_data) { 2397 .name = "gcc_usb30_prim_sleep_clk", 2398 .ops = &clk_branch2_ops, 2399 }, 2400 }, 2401 }; 2402 2403 static struct clk_branch gcc_usb3_0_clkref_en = { 2404 .halt_reg = 0x9c010, 2405 .halt_check = BRANCH_HALT_DELAY, 2406 .clkr = { 2407 .enable_reg = 0x9c010, 2408 .enable_mask = BIT(0), 2409 .hw.init = &(const struct clk_init_data) { 2410 .name = "gcc_usb3_0_clkref_en", 2411 .ops = &clk_branch2_ops, 2412 }, 2413 }, 2414 }; 2415 2416 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2417 .halt_reg = 0x4905c, 2418 .halt_check = BRANCH_HALT, 2419 .clkr = { 2420 .enable_reg = 0x4905c, 2421 .enable_mask = BIT(0), 2422 .hw.init = &(const struct clk_init_data) { 2423 .name = "gcc_usb3_prim_phy_aux_clk", 2424 .parent_hws = (const struct clk_hw*[]) { 2425 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2426 }, 2427 .num_parents = 1, 2428 .flags = CLK_SET_RATE_PARENT, 2429 .ops = &clk_branch2_ops, 2430 }, 2431 }, 2432 }; 2433 2434 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2435 .halt_reg = 0x49060, 2436 .halt_check = BRANCH_HALT, 2437 .clkr = { 2438 .enable_reg = 0x49060, 2439 .enable_mask = BIT(0), 2440 .hw.init = &(const struct clk_init_data) { 2441 .name = "gcc_usb3_prim_phy_com_aux_clk", 2442 .parent_hws = (const struct clk_hw*[]) { 2443 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2444 }, 2445 .num_parents = 1, 2446 .flags = CLK_SET_RATE_PARENT, 2447 .ops = &clk_branch2_ops, 2448 }, 2449 }, 2450 }; 2451 2452 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2453 .halt_reg = 0x49064, 2454 .halt_check = BRANCH_HALT_DELAY, 2455 .hwcg_reg = 0x49064, 2456 .hwcg_bit = 1, 2457 .clkr = { 2458 .enable_reg = 0x49064, 2459 .enable_mask = BIT(0), 2460 .hw.init = &(const struct clk_init_data) { 2461 .name = "gcc_usb3_prim_phy_pipe_clk", 2462 .parent_hws = (const struct clk_hw*[]) { 2463 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 2464 }, 2465 .num_parents = 1, 2466 .flags = CLK_SET_RATE_PARENT, 2467 .ops = &clk_branch2_ops, 2468 }, 2469 }, 2470 }; 2471 2472 static struct clk_branch gcc_vcodec0_axi_clk = { 2473 .halt_reg = 0x42020, 2474 .halt_check = BRANCH_HALT_SKIP, 2475 .hwcg_reg = 0x42020, 2476 .hwcg_bit = 1, 2477 .clkr = { 2478 .enable_reg = 0x42020, 2479 .enable_mask = BIT(0), 2480 .hw.init = &(const struct clk_init_data) { 2481 .name = "gcc_vcodec0_axi_clk", 2482 .ops = &clk_branch2_ops, 2483 }, 2484 }, 2485 }; 2486 2487 static struct clk_branch gcc_venus_ctl_axi_clk = { 2488 .halt_reg = 0x4201c, 2489 .halt_check = BRANCH_HALT_SKIP, 2490 .clkr = { 2491 .enable_reg = 0x4201c, 2492 .enable_mask = BIT(0), 2493 .hw.init = &(const struct clk_init_data) { 2494 .name = "gcc_venus_ctl_axi_clk", 2495 .ops = &clk_branch2_ops, 2496 }, 2497 }, 2498 }; 2499 2500 static struct clk_branch gcc_video_throttle_core_clk = { 2501 .halt_reg = 0x42014, 2502 .halt_check = BRANCH_HALT_SKIP, 2503 .hwcg_reg = 0x42014, 2504 .hwcg_bit = 1, 2505 .clkr = { 2506 .enable_reg = 0x42014, 2507 .enable_mask = BIT(0), 2508 .hw.init = &(const struct clk_init_data) { 2509 .name = "gcc_video_throttle_core_clk", 2510 .ops = &clk_branch2_ops, 2511 }, 2512 }, 2513 }; 2514 2515 static struct clk_branch gcc_video_vcodec0_sys_clk = { 2516 .halt_reg = 0xb6058, 2517 .halt_check = BRANCH_HALT_VOTED, 2518 .hwcg_reg = 0xb6058, 2519 .hwcg_bit = 1, 2520 .clkr = { 2521 .enable_reg = 0xb6058, 2522 .enable_mask = BIT(0), 2523 .hw.init = &(const struct clk_init_data) { 2524 .name = "gcc_video_vcodec0_sys_clk", 2525 .parent_hws = (const struct clk_hw*[]) { 2526 &gcc_video_venus_clk_src.clkr.hw, 2527 }, 2528 .num_parents = 1, 2529 .flags = CLK_SET_RATE_PARENT, 2530 .ops = &clk_branch2_ops, 2531 }, 2532 }, 2533 }; 2534 2535 static struct clk_branch gcc_video_venus_ctl_clk = { 2536 .halt_reg = 0xb6038, 2537 .halt_check = BRANCH_HALT, 2538 .clkr = { 2539 .enable_reg = 0xb6038, 2540 .enable_mask = BIT(0), 2541 .hw.init = &(const struct clk_init_data) { 2542 .name = "gcc_video_venus_ctl_clk", 2543 .parent_hws = (const struct clk_hw*[]) { 2544 &gcc_video_venus_clk_src.clkr.hw, 2545 }, 2546 .num_parents = 1, 2547 .flags = CLK_SET_RATE_PARENT, 2548 .ops = &clk_branch2_ops, 2549 }, 2550 }, 2551 }; 2552 2553 static struct gdsc gcc_pcie_0_gdsc = { 2554 .gdscr = 0x7b004, 2555 .en_rest_wait_val = 0x2, 2556 .en_few_wait_val = 0x2, 2557 .clk_dis_wait_val = 0xf, 2558 .pd = { 2559 .name = "gcc_pcie_0_gdsc", 2560 }, 2561 .pwrsts = PWRSTS_OFF_ON, 2562 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE, 2563 }; 2564 2565 static struct gdsc gcc_ufs_phy_gdsc = { 2566 .gdscr = 0x87004, 2567 .en_rest_wait_val = 0x2, 2568 .en_few_wait_val = 0x2, 2569 .clk_dis_wait_val = 0xf, 2570 .pd = { 2571 .name = "gcc_ufs_phy_gdsc", 2572 }, 2573 .pwrsts = PWRSTS_OFF_ON, 2574 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 2575 }; 2576 2577 static struct gdsc gcc_usb30_prim_gdsc = { 2578 .gdscr = 0x49004, 2579 .en_rest_wait_val = 0x2, 2580 .en_few_wait_val = 0x2, 2581 .clk_dis_wait_val = 0xf, 2582 .pd = { 2583 .name = "gcc_usb30_prim_gdsc", 2584 }, 2585 .pwrsts = PWRSTS_OFF_ON, 2586 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 2587 }; 2588 2589 static struct gdsc gcc_vcodec0_gdsc = { 2590 .gdscr = 0xb6044, 2591 .en_rest_wait_val = 0x2, 2592 .en_few_wait_val = 0x2, 2593 .clk_dis_wait_val = 0xf, 2594 .pd = { 2595 .name = "gcc_vcodec0_gdsc", 2596 }, 2597 .pwrsts = PWRSTS_OFF_ON, 2598 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL, 2599 }; 2600 2601 static struct gdsc gcc_venus_gdsc = { 2602 .gdscr = 0xb6020, 2603 .en_rest_wait_val = 0x2, 2604 .en_few_wait_val = 0x2, 2605 .clk_dis_wait_val = 0xf, 2606 .pd = { 2607 .name = "gcc_venus_gdsc", 2608 }, 2609 .pwrsts = PWRSTS_OFF_ON, 2610 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 2611 }; 2612 2613 static struct clk_regmap *gcc_sm4450_clocks[] = { 2614 [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr, 2615 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 2616 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 2617 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 2618 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2619 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 2620 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 2621 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr, 2622 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2623 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 2624 [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr, 2625 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 2626 [GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr, 2627 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2628 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2629 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2630 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2631 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2632 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2633 [GCC_GPLL0] = &gcc_gpll0.clkr, 2634 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr, 2635 [GCC_GPLL0_OUT_ODD] = &gcc_gpll0_out_odd.clkr, 2636 [GCC_GPLL1] = &gcc_gpll1.clkr, 2637 [GCC_GPLL3] = &gcc_gpll3.clkr, 2638 [GCC_GPLL4] = &gcc_gpll4.clkr, 2639 [GCC_GPLL9] = &gcc_gpll9.clkr, 2640 [GCC_GPLL10] = &gcc_gpll10.clkr, 2641 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 2642 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 2643 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 2644 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 2645 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_CLK] = 2646 &gcc_hlos1_vote_aggre_noc_mmu_audio_tbu_clk.clkr, 2647 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_CLK] = 2648 &gcc_hlos1_vote_aggre_noc_mmu_pcie_tbu_clk.clkr, 2649 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_CLK] = &gcc_hlos1_vote_aggre_noc_mmu_tbu1_clk.clkr, 2650 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_CLK] = &gcc_hlos1_vote_aggre_noc_mmu_tbu2_clk.clkr, 2651 [GCC_HLOS1_VOTE_MMNOC_MMU_TBU_HF0_CLK] = &gcc_hlos1_vote_mmnoc_mmu_tbu_hf0_clk.clkr, 2652 [GCC_HLOS1_VOTE_MMNOC_MMU_TBU_HF1_CLK] = &gcc_hlos1_vote_mmnoc_mmu_tbu_hf1_clk.clkr, 2653 [GCC_HLOS1_VOTE_MMNOC_MMU_TBU_SF0_CLK] = &gcc_hlos1_vote_mmnoc_mmu_tbu_sf0_clk.clkr, 2654 [GCC_HLOS1_VOTE_MMU_TCU_CLK] = &gcc_hlos1_vote_mmu_tcu_clk.clkr, 2655 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 2656 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 2657 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 2658 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr, 2659 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 2660 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr, 2661 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr, 2662 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 2663 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 2664 [GCC_PCIE_0_PIPE_DIV2_CLK] = &gcc_pcie_0_pipe_div2_clk.clkr, 2665 [GCC_PCIE_0_PIPE_DIV2_CLK_SRC] = &gcc_pcie_0_pipe_div2_clk_src.clkr, 2666 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 2667 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 2668 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2669 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2670 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2671 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2672 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 2673 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 2674 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 2675 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr, 2676 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr, 2677 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 2678 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2679 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2680 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2681 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2682 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2683 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2684 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2685 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2686 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2687 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2688 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2689 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2690 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2691 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2692 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2693 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2694 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2695 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2696 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2697 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2698 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2699 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2700 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2701 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2702 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2703 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2704 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2705 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2706 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2707 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2708 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 2709 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2710 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 2711 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2712 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2713 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 2714 [GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr, 2715 [GCC_UFS_PAD_CLKREF_EN] = &gcc_ufs_pad_clkref_en.clkr, 2716 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 2717 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 2718 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 2719 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 2720 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 2721 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 2722 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 2723 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 2724 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 2725 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 2726 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 2727 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr, 2728 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 2729 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr, 2730 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 2731 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr, 2732 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 2733 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr, 2734 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 2735 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2736 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2737 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2738 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2739 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 2740 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2741 [GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr, 2742 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2743 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2744 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2745 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2746 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr, 2747 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr, 2748 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr, 2749 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr, 2750 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr, 2751 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr, 2752 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr, 2753 }; 2754 2755 static struct gdsc *gcc_sm4450_gdscs[] = { 2756 [GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc, 2757 [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc, 2758 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc, 2759 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc, 2760 [GCC_VENUS_GDSC] = &gcc_venus_gdsc, 2761 }; 2762 2763 static const struct qcom_reset_map gcc_sm4450_resets[] = { 2764 [GCC_CAMERA_BCR] = { 0x36000 }, 2765 [GCC_DISPLAY_BCR] = { 0x37000 }, 2766 [GCC_GPU_BCR] = { 0x81000 }, 2767 [GCC_PCIE_0_BCR] = { 0x7b000 }, 2768 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 }, 2769 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 }, 2770 [GCC_PCIE_0_PHY_BCR] = { 0x7c01c }, 2771 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 }, 2772 [GCC_PCIE_PHY_BCR] = { 0x7f000 }, 2773 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c }, 2774 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 }, 2775 [GCC_PDM_BCR] = { 0x43000 }, 2776 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 }, 2777 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 }, 2778 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 }, 2779 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 }, 2780 [GCC_SDCC1_BCR] = { 0xb3000 }, 2781 [GCC_SDCC2_BCR] = { 0x24000 }, 2782 [GCC_UFS_PHY_BCR] = { 0x87000 }, 2783 [GCC_USB30_PRIM_BCR] = { 0x49000 }, 2784 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 }, 2785 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 }, 2786 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 }, 2787 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c }, 2788 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 }, 2789 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 }, 2790 [GCC_VCODEC0_BCR] = { 0xb6040 }, 2791 [GCC_VENUS_BCR] = { 0xb601c }, 2792 [GCC_VIDEO_BCR] = { 0x42000 }, 2793 [GCC_VIDEO_VENUS_BCR] = { 0xb6000 }, 2794 [GCC_VENUS_CTL_AXI_CLK_ARES] = { .reg = 0x4201c, .bit = 2, .udelay = 400 }, 2795 [GCC_VIDEO_VENUS_CTL_CLK_ARES] = { .reg = 0xb6038, .bit = 2, .udelay = 400 }, 2796 }; 2797 2798 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 2799 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2800 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2801 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2802 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2803 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2804 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2805 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2806 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2807 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2808 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2809 }; 2810 2811 static const struct regmap_config gcc_sm4450_regmap_config = { 2812 .reg_bits = 32, 2813 .reg_stride = 4, 2814 .val_bits = 32, 2815 .max_register = 0x1f41f0, 2816 .fast_io = true, 2817 }; 2818 2819 static const struct qcom_cc_desc gcc_sm4450_desc = { 2820 .config = &gcc_sm4450_regmap_config, 2821 .clks = gcc_sm4450_clocks, 2822 .num_clks = ARRAY_SIZE(gcc_sm4450_clocks), 2823 .resets = gcc_sm4450_resets, 2824 .num_resets = ARRAY_SIZE(gcc_sm4450_resets), 2825 .gdscs = gcc_sm4450_gdscs, 2826 .num_gdscs = ARRAY_SIZE(gcc_sm4450_gdscs), 2827 }; 2828 2829 static const struct of_device_id gcc_sm4450_match_table[] = { 2830 { .compatible = "qcom,sm4450-gcc" }, 2831 { } 2832 }; 2833 MODULE_DEVICE_TABLE(of, gcc_sm4450_match_table); 2834 2835 static int gcc_sm4450_probe(struct platform_device *pdev) 2836 { 2837 struct regmap *regmap; 2838 int ret; 2839 2840 regmap = qcom_cc_map(pdev, &gcc_sm4450_desc); 2841 if (IS_ERR(regmap)) 2842 return PTR_ERR(regmap); 2843 2844 clk_lucid_evo_pll_configure(&gcc_gpll3, regmap, &gcc_gpll3_config); 2845 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 2846 ARRAY_SIZE(gcc_dfs_clocks)); 2847 if (ret) 2848 return ret; 2849 2850 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true); 2851 2852 /* Keep some clocks always-on */ 2853 qcom_branch_set_clk_en(regmap, 0x36004); /* GCC_CAMERA_AHB_CLK */ 2854 qcom_branch_set_clk_en(regmap, 0x36018); /* GCC_CAMERA_SLEEP_CLK */ 2855 qcom_branch_set_clk_en(regmap, 0x3601c); /* GCC_CAMERA_XO_CLK */ 2856 qcom_branch_set_clk_en(regmap, 0x37004); /* GCC_DISP_AHB_CLK */ 2857 qcom_branch_set_clk_en(regmap, 0x37014); /* GCC_DISP_XO_CLK */ 2858 qcom_branch_set_clk_en(regmap, 0x81004); /* GCC_GPU_CFG_AHB_CLK */ 2859 qcom_branch_set_clk_en(regmap, 0x42004); /* GCC_VIDEO_AHB_CLK */ 2860 qcom_branch_set_clk_en(regmap, 0x42018); /* GCC_VIDEO_XO_CLK */ 2861 2862 regmap_update_bits(regmap, 0x4201c, BIT(21), BIT(21)); 2863 2864 return qcom_cc_really_probe(pdev, &gcc_sm4450_desc, regmap); 2865 } 2866 2867 static struct platform_driver gcc_sm4450_driver = { 2868 .probe = gcc_sm4450_probe, 2869 .driver = { 2870 .name = "gcc-sm4450", 2871 .of_match_table = gcc_sm4450_match_table, 2872 }, 2873 }; 2874 2875 static int __init gcc_sm4450_init(void) 2876 { 2877 return platform_driver_register(&gcc_sm4450_driver); 2878 } 2879 subsys_initcall(gcc_sm4450_init); 2880 2881 static void __exit gcc_sm4450_exit(void) 2882 { 2883 platform_driver_unregister(&gcc_sm4450_driver); 2884 } 2885 module_exit(gcc_sm4450_exit); 2886 2887 MODULE_DESCRIPTION("QTI GCC SM4450 Driver"); 2888 MODULE_LICENSE("GPL"); 2889