1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2020-2021, Linaro Ltd. 5 */ 6 7 #include <linux/bitops.h> 8 #include <linux/clk-provider.h> 9 #include <linux/err.h> 10 #include <linux/kernel.h> 11 #include <linux/module.h> 12 #include <linux/of.h> 13 #include <linux/platform_device.h> 14 #include <linux/regmap.h> 15 #include <linux/reset-controller.h> 16 17 #include <dt-bindings/clock/qcom,gcc-sc8180x.h> 18 19 #include "common.h" 20 #include "clk-alpha-pll.h" 21 #include "clk-branch.h" 22 #include "clk-pll.h" 23 #include "clk-rcg.h" 24 #include "clk-regmap.h" 25 #include "gdsc.h" 26 #include "reset.h" 27 28 enum { 29 P_AUD_REF_CLK, 30 P_BI_TCXO, 31 P_GPLL0_OUT_EVEN, 32 P_GPLL0_OUT_MAIN, 33 P_GPLL1_OUT_MAIN, 34 P_GPLL2_OUT_MAIN, 35 P_GPLL4_OUT_MAIN, 36 P_GPLL5_OUT_MAIN, 37 P_GPLL7_OUT_MAIN, 38 P_GPLL9_OUT_MAIN, 39 P_SLEEP_CLK, 40 }; 41 42 static const struct pll_vco trion_vco[] = { 43 { 249600000, 2000000000, 0 }, 44 }; 45 46 static struct clk_alpha_pll gpll0 = { 47 .offset = 0x0, 48 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 49 .vco_table = trion_vco, 50 .num_vco = ARRAY_SIZE(trion_vco), 51 .clkr = { 52 .enable_reg = 0x52000, 53 .enable_mask = BIT(0), 54 .hw.init = &(struct clk_init_data){ 55 .name = "gpll0", 56 .parent_data = &(const struct clk_parent_data){ 57 .fw_name = "bi_tcxo", 58 }, 59 .num_parents = 1, 60 .ops = &clk_alpha_pll_fixed_trion_ops, 61 }, 62 }, 63 }; 64 65 static const struct clk_div_table post_div_table_trion_even[] = { 66 { 0x0, 1 }, 67 { 0x1, 2 }, 68 { 0x3, 4 }, 69 { 0x7, 8 }, 70 { } 71 }; 72 73 static struct clk_alpha_pll_postdiv gpll0_out_even = { 74 .offset = 0x0, 75 .post_div_shift = 8, 76 .post_div_table = post_div_table_trion_even, 77 .num_post_div = ARRAY_SIZE(post_div_table_trion_even), 78 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 79 .width = 4, 80 .clkr.hw.init = &(struct clk_init_data){ 81 .name = "gpll0_out_even", 82 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 83 .num_parents = 1, 84 .ops = &clk_alpha_pll_postdiv_trion_ops, 85 }, 86 }; 87 88 static struct clk_alpha_pll gpll1 = { 89 .offset = 0x1000, 90 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 91 .vco_table = trion_vco, 92 .num_vco = ARRAY_SIZE(trion_vco), 93 .clkr = { 94 .enable_reg = 0x52000, 95 .enable_mask = BIT(1), 96 .hw.init = &(struct clk_init_data){ 97 .name = "gpll1", 98 .parent_data = &(const struct clk_parent_data){ 99 .fw_name = "bi_tcxo", 100 }, 101 .num_parents = 1, 102 .ops = &clk_alpha_pll_fixed_trion_ops, 103 }, 104 }, 105 }; 106 107 static struct clk_alpha_pll gpll4 = { 108 .offset = 0x76000, 109 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 110 .vco_table = trion_vco, 111 .num_vco = ARRAY_SIZE(trion_vco), 112 .clkr = { 113 .enable_reg = 0x52000, 114 .enable_mask = BIT(4), 115 .hw.init = &(struct clk_init_data){ 116 .name = "gpll4", 117 .parent_data = &(const struct clk_parent_data){ 118 .fw_name = "bi_tcxo", 119 }, 120 .num_parents = 1, 121 .ops = &clk_alpha_pll_fixed_trion_ops, 122 }, 123 }, 124 }; 125 126 static struct clk_alpha_pll gpll7 = { 127 .offset = 0x1a000, 128 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 129 .vco_table = trion_vco, 130 .num_vco = ARRAY_SIZE(trion_vco), 131 .clkr = { 132 .enable_reg = 0x52000, 133 .enable_mask = BIT(7), 134 .hw.init = &(struct clk_init_data){ 135 .name = "gpll7", 136 .parent_data = &(const struct clk_parent_data){ 137 .fw_name = "bi_tcxo", 138 }, 139 .num_parents = 1, 140 .ops = &clk_alpha_pll_fixed_trion_ops, 141 }, 142 }, 143 }; 144 145 static struct clk_alpha_pll gpll9 = { 146 .offset = 0x1c000, 147 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 148 .clkr = { 149 .enable_reg = 0x52000, 150 .enable_mask = BIT(9), 151 .hw.init = &(const struct clk_init_data) { 152 .name = "gpll9", 153 .parent_data = &(const struct clk_parent_data) { 154 .fw_name = "bi_tcxo", 155 }, 156 .num_parents = 1, 157 .ops = &clk_alpha_pll_fixed_trion_ops, 158 }, 159 }, 160 }; 161 162 static const struct parent_map gcc_parent_map_0[] = { 163 { P_BI_TCXO, 0 }, 164 { P_GPLL0_OUT_MAIN, 1 }, 165 { P_GPLL0_OUT_EVEN, 6 }, 166 }; 167 168 static const struct clk_parent_data gcc_parents_0[] = { 169 { .fw_name = "bi_tcxo" }, 170 { .hw = &gpll0.clkr.hw }, 171 { .hw = &gpll0_out_even.clkr.hw }, 172 }; 173 174 static const struct parent_map gcc_parent_map_1[] = { 175 { P_BI_TCXO, 0 }, 176 { P_GPLL0_OUT_MAIN, 1 }, 177 { P_SLEEP_CLK, 5 }, 178 { P_GPLL0_OUT_EVEN, 6 }, 179 }; 180 181 static const struct clk_parent_data gcc_parents_1[] = { 182 { .fw_name = "bi_tcxo", }, 183 { .hw = &gpll0.clkr.hw }, 184 { .fw_name = "sleep_clk", }, 185 { .hw = &gpll0_out_even.clkr.hw }, 186 }; 187 188 static const struct parent_map gcc_parent_map_2[] = { 189 { P_BI_TCXO, 0 }, 190 { P_SLEEP_CLK, 5 }, 191 }; 192 193 static const struct clk_parent_data gcc_parents_2[] = { 194 { .fw_name = "bi_tcxo", }, 195 { .fw_name = "sleep_clk", }, 196 }; 197 198 static const struct parent_map gcc_parent_map_3[] = { 199 { P_BI_TCXO, 0 }, 200 { P_GPLL0_OUT_MAIN, 1 }, 201 { P_GPLL2_OUT_MAIN, 2 }, 202 { P_GPLL5_OUT_MAIN, 3 }, 203 { P_GPLL1_OUT_MAIN, 4 }, 204 { P_GPLL4_OUT_MAIN, 5 }, 205 { P_GPLL0_OUT_EVEN, 6 }, 206 }; 207 208 static const struct clk_parent_data gcc_parents_3[] = { 209 { .fw_name = "bi_tcxo", }, 210 { .hw = &gpll0.clkr.hw }, 211 { .name = "gpll2" }, 212 { .name = "gpll5" }, 213 { .hw = &gpll1.clkr.hw }, 214 { .hw = &gpll4.clkr.hw }, 215 { .hw = &gpll0_out_even.clkr.hw }, 216 }; 217 218 static const struct parent_map gcc_parent_map_4[] = { 219 { P_BI_TCXO, 0 }, 220 }; 221 222 static const struct clk_parent_data gcc_parents_4[] = { 223 { .fw_name = "bi_tcxo", }, 224 }; 225 226 static const struct parent_map gcc_parent_map_5[] = { 227 { P_BI_TCXO, 0 }, 228 { P_GPLL0_OUT_MAIN, 1 }, 229 }; 230 231 static const struct clk_parent_data gcc_parents_5[] = { 232 { .fw_name = "bi_tcxo", }, 233 { .hw = &gpll0.clkr.hw }, 234 }; 235 236 static const struct parent_map gcc_parent_map_6[] = { 237 { P_BI_TCXO, 0 }, 238 { P_GPLL0_OUT_MAIN, 1 }, 239 { P_GPLL7_OUT_MAIN, 3 }, 240 { P_GPLL0_OUT_EVEN, 6 }, 241 }; 242 243 static const struct clk_parent_data gcc_parents_6[] = { 244 { .fw_name = "bi_tcxo", }, 245 { .hw = &gpll0.clkr.hw }, 246 { .hw = &gpll7.clkr.hw }, 247 { .hw = &gpll0_out_even.clkr.hw }, 248 }; 249 250 static const struct parent_map gcc_parent_map_7[] = { 251 { P_BI_TCXO, 0 }, 252 { P_GPLL0_OUT_MAIN, 1 }, 253 { P_GPLL9_OUT_MAIN, 2 }, 254 { P_GPLL4_OUT_MAIN, 5 }, 255 { P_GPLL0_OUT_EVEN, 6 }, 256 }; 257 258 static const struct clk_parent_data gcc_parents_7[] = { 259 { .fw_name = "bi_tcxo", }, 260 { .hw = &gpll0.clkr.hw }, 261 { .hw = &gpll9.clkr.hw }, 262 { .hw = &gpll4.clkr.hw }, 263 { .hw = &gpll0_out_even.clkr.hw }, 264 }; 265 266 static const struct parent_map gcc_parent_map_8[] = { 267 { P_BI_TCXO, 0 }, 268 { P_GPLL0_OUT_MAIN, 1 }, 269 { P_AUD_REF_CLK, 2 }, 270 { P_GPLL0_OUT_EVEN, 6 }, 271 }; 272 273 static const struct clk_parent_data gcc_parents_8[] = { 274 { .fw_name = "bi_tcxo", }, 275 { .hw = &gpll0.clkr.hw }, 276 { .name = "aud_ref_clk" }, 277 { .hw = &gpll0_out_even.clkr.hw }, 278 }; 279 280 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { 281 F(19200000, P_BI_TCXO, 1, 0, 0), 282 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 283 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 284 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 285 { } 286 }; 287 288 static struct clk_rcg2 gcc_emac_ptp_clk_src = { 289 .cmd_rcgr = 0x6038, 290 .mnd_width = 0, 291 .hid_width = 5, 292 .parent_map = gcc_parent_map_6, 293 .freq_tbl = ftbl_gcc_emac_ptp_clk_src, 294 .clkr.hw.init = &(struct clk_init_data){ 295 .name = "gcc_emac_ptp_clk_src", 296 .parent_data = gcc_parents_6, 297 .num_parents = ARRAY_SIZE(gcc_parents_6), 298 .flags = CLK_SET_RATE_PARENT, 299 .ops = &clk_rcg2_ops, 300 }, 301 }; 302 303 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = { 304 F(2500000, P_BI_TCXO, 1, 25, 192), 305 F(5000000, P_BI_TCXO, 1, 25, 96), 306 F(19200000, P_BI_TCXO, 1, 0, 0), 307 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 308 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 309 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 310 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 311 { } 312 }; 313 314 static struct clk_rcg2 gcc_emac_rgmii_clk_src = { 315 .cmd_rcgr = 0x601c, 316 .mnd_width = 8, 317 .hid_width = 5, 318 .parent_map = gcc_parent_map_6, 319 .freq_tbl = ftbl_gcc_emac_rgmii_clk_src, 320 .clkr.hw.init = &(struct clk_init_data){ 321 .name = "gcc_emac_rgmii_clk_src", 322 .parent_data = gcc_parents_6, 323 .num_parents = ARRAY_SIZE(gcc_parents_6), 324 .flags = CLK_SET_RATE_PARENT, 325 .ops = &clk_rcg2_ops, 326 }, 327 }; 328 329 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 330 F(19200000, P_BI_TCXO, 1, 0, 0), 331 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 332 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 333 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 334 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 335 { } 336 }; 337 338 static struct clk_rcg2 gcc_gp1_clk_src = { 339 .cmd_rcgr = 0x64004, 340 .mnd_width = 8, 341 .hid_width = 5, 342 .parent_map = gcc_parent_map_1, 343 .freq_tbl = ftbl_gcc_gp1_clk_src, 344 .clkr.hw.init = &(struct clk_init_data){ 345 .name = "gcc_gp1_clk_src", 346 .parent_data = gcc_parents_1, 347 .num_parents = ARRAY_SIZE(gcc_parents_1), 348 .flags = CLK_SET_RATE_PARENT, 349 .ops = &clk_rcg2_ops, 350 }, 351 }; 352 353 static struct clk_rcg2 gcc_gp2_clk_src = { 354 .cmd_rcgr = 0x65004, 355 .mnd_width = 8, 356 .hid_width = 5, 357 .parent_map = gcc_parent_map_1, 358 .freq_tbl = ftbl_gcc_gp1_clk_src, 359 .clkr.hw.init = &(struct clk_init_data){ 360 .name = "gcc_gp2_clk_src", 361 .parent_data = gcc_parents_1, 362 .num_parents = ARRAY_SIZE(gcc_parents_1), 363 .flags = CLK_SET_RATE_PARENT, 364 .ops = &clk_rcg2_ops, 365 }, 366 }; 367 368 static struct clk_rcg2 gcc_gp3_clk_src = { 369 .cmd_rcgr = 0x66004, 370 .mnd_width = 8, 371 .hid_width = 5, 372 .parent_map = gcc_parent_map_1, 373 .freq_tbl = ftbl_gcc_gp1_clk_src, 374 .clkr.hw.init = &(struct clk_init_data){ 375 .name = "gcc_gp3_clk_src", 376 .parent_data = gcc_parents_1, 377 .num_parents = ARRAY_SIZE(gcc_parents_1), 378 .flags = CLK_SET_RATE_PARENT, 379 .ops = &clk_rcg2_ops, 380 }, 381 }; 382 383 static struct clk_rcg2 gcc_gp4_clk_src = { 384 .cmd_rcgr = 0xbe004, 385 .mnd_width = 8, 386 .hid_width = 5, 387 .parent_map = gcc_parent_map_1, 388 .freq_tbl = ftbl_gcc_gp1_clk_src, 389 .clkr.hw.init = &(struct clk_init_data){ 390 .name = "gcc_gp4_clk_src", 391 .parent_data = gcc_parents_1, 392 .num_parents = ARRAY_SIZE(gcc_parents_1), 393 .flags = CLK_SET_RATE_PARENT, 394 .ops = &clk_rcg2_ops, 395 }, 396 }; 397 398 static struct clk_rcg2 gcc_gp5_clk_src = { 399 .cmd_rcgr = 0xbf004, 400 .mnd_width = 8, 401 .hid_width = 5, 402 .parent_map = gcc_parent_map_1, 403 .freq_tbl = ftbl_gcc_gp1_clk_src, 404 .clkr.hw.init = &(struct clk_init_data){ 405 .name = "gcc_gp5_clk_src", 406 .parent_data = gcc_parents_1, 407 .num_parents = ARRAY_SIZE(gcc_parents_1), 408 .flags = CLK_SET_RATE_PARENT, 409 .ops = &clk_rcg2_ops, 410 }, 411 }; 412 413 static const struct freq_tbl ftbl_gcc_npu_axi_clk_src[] = { 414 F(19200000, P_BI_TCXO, 1, 0, 0), 415 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0), 416 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0), 417 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 418 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 419 F(403000000, P_GPLL4_OUT_MAIN, 2, 0, 0), 420 F(533000000, P_GPLL1_OUT_MAIN, 2, 0, 0), 421 { } 422 }; 423 424 static struct clk_rcg2 gcc_npu_axi_clk_src = { 425 .cmd_rcgr = 0x4d014, 426 .mnd_width = 0, 427 .hid_width = 5, 428 .parent_map = gcc_parent_map_3, 429 .freq_tbl = ftbl_gcc_npu_axi_clk_src, 430 .clkr.hw.init = &(struct clk_init_data){ 431 .name = "gcc_npu_axi_clk_src", 432 .parent_data = gcc_parents_3, 433 .num_parents = ARRAY_SIZE(gcc_parents_3), 434 .flags = CLK_SET_RATE_PARENT, 435 .ops = &clk_rcg2_ops, 436 }, 437 }; 438 439 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 440 F(9600000, P_BI_TCXO, 2, 0, 0), 441 F(19200000, P_BI_TCXO, 1, 0, 0), 442 { } 443 }; 444 445 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 446 .cmd_rcgr = 0x6b02c, 447 .mnd_width = 16, 448 .hid_width = 5, 449 .parent_map = gcc_parent_map_2, 450 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 451 .clkr.hw.init = &(struct clk_init_data){ 452 .name = "gcc_pcie_0_aux_clk_src", 453 .parent_data = gcc_parents_2, 454 .num_parents = ARRAY_SIZE(gcc_parents_2), 455 .flags = CLK_SET_RATE_PARENT, 456 .ops = &clk_rcg2_ops, 457 }, 458 }; 459 460 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = { 461 .cmd_rcgr = 0x8d02c, 462 .mnd_width = 16, 463 .hid_width = 5, 464 .parent_map = gcc_parent_map_2, 465 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 466 .clkr.hw.init = &(struct clk_init_data){ 467 .name = "gcc_pcie_1_aux_clk_src", 468 .parent_data = gcc_parents_2, 469 .num_parents = ARRAY_SIZE(gcc_parents_2), 470 .flags = CLK_SET_RATE_PARENT, 471 .ops = &clk_rcg2_ops, 472 }, 473 }; 474 475 static struct clk_rcg2 gcc_pcie_2_aux_clk_src = { 476 .cmd_rcgr = 0x9d02c, 477 .mnd_width = 16, 478 .hid_width = 5, 479 .parent_map = gcc_parent_map_2, 480 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 481 .clkr.hw.init = &(struct clk_init_data){ 482 .name = "gcc_pcie_2_aux_clk_src", 483 .parent_data = gcc_parents_2, 484 .num_parents = ARRAY_SIZE(gcc_parents_2), 485 .flags = CLK_SET_RATE_PARENT, 486 .ops = &clk_rcg2_ops, 487 }, 488 }; 489 490 static struct clk_rcg2 gcc_pcie_3_aux_clk_src = { 491 .cmd_rcgr = 0xa302c, 492 .mnd_width = 16, 493 .hid_width = 5, 494 .parent_map = gcc_parent_map_2, 495 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 496 .clkr.hw.init = &(struct clk_init_data){ 497 .name = "gcc_pcie_3_aux_clk_src", 498 .parent_data = gcc_parents_2, 499 .num_parents = ARRAY_SIZE(gcc_parents_2), 500 .flags = CLK_SET_RATE_PARENT, 501 .ops = &clk_rcg2_ops, 502 }, 503 }; 504 505 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = { 506 F(19200000, P_BI_TCXO, 1, 0, 0), 507 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 508 { } 509 }; 510 511 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = { 512 .cmd_rcgr = 0x6f014, 513 .mnd_width = 0, 514 .hid_width = 5, 515 .parent_map = gcc_parent_map_0, 516 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src, 517 .clkr.hw.init = &(struct clk_init_data){ 518 .name = "gcc_pcie_phy_refgen_clk_src", 519 .parent_data = gcc_parents_0, 520 .num_parents = ARRAY_SIZE(gcc_parents_0), 521 .flags = CLK_SET_RATE_PARENT, 522 .ops = &clk_rcg2_ops, 523 }, 524 }; 525 526 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 527 F(9600000, P_BI_TCXO, 2, 0, 0), 528 F(19200000, P_BI_TCXO, 1, 0, 0), 529 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 530 { } 531 }; 532 533 static struct clk_rcg2 gcc_pdm2_clk_src = { 534 .cmd_rcgr = 0x33010, 535 .mnd_width = 0, 536 .hid_width = 5, 537 .parent_map = gcc_parent_map_0, 538 .freq_tbl = ftbl_gcc_pdm2_clk_src, 539 .clkr.hw.init = &(struct clk_init_data){ 540 .name = "gcc_pdm2_clk_src", 541 .parent_data = gcc_parents_0, 542 .num_parents = ARRAY_SIZE(gcc_parents_0), 543 .flags = CLK_SET_RATE_PARENT, 544 .ops = &clk_rcg2_ops, 545 }, 546 }; 547 548 static const struct freq_tbl ftbl_gcc_qspi_1_core_clk_src[] = { 549 F(19200000, P_BI_TCXO, 1, 0, 0), 550 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 551 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 552 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 553 { } 554 }; 555 556 static struct clk_rcg2 gcc_qspi_1_core_clk_src = { 557 .cmd_rcgr = 0x4a00c, 558 .mnd_width = 0, 559 .hid_width = 5, 560 .parent_map = gcc_parent_map_0, 561 .freq_tbl = ftbl_gcc_qspi_1_core_clk_src, 562 .clkr.hw.init = &(struct clk_init_data){ 563 .name = "gcc_qspi_1_core_clk_src", 564 .parent_data = gcc_parents_0, 565 .num_parents = ARRAY_SIZE(gcc_parents_0), 566 .flags = CLK_SET_RATE_PARENT, 567 .ops = &clk_rcg2_ops, 568 }, 569 }; 570 571 static struct clk_rcg2 gcc_qspi_core_clk_src = { 572 .cmd_rcgr = 0x4b008, 573 .mnd_width = 0, 574 .hid_width = 5, 575 .parent_map = gcc_parent_map_0, 576 .freq_tbl = ftbl_gcc_qspi_1_core_clk_src, 577 .clkr.hw.init = &(struct clk_init_data){ 578 .name = "gcc_qspi_core_clk_src", 579 .parent_data = gcc_parents_0, 580 .num_parents = ARRAY_SIZE(gcc_parents_0), 581 .flags = CLK_SET_RATE_PARENT, 582 .ops = &clk_rcg2_ops, 583 }, 584 }; 585 586 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 587 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625), 588 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625), 589 F(19200000, P_BI_TCXO, 1, 0, 0), 590 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625), 591 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75), 592 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25), 593 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 594 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75), 595 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 596 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15), 597 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25), 598 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 599 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375), 600 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75), 601 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625), 602 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0), 603 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75), 604 { } 605 }; 606 607 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 608 .name = "gcc_qupv3_wrap0_s0_clk_src", 609 .parent_data = gcc_parents_0, 610 .num_parents = ARRAY_SIZE(gcc_parents_0), 611 .flags = CLK_SET_RATE_PARENT, 612 .ops = &clk_rcg2_ops, 613 }; 614 615 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 616 .cmd_rcgr = 0x17148, 617 .mnd_width = 16, 618 .hid_width = 5, 619 .parent_map = gcc_parent_map_0, 620 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 621 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 622 }; 623 624 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 625 .name = "gcc_qupv3_wrap0_s1_clk_src", 626 .parent_data = gcc_parents_0, 627 .num_parents = ARRAY_SIZE(gcc_parents_0), 628 .flags = CLK_SET_RATE_PARENT, 629 .ops = &clk_rcg2_ops, 630 }; 631 632 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 633 .cmd_rcgr = 0x17278, 634 .mnd_width = 16, 635 .hid_width = 5, 636 .parent_map = gcc_parent_map_0, 637 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 638 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 639 }; 640 641 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 642 .name = "gcc_qupv3_wrap0_s2_clk_src", 643 .parent_data = gcc_parents_0, 644 .num_parents = ARRAY_SIZE(gcc_parents_0), 645 .flags = CLK_SET_RATE_PARENT, 646 .ops = &clk_rcg2_ops, 647 }; 648 649 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 650 .cmd_rcgr = 0x173a8, 651 .mnd_width = 16, 652 .hid_width = 5, 653 .parent_map = gcc_parent_map_0, 654 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 655 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 656 }; 657 658 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 659 .name = "gcc_qupv3_wrap0_s3_clk_src", 660 .parent_data = gcc_parents_0, 661 .num_parents = ARRAY_SIZE(gcc_parents_0), 662 .flags = CLK_SET_RATE_PARENT, 663 .ops = &clk_rcg2_ops, 664 }; 665 666 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 667 .cmd_rcgr = 0x174d8, 668 .mnd_width = 16, 669 .hid_width = 5, 670 .parent_map = gcc_parent_map_0, 671 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 672 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 673 }; 674 675 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 676 .name = "gcc_qupv3_wrap0_s4_clk_src", 677 .parent_data = gcc_parents_0, 678 .num_parents = ARRAY_SIZE(gcc_parents_0), 679 .flags = CLK_SET_RATE_PARENT, 680 .ops = &clk_rcg2_ops, 681 }; 682 683 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 684 .cmd_rcgr = 0x17608, 685 .mnd_width = 16, 686 .hid_width = 5, 687 .parent_map = gcc_parent_map_0, 688 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 689 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 690 }; 691 692 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 693 .name = "gcc_qupv3_wrap0_s5_clk_src", 694 .parent_data = gcc_parents_0, 695 .num_parents = ARRAY_SIZE(gcc_parents_0), 696 .flags = CLK_SET_RATE_PARENT, 697 .ops = &clk_rcg2_ops, 698 }; 699 700 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 701 .cmd_rcgr = 0x17738, 702 .mnd_width = 16, 703 .hid_width = 5, 704 .parent_map = gcc_parent_map_0, 705 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 706 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 707 }; 708 709 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = { 710 .name = "gcc_qupv3_wrap0_s6_clk_src", 711 .parent_data = gcc_parents_0, 712 .num_parents = ARRAY_SIZE(gcc_parents_0), 713 .flags = CLK_SET_RATE_PARENT, 714 .ops = &clk_rcg2_ops, 715 }; 716 717 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 718 .cmd_rcgr = 0x17868, 719 .mnd_width = 16, 720 .hid_width = 5, 721 .parent_map = gcc_parent_map_0, 722 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 723 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init, 724 }; 725 726 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = { 727 .name = "gcc_qupv3_wrap0_s7_clk_src", 728 .parent_data = gcc_parents_0, 729 .num_parents = ARRAY_SIZE(gcc_parents_0), 730 .flags = CLK_SET_RATE_PARENT, 731 .ops = &clk_rcg2_ops, 732 }; 733 734 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 735 .cmd_rcgr = 0x17998, 736 .mnd_width = 16, 737 .hid_width = 5, 738 .parent_map = gcc_parent_map_0, 739 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 740 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init, 741 }; 742 743 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 744 .name = "gcc_qupv3_wrap1_s0_clk_src", 745 .parent_data = gcc_parents_0, 746 .num_parents = ARRAY_SIZE(gcc_parents_0), 747 .flags = CLK_SET_RATE_PARENT, 748 .ops = &clk_rcg2_ops, 749 }; 750 751 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 752 .cmd_rcgr = 0x18148, 753 .mnd_width = 16, 754 .hid_width = 5, 755 .parent_map = gcc_parent_map_0, 756 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 757 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 758 }; 759 760 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 761 .name = "gcc_qupv3_wrap1_s1_clk_src", 762 .parent_data = gcc_parents_0, 763 .num_parents = ARRAY_SIZE(gcc_parents_0), 764 .flags = CLK_SET_RATE_PARENT, 765 .ops = &clk_rcg2_ops, 766 }; 767 768 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 769 .cmd_rcgr = 0x18278, 770 .mnd_width = 16, 771 .hid_width = 5, 772 .parent_map = gcc_parent_map_0, 773 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 774 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 775 }; 776 777 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 778 .name = "gcc_qupv3_wrap1_s2_clk_src", 779 .parent_data = gcc_parents_0, 780 .num_parents = ARRAY_SIZE(gcc_parents_0), 781 .flags = CLK_SET_RATE_PARENT, 782 .ops = &clk_rcg2_ops, 783 }; 784 785 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 786 .cmd_rcgr = 0x183a8, 787 .mnd_width = 16, 788 .hid_width = 5, 789 .parent_map = gcc_parent_map_0, 790 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 791 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 792 }; 793 794 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 795 .name = "gcc_qupv3_wrap1_s3_clk_src", 796 .parent_data = gcc_parents_0, 797 .num_parents = ARRAY_SIZE(gcc_parents_0), 798 .flags = CLK_SET_RATE_PARENT, 799 .ops = &clk_rcg2_ops, 800 }; 801 802 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 803 .cmd_rcgr = 0x184d8, 804 .mnd_width = 16, 805 .hid_width = 5, 806 .parent_map = gcc_parent_map_0, 807 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 808 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 809 }; 810 811 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 812 .name = "gcc_qupv3_wrap1_s4_clk_src", 813 .parent_data = gcc_parents_0, 814 .num_parents = ARRAY_SIZE(gcc_parents_0), 815 .flags = CLK_SET_RATE_PARENT, 816 .ops = &clk_rcg2_ops, 817 }; 818 819 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 820 .cmd_rcgr = 0x18608, 821 .mnd_width = 16, 822 .hid_width = 5, 823 .parent_map = gcc_parent_map_0, 824 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 825 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 826 }; 827 828 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 829 .name = "gcc_qupv3_wrap1_s5_clk_src", 830 .parent_data = gcc_parents_0, 831 .num_parents = ARRAY_SIZE(gcc_parents_0), 832 .flags = CLK_SET_RATE_PARENT, 833 .ops = &clk_rcg2_ops, 834 }; 835 836 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 837 .cmd_rcgr = 0x18738, 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 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 843 }; 844 845 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = { 846 .name = "gcc_qupv3_wrap2_s0_clk_src", 847 .parent_data = gcc_parents_0, 848 .num_parents = ARRAY_SIZE(gcc_parents_0), 849 .flags = CLK_SET_RATE_PARENT, 850 .ops = &clk_rcg2_ops, 851 }; 852 853 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = { 854 .cmd_rcgr = 0x1e148, 855 .mnd_width = 16, 856 .hid_width = 5, 857 .parent_map = gcc_parent_map_0, 858 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 859 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init, 860 }; 861 862 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = { 863 .name = "gcc_qupv3_wrap2_s1_clk_src", 864 .parent_data = gcc_parents_0, 865 .num_parents = ARRAY_SIZE(gcc_parents_0), 866 .flags = CLK_SET_RATE_PARENT, 867 .ops = &clk_rcg2_ops, 868 }; 869 870 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = { 871 .cmd_rcgr = 0x1e278, 872 .mnd_width = 16, 873 .hid_width = 5, 874 .parent_map = gcc_parent_map_0, 875 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 876 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init, 877 }; 878 879 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = { 880 .name = "gcc_qupv3_wrap2_s2_clk_src", 881 .parent_data = gcc_parents_0, 882 .num_parents = ARRAY_SIZE(gcc_parents_0), 883 .flags = CLK_SET_RATE_PARENT, 884 .ops = &clk_rcg2_ops, 885 }; 886 887 888 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = { 889 .cmd_rcgr = 0x1e3a8, 890 .mnd_width = 16, 891 .hid_width = 5, 892 .parent_map = gcc_parent_map_0, 893 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 894 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init, 895 }; 896 897 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = { 898 .name = "gcc_qupv3_wrap2_s3_clk_src", 899 .parent_data = gcc_parents_0, 900 .num_parents = ARRAY_SIZE(gcc_parents_0), 901 .flags = CLK_SET_RATE_PARENT, 902 .ops = &clk_rcg2_ops, 903 }; 904 905 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = { 906 .cmd_rcgr = 0x1e4d8, 907 .mnd_width = 16, 908 .hid_width = 5, 909 .parent_map = gcc_parent_map_0, 910 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 911 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init, 912 }; 913 914 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = { 915 .name = "gcc_qupv3_wrap2_s4_clk_src", 916 .parent_data = gcc_parents_0, 917 .num_parents = ARRAY_SIZE(gcc_parents_0), 918 .flags = CLK_SET_RATE_PARENT, 919 .ops = &clk_rcg2_ops, 920 }; 921 922 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = { 923 .cmd_rcgr = 0x1e608, 924 .mnd_width = 16, 925 .hid_width = 5, 926 .parent_map = gcc_parent_map_0, 927 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 928 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init, 929 }; 930 931 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = { 932 .name = "gcc_qupv3_wrap2_s5_clk_src", 933 .parent_data = gcc_parents_0, 934 .num_parents = ARRAY_SIZE(gcc_parents_0), 935 .flags = CLK_SET_RATE_PARENT, 936 .ops = &clk_rcg2_ops, 937 }; 938 939 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = { 940 .cmd_rcgr = 0x1e738, 941 .mnd_width = 16, 942 .hid_width = 5, 943 .parent_map = gcc_parent_map_0, 944 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 945 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init, 946 }; 947 948 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 949 F(400000, P_BI_TCXO, 12, 1, 4), 950 F(9600000, P_BI_TCXO, 2, 0, 0), 951 F(19200000, P_BI_TCXO, 1, 0, 0), 952 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), 953 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 954 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 955 F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0), 956 { } 957 }; 958 959 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 960 .cmd_rcgr = 0x1400c, 961 .mnd_width = 8, 962 .hid_width = 5, 963 .parent_map = gcc_parent_map_7, 964 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 965 .clkr.hw.init = &(struct clk_init_data){ 966 .name = "gcc_sdcc2_apps_clk_src", 967 .parent_data = gcc_parents_7, 968 .num_parents = ARRAY_SIZE(gcc_parents_7), 969 .flags = CLK_SET_RATE_PARENT, 970 .ops = &clk_rcg2_floor_ops, 971 }, 972 }; 973 974 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = { 975 F(400000, P_BI_TCXO, 12, 1, 4), 976 F(9600000, P_BI_TCXO, 2, 0, 0), 977 F(19200000, P_BI_TCXO, 1, 0, 0), 978 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 979 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 980 { } 981 }; 982 983 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = { 984 .cmd_rcgr = 0x1600c, 985 .mnd_width = 8, 986 .hid_width = 5, 987 .parent_map = gcc_parent_map_5, 988 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src, 989 .clkr.hw.init = &(struct clk_init_data){ 990 .name = "gcc_sdcc4_apps_clk_src", 991 .parent_data = gcc_parents_5, 992 .num_parents = ARRAY_SIZE(gcc_parents_5), 993 .flags = CLK_SET_RATE_PARENT, 994 .ops = &clk_rcg2_floor_ops, 995 }, 996 }; 997 998 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = { 999 F(105495, P_BI_TCXO, 2, 1, 91), 1000 { } 1001 }; 1002 1003 static struct clk_rcg2 gcc_tsif_ref_clk_src = { 1004 .cmd_rcgr = 0x36010, 1005 .mnd_width = 8, 1006 .hid_width = 5, 1007 .parent_map = gcc_parent_map_8, 1008 .freq_tbl = ftbl_gcc_tsif_ref_clk_src, 1009 .clkr.hw.init = &(struct clk_init_data){ 1010 .name = "gcc_tsif_ref_clk_src", 1011 .parent_data = gcc_parents_8, 1012 .num_parents = ARRAY_SIZE(gcc_parents_8), 1013 .flags = CLK_SET_RATE_PARENT, 1014 .ops = &clk_rcg2_ops, 1015 }, 1016 }; 1017 1018 static const struct freq_tbl ftbl_gcc_ufs_card_2_axi_clk_src[] = { 1019 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 1020 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 1021 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1022 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 1023 { } 1024 }; 1025 1026 static struct clk_rcg2 gcc_ufs_card_2_axi_clk_src = { 1027 .cmd_rcgr = 0xa2020, 1028 .mnd_width = 8, 1029 .hid_width = 5, 1030 .parent_map = gcc_parent_map_0, 1031 .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src, 1032 .clkr.hw.init = &(struct clk_init_data){ 1033 .name = "gcc_ufs_card_2_axi_clk_src", 1034 .parent_data = gcc_parents_0, 1035 .num_parents = ARRAY_SIZE(gcc_parents_0), 1036 .flags = CLK_SET_RATE_PARENT, 1037 .ops = &clk_rcg2_ops, 1038 }, 1039 }; 1040 1041 static struct clk_rcg2 gcc_ufs_card_2_ice_core_clk_src = { 1042 .cmd_rcgr = 0xa2060, 1043 .mnd_width = 0, 1044 .hid_width = 5, 1045 .parent_map = gcc_parent_map_0, 1046 .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src, 1047 .clkr.hw.init = &(struct clk_init_data){ 1048 .name = "gcc_ufs_card_2_ice_core_clk_src", 1049 .parent_data = gcc_parents_0, 1050 .num_parents = ARRAY_SIZE(gcc_parents_0), 1051 .flags = CLK_SET_RATE_PARENT, 1052 .ops = &clk_rcg2_ops, 1053 }, 1054 }; 1055 1056 static const struct freq_tbl ftbl_gcc_ufs_card_2_phy_aux_clk_src[] = { 1057 F(19200000, P_BI_TCXO, 1, 0, 0), 1058 { } 1059 }; 1060 1061 static struct clk_rcg2 gcc_ufs_card_2_phy_aux_clk_src = { 1062 .cmd_rcgr = 0xa2094, 1063 .mnd_width = 0, 1064 .hid_width = 5, 1065 .parent_map = gcc_parent_map_4, 1066 .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src, 1067 .clkr.hw.init = &(struct clk_init_data){ 1068 .name = "gcc_ufs_card_2_phy_aux_clk_src", 1069 .parent_data = gcc_parents_4, 1070 .num_parents = ARRAY_SIZE(gcc_parents_4), 1071 .flags = CLK_SET_RATE_PARENT, 1072 .ops = &clk_rcg2_ops, 1073 }, 1074 }; 1075 1076 static struct clk_rcg2 gcc_ufs_card_2_unipro_core_clk_src = { 1077 .cmd_rcgr = 0xa2078, 1078 .mnd_width = 0, 1079 .hid_width = 5, 1080 .parent_map = gcc_parent_map_0, 1081 .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src, 1082 .clkr.hw.init = &(struct clk_init_data){ 1083 .name = "gcc_ufs_card_2_unipro_core_clk_src", 1084 .parent_data = gcc_parents_0, 1085 .num_parents = ARRAY_SIZE(gcc_parents_0), 1086 .flags = CLK_SET_RATE_PARENT, 1087 .ops = &clk_rcg2_ops, 1088 }, 1089 }; 1090 1091 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = { 1092 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 1093 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 1094 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 1095 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 1096 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 1097 { } 1098 }; 1099 1100 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = { 1101 .cmd_rcgr = 0x75020, 1102 .mnd_width = 8, 1103 .hid_width = 5, 1104 .parent_map = gcc_parent_map_0, 1105 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src, 1106 .clkr.hw.init = &(struct clk_init_data){ 1107 .name = "gcc_ufs_card_axi_clk_src", 1108 .parent_data = gcc_parents_0, 1109 .num_parents = ARRAY_SIZE(gcc_parents_0), 1110 .flags = CLK_SET_RATE_PARENT, 1111 .ops = &clk_rcg2_ops, 1112 }, 1113 }; 1114 1115 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = { 1116 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 1117 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1118 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 1119 { } 1120 }; 1121 1122 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = { 1123 .cmd_rcgr = 0x75060, 1124 .mnd_width = 0, 1125 .hid_width = 5, 1126 .parent_map = gcc_parent_map_0, 1127 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 1128 .clkr.hw.init = &(struct clk_init_data){ 1129 .name = "gcc_ufs_card_ice_core_clk_src", 1130 .parent_data = gcc_parents_0, 1131 .num_parents = ARRAY_SIZE(gcc_parents_0), 1132 .flags = CLK_SET_RATE_PARENT, 1133 .ops = &clk_rcg2_ops, 1134 }, 1135 }; 1136 1137 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = { 1138 .cmd_rcgr = 0x75094, 1139 .mnd_width = 0, 1140 .hid_width = 5, 1141 .parent_map = gcc_parent_map_4, 1142 .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src, 1143 .clkr.hw.init = &(struct clk_init_data){ 1144 .name = "gcc_ufs_card_phy_aux_clk_src", 1145 .parent_data = gcc_parents_4, 1146 .num_parents = ARRAY_SIZE(gcc_parents_4), 1147 .flags = CLK_SET_RATE_PARENT, 1148 .ops = &clk_rcg2_ops, 1149 }, 1150 }; 1151 1152 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = { 1153 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 1154 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 1155 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1156 { } 1157 }; 1158 1159 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = { 1160 .cmd_rcgr = 0x75078, 1161 .mnd_width = 0, 1162 .hid_width = 5, 1163 .parent_map = gcc_parent_map_0, 1164 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src, 1165 .clkr.hw.init = &(struct clk_init_data){ 1166 .name = "gcc_ufs_card_unipro_core_clk_src", 1167 .parent_data = gcc_parents_0, 1168 .num_parents = ARRAY_SIZE(gcc_parents_0), 1169 .flags = CLK_SET_RATE_PARENT, 1170 .ops = &clk_rcg2_ops, 1171 }, 1172 }; 1173 1174 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 1175 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 1176 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 1177 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 1178 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1179 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 1180 { } 1181 }; 1182 1183 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 1184 .cmd_rcgr = 0x77020, 1185 .mnd_width = 8, 1186 .hid_width = 5, 1187 .parent_map = gcc_parent_map_0, 1188 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 1189 .clkr.hw.init = &(struct clk_init_data){ 1190 .name = "gcc_ufs_phy_axi_clk_src", 1191 .parent_data = gcc_parents_0, 1192 .num_parents = ARRAY_SIZE(gcc_parents_0), 1193 .flags = CLK_SET_RATE_PARENT, 1194 .ops = &clk_rcg2_ops, 1195 }, 1196 }; 1197 1198 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 1199 .cmd_rcgr = 0x77060, 1200 .mnd_width = 0, 1201 .hid_width = 5, 1202 .parent_map = gcc_parent_map_0, 1203 .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src, 1204 .clkr.hw.init = &(struct clk_init_data){ 1205 .name = "gcc_ufs_phy_ice_core_clk_src", 1206 .parent_data = gcc_parents_0, 1207 .num_parents = ARRAY_SIZE(gcc_parents_0), 1208 .flags = CLK_SET_RATE_PARENT, 1209 .ops = &clk_rcg2_ops, 1210 }, 1211 }; 1212 1213 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 1214 .cmd_rcgr = 0x77094, 1215 .mnd_width = 0, 1216 .hid_width = 5, 1217 .parent_map = gcc_parent_map_4, 1218 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 1219 .clkr.hw.init = &(struct clk_init_data){ 1220 .name = "gcc_ufs_phy_phy_aux_clk_src", 1221 .parent_data = gcc_parents_4, 1222 .num_parents = ARRAY_SIZE(gcc_parents_4), 1223 .flags = CLK_SET_RATE_PARENT, 1224 .ops = &clk_rcg2_ops, 1225 }, 1226 }; 1227 1228 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 1229 .cmd_rcgr = 0x77078, 1230 .mnd_width = 0, 1231 .hid_width = 5, 1232 .parent_map = gcc_parent_map_0, 1233 .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src, 1234 .clkr.hw.init = &(struct clk_init_data){ 1235 .name = "gcc_ufs_phy_unipro_core_clk_src", 1236 .parent_data = gcc_parents_0, 1237 .num_parents = ARRAY_SIZE(gcc_parents_0), 1238 .flags = CLK_SET_RATE_PARENT, 1239 .ops = &clk_rcg2_ops, 1240 }, 1241 }; 1242 1243 static const struct freq_tbl ftbl_gcc_usb30_mp_master_clk_src[] = { 1244 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0), 1245 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0), 1246 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 1247 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 1248 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 1249 { } 1250 }; 1251 1252 static struct clk_rcg2 gcc_usb30_mp_master_clk_src = { 1253 .cmd_rcgr = 0xa601c, 1254 .mnd_width = 8, 1255 .hid_width = 5, 1256 .parent_map = gcc_parent_map_0, 1257 .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src, 1258 .clkr.hw.init = &(struct clk_init_data){ 1259 .name = "gcc_usb30_mp_master_clk_src", 1260 .parent_data = gcc_parents_0, 1261 .num_parents = ARRAY_SIZE(gcc_parents_0), 1262 .flags = CLK_SET_RATE_PARENT, 1263 .ops = &clk_rcg2_ops, 1264 }, 1265 }; 1266 1267 static const struct freq_tbl ftbl_gcc_usb30_mp_mock_utmi_clk_src[] = { 1268 F(19200000, P_BI_TCXO, 1, 0, 0), 1269 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0), 1270 F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0), 1271 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 1272 { } 1273 }; 1274 1275 static struct clk_rcg2 gcc_usb30_mp_mock_utmi_clk_src = { 1276 .cmd_rcgr = 0xa6034, 1277 .mnd_width = 0, 1278 .hid_width = 5, 1279 .parent_map = gcc_parent_map_0, 1280 .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src, 1281 .clkr.hw.init = &(struct clk_init_data){ 1282 .name = "gcc_usb30_mp_mock_utmi_clk_src", 1283 .parent_data = gcc_parents_0, 1284 .num_parents = ARRAY_SIZE(gcc_parents_0), 1285 .flags = CLK_SET_RATE_PARENT, 1286 .ops = &clk_rcg2_ops, 1287 }, 1288 }; 1289 1290 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1291 .cmd_rcgr = 0xf01c, 1292 .mnd_width = 8, 1293 .hid_width = 5, 1294 .parent_map = gcc_parent_map_0, 1295 .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src, 1296 .clkr.hw.init = &(struct clk_init_data){ 1297 .name = "gcc_usb30_prim_master_clk_src", 1298 .parent_data = gcc_parents_0, 1299 .num_parents = ARRAY_SIZE(gcc_parents_0), 1300 .flags = CLK_SET_RATE_PARENT, 1301 .ops = &clk_rcg2_ops, 1302 }, 1303 }; 1304 1305 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1306 .cmd_rcgr = 0xf034, 1307 .mnd_width = 0, 1308 .hid_width = 5, 1309 .parent_map = gcc_parent_map_0, 1310 .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src, 1311 .clkr.hw.init = &(struct clk_init_data){ 1312 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1313 .parent_data = gcc_parents_0, 1314 .num_parents = ARRAY_SIZE(gcc_parents_0), 1315 .flags = CLK_SET_RATE_PARENT, 1316 .ops = &clk_rcg2_ops, 1317 }, 1318 }; 1319 1320 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = { 1321 .cmd_rcgr = 0x1001c, 1322 .mnd_width = 8, 1323 .hid_width = 5, 1324 .parent_map = gcc_parent_map_0, 1325 .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src, 1326 .clkr.hw.init = &(struct clk_init_data){ 1327 .name = "gcc_usb30_sec_master_clk_src", 1328 .parent_data = gcc_parents_0, 1329 .num_parents = ARRAY_SIZE(gcc_parents_0), 1330 .flags = CLK_SET_RATE_PARENT, 1331 .ops = &clk_rcg2_ops, 1332 }, 1333 }; 1334 1335 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = { 1336 .cmd_rcgr = 0x10034, 1337 .mnd_width = 0, 1338 .hid_width = 5, 1339 .parent_map = gcc_parent_map_0, 1340 .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src, 1341 .clkr.hw.init = &(struct clk_init_data){ 1342 .name = "gcc_usb30_sec_mock_utmi_clk_src", 1343 .parent_data = gcc_parents_0, 1344 .num_parents = ARRAY_SIZE(gcc_parents_0), 1345 .flags = CLK_SET_RATE_PARENT, 1346 .ops = &clk_rcg2_ops, 1347 }, 1348 }; 1349 1350 static struct clk_rcg2 gcc_usb3_mp_phy_aux_clk_src = { 1351 .cmd_rcgr = 0xa6068, 1352 .mnd_width = 0, 1353 .hid_width = 5, 1354 .parent_map = gcc_parent_map_2, 1355 .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src, 1356 .clkr.hw.init = &(struct clk_init_data){ 1357 .name = "gcc_usb3_mp_phy_aux_clk_src", 1358 .parent_data = gcc_parents_2, 1359 .num_parents = ARRAY_SIZE(gcc_parents_2), 1360 .flags = CLK_SET_RATE_PARENT, 1361 .ops = &clk_rcg2_ops, 1362 }, 1363 }; 1364 1365 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1366 .cmd_rcgr = 0xf060, 1367 .mnd_width = 0, 1368 .hid_width = 5, 1369 .parent_map = gcc_parent_map_2, 1370 .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src, 1371 .clkr.hw.init = &(struct clk_init_data){ 1372 .name = "gcc_usb3_prim_phy_aux_clk_src", 1373 .parent_data = gcc_parents_2, 1374 .num_parents = ARRAY_SIZE(gcc_parents_2), 1375 .flags = CLK_SET_RATE_PARENT, 1376 .ops = &clk_rcg2_ops, 1377 }, 1378 }; 1379 1380 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = { 1381 .cmd_rcgr = 0x10060, 1382 .mnd_width = 0, 1383 .hid_width = 5, 1384 .parent_map = gcc_parent_map_2, 1385 .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src, 1386 .clkr.hw.init = &(struct clk_init_data){ 1387 .name = "gcc_usb3_sec_phy_aux_clk_src", 1388 .parent_data = gcc_parents_2, 1389 .num_parents = ARRAY_SIZE(gcc_parents_2), 1390 .flags = CLK_SET_RATE_PARENT, 1391 .ops = &clk_rcg2_ops, 1392 }, 1393 }; 1394 1395 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = { 1396 .halt_reg = 0x90018, 1397 .halt_check = BRANCH_HALT, 1398 .clkr = { 1399 .enable_reg = 0x90018, 1400 .enable_mask = BIT(0), 1401 .hw.init = &(struct clk_init_data){ 1402 .name = "gcc_aggre_noc_pcie_tbu_clk", 1403 .ops = &clk_branch2_ops, 1404 }, 1405 }, 1406 }; 1407 1408 static struct clk_branch gcc_aggre_ufs_card_axi_clk = { 1409 .halt_reg = 0x750c0, 1410 .halt_check = BRANCH_HALT, 1411 .hwcg_reg = 0x750c0, 1412 .hwcg_bit = 1, 1413 .clkr = { 1414 .enable_reg = 0x750c0, 1415 .enable_mask = BIT(0), 1416 .hw.init = &(struct clk_init_data){ 1417 .name = "gcc_aggre_ufs_card_axi_clk", 1418 .parent_hws = (const struct clk_hw *[]){ 1419 &gcc_ufs_card_axi_clk_src.clkr.hw 1420 }, 1421 .num_parents = 1, 1422 .flags = CLK_SET_RATE_PARENT, 1423 .ops = &clk_branch2_ops, 1424 }, 1425 }, 1426 }; 1427 1428 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = { 1429 .halt_reg = 0x750c0, 1430 .halt_check = BRANCH_HALT, 1431 .hwcg_reg = 0x750c0, 1432 .hwcg_bit = 1, 1433 .clkr = { 1434 .enable_reg = 0x750c0, 1435 .enable_mask = BIT(1), 1436 .hw.init = &(struct clk_init_data){ 1437 .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk", 1438 .parent_hws = (const struct clk_hw *[]){ 1439 &gcc_aggre_ufs_card_axi_clk.clkr.hw 1440 }, 1441 .num_parents = 1, 1442 .flags = CLK_SET_RATE_PARENT, 1443 .ops = &clk_branch_simple_ops, 1444 }, 1445 }, 1446 }; 1447 1448 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 1449 .halt_reg = 0x770c0, 1450 .halt_check = BRANCH_HALT, 1451 .hwcg_reg = 0x770c0, 1452 .hwcg_bit = 1, 1453 .clkr = { 1454 .enable_reg = 0x770c0, 1455 .enable_mask = BIT(0), 1456 .hw.init = &(struct clk_init_data){ 1457 .name = "gcc_aggre_ufs_phy_axi_clk", 1458 .parent_hws = (const struct clk_hw *[]){ 1459 &gcc_ufs_phy_axi_clk_src.clkr.hw 1460 }, 1461 .num_parents = 1, 1462 .flags = CLK_SET_RATE_PARENT, 1463 .ops = &clk_branch2_ops, 1464 }, 1465 }, 1466 }; 1467 1468 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 1469 .halt_reg = 0x770c0, 1470 .halt_check = BRANCH_HALT, 1471 .hwcg_reg = 0x770c0, 1472 .hwcg_bit = 1, 1473 .clkr = { 1474 .enable_reg = 0x770c0, 1475 .enable_mask = BIT(1), 1476 .hw.init = &(struct clk_init_data){ 1477 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 1478 .parent_hws = (const struct clk_hw *[]){ 1479 &gcc_aggre_ufs_phy_axi_clk.clkr.hw 1480 }, 1481 .num_parents = 1, 1482 .flags = CLK_SET_RATE_PARENT, 1483 .ops = &clk_branch_simple_ops, 1484 }, 1485 }, 1486 }; 1487 1488 static struct clk_branch gcc_aggre_usb3_mp_axi_clk = { 1489 .halt_reg = 0xa6084, 1490 .halt_check = BRANCH_HALT, 1491 .clkr = { 1492 .enable_reg = 0xa6084, 1493 .enable_mask = BIT(0), 1494 .hw.init = &(struct clk_init_data){ 1495 .name = "gcc_aggre_usb3_mp_axi_clk", 1496 .parent_hws = (const struct clk_hw *[]){ 1497 &gcc_usb30_mp_master_clk_src.clkr.hw 1498 }, 1499 .num_parents = 1, 1500 .flags = CLK_SET_RATE_PARENT, 1501 .ops = &clk_branch2_ops, 1502 }, 1503 }, 1504 }; 1505 1506 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 1507 .halt_reg = 0xf07c, 1508 .halt_check = BRANCH_HALT, 1509 .clkr = { 1510 .enable_reg = 0xf07c, 1511 .enable_mask = BIT(0), 1512 .hw.init = &(struct clk_init_data){ 1513 .name = "gcc_aggre_usb3_prim_axi_clk", 1514 .parent_hws = (const struct clk_hw *[]){ 1515 &gcc_usb30_prim_master_clk_src.clkr.hw 1516 }, 1517 .num_parents = 1, 1518 .flags = CLK_SET_RATE_PARENT, 1519 .ops = &clk_branch2_ops, 1520 }, 1521 }, 1522 }; 1523 1524 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = { 1525 .halt_reg = 0x1007c, 1526 .halt_check = BRANCH_HALT, 1527 .clkr = { 1528 .enable_reg = 0x1007c, 1529 .enable_mask = BIT(0), 1530 .hw.init = &(struct clk_init_data){ 1531 .name = "gcc_aggre_usb3_sec_axi_clk", 1532 .parent_hws = (const struct clk_hw *[]){ 1533 &gcc_usb30_sec_master_clk_src.clkr.hw 1534 }, 1535 .num_parents = 1, 1536 .flags = CLK_SET_RATE_PARENT, 1537 .ops = &clk_branch2_ops, 1538 }, 1539 }, 1540 }; 1541 1542 static struct clk_branch gcc_boot_rom_ahb_clk = { 1543 .halt_reg = 0x38004, 1544 .halt_check = BRANCH_HALT_VOTED, 1545 .hwcg_reg = 0x38004, 1546 .hwcg_bit = 1, 1547 .clkr = { 1548 .enable_reg = 0x52004, 1549 .enable_mask = BIT(10), 1550 .hw.init = &(struct clk_init_data){ 1551 .name = "gcc_boot_rom_ahb_clk", 1552 .ops = &clk_branch2_ops, 1553 }, 1554 }, 1555 }; 1556 1557 static struct clk_branch gcc_camera_hf_axi_clk = { 1558 .halt_reg = 0xb030, 1559 .halt_check = BRANCH_HALT, 1560 .clkr = { 1561 .enable_reg = 0xb030, 1562 .enable_mask = BIT(0), 1563 .hw.init = &(struct clk_init_data){ 1564 .name = "gcc_camera_hf_axi_clk", 1565 .ops = &clk_branch2_ops, 1566 }, 1567 }, 1568 }; 1569 1570 static struct clk_branch gcc_camera_sf_axi_clk = { 1571 .halt_reg = 0xb034, 1572 .halt_check = BRANCH_HALT, 1573 .clkr = { 1574 .enable_reg = 0xb034, 1575 .enable_mask = BIT(0), 1576 .hw.init = &(struct clk_init_data){ 1577 .name = "gcc_camera_sf_axi_clk", 1578 .ops = &clk_branch2_ops, 1579 }, 1580 }, 1581 }; 1582 1583 static struct clk_branch gcc_cfg_noc_usb3_mp_axi_clk = { 1584 .halt_reg = 0xa609c, 1585 .halt_check = BRANCH_HALT, 1586 .clkr = { 1587 .enable_reg = 0xa609c, 1588 .enable_mask = BIT(0), 1589 .hw.init = &(struct clk_init_data){ 1590 .name = "gcc_cfg_noc_usb3_mp_axi_clk", 1591 .parent_hws = (const struct clk_hw *[]){ 1592 &gcc_usb30_mp_master_clk_src.clkr.hw 1593 }, 1594 .num_parents = 1, 1595 .flags = CLK_SET_RATE_PARENT, 1596 .ops = &clk_branch2_ops, 1597 }, 1598 }, 1599 }; 1600 1601 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1602 .halt_reg = 0xf078, 1603 .halt_check = BRANCH_HALT, 1604 .clkr = { 1605 .enable_reg = 0xf078, 1606 .enable_mask = BIT(0), 1607 .hw.init = &(struct clk_init_data){ 1608 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1609 .parent_hws = (const struct clk_hw *[]){ 1610 &gcc_usb30_prim_master_clk_src.clkr.hw 1611 }, 1612 .num_parents = 1, 1613 .flags = CLK_SET_RATE_PARENT, 1614 .ops = &clk_branch2_ops, 1615 }, 1616 }, 1617 }; 1618 1619 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = { 1620 .halt_reg = 0x10078, 1621 .halt_check = BRANCH_HALT, 1622 .clkr = { 1623 .enable_reg = 0x10078, 1624 .enable_mask = BIT(0), 1625 .hw.init = &(struct clk_init_data){ 1626 .name = "gcc_cfg_noc_usb3_sec_axi_clk", 1627 .parent_hws = (const struct clk_hw *[]){ 1628 &gcc_usb30_sec_master_clk_src.clkr.hw 1629 }, 1630 .num_parents = 1, 1631 .flags = CLK_SET_RATE_PARENT, 1632 .ops = &clk_branch2_ops, 1633 }, 1634 }, 1635 }; 1636 1637 static struct clk_branch gcc_cpuss_rbcpr_clk = { 1638 .halt_reg = 0x48008, 1639 .halt_check = BRANCH_HALT, 1640 .clkr = { 1641 .enable_reg = 0x48008, 1642 .enable_mask = BIT(0), 1643 .hw.init = &(struct clk_init_data){ 1644 .name = "gcc_cpuss_rbcpr_clk", 1645 .ops = &clk_branch2_ops, 1646 }, 1647 }, 1648 }; 1649 1650 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1651 .halt_reg = 0x71154, 1652 .halt_check = BRANCH_VOTED, 1653 .clkr = { 1654 .enable_reg = 0x71154, 1655 .enable_mask = BIT(0), 1656 .hw.init = &(struct clk_init_data){ 1657 .name = "gcc_ddrss_gpu_axi_clk", 1658 .ops = &clk_branch2_ops, 1659 }, 1660 }, 1661 }; 1662 1663 static struct clk_branch gcc_disp_hf_axi_clk = { 1664 .halt_reg = 0xb038, 1665 .halt_check = BRANCH_HALT, 1666 .clkr = { 1667 .enable_reg = 0xb038, 1668 .enable_mask = BIT(0), 1669 .hw.init = &(struct clk_init_data){ 1670 .name = "gcc_disp_hf_axi_clk", 1671 .ops = &clk_branch2_ops, 1672 }, 1673 }, 1674 }; 1675 1676 static struct clk_branch gcc_disp_sf_axi_clk = { 1677 .halt_reg = 0xb03c, 1678 .halt_check = BRANCH_HALT, 1679 .clkr = { 1680 .enable_reg = 0xb03c, 1681 .enable_mask = BIT(0), 1682 .hw.init = &(struct clk_init_data){ 1683 .name = "gcc_disp_sf_axi_clk", 1684 .ops = &clk_branch2_ops, 1685 }, 1686 }, 1687 }; 1688 1689 static struct clk_branch gcc_emac_axi_clk = { 1690 .halt_reg = 0x6010, 1691 .halt_check = BRANCH_HALT, 1692 .clkr = { 1693 .enable_reg = 0x6010, 1694 .enable_mask = BIT(0), 1695 .hw.init = &(struct clk_init_data){ 1696 .name = "gcc_emac_axi_clk", 1697 .ops = &clk_branch2_ops, 1698 }, 1699 }, 1700 }; 1701 1702 static struct clk_branch gcc_emac_ptp_clk = { 1703 .halt_reg = 0x6034, 1704 .halt_check = BRANCH_HALT, 1705 .clkr = { 1706 .enable_reg = 0x6034, 1707 .enable_mask = BIT(0), 1708 .hw.init = &(struct clk_init_data){ 1709 .name = "gcc_emac_ptp_clk", 1710 .parent_hws = (const struct clk_hw *[]){ 1711 &gcc_emac_ptp_clk_src.clkr.hw 1712 }, 1713 .num_parents = 1, 1714 .flags = CLK_SET_RATE_PARENT, 1715 .ops = &clk_branch2_ops, 1716 }, 1717 }, 1718 }; 1719 1720 static struct clk_branch gcc_emac_rgmii_clk = { 1721 .halt_reg = 0x6018, 1722 .halt_check = BRANCH_HALT, 1723 .clkr = { 1724 .enable_reg = 0x6018, 1725 .enable_mask = BIT(0), 1726 .hw.init = &(struct clk_init_data){ 1727 .name = "gcc_emac_rgmii_clk", 1728 .parent_hws = (const struct clk_hw *[]){ 1729 &gcc_emac_rgmii_clk_src.clkr.hw 1730 }, 1731 .num_parents = 1, 1732 .flags = CLK_SET_RATE_PARENT, 1733 .ops = &clk_branch2_ops, 1734 }, 1735 }, 1736 }; 1737 1738 static struct clk_branch gcc_emac_slv_ahb_clk = { 1739 .halt_reg = 0x6014, 1740 .halt_check = BRANCH_HALT, 1741 .hwcg_reg = 0x6014, 1742 .hwcg_bit = 1, 1743 .clkr = { 1744 .enable_reg = 0x6014, 1745 .enable_mask = BIT(0), 1746 .hw.init = &(struct clk_init_data){ 1747 .name = "gcc_emac_slv_ahb_clk", 1748 .ops = &clk_branch2_ops, 1749 }, 1750 }, 1751 }; 1752 1753 static struct clk_branch gcc_gp1_clk = { 1754 .halt_reg = 0x64000, 1755 .halt_check = BRANCH_HALT, 1756 .clkr = { 1757 .enable_reg = 0x64000, 1758 .enable_mask = BIT(0), 1759 .hw.init = &(struct clk_init_data){ 1760 .name = "gcc_gp1_clk", 1761 .parent_hws = (const struct clk_hw *[]){ 1762 &gcc_gp1_clk_src.clkr.hw 1763 }, 1764 .num_parents = 1, 1765 .flags = CLK_SET_RATE_PARENT, 1766 .ops = &clk_branch2_ops, 1767 }, 1768 }, 1769 }; 1770 1771 static struct clk_branch gcc_gp2_clk = { 1772 .halt_reg = 0x65000, 1773 .halt_check = BRANCH_HALT, 1774 .clkr = { 1775 .enable_reg = 0x65000, 1776 .enable_mask = BIT(0), 1777 .hw.init = &(struct clk_init_data){ 1778 .name = "gcc_gp2_clk", 1779 .parent_hws = (const struct clk_hw *[]){ 1780 &gcc_gp2_clk_src.clkr.hw 1781 }, 1782 .num_parents = 1, 1783 .flags = CLK_SET_RATE_PARENT, 1784 .ops = &clk_branch2_ops, 1785 }, 1786 }, 1787 }; 1788 1789 static struct clk_branch gcc_gp3_clk = { 1790 .halt_reg = 0x66000, 1791 .halt_check = BRANCH_HALT, 1792 .clkr = { 1793 .enable_reg = 0x66000, 1794 .enable_mask = BIT(0), 1795 .hw.init = &(struct clk_init_data){ 1796 .name = "gcc_gp3_clk", 1797 .parent_hws = (const struct clk_hw *[]){ 1798 &gcc_gp3_clk_src.clkr.hw 1799 }, 1800 .num_parents = 1, 1801 .flags = CLK_SET_RATE_PARENT, 1802 .ops = &clk_branch2_ops, 1803 }, 1804 }, 1805 }; 1806 1807 static struct clk_branch gcc_gp4_clk = { 1808 .halt_reg = 0xbe000, 1809 .halt_check = BRANCH_HALT, 1810 .clkr = { 1811 .enable_reg = 0xbe000, 1812 .enable_mask = BIT(0), 1813 .hw.init = &(struct clk_init_data){ 1814 .name = "gcc_gp4_clk", 1815 .parent_hws = (const struct clk_hw *[]){ 1816 &gcc_gp4_clk_src.clkr.hw 1817 }, 1818 .num_parents = 1, 1819 .flags = CLK_SET_RATE_PARENT, 1820 .ops = &clk_branch2_ops, 1821 }, 1822 }, 1823 }; 1824 1825 static struct clk_branch gcc_gp5_clk = { 1826 .halt_reg = 0xbf000, 1827 .halt_check = BRANCH_HALT, 1828 .clkr = { 1829 .enable_reg = 0xbf000, 1830 .enable_mask = BIT(0), 1831 .hw.init = &(struct clk_init_data){ 1832 .name = "gcc_gp5_clk", 1833 .parent_hws = (const struct clk_hw *[]){ 1834 &gcc_gp5_clk_src.clkr.hw 1835 }, 1836 .num_parents = 1, 1837 .flags = CLK_SET_RATE_PARENT, 1838 .ops = &clk_branch2_ops, 1839 }, 1840 }, 1841 }; 1842 1843 static struct clk_branch gcc_gpu_gpll0_clk_src = { 1844 .halt_check = BRANCH_HALT_DELAY, 1845 .clkr = { 1846 .enable_reg = 0x52004, 1847 .enable_mask = BIT(15), 1848 .hw.init = &(struct clk_init_data){ 1849 .name = "gcc_gpu_gpll0_clk_src", 1850 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 1851 .num_parents = 1, 1852 .flags = CLK_SET_RATE_PARENT, 1853 .ops = &clk_branch2_ops, 1854 }, 1855 }, 1856 }; 1857 1858 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 1859 .halt_check = BRANCH_HALT_DELAY, 1860 .clkr = { 1861 .enable_reg = 0x52004, 1862 .enable_mask = BIT(16), 1863 .hw.init = &(struct clk_init_data){ 1864 .name = "gcc_gpu_gpll0_div_clk_src", 1865 .parent_hws = (const struct clk_hw *[]){ 1866 &gpll0_out_even.clkr.hw 1867 }, 1868 .num_parents = 1, 1869 .flags = CLK_SET_RATE_PARENT, 1870 .ops = &clk_branch2_ops, 1871 }, 1872 }, 1873 }; 1874 1875 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1876 .halt_reg = 0x7100c, 1877 .halt_check = BRANCH_VOTED, 1878 .clkr = { 1879 .enable_reg = 0x7100c, 1880 .enable_mask = BIT(0), 1881 .hw.init = &(struct clk_init_data){ 1882 .name = "gcc_gpu_memnoc_gfx_clk", 1883 .ops = &clk_branch2_ops, 1884 }, 1885 }, 1886 }; 1887 1888 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1889 .halt_reg = 0x71018, 1890 .halt_check = BRANCH_HALT, 1891 .clkr = { 1892 .enable_reg = 0x71018, 1893 .enable_mask = BIT(0), 1894 .hw.init = &(struct clk_init_data){ 1895 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1896 .ops = &clk_branch2_ops, 1897 }, 1898 }, 1899 }; 1900 1901 static struct clk_branch gcc_npu_at_clk = { 1902 .halt_reg = 0x4d010, 1903 .halt_check = BRANCH_VOTED, 1904 .clkr = { 1905 .enable_reg = 0x4d010, 1906 .enable_mask = BIT(0), 1907 .hw.init = &(struct clk_init_data){ 1908 .name = "gcc_npu_at_clk", 1909 .ops = &clk_branch2_ops, 1910 }, 1911 }, 1912 }; 1913 1914 static struct clk_branch gcc_npu_axi_clk = { 1915 .halt_reg = 0x4d008, 1916 .halt_check = BRANCH_VOTED, 1917 .clkr = { 1918 .enable_reg = 0x4d008, 1919 .enable_mask = BIT(0), 1920 .hw.init = &(struct clk_init_data){ 1921 .name = "gcc_npu_axi_clk", 1922 .parent_hws = (const struct clk_hw *[]){ 1923 &gcc_npu_axi_clk_src.clkr.hw 1924 }, 1925 .num_parents = 1, 1926 .flags = CLK_SET_RATE_PARENT, 1927 .ops = &clk_branch2_ops, 1928 }, 1929 }, 1930 }; 1931 1932 static struct clk_branch gcc_npu_gpll0_clk_src = { 1933 .halt_check = BRANCH_HALT_DELAY, 1934 .clkr = { 1935 .enable_reg = 0x52004, 1936 .enable_mask = BIT(18), 1937 .hw.init = &(struct clk_init_data){ 1938 .name = "gcc_npu_gpll0_clk_src", 1939 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw }, 1940 .num_parents = 1, 1941 .flags = CLK_SET_RATE_PARENT, 1942 .ops = &clk_branch2_ops, 1943 }, 1944 }, 1945 }; 1946 1947 static struct clk_branch gcc_npu_gpll0_div_clk_src = { 1948 .halt_check = BRANCH_HALT_DELAY, 1949 .clkr = { 1950 .enable_reg = 0x52004, 1951 .enable_mask = BIT(19), 1952 .hw.init = &(struct clk_init_data){ 1953 .name = "gcc_npu_gpll0_div_clk_src", 1954 .parent_hws = (const struct clk_hw *[]){ 1955 &gpll0_out_even.clkr.hw 1956 }, 1957 .num_parents = 1, 1958 .flags = CLK_SET_RATE_PARENT, 1959 .ops = &clk_branch2_ops, 1960 }, 1961 }, 1962 }; 1963 1964 static struct clk_branch gcc_npu_trig_clk = { 1965 .halt_reg = 0x4d00c, 1966 .halt_check = BRANCH_VOTED, 1967 .clkr = { 1968 .enable_reg = 0x4d00c, 1969 .enable_mask = BIT(0), 1970 .hw.init = &(struct clk_init_data){ 1971 .name = "gcc_npu_trig_clk", 1972 .ops = &clk_branch2_ops, 1973 }, 1974 }, 1975 }; 1976 1977 static struct clk_branch gcc_pcie0_phy_refgen_clk = { 1978 .halt_reg = 0x6f02c, 1979 .halt_check = BRANCH_HALT, 1980 .clkr = { 1981 .enable_reg = 0x6f02c, 1982 .enable_mask = BIT(0), 1983 .hw.init = &(struct clk_init_data){ 1984 .name = "gcc_pcie0_phy_refgen_clk", 1985 .parent_hws = (const struct clk_hw *[]){ 1986 &gcc_pcie_phy_refgen_clk_src.clkr.hw 1987 }, 1988 .num_parents = 1, 1989 .flags = CLK_SET_RATE_PARENT, 1990 .ops = &clk_branch2_ops, 1991 }, 1992 }, 1993 }; 1994 1995 static struct clk_branch gcc_pcie1_phy_refgen_clk = { 1996 .halt_reg = 0x6f030, 1997 .halt_check = BRANCH_HALT, 1998 .clkr = { 1999 .enable_reg = 0x6f030, 2000 .enable_mask = BIT(0), 2001 .hw.init = &(struct clk_init_data){ 2002 .name = "gcc_pcie1_phy_refgen_clk", 2003 .parent_hws = (const struct clk_hw *[]){ 2004 &gcc_pcie_phy_refgen_clk_src.clkr.hw 2005 }, 2006 .num_parents = 1, 2007 .flags = CLK_SET_RATE_PARENT, 2008 .ops = &clk_branch2_ops, 2009 }, 2010 }, 2011 }; 2012 2013 static struct clk_branch gcc_pcie2_phy_refgen_clk = { 2014 .halt_reg = 0x6f034, 2015 .halt_check = BRANCH_HALT, 2016 .clkr = { 2017 .enable_reg = 0x6f034, 2018 .enable_mask = BIT(0), 2019 .hw.init = &(struct clk_init_data){ 2020 .name = "gcc_pcie2_phy_refgen_clk", 2021 .parent_hws = (const struct clk_hw *[]){ 2022 &gcc_pcie_phy_refgen_clk_src.clkr.hw 2023 }, 2024 .num_parents = 1, 2025 .flags = CLK_SET_RATE_PARENT, 2026 .ops = &clk_branch2_ops, 2027 }, 2028 }, 2029 }; 2030 2031 static struct clk_branch gcc_pcie3_phy_refgen_clk = { 2032 .halt_reg = 0x6f038, 2033 .halt_check = BRANCH_HALT, 2034 .clkr = { 2035 .enable_reg = 0x6f038, 2036 .enable_mask = BIT(0), 2037 .hw.init = &(struct clk_init_data){ 2038 .name = "gcc_pcie3_phy_refgen_clk", 2039 .parent_hws = (const struct clk_hw *[]){ 2040 &gcc_pcie_phy_refgen_clk_src.clkr.hw 2041 }, 2042 .num_parents = 1, 2043 .flags = CLK_SET_RATE_PARENT, 2044 .ops = &clk_branch2_ops, 2045 }, 2046 }, 2047 }; 2048 2049 static struct clk_branch gcc_pcie_0_aux_clk = { 2050 .halt_reg = 0x6b020, 2051 .halt_check = BRANCH_HALT_VOTED, 2052 .clkr = { 2053 .enable_reg = 0x5200c, 2054 .enable_mask = BIT(3), 2055 .hw.init = &(struct clk_init_data){ 2056 .name = "gcc_pcie_0_aux_clk", 2057 .parent_hws = (const struct clk_hw *[]){ 2058 &gcc_pcie_0_aux_clk_src.clkr.hw 2059 }, 2060 .num_parents = 1, 2061 .flags = CLK_SET_RATE_PARENT, 2062 .ops = &clk_branch2_ops, 2063 }, 2064 }, 2065 }; 2066 2067 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 2068 .halt_reg = 0x6b01c, 2069 .halt_check = BRANCH_HALT_VOTED, 2070 .hwcg_reg = 0x6b01c, 2071 .hwcg_bit = 1, 2072 .clkr = { 2073 .enable_reg = 0x5200c, 2074 .enable_mask = BIT(2), 2075 .hw.init = &(struct clk_init_data){ 2076 .name = "gcc_pcie_0_cfg_ahb_clk", 2077 .ops = &clk_branch2_ops, 2078 }, 2079 }, 2080 }; 2081 2082 static struct clk_branch gcc_pcie_0_clkref_clk = { 2083 .halt_reg = 0x8c00c, 2084 .halt_check = BRANCH_HALT, 2085 .clkr = { 2086 .enable_reg = 0x8c00c, 2087 .enable_mask = BIT(0), 2088 .hw.init = &(struct clk_init_data){ 2089 .name = "gcc_pcie_0_clkref_clk", 2090 .ops = &clk_branch2_ops, 2091 }, 2092 }, 2093 }; 2094 2095 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 2096 .halt_reg = 0x6b018, 2097 .halt_check = BRANCH_HALT_VOTED, 2098 .clkr = { 2099 .enable_reg = 0x5200c, 2100 .enable_mask = BIT(1), 2101 .hw.init = &(struct clk_init_data){ 2102 .name = "gcc_pcie_0_mstr_axi_clk", 2103 .ops = &clk_branch2_ops, 2104 }, 2105 }, 2106 }; 2107 2108 static struct clk_branch gcc_pcie_0_pipe_clk = { 2109 .halt_reg = 0x6b024, 2110 .halt_check = BRANCH_HALT_SKIP, 2111 .clkr = { 2112 .enable_reg = 0x5200c, 2113 .enable_mask = BIT(4), 2114 .hw.init = &(struct clk_init_data){ 2115 .name = "gcc_pcie_0_pipe_clk", 2116 .ops = &clk_branch2_ops, 2117 }, 2118 }, 2119 }; 2120 2121 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 2122 .halt_reg = 0x6b014, 2123 .halt_check = BRANCH_HALT_VOTED, 2124 .hwcg_reg = 0x6b014, 2125 .hwcg_bit = 1, 2126 .clkr = { 2127 .enable_reg = 0x5200c, 2128 .enable_mask = BIT(0), 2129 .hw.init = &(struct clk_init_data){ 2130 .name = "gcc_pcie_0_slv_axi_clk", 2131 .ops = &clk_branch2_ops, 2132 }, 2133 }, 2134 }; 2135 2136 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 2137 .halt_reg = 0x6b010, 2138 .halt_check = BRANCH_HALT_VOTED, 2139 .clkr = { 2140 .enable_reg = 0x5200c, 2141 .enable_mask = BIT(5), 2142 .hw.init = &(struct clk_init_data){ 2143 .name = "gcc_pcie_0_slv_q2a_axi_clk", 2144 .ops = &clk_branch2_ops, 2145 }, 2146 }, 2147 }; 2148 2149 static struct clk_branch gcc_pcie_1_aux_clk = { 2150 .halt_reg = 0x8d020, 2151 .halt_check = BRANCH_HALT_VOTED, 2152 .clkr = { 2153 .enable_reg = 0x52004, 2154 .enable_mask = BIT(29), 2155 .hw.init = &(struct clk_init_data){ 2156 .name = "gcc_pcie_1_aux_clk", 2157 .parent_hws = (const struct clk_hw *[]){ 2158 &gcc_pcie_1_aux_clk_src.clkr.hw 2159 }, 2160 .num_parents = 1, 2161 .flags = CLK_SET_RATE_PARENT, 2162 .ops = &clk_branch2_ops, 2163 }, 2164 }, 2165 }; 2166 2167 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 2168 .halt_reg = 0x8d01c, 2169 .halt_check = BRANCH_HALT_VOTED, 2170 .hwcg_reg = 0x8d01c, 2171 .hwcg_bit = 1, 2172 .clkr = { 2173 .enable_reg = 0x52004, 2174 .enable_mask = BIT(28), 2175 .hw.init = &(struct clk_init_data){ 2176 .name = "gcc_pcie_1_cfg_ahb_clk", 2177 .ops = &clk_branch2_ops, 2178 }, 2179 }, 2180 }; 2181 2182 static struct clk_branch gcc_pcie_1_clkref_clk = { 2183 .halt_reg = 0x8c02c, 2184 .halt_check = BRANCH_HALT, 2185 .clkr = { 2186 .enable_reg = 0x8c02c, 2187 .enable_mask = BIT(0), 2188 .hw.init = &(struct clk_init_data){ 2189 .name = "gcc_pcie_1_clkref_clk", 2190 .ops = &clk_branch2_ops, 2191 }, 2192 }, 2193 }; 2194 2195 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 2196 .halt_reg = 0x8d018, 2197 .halt_check = BRANCH_HALT_VOTED, 2198 .clkr = { 2199 .enable_reg = 0x52004, 2200 .enable_mask = BIT(27), 2201 .hw.init = &(struct clk_init_data){ 2202 .name = "gcc_pcie_1_mstr_axi_clk", 2203 .ops = &clk_branch2_ops, 2204 }, 2205 }, 2206 }; 2207 2208 static struct clk_branch gcc_pcie_1_pipe_clk = { 2209 .halt_reg = 0x8d024, 2210 .halt_check = BRANCH_HALT_SKIP, 2211 .clkr = { 2212 .enable_reg = 0x52004, 2213 .enable_mask = BIT(30), 2214 .hw.init = &(struct clk_init_data){ 2215 .name = "gcc_pcie_1_pipe_clk", 2216 .ops = &clk_branch2_ops, 2217 }, 2218 }, 2219 }; 2220 2221 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 2222 .halt_reg = 0x8d014, 2223 .halt_check = BRANCH_HALT_VOTED, 2224 .hwcg_reg = 0x8d014, 2225 .hwcg_bit = 1, 2226 .clkr = { 2227 .enable_reg = 0x52004, 2228 .enable_mask = BIT(26), 2229 .hw.init = &(struct clk_init_data){ 2230 .name = "gcc_pcie_1_slv_axi_clk", 2231 .ops = &clk_branch2_ops, 2232 }, 2233 }, 2234 }; 2235 2236 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = { 2237 .halt_reg = 0x8d010, 2238 .halt_check = BRANCH_HALT_VOTED, 2239 .clkr = { 2240 .enable_reg = 0x52004, 2241 .enable_mask = BIT(25), 2242 .hw.init = &(struct clk_init_data){ 2243 .name = "gcc_pcie_1_slv_q2a_axi_clk", 2244 .ops = &clk_branch2_ops, 2245 }, 2246 }, 2247 }; 2248 2249 static struct clk_branch gcc_pcie_2_aux_clk = { 2250 .halt_reg = 0x9d020, 2251 .halt_check = BRANCH_HALT_VOTED, 2252 .clkr = { 2253 .enable_reg = 0x52014, 2254 .enable_mask = BIT(14), 2255 .hw.init = &(struct clk_init_data){ 2256 .name = "gcc_pcie_2_aux_clk", 2257 .parent_hws = (const struct clk_hw *[]){ 2258 &gcc_pcie_2_aux_clk_src.clkr.hw 2259 }, 2260 .num_parents = 1, 2261 .flags = CLK_SET_RATE_PARENT, 2262 .ops = &clk_branch2_ops, 2263 }, 2264 }, 2265 }; 2266 2267 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = { 2268 .halt_reg = 0x9d01c, 2269 .halt_check = BRANCH_HALT_VOTED, 2270 .hwcg_reg = 0x9d01c, 2271 .hwcg_bit = 1, 2272 .clkr = { 2273 .enable_reg = 0x52014, 2274 .enable_mask = BIT(13), 2275 .hw.init = &(struct clk_init_data){ 2276 .name = "gcc_pcie_2_cfg_ahb_clk", 2277 .ops = &clk_branch2_ops, 2278 }, 2279 }, 2280 }; 2281 2282 static struct clk_branch gcc_pcie_2_clkref_clk = { 2283 .halt_reg = 0x8c014, 2284 .halt_check = BRANCH_HALT, 2285 .clkr = { 2286 .enable_reg = 0x8c014, 2287 .enable_mask = BIT(0), 2288 .hw.init = &(struct clk_init_data){ 2289 .name = "gcc_pcie_2_clkref_clk", 2290 .ops = &clk_branch2_ops, 2291 }, 2292 }, 2293 }; 2294 2295 static struct clk_branch gcc_pcie_2_mstr_axi_clk = { 2296 .halt_reg = 0x9d018, 2297 .halt_check = BRANCH_HALT_VOTED, 2298 .clkr = { 2299 .enable_reg = 0x52014, 2300 .enable_mask = BIT(12), 2301 .hw.init = &(struct clk_init_data){ 2302 .name = "gcc_pcie_2_mstr_axi_clk", 2303 .ops = &clk_branch2_ops, 2304 }, 2305 }, 2306 }; 2307 2308 static struct clk_branch gcc_pcie_2_pipe_clk = { 2309 .halt_reg = 0x9d024, 2310 .halt_check = BRANCH_HALT_SKIP, 2311 .clkr = { 2312 .enable_reg = 0x52014, 2313 .enable_mask = BIT(15), 2314 .hw.init = &(struct clk_init_data){ 2315 .name = "gcc_pcie_2_pipe_clk", 2316 .ops = &clk_branch2_ops, 2317 }, 2318 }, 2319 }; 2320 2321 static struct clk_branch gcc_pcie_2_slv_axi_clk = { 2322 .halt_reg = 0x9d014, 2323 .halt_check = BRANCH_HALT_VOTED, 2324 .hwcg_reg = 0x9d014, 2325 .hwcg_bit = 1, 2326 .clkr = { 2327 .enable_reg = 0x52014, 2328 .enable_mask = BIT(11), 2329 .hw.init = &(struct clk_init_data){ 2330 .name = "gcc_pcie_2_slv_axi_clk", 2331 .ops = &clk_branch2_ops, 2332 }, 2333 }, 2334 }; 2335 2336 static struct clk_branch gcc_pcie_2_slv_q2a_axi_clk = { 2337 .halt_reg = 0x9d010, 2338 .halt_check = BRANCH_HALT_VOTED, 2339 .clkr = { 2340 .enable_reg = 0x52014, 2341 .enable_mask = BIT(10), 2342 .hw.init = &(struct clk_init_data){ 2343 .name = "gcc_pcie_2_slv_q2a_axi_clk", 2344 .ops = &clk_branch2_ops, 2345 }, 2346 }, 2347 }; 2348 2349 static struct clk_branch gcc_pcie_3_aux_clk = { 2350 .halt_reg = 0xa3020, 2351 .halt_check = BRANCH_HALT_VOTED, 2352 .clkr = { 2353 .enable_reg = 0x52014, 2354 .enable_mask = BIT(20), 2355 .hw.init = &(struct clk_init_data){ 2356 .name = "gcc_pcie_3_aux_clk", 2357 .parent_hws = (const struct clk_hw *[]){ 2358 &gcc_pcie_3_aux_clk_src.clkr.hw 2359 }, 2360 .num_parents = 1, 2361 .flags = CLK_SET_RATE_PARENT, 2362 .ops = &clk_branch2_ops, 2363 }, 2364 }, 2365 }; 2366 2367 static struct clk_branch gcc_pcie_3_cfg_ahb_clk = { 2368 .halt_reg = 0xa301c, 2369 .halt_check = BRANCH_HALT_VOTED, 2370 .hwcg_reg = 0xa301c, 2371 .hwcg_bit = 1, 2372 .clkr = { 2373 .enable_reg = 0x52014, 2374 .enable_mask = BIT(19), 2375 .hw.init = &(struct clk_init_data){ 2376 .name = "gcc_pcie_3_cfg_ahb_clk", 2377 .ops = &clk_branch2_ops, 2378 }, 2379 }, 2380 }; 2381 2382 static struct clk_branch gcc_pcie_3_clkref_clk = { 2383 .halt_reg = 0x8c018, 2384 .halt_check = BRANCH_HALT, 2385 .clkr = { 2386 .enable_reg = 0x8c018, 2387 .enable_mask = BIT(0), 2388 .hw.init = &(struct clk_init_data){ 2389 .name = "gcc_pcie_3_clkref_clk", 2390 .ops = &clk_branch2_ops, 2391 }, 2392 }, 2393 }; 2394 2395 static struct clk_branch gcc_pcie_3_mstr_axi_clk = { 2396 .halt_reg = 0xa3018, 2397 .halt_check = BRANCH_HALT_VOTED, 2398 .clkr = { 2399 .enable_reg = 0x52014, 2400 .enable_mask = BIT(18), 2401 .hw.init = &(struct clk_init_data){ 2402 .name = "gcc_pcie_3_mstr_axi_clk", 2403 .ops = &clk_branch2_ops, 2404 }, 2405 }, 2406 }; 2407 2408 static struct clk_branch gcc_pcie_3_pipe_clk = { 2409 .halt_reg = 0xa3024, 2410 .halt_check = BRANCH_HALT_SKIP, 2411 .clkr = { 2412 .enable_reg = 0x52014, 2413 .enable_mask = BIT(21), 2414 .hw.init = &(struct clk_init_data){ 2415 .name = "gcc_pcie_3_pipe_clk", 2416 .ops = &clk_branch2_ops, 2417 }, 2418 }, 2419 }; 2420 2421 static struct clk_branch gcc_pcie_3_slv_axi_clk = { 2422 .halt_reg = 0xa3014, 2423 .halt_check = BRANCH_HALT_VOTED, 2424 .hwcg_reg = 0xa3014, 2425 .hwcg_bit = 1, 2426 .clkr = { 2427 .enable_reg = 0x52014, 2428 .enable_mask = BIT(17), 2429 .hw.init = &(struct clk_init_data){ 2430 .name = "gcc_pcie_3_slv_axi_clk", 2431 .ops = &clk_branch2_ops, 2432 }, 2433 }, 2434 }; 2435 2436 static struct clk_branch gcc_pcie_3_slv_q2a_axi_clk = { 2437 .halt_reg = 0xa3010, 2438 .halt_check = BRANCH_HALT_VOTED, 2439 .clkr = { 2440 .enable_reg = 0x52014, 2441 .enable_mask = BIT(16), 2442 .hw.init = &(struct clk_init_data){ 2443 .name = "gcc_pcie_3_slv_q2a_axi_clk", 2444 .ops = &clk_branch2_ops, 2445 }, 2446 }, 2447 }; 2448 2449 static struct clk_branch gcc_pcie_phy_aux_clk = { 2450 .halt_reg = 0x6f004, 2451 .halt_check = BRANCH_HALT, 2452 .clkr = { 2453 .enable_reg = 0x6f004, 2454 .enable_mask = BIT(0), 2455 .hw.init = &(struct clk_init_data){ 2456 .name = "gcc_pcie_phy_aux_clk", 2457 .parent_hws = (const struct clk_hw *[]){ 2458 &gcc_pcie_0_aux_clk_src.clkr.hw 2459 }, 2460 .num_parents = 1, 2461 .flags = CLK_SET_RATE_PARENT, 2462 .ops = &clk_branch2_ops, 2463 }, 2464 }, 2465 }; 2466 2467 static struct clk_branch gcc_pdm2_clk = { 2468 .halt_reg = 0x3300c, 2469 .halt_check = BRANCH_HALT, 2470 .clkr = { 2471 .enable_reg = 0x3300c, 2472 .enable_mask = BIT(0), 2473 .hw.init = &(struct clk_init_data){ 2474 .name = "gcc_pdm2_clk", 2475 .parent_hws = (const struct clk_hw *[]){ 2476 &gcc_pdm2_clk_src.clkr.hw 2477 }, 2478 .num_parents = 1, 2479 .flags = CLK_SET_RATE_PARENT, 2480 .ops = &clk_branch2_ops, 2481 }, 2482 }, 2483 }; 2484 2485 static struct clk_branch gcc_pdm_ahb_clk = { 2486 .halt_reg = 0x33004, 2487 .halt_check = BRANCH_HALT, 2488 .hwcg_reg = 0x33004, 2489 .hwcg_bit = 1, 2490 .clkr = { 2491 .enable_reg = 0x33004, 2492 .enable_mask = BIT(0), 2493 .hw.init = &(struct clk_init_data){ 2494 .name = "gcc_pdm_ahb_clk", 2495 .ops = &clk_branch2_ops, 2496 }, 2497 }, 2498 }; 2499 2500 static struct clk_branch gcc_pdm_xo4_clk = { 2501 .halt_reg = 0x33008, 2502 .halt_check = BRANCH_HALT, 2503 .clkr = { 2504 .enable_reg = 0x33008, 2505 .enable_mask = BIT(0), 2506 .hw.init = &(struct clk_init_data){ 2507 .name = "gcc_pdm_xo4_clk", 2508 .ops = &clk_branch2_ops, 2509 }, 2510 }, 2511 }; 2512 2513 static struct clk_branch gcc_prng_ahb_clk = { 2514 .halt_reg = 0x34004, 2515 .halt_check = BRANCH_HALT_VOTED, 2516 .clkr = { 2517 .enable_reg = 0x52004, 2518 .enable_mask = BIT(13), 2519 .hw.init = &(struct clk_init_data){ 2520 .name = "gcc_prng_ahb_clk", 2521 .ops = &clk_branch2_ops, 2522 }, 2523 }, 2524 }; 2525 2526 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2527 .halt_reg = 0xb018, 2528 .halt_check = BRANCH_HALT, 2529 .hwcg_reg = 0xb018, 2530 .hwcg_bit = 1, 2531 .clkr = { 2532 .enable_reg = 0xb018, 2533 .enable_mask = BIT(0), 2534 .hw.init = &(struct clk_init_data){ 2535 .name = "gcc_qmip_camera_nrt_ahb_clk", 2536 .ops = &clk_branch2_ops, 2537 }, 2538 }, 2539 }; 2540 2541 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2542 .halt_reg = 0xb01c, 2543 .halt_check = BRANCH_HALT, 2544 .hwcg_reg = 0xb01c, 2545 .hwcg_bit = 1, 2546 .clkr = { 2547 .enable_reg = 0xb01c, 2548 .enable_mask = BIT(0), 2549 .hw.init = &(struct clk_init_data){ 2550 .name = "gcc_qmip_camera_rt_ahb_clk", 2551 .ops = &clk_branch2_ops, 2552 }, 2553 }, 2554 }; 2555 2556 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2557 .halt_reg = 0xb020, 2558 .halt_check = BRANCH_HALT, 2559 .hwcg_reg = 0xb020, 2560 .hwcg_bit = 1, 2561 .clkr = { 2562 .enable_reg = 0xb020, 2563 .enable_mask = BIT(0), 2564 .hw.init = &(struct clk_init_data){ 2565 .name = "gcc_qmip_disp_ahb_clk", 2566 .ops = &clk_branch2_ops, 2567 }, 2568 }, 2569 }; 2570 2571 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = { 2572 .halt_reg = 0xb010, 2573 .halt_check = BRANCH_HALT, 2574 .hwcg_reg = 0xb010, 2575 .hwcg_bit = 1, 2576 .clkr = { 2577 .enable_reg = 0xb010, 2578 .enable_mask = BIT(0), 2579 .hw.init = &(struct clk_init_data){ 2580 .name = "gcc_qmip_video_cvp_ahb_clk", 2581 .ops = &clk_branch2_ops, 2582 }, 2583 }, 2584 }; 2585 2586 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2587 .halt_reg = 0xb014, 2588 .halt_check = BRANCH_HALT, 2589 .hwcg_reg = 0xb014, 2590 .hwcg_bit = 1, 2591 .clkr = { 2592 .enable_reg = 0xb014, 2593 .enable_mask = BIT(0), 2594 .hw.init = &(struct clk_init_data){ 2595 .name = "gcc_qmip_video_vcodec_ahb_clk", 2596 .ops = &clk_branch2_ops, 2597 }, 2598 }, 2599 }; 2600 2601 static struct clk_branch gcc_qspi_1_cnoc_periph_ahb_clk = { 2602 .halt_reg = 0x4a004, 2603 .halt_check = BRANCH_HALT, 2604 .clkr = { 2605 .enable_reg = 0x4a004, 2606 .enable_mask = BIT(0), 2607 .hw.init = &(struct clk_init_data){ 2608 .name = "gcc_qspi_1_cnoc_periph_ahb_clk", 2609 .ops = &clk_branch2_ops, 2610 }, 2611 }, 2612 }; 2613 2614 static struct clk_branch gcc_qspi_1_core_clk = { 2615 .halt_reg = 0x4a008, 2616 .halt_check = BRANCH_HALT, 2617 .clkr = { 2618 .enable_reg = 0x4a008, 2619 .enable_mask = BIT(0), 2620 .hw.init = &(struct clk_init_data){ 2621 .name = "gcc_qspi_1_core_clk", 2622 .parent_hws = (const struct clk_hw *[]){ 2623 &gcc_qspi_1_core_clk_src.clkr.hw 2624 }, 2625 .num_parents = 1, 2626 .flags = CLK_SET_RATE_PARENT, 2627 .ops = &clk_branch2_ops, 2628 }, 2629 }, 2630 }; 2631 2632 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = { 2633 .halt_reg = 0x4b000, 2634 .halt_check = BRANCH_HALT, 2635 .clkr = { 2636 .enable_reg = 0x4b000, 2637 .enable_mask = BIT(0), 2638 .hw.init = &(struct clk_init_data){ 2639 .name = "gcc_qspi_cnoc_periph_ahb_clk", 2640 .ops = &clk_branch2_ops, 2641 }, 2642 }, 2643 }; 2644 2645 static struct clk_branch gcc_qspi_core_clk = { 2646 .halt_reg = 0x4b004, 2647 .halt_check = BRANCH_HALT, 2648 .clkr = { 2649 .enable_reg = 0x4b004, 2650 .enable_mask = BIT(0), 2651 .hw.init = &(struct clk_init_data){ 2652 .name = "gcc_qspi_core_clk", 2653 .parent_hws = (const struct clk_hw *[]){ 2654 &gcc_qspi_core_clk_src.clkr.hw 2655 }, 2656 .num_parents = 1, 2657 .flags = CLK_SET_RATE_PARENT, 2658 .ops = &clk_branch2_ops, 2659 }, 2660 }, 2661 }; 2662 2663 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2664 .halt_reg = 0x17144, 2665 .halt_check = BRANCH_HALT_VOTED, 2666 .clkr = { 2667 .enable_reg = 0x5200c, 2668 .enable_mask = BIT(10), 2669 .hw.init = &(struct clk_init_data){ 2670 .name = "gcc_qupv3_wrap0_s0_clk", 2671 .parent_hws = (const struct clk_hw *[]){ 2672 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw 2673 }, 2674 .num_parents = 1, 2675 .flags = CLK_SET_RATE_PARENT, 2676 .ops = &clk_branch2_ops, 2677 }, 2678 }, 2679 }; 2680 2681 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2682 .halt_reg = 0x17274, 2683 .halt_check = BRANCH_HALT_VOTED, 2684 .clkr = { 2685 .enable_reg = 0x5200c, 2686 .enable_mask = BIT(11), 2687 .hw.init = &(struct clk_init_data){ 2688 .name = "gcc_qupv3_wrap0_s1_clk", 2689 .parent_hws = (const struct clk_hw *[]){ 2690 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw 2691 }, 2692 .num_parents = 1, 2693 .flags = CLK_SET_RATE_PARENT, 2694 .ops = &clk_branch2_ops, 2695 }, 2696 }, 2697 }; 2698 2699 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2700 .halt_reg = 0x173a4, 2701 .halt_check = BRANCH_HALT_VOTED, 2702 .clkr = { 2703 .enable_reg = 0x5200c, 2704 .enable_mask = BIT(12), 2705 .hw.init = &(struct clk_init_data){ 2706 .name = "gcc_qupv3_wrap0_s2_clk", 2707 .parent_hws = (const struct clk_hw *[]){ 2708 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw 2709 }, 2710 .num_parents = 1, 2711 .flags = CLK_SET_RATE_PARENT, 2712 .ops = &clk_branch2_ops, 2713 }, 2714 }, 2715 }; 2716 2717 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2718 .halt_reg = 0x174d4, 2719 .halt_check = BRANCH_HALT_VOTED, 2720 .clkr = { 2721 .enable_reg = 0x5200c, 2722 .enable_mask = BIT(13), 2723 .hw.init = &(struct clk_init_data){ 2724 .name = "gcc_qupv3_wrap0_s3_clk", 2725 .parent_hws = (const struct clk_hw *[]){ 2726 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw 2727 }, 2728 .num_parents = 1, 2729 .flags = CLK_SET_RATE_PARENT, 2730 .ops = &clk_branch2_ops, 2731 }, 2732 }, 2733 }; 2734 2735 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 2736 .halt_reg = 0x17604, 2737 .halt_check = BRANCH_HALT_VOTED, 2738 .clkr = { 2739 .enable_reg = 0x5200c, 2740 .enable_mask = BIT(14), 2741 .hw.init = &(struct clk_init_data){ 2742 .name = "gcc_qupv3_wrap0_s4_clk", 2743 .parent_hws = (const struct clk_hw *[]){ 2744 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw 2745 }, 2746 .num_parents = 1, 2747 .flags = CLK_SET_RATE_PARENT, 2748 .ops = &clk_branch2_ops, 2749 }, 2750 }, 2751 }; 2752 2753 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 2754 .halt_reg = 0x17734, 2755 .halt_check = BRANCH_HALT_VOTED, 2756 .clkr = { 2757 .enable_reg = 0x5200c, 2758 .enable_mask = BIT(15), 2759 .hw.init = &(struct clk_init_data){ 2760 .name = "gcc_qupv3_wrap0_s5_clk", 2761 .parent_hws = (const struct clk_hw *[]){ 2762 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw 2763 }, 2764 .num_parents = 1, 2765 .flags = CLK_SET_RATE_PARENT, 2766 .ops = &clk_branch2_ops, 2767 }, 2768 }, 2769 }; 2770 2771 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 2772 .halt_reg = 0x17864, 2773 .halt_check = BRANCH_HALT_VOTED, 2774 .clkr = { 2775 .enable_reg = 0x5200c, 2776 .enable_mask = BIT(16), 2777 .hw.init = &(struct clk_init_data){ 2778 .name = "gcc_qupv3_wrap0_s6_clk", 2779 .parent_hws = (const struct clk_hw *[]){ 2780 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw 2781 }, 2782 .num_parents = 1, 2783 .flags = CLK_SET_RATE_PARENT, 2784 .ops = &clk_branch2_ops, 2785 }, 2786 }, 2787 }; 2788 2789 static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 2790 .halt_reg = 0x17994, 2791 .halt_check = BRANCH_HALT_VOTED, 2792 .clkr = { 2793 .enable_reg = 0x5200c, 2794 .enable_mask = BIT(17), 2795 .hw.init = &(struct clk_init_data){ 2796 .name = "gcc_qupv3_wrap0_s7_clk", 2797 .parent_hws = (const struct clk_hw *[]){ 2798 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw 2799 }, 2800 .num_parents = 1, 2801 .flags = CLK_SET_RATE_PARENT, 2802 .ops = &clk_branch2_ops, 2803 }, 2804 }, 2805 }; 2806 2807 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 2808 .halt_reg = 0x18144, 2809 .halt_check = BRANCH_HALT_VOTED, 2810 .clkr = { 2811 .enable_reg = 0x5200c, 2812 .enable_mask = BIT(22), 2813 .hw.init = &(struct clk_init_data){ 2814 .name = "gcc_qupv3_wrap1_s0_clk", 2815 .parent_hws = (const struct clk_hw *[]){ 2816 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw 2817 }, 2818 .num_parents = 1, 2819 .flags = CLK_SET_RATE_PARENT, 2820 .ops = &clk_branch2_ops, 2821 }, 2822 }, 2823 }; 2824 2825 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 2826 .halt_reg = 0x18274, 2827 .halt_check = BRANCH_HALT_VOTED, 2828 .clkr = { 2829 .enable_reg = 0x5200c, 2830 .enable_mask = BIT(23), 2831 .hw.init = &(struct clk_init_data){ 2832 .name = "gcc_qupv3_wrap1_s1_clk", 2833 .parent_hws = (const struct clk_hw *[]){ 2834 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw 2835 }, 2836 .num_parents = 1, 2837 .flags = CLK_SET_RATE_PARENT, 2838 .ops = &clk_branch2_ops, 2839 }, 2840 }, 2841 }; 2842 2843 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 2844 .halt_reg = 0x183a4, 2845 .halt_check = BRANCH_HALT_VOTED, 2846 .clkr = { 2847 .enable_reg = 0x5200c, 2848 .enable_mask = BIT(24), 2849 .hw.init = &(struct clk_init_data){ 2850 .name = "gcc_qupv3_wrap1_s2_clk", 2851 .parent_hws = (const struct clk_hw *[]){ 2852 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw 2853 }, 2854 .num_parents = 1, 2855 .flags = CLK_SET_RATE_PARENT, 2856 .ops = &clk_branch2_ops, 2857 }, 2858 }, 2859 }; 2860 2861 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 2862 .halt_reg = 0x184d4, 2863 .halt_check = BRANCH_HALT_VOTED, 2864 .clkr = { 2865 .enable_reg = 0x5200c, 2866 .enable_mask = BIT(25), 2867 .hw.init = &(struct clk_init_data){ 2868 .name = "gcc_qupv3_wrap1_s3_clk", 2869 .parent_hws = (const struct clk_hw *[]){ 2870 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw 2871 }, 2872 .num_parents = 1, 2873 .flags = CLK_SET_RATE_PARENT, 2874 .ops = &clk_branch2_ops, 2875 }, 2876 }, 2877 }; 2878 2879 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 2880 .halt_reg = 0x18604, 2881 .halt_check = BRANCH_HALT_VOTED, 2882 .clkr = { 2883 .enable_reg = 0x5200c, 2884 .enable_mask = BIT(26), 2885 .hw.init = &(struct clk_init_data){ 2886 .name = "gcc_qupv3_wrap1_s4_clk", 2887 .parent_hws = (const struct clk_hw *[]){ 2888 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw 2889 }, 2890 .num_parents = 1, 2891 .flags = CLK_SET_RATE_PARENT, 2892 .ops = &clk_branch2_ops, 2893 }, 2894 }, 2895 }; 2896 2897 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 2898 .halt_reg = 0x18734, 2899 .halt_check = BRANCH_HALT_VOTED, 2900 .clkr = { 2901 .enable_reg = 0x5200c, 2902 .enable_mask = BIT(27), 2903 .hw.init = &(struct clk_init_data){ 2904 .name = "gcc_qupv3_wrap1_s5_clk", 2905 .parent_hws = (const struct clk_hw *[]){ 2906 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw 2907 }, 2908 .num_parents = 1, 2909 .flags = CLK_SET_RATE_PARENT, 2910 .ops = &clk_branch2_ops, 2911 }, 2912 }, 2913 }; 2914 2915 static struct clk_branch gcc_qupv3_wrap2_s0_clk = { 2916 .halt_reg = 0x1e144, 2917 .halt_check = BRANCH_HALT_VOTED, 2918 .clkr = { 2919 .enable_reg = 0x52014, 2920 .enable_mask = BIT(4), 2921 .hw.init = &(struct clk_init_data){ 2922 .name = "gcc_qupv3_wrap2_s0_clk", 2923 .parent_hws = (const struct clk_hw *[]){ 2924 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw 2925 }, 2926 .num_parents = 1, 2927 .flags = CLK_SET_RATE_PARENT, 2928 .ops = &clk_branch2_ops, 2929 }, 2930 }, 2931 }; 2932 2933 static struct clk_branch gcc_qupv3_wrap2_s1_clk = { 2934 .halt_reg = 0x1e274, 2935 .halt_check = BRANCH_HALT_VOTED, 2936 .clkr = { 2937 .enable_reg = 0x52014, 2938 .enable_mask = BIT(5), 2939 .hw.init = &(struct clk_init_data){ 2940 .name = "gcc_qupv3_wrap2_s1_clk", 2941 .parent_hws = (const struct clk_hw *[]){ 2942 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw 2943 }, 2944 .num_parents = 1, 2945 .flags = CLK_SET_RATE_PARENT, 2946 .ops = &clk_branch2_ops, 2947 }, 2948 }, 2949 }; 2950 2951 static struct clk_branch gcc_qupv3_wrap2_s2_clk = { 2952 .halt_reg = 0x1e3a4, 2953 .halt_check = BRANCH_HALT_VOTED, 2954 .clkr = { 2955 .enable_reg = 0x52014, 2956 .enable_mask = BIT(6), 2957 .hw.init = &(struct clk_init_data){ 2958 .name = "gcc_qupv3_wrap2_s2_clk", 2959 .parent_hws = (const struct clk_hw *[]){ 2960 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw 2961 }, 2962 .num_parents = 1, 2963 .flags = CLK_SET_RATE_PARENT, 2964 .ops = &clk_branch2_ops, 2965 }, 2966 }, 2967 }; 2968 2969 static struct clk_branch gcc_qupv3_wrap2_s3_clk = { 2970 .halt_reg = 0x1e4d4, 2971 .halt_check = BRANCH_HALT_VOTED, 2972 .clkr = { 2973 .enable_reg = 0x52014, 2974 .enable_mask = BIT(7), 2975 .hw.init = &(struct clk_init_data){ 2976 .name = "gcc_qupv3_wrap2_s3_clk", 2977 .parent_hws = (const struct clk_hw *[]){ 2978 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw 2979 }, 2980 .num_parents = 1, 2981 .flags = CLK_SET_RATE_PARENT, 2982 .ops = &clk_branch2_ops, 2983 }, 2984 }, 2985 }; 2986 2987 static struct clk_branch gcc_qupv3_wrap2_s4_clk = { 2988 .halt_reg = 0x1e604, 2989 .halt_check = BRANCH_HALT_VOTED, 2990 .clkr = { 2991 .enable_reg = 0x52014, 2992 .enable_mask = BIT(8), 2993 .hw.init = &(struct clk_init_data){ 2994 .name = "gcc_qupv3_wrap2_s4_clk", 2995 .parent_hws = (const struct clk_hw *[]){ 2996 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw 2997 }, 2998 .num_parents = 1, 2999 .flags = CLK_SET_RATE_PARENT, 3000 .ops = &clk_branch2_ops, 3001 }, 3002 }, 3003 }; 3004 3005 static struct clk_branch gcc_qupv3_wrap2_s5_clk = { 3006 .halt_reg = 0x1e734, 3007 .halt_check = BRANCH_HALT_VOTED, 3008 .clkr = { 3009 .enable_reg = 0x52014, 3010 .enable_mask = BIT(9), 3011 .hw.init = &(struct clk_init_data){ 3012 .name = "gcc_qupv3_wrap2_s5_clk", 3013 .parent_hws = (const struct clk_hw *[]){ 3014 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw 3015 }, 3016 .num_parents = 1, 3017 .flags = CLK_SET_RATE_PARENT, 3018 .ops = &clk_branch2_ops, 3019 }, 3020 }, 3021 }; 3022 3023 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 3024 .halt_reg = 0x17004, 3025 .halt_check = BRANCH_HALT_VOTED, 3026 .clkr = { 3027 .enable_reg = 0x5200c, 3028 .enable_mask = BIT(6), 3029 .hw.init = &(struct clk_init_data){ 3030 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 3031 .ops = &clk_branch2_ops, 3032 }, 3033 }, 3034 }; 3035 3036 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 3037 .halt_reg = 0x17008, 3038 .halt_check = BRANCH_HALT_VOTED, 3039 .hwcg_reg = 0x17008, 3040 .hwcg_bit = 1, 3041 .clkr = { 3042 .enable_reg = 0x5200c, 3043 .enable_mask = BIT(7), 3044 .hw.init = &(struct clk_init_data){ 3045 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 3046 .ops = &clk_branch2_ops, 3047 }, 3048 }, 3049 }; 3050 3051 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 3052 .halt_reg = 0x18004, 3053 .halt_check = BRANCH_HALT_VOTED, 3054 .clkr = { 3055 .enable_reg = 0x5200c, 3056 .enable_mask = BIT(20), 3057 .hw.init = &(struct clk_init_data){ 3058 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 3059 .ops = &clk_branch2_ops, 3060 }, 3061 }, 3062 }; 3063 3064 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 3065 .halt_reg = 0x18008, 3066 .halt_check = BRANCH_HALT_VOTED, 3067 .hwcg_reg = 0x18008, 3068 .hwcg_bit = 1, 3069 .clkr = { 3070 .enable_reg = 0x5200c, 3071 .enable_mask = BIT(21), 3072 .hw.init = &(struct clk_init_data){ 3073 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 3074 .ops = &clk_branch2_ops, 3075 }, 3076 }, 3077 }; 3078 3079 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = { 3080 .halt_reg = 0x1e004, 3081 .halt_check = BRANCH_HALT_VOTED, 3082 .clkr = { 3083 .enable_reg = 0x52014, 3084 .enable_mask = BIT(2), 3085 .hw.init = &(struct clk_init_data){ 3086 .name = "gcc_qupv3_wrap_2_m_ahb_clk", 3087 .ops = &clk_branch2_ops, 3088 }, 3089 }, 3090 }; 3091 3092 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = { 3093 .halt_reg = 0x1e008, 3094 .halt_check = BRANCH_HALT_VOTED, 3095 .hwcg_reg = 0x1e008, 3096 .hwcg_bit = 1, 3097 .clkr = { 3098 .enable_reg = 0x52014, 3099 .enable_mask = BIT(1), 3100 .hw.init = &(struct clk_init_data){ 3101 .name = "gcc_qupv3_wrap_2_s_ahb_clk", 3102 .ops = &clk_branch2_ops, 3103 }, 3104 }, 3105 }; 3106 3107 static struct clk_branch gcc_sdcc2_ahb_clk = { 3108 .halt_reg = 0x14008, 3109 .halt_check = BRANCH_HALT, 3110 .clkr = { 3111 .enable_reg = 0x14008, 3112 .enable_mask = BIT(0), 3113 .hw.init = &(struct clk_init_data){ 3114 .name = "gcc_sdcc2_ahb_clk", 3115 .ops = &clk_branch2_ops, 3116 }, 3117 }, 3118 }; 3119 3120 static struct clk_branch gcc_sdcc2_apps_clk = { 3121 .halt_reg = 0x14004, 3122 .halt_check = BRANCH_HALT, 3123 .clkr = { 3124 .enable_reg = 0x14004, 3125 .enable_mask = BIT(0), 3126 .hw.init = &(struct clk_init_data){ 3127 .name = "gcc_sdcc2_apps_clk", 3128 .parent_hws = (const struct clk_hw *[]){ 3129 &gcc_sdcc2_apps_clk_src.clkr.hw 3130 }, 3131 .num_parents = 1, 3132 .flags = CLK_SET_RATE_PARENT, 3133 .ops = &clk_branch2_ops, 3134 }, 3135 }, 3136 }; 3137 3138 static struct clk_branch gcc_sdcc4_ahb_clk = { 3139 .halt_reg = 0x16008, 3140 .halt_check = BRANCH_HALT, 3141 .clkr = { 3142 .enable_reg = 0x16008, 3143 .enable_mask = BIT(0), 3144 .hw.init = &(struct clk_init_data){ 3145 .name = "gcc_sdcc4_ahb_clk", 3146 .ops = &clk_branch2_ops, 3147 }, 3148 }, 3149 }; 3150 3151 static struct clk_branch gcc_sdcc4_apps_clk = { 3152 .halt_reg = 0x16004, 3153 .halt_check = BRANCH_HALT, 3154 .clkr = { 3155 .enable_reg = 0x16004, 3156 .enable_mask = BIT(0), 3157 .hw.init = &(struct clk_init_data){ 3158 .name = "gcc_sdcc4_apps_clk", 3159 .parent_hws = (const struct clk_hw *[]){ 3160 &gcc_sdcc4_apps_clk_src.clkr.hw 3161 }, 3162 .num_parents = 1, 3163 .flags = CLK_SET_RATE_PARENT, 3164 .ops = &clk_branch2_ops, 3165 }, 3166 }, 3167 }; 3168 3169 static struct clk_branch gcc_tsif_ahb_clk = { 3170 .halt_reg = 0x36004, 3171 .halt_check = BRANCH_HALT, 3172 .clkr = { 3173 .enable_reg = 0x36004, 3174 .enable_mask = BIT(0), 3175 .hw.init = &(struct clk_init_data){ 3176 .name = "gcc_tsif_ahb_clk", 3177 .ops = &clk_branch2_ops, 3178 }, 3179 }, 3180 }; 3181 3182 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 3183 .halt_reg = 0x3600c, 3184 .halt_check = BRANCH_HALT, 3185 .clkr = { 3186 .enable_reg = 0x3600c, 3187 .enable_mask = BIT(0), 3188 .hw.init = &(struct clk_init_data){ 3189 .name = "gcc_tsif_inactivity_timers_clk", 3190 .ops = &clk_branch2_ops, 3191 }, 3192 }, 3193 }; 3194 3195 static struct clk_branch gcc_tsif_ref_clk = { 3196 .halt_reg = 0x36008, 3197 .halt_check = BRANCH_HALT, 3198 .clkr = { 3199 .enable_reg = 0x36008, 3200 .enable_mask = BIT(0), 3201 .hw.init = &(struct clk_init_data){ 3202 .name = "gcc_tsif_ref_clk", 3203 .parent_hws = (const struct clk_hw *[]){ 3204 &gcc_tsif_ref_clk_src.clkr.hw 3205 }, 3206 .num_parents = 1, 3207 .flags = CLK_SET_RATE_PARENT, 3208 .ops = &clk_branch2_ops, 3209 }, 3210 }, 3211 }; 3212 3213 static struct clk_branch gcc_ufs_card_2_ahb_clk = { 3214 .halt_reg = 0xa2014, 3215 .halt_check = BRANCH_HALT, 3216 .hwcg_reg = 0xa2014, 3217 .hwcg_bit = 1, 3218 .clkr = { 3219 .enable_reg = 0xa2014, 3220 .enable_mask = BIT(0), 3221 .hw.init = &(struct clk_init_data){ 3222 .name = "gcc_ufs_card_2_ahb_clk", 3223 .ops = &clk_branch2_ops, 3224 }, 3225 }, 3226 }; 3227 3228 static struct clk_branch gcc_ufs_card_2_axi_clk = { 3229 .halt_reg = 0xa2010, 3230 .halt_check = BRANCH_HALT, 3231 .hwcg_reg = 0xa2010, 3232 .hwcg_bit = 1, 3233 .clkr = { 3234 .enable_reg = 0xa2010, 3235 .enable_mask = BIT(0), 3236 .hw.init = &(struct clk_init_data){ 3237 .name = "gcc_ufs_card_2_axi_clk", 3238 .parent_hws = (const struct clk_hw *[]){ 3239 &gcc_ufs_card_2_axi_clk_src.clkr.hw 3240 }, 3241 .num_parents = 1, 3242 .flags = CLK_SET_RATE_PARENT, 3243 .ops = &clk_branch2_ops, 3244 }, 3245 }, 3246 }; 3247 3248 static struct clk_branch gcc_ufs_card_2_ice_core_clk = { 3249 .halt_reg = 0xa205c, 3250 .halt_check = BRANCH_HALT, 3251 .hwcg_reg = 0xa205c, 3252 .hwcg_bit = 1, 3253 .clkr = { 3254 .enable_reg = 0xa205c, 3255 .enable_mask = BIT(0), 3256 .hw.init = &(struct clk_init_data){ 3257 .name = "gcc_ufs_card_2_ice_core_clk", 3258 .parent_hws = (const struct clk_hw *[]){ 3259 &gcc_ufs_card_2_ice_core_clk_src.clkr.hw 3260 }, 3261 .num_parents = 1, 3262 .flags = CLK_SET_RATE_PARENT, 3263 .ops = &clk_branch2_ops, 3264 }, 3265 }, 3266 }; 3267 3268 static struct clk_branch gcc_ufs_card_2_phy_aux_clk = { 3269 .halt_reg = 0xa2090, 3270 .halt_check = BRANCH_HALT, 3271 .hwcg_reg = 0xa2090, 3272 .hwcg_bit = 1, 3273 .clkr = { 3274 .enable_reg = 0xa2090, 3275 .enable_mask = BIT(0), 3276 .hw.init = &(struct clk_init_data){ 3277 .name = "gcc_ufs_card_2_phy_aux_clk", 3278 .parent_hws = (const struct clk_hw *[]){ 3279 &gcc_ufs_card_2_phy_aux_clk_src.clkr.hw 3280 }, 3281 .num_parents = 1, 3282 .flags = CLK_SET_RATE_PARENT, 3283 .ops = &clk_branch2_ops, 3284 }, 3285 }, 3286 }; 3287 3288 static struct clk_branch gcc_ufs_card_2_rx_symbol_0_clk = { 3289 .halt_reg = 0xa201c, 3290 .halt_check = BRANCH_HALT, 3291 .clkr = { 3292 .enable_reg = 0xa201c, 3293 .enable_mask = BIT(0), 3294 .hw.init = &(struct clk_init_data){ 3295 .name = "gcc_ufs_card_2_rx_symbol_0_clk", 3296 .ops = &clk_branch2_ops, 3297 }, 3298 }, 3299 }; 3300 3301 static struct clk_branch gcc_ufs_card_2_rx_symbol_1_clk = { 3302 .halt_reg = 0xa20ac, 3303 .halt_check = BRANCH_HALT, 3304 .clkr = { 3305 .enable_reg = 0xa20ac, 3306 .enable_mask = BIT(0), 3307 .hw.init = &(struct clk_init_data){ 3308 .name = "gcc_ufs_card_2_rx_symbol_1_clk", 3309 .ops = &clk_branch2_ops, 3310 }, 3311 }, 3312 }; 3313 3314 static struct clk_branch gcc_ufs_card_2_tx_symbol_0_clk = { 3315 .halt_reg = 0xa2018, 3316 .halt_check = BRANCH_HALT, 3317 .clkr = { 3318 .enable_reg = 0xa2018, 3319 .enable_mask = BIT(0), 3320 .hw.init = &(struct clk_init_data){ 3321 .name = "gcc_ufs_card_2_tx_symbol_0_clk", 3322 .ops = &clk_branch2_ops, 3323 }, 3324 }, 3325 }; 3326 3327 static struct clk_branch gcc_ufs_card_2_unipro_core_clk = { 3328 .halt_reg = 0xa2058, 3329 .halt_check = BRANCH_HALT, 3330 .hwcg_reg = 0xa2058, 3331 .hwcg_bit = 1, 3332 .clkr = { 3333 .enable_reg = 0xa2058, 3334 .enable_mask = BIT(0), 3335 .hw.init = &(struct clk_init_data){ 3336 .name = "gcc_ufs_card_2_unipro_core_clk", 3337 .parent_hws = (const struct clk_hw *[]){ 3338 &gcc_ufs_card_2_unipro_core_clk_src.clkr.hw 3339 }, 3340 .num_parents = 1, 3341 .flags = CLK_SET_RATE_PARENT, 3342 .ops = &clk_branch2_ops, 3343 }, 3344 }, 3345 }; 3346 3347 static struct clk_branch gcc_ufs_card_clkref_en = { 3348 .halt_reg = 0x8c004, 3349 .halt_check = BRANCH_HALT, 3350 .clkr = { 3351 .enable_reg = 0x8c004, 3352 .enable_mask = BIT(0), 3353 .hw.init = &(const struct clk_init_data) { 3354 .name = "gcc_ufs_card_clkref_en", 3355 .ops = &clk_branch2_ops, 3356 }, 3357 }, 3358 }; 3359 3360 static struct clk_branch gcc_ufs_card_ahb_clk = { 3361 .halt_reg = 0x75014, 3362 .halt_check = BRANCH_HALT, 3363 .hwcg_reg = 0x75014, 3364 .hwcg_bit = 1, 3365 .clkr = { 3366 .enable_reg = 0x75014, 3367 .enable_mask = BIT(0), 3368 .hw.init = &(struct clk_init_data){ 3369 .name = "gcc_ufs_card_ahb_clk", 3370 .ops = &clk_branch2_ops, 3371 }, 3372 }, 3373 }; 3374 3375 static struct clk_branch gcc_ufs_card_axi_clk = { 3376 .halt_reg = 0x75010, 3377 .halt_check = BRANCH_HALT, 3378 .hwcg_reg = 0x75010, 3379 .hwcg_bit = 1, 3380 .clkr = { 3381 .enable_reg = 0x75010, 3382 .enable_mask = BIT(0), 3383 .hw.init = &(struct clk_init_data){ 3384 .name = "gcc_ufs_card_axi_clk", 3385 .parent_hws = (const struct clk_hw *[]){ 3386 &gcc_ufs_card_axi_clk_src.clkr.hw 3387 }, 3388 .num_parents = 1, 3389 .flags = CLK_SET_RATE_PARENT, 3390 .ops = &clk_branch2_ops, 3391 }, 3392 }, 3393 }; 3394 3395 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = { 3396 .halt_reg = 0x75010, 3397 .halt_check = BRANCH_HALT, 3398 .hwcg_reg = 0x75010, 3399 .hwcg_bit = 1, 3400 .clkr = { 3401 .enable_reg = 0x75010, 3402 .enable_mask = BIT(1), 3403 .hw.init = &(struct clk_init_data){ 3404 .name = "gcc_ufs_card_axi_hw_ctl_clk", 3405 .parent_hws = (const struct clk_hw *[]){ 3406 &gcc_ufs_card_axi_clk.clkr.hw 3407 }, 3408 .num_parents = 1, 3409 .flags = CLK_SET_RATE_PARENT, 3410 .ops = &clk_branch_simple_ops, 3411 }, 3412 }, 3413 }; 3414 3415 static struct clk_branch gcc_ufs_card_ice_core_clk = { 3416 .halt_reg = 0x7505c, 3417 .halt_check = BRANCH_HALT, 3418 .hwcg_reg = 0x7505c, 3419 .hwcg_bit = 1, 3420 .clkr = { 3421 .enable_reg = 0x7505c, 3422 .enable_mask = BIT(0), 3423 .hw.init = &(struct clk_init_data){ 3424 .name = "gcc_ufs_card_ice_core_clk", 3425 .parent_hws = (const struct clk_hw *[]){ 3426 &gcc_ufs_card_ice_core_clk_src.clkr.hw 3427 }, 3428 .num_parents = 1, 3429 .flags = CLK_SET_RATE_PARENT, 3430 .ops = &clk_branch2_ops, 3431 }, 3432 }, 3433 }; 3434 3435 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = { 3436 .halt_reg = 0x7505c, 3437 .halt_check = BRANCH_HALT, 3438 .hwcg_reg = 0x7505c, 3439 .hwcg_bit = 1, 3440 .clkr = { 3441 .enable_reg = 0x7505c, 3442 .enable_mask = BIT(1), 3443 .hw.init = &(struct clk_init_data){ 3444 .name = "gcc_ufs_card_ice_core_hw_ctl_clk", 3445 .parent_hws = (const struct clk_hw *[]){ 3446 &gcc_ufs_card_ice_core_clk.clkr.hw 3447 }, 3448 .num_parents = 1, 3449 .flags = CLK_SET_RATE_PARENT, 3450 .ops = &clk_branch_simple_ops, 3451 }, 3452 }, 3453 }; 3454 3455 static struct clk_branch gcc_ufs_card_phy_aux_clk = { 3456 .halt_reg = 0x75090, 3457 .halt_check = BRANCH_HALT, 3458 .hwcg_reg = 0x75090, 3459 .hwcg_bit = 1, 3460 .clkr = { 3461 .enable_reg = 0x75090, 3462 .enable_mask = BIT(0), 3463 .hw.init = &(struct clk_init_data){ 3464 .name = "gcc_ufs_card_phy_aux_clk", 3465 .parent_hws = (const struct clk_hw *[]){ 3466 &gcc_ufs_card_phy_aux_clk_src.clkr.hw 3467 }, 3468 .num_parents = 1, 3469 .flags = CLK_SET_RATE_PARENT, 3470 .ops = &clk_branch2_ops, 3471 }, 3472 }, 3473 }; 3474 3475 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = { 3476 .halt_reg = 0x75090, 3477 .halt_check = BRANCH_HALT, 3478 .hwcg_reg = 0x75090, 3479 .hwcg_bit = 1, 3480 .clkr = { 3481 .enable_reg = 0x75090, 3482 .enable_mask = BIT(1), 3483 .hw.init = &(struct clk_init_data){ 3484 .name = "gcc_ufs_card_phy_aux_hw_ctl_clk", 3485 .parent_hws = (const struct clk_hw *[]){ 3486 &gcc_ufs_card_phy_aux_clk.clkr.hw 3487 }, 3488 .num_parents = 1, 3489 .flags = CLK_SET_RATE_PARENT, 3490 .ops = &clk_branch_simple_ops, 3491 }, 3492 }, 3493 }; 3494 3495 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = { 3496 .halt_reg = 0x7501c, 3497 .halt_check = BRANCH_HALT_DELAY, 3498 .clkr = { 3499 .enable_reg = 0x7501c, 3500 .enable_mask = BIT(0), 3501 .hw.init = &(struct clk_init_data){ 3502 .name = "gcc_ufs_card_rx_symbol_0_clk", 3503 .ops = &clk_branch2_ops, 3504 }, 3505 }, 3506 }; 3507 3508 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = { 3509 .halt_reg = 0x750ac, 3510 .halt_check = BRANCH_HALT_DELAY, 3511 .clkr = { 3512 .enable_reg = 0x750ac, 3513 .enable_mask = BIT(0), 3514 .hw.init = &(struct clk_init_data){ 3515 .name = "gcc_ufs_card_rx_symbol_1_clk", 3516 .ops = &clk_branch2_ops, 3517 }, 3518 }, 3519 }; 3520 3521 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = { 3522 .halt_reg = 0x75018, 3523 .halt_check = BRANCH_HALT_DELAY, 3524 .clkr = { 3525 .enable_reg = 0x75018, 3526 .enable_mask = BIT(0), 3527 .hw.init = &(struct clk_init_data){ 3528 .name = "gcc_ufs_card_tx_symbol_0_clk", 3529 .ops = &clk_branch2_ops, 3530 }, 3531 }, 3532 }; 3533 3534 static struct clk_branch gcc_ufs_card_unipro_core_clk = { 3535 .halt_reg = 0x75058, 3536 .halt_check = BRANCH_HALT, 3537 .hwcg_reg = 0x75058, 3538 .hwcg_bit = 1, 3539 .clkr = { 3540 .enable_reg = 0x75058, 3541 .enable_mask = BIT(0), 3542 .hw.init = &(struct clk_init_data){ 3543 .name = "gcc_ufs_card_unipro_core_clk", 3544 .parent_hws = (const struct clk_hw *[]){ 3545 &gcc_ufs_card_unipro_core_clk_src.clkr.hw 3546 }, 3547 .num_parents = 1, 3548 .flags = CLK_SET_RATE_PARENT, 3549 .ops = &clk_branch2_ops, 3550 }, 3551 }, 3552 }; 3553 3554 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = { 3555 .halt_reg = 0x75058, 3556 .halt_check = BRANCH_HALT, 3557 .hwcg_reg = 0x75058, 3558 .hwcg_bit = 1, 3559 .clkr = { 3560 .enable_reg = 0x75058, 3561 .enable_mask = BIT(1), 3562 .hw.init = &(struct clk_init_data){ 3563 .name = "gcc_ufs_card_unipro_core_hw_ctl_clk", 3564 .parent_hws = (const struct clk_hw *[]){ 3565 &gcc_ufs_card_unipro_core_clk.clkr.hw 3566 }, 3567 .num_parents = 1, 3568 .flags = CLK_SET_RATE_PARENT, 3569 .ops = &clk_branch_simple_ops, 3570 }, 3571 }, 3572 }; 3573 3574 static struct clk_branch gcc_ufs_mem_clkref_en = { 3575 .halt_reg = 0x8c000, 3576 .halt_check = BRANCH_HALT, 3577 .clkr = { 3578 .enable_reg = 0x8c000, 3579 .enable_mask = BIT(0), 3580 .hw.init = &(const struct clk_init_data) { 3581 .name = "gcc_ufs_mem_clkref_en", 3582 .ops = &clk_branch2_ops, 3583 }, 3584 }, 3585 }; 3586 3587 static struct clk_branch gcc_ufs_phy_ahb_clk = { 3588 .halt_reg = 0x77014, 3589 .halt_check = BRANCH_HALT, 3590 .hwcg_reg = 0x77014, 3591 .hwcg_bit = 1, 3592 .clkr = { 3593 .enable_reg = 0x77014, 3594 .enable_mask = BIT(0), 3595 .hw.init = &(struct clk_init_data){ 3596 .name = "gcc_ufs_phy_ahb_clk", 3597 .ops = &clk_branch2_ops, 3598 }, 3599 }, 3600 }; 3601 3602 static struct clk_branch gcc_ufs_phy_axi_clk = { 3603 .halt_reg = 0x77010, 3604 .halt_check = BRANCH_HALT, 3605 .hwcg_reg = 0x77010, 3606 .hwcg_bit = 1, 3607 .clkr = { 3608 .enable_reg = 0x77010, 3609 .enable_mask = BIT(0), 3610 .hw.init = &(struct clk_init_data){ 3611 .name = "gcc_ufs_phy_axi_clk", 3612 .parent_hws = (const struct clk_hw *[]){ 3613 &gcc_ufs_phy_axi_clk_src.clkr.hw 3614 }, 3615 .num_parents = 1, 3616 .flags = CLK_SET_RATE_PARENT, 3617 .ops = &clk_branch2_ops, 3618 }, 3619 }, 3620 }; 3621 3622 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 3623 .halt_reg = 0x77010, 3624 .halt_check = BRANCH_HALT, 3625 .hwcg_reg = 0x77010, 3626 .hwcg_bit = 1, 3627 .clkr = { 3628 .enable_reg = 0x77010, 3629 .enable_mask = BIT(1), 3630 .hw.init = &(struct clk_init_data){ 3631 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 3632 .parent_hws = (const struct clk_hw *[]){ 3633 &gcc_ufs_phy_axi_clk.clkr.hw 3634 }, 3635 .num_parents = 1, 3636 .flags = CLK_SET_RATE_PARENT, 3637 .ops = &clk_branch_simple_ops, 3638 }, 3639 }, 3640 }; 3641 3642 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 3643 .halt_reg = 0x7705c, 3644 .halt_check = BRANCH_HALT, 3645 .hwcg_reg = 0x7705c, 3646 .hwcg_bit = 1, 3647 .clkr = { 3648 .enable_reg = 0x7705c, 3649 .enable_mask = BIT(0), 3650 .hw.init = &(struct clk_init_data){ 3651 .name = "gcc_ufs_phy_ice_core_clk", 3652 .parent_hws = (const struct clk_hw *[]){ 3653 &gcc_ufs_phy_ice_core_clk_src.clkr.hw 3654 }, 3655 .num_parents = 1, 3656 .flags = CLK_SET_RATE_PARENT, 3657 .ops = &clk_branch2_ops, 3658 }, 3659 }, 3660 }; 3661 3662 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 3663 .halt_reg = 0x7705c, 3664 .halt_check = BRANCH_HALT, 3665 .hwcg_reg = 0x7705c, 3666 .hwcg_bit = 1, 3667 .clkr = { 3668 .enable_reg = 0x7705c, 3669 .enable_mask = BIT(1), 3670 .hw.init = &(struct clk_init_data){ 3671 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 3672 .parent_hws = (const struct clk_hw *[]){ 3673 &gcc_ufs_phy_ice_core_clk.clkr.hw 3674 }, 3675 .num_parents = 1, 3676 .flags = CLK_SET_RATE_PARENT, 3677 .ops = &clk_branch_simple_ops, 3678 }, 3679 }, 3680 }; 3681 3682 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 3683 .halt_reg = 0x77090, 3684 .halt_check = BRANCH_HALT, 3685 .hwcg_reg = 0x77090, 3686 .hwcg_bit = 1, 3687 .clkr = { 3688 .enable_reg = 0x77090, 3689 .enable_mask = BIT(0), 3690 .hw.init = &(struct clk_init_data){ 3691 .name = "gcc_ufs_phy_phy_aux_clk", 3692 .parent_hws = (const struct clk_hw *[]){ 3693 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw 3694 }, 3695 .num_parents = 1, 3696 .flags = CLK_SET_RATE_PARENT, 3697 .ops = &clk_branch2_ops, 3698 }, 3699 }, 3700 }; 3701 3702 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 3703 .halt_reg = 0x77090, 3704 .halt_check = BRANCH_HALT, 3705 .hwcg_reg = 0x77090, 3706 .hwcg_bit = 1, 3707 .clkr = { 3708 .enable_reg = 0x77090, 3709 .enable_mask = BIT(1), 3710 .hw.init = &(struct clk_init_data){ 3711 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 3712 .parent_hws = (const struct clk_hw *[]){ 3713 &gcc_ufs_phy_phy_aux_clk.clkr.hw 3714 }, 3715 .num_parents = 1, 3716 .flags = CLK_SET_RATE_PARENT, 3717 .ops = &clk_branch_simple_ops, 3718 }, 3719 }, 3720 }; 3721 3722 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 3723 .halt_reg = 0x7701c, 3724 .halt_check = BRANCH_HALT_SKIP, 3725 .clkr = { 3726 .enable_reg = 0x7701c, 3727 .enable_mask = BIT(0), 3728 .hw.init = &(struct clk_init_data){ 3729 .name = "gcc_ufs_phy_rx_symbol_0_clk", 3730 .ops = &clk_branch2_ops, 3731 }, 3732 }, 3733 }; 3734 3735 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 3736 .halt_reg = 0x770ac, 3737 .halt_check = BRANCH_HALT_SKIP, 3738 .clkr = { 3739 .enable_reg = 0x770ac, 3740 .enable_mask = BIT(0), 3741 .hw.init = &(struct clk_init_data){ 3742 .name = "gcc_ufs_phy_rx_symbol_1_clk", 3743 .ops = &clk_branch2_ops, 3744 }, 3745 }, 3746 }; 3747 3748 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 3749 .halt_reg = 0x77018, 3750 .halt_check = BRANCH_HALT_SKIP, 3751 .clkr = { 3752 .enable_reg = 0x77018, 3753 .enable_mask = BIT(0), 3754 .hw.init = &(struct clk_init_data){ 3755 .name = "gcc_ufs_phy_tx_symbol_0_clk", 3756 .ops = &clk_branch2_ops, 3757 }, 3758 }, 3759 }; 3760 3761 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 3762 .halt_reg = 0x77058, 3763 .halt_check = BRANCH_HALT, 3764 .hwcg_reg = 0x77058, 3765 .hwcg_bit = 1, 3766 .clkr = { 3767 .enable_reg = 0x77058, 3768 .enable_mask = BIT(0), 3769 .hw.init = &(struct clk_init_data){ 3770 .name = "gcc_ufs_phy_unipro_core_clk", 3771 .parent_hws = (const struct clk_hw *[]){ 3772 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw 3773 }, 3774 .num_parents = 1, 3775 .flags = CLK_SET_RATE_PARENT, 3776 .ops = &clk_branch2_ops, 3777 }, 3778 }, 3779 }; 3780 3781 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 3782 .halt_reg = 0x77058, 3783 .halt_check = BRANCH_HALT, 3784 .hwcg_reg = 0x77058, 3785 .hwcg_bit = 1, 3786 .clkr = { 3787 .enable_reg = 0x77058, 3788 .enable_mask = BIT(1), 3789 .hw.init = &(struct clk_init_data){ 3790 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 3791 .parent_hws = (const struct clk_hw *[]){ 3792 &gcc_ufs_phy_unipro_core_clk.clkr.hw 3793 }, 3794 .num_parents = 1, 3795 .flags = CLK_SET_RATE_PARENT, 3796 .ops = &clk_branch_simple_ops, 3797 }, 3798 }, 3799 }; 3800 3801 static struct clk_branch gcc_usb30_mp_master_clk = { 3802 .halt_reg = 0xa6010, 3803 .halt_check = BRANCH_HALT, 3804 .clkr = { 3805 .enable_reg = 0xa6010, 3806 .enable_mask = BIT(0), 3807 .hw.init = &(struct clk_init_data){ 3808 .name = "gcc_usb30_mp_master_clk", 3809 .parent_hws = (const struct clk_hw *[]){ 3810 &gcc_usb30_mp_master_clk_src.clkr.hw }, 3811 .num_parents = 1, 3812 .flags = CLK_SET_RATE_PARENT, 3813 .ops = &clk_branch2_ops, 3814 }, 3815 }, 3816 }; 3817 3818 static struct clk_branch gcc_usb30_mp_mock_utmi_clk = { 3819 .halt_reg = 0xa6018, 3820 .halt_check = BRANCH_HALT, 3821 .clkr = { 3822 .enable_reg = 0xa6018, 3823 .enable_mask = BIT(0), 3824 .hw.init = &(struct clk_init_data){ 3825 .name = "gcc_usb30_mp_mock_utmi_clk", 3826 .parent_hws = (const struct clk_hw *[]){ 3827 &gcc_usb30_mp_mock_utmi_clk_src.clkr.hw 3828 }, 3829 .num_parents = 1, 3830 .flags = CLK_SET_RATE_PARENT, 3831 .ops = &clk_branch2_ops, 3832 }, 3833 }, 3834 }; 3835 3836 static struct clk_branch gcc_usb30_mp_sleep_clk = { 3837 .halt_reg = 0xa6014, 3838 .halt_check = BRANCH_HALT, 3839 .clkr = { 3840 .enable_reg = 0xa6014, 3841 .enable_mask = BIT(0), 3842 .hw.init = &(struct clk_init_data){ 3843 .name = "gcc_usb30_mp_sleep_clk", 3844 .ops = &clk_branch2_ops, 3845 }, 3846 }, 3847 }; 3848 3849 static struct clk_branch gcc_usb30_prim_master_clk = { 3850 .halt_reg = 0xf010, 3851 .halt_check = BRANCH_HALT, 3852 .clkr = { 3853 .enable_reg = 0xf010, 3854 .enable_mask = BIT(0), 3855 .hw.init = &(struct clk_init_data){ 3856 .name = "gcc_usb30_prim_master_clk", 3857 .parent_hws = (const struct clk_hw *[]){ 3858 &gcc_usb30_prim_master_clk_src.clkr.hw }, 3859 .num_parents = 1, 3860 .flags = CLK_SET_RATE_PARENT, 3861 .ops = &clk_branch2_ops, 3862 }, 3863 }, 3864 }; 3865 3866 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3867 .halt_reg = 0xf018, 3868 .halt_check = BRANCH_HALT, 3869 .clkr = { 3870 .enable_reg = 0xf018, 3871 .enable_mask = BIT(0), 3872 .hw.init = &(struct clk_init_data){ 3873 .name = "gcc_usb30_prim_mock_utmi_clk", 3874 .parent_hws = (const struct clk_hw *[]){ 3875 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw 3876 }, 3877 .num_parents = 1, 3878 .flags = CLK_SET_RATE_PARENT, 3879 .ops = &clk_branch2_ops, 3880 }, 3881 }, 3882 }; 3883 3884 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3885 .halt_reg = 0xf014, 3886 .halt_check = BRANCH_HALT, 3887 .clkr = { 3888 .enable_reg = 0xf014, 3889 .enable_mask = BIT(0), 3890 .hw.init = &(struct clk_init_data){ 3891 .name = "gcc_usb30_prim_sleep_clk", 3892 .ops = &clk_branch2_ops, 3893 }, 3894 }, 3895 }; 3896 3897 static struct clk_branch gcc_usb30_sec_master_clk = { 3898 .halt_reg = 0x10010, 3899 .halt_check = BRANCH_HALT, 3900 .clkr = { 3901 .enable_reg = 0x10010, 3902 .enable_mask = BIT(0), 3903 .hw.init = &(struct clk_init_data){ 3904 .name = "gcc_usb30_sec_master_clk", 3905 .parent_hws = (const struct clk_hw *[]){ 3906 &gcc_usb30_sec_master_clk_src.clkr.hw }, 3907 .num_parents = 1, 3908 .flags = CLK_SET_RATE_PARENT, 3909 .ops = &clk_branch2_ops, 3910 }, 3911 }, 3912 }; 3913 3914 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = { 3915 .halt_reg = 0x10018, 3916 .halt_check = BRANCH_HALT, 3917 .clkr = { 3918 .enable_reg = 0x10018, 3919 .enable_mask = BIT(0), 3920 .hw.init = &(struct clk_init_data){ 3921 .name = "gcc_usb30_sec_mock_utmi_clk", 3922 .parent_hws = (const struct clk_hw *[]){ 3923 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw 3924 }, 3925 .num_parents = 1, 3926 .flags = CLK_SET_RATE_PARENT, 3927 .ops = &clk_branch2_ops, 3928 }, 3929 }, 3930 }; 3931 3932 static struct clk_branch gcc_usb30_sec_sleep_clk = { 3933 .halt_reg = 0x10014, 3934 .halt_check = BRANCH_HALT, 3935 .clkr = { 3936 .enable_reg = 0x10014, 3937 .enable_mask = BIT(0), 3938 .hw.init = &(struct clk_init_data){ 3939 .name = "gcc_usb30_sec_sleep_clk", 3940 .ops = &clk_branch2_ops, 3941 }, 3942 }, 3943 }; 3944 3945 static struct clk_branch gcc_usb3_mp_phy_aux_clk = { 3946 .halt_reg = 0xa6050, 3947 .halt_check = BRANCH_HALT, 3948 .clkr = { 3949 .enable_reg = 0xa6050, 3950 .enable_mask = BIT(0), 3951 .hw.init = &(struct clk_init_data){ 3952 .name = "gcc_usb3_mp_phy_aux_clk", 3953 .parent_hws = (const struct clk_hw *[]){ 3954 &gcc_usb3_mp_phy_aux_clk_src.clkr.hw 3955 }, 3956 .num_parents = 1, 3957 .flags = CLK_SET_RATE_PARENT, 3958 .ops = &clk_branch2_ops, 3959 }, 3960 }, 3961 }; 3962 3963 static struct clk_branch gcc_usb3_mp_phy_com_aux_clk = { 3964 .halt_reg = 0xa6054, 3965 .halt_check = BRANCH_HALT, 3966 .clkr = { 3967 .enable_reg = 0xa6054, 3968 .enable_mask = BIT(0), 3969 .hw.init = &(struct clk_init_data){ 3970 .name = "gcc_usb3_mp_phy_com_aux_clk", 3971 .parent_hws = (const struct clk_hw *[]){ 3972 &gcc_usb3_mp_phy_aux_clk_src.clkr.hw 3973 }, 3974 .num_parents = 1, 3975 .flags = CLK_SET_RATE_PARENT, 3976 .ops = &clk_branch2_ops, 3977 }, 3978 }, 3979 }; 3980 3981 static struct clk_branch gcc_usb3_mp_phy_pipe_0_clk = { 3982 .halt_reg = 0xa6058, 3983 .halt_check = BRANCH_HALT_SKIP, 3984 .clkr = { 3985 .enable_reg = 0xa6058, 3986 .enable_mask = BIT(0), 3987 .hw.init = &(struct clk_init_data){ 3988 .name = "gcc_usb3_mp_phy_pipe_0_clk", 3989 .ops = &clk_branch2_ops, 3990 }, 3991 }, 3992 }; 3993 3994 static struct clk_branch gcc_usb3_mp_phy_pipe_1_clk = { 3995 .halt_reg = 0xa605c, 3996 .halt_check = BRANCH_HALT_SKIP, 3997 .clkr = { 3998 .enable_reg = 0xa605c, 3999 .enable_mask = BIT(0), 4000 .hw.init = &(struct clk_init_data){ 4001 .name = "gcc_usb3_mp_phy_pipe_1_clk", 4002 .ops = &clk_branch2_ops, 4003 }, 4004 }, 4005 }; 4006 4007 static struct clk_branch gcc_usb3_prim_clkref_clk = { 4008 .halt_reg = 0x8c008, 4009 .halt_check = BRANCH_HALT, 4010 .clkr = { 4011 .enable_reg = 0x8c008, 4012 .enable_mask = BIT(0), 4013 .hw.init = &(struct clk_init_data){ 4014 .name = "gcc_usb3_prim_clkref_clk", 4015 .ops = &clk_branch2_ops, 4016 }, 4017 }, 4018 }; 4019 4020 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 4021 .halt_reg = 0xf050, 4022 .halt_check = BRANCH_HALT, 4023 .clkr = { 4024 .enable_reg = 0xf050, 4025 .enable_mask = BIT(0), 4026 .hw.init = &(struct clk_init_data){ 4027 .name = "gcc_usb3_prim_phy_aux_clk", 4028 .parent_hws = (const struct clk_hw *[]){ 4029 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw 4030 }, 4031 .num_parents = 1, 4032 .flags = CLK_SET_RATE_PARENT, 4033 .ops = &clk_branch2_ops, 4034 }, 4035 }, 4036 }; 4037 4038 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 4039 .halt_reg = 0xf054, 4040 .halt_check = BRANCH_HALT, 4041 .clkr = { 4042 .enable_reg = 0xf054, 4043 .enable_mask = BIT(0), 4044 .hw.init = &(struct clk_init_data){ 4045 .name = "gcc_usb3_prim_phy_com_aux_clk", 4046 .parent_hws = (const struct clk_hw *[]){ 4047 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw 4048 }, 4049 .num_parents = 1, 4050 .flags = CLK_SET_RATE_PARENT, 4051 .ops = &clk_branch2_ops, 4052 }, 4053 }, 4054 }; 4055 4056 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 4057 .halt_reg = 0xf058, 4058 .halt_check = BRANCH_HALT_SKIP, 4059 .clkr = { 4060 .enable_reg = 0xf058, 4061 .enable_mask = BIT(0), 4062 .hw.init = &(struct clk_init_data){ 4063 .name = "gcc_usb3_prim_phy_pipe_clk", 4064 .ops = &clk_branch2_ops, 4065 }, 4066 }, 4067 }; 4068 4069 static struct clk_branch gcc_usb3_sec_clkref_clk = { 4070 .halt_reg = 0x8c028, 4071 .halt_check = BRANCH_HALT, 4072 .clkr = { 4073 .enable_reg = 0x8c028, 4074 .enable_mask = BIT(0), 4075 .hw.init = &(struct clk_init_data){ 4076 .name = "gcc_usb3_sec_clkref_clk", 4077 .ops = &clk_branch2_ops, 4078 }, 4079 }, 4080 }; 4081 4082 static struct clk_branch gcc_usb3_sec_phy_aux_clk = { 4083 .halt_reg = 0x10050, 4084 .halt_check = BRANCH_HALT, 4085 .clkr = { 4086 .enable_reg = 0x10050, 4087 .enable_mask = BIT(0), 4088 .hw.init = &(struct clk_init_data){ 4089 .name = "gcc_usb3_sec_phy_aux_clk", 4090 .parent_hws = (const struct clk_hw *[]){ 4091 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw 4092 }, 4093 .num_parents = 1, 4094 .flags = CLK_SET_RATE_PARENT, 4095 .ops = &clk_branch2_ops, 4096 }, 4097 }, 4098 }; 4099 4100 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = { 4101 .halt_reg = 0x10054, 4102 .halt_check = BRANCH_HALT, 4103 .clkr = { 4104 .enable_reg = 0x10054, 4105 .enable_mask = BIT(0), 4106 .hw.init = &(struct clk_init_data){ 4107 .name = "gcc_usb3_sec_phy_com_aux_clk", 4108 .parent_hws = (const struct clk_hw *[]){ 4109 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw 4110 }, 4111 .num_parents = 1, 4112 .flags = CLK_SET_RATE_PARENT, 4113 .ops = &clk_branch2_ops, 4114 }, 4115 }, 4116 }; 4117 4118 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 4119 .halt_reg = 0x10058, 4120 .halt_check = BRANCH_HALT_SKIP, 4121 .clkr = { 4122 .enable_reg = 0x10058, 4123 .enable_mask = BIT(0), 4124 .hw.init = &(struct clk_init_data){ 4125 .name = "gcc_usb3_sec_phy_pipe_clk", 4126 .ops = &clk_branch2_ops, 4127 }, 4128 }, 4129 }; 4130 4131 static struct clk_branch gcc_video_axi0_clk = { 4132 .halt_reg = 0xb024, 4133 .halt_check = BRANCH_HALT, 4134 .clkr = { 4135 .enable_reg = 0xb024, 4136 .enable_mask = BIT(0), 4137 .hw.init = &(struct clk_init_data){ 4138 .name = "gcc_video_axi0_clk", 4139 .ops = &clk_branch2_ops, 4140 }, 4141 }, 4142 }; 4143 4144 static struct clk_branch gcc_video_axi1_clk = { 4145 .halt_reg = 0xb028, 4146 .halt_check = BRANCH_HALT, 4147 .clkr = { 4148 .enable_reg = 0xb028, 4149 .enable_mask = BIT(0), 4150 .hw.init = &(struct clk_init_data){ 4151 .name = "gcc_video_axi1_clk", 4152 .ops = &clk_branch2_ops, 4153 }, 4154 }, 4155 }; 4156 4157 static struct clk_branch gcc_video_axic_clk = { 4158 .halt_reg = 0xb02c, 4159 .halt_check = BRANCH_HALT, 4160 .clkr = { 4161 .enable_reg = 0xb02c, 4162 .enable_mask = BIT(0), 4163 .hw.init = &(struct clk_init_data){ 4164 .name = "gcc_video_axic_clk", 4165 .ops = &clk_branch2_ops, 4166 }, 4167 }, 4168 }; 4169 4170 static struct gdsc usb30_sec_gdsc = { 4171 .gdscr = 0x10004, 4172 .pd = { 4173 .name = "usb30_sec_gdsc", 4174 }, 4175 .pwrsts = PWRSTS_OFF_ON, 4176 .flags = POLL_CFG_GDSCR, 4177 }; 4178 4179 static struct gdsc emac_gdsc = { 4180 .gdscr = 0x6004, 4181 .pd = { 4182 .name = "emac_gdsc", 4183 }, 4184 .pwrsts = PWRSTS_OFF_ON, 4185 .flags = POLL_CFG_GDSCR, 4186 }; 4187 4188 static struct gdsc usb30_prim_gdsc = { 4189 .gdscr = 0xf004, 4190 .pd = { 4191 .name = "usb30_prim_gdsc", 4192 }, 4193 .pwrsts = PWRSTS_OFF_ON, 4194 .flags = POLL_CFG_GDSCR, 4195 }; 4196 4197 static struct gdsc pcie_0_gdsc = { 4198 .gdscr = 0x6b004, 4199 .pd = { 4200 .name = "pcie_0_gdsc", 4201 }, 4202 .pwrsts = PWRSTS_OFF_ON, 4203 .flags = POLL_CFG_GDSCR, 4204 }; 4205 4206 static struct gdsc ufs_card_gdsc = { 4207 .gdscr = 0x75004, 4208 .pd = { 4209 .name = "ufs_card_gdsc", 4210 }, 4211 .pwrsts = PWRSTS_OFF_ON, 4212 .flags = POLL_CFG_GDSCR, 4213 }; 4214 4215 static struct gdsc ufs_phy_gdsc = { 4216 .gdscr = 0x77004, 4217 .pd = { 4218 .name = "ufs_phy_gdsc", 4219 }, 4220 .pwrsts = PWRSTS_OFF_ON, 4221 .flags = POLL_CFG_GDSCR, 4222 }; 4223 4224 static struct gdsc pcie_1_gdsc = { 4225 .gdscr = 0x8d004, 4226 .pd = { 4227 .name = "pcie_1_gdsc", 4228 }, 4229 .pwrsts = PWRSTS_OFF_ON, 4230 .flags = POLL_CFG_GDSCR, 4231 }; 4232 4233 static struct gdsc pcie_2_gdsc = { 4234 .gdscr = 0x9d004, 4235 .pd = { 4236 .name = "pcie_2_gdsc", 4237 }, 4238 .pwrsts = PWRSTS_OFF_ON, 4239 .flags = POLL_CFG_GDSCR, 4240 }; 4241 4242 static struct gdsc ufs_card_2_gdsc = { 4243 .gdscr = 0xa2004, 4244 .pd = { 4245 .name = "ufs_card_2_gdsc", 4246 }, 4247 .pwrsts = PWRSTS_OFF_ON, 4248 .flags = POLL_CFG_GDSCR, 4249 }; 4250 4251 static struct gdsc pcie_3_gdsc = { 4252 .gdscr = 0xa3004, 4253 .pd = { 4254 .name = "pcie_3_gdsc", 4255 }, 4256 .pwrsts = PWRSTS_OFF_ON, 4257 .flags = POLL_CFG_GDSCR, 4258 }; 4259 4260 static struct gdsc usb30_mp_gdsc = { 4261 .gdscr = 0xa6004, 4262 .pd = { 4263 .name = "usb30_mp_gdsc", 4264 }, 4265 .pwrsts = PWRSTS_OFF_ON, 4266 .flags = POLL_CFG_GDSCR, 4267 }; 4268 4269 static struct clk_regmap *gcc_sc8180x_clocks[] = { 4270 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr, 4271 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr, 4272 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr, 4273 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 4274 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 4275 [GCC_AGGRE_USB3_MP_AXI_CLK] = &gcc_aggre_usb3_mp_axi_clk.clkr, 4276 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 4277 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr, 4278 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 4279 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 4280 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 4281 [GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr, 4282 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 4283 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr, 4284 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 4285 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 4286 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 4287 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr, 4288 [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr, 4289 [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr, 4290 [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr, 4291 [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr, 4292 [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr, 4293 [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr, 4294 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 4295 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 4296 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 4297 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 4298 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 4299 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 4300 [GCC_GP4_CLK] = &gcc_gp4_clk.clkr, 4301 [GCC_GP4_CLK_SRC] = &gcc_gp4_clk_src.clkr, 4302 [GCC_GP5_CLK] = &gcc_gp5_clk.clkr, 4303 [GCC_GP5_CLK_SRC] = &gcc_gp5_clk_src.clkr, 4304 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 4305 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 4306 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 4307 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 4308 [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr, 4309 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 4310 [GCC_NPU_AXI_CLK_SRC] = &gcc_npu_axi_clk_src.clkr, 4311 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr, 4312 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr, 4313 [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr, 4314 [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr, 4315 [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr, 4316 [GCC_PCIE2_PHY_REFGEN_CLK] = &gcc_pcie2_phy_refgen_clk.clkr, 4317 [GCC_PCIE3_PHY_REFGEN_CLK] = &gcc_pcie3_phy_refgen_clk.clkr, 4318 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 4319 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 4320 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 4321 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr, 4322 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 4323 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 4324 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 4325 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 4326 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 4327 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr, 4328 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 4329 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr, 4330 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 4331 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 4332 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 4333 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr, 4334 [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr, 4335 [GCC_PCIE_2_AUX_CLK_SRC] = &gcc_pcie_2_aux_clk_src.clkr, 4336 [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr, 4337 [GCC_PCIE_2_CLKREF_CLK] = &gcc_pcie_2_clkref_clk.clkr, 4338 [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr, 4339 [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr, 4340 [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr, 4341 [GCC_PCIE_2_SLV_Q2A_AXI_CLK] = &gcc_pcie_2_slv_q2a_axi_clk.clkr, 4342 [GCC_PCIE_3_AUX_CLK] = &gcc_pcie_3_aux_clk.clkr, 4343 [GCC_PCIE_3_AUX_CLK_SRC] = &gcc_pcie_3_aux_clk_src.clkr, 4344 [GCC_PCIE_3_CFG_AHB_CLK] = &gcc_pcie_3_cfg_ahb_clk.clkr, 4345 [GCC_PCIE_3_CLKREF_CLK] = &gcc_pcie_3_clkref_clk.clkr, 4346 [GCC_PCIE_3_MSTR_AXI_CLK] = &gcc_pcie_3_mstr_axi_clk.clkr, 4347 [GCC_PCIE_3_PIPE_CLK] = &gcc_pcie_3_pipe_clk.clkr, 4348 [GCC_PCIE_3_SLV_AXI_CLK] = &gcc_pcie_3_slv_axi_clk.clkr, 4349 [GCC_PCIE_3_SLV_Q2A_AXI_CLK] = &gcc_pcie_3_slv_q2a_axi_clk.clkr, 4350 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 4351 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr, 4352 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 4353 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 4354 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 4355 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 4356 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 4357 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 4358 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 4359 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 4360 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr, 4361 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 4362 [GCC_QSPI_1_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_1_cnoc_periph_ahb_clk.clkr, 4363 [GCC_QSPI_1_CORE_CLK] = &gcc_qspi_1_core_clk.clkr, 4364 [GCC_QSPI_1_CORE_CLK_SRC] = &gcc_qspi_1_core_clk_src.clkr, 4365 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr, 4366 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr, 4367 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr, 4368 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 4369 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 4370 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 4371 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 4372 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 4373 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 4374 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 4375 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 4376 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 4377 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 4378 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 4379 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 4380 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 4381 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 4382 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 4383 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 4384 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 4385 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 4386 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 4387 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 4388 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 4389 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 4390 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 4391 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 4392 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 4393 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 4394 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 4395 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 4396 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr, 4397 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr, 4398 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr, 4399 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr, 4400 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr, 4401 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr, 4402 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr, 4403 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr, 4404 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr, 4405 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr, 4406 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr, 4407 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr, 4408 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 4409 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 4410 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 4411 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 4412 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr, 4413 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr, 4414 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 4415 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 4416 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 4417 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 4418 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 4419 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 4420 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 4421 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 4422 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 4423 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr, 4424 [GCC_UFS_CARD_2_AHB_CLK] = &gcc_ufs_card_2_ahb_clk.clkr, 4425 [GCC_UFS_CARD_2_AXI_CLK] = &gcc_ufs_card_2_axi_clk.clkr, 4426 [GCC_UFS_CARD_2_AXI_CLK_SRC] = &gcc_ufs_card_2_axi_clk_src.clkr, 4427 [GCC_UFS_CARD_2_ICE_CORE_CLK] = &gcc_ufs_card_2_ice_core_clk.clkr, 4428 [GCC_UFS_CARD_2_ICE_CORE_CLK_SRC] = &gcc_ufs_card_2_ice_core_clk_src.clkr, 4429 [GCC_UFS_CARD_2_PHY_AUX_CLK] = &gcc_ufs_card_2_phy_aux_clk.clkr, 4430 [GCC_UFS_CARD_2_PHY_AUX_CLK_SRC] = &gcc_ufs_card_2_phy_aux_clk_src.clkr, 4431 [GCC_UFS_CARD_2_RX_SYMBOL_0_CLK] = &gcc_ufs_card_2_rx_symbol_0_clk.clkr, 4432 [GCC_UFS_CARD_2_RX_SYMBOL_1_CLK] = &gcc_ufs_card_2_rx_symbol_1_clk.clkr, 4433 [GCC_UFS_CARD_2_TX_SYMBOL_0_CLK] = &gcc_ufs_card_2_tx_symbol_0_clk.clkr, 4434 [GCC_UFS_CARD_2_UNIPRO_CORE_CLK] = &gcc_ufs_card_2_unipro_core_clk.clkr, 4435 [GCC_UFS_CARD_2_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_2_unipro_core_clk_src.clkr, 4436 [GCC_UFS_CARD_CLKREF_EN] = &gcc_ufs_card_clkref_en.clkr, 4437 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr, 4438 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr, 4439 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr, 4440 [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr, 4441 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr, 4442 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr, 4443 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_card_ice_core_hw_ctl_clk.clkr, 4444 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr, 4445 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr, 4446 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr, 4447 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr, 4448 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr, 4449 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr, 4450 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr, 4451 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr, 4452 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr, 4453 [GCC_UFS_MEM_CLKREF_EN] = &gcc_ufs_mem_clkref_en.clkr, 4454 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 4455 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 4456 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 4457 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 4458 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 4459 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 4460 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 4461 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 4462 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 4463 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 4464 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 4465 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 4466 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 4467 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 4468 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr, 4469 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 4470 [GCC_USB30_MP_MASTER_CLK] = &gcc_usb30_mp_master_clk.clkr, 4471 [GCC_USB30_MP_MASTER_CLK_SRC] = &gcc_usb30_mp_master_clk_src.clkr, 4472 [GCC_USB30_MP_MOCK_UTMI_CLK] = &gcc_usb30_mp_mock_utmi_clk.clkr, 4473 [GCC_USB30_MP_MOCK_UTMI_CLK_SRC] = &gcc_usb30_mp_mock_utmi_clk_src.clkr, 4474 [GCC_USB30_MP_SLEEP_CLK] = &gcc_usb30_mp_sleep_clk.clkr, 4475 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 4476 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 4477 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 4478 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 4479 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 4480 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr, 4481 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr, 4482 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr, 4483 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr, 4484 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr, 4485 [GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr, 4486 [GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr, 4487 [GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr, 4488 [GCC_USB3_MP_PHY_PIPE_0_CLK] = &gcc_usb3_mp_phy_pipe_0_clk.clkr, 4489 [GCC_USB3_MP_PHY_PIPE_1_CLK] = &gcc_usb3_mp_phy_pipe_1_clk.clkr, 4490 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 4491 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 4492 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 4493 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 4494 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 4495 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr, 4496 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr, 4497 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr, 4498 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr, 4499 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr, 4500 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 4501 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr, 4502 [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr, 4503 [GPLL0] = &gpll0.clkr, 4504 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 4505 [GPLL1] = &gpll1.clkr, 4506 [GPLL4] = &gpll4.clkr, 4507 [GPLL7] = &gpll7.clkr, 4508 [GPLL9] = &gpll9.clkr, 4509 }; 4510 4511 static const struct qcom_reset_map gcc_sc8180x_resets[] = { 4512 [GCC_EMAC_BCR] = { 0x6000 }, 4513 [GCC_GPU_BCR] = { 0x71000 }, 4514 [GCC_MMSS_BCR] = { 0xb000 }, 4515 [GCC_NPU_BCR] = { 0x4d000 }, 4516 [GCC_PCIE_0_BCR] = { 0x6b000 }, 4517 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 4518 [GCC_PCIE_1_BCR] = { 0x8d000 }, 4519 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c }, 4520 [GCC_PCIE_2_BCR] = { 0x9d000 }, 4521 [GCC_PCIE_2_PHY_BCR] = { 0xa701c }, 4522 [GCC_PCIE_3_BCR] = { 0xa3000 }, 4523 [GCC_PCIE_3_PHY_BCR] = { 0xa801c }, 4524 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 4525 [GCC_PDM_BCR] = { 0x33000 }, 4526 [GCC_PRNG_BCR] = { 0x34000 }, 4527 [GCC_QSPI_1_BCR] = { 0x4a000 }, 4528 [GCC_QSPI_BCR] = { 0x24008 }, 4529 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 }, 4530 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 }, 4531 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 }, 4532 [GCC_QUSB2PHY_5_BCR] = { 0x12010 }, 4533 [GCC_QUSB2PHY_MP0_BCR] = { 0x12008 }, 4534 [GCC_QUSB2PHY_MP1_BCR] = { 0x1200c }, 4535 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 4536 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 4537 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x50000 }, 4538 [GCC_USB3_PHY_PRIM_SP1_BCR] = { 0x50004 }, 4539 [GCC_USB3_DP_PHY_PRIM_SP0_BCR] = { 0x50010 }, 4540 [GCC_USB3_DP_PHY_PRIM_SP1_BCR] = { 0x50014 }, 4541 [GCC_USB3_PHY_SEC_BCR] = { 0x50018 }, 4542 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c }, 4543 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 }, 4544 [GCC_USB3_UNIPHY_MP0_BCR] = { 0x50024 }, 4545 [GCC_USB3_UNIPHY_MP1_BCR] = { 0x50028 }, 4546 [GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x5002c }, 4547 [GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x50030 }, 4548 [GCC_SDCC2_BCR] = { 0x14000 }, 4549 [GCC_SDCC4_BCR] = { 0x16000 }, 4550 [GCC_TSIF_BCR] = { 0x36000 }, 4551 [GCC_UFS_CARD_2_BCR] = { 0xa2000 }, 4552 [GCC_UFS_CARD_BCR] = { 0x75000 }, 4553 [GCC_UFS_PHY_BCR] = { 0x77000 }, 4554 [GCC_USB30_MP_BCR] = { 0xa6000 }, 4555 [GCC_USB30_PRIM_BCR] = { 0xf000 }, 4556 [GCC_USB30_SEC_BCR] = { 0x10000 }, 4557 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 4558 [GCC_VIDEO_AXIC_CLK_BCR] = { .reg = 0xb02c, .bit = 2, .udelay = 150 }, 4559 [GCC_VIDEO_AXI0_CLK_BCR] = { .reg = 0xb024, .bit = 2, .udelay = 150 }, 4560 [GCC_VIDEO_AXI1_CLK_BCR] = { .reg = 0xb028, .bit = 2, .udelay = 150 }, 4561 }; 4562 4563 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 4564 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 4565 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 4566 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 4567 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 4568 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 4569 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 4570 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src), 4571 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src), 4572 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 4573 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 4574 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 4575 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 4576 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 4577 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 4578 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src), 4579 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src), 4580 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src), 4581 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src), 4582 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src), 4583 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src), 4584 }; 4585 4586 static struct gdsc *gcc_sc8180x_gdscs[] = { 4587 [EMAC_GDSC] = &emac_gdsc, 4588 [PCIE_0_GDSC] = &pcie_0_gdsc, 4589 [PCIE_1_GDSC] = &pcie_1_gdsc, 4590 [PCIE_2_GDSC] = &pcie_2_gdsc, 4591 [PCIE_3_GDSC] = &pcie_3_gdsc, 4592 [UFS_CARD_GDSC] = &ufs_card_gdsc, 4593 [UFS_CARD_2_GDSC] = &ufs_card_2_gdsc, 4594 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 4595 [USB30_MP_GDSC] = &usb30_mp_gdsc, 4596 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 4597 [USB30_SEC_GDSC] = &usb30_sec_gdsc, 4598 }; 4599 4600 static const struct regmap_config gcc_sc8180x_regmap_config = { 4601 .reg_bits = 32, 4602 .reg_stride = 4, 4603 .val_bits = 32, 4604 .max_register = 0xc0004, 4605 .fast_io = true, 4606 }; 4607 4608 static const struct qcom_cc_desc gcc_sc8180x_desc = { 4609 .config = &gcc_sc8180x_regmap_config, 4610 .clks = gcc_sc8180x_clocks, 4611 .num_clks = ARRAY_SIZE(gcc_sc8180x_clocks), 4612 .resets = gcc_sc8180x_resets, 4613 .num_resets = ARRAY_SIZE(gcc_sc8180x_resets), 4614 .gdscs = gcc_sc8180x_gdscs, 4615 .num_gdscs = ARRAY_SIZE(gcc_sc8180x_gdscs), 4616 }; 4617 4618 static const struct of_device_id gcc_sc8180x_match_table[] = { 4619 { .compatible = "qcom,gcc-sc8180x" }, 4620 { } 4621 }; 4622 MODULE_DEVICE_TABLE(of, gcc_sc8180x_match_table); 4623 4624 static int gcc_sc8180x_probe(struct platform_device *pdev) 4625 { 4626 struct regmap *regmap; 4627 int ret; 4628 4629 regmap = qcom_cc_map(pdev, &gcc_sc8180x_desc); 4630 if (IS_ERR(regmap)) 4631 return PTR_ERR(regmap); 4632 4633 /* Keep some clocks always-on */ 4634 qcom_branch_set_clk_en(regmap, 0xb004); /* GCC_VIDEO_AHB_CLK */ 4635 qcom_branch_set_clk_en(regmap, 0xb008); /* GCC_CAMERA_AHB_CLK */ 4636 qcom_branch_set_clk_en(regmap, 0xb00c); /* GCC_DISP_AHB_CLK */ 4637 qcom_branch_set_clk_en(regmap, 0xb040); /* GCC_VIDEO_XO_CLK */ 4638 qcom_branch_set_clk_en(regmap, 0xb044); /* GCC_CAMERA_XO_CLK */ 4639 qcom_branch_set_clk_en(regmap, 0xb048); /* GCC_DISP_XO_CLK */ 4640 qcom_branch_set_clk_en(regmap, 0x48004); /* GCC_CPUSS_GNOC_CLK */ 4641 qcom_branch_set_clk_en(regmap, 0x48190); /* GCC_CPUSS_DVM_BUS_CLK */ 4642 qcom_branch_set_clk_en(regmap, 0x4d004); /* GCC_NPU_CFG_AHB_CLK */ 4643 qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */ 4644 4645 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 4646 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3); 4647 regmap_update_bits(regmap, 0x71028, 0x3, 0x3); 4648 4649 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 4650 ARRAY_SIZE(gcc_dfs_clocks)); 4651 if (ret) 4652 return ret; 4653 4654 return qcom_cc_really_probe(&pdev->dev, &gcc_sc8180x_desc, regmap); 4655 } 4656 4657 static struct platform_driver gcc_sc8180x_driver = { 4658 .probe = gcc_sc8180x_probe, 4659 .driver = { 4660 .name = "gcc-sc8180x", 4661 .of_match_table = gcc_sc8180x_match_table, 4662 }, 4663 }; 4664 4665 static int __init gcc_sc8180x_init(void) 4666 { 4667 return platform_driver_register(&gcc_sc8180x_driver); 4668 } 4669 core_initcall(gcc_sc8180x_init); 4670 4671 static void __exit gcc_sc8180x_exit(void) 4672 { 4673 platform_driver_unregister(&gcc_sc8180x_driver); 4674 } 4675 module_exit(gcc_sc8180x_exit); 4676 4677 MODULE_DESCRIPTION("QTI GCC SC8180x driver"); 4678 MODULE_LICENSE("GPL v2"); 4679