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