1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. 3 4 #include <linux/kernel.h> 5 #include <linux/bitops.h> 6 #include <linux/err.h> 7 #include <linux/platform_device.h> 8 #include <linux/module.h> 9 #include <linux/of.h> 10 #include <linux/of_device.h> 11 #include <linux/clk-provider.h> 12 #include <linux/regmap.h> 13 #include <linux/reset-controller.h> 14 15 #include <dt-bindings/clock/qcom,gcc-sm8150.h> 16 17 #include "common.h" 18 #include "clk-alpha-pll.h" 19 #include "clk-branch.h" 20 #include "clk-pll.h" 21 #include "clk-rcg.h" 22 #include "clk-regmap.h" 23 #include "reset.h" 24 #include "gdsc.h" 25 26 enum { 27 P_BI_TCXO, 28 P_AUD_REF_CLK, 29 P_CORE_BI_PLL_TEST_SE, 30 P_GPLL0_OUT_EVEN, 31 P_GPLL0_OUT_MAIN, 32 P_GPLL7_OUT_MAIN, 33 P_GPLL9_OUT_MAIN, 34 P_SLEEP_CLK, 35 }; 36 37 static struct clk_alpha_pll gpll0 = { 38 .offset = 0x0, 39 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 40 .clkr = { 41 .enable_reg = 0x52000, 42 .enable_mask = BIT(0), 43 .hw.init = &(struct clk_init_data){ 44 .name = "gpll0", 45 .parent_data = &(const struct clk_parent_data){ 46 .fw_name = "bi_tcxo", 47 .name = "bi_tcxo", 48 }, 49 .num_parents = 1, 50 .ops = &clk_alpha_pll_fixed_trion_ops, 51 }, 52 }, 53 }; 54 55 static const struct clk_div_table post_div_table_trion_even[] = { 56 { 0x0, 1 }, 57 { 0x1, 2 }, 58 { 0x3, 4 }, 59 { 0x7, 8 }, 60 { } 61 }; 62 63 static struct clk_alpha_pll_postdiv gpll0_out_even = { 64 .offset = 0x0, 65 .post_div_shift = 8, 66 .post_div_table = post_div_table_trion_even, 67 .num_post_div = ARRAY_SIZE(post_div_table_trion_even), 68 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 69 .width = 4, 70 .clkr.hw.init = &(struct clk_init_data){ 71 .name = "gpll0_out_even", 72 .parent_hws = (const struct clk_hw*[]){ 73 &gpll0.clkr.hw, 74 }, 75 .num_parents = 1, 76 .ops = &clk_alpha_pll_postdiv_trion_ops, 77 }, 78 }; 79 80 static struct clk_alpha_pll gpll7 = { 81 .offset = 0x1a000, 82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 83 .clkr = { 84 .enable_reg = 0x52000, 85 .enable_mask = BIT(7), 86 .hw.init = &(struct clk_init_data){ 87 .name = "gpll7", 88 .parent_data = &(const struct clk_parent_data){ 89 .fw_name = "bi_tcxo", 90 .name = "bi_tcxo", 91 }, 92 .num_parents = 1, 93 .ops = &clk_alpha_pll_fixed_trion_ops, 94 }, 95 }, 96 }; 97 98 static struct clk_alpha_pll gpll9 = { 99 .offset = 0x1c000, 100 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], 101 .clkr = { 102 .enable_reg = 0x52000, 103 .enable_mask = BIT(9), 104 .hw.init = &(struct clk_init_data){ 105 .name = "gpll9", 106 .parent_data = &(const struct clk_parent_data){ 107 .fw_name = "bi_tcxo", 108 .name = "bi_tcxo", 109 }, 110 .num_parents = 1, 111 .ops = &clk_alpha_pll_fixed_trion_ops, 112 }, 113 }, 114 }; 115 116 static const struct parent_map gcc_parent_map_0[] = { 117 { P_BI_TCXO, 0 }, 118 { P_GPLL0_OUT_MAIN, 1 }, 119 { P_GPLL0_OUT_EVEN, 6 }, 120 { P_CORE_BI_PLL_TEST_SE, 7 }, 121 }; 122 123 static const struct clk_parent_data gcc_parents_0[] = { 124 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 125 { .hw = &gpll0.clkr.hw }, 126 { .hw = &gpll0_out_even.clkr.hw }, 127 { .fw_name = "core_bi_pll_test_se" }, 128 }; 129 130 static const struct parent_map gcc_parent_map_1[] = { 131 { P_BI_TCXO, 0 }, 132 { P_GPLL0_OUT_MAIN, 1 }, 133 { P_SLEEP_CLK, 5 }, 134 { P_GPLL0_OUT_EVEN, 6 }, 135 { P_CORE_BI_PLL_TEST_SE, 7 }, 136 }; 137 138 static const struct clk_parent_data gcc_parents_1[] = { 139 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 140 { .hw = &gpll0.clkr.hw }, 141 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 142 { .hw = &gpll0_out_even.clkr.hw }, 143 { .fw_name = "core_bi_pll_test_se" }, 144 }; 145 146 static const struct parent_map gcc_parent_map_2[] = { 147 { P_BI_TCXO, 0 }, 148 { P_SLEEP_CLK, 5 }, 149 { P_CORE_BI_PLL_TEST_SE, 7 }, 150 }; 151 152 static const struct clk_parent_data gcc_parents_2[] = { 153 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 154 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 155 { .fw_name = "core_bi_pll_test_se" }, 156 }; 157 158 static const struct parent_map gcc_parent_map_3[] = { 159 { P_BI_TCXO, 0 }, 160 { P_GPLL0_OUT_MAIN, 1 }, 161 { P_CORE_BI_PLL_TEST_SE, 7 }, 162 }; 163 164 static const struct clk_parent_data gcc_parents_3[] = { 165 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 166 { .hw = &gpll0.clkr.hw }, 167 { .fw_name = "core_bi_pll_test_se"}, 168 }; 169 170 static const struct parent_map gcc_parent_map_4[] = { 171 { P_BI_TCXO, 0 }, 172 { P_CORE_BI_PLL_TEST_SE, 7 }, 173 }; 174 175 static const struct clk_parent_data gcc_parents_4[] = { 176 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 177 { .fw_name = "core_bi_pll_test_se" }, 178 }; 179 180 static const struct parent_map gcc_parent_map_5[] = { 181 { P_BI_TCXO, 0 }, 182 { P_GPLL0_OUT_MAIN, 1 }, 183 { P_GPLL7_OUT_MAIN, 3 }, 184 { P_GPLL0_OUT_EVEN, 6 }, 185 { P_CORE_BI_PLL_TEST_SE, 7 }, 186 }; 187 188 static const struct clk_parent_data gcc_parents_5[] = { 189 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 190 { .hw = &gpll0.clkr.hw }, 191 { .hw = &gpll7.clkr.hw }, 192 { .hw = &gpll0_out_even.clkr.hw }, 193 { .fw_name = "core_bi_pll_test_se" }, 194 }; 195 196 static const struct parent_map gcc_parent_map_6[] = { 197 { P_BI_TCXO, 0 }, 198 { P_GPLL0_OUT_MAIN, 1 }, 199 { P_GPLL9_OUT_MAIN, 2 }, 200 { P_GPLL0_OUT_EVEN, 6 }, 201 { P_CORE_BI_PLL_TEST_SE, 7 }, 202 }; 203 204 static const struct clk_parent_data gcc_parents_6[] = { 205 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 206 { .hw = &gpll0.clkr.hw }, 207 { .hw = &gpll9.clkr.hw }, 208 { .hw = &gpll0_out_even.clkr.hw }, 209 { .fw_name = "core_bi_pll_test_se" }, 210 }; 211 212 static const struct parent_map gcc_parent_map_7[] = { 213 { P_BI_TCXO, 0 }, 214 { P_GPLL0_OUT_MAIN, 1 }, 215 { P_AUD_REF_CLK, 2 }, 216 { P_GPLL0_OUT_EVEN, 6 }, 217 { P_CORE_BI_PLL_TEST_SE, 7 }, 218 }; 219 220 static const struct clk_parent_data gcc_parents_7[] = { 221 { .fw_name = "bi_tcxo", .name = "bi_tcxo" }, 222 { .hw = &gpll0.clkr.hw }, 223 { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" }, 224 { .hw = &gpll0_out_even.clkr.hw }, 225 { .fw_name = "core_bi_pll_test_se" }, 226 }; 227 228 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = { 229 F(19200000, P_BI_TCXO, 1, 0, 0), 230 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 231 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 232 { } 233 }; 234 235 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = { 236 .cmd_rcgr = 0x48014, 237 .mnd_width = 0, 238 .hid_width = 5, 239 .parent_map = gcc_parent_map_0, 240 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src, 241 .clkr.hw.init = &(struct clk_init_data){ 242 .name = "gcc_cpuss_ahb_clk_src", 243 .parent_data = gcc_parents_0, 244 .num_parents = ARRAY_SIZE(gcc_parents_0), 245 .flags = CLK_SET_RATE_PARENT, 246 .ops = &clk_rcg2_ops, 247 }, 248 }; 249 250 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { 251 F(19200000, P_BI_TCXO, 1, 0, 0), 252 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 253 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 254 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 255 { } 256 }; 257 258 static struct clk_rcg2 gcc_emac_ptp_clk_src = { 259 .cmd_rcgr = 0x6038, 260 .mnd_width = 0, 261 .hid_width = 5, 262 .parent_map = gcc_parent_map_5, 263 .freq_tbl = ftbl_gcc_emac_ptp_clk_src, 264 .clkr.hw.init = &(struct clk_init_data){ 265 .name = "gcc_emac_ptp_clk_src", 266 .parent_data = gcc_parents_5, 267 .num_parents = ARRAY_SIZE(gcc_parents_5), 268 .flags = CLK_SET_RATE_PARENT, 269 .ops = &clk_rcg2_ops, 270 }, 271 }; 272 273 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = { 274 F(2500000, P_BI_TCXO, 1, 25, 192), 275 F(5000000, P_BI_TCXO, 1, 25, 96), 276 F(19200000, P_BI_TCXO, 1, 0, 0), 277 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 278 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 279 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 280 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0), 281 { } 282 }; 283 284 static struct clk_rcg2 gcc_emac_rgmii_clk_src = { 285 .cmd_rcgr = 0x601c, 286 .mnd_width = 8, 287 .hid_width = 5, 288 .parent_map = gcc_parent_map_5, 289 .freq_tbl = ftbl_gcc_emac_rgmii_clk_src, 290 .clkr.hw.init = &(struct clk_init_data){ 291 .name = "gcc_emac_rgmii_clk_src", 292 .parent_data = gcc_parents_5, 293 .num_parents = ARRAY_SIZE(gcc_parents_5), 294 .flags = CLK_SET_RATE_PARENT, 295 .ops = &clk_rcg2_ops, 296 }, 297 }; 298 299 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 300 F(19200000, P_BI_TCXO, 1, 0, 0), 301 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 302 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 303 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 304 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 305 { } 306 }; 307 308 static struct clk_rcg2 gcc_gp1_clk_src = { 309 .cmd_rcgr = 0x64004, 310 .mnd_width = 8, 311 .hid_width = 5, 312 .parent_map = gcc_parent_map_1, 313 .freq_tbl = ftbl_gcc_gp1_clk_src, 314 .clkr.hw.init = &(struct clk_init_data){ 315 .name = "gcc_gp1_clk_src", 316 .parent_data = gcc_parents_1, 317 .num_parents = ARRAY_SIZE(gcc_parents_1), 318 .flags = CLK_SET_RATE_PARENT, 319 .ops = &clk_rcg2_ops, 320 }, 321 }; 322 323 static struct clk_rcg2 gcc_gp2_clk_src = { 324 .cmd_rcgr = 0x65004, 325 .mnd_width = 8, 326 .hid_width = 5, 327 .parent_map = gcc_parent_map_1, 328 .freq_tbl = ftbl_gcc_gp1_clk_src, 329 .clkr.hw.init = &(struct clk_init_data){ 330 .name = "gcc_gp2_clk_src", 331 .parent_data = gcc_parents_1, 332 .num_parents = ARRAY_SIZE(gcc_parents_1), 333 .flags = CLK_SET_RATE_PARENT, 334 .ops = &clk_rcg2_ops, 335 }, 336 }; 337 338 static struct clk_rcg2 gcc_gp3_clk_src = { 339 .cmd_rcgr = 0x66004, 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_gp3_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 const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 354 F(9600000, P_BI_TCXO, 2, 0, 0), 355 F(19200000, P_BI_TCXO, 1, 0, 0), 356 { } 357 }; 358 359 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 360 .cmd_rcgr = 0x6b02c, 361 .mnd_width = 16, 362 .hid_width = 5, 363 .parent_map = gcc_parent_map_2, 364 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 365 .clkr.hw.init = &(struct clk_init_data){ 366 .name = "gcc_pcie_0_aux_clk_src", 367 .parent_data = gcc_parents_2, 368 .num_parents = ARRAY_SIZE(gcc_parents_2), 369 .flags = CLK_SET_RATE_PARENT, 370 .ops = &clk_rcg2_ops, 371 }, 372 }; 373 374 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = { 375 .cmd_rcgr = 0x8d02c, 376 .mnd_width = 16, 377 .hid_width = 5, 378 .parent_map = gcc_parent_map_2, 379 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 380 .clkr.hw.init = &(struct clk_init_data){ 381 .name = "gcc_pcie_1_aux_clk_src", 382 .parent_data = gcc_parents_2, 383 .num_parents = ARRAY_SIZE(gcc_parents_2), 384 .flags = CLK_SET_RATE_PARENT, 385 .ops = &clk_rcg2_ops, 386 }, 387 }; 388 389 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = { 390 F(19200000, P_BI_TCXO, 1, 0, 0), 391 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 392 { } 393 }; 394 395 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = { 396 .cmd_rcgr = 0x6f014, 397 .mnd_width = 0, 398 .hid_width = 5, 399 .parent_map = gcc_parent_map_0, 400 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src, 401 .clkr.hw.init = &(struct clk_init_data){ 402 .name = "gcc_pcie_phy_refgen_clk_src", 403 .parent_data = gcc_parents_0, 404 .num_parents = ARRAY_SIZE(gcc_parents_0), 405 .flags = CLK_SET_RATE_PARENT, 406 .ops = &clk_rcg2_ops, 407 }, 408 }; 409 410 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 411 F(9600000, P_BI_TCXO, 2, 0, 0), 412 F(19200000, P_BI_TCXO, 1, 0, 0), 413 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 414 { } 415 }; 416 417 static struct clk_rcg2 gcc_pdm2_clk_src = { 418 .cmd_rcgr = 0x33010, 419 .mnd_width = 0, 420 .hid_width = 5, 421 .parent_map = gcc_parent_map_0, 422 .freq_tbl = ftbl_gcc_pdm2_clk_src, 423 .clkr.hw.init = &(struct clk_init_data){ 424 .name = "gcc_pdm2_clk_src", 425 .parent_data = gcc_parents_0, 426 .num_parents = ARRAY_SIZE(gcc_parents_0), 427 .flags = CLK_SET_RATE_PARENT, 428 .ops = &clk_rcg2_ops, 429 }, 430 }; 431 432 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = { 433 F(19200000, P_BI_TCXO, 1, 0, 0), 434 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 435 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 436 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 437 { } 438 }; 439 440 static struct clk_rcg2 gcc_qspi_core_clk_src = { 441 .cmd_rcgr = 0x4b008, 442 .mnd_width = 0, 443 .hid_width = 5, 444 .parent_map = gcc_parent_map_0, 445 .freq_tbl = ftbl_gcc_qspi_core_clk_src, 446 .clkr.hw.init = &(struct clk_init_data){ 447 .name = "gcc_qspi_core_clk_src", 448 .parent_data = gcc_parents_0, 449 .num_parents = ARRAY_SIZE(gcc_parents_0), 450 .flags = CLK_SET_RATE_PARENT, 451 .ops = &clk_rcg2_ops, 452 }, 453 }; 454 455 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 456 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625), 457 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625), 458 F(19200000, P_BI_TCXO, 1, 0, 0), 459 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625), 460 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75), 461 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25), 462 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75), 463 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15), 464 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25), 465 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 466 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375), 467 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75), 468 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625), 469 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0), 470 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75), 471 { } 472 }; 473 474 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 475 .cmd_rcgr = 0x17148, 476 .mnd_width = 16, 477 .hid_width = 5, 478 .parent_map = gcc_parent_map_0, 479 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 480 .clkr.hw.init = &(struct clk_init_data){ 481 .name = "gcc_qupv3_wrap0_s0_clk_src", 482 .parent_data = gcc_parents_0, 483 .num_parents = ARRAY_SIZE(gcc_parents_0), 484 .flags = CLK_SET_RATE_PARENT, 485 .ops = &clk_rcg2_ops, 486 }, 487 }; 488 489 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 490 .cmd_rcgr = 0x17278, 491 .mnd_width = 16, 492 .hid_width = 5, 493 .parent_map = gcc_parent_map_0, 494 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 495 .clkr.hw.init = &(struct clk_init_data){ 496 .name = "gcc_qupv3_wrap0_s1_clk_src", 497 .parent_data = gcc_parents_0, 498 .num_parents = ARRAY_SIZE(gcc_parents_0), 499 .flags = CLK_SET_RATE_PARENT, 500 .ops = &clk_rcg2_ops, 501 }, 502 }; 503 504 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 505 .cmd_rcgr = 0x173a8, 506 .mnd_width = 16, 507 .hid_width = 5, 508 .parent_map = gcc_parent_map_0, 509 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 510 .clkr.hw.init = &(struct clk_init_data){ 511 .name = "gcc_qupv3_wrap0_s2_clk_src", 512 .parent_data = gcc_parents_0, 513 .num_parents = ARRAY_SIZE(gcc_parents_0), 514 .flags = CLK_SET_RATE_PARENT, 515 .ops = &clk_rcg2_ops, 516 }, 517 }; 518 519 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 520 .cmd_rcgr = 0x174d8, 521 .mnd_width = 16, 522 .hid_width = 5, 523 .parent_map = gcc_parent_map_0, 524 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 525 .clkr.hw.init = &(struct clk_init_data){ 526 .name = "gcc_qupv3_wrap0_s3_clk_src", 527 .parent_data = gcc_parents_0, 528 .num_parents = ARRAY_SIZE(gcc_parents_0), 529 .flags = CLK_SET_RATE_PARENT, 530 .ops = &clk_rcg2_ops, 531 }, 532 }; 533 534 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 535 .cmd_rcgr = 0x17608, 536 .mnd_width = 16, 537 .hid_width = 5, 538 .parent_map = gcc_parent_map_0, 539 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 540 .clkr.hw.init = &(struct clk_init_data){ 541 .name = "gcc_qupv3_wrap0_s4_clk_src", 542 .parent_data = gcc_parents_0, 543 .num_parents = ARRAY_SIZE(gcc_parents_0), 544 .flags = CLK_SET_RATE_PARENT, 545 .ops = &clk_rcg2_ops, 546 }, 547 }; 548 549 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 550 .cmd_rcgr = 0x17738, 551 .mnd_width = 16, 552 .hid_width = 5, 553 .parent_map = gcc_parent_map_0, 554 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 555 .clkr.hw.init = &(struct clk_init_data){ 556 .name = "gcc_qupv3_wrap0_s5_clk_src", 557 .parent_data = gcc_parents_0, 558 .num_parents = ARRAY_SIZE(gcc_parents_0), 559 .flags = CLK_SET_RATE_PARENT, 560 .ops = &clk_rcg2_ops, 561 }, 562 }; 563 564 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 565 .cmd_rcgr = 0x17868, 566 .mnd_width = 16, 567 .hid_width = 5, 568 .parent_map = gcc_parent_map_0, 569 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 570 .clkr.hw.init = &(struct clk_init_data){ 571 .name = "gcc_qupv3_wrap0_s6_clk_src", 572 .parent_data = gcc_parents_0, 573 .num_parents = ARRAY_SIZE(gcc_parents_0), 574 .flags = CLK_SET_RATE_PARENT, 575 .ops = &clk_rcg2_ops, 576 }, 577 }; 578 579 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 580 .cmd_rcgr = 0x17998, 581 .mnd_width = 16, 582 .hid_width = 5, 583 .parent_map = gcc_parent_map_0, 584 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 585 .clkr.hw.init = &(struct clk_init_data){ 586 .name = "gcc_qupv3_wrap0_s7_clk_src", 587 .parent_data = gcc_parents_0, 588 .num_parents = ARRAY_SIZE(gcc_parents_0), 589 .flags = CLK_SET_RATE_PARENT, 590 .ops = &clk_rcg2_ops, 591 }, 592 }; 593 594 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 595 .cmd_rcgr = 0x18148, 596 .mnd_width = 16, 597 .hid_width = 5, 598 .parent_map = gcc_parent_map_0, 599 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 600 .clkr.hw.init = &(struct clk_init_data){ 601 .name = "gcc_qupv3_wrap1_s0_clk_src", 602 .parent_data = gcc_parents_0, 603 .num_parents = ARRAY_SIZE(gcc_parents_0), 604 .flags = CLK_SET_RATE_PARENT, 605 .ops = &clk_rcg2_ops, 606 }, 607 }; 608 609 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 610 .cmd_rcgr = 0x18278, 611 .mnd_width = 16, 612 .hid_width = 5, 613 .parent_map = gcc_parent_map_0, 614 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 615 .clkr.hw.init = &(struct clk_init_data){ 616 .name = "gcc_qupv3_wrap1_s1_clk_src", 617 .parent_data = gcc_parents_0, 618 .num_parents = ARRAY_SIZE(gcc_parents_0), 619 .flags = CLK_SET_RATE_PARENT, 620 .ops = &clk_rcg2_ops, 621 }, 622 }; 623 624 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 625 .cmd_rcgr = 0x183a8, 626 .mnd_width = 16, 627 .hid_width = 5, 628 .parent_map = gcc_parent_map_0, 629 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 630 .clkr.hw.init = &(struct clk_init_data){ 631 .name = "gcc_qupv3_wrap1_s2_clk_src", 632 .parent_data = gcc_parents_0, 633 .num_parents = ARRAY_SIZE(gcc_parents_0), 634 .flags = CLK_SET_RATE_PARENT, 635 .ops = &clk_rcg2_ops, 636 }, 637 }; 638 639 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 640 .cmd_rcgr = 0x184d8, 641 .mnd_width = 16, 642 .hid_width = 5, 643 .parent_map = gcc_parent_map_0, 644 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 645 .clkr.hw.init = &(struct clk_init_data){ 646 .name = "gcc_qupv3_wrap1_s3_clk_src", 647 .parent_data = gcc_parents_0, 648 .num_parents = ARRAY_SIZE(gcc_parents_0), 649 .flags = CLK_SET_RATE_PARENT, 650 .ops = &clk_rcg2_ops, 651 }, 652 }; 653 654 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 655 .cmd_rcgr = 0x18608, 656 .mnd_width = 16, 657 .hid_width = 5, 658 .parent_map = gcc_parent_map_0, 659 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 660 .clkr.hw.init = &(struct clk_init_data){ 661 .name = "gcc_qupv3_wrap1_s4_clk_src", 662 .parent_data = gcc_parents_0, 663 .num_parents = ARRAY_SIZE(gcc_parents_0), 664 .flags = CLK_SET_RATE_PARENT, 665 .ops = &clk_rcg2_ops, 666 }, 667 }; 668 669 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 670 .cmd_rcgr = 0x18738, 671 .mnd_width = 16, 672 .hid_width = 5, 673 .parent_map = gcc_parent_map_0, 674 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 675 .clkr.hw.init = &(struct clk_init_data){ 676 .name = "gcc_qupv3_wrap1_s5_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 684 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = { 685 .cmd_rcgr = 0x1e148, 686 .mnd_width = 16, 687 .hid_width = 5, 688 .parent_map = gcc_parent_map_0, 689 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 690 .clkr.hw.init = &(struct clk_init_data){ 691 .name = "gcc_qupv3_wrap2_s0_clk_src", 692 .parent_data = gcc_parents_0, 693 .num_parents = ARRAY_SIZE(gcc_parents_0), 694 .flags = CLK_SET_RATE_PARENT, 695 .ops = &clk_rcg2_ops, 696 }, 697 }; 698 699 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = { 700 .cmd_rcgr = 0x1e278, 701 .mnd_width = 16, 702 .hid_width = 5, 703 .parent_map = gcc_parent_map_0, 704 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 705 .clkr.hw.init = &(struct clk_init_data){ 706 .name = "gcc_qupv3_wrap2_s1_clk_src", 707 .parent_data = gcc_parents_0, 708 .num_parents = ARRAY_SIZE(gcc_parents_0), 709 .flags = CLK_SET_RATE_PARENT, 710 .ops = &clk_rcg2_ops, 711 }, 712 }; 713 714 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = { 715 .cmd_rcgr = 0x1e3a8, 716 .mnd_width = 16, 717 .hid_width = 5, 718 .parent_map = gcc_parent_map_0, 719 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 720 .clkr.hw.init = &(struct clk_init_data){ 721 .name = "gcc_qupv3_wrap2_s2_clk_src", 722 .parent_data = gcc_parents_0, 723 .num_parents = ARRAY_SIZE(gcc_parents_0), 724 .flags = CLK_SET_RATE_PARENT, 725 .ops = &clk_rcg2_ops, 726 }, 727 }; 728 729 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = { 730 .cmd_rcgr = 0x1e4d8, 731 .mnd_width = 16, 732 .hid_width = 5, 733 .parent_map = gcc_parent_map_0, 734 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 735 .clkr.hw.init = &(struct clk_init_data){ 736 .name = "gcc_qupv3_wrap2_s3_clk_src", 737 .parent_data = gcc_parents_0, 738 .num_parents = ARRAY_SIZE(gcc_parents_0), 739 .flags = CLK_SET_RATE_PARENT, 740 .ops = &clk_rcg2_ops, 741 }, 742 }; 743 744 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = { 745 .cmd_rcgr = 0x1e608, 746 .mnd_width = 16, 747 .hid_width = 5, 748 .parent_map = gcc_parent_map_0, 749 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 750 .clkr.hw.init = &(struct clk_init_data){ 751 .name = "gcc_qupv3_wrap2_s4_clk_src", 752 .parent_data = gcc_parents_0, 753 .num_parents = ARRAY_SIZE(gcc_parents_0), 754 .flags = CLK_SET_RATE_PARENT, 755 .ops = &clk_rcg2_ops, 756 }, 757 }; 758 759 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = { 760 .cmd_rcgr = 0x1e738, 761 .mnd_width = 16, 762 .hid_width = 5, 763 .parent_map = gcc_parent_map_0, 764 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 765 .clkr.hw.init = &(struct clk_init_data){ 766 .name = "gcc_qupv3_wrap2_s5_clk_src", 767 .parent_data = gcc_parents_0, 768 .num_parents = ARRAY_SIZE(gcc_parents_0), 769 .flags = CLK_SET_RATE_PARENT, 770 .ops = &clk_rcg2_ops, 771 }, 772 }; 773 774 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 775 F(400000, P_BI_TCXO, 12, 1, 4), 776 F(9600000, P_BI_TCXO, 2, 0, 0), 777 F(19200000, P_BI_TCXO, 1, 0, 0), 778 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), 779 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 780 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 781 F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0), 782 { } 783 }; 784 785 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 786 .cmd_rcgr = 0x1400c, 787 .mnd_width = 8, 788 .hid_width = 5, 789 .parent_map = gcc_parent_map_6, 790 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 791 .clkr.hw.init = &(struct clk_init_data){ 792 .name = "gcc_sdcc2_apps_clk_src", 793 .parent_data = gcc_parents_6, 794 .num_parents = ARRAY_SIZE(gcc_parents_6), 795 .flags = CLK_SET_RATE_PARENT, 796 .ops = &clk_rcg2_floor_ops, 797 }, 798 }; 799 800 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = { 801 F(400000, P_BI_TCXO, 12, 1, 4), 802 F(9600000, P_BI_TCXO, 2, 0, 0), 803 F(19200000, P_BI_TCXO, 1, 0, 0), 804 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), 805 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 806 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 807 { } 808 }; 809 810 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = { 811 .cmd_rcgr = 0x1600c, 812 .mnd_width = 8, 813 .hid_width = 5, 814 .parent_map = gcc_parent_map_3, 815 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src, 816 .clkr.hw.init = &(struct clk_init_data){ 817 .name = "gcc_sdcc4_apps_clk_src", 818 .parent_data = gcc_parents_3, 819 .num_parents = ARRAY_SIZE(gcc_parents_3), 820 .flags = CLK_SET_RATE_PARENT, 821 .ops = &clk_rcg2_floor_ops, 822 }, 823 }; 824 825 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = { 826 F(105495, P_BI_TCXO, 2, 1, 91), 827 { } 828 }; 829 830 static struct clk_rcg2 gcc_tsif_ref_clk_src = { 831 .cmd_rcgr = 0x36010, 832 .mnd_width = 8, 833 .hid_width = 5, 834 .parent_map = gcc_parent_map_7, 835 .freq_tbl = ftbl_gcc_tsif_ref_clk_src, 836 .clkr.hw.init = &(struct clk_init_data){ 837 .name = "gcc_tsif_ref_clk_src", 838 .parent_data = gcc_parents_7, 839 .num_parents = ARRAY_SIZE(gcc_parents_7), 840 .flags = CLK_SET_RATE_PARENT, 841 .ops = &clk_rcg2_ops, 842 }, 843 }; 844 845 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = { 846 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 847 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 848 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 849 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 850 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 851 { } 852 }; 853 854 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = { 855 .cmd_rcgr = 0x75020, 856 .mnd_width = 8, 857 .hid_width = 5, 858 .parent_map = gcc_parent_map_0, 859 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src, 860 .clkr.hw.init = &(struct clk_init_data){ 861 .name = "gcc_ufs_card_axi_clk_src", 862 .parent_data = gcc_parents_0, 863 .num_parents = ARRAY_SIZE(gcc_parents_0), 864 .flags = CLK_SET_RATE_PARENT, 865 .ops = &clk_rcg2_ops, 866 }, 867 }; 868 869 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = { 870 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 871 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 872 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 873 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 874 { } 875 }; 876 877 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = { 878 .cmd_rcgr = 0x75060, 879 .mnd_width = 0, 880 .hid_width = 5, 881 .parent_map = gcc_parent_map_0, 882 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 883 .clkr.hw.init = &(struct clk_init_data){ 884 .name = "gcc_ufs_card_ice_core_clk_src", 885 .parent_data = gcc_parents_0, 886 .num_parents = ARRAY_SIZE(gcc_parents_0), 887 .flags = CLK_SET_RATE_PARENT, 888 .ops = &clk_rcg2_ops, 889 }, 890 }; 891 892 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = { 893 F(19200000, P_BI_TCXO, 1, 0, 0), 894 { } 895 }; 896 897 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = { 898 .cmd_rcgr = 0x75094, 899 .mnd_width = 0, 900 .hid_width = 5, 901 .parent_map = gcc_parent_map_4, 902 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src, 903 .clkr.hw.init = &(struct clk_init_data){ 904 .name = "gcc_ufs_card_phy_aux_clk_src", 905 .parent_data = gcc_parents_4, 906 .num_parents = ARRAY_SIZE(gcc_parents_4), 907 .flags = CLK_SET_RATE_PARENT, 908 .ops = &clk_rcg2_ops, 909 }, 910 }; 911 912 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = { 913 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 914 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 915 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 916 { } 917 }; 918 919 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = { 920 .cmd_rcgr = 0x75078, 921 .mnd_width = 0, 922 .hid_width = 5, 923 .parent_map = gcc_parent_map_0, 924 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src, 925 .clkr.hw.init = &(struct clk_init_data){ 926 .name = "gcc_ufs_card_unipro_core_clk_src", 927 .parent_data = gcc_parents_0, 928 .num_parents = ARRAY_SIZE(gcc_parents_0), 929 .flags = CLK_SET_RATE_PARENT, 930 .ops = &clk_rcg2_ops, 931 }, 932 }; 933 934 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 935 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 936 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 937 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 938 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 939 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 940 { } 941 }; 942 943 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 944 .cmd_rcgr = 0x77020, 945 .mnd_width = 8, 946 .hid_width = 5, 947 .parent_map = gcc_parent_map_0, 948 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 949 .clkr.hw.init = &(struct clk_init_data){ 950 .name = "gcc_ufs_phy_axi_clk_src", 951 .parent_data = gcc_parents_0, 952 .num_parents = ARRAY_SIZE(gcc_parents_0), 953 .flags = CLK_SET_RATE_PARENT, 954 .ops = &clk_rcg2_ops, 955 }, 956 }; 957 958 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 959 .cmd_rcgr = 0x77060, 960 .mnd_width = 0, 961 .hid_width = 5, 962 .parent_map = gcc_parent_map_0, 963 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 964 .clkr.hw.init = &(struct clk_init_data){ 965 .name = "gcc_ufs_phy_ice_core_clk_src", 966 .parent_data = gcc_parents_0, 967 .num_parents = ARRAY_SIZE(gcc_parents_0), 968 .flags = CLK_SET_RATE_PARENT, 969 .ops = &clk_rcg2_ops, 970 }, 971 }; 972 973 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 974 .cmd_rcgr = 0x77094, 975 .mnd_width = 0, 976 .hid_width = 5, 977 .parent_map = gcc_parent_map_4, 978 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 979 .clkr.hw.init = &(struct clk_init_data){ 980 .name = "gcc_ufs_phy_phy_aux_clk_src", 981 .parent_data = gcc_parents_4, 982 .num_parents = ARRAY_SIZE(gcc_parents_4), 983 .flags = CLK_SET_RATE_PARENT, 984 .ops = &clk_rcg2_ops, 985 }, 986 }; 987 988 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 989 .cmd_rcgr = 0x77078, 990 .mnd_width = 0, 991 .hid_width = 5, 992 .parent_map = gcc_parent_map_0, 993 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src, 994 .clkr.hw.init = &(struct clk_init_data){ 995 .name = "gcc_ufs_phy_unipro_core_clk_src", 996 .parent_data = gcc_parents_0, 997 .num_parents = ARRAY_SIZE(gcc_parents_0), 998 .flags = CLK_SET_RATE_PARENT, 999 .ops = &clk_rcg2_ops, 1000 }, 1001 }; 1002 1003 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 1004 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0), 1005 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0), 1006 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 1007 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 1008 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 1009 { } 1010 }; 1011 1012 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 1013 .cmd_rcgr = 0xf01c, 1014 .mnd_width = 8, 1015 .hid_width = 5, 1016 .parent_map = gcc_parent_map_0, 1017 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1018 .clkr.hw.init = &(struct clk_init_data){ 1019 .name = "gcc_usb30_prim_master_clk_src", 1020 .parent_data = gcc_parents_0, 1021 .num_parents = ARRAY_SIZE(gcc_parents_0), 1022 .flags = CLK_SET_RATE_PARENT, 1023 .ops = &clk_rcg2_ops, 1024 }, 1025 }; 1026 1027 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 1028 F(19200000, P_BI_TCXO, 1, 0, 0), 1029 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0), 1030 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0), 1031 { } 1032 }; 1033 1034 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 1035 .cmd_rcgr = 0xf034, 1036 .mnd_width = 0, 1037 .hid_width = 5, 1038 .parent_map = gcc_parent_map_0, 1039 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1040 .clkr.hw.init = &(struct clk_init_data){ 1041 .name = "gcc_usb30_prim_mock_utmi_clk_src", 1042 .parent_data = gcc_parents_0, 1043 .num_parents = ARRAY_SIZE(gcc_parents_0), 1044 .flags = CLK_SET_RATE_PARENT, 1045 .ops = &clk_rcg2_ops, 1046 }, 1047 }; 1048 1049 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = { 1050 .cmd_rcgr = 0x1001c, 1051 .mnd_width = 8, 1052 .hid_width = 5, 1053 .parent_map = gcc_parent_map_0, 1054 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 1055 .clkr.hw.init = &(struct clk_init_data){ 1056 .name = "gcc_usb30_sec_master_clk_src", 1057 .parent_data = gcc_parents_0, 1058 .num_parents = ARRAY_SIZE(gcc_parents_0), 1059 .flags = CLK_SET_RATE_PARENT, 1060 .ops = &clk_rcg2_ops, 1061 }, 1062 }; 1063 1064 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = { 1065 .cmd_rcgr = 0x10034, 1066 .mnd_width = 0, 1067 .hid_width = 5, 1068 .parent_map = gcc_parent_map_0, 1069 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 1070 .clkr.hw.init = &(struct clk_init_data){ 1071 .name = "gcc_usb30_sec_mock_utmi_clk_src", 1072 .parent_data = gcc_parents_0, 1073 .num_parents = ARRAY_SIZE(gcc_parents_0), 1074 .flags = CLK_SET_RATE_PARENT, 1075 .ops = &clk_rcg2_ops, 1076 }, 1077 }; 1078 1079 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1080 .cmd_rcgr = 0xf060, 1081 .mnd_width = 0, 1082 .hid_width = 5, 1083 .parent_map = gcc_parent_map_2, 1084 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src, 1085 .clkr.hw.init = &(struct clk_init_data){ 1086 .name = "gcc_usb3_prim_phy_aux_clk_src", 1087 .parent_data = gcc_parents_2, 1088 .num_parents = ARRAY_SIZE(gcc_parents_2), 1089 .flags = CLK_SET_RATE_PARENT, 1090 .ops = &clk_rcg2_ops, 1091 }, 1092 }; 1093 1094 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = { 1095 .cmd_rcgr = 0x10060, 1096 .mnd_width = 0, 1097 .hid_width = 5, 1098 .parent_map = gcc_parent_map_2, 1099 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src, 1100 .clkr.hw.init = &(struct clk_init_data){ 1101 .name = "gcc_usb3_sec_phy_aux_clk_src", 1102 .parent_data = gcc_parents_2, 1103 .num_parents = ARRAY_SIZE(gcc_parents_2), 1104 .flags = CLK_SET_RATE_PARENT, 1105 .ops = &clk_rcg2_ops, 1106 }, 1107 }; 1108 1109 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = { 1110 .halt_reg = 0x90018, 1111 .halt_check = BRANCH_HALT, 1112 .clkr = { 1113 .enable_reg = 0x90018, 1114 .enable_mask = BIT(0), 1115 .hw.init = &(struct clk_init_data){ 1116 .name = "gcc_aggre_noc_pcie_tbu_clk", 1117 .ops = &clk_branch2_ops, 1118 }, 1119 }, 1120 }; 1121 1122 static struct clk_branch gcc_aggre_ufs_card_axi_clk = { 1123 .halt_reg = 0x750c0, 1124 .halt_check = BRANCH_HALT, 1125 .hwcg_reg = 0x750c0, 1126 .hwcg_bit = 1, 1127 .clkr = { 1128 .enable_reg = 0x750c0, 1129 .enable_mask = BIT(0), 1130 .hw.init = &(struct clk_init_data){ 1131 .name = "gcc_aggre_ufs_card_axi_clk", 1132 .parent_hws = (const struct clk_hw *[]){ 1133 &gcc_ufs_card_axi_clk_src.clkr.hw }, 1134 .num_parents = 1, 1135 .flags = CLK_SET_RATE_PARENT, 1136 .ops = &clk_branch2_ops, 1137 }, 1138 }, 1139 }; 1140 1141 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = { 1142 .halt_reg = 0x750c0, 1143 .halt_check = BRANCH_HALT, 1144 .hwcg_reg = 0x750c0, 1145 .hwcg_bit = 1, 1146 .clkr = { 1147 .enable_reg = 0x750c0, 1148 .enable_mask = BIT(1), 1149 .hw.init = &(struct clk_init_data){ 1150 .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk", 1151 .parent_hws = (const struct clk_hw *[]){ 1152 &gcc_aggre_ufs_card_axi_clk.clkr.hw }, 1153 .num_parents = 1, 1154 .flags = CLK_SET_RATE_PARENT, 1155 .ops = &clk_branch_simple_ops, 1156 }, 1157 }, 1158 }; 1159 1160 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 1161 .halt_reg = 0x770c0, 1162 .halt_check = BRANCH_HALT, 1163 .hwcg_reg = 0x770c0, 1164 .hwcg_bit = 1, 1165 .clkr = { 1166 .enable_reg = 0x770c0, 1167 .enable_mask = BIT(0), 1168 .hw.init = &(struct clk_init_data){ 1169 .name = "gcc_aggre_ufs_phy_axi_clk", 1170 .parent_hws = (const struct clk_hw *[]){ 1171 &gcc_ufs_phy_axi_clk_src.clkr.hw }, 1172 .num_parents = 1, 1173 .flags = CLK_SET_RATE_PARENT, 1174 .ops = &clk_branch2_ops, 1175 }, 1176 }, 1177 }; 1178 1179 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 1180 .halt_reg = 0x770c0, 1181 .halt_check = BRANCH_HALT, 1182 .hwcg_reg = 0x770c0, 1183 .hwcg_bit = 1, 1184 .clkr = { 1185 .enable_reg = 0x770c0, 1186 .enable_mask = BIT(1), 1187 .hw.init = &(struct clk_init_data){ 1188 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 1189 .parent_hws = (const struct clk_hw *[]){ 1190 &gcc_aggre_ufs_phy_axi_clk.clkr.hw }, 1191 .num_parents = 1, 1192 .flags = CLK_SET_RATE_PARENT, 1193 .ops = &clk_branch_simple_ops, 1194 }, 1195 }, 1196 }; 1197 1198 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 1199 .halt_reg = 0xf07c, 1200 .halt_check = BRANCH_HALT, 1201 .clkr = { 1202 .enable_reg = 0xf07c, 1203 .enable_mask = BIT(0), 1204 .hw.init = &(struct clk_init_data){ 1205 .name = "gcc_aggre_usb3_prim_axi_clk", 1206 .parent_hws = (const struct clk_hw *[]){ 1207 &gcc_usb30_prim_master_clk_src.clkr.hw }, 1208 .num_parents = 1, 1209 .flags = CLK_SET_RATE_PARENT, 1210 .ops = &clk_branch2_ops, 1211 }, 1212 }, 1213 }; 1214 1215 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = { 1216 .halt_reg = 0x1007c, 1217 .halt_check = BRANCH_HALT, 1218 .clkr = { 1219 .enable_reg = 0x1007c, 1220 .enable_mask = BIT(0), 1221 .hw.init = &(struct clk_init_data){ 1222 .name = "gcc_aggre_usb3_sec_axi_clk", 1223 .parent_hws = (const struct clk_hw *[]){ 1224 &gcc_usb30_sec_master_clk_src.clkr.hw }, 1225 .num_parents = 1, 1226 .flags = CLK_SET_RATE_PARENT, 1227 .ops = &clk_branch2_ops, 1228 }, 1229 }, 1230 }; 1231 1232 static struct clk_branch gcc_boot_rom_ahb_clk = { 1233 .halt_reg = 0x38004, 1234 .halt_check = BRANCH_HALT_VOTED, 1235 .hwcg_reg = 0x38004, 1236 .hwcg_bit = 1, 1237 .clkr = { 1238 .enable_reg = 0x52004, 1239 .enable_mask = BIT(10), 1240 .hw.init = &(struct clk_init_data){ 1241 .name = "gcc_boot_rom_ahb_clk", 1242 .ops = &clk_branch2_ops, 1243 }, 1244 }, 1245 }; 1246 1247 /* 1248 * Clock ON depends on external parent 'config noc', so cant poll 1249 * delay and also mark as crtitical for camss boot 1250 */ 1251 static struct clk_branch gcc_camera_ahb_clk = { 1252 .halt_reg = 0xb008, 1253 .halt_check = BRANCH_HALT_DELAY, 1254 .hwcg_reg = 0xb008, 1255 .hwcg_bit = 1, 1256 .clkr = { 1257 .enable_reg = 0xb008, 1258 .enable_mask = BIT(0), 1259 .hw.init = &(struct clk_init_data){ 1260 .name = "gcc_camera_ahb_clk", 1261 .flags = CLK_IS_CRITICAL, 1262 .ops = &clk_branch2_ops, 1263 }, 1264 }, 1265 }; 1266 1267 static struct clk_branch gcc_camera_hf_axi_clk = { 1268 .halt_reg = 0xb030, 1269 .halt_check = BRANCH_HALT, 1270 .clkr = { 1271 .enable_reg = 0xb030, 1272 .enable_mask = BIT(0), 1273 .hw.init = &(struct clk_init_data){ 1274 .name = "gcc_camera_hf_axi_clk", 1275 .ops = &clk_branch2_ops, 1276 }, 1277 }, 1278 }; 1279 1280 static struct clk_branch gcc_camera_sf_axi_clk = { 1281 .halt_reg = 0xb034, 1282 .halt_check = BRANCH_HALT, 1283 .clkr = { 1284 .enable_reg = 0xb034, 1285 .enable_mask = BIT(0), 1286 .hw.init = &(struct clk_init_data){ 1287 .name = "gcc_camera_sf_axi_clk", 1288 .ops = &clk_branch2_ops, 1289 }, 1290 }, 1291 }; 1292 1293 /* XO critical input to camss, so no need to poll */ 1294 static struct clk_branch gcc_camera_xo_clk = { 1295 .halt_reg = 0xb044, 1296 .halt_check = BRANCH_HALT_DELAY, 1297 .clkr = { 1298 .enable_reg = 0xb044, 1299 .enable_mask = BIT(0), 1300 .hw.init = &(struct clk_init_data){ 1301 .name = "gcc_camera_xo_clk", 1302 .flags = CLK_IS_CRITICAL, 1303 .ops = &clk_branch2_ops, 1304 }, 1305 }, 1306 }; 1307 1308 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1309 .halt_reg = 0xf078, 1310 .halt_check = BRANCH_HALT, 1311 .clkr = { 1312 .enable_reg = 0xf078, 1313 .enable_mask = BIT(0), 1314 .hw.init = &(struct clk_init_data){ 1315 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1316 .parent_hws = (const struct clk_hw *[]){ 1317 &gcc_usb30_prim_master_clk_src.clkr.hw }, 1318 .num_parents = 1, 1319 .flags = CLK_SET_RATE_PARENT, 1320 .ops = &clk_branch2_ops, 1321 }, 1322 }, 1323 }; 1324 1325 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = { 1326 .halt_reg = 0x10078, 1327 .halt_check = BRANCH_HALT, 1328 .clkr = { 1329 .enable_reg = 0x10078, 1330 .enable_mask = BIT(0), 1331 .hw.init = &(struct clk_init_data){ 1332 .name = "gcc_cfg_noc_usb3_sec_axi_clk", 1333 .parent_hws = (const struct clk_hw *[]){ 1334 &gcc_usb30_sec_master_clk_src.clkr.hw }, 1335 .num_parents = 1, 1336 .flags = CLK_SET_RATE_PARENT, 1337 .ops = &clk_branch2_ops, 1338 }, 1339 }, 1340 }; 1341 1342 static struct clk_branch gcc_cpuss_ahb_clk = { 1343 .halt_reg = 0x48000, 1344 .halt_check = BRANCH_HALT_VOTED, 1345 .clkr = { 1346 .enable_reg = 0x52004, 1347 .enable_mask = BIT(21), 1348 .hw.init = &(struct clk_init_data){ 1349 .name = "gcc_cpuss_ahb_clk", 1350 .parent_hws = (const struct clk_hw *[]){ 1351 &gcc_cpuss_ahb_clk_src.clkr.hw }, 1352 .num_parents = 1, 1353 /* required for cpuss */ 1354 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1355 .ops = &clk_branch2_ops, 1356 }, 1357 }, 1358 }; 1359 1360 static struct clk_branch gcc_cpuss_dvm_bus_clk = { 1361 .halt_reg = 0x48190, 1362 .halt_check = BRANCH_HALT, 1363 .clkr = { 1364 .enable_reg = 0x48190, 1365 .enable_mask = BIT(0), 1366 .hw.init = &(struct clk_init_data){ 1367 .name = "gcc_cpuss_dvm_bus_clk", 1368 /* required for cpuss */ 1369 .flags = CLK_IS_CRITICAL, 1370 .ops = &clk_branch2_ops, 1371 }, 1372 }, 1373 }; 1374 1375 static struct clk_branch gcc_cpuss_gnoc_clk = { 1376 .halt_reg = 0x48004, 1377 .halt_check = BRANCH_HALT_VOTED, 1378 .hwcg_reg = 0x48004, 1379 .hwcg_bit = 1, 1380 .clkr = { 1381 .enable_reg = 0x52004, 1382 .enable_mask = BIT(22), 1383 .hw.init = &(struct clk_init_data){ 1384 .name = "gcc_cpuss_gnoc_clk", 1385 /* required for cpuss */ 1386 .flags = CLK_IS_CRITICAL, 1387 .ops = &clk_branch2_ops, 1388 }, 1389 }, 1390 }; 1391 1392 static struct clk_branch gcc_cpuss_rbcpr_clk = { 1393 .halt_reg = 0x48008, 1394 .halt_check = BRANCH_HALT, 1395 .clkr = { 1396 .enable_reg = 0x48008, 1397 .enable_mask = BIT(0), 1398 .hw.init = &(struct clk_init_data){ 1399 .name = "gcc_cpuss_rbcpr_clk", 1400 .ops = &clk_branch2_ops, 1401 }, 1402 }, 1403 }; 1404 1405 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1406 .halt_reg = 0x71154, 1407 .halt_check = BRANCH_VOTED, 1408 .clkr = { 1409 .enable_reg = 0x71154, 1410 .enable_mask = BIT(0), 1411 .hw.init = &(struct clk_init_data){ 1412 .name = "gcc_ddrss_gpu_axi_clk", 1413 .ops = &clk_branch2_ops, 1414 }, 1415 }, 1416 }; 1417 1418 /* 1419 * Clock ON depends on external parent 'config noc', so cant poll 1420 * delay and also mark as crtitical for disp boot 1421 */ 1422 static struct clk_branch gcc_disp_ahb_clk = { 1423 .halt_reg = 0xb00c, 1424 .halt_check = BRANCH_HALT_DELAY, 1425 .hwcg_reg = 0xb00c, 1426 .hwcg_bit = 1, 1427 .clkr = { 1428 .enable_reg = 0xb00c, 1429 .enable_mask = BIT(0), 1430 .hw.init = &(struct clk_init_data){ 1431 .name = "gcc_disp_ahb_clk", 1432 .flags = CLK_IS_CRITICAL, 1433 .ops = &clk_branch2_ops, 1434 }, 1435 }, 1436 }; 1437 1438 static struct clk_branch gcc_disp_hf_axi_clk = { 1439 .halt_reg = 0xb038, 1440 .halt_check = BRANCH_HALT, 1441 .clkr = { 1442 .enable_reg = 0xb038, 1443 .enable_mask = BIT(0), 1444 .hw.init = &(struct clk_init_data){ 1445 .name = "gcc_disp_hf_axi_clk", 1446 .ops = &clk_branch2_ops, 1447 }, 1448 }, 1449 }; 1450 1451 static struct clk_branch gcc_disp_sf_axi_clk = { 1452 .halt_reg = 0xb03c, 1453 .halt_check = BRANCH_HALT, 1454 .clkr = { 1455 .enable_reg = 0xb03c, 1456 .enable_mask = BIT(0), 1457 .hw.init = &(struct clk_init_data){ 1458 .name = "gcc_disp_sf_axi_clk", 1459 .ops = &clk_branch2_ops, 1460 }, 1461 }, 1462 }; 1463 1464 /* XO critical input to disp, so no need to poll */ 1465 static struct clk_branch gcc_disp_xo_clk = { 1466 .halt_reg = 0xb048, 1467 .halt_check = BRANCH_HALT_DELAY, 1468 .clkr = { 1469 .enable_reg = 0xb048, 1470 .enable_mask = BIT(0), 1471 .hw.init = &(struct clk_init_data){ 1472 .name = "gcc_disp_xo_clk", 1473 .flags = CLK_IS_CRITICAL, 1474 .ops = &clk_branch2_ops, 1475 }, 1476 }, 1477 }; 1478 1479 static struct clk_branch gcc_emac_axi_clk = { 1480 .halt_reg = 0x6010, 1481 .halt_check = BRANCH_HALT, 1482 .clkr = { 1483 .enable_reg = 0x6010, 1484 .enable_mask = BIT(0), 1485 .hw.init = &(struct clk_init_data){ 1486 .name = "gcc_emac_axi_clk", 1487 .ops = &clk_branch2_ops, 1488 }, 1489 }, 1490 }; 1491 1492 static struct clk_branch gcc_emac_ptp_clk = { 1493 .halt_reg = 0x6034, 1494 .halt_check = BRANCH_HALT, 1495 .clkr = { 1496 .enable_reg = 0x6034, 1497 .enable_mask = BIT(0), 1498 .hw.init = &(struct clk_init_data){ 1499 .name = "gcc_emac_ptp_clk", 1500 .parent_hws = (const struct clk_hw *[]){ 1501 &gcc_emac_ptp_clk_src.clkr.hw }, 1502 .num_parents = 1, 1503 .flags = CLK_SET_RATE_PARENT, 1504 .ops = &clk_branch2_ops, 1505 }, 1506 }, 1507 }; 1508 1509 static struct clk_branch gcc_emac_rgmii_clk = { 1510 .halt_reg = 0x6018, 1511 .halt_check = BRANCH_HALT, 1512 .clkr = { 1513 .enable_reg = 0x6018, 1514 .enable_mask = BIT(0), 1515 .hw.init = &(struct clk_init_data){ 1516 .name = "gcc_emac_rgmii_clk", 1517 .parent_hws = (const struct clk_hw *[]){ 1518 &gcc_emac_rgmii_clk_src.clkr.hw }, 1519 .num_parents = 1, 1520 .flags = CLK_SET_RATE_PARENT, 1521 .ops = &clk_branch2_ops, 1522 }, 1523 }, 1524 }; 1525 1526 static struct clk_branch gcc_emac_slv_ahb_clk = { 1527 .halt_reg = 0x6014, 1528 .halt_check = BRANCH_HALT, 1529 .hwcg_reg = 0x6014, 1530 .hwcg_bit = 1, 1531 .clkr = { 1532 .enable_reg = 0x6014, 1533 .enable_mask = BIT(0), 1534 .hw.init = &(struct clk_init_data){ 1535 .name = "gcc_emac_slv_ahb_clk", 1536 .ops = &clk_branch2_ops, 1537 }, 1538 }, 1539 }; 1540 1541 static struct clk_branch gcc_gp1_clk = { 1542 .halt_reg = 0x64000, 1543 .halt_check = BRANCH_HALT, 1544 .clkr = { 1545 .enable_reg = 0x64000, 1546 .enable_mask = BIT(0), 1547 .hw.init = &(struct clk_init_data){ 1548 .name = "gcc_gp1_clk", 1549 .parent_hws = (const struct clk_hw *[]){ 1550 &gcc_gp1_clk_src.clkr.hw }, 1551 .num_parents = 1, 1552 .flags = CLK_SET_RATE_PARENT, 1553 .ops = &clk_branch2_ops, 1554 }, 1555 }, 1556 }; 1557 1558 static struct clk_branch gcc_gp2_clk = { 1559 .halt_reg = 0x65000, 1560 .halt_check = BRANCH_HALT, 1561 .clkr = { 1562 .enable_reg = 0x65000, 1563 .enable_mask = BIT(0), 1564 .hw.init = &(struct clk_init_data){ 1565 .name = "gcc_gp2_clk", 1566 .parent_hws = (const struct clk_hw *[]){ 1567 &gcc_gp2_clk_src.clkr.hw }, 1568 .num_parents = 1, 1569 .flags = CLK_SET_RATE_PARENT, 1570 .ops = &clk_branch2_ops, 1571 }, 1572 }, 1573 }; 1574 1575 static struct clk_branch gcc_gp3_clk = { 1576 .halt_reg = 0x66000, 1577 .halt_check = BRANCH_HALT, 1578 .clkr = { 1579 .enable_reg = 0x66000, 1580 .enable_mask = BIT(0), 1581 .hw.init = &(struct clk_init_data){ 1582 .name = "gcc_gp3_clk", 1583 .parent_hws = (const struct clk_hw *[]){ 1584 &gcc_gp3_clk_src.clkr.hw }, 1585 .num_parents = 1, 1586 .flags = CLK_SET_RATE_PARENT, 1587 .ops = &clk_branch2_ops, 1588 }, 1589 }, 1590 }; 1591 1592 static struct clk_branch gcc_gpu_cfg_ahb_clk = { 1593 .halt_reg = 0x71004, 1594 .halt_check = BRANCH_HALT, 1595 .hwcg_reg = 0x71004, 1596 .hwcg_bit = 1, 1597 .clkr = { 1598 .enable_reg = 0x71004, 1599 .enable_mask = BIT(0), 1600 .hw.init = &(struct clk_init_data){ 1601 .name = "gcc_gpu_cfg_ahb_clk", 1602 /* required for gpu */ 1603 .flags = CLK_IS_CRITICAL, 1604 .ops = &clk_branch2_ops, 1605 }, 1606 }, 1607 }; 1608 1609 static struct clk_branch gcc_gpu_gpll0_clk_src = { 1610 .halt_check = BRANCH_HALT_SKIP, 1611 .clkr = { 1612 .enable_reg = 0x52004, 1613 .enable_mask = BIT(15), 1614 .hw.init = &(struct clk_init_data){ 1615 .name = "gcc_gpu_gpll0_clk_src", 1616 .parent_hws = (const struct clk_hw *[]){ 1617 &gpll0.clkr.hw }, 1618 .num_parents = 1, 1619 .flags = CLK_SET_RATE_PARENT, 1620 .ops = &clk_branch2_ops, 1621 }, 1622 }, 1623 }; 1624 1625 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 1626 .halt_check = BRANCH_HALT_SKIP, 1627 .clkr = { 1628 .enable_reg = 0x52004, 1629 .enable_mask = BIT(16), 1630 .hw.init = &(struct clk_init_data){ 1631 .name = "gcc_gpu_gpll0_div_clk_src", 1632 .parent_hws = (const struct clk_hw *[]){ 1633 &gpll0_out_even.clkr.hw }, 1634 .num_parents = 1, 1635 .flags = CLK_SET_RATE_PARENT, 1636 .ops = &clk_branch2_ops, 1637 }, 1638 }, 1639 }; 1640 1641 static struct clk_branch gcc_gpu_iref_clk = { 1642 .halt_reg = 0x8c010, 1643 .halt_check = BRANCH_HALT, 1644 .clkr = { 1645 .enable_reg = 0x8c010, 1646 .enable_mask = BIT(0), 1647 .hw.init = &(struct clk_init_data){ 1648 .name = "gcc_gpu_iref_clk", 1649 .ops = &clk_branch2_ops, 1650 }, 1651 }, 1652 }; 1653 1654 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1655 .halt_reg = 0x7100c, 1656 .halt_check = BRANCH_VOTED, 1657 .clkr = { 1658 .enable_reg = 0x7100c, 1659 .enable_mask = BIT(0), 1660 .hw.init = &(struct clk_init_data){ 1661 .name = "gcc_gpu_memnoc_gfx_clk", 1662 .ops = &clk_branch2_ops, 1663 }, 1664 }, 1665 }; 1666 1667 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1668 .halt_reg = 0x71018, 1669 .halt_check = BRANCH_HALT, 1670 .clkr = { 1671 .enable_reg = 0x71018, 1672 .enable_mask = BIT(0), 1673 .hw.init = &(struct clk_init_data){ 1674 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1675 .ops = &clk_branch2_ops, 1676 }, 1677 }, 1678 }; 1679 1680 static struct clk_branch gcc_npu_at_clk = { 1681 .halt_reg = 0x4d010, 1682 .halt_check = BRANCH_VOTED, 1683 .clkr = { 1684 .enable_reg = 0x4d010, 1685 .enable_mask = BIT(0), 1686 .hw.init = &(struct clk_init_data){ 1687 .name = "gcc_npu_at_clk", 1688 .ops = &clk_branch2_ops, 1689 }, 1690 }, 1691 }; 1692 1693 static struct clk_branch gcc_npu_axi_clk = { 1694 .halt_reg = 0x4d008, 1695 .halt_check = BRANCH_VOTED, 1696 .clkr = { 1697 .enable_reg = 0x4d008, 1698 .enable_mask = BIT(0), 1699 .hw.init = &(struct clk_init_data){ 1700 .name = "gcc_npu_axi_clk", 1701 .ops = &clk_branch2_ops, 1702 }, 1703 }, 1704 }; 1705 1706 static struct clk_branch gcc_npu_cfg_ahb_clk = { 1707 .halt_reg = 0x4d004, 1708 .halt_check = BRANCH_HALT, 1709 .hwcg_reg = 0x4d004, 1710 .hwcg_bit = 1, 1711 .clkr = { 1712 .enable_reg = 0x4d004, 1713 .enable_mask = BIT(0), 1714 .hw.init = &(struct clk_init_data){ 1715 .name = "gcc_npu_cfg_ahb_clk", 1716 /* required for npu */ 1717 .flags = CLK_IS_CRITICAL, 1718 .ops = &clk_branch2_ops, 1719 }, 1720 }, 1721 }; 1722 1723 static struct clk_branch gcc_npu_gpll0_clk_src = { 1724 .halt_check = BRANCH_HALT_SKIP, 1725 .clkr = { 1726 .enable_reg = 0x52004, 1727 .enable_mask = BIT(18), 1728 .hw.init = &(struct clk_init_data){ 1729 .name = "gcc_npu_gpll0_clk_src", 1730 .parent_hws = (const struct clk_hw *[]){ 1731 &gpll0.clkr.hw }, 1732 .num_parents = 1, 1733 .flags = CLK_SET_RATE_PARENT, 1734 .ops = &clk_branch2_ops, 1735 }, 1736 }, 1737 }; 1738 1739 static struct clk_branch gcc_npu_gpll0_div_clk_src = { 1740 .halt_check = BRANCH_HALT_SKIP, 1741 .clkr = { 1742 .enable_reg = 0x52004, 1743 .enable_mask = BIT(19), 1744 .hw.init = &(struct clk_init_data){ 1745 .name = "gcc_npu_gpll0_div_clk_src", 1746 .parent_hws = (const struct clk_hw *[]){ 1747 &gpll0_out_even.clkr.hw }, 1748 .num_parents = 1, 1749 .flags = CLK_SET_RATE_PARENT, 1750 .ops = &clk_branch2_ops, 1751 }, 1752 }, 1753 }; 1754 1755 static struct clk_branch gcc_npu_trig_clk = { 1756 .halt_reg = 0x4d00c, 1757 .halt_check = BRANCH_VOTED, 1758 .clkr = { 1759 .enable_reg = 0x4d00c, 1760 .enable_mask = BIT(0), 1761 .hw.init = &(struct clk_init_data){ 1762 .name = "gcc_npu_trig_clk", 1763 .ops = &clk_branch2_ops, 1764 }, 1765 }, 1766 }; 1767 1768 static struct clk_branch gcc_pcie0_phy_refgen_clk = { 1769 .halt_reg = 0x6f02c, 1770 .halt_check = BRANCH_HALT, 1771 .clkr = { 1772 .enable_reg = 0x6f02c, 1773 .enable_mask = BIT(0), 1774 .hw.init = &(struct clk_init_data){ 1775 .name = "gcc_pcie0_phy_refgen_clk", 1776 .parent_hws = (const struct clk_hw *[]){ 1777 &gcc_pcie_phy_refgen_clk_src.clkr.hw }, 1778 .num_parents = 1, 1779 .flags = CLK_SET_RATE_PARENT, 1780 .ops = &clk_branch2_ops, 1781 }, 1782 }, 1783 }; 1784 1785 static struct clk_branch gcc_pcie1_phy_refgen_clk = { 1786 .halt_reg = 0x6f030, 1787 .halt_check = BRANCH_HALT, 1788 .clkr = { 1789 .enable_reg = 0x6f030, 1790 .enable_mask = BIT(0), 1791 .hw.init = &(struct clk_init_data){ 1792 .name = "gcc_pcie1_phy_refgen_clk", 1793 .parent_hws = (const struct clk_hw *[]){ 1794 &gcc_pcie_phy_refgen_clk_src.clkr.hw }, 1795 .num_parents = 1, 1796 .flags = CLK_SET_RATE_PARENT, 1797 .ops = &clk_branch2_ops, 1798 }, 1799 }, 1800 }; 1801 1802 static struct clk_branch gcc_pcie_0_aux_clk = { 1803 .halt_reg = 0x6b020, 1804 .halt_check = BRANCH_HALT_VOTED, 1805 .clkr = { 1806 .enable_reg = 0x5200c, 1807 .enable_mask = BIT(3), 1808 .hw.init = &(struct clk_init_data){ 1809 .name = "gcc_pcie_0_aux_clk", 1810 .parent_hws = (const struct clk_hw *[]){ 1811 &gcc_pcie_0_aux_clk_src.clkr.hw }, 1812 .num_parents = 1, 1813 .flags = CLK_SET_RATE_PARENT, 1814 .ops = &clk_branch2_ops, 1815 }, 1816 }, 1817 }; 1818 1819 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1820 .halt_reg = 0x6b01c, 1821 .halt_check = BRANCH_HALT_VOTED, 1822 .hwcg_reg = 0x6b01c, 1823 .hwcg_bit = 1, 1824 .clkr = { 1825 .enable_reg = 0x5200c, 1826 .enable_mask = BIT(2), 1827 .hw.init = &(struct clk_init_data){ 1828 .name = "gcc_pcie_0_cfg_ahb_clk", 1829 .ops = &clk_branch2_ops, 1830 }, 1831 }, 1832 }; 1833 1834 static struct clk_branch gcc_pcie_0_clkref_clk = { 1835 .halt_reg = 0x8c00c, 1836 .halt_check = BRANCH_HALT, 1837 .clkr = { 1838 .enable_reg = 0x8c00c, 1839 .enable_mask = BIT(0), 1840 .hw.init = &(struct clk_init_data){ 1841 .name = "gcc_pcie_0_clkref_clk", 1842 .ops = &clk_branch2_ops, 1843 }, 1844 }, 1845 }; 1846 1847 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1848 .halt_reg = 0x6b018, 1849 .halt_check = BRANCH_HALT_VOTED, 1850 .clkr = { 1851 .enable_reg = 0x5200c, 1852 .enable_mask = BIT(1), 1853 .hw.init = &(struct clk_init_data){ 1854 .name = "gcc_pcie_0_mstr_axi_clk", 1855 .ops = &clk_branch2_ops, 1856 }, 1857 }, 1858 }; 1859 1860 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */ 1861 static struct clk_branch gcc_pcie_0_pipe_clk = { 1862 .halt_reg = 0x6b024, 1863 .halt_check = BRANCH_HALT_DELAY, 1864 .clkr = { 1865 .enable_reg = 0x5200c, 1866 .enable_mask = BIT(4), 1867 .hw.init = &(struct clk_init_data){ 1868 .name = "gcc_pcie_0_pipe_clk", 1869 .ops = &clk_branch2_ops, 1870 }, 1871 }, 1872 }; 1873 1874 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1875 .halt_reg = 0x6b014, 1876 .halt_check = BRANCH_HALT_VOTED, 1877 .hwcg_reg = 0x6b014, 1878 .hwcg_bit = 1, 1879 .clkr = { 1880 .enable_reg = 0x5200c, 1881 .enable_mask = BIT(0), 1882 .hw.init = &(struct clk_init_data){ 1883 .name = "gcc_pcie_0_slv_axi_clk", 1884 .ops = &clk_branch2_ops, 1885 }, 1886 }, 1887 }; 1888 1889 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1890 .halt_reg = 0x6b010, 1891 .halt_check = BRANCH_HALT_VOTED, 1892 .clkr = { 1893 .enable_reg = 0x5200c, 1894 .enable_mask = BIT(5), 1895 .hw.init = &(struct clk_init_data){ 1896 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1897 .ops = &clk_branch2_ops, 1898 }, 1899 }, 1900 }; 1901 1902 static struct clk_branch gcc_pcie_1_aux_clk = { 1903 .halt_reg = 0x8d020, 1904 .halt_check = BRANCH_HALT_VOTED, 1905 .clkr = { 1906 .enable_reg = 0x52004, 1907 .enable_mask = BIT(29), 1908 .hw.init = &(struct clk_init_data){ 1909 .name = "gcc_pcie_1_aux_clk", 1910 .parent_hws = (const struct clk_hw *[]){ 1911 &gcc_pcie_1_aux_clk_src.clkr.hw }, 1912 .num_parents = 1, 1913 .flags = CLK_SET_RATE_PARENT, 1914 .ops = &clk_branch2_ops, 1915 }, 1916 }, 1917 }; 1918 1919 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 1920 .halt_reg = 0x8d01c, 1921 .halt_check = BRANCH_HALT_VOTED, 1922 .hwcg_reg = 0x8d01c, 1923 .hwcg_bit = 1, 1924 .clkr = { 1925 .enable_reg = 0x52004, 1926 .enable_mask = BIT(28), 1927 .hw.init = &(struct clk_init_data){ 1928 .name = "gcc_pcie_1_cfg_ahb_clk", 1929 .ops = &clk_branch2_ops, 1930 }, 1931 }, 1932 }; 1933 1934 static struct clk_branch gcc_pcie_1_clkref_clk = { 1935 .halt_reg = 0x8c02c, 1936 .halt_check = BRANCH_HALT, 1937 .clkr = { 1938 .enable_reg = 0x8c02c, 1939 .enable_mask = BIT(0), 1940 .hw.init = &(struct clk_init_data){ 1941 .name = "gcc_pcie_1_clkref_clk", 1942 .ops = &clk_branch2_ops, 1943 }, 1944 }, 1945 }; 1946 1947 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 1948 .halt_reg = 0x8d018, 1949 .halt_check = BRANCH_HALT_VOTED, 1950 .clkr = { 1951 .enable_reg = 0x52004, 1952 .enable_mask = BIT(27), 1953 .hw.init = &(struct clk_init_data){ 1954 .name = "gcc_pcie_1_mstr_axi_clk", 1955 .ops = &clk_branch2_ops, 1956 }, 1957 }, 1958 }; 1959 1960 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */ 1961 static struct clk_branch gcc_pcie_1_pipe_clk = { 1962 .halt_reg = 0x8d024, 1963 .halt_check = BRANCH_HALT_DELAY, 1964 .clkr = { 1965 .enable_reg = 0x52004, 1966 .enable_mask = BIT(30), 1967 .hw.init = &(struct clk_init_data){ 1968 .name = "gcc_pcie_1_pipe_clk", 1969 .ops = &clk_branch2_ops, 1970 }, 1971 }, 1972 }; 1973 1974 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 1975 .halt_reg = 0x8d014, 1976 .halt_check = BRANCH_HALT_VOTED, 1977 .hwcg_reg = 0x8d014, 1978 .hwcg_bit = 1, 1979 .clkr = { 1980 .enable_reg = 0x52004, 1981 .enable_mask = BIT(26), 1982 .hw.init = &(struct clk_init_data){ 1983 .name = "gcc_pcie_1_slv_axi_clk", 1984 .ops = &clk_branch2_ops, 1985 }, 1986 }, 1987 }; 1988 1989 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = { 1990 .halt_reg = 0x8d010, 1991 .halt_check = BRANCH_HALT_VOTED, 1992 .clkr = { 1993 .enable_reg = 0x52004, 1994 .enable_mask = BIT(25), 1995 .hw.init = &(struct clk_init_data){ 1996 .name = "gcc_pcie_1_slv_q2a_axi_clk", 1997 .ops = &clk_branch2_ops, 1998 }, 1999 }, 2000 }; 2001 2002 static struct clk_branch gcc_pcie_phy_aux_clk = { 2003 .halt_reg = 0x6f004, 2004 .halt_check = BRANCH_HALT, 2005 .clkr = { 2006 .enable_reg = 0x6f004, 2007 .enable_mask = BIT(0), 2008 .hw.init = &(struct clk_init_data){ 2009 .name = "gcc_pcie_phy_aux_clk", 2010 .parent_hws = (const struct clk_hw *[]){ 2011 &gcc_pcie_0_aux_clk_src.clkr.hw }, 2012 .num_parents = 1, 2013 .flags = CLK_SET_RATE_PARENT, 2014 .ops = &clk_branch2_ops, 2015 }, 2016 }, 2017 }; 2018 2019 static struct clk_branch gcc_pdm2_clk = { 2020 .halt_reg = 0x3300c, 2021 .halt_check = BRANCH_HALT, 2022 .clkr = { 2023 .enable_reg = 0x3300c, 2024 .enable_mask = BIT(0), 2025 .hw.init = &(struct clk_init_data){ 2026 .name = "gcc_pdm2_clk", 2027 .parent_hws = (const struct clk_hw *[]){ 2028 &gcc_pdm2_clk_src.clkr.hw }, 2029 .num_parents = 1, 2030 .flags = CLK_SET_RATE_PARENT, 2031 .ops = &clk_branch2_ops, 2032 }, 2033 }, 2034 }; 2035 2036 static struct clk_branch gcc_pdm_ahb_clk = { 2037 .halt_reg = 0x33004, 2038 .halt_check = BRANCH_HALT, 2039 .hwcg_reg = 0x33004, 2040 .hwcg_bit = 1, 2041 .clkr = { 2042 .enable_reg = 0x33004, 2043 .enable_mask = BIT(0), 2044 .hw.init = &(struct clk_init_data){ 2045 .name = "gcc_pdm_ahb_clk", 2046 .ops = &clk_branch2_ops, 2047 }, 2048 }, 2049 }; 2050 2051 static struct clk_branch gcc_pdm_xo4_clk = { 2052 .halt_reg = 0x33008, 2053 .halt_check = BRANCH_HALT, 2054 .clkr = { 2055 .enable_reg = 0x33008, 2056 .enable_mask = BIT(0), 2057 .hw.init = &(struct clk_init_data){ 2058 .name = "gcc_pdm_xo4_clk", 2059 .ops = &clk_branch2_ops, 2060 }, 2061 }, 2062 }; 2063 2064 static struct clk_branch gcc_prng_ahb_clk = { 2065 .halt_reg = 0x34004, 2066 .halt_check = BRANCH_HALT_VOTED, 2067 .clkr = { 2068 .enable_reg = 0x52004, 2069 .enable_mask = BIT(13), 2070 .hw.init = &(struct clk_init_data){ 2071 .name = "gcc_prng_ahb_clk", 2072 .ops = &clk_branch2_ops, 2073 }, 2074 }, 2075 }; 2076 2077 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = { 2078 .halt_reg = 0xb018, 2079 .halt_check = BRANCH_HALT, 2080 .hwcg_reg = 0xb018, 2081 .hwcg_bit = 1, 2082 .clkr = { 2083 .enable_reg = 0xb018, 2084 .enable_mask = BIT(0), 2085 .hw.init = &(struct clk_init_data){ 2086 .name = "gcc_qmip_camera_nrt_ahb_clk", 2087 .ops = &clk_branch2_ops, 2088 }, 2089 }, 2090 }; 2091 2092 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = { 2093 .halt_reg = 0xb01c, 2094 .halt_check = BRANCH_HALT, 2095 .hwcg_reg = 0xb01c, 2096 .hwcg_bit = 1, 2097 .clkr = { 2098 .enable_reg = 0xb01c, 2099 .enable_mask = BIT(0), 2100 .hw.init = &(struct clk_init_data){ 2101 .name = "gcc_qmip_camera_rt_ahb_clk", 2102 .ops = &clk_branch2_ops, 2103 }, 2104 }, 2105 }; 2106 2107 static struct clk_branch gcc_qmip_disp_ahb_clk = { 2108 .halt_reg = 0xb020, 2109 .halt_check = BRANCH_HALT, 2110 .hwcg_reg = 0xb020, 2111 .hwcg_bit = 1, 2112 .clkr = { 2113 .enable_reg = 0xb020, 2114 .enable_mask = BIT(0), 2115 .hw.init = &(struct clk_init_data){ 2116 .name = "gcc_qmip_disp_ahb_clk", 2117 .ops = &clk_branch2_ops, 2118 }, 2119 }, 2120 }; 2121 2122 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = { 2123 .halt_reg = 0xb010, 2124 .halt_check = BRANCH_HALT, 2125 .hwcg_reg = 0xb010, 2126 .hwcg_bit = 1, 2127 .clkr = { 2128 .enable_reg = 0xb010, 2129 .enable_mask = BIT(0), 2130 .hw.init = &(struct clk_init_data){ 2131 .name = "gcc_qmip_video_cvp_ahb_clk", 2132 .ops = &clk_branch2_ops, 2133 }, 2134 }, 2135 }; 2136 2137 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = { 2138 .halt_reg = 0xb014, 2139 .halt_check = BRANCH_HALT, 2140 .hwcg_reg = 0xb014, 2141 .hwcg_bit = 1, 2142 .clkr = { 2143 .enable_reg = 0xb014, 2144 .enable_mask = BIT(0), 2145 .hw.init = &(struct clk_init_data){ 2146 .name = "gcc_qmip_video_vcodec_ahb_clk", 2147 .ops = &clk_branch2_ops, 2148 }, 2149 }, 2150 }; 2151 2152 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = { 2153 .halt_reg = 0x4b000, 2154 .halt_check = BRANCH_HALT, 2155 .clkr = { 2156 .enable_reg = 0x4b000, 2157 .enable_mask = BIT(0), 2158 .hw.init = &(struct clk_init_data){ 2159 .name = "gcc_qspi_cnoc_periph_ahb_clk", 2160 .ops = &clk_branch2_ops, 2161 }, 2162 }, 2163 }; 2164 2165 static struct clk_branch gcc_qspi_core_clk = { 2166 .halt_reg = 0x4b004, 2167 .halt_check = BRANCH_HALT, 2168 .clkr = { 2169 .enable_reg = 0x4b004, 2170 .enable_mask = BIT(0), 2171 .hw.init = &(struct clk_init_data){ 2172 .name = "gcc_qspi_core_clk", 2173 .parent_hws = (const struct clk_hw *[]){ 2174 &gcc_qspi_core_clk_src.clkr.hw }, 2175 .num_parents = 1, 2176 .flags = CLK_SET_RATE_PARENT, 2177 .ops = &clk_branch2_ops, 2178 }, 2179 }, 2180 }; 2181 2182 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 2183 .halt_reg = 0x17144, 2184 .halt_check = BRANCH_HALT_VOTED, 2185 .clkr = { 2186 .enable_reg = 0x5200c, 2187 .enable_mask = BIT(10), 2188 .hw.init = &(struct clk_init_data){ 2189 .name = "gcc_qupv3_wrap0_s0_clk", 2190 .parent_hws = (const struct clk_hw *[]){ 2191 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw }, 2192 .num_parents = 1, 2193 .flags = CLK_SET_RATE_PARENT, 2194 .ops = &clk_branch2_ops, 2195 }, 2196 }, 2197 }; 2198 2199 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 2200 .halt_reg = 0x17274, 2201 .halt_check = BRANCH_HALT_VOTED, 2202 .clkr = { 2203 .enable_reg = 0x5200c, 2204 .enable_mask = BIT(11), 2205 .hw.init = &(struct clk_init_data){ 2206 .name = "gcc_qupv3_wrap0_s1_clk", 2207 .parent_hws = (const struct clk_hw *[]){ 2208 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw }, 2209 .num_parents = 1, 2210 .flags = CLK_SET_RATE_PARENT, 2211 .ops = &clk_branch2_ops, 2212 }, 2213 }, 2214 }; 2215 2216 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 2217 .halt_reg = 0x173a4, 2218 .halt_check = BRANCH_HALT_VOTED, 2219 .clkr = { 2220 .enable_reg = 0x5200c, 2221 .enable_mask = BIT(12), 2222 .hw.init = &(struct clk_init_data){ 2223 .name = "gcc_qupv3_wrap0_s2_clk", 2224 .parent_hws = (const struct clk_hw *[]){ 2225 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw }, 2226 .num_parents = 1, 2227 .flags = CLK_SET_RATE_PARENT, 2228 .ops = &clk_branch2_ops, 2229 }, 2230 }, 2231 }; 2232 2233 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 2234 .halt_reg = 0x174d4, 2235 .halt_check = BRANCH_HALT_VOTED, 2236 .clkr = { 2237 .enable_reg = 0x5200c, 2238 .enable_mask = BIT(13), 2239 .hw.init = &(struct clk_init_data){ 2240 .name = "gcc_qupv3_wrap0_s3_clk", 2241 .parent_hws = (const struct clk_hw *[]){ 2242 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw }, 2243 .num_parents = 1, 2244 .flags = CLK_SET_RATE_PARENT, 2245 .ops = &clk_branch2_ops, 2246 }, 2247 }, 2248 }; 2249 2250 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 2251 .halt_reg = 0x17604, 2252 .halt_check = BRANCH_HALT_VOTED, 2253 .clkr = { 2254 .enable_reg = 0x5200c, 2255 .enable_mask = BIT(14), 2256 .hw.init = &(struct clk_init_data){ 2257 .name = "gcc_qupv3_wrap0_s4_clk", 2258 .parent_hws = (const struct clk_hw *[]){ 2259 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw }, 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_qupv3_wrap0_s5_clk = { 2268 .halt_reg = 0x17734, 2269 .halt_check = BRANCH_HALT_VOTED, 2270 .clkr = { 2271 .enable_reg = 0x5200c, 2272 .enable_mask = BIT(15), 2273 .hw.init = &(struct clk_init_data){ 2274 .name = "gcc_qupv3_wrap0_s5_clk", 2275 .parent_hws = (const struct clk_hw *[]){ 2276 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw }, 2277 .num_parents = 1, 2278 .flags = CLK_SET_RATE_PARENT, 2279 .ops = &clk_branch2_ops, 2280 }, 2281 }, 2282 }; 2283 2284 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 2285 .halt_reg = 0x17864, 2286 .halt_check = BRANCH_HALT_VOTED, 2287 .clkr = { 2288 .enable_reg = 0x5200c, 2289 .enable_mask = BIT(16), 2290 .hw.init = &(struct clk_init_data){ 2291 .name = "gcc_qupv3_wrap0_s6_clk", 2292 .parent_hws = (const struct clk_hw *[]){ 2293 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw }, 2294 .num_parents = 1, 2295 .flags = CLK_SET_RATE_PARENT, 2296 .ops = &clk_branch2_ops, 2297 }, 2298 }, 2299 }; 2300 2301 static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 2302 .halt_reg = 0x17994, 2303 .halt_check = BRANCH_HALT_VOTED, 2304 .clkr = { 2305 .enable_reg = 0x5200c, 2306 .enable_mask = BIT(17), 2307 .hw.init = &(struct clk_init_data){ 2308 .name = "gcc_qupv3_wrap0_s7_clk", 2309 .parent_hws = (const struct clk_hw *[]){ 2310 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw }, 2311 .num_parents = 1, 2312 .flags = CLK_SET_RATE_PARENT, 2313 .ops = &clk_branch2_ops, 2314 }, 2315 }, 2316 }; 2317 2318 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 2319 .halt_reg = 0x18144, 2320 .halt_check = BRANCH_HALT_VOTED, 2321 .clkr = { 2322 .enable_reg = 0x5200c, 2323 .enable_mask = BIT(22), 2324 .hw.init = &(struct clk_init_data){ 2325 .name = "gcc_qupv3_wrap1_s0_clk", 2326 .parent_hws = (const struct clk_hw *[]){ 2327 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw }, 2328 .num_parents = 1, 2329 .flags = CLK_SET_RATE_PARENT, 2330 .ops = &clk_branch2_ops, 2331 }, 2332 }, 2333 }; 2334 2335 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 2336 .halt_reg = 0x18274, 2337 .halt_check = BRANCH_HALT_VOTED, 2338 .clkr = { 2339 .enable_reg = 0x5200c, 2340 .enable_mask = BIT(23), 2341 .hw.init = &(struct clk_init_data){ 2342 .name = "gcc_qupv3_wrap1_s1_clk", 2343 .parent_hws = (const struct clk_hw *[]){ 2344 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw }, 2345 .num_parents = 1, 2346 .flags = CLK_SET_RATE_PARENT, 2347 .ops = &clk_branch2_ops, 2348 }, 2349 }, 2350 }; 2351 2352 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 2353 .halt_reg = 0x183a4, 2354 .halt_check = BRANCH_HALT_VOTED, 2355 .clkr = { 2356 .enable_reg = 0x5200c, 2357 .enable_mask = BIT(24), 2358 .hw.init = &(struct clk_init_data){ 2359 .name = "gcc_qupv3_wrap1_s2_clk", 2360 .parent_hws = (const struct clk_hw *[]){ 2361 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw }, 2362 .num_parents = 1, 2363 .flags = CLK_SET_RATE_PARENT, 2364 .ops = &clk_branch2_ops, 2365 }, 2366 }, 2367 }; 2368 2369 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 2370 .halt_reg = 0x184d4, 2371 .halt_check = BRANCH_HALT_VOTED, 2372 .clkr = { 2373 .enable_reg = 0x5200c, 2374 .enable_mask = BIT(25), 2375 .hw.init = &(struct clk_init_data){ 2376 .name = "gcc_qupv3_wrap1_s3_clk", 2377 .parent_hws = (const struct clk_hw *[]){ 2378 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw }, 2379 .num_parents = 1, 2380 .flags = CLK_SET_RATE_PARENT, 2381 .ops = &clk_branch2_ops, 2382 }, 2383 }, 2384 }; 2385 2386 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 2387 .halt_reg = 0x18604, 2388 .halt_check = BRANCH_HALT_VOTED, 2389 .clkr = { 2390 .enable_reg = 0x5200c, 2391 .enable_mask = BIT(26), 2392 .hw.init = &(struct clk_init_data){ 2393 .name = "gcc_qupv3_wrap1_s4_clk", 2394 .parent_hws = (const struct clk_hw *[]){ 2395 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw }, 2396 .num_parents = 1, 2397 .flags = CLK_SET_RATE_PARENT, 2398 .ops = &clk_branch2_ops, 2399 }, 2400 }, 2401 }; 2402 2403 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 2404 .halt_reg = 0x18734, 2405 .halt_check = BRANCH_HALT_VOTED, 2406 .clkr = { 2407 .enable_reg = 0x5200c, 2408 .enable_mask = BIT(27), 2409 .hw.init = &(struct clk_init_data){ 2410 .name = "gcc_qupv3_wrap1_s5_clk", 2411 .parent_hws = (const struct clk_hw *[]){ 2412 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw }, 2413 .num_parents = 1, 2414 .flags = CLK_SET_RATE_PARENT, 2415 .ops = &clk_branch2_ops, 2416 }, 2417 }, 2418 }; 2419 2420 static struct clk_branch gcc_qupv3_wrap2_s0_clk = { 2421 .halt_reg = 0x1e144, 2422 .halt_check = BRANCH_HALT_VOTED, 2423 .clkr = { 2424 .enable_reg = 0x52014, 2425 .enable_mask = BIT(4), 2426 .hw.init = &(struct clk_init_data){ 2427 .name = "gcc_qupv3_wrap2_s0_clk", 2428 .parent_hws = (const struct clk_hw *[]){ 2429 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw }, 2430 .num_parents = 1, 2431 .flags = CLK_SET_RATE_PARENT, 2432 .ops = &clk_branch2_ops, 2433 }, 2434 }, 2435 }; 2436 2437 static struct clk_branch gcc_qupv3_wrap2_s1_clk = { 2438 .halt_reg = 0x1e274, 2439 .halt_check = BRANCH_HALT_VOTED, 2440 .clkr = { 2441 .enable_reg = 0x52014, 2442 .enable_mask = BIT(5), 2443 .hw.init = &(struct clk_init_data){ 2444 .name = "gcc_qupv3_wrap2_s1_clk", 2445 .parent_hws = (const struct clk_hw *[]){ 2446 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw }, 2447 .num_parents = 1, 2448 .flags = CLK_SET_RATE_PARENT, 2449 .ops = &clk_branch2_ops, 2450 }, 2451 }, 2452 }; 2453 2454 static struct clk_branch gcc_qupv3_wrap2_s2_clk = { 2455 .halt_reg = 0x1e3a4, 2456 .halt_check = BRANCH_HALT_VOTED, 2457 .clkr = { 2458 .enable_reg = 0x52014, 2459 .enable_mask = BIT(6), 2460 .hw.init = &(struct clk_init_data){ 2461 .name = "gcc_qupv3_wrap2_s2_clk", 2462 .parent_hws = (const struct clk_hw *[]){ 2463 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw }, 2464 .num_parents = 1, 2465 .flags = CLK_SET_RATE_PARENT, 2466 .ops = &clk_branch2_ops, 2467 }, 2468 }, 2469 }; 2470 2471 static struct clk_branch gcc_qupv3_wrap2_s3_clk = { 2472 .halt_reg = 0x1e4d4, 2473 .halt_check = BRANCH_HALT_VOTED, 2474 .clkr = { 2475 .enable_reg = 0x52014, 2476 .enable_mask = BIT(7), 2477 .hw.init = &(struct clk_init_data){ 2478 .name = "gcc_qupv3_wrap2_s3_clk", 2479 .parent_hws = (const struct clk_hw *[]){ 2480 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw }, 2481 .num_parents = 1, 2482 .flags = CLK_SET_RATE_PARENT, 2483 .ops = &clk_branch2_ops, 2484 }, 2485 }, 2486 }; 2487 2488 static struct clk_branch gcc_qupv3_wrap2_s4_clk = { 2489 .halt_reg = 0x1e604, 2490 .halt_check = BRANCH_HALT_VOTED, 2491 .clkr = { 2492 .enable_reg = 0x52014, 2493 .enable_mask = BIT(8), 2494 .hw.init = &(struct clk_init_data){ 2495 .name = "gcc_qupv3_wrap2_s4_clk", 2496 .parent_hws = (const struct clk_hw *[]){ 2497 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw }, 2498 .num_parents = 1, 2499 .flags = CLK_SET_RATE_PARENT, 2500 .ops = &clk_branch2_ops, 2501 }, 2502 }, 2503 }; 2504 2505 static struct clk_branch gcc_qupv3_wrap2_s5_clk = { 2506 .halt_reg = 0x1e734, 2507 .halt_check = BRANCH_HALT_VOTED, 2508 .clkr = { 2509 .enable_reg = 0x52014, 2510 .enable_mask = BIT(9), 2511 .hw.init = &(struct clk_init_data){ 2512 .name = "gcc_qupv3_wrap2_s5_clk", 2513 .parent_hws = (const struct clk_hw *[]){ 2514 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw }, 2515 .num_parents = 1, 2516 .flags = CLK_SET_RATE_PARENT, 2517 .ops = &clk_branch2_ops, 2518 }, 2519 }, 2520 }; 2521 2522 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2523 .halt_reg = 0x17004, 2524 .halt_check = BRANCH_HALT_VOTED, 2525 .clkr = { 2526 .enable_reg = 0x5200c, 2527 .enable_mask = BIT(6), 2528 .hw.init = &(struct clk_init_data){ 2529 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2530 .ops = &clk_branch2_ops, 2531 }, 2532 }, 2533 }; 2534 2535 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2536 .halt_reg = 0x17008, 2537 .halt_check = BRANCH_HALT_VOTED, 2538 .hwcg_reg = 0x17008, 2539 .hwcg_bit = 1, 2540 .clkr = { 2541 .enable_reg = 0x5200c, 2542 .enable_mask = BIT(7), 2543 .hw.init = &(struct clk_init_data){ 2544 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2545 .ops = &clk_branch2_ops, 2546 }, 2547 }, 2548 }; 2549 2550 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2551 .halt_reg = 0x18004, 2552 .halt_check = BRANCH_HALT_VOTED, 2553 .clkr = { 2554 .enable_reg = 0x5200c, 2555 .enable_mask = BIT(20), 2556 .hw.init = &(struct clk_init_data){ 2557 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2558 .ops = &clk_branch2_ops, 2559 }, 2560 }, 2561 }; 2562 2563 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2564 .halt_reg = 0x18008, 2565 .halt_check = BRANCH_HALT_VOTED, 2566 .hwcg_reg = 0x18008, 2567 .hwcg_bit = 1, 2568 .clkr = { 2569 .enable_reg = 0x5200c, 2570 .enable_mask = BIT(21), 2571 .hw.init = &(struct clk_init_data){ 2572 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2573 .ops = &clk_branch2_ops, 2574 }, 2575 }, 2576 }; 2577 2578 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = { 2579 .halt_reg = 0x1e004, 2580 .halt_check = BRANCH_HALT_VOTED, 2581 .clkr = { 2582 .enable_reg = 0x52014, 2583 .enable_mask = BIT(2), 2584 .hw.init = &(struct clk_init_data){ 2585 .name = "gcc_qupv3_wrap_2_m_ahb_clk", 2586 .ops = &clk_branch2_ops, 2587 }, 2588 }, 2589 }; 2590 2591 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = { 2592 .halt_reg = 0x1e008, 2593 .halt_check = BRANCH_HALT_VOTED, 2594 .hwcg_reg = 0x1e008, 2595 .hwcg_bit = 1, 2596 .clkr = { 2597 .enable_reg = 0x52014, 2598 .enable_mask = BIT(1), 2599 .hw.init = &(struct clk_init_data){ 2600 .name = "gcc_qupv3_wrap_2_s_ahb_clk", 2601 .ops = &clk_branch2_ops, 2602 }, 2603 }, 2604 }; 2605 2606 static struct clk_branch gcc_sdcc2_ahb_clk = { 2607 .halt_reg = 0x14008, 2608 .halt_check = BRANCH_HALT, 2609 .clkr = { 2610 .enable_reg = 0x14008, 2611 .enable_mask = BIT(0), 2612 .hw.init = &(struct clk_init_data){ 2613 .name = "gcc_sdcc2_ahb_clk", 2614 .ops = &clk_branch2_ops, 2615 }, 2616 }, 2617 }; 2618 2619 static struct clk_branch gcc_sdcc2_apps_clk = { 2620 .halt_reg = 0x14004, 2621 .halt_check = BRANCH_HALT, 2622 .clkr = { 2623 .enable_reg = 0x14004, 2624 .enable_mask = BIT(0), 2625 .hw.init = &(struct clk_init_data){ 2626 .name = "gcc_sdcc2_apps_clk", 2627 .parent_hws = (const struct clk_hw *[]){ 2628 &gcc_sdcc2_apps_clk_src.clkr.hw }, 2629 .num_parents = 1, 2630 .flags = CLK_SET_RATE_PARENT, 2631 .ops = &clk_branch2_ops, 2632 }, 2633 }, 2634 }; 2635 2636 static struct clk_branch gcc_sdcc4_ahb_clk = { 2637 .halt_reg = 0x16008, 2638 .halt_check = BRANCH_HALT, 2639 .clkr = { 2640 .enable_reg = 0x16008, 2641 .enable_mask = BIT(0), 2642 .hw.init = &(struct clk_init_data){ 2643 .name = "gcc_sdcc4_ahb_clk", 2644 .ops = &clk_branch2_ops, 2645 }, 2646 }, 2647 }; 2648 2649 static struct clk_branch gcc_sdcc4_apps_clk = { 2650 .halt_reg = 0x16004, 2651 .halt_check = BRANCH_HALT, 2652 .clkr = { 2653 .enable_reg = 0x16004, 2654 .enable_mask = BIT(0), 2655 .hw.init = &(struct clk_init_data){ 2656 .name = "gcc_sdcc4_apps_clk", 2657 .parent_hws = (const struct clk_hw *[]){ 2658 &gcc_sdcc4_apps_clk_src.clkr.hw }, 2659 .num_parents = 1, 2660 .flags = CLK_SET_RATE_PARENT, 2661 .ops = &clk_branch2_ops, 2662 }, 2663 }, 2664 }; 2665 2666 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 2667 .halt_reg = 0x4819c, 2668 .halt_check = BRANCH_HALT_VOTED, 2669 .clkr = { 2670 .enable_reg = 0x52004, 2671 .enable_mask = BIT(0), 2672 .hw.init = &(struct clk_init_data){ 2673 .name = "gcc_sys_noc_cpuss_ahb_clk", 2674 .parent_hws = (const struct clk_hw *[]){ 2675 &gcc_cpuss_ahb_clk_src.clkr.hw }, 2676 .num_parents = 1, 2677 /* required for cpuss */ 2678 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 2679 .ops = &clk_branch2_ops, 2680 }, 2681 }, 2682 }; 2683 2684 static struct clk_branch gcc_tsif_ahb_clk = { 2685 .halt_reg = 0x36004, 2686 .halt_check = BRANCH_HALT, 2687 .clkr = { 2688 .enable_reg = 0x36004, 2689 .enable_mask = BIT(0), 2690 .hw.init = &(struct clk_init_data){ 2691 .name = "gcc_tsif_ahb_clk", 2692 .ops = &clk_branch2_ops, 2693 }, 2694 }, 2695 }; 2696 2697 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2698 .halt_reg = 0x3600c, 2699 .halt_check = BRANCH_HALT, 2700 .clkr = { 2701 .enable_reg = 0x3600c, 2702 .enable_mask = BIT(0), 2703 .hw.init = &(struct clk_init_data){ 2704 .name = "gcc_tsif_inactivity_timers_clk", 2705 .ops = &clk_branch2_ops, 2706 }, 2707 }, 2708 }; 2709 2710 static struct clk_branch gcc_tsif_ref_clk = { 2711 .halt_reg = 0x36008, 2712 .halt_check = BRANCH_HALT, 2713 .clkr = { 2714 .enable_reg = 0x36008, 2715 .enable_mask = BIT(0), 2716 .hw.init = &(struct clk_init_data){ 2717 .name = "gcc_tsif_ref_clk", 2718 .parent_hws = (const struct clk_hw *[]){ 2719 &gcc_tsif_ref_clk_src.clkr.hw }, 2720 .num_parents = 1, 2721 .flags = CLK_SET_RATE_PARENT, 2722 .ops = &clk_branch2_ops, 2723 }, 2724 }, 2725 }; 2726 2727 static struct clk_branch gcc_ufs_card_ahb_clk = { 2728 .halt_reg = 0x75014, 2729 .halt_check = BRANCH_HALT, 2730 .hwcg_reg = 0x75014, 2731 .hwcg_bit = 1, 2732 .clkr = { 2733 .enable_reg = 0x75014, 2734 .enable_mask = BIT(0), 2735 .hw.init = &(struct clk_init_data){ 2736 .name = "gcc_ufs_card_ahb_clk", 2737 .ops = &clk_branch2_ops, 2738 }, 2739 }, 2740 }; 2741 2742 static struct clk_branch gcc_ufs_card_axi_clk = { 2743 .halt_reg = 0x75010, 2744 .halt_check = BRANCH_HALT, 2745 .hwcg_reg = 0x75010, 2746 .hwcg_bit = 1, 2747 .clkr = { 2748 .enable_reg = 0x75010, 2749 .enable_mask = BIT(0), 2750 .hw.init = &(struct clk_init_data){ 2751 .name = "gcc_ufs_card_axi_clk", 2752 .parent_hws = (const struct clk_hw *[]){ 2753 &gcc_ufs_card_axi_clk_src.clkr.hw }, 2754 .num_parents = 1, 2755 .flags = CLK_SET_RATE_PARENT, 2756 .ops = &clk_branch2_ops, 2757 }, 2758 }, 2759 }; 2760 2761 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = { 2762 .halt_reg = 0x75010, 2763 .halt_check = BRANCH_HALT, 2764 .hwcg_reg = 0x75010, 2765 .hwcg_bit = 1, 2766 .clkr = { 2767 .enable_reg = 0x75010, 2768 .enable_mask = BIT(1), 2769 .hw.init = &(struct clk_init_data){ 2770 .name = "gcc_ufs_card_axi_hw_ctl_clk", 2771 .parent_hws = (const struct clk_hw *[]){ 2772 &gcc_ufs_card_axi_clk.clkr.hw }, 2773 .num_parents = 1, 2774 .flags = CLK_SET_RATE_PARENT, 2775 .ops = &clk_branch_simple_ops, 2776 }, 2777 }, 2778 }; 2779 2780 static struct clk_branch gcc_ufs_card_clkref_clk = { 2781 .halt_reg = 0x8c004, 2782 .halt_check = BRANCH_HALT, 2783 .clkr = { 2784 .enable_reg = 0x8c004, 2785 .enable_mask = BIT(0), 2786 .hw.init = &(struct clk_init_data){ 2787 .name = "gcc_ufs_card_clkref_clk", 2788 .ops = &clk_branch2_ops, 2789 }, 2790 }, 2791 }; 2792 2793 static struct clk_branch gcc_ufs_card_ice_core_clk = { 2794 .halt_reg = 0x7505c, 2795 .halt_check = BRANCH_HALT, 2796 .hwcg_reg = 0x7505c, 2797 .hwcg_bit = 1, 2798 .clkr = { 2799 .enable_reg = 0x7505c, 2800 .enable_mask = BIT(0), 2801 .hw.init = &(struct clk_init_data){ 2802 .name = "gcc_ufs_card_ice_core_clk", 2803 .parent_hws = (const struct clk_hw *[]){ 2804 &gcc_ufs_card_ice_core_clk_src.clkr.hw }, 2805 .num_parents = 1, 2806 .flags = CLK_SET_RATE_PARENT, 2807 .ops = &clk_branch2_ops, 2808 }, 2809 }, 2810 }; 2811 2812 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = { 2813 .halt_reg = 0x7505c, 2814 .halt_check = BRANCH_HALT, 2815 .hwcg_reg = 0x7505c, 2816 .hwcg_bit = 1, 2817 .clkr = { 2818 .enable_reg = 0x7505c, 2819 .enable_mask = BIT(1), 2820 .hw.init = &(struct clk_init_data){ 2821 .name = "gcc_ufs_card_ice_core_hw_ctl_clk", 2822 .parent_hws = (const struct clk_hw *[]){ 2823 &gcc_ufs_card_ice_core_clk.clkr.hw }, 2824 .num_parents = 1, 2825 .flags = CLK_SET_RATE_PARENT, 2826 .ops = &clk_branch_simple_ops, 2827 }, 2828 }, 2829 }; 2830 2831 static struct clk_branch gcc_ufs_card_phy_aux_clk = { 2832 .halt_reg = 0x75090, 2833 .halt_check = BRANCH_HALT, 2834 .hwcg_reg = 0x75090, 2835 .hwcg_bit = 1, 2836 .clkr = { 2837 .enable_reg = 0x75090, 2838 .enable_mask = BIT(0), 2839 .hw.init = &(struct clk_init_data){ 2840 .name = "gcc_ufs_card_phy_aux_clk", 2841 .parent_hws = (const struct clk_hw *[]){ 2842 &gcc_ufs_card_phy_aux_clk_src.clkr.hw }, 2843 .num_parents = 1, 2844 .flags = CLK_SET_RATE_PARENT, 2845 .ops = &clk_branch2_ops, 2846 }, 2847 }, 2848 }; 2849 2850 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = { 2851 .halt_reg = 0x75090, 2852 .halt_check = BRANCH_HALT, 2853 .hwcg_reg = 0x75090, 2854 .hwcg_bit = 1, 2855 .clkr = { 2856 .enable_reg = 0x75090, 2857 .enable_mask = BIT(1), 2858 .hw.init = &(struct clk_init_data){ 2859 .name = "gcc_ufs_card_phy_aux_hw_ctl_clk", 2860 .parent_hws = (const struct clk_hw *[]){ 2861 &gcc_ufs_card_phy_aux_clk.clkr.hw }, 2862 .num_parents = 1, 2863 .flags = CLK_SET_RATE_PARENT, 2864 .ops = &clk_branch_simple_ops, 2865 }, 2866 }, 2867 }; 2868 2869 /* external clocks so add BRANCH_HALT_SKIP */ 2870 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = { 2871 .halt_check = BRANCH_HALT_SKIP, 2872 .clkr = { 2873 .enable_reg = 0x7501c, 2874 .enable_mask = BIT(0), 2875 .hw.init = &(struct clk_init_data){ 2876 .name = "gcc_ufs_card_rx_symbol_0_clk", 2877 .ops = &clk_branch2_ops, 2878 }, 2879 }, 2880 }; 2881 2882 /* external clocks so add BRANCH_HALT_SKIP */ 2883 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = { 2884 .halt_check = BRANCH_HALT_SKIP, 2885 .clkr = { 2886 .enable_reg = 0x750ac, 2887 .enable_mask = BIT(0), 2888 .hw.init = &(struct clk_init_data){ 2889 .name = "gcc_ufs_card_rx_symbol_1_clk", 2890 .ops = &clk_branch2_ops, 2891 }, 2892 }, 2893 }; 2894 2895 /* external clocks so add BRANCH_HALT_SKIP */ 2896 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = { 2897 .halt_check = BRANCH_HALT_SKIP, 2898 .clkr = { 2899 .enable_reg = 0x75018, 2900 .enable_mask = BIT(0), 2901 .hw.init = &(struct clk_init_data){ 2902 .name = "gcc_ufs_card_tx_symbol_0_clk", 2903 .ops = &clk_branch2_ops, 2904 }, 2905 }, 2906 }; 2907 2908 static struct clk_branch gcc_ufs_card_unipro_core_clk = { 2909 .halt_reg = 0x75058, 2910 .halt_check = BRANCH_HALT, 2911 .hwcg_reg = 0x75058, 2912 .hwcg_bit = 1, 2913 .clkr = { 2914 .enable_reg = 0x75058, 2915 .enable_mask = BIT(0), 2916 .hw.init = &(struct clk_init_data){ 2917 .name = "gcc_ufs_card_unipro_core_clk", 2918 .parent_hws = (const struct clk_hw *[]){ 2919 &gcc_ufs_card_unipro_core_clk_src.clkr.hw }, 2920 .num_parents = 1, 2921 .flags = CLK_SET_RATE_PARENT, 2922 .ops = &clk_branch2_ops, 2923 }, 2924 }, 2925 }; 2926 2927 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = { 2928 .halt_reg = 0x75058, 2929 .halt_check = BRANCH_HALT, 2930 .hwcg_reg = 0x75058, 2931 .hwcg_bit = 1, 2932 .clkr = { 2933 .enable_reg = 0x75058, 2934 .enable_mask = BIT(1), 2935 .hw.init = &(struct clk_init_data){ 2936 .name = "gcc_ufs_card_unipro_core_hw_ctl_clk", 2937 .parent_hws = (const struct clk_hw *[]){ 2938 &gcc_ufs_card_unipro_core_clk.clkr.hw }, 2939 .num_parents = 1, 2940 .flags = CLK_SET_RATE_PARENT, 2941 .ops = &clk_branch_simple_ops, 2942 }, 2943 }, 2944 }; 2945 2946 static struct clk_branch gcc_ufs_mem_clkref_clk = { 2947 .halt_reg = 0x8c000, 2948 .halt_check = BRANCH_HALT, 2949 .clkr = { 2950 .enable_reg = 0x8c000, 2951 .enable_mask = BIT(0), 2952 .hw.init = &(struct clk_init_data){ 2953 .name = "gcc_ufs_mem_clkref_clk", 2954 .ops = &clk_branch2_ops, 2955 }, 2956 }, 2957 }; 2958 2959 static struct clk_branch gcc_ufs_phy_ahb_clk = { 2960 .halt_reg = 0x77014, 2961 .halt_check = BRANCH_HALT, 2962 .hwcg_reg = 0x77014, 2963 .hwcg_bit = 1, 2964 .clkr = { 2965 .enable_reg = 0x77014, 2966 .enable_mask = BIT(0), 2967 .hw.init = &(struct clk_init_data){ 2968 .name = "gcc_ufs_phy_ahb_clk", 2969 .ops = &clk_branch2_ops, 2970 }, 2971 }, 2972 }; 2973 2974 static struct clk_branch gcc_ufs_phy_axi_clk = { 2975 .halt_reg = 0x77010, 2976 .halt_check = BRANCH_HALT, 2977 .hwcg_reg = 0x77010, 2978 .hwcg_bit = 1, 2979 .clkr = { 2980 .enable_reg = 0x77010, 2981 .enable_mask = BIT(0), 2982 .hw.init = &(struct clk_init_data){ 2983 .name = "gcc_ufs_phy_axi_clk", 2984 .parent_hws = (const struct clk_hw *[]){ 2985 &gcc_ufs_phy_axi_clk_src.clkr.hw }, 2986 .num_parents = 1, 2987 .flags = CLK_SET_RATE_PARENT, 2988 .ops = &clk_branch2_ops, 2989 }, 2990 }, 2991 }; 2992 2993 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 2994 .halt_reg = 0x77010, 2995 .halt_check = BRANCH_HALT, 2996 .hwcg_reg = 0x77010, 2997 .hwcg_bit = 1, 2998 .clkr = { 2999 .enable_reg = 0x77010, 3000 .enable_mask = BIT(1), 3001 .hw.init = &(struct clk_init_data){ 3002 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 3003 .parent_hws = (const struct clk_hw *[]){ 3004 &gcc_ufs_phy_axi_clk.clkr.hw }, 3005 .num_parents = 1, 3006 .flags = CLK_SET_RATE_PARENT, 3007 .ops = &clk_branch_simple_ops, 3008 }, 3009 }, 3010 }; 3011 3012 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 3013 .halt_reg = 0x7705c, 3014 .halt_check = BRANCH_HALT, 3015 .hwcg_reg = 0x7705c, 3016 .hwcg_bit = 1, 3017 .clkr = { 3018 .enable_reg = 0x7705c, 3019 .enable_mask = BIT(0), 3020 .hw.init = &(struct clk_init_data){ 3021 .name = "gcc_ufs_phy_ice_core_clk", 3022 .parent_hws = (const struct clk_hw *[]){ 3023 &gcc_ufs_phy_ice_core_clk_src.clkr.hw }, 3024 .num_parents = 1, 3025 .flags = CLK_SET_RATE_PARENT, 3026 .ops = &clk_branch2_ops, 3027 }, 3028 }, 3029 }; 3030 3031 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 3032 .halt_reg = 0x7705c, 3033 .halt_check = BRANCH_HALT, 3034 .hwcg_reg = 0x7705c, 3035 .hwcg_bit = 1, 3036 .clkr = { 3037 .enable_reg = 0x7705c, 3038 .enable_mask = BIT(1), 3039 .hw.init = &(struct clk_init_data){ 3040 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 3041 .parent_hws = (const struct clk_hw *[]){ 3042 &gcc_ufs_phy_ice_core_clk.clkr.hw }, 3043 .num_parents = 1, 3044 .flags = CLK_SET_RATE_PARENT, 3045 .ops = &clk_branch_simple_ops, 3046 }, 3047 }, 3048 }; 3049 3050 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 3051 .halt_reg = 0x77090, 3052 .halt_check = BRANCH_HALT, 3053 .hwcg_reg = 0x77090, 3054 .hwcg_bit = 1, 3055 .clkr = { 3056 .enable_reg = 0x77090, 3057 .enable_mask = BIT(0), 3058 .hw.init = &(struct clk_init_data){ 3059 .name = "gcc_ufs_phy_phy_aux_clk", 3060 .parent_hws = (const struct clk_hw *[]){ 3061 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw }, 3062 .num_parents = 1, 3063 .flags = CLK_SET_RATE_PARENT, 3064 .ops = &clk_branch2_ops, 3065 }, 3066 }, 3067 }; 3068 3069 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 3070 .halt_reg = 0x77090, 3071 .halt_check = BRANCH_HALT, 3072 .hwcg_reg = 0x77090, 3073 .hwcg_bit = 1, 3074 .clkr = { 3075 .enable_reg = 0x77090, 3076 .enable_mask = BIT(1), 3077 .hw.init = &(struct clk_init_data){ 3078 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 3079 .parent_hws = (const struct clk_hw *[]){ 3080 &gcc_ufs_phy_phy_aux_clk.clkr.hw }, 3081 .num_parents = 1, 3082 .flags = CLK_SET_RATE_PARENT, 3083 .ops = &clk_branch_simple_ops, 3084 }, 3085 }, 3086 }; 3087 3088 /* external clocks so add BRANCH_HALT_SKIP */ 3089 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 3090 .halt_check = BRANCH_HALT_SKIP, 3091 .clkr = { 3092 .enable_reg = 0x7701c, 3093 .enable_mask = BIT(0), 3094 .hw.init = &(struct clk_init_data){ 3095 .name = "gcc_ufs_phy_rx_symbol_0_clk", 3096 .ops = &clk_branch2_ops, 3097 }, 3098 }, 3099 }; 3100 3101 /* external clocks so add BRANCH_HALT_SKIP */ 3102 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = { 3103 .halt_check = BRANCH_HALT_SKIP, 3104 .clkr = { 3105 .enable_reg = 0x770ac, 3106 .enable_mask = BIT(0), 3107 .hw.init = &(struct clk_init_data){ 3108 .name = "gcc_ufs_phy_rx_symbol_1_clk", 3109 .ops = &clk_branch2_ops, 3110 }, 3111 }, 3112 }; 3113 3114 /* external clocks so add BRANCH_HALT_SKIP */ 3115 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 3116 .halt_check = BRANCH_HALT_SKIP, 3117 .clkr = { 3118 .enable_reg = 0x77018, 3119 .enable_mask = BIT(0), 3120 .hw.init = &(struct clk_init_data){ 3121 .name = "gcc_ufs_phy_tx_symbol_0_clk", 3122 .ops = &clk_branch2_ops, 3123 }, 3124 }, 3125 }; 3126 3127 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 3128 .halt_reg = 0x77058, 3129 .halt_check = BRANCH_HALT, 3130 .hwcg_reg = 0x77058, 3131 .hwcg_bit = 1, 3132 .clkr = { 3133 .enable_reg = 0x77058, 3134 .enable_mask = BIT(0), 3135 .hw.init = &(struct clk_init_data){ 3136 .name = "gcc_ufs_phy_unipro_core_clk", 3137 .parent_hws = (const struct clk_hw *[]){ 3138 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw }, 3139 .num_parents = 1, 3140 .flags = CLK_SET_RATE_PARENT, 3141 .ops = &clk_branch2_ops, 3142 }, 3143 }, 3144 }; 3145 3146 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 3147 .halt_reg = 0x77058, 3148 .halt_check = BRANCH_HALT, 3149 .hwcg_reg = 0x77058, 3150 .hwcg_bit = 1, 3151 .clkr = { 3152 .enable_reg = 0x77058, 3153 .enable_mask = BIT(1), 3154 .hw.init = &(struct clk_init_data){ 3155 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 3156 .parent_hws = (const struct clk_hw *[]){ 3157 &gcc_ufs_phy_unipro_core_clk.clkr.hw }, 3158 .num_parents = 1, 3159 .flags = CLK_SET_RATE_PARENT, 3160 .ops = &clk_branch_simple_ops, 3161 }, 3162 }, 3163 }; 3164 3165 static struct clk_branch gcc_usb30_prim_master_clk = { 3166 .halt_reg = 0xf010, 3167 .halt_check = BRANCH_HALT, 3168 .clkr = { 3169 .enable_reg = 0xf010, 3170 .enable_mask = BIT(0), 3171 .hw.init = &(struct clk_init_data){ 3172 .name = "gcc_usb30_prim_master_clk", 3173 .parent_hws = (const struct clk_hw *[]){ 3174 &gcc_usb30_prim_master_clk_src.clkr.hw }, 3175 .num_parents = 1, 3176 .flags = CLK_SET_RATE_PARENT, 3177 .ops = &clk_branch2_ops, 3178 }, 3179 }, 3180 }; 3181 3182 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 3183 .halt_reg = 0xf018, 3184 .halt_check = BRANCH_HALT, 3185 .clkr = { 3186 .enable_reg = 0xf018, 3187 .enable_mask = BIT(0), 3188 .hw.init = &(struct clk_init_data){ 3189 .name = "gcc_usb30_prim_mock_utmi_clk", 3190 .parent_hws = (const struct clk_hw *[]){ 3191 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw }, 3192 .num_parents = 1, 3193 .flags = CLK_SET_RATE_PARENT, 3194 .ops = &clk_branch2_ops, 3195 }, 3196 }, 3197 }; 3198 3199 static struct clk_branch gcc_usb30_prim_sleep_clk = { 3200 .halt_reg = 0xf014, 3201 .halt_check = BRANCH_HALT, 3202 .clkr = { 3203 .enable_reg = 0xf014, 3204 .enable_mask = BIT(0), 3205 .hw.init = &(struct clk_init_data){ 3206 .name = "gcc_usb30_prim_sleep_clk", 3207 .ops = &clk_branch2_ops, 3208 }, 3209 }, 3210 }; 3211 3212 static struct clk_branch gcc_usb30_sec_master_clk = { 3213 .halt_reg = 0x10010, 3214 .halt_check = BRANCH_HALT, 3215 .clkr = { 3216 .enable_reg = 0x10010, 3217 .enable_mask = BIT(0), 3218 .hw.init = &(struct clk_init_data){ 3219 .name = "gcc_usb30_sec_master_clk", 3220 .parent_hws = (const struct clk_hw *[]){ 3221 &gcc_usb30_sec_master_clk_src.clkr.hw }, 3222 .num_parents = 1, 3223 .flags = CLK_SET_RATE_PARENT, 3224 .ops = &clk_branch2_ops, 3225 }, 3226 }, 3227 }; 3228 3229 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = { 3230 .halt_reg = 0x10018, 3231 .halt_check = BRANCH_HALT, 3232 .clkr = { 3233 .enable_reg = 0x10018, 3234 .enable_mask = BIT(0), 3235 .hw.init = &(struct clk_init_data){ 3236 .name = "gcc_usb30_sec_mock_utmi_clk", 3237 .parent_hws = (const struct clk_hw *[]){ 3238 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw }, 3239 .num_parents = 1, 3240 .flags = CLK_SET_RATE_PARENT, 3241 .ops = &clk_branch2_ops, 3242 }, 3243 }, 3244 }; 3245 3246 static struct clk_branch gcc_usb30_sec_sleep_clk = { 3247 .halt_reg = 0x10014, 3248 .halt_check = BRANCH_HALT, 3249 .clkr = { 3250 .enable_reg = 0x10014, 3251 .enable_mask = BIT(0), 3252 .hw.init = &(struct clk_init_data){ 3253 .name = "gcc_usb30_sec_sleep_clk", 3254 .ops = &clk_branch2_ops, 3255 }, 3256 }, 3257 }; 3258 3259 static struct clk_branch gcc_usb3_prim_clkref_clk = { 3260 .halt_reg = 0x8c008, 3261 .halt_check = BRANCH_HALT, 3262 .clkr = { 3263 .enable_reg = 0x8c008, 3264 .enable_mask = BIT(0), 3265 .hw.init = &(struct clk_init_data){ 3266 .name = "gcc_usb3_prim_clkref_clk", 3267 .ops = &clk_branch2_ops, 3268 }, 3269 }, 3270 }; 3271 3272 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 3273 .halt_reg = 0xf050, 3274 .halt_check = BRANCH_HALT, 3275 .clkr = { 3276 .enable_reg = 0xf050, 3277 .enable_mask = BIT(0), 3278 .hw.init = &(struct clk_init_data){ 3279 .name = "gcc_usb3_prim_phy_aux_clk", 3280 .parent_hws = (const struct clk_hw *[]){ 3281 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw }, 3282 .num_parents = 1, 3283 .flags = CLK_SET_RATE_PARENT, 3284 .ops = &clk_branch2_ops, 3285 }, 3286 }, 3287 }; 3288 3289 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 3290 .halt_reg = 0xf054, 3291 .halt_check = BRANCH_HALT, 3292 .clkr = { 3293 .enable_reg = 0xf054, 3294 .enable_mask = BIT(0), 3295 .hw.init = &(struct clk_init_data){ 3296 .name = "gcc_usb3_prim_phy_com_aux_clk", 3297 .parent_hws = (const struct clk_hw *[]){ 3298 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw }, 3299 .num_parents = 1, 3300 .flags = CLK_SET_RATE_PARENT, 3301 .ops = &clk_branch2_ops, 3302 }, 3303 }, 3304 }; 3305 3306 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 3307 .halt_check = BRANCH_HALT_SKIP, 3308 .clkr = { 3309 .enable_reg = 0xf058, 3310 .enable_mask = BIT(0), 3311 .hw.init = &(struct clk_init_data){ 3312 .name = "gcc_usb3_prim_phy_pipe_clk", 3313 .ops = &clk_branch2_ops, 3314 }, 3315 }, 3316 }; 3317 3318 static struct clk_branch gcc_usb3_sec_clkref_clk = { 3319 .halt_reg = 0x8c028, 3320 .halt_check = BRANCH_HALT, 3321 .clkr = { 3322 .enable_reg = 0x8c028, 3323 .enable_mask = BIT(0), 3324 .hw.init = &(struct clk_init_data){ 3325 .name = "gcc_usb3_sec_clkref_clk", 3326 .ops = &clk_branch2_ops, 3327 }, 3328 }, 3329 }; 3330 3331 static struct clk_branch gcc_usb3_sec_phy_aux_clk = { 3332 .halt_reg = 0x10050, 3333 .halt_check = BRANCH_HALT, 3334 .clkr = { 3335 .enable_reg = 0x10050, 3336 .enable_mask = BIT(0), 3337 .hw.init = &(struct clk_init_data){ 3338 .name = "gcc_usb3_sec_phy_aux_clk", 3339 .parent_hws = (const struct clk_hw *[]){ 3340 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw }, 3341 .num_parents = 1, 3342 .flags = CLK_SET_RATE_PARENT, 3343 .ops = &clk_branch2_ops, 3344 }, 3345 }, 3346 }; 3347 3348 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = { 3349 .halt_reg = 0x10054, 3350 .halt_check = BRANCH_HALT, 3351 .clkr = { 3352 .enable_reg = 0x10054, 3353 .enable_mask = BIT(0), 3354 .hw.init = &(struct clk_init_data){ 3355 .name = "gcc_usb3_sec_phy_com_aux_clk", 3356 .parent_hws = (const struct clk_hw *[]){ 3357 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw }, 3358 .num_parents = 1, 3359 .flags = CLK_SET_RATE_PARENT, 3360 .ops = &clk_branch2_ops, 3361 }, 3362 }, 3363 }; 3364 3365 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = { 3366 .halt_check = BRANCH_HALT_SKIP, 3367 .clkr = { 3368 .enable_reg = 0x10058, 3369 .enable_mask = BIT(0), 3370 .hw.init = &(struct clk_init_data){ 3371 .name = "gcc_usb3_sec_phy_pipe_clk", 3372 .ops = &clk_branch2_ops, 3373 }, 3374 }, 3375 }; 3376 3377 /* 3378 * Clock ON depends on external parent 'config noc', so cant poll 3379 * delay and also mark as crtitical for video boot 3380 */ 3381 static struct clk_branch gcc_video_ahb_clk = { 3382 .halt_reg = 0xb004, 3383 .halt_check = BRANCH_HALT_DELAY, 3384 .hwcg_reg = 0xb004, 3385 .hwcg_bit = 1, 3386 .clkr = { 3387 .enable_reg = 0xb004, 3388 .enable_mask = BIT(0), 3389 .hw.init = &(struct clk_init_data){ 3390 .name = "gcc_video_ahb_clk", 3391 .flags = CLK_IS_CRITICAL, 3392 .ops = &clk_branch2_ops, 3393 }, 3394 }, 3395 }; 3396 3397 static struct clk_branch gcc_video_axi0_clk = { 3398 .halt_reg = 0xb024, 3399 .halt_check = BRANCH_HALT, 3400 .clkr = { 3401 .enable_reg = 0xb024, 3402 .enable_mask = BIT(0), 3403 .hw.init = &(struct clk_init_data){ 3404 .name = "gcc_video_axi0_clk", 3405 .ops = &clk_branch2_ops, 3406 }, 3407 }, 3408 }; 3409 3410 static struct clk_branch gcc_video_axi1_clk = { 3411 .halt_reg = 0xb028, 3412 .halt_check = BRANCH_HALT, 3413 .clkr = { 3414 .enable_reg = 0xb028, 3415 .enable_mask = BIT(0), 3416 .hw.init = &(struct clk_init_data){ 3417 .name = "gcc_video_axi1_clk", 3418 .ops = &clk_branch2_ops, 3419 }, 3420 }, 3421 }; 3422 3423 static struct clk_branch gcc_video_axic_clk = { 3424 .halt_reg = 0xb02c, 3425 .halt_check = BRANCH_HALT, 3426 .clkr = { 3427 .enable_reg = 0xb02c, 3428 .enable_mask = BIT(0), 3429 .hw.init = &(struct clk_init_data){ 3430 .name = "gcc_video_axic_clk", 3431 .ops = &clk_branch2_ops, 3432 }, 3433 }, 3434 }; 3435 3436 /* XO critical input to video, so no need to poll */ 3437 static struct clk_branch gcc_video_xo_clk = { 3438 .halt_reg = 0xb040, 3439 .halt_check = BRANCH_HALT_DELAY, 3440 .clkr = { 3441 .enable_reg = 0xb040, 3442 .enable_mask = BIT(0), 3443 .hw.init = &(struct clk_init_data){ 3444 .name = "gcc_video_xo_clk", 3445 .flags = CLK_IS_CRITICAL, 3446 .ops = &clk_branch2_ops, 3447 }, 3448 }, 3449 }; 3450 3451 static struct gdsc pcie_0_gdsc = { 3452 .gdscr = 0x6b004, 3453 .pd = { 3454 .name = "pcie_0_gdsc", 3455 }, 3456 .pwrsts = PWRSTS_OFF_ON, 3457 .flags = POLL_CFG_GDSCR, 3458 }; 3459 3460 static struct gdsc pcie_1_gdsc = { 3461 .gdscr = 0x8d004, 3462 .pd = { 3463 .name = "pcie_1_gdsc", 3464 }, 3465 .pwrsts = PWRSTS_OFF_ON, 3466 .flags = POLL_CFG_GDSCR, 3467 }; 3468 3469 static struct gdsc ufs_card_gdsc = { 3470 .gdscr = 0x75004, 3471 .pd = { 3472 .name = "ufs_card_gdsc", 3473 }, 3474 .pwrsts = PWRSTS_OFF_ON, 3475 .flags = POLL_CFG_GDSCR, 3476 }; 3477 3478 static struct gdsc ufs_phy_gdsc = { 3479 .gdscr = 0x77004, 3480 .pd = { 3481 .name = "ufs_phy_gdsc", 3482 }, 3483 .pwrsts = PWRSTS_OFF_ON, 3484 .flags = POLL_CFG_GDSCR, 3485 }; 3486 3487 static struct gdsc emac_gdsc = { 3488 .gdscr = 0x6004, 3489 .pd = { 3490 .name = "emac_gdsc", 3491 }, 3492 .pwrsts = PWRSTS_OFF_ON, 3493 .flags = POLL_CFG_GDSCR, 3494 }; 3495 3496 static struct gdsc usb30_prim_gdsc = { 3497 .gdscr = 0xf004, 3498 .pd = { 3499 .name = "usb30_prim_gdsc", 3500 }, 3501 .pwrsts = PWRSTS_OFF_ON, 3502 .flags = POLL_CFG_GDSCR, 3503 }; 3504 3505 static struct gdsc usb30_sec_gdsc = { 3506 .gdscr = 0x10004, 3507 .pd = { 3508 .name = "usb30_sec_gdsc", 3509 }, 3510 .pwrsts = PWRSTS_OFF_ON, 3511 .flags = POLL_CFG_GDSCR, 3512 }; 3513 3514 static struct clk_regmap *gcc_sm8150_clocks[] = { 3515 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr, 3516 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr, 3517 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = 3518 &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr, 3519 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 3520 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 3521 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 3522 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 3523 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr, 3524 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3525 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr, 3526 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 3527 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 3528 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr, 3529 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3530 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr, 3531 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 3532 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 3533 [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr, 3534 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, 3535 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 3536 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 3537 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr, 3538 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3539 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr, 3540 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr, 3541 [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr, 3542 [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr, 3543 [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr, 3544 [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr, 3545 [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr, 3546 [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr, 3547 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3548 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3549 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3550 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3551 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3552 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3553 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr, 3554 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3555 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3556 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr, 3557 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3558 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3559 [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr, 3560 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 3561 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 3562 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr, 3563 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr, 3564 [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr, 3565 [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr, 3566 [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr, 3567 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3568 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 3569 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3570 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr, 3571 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3572 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3573 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3574 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 3575 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3576 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr, 3577 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3578 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr, 3579 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3580 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3581 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3582 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr, 3583 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 3584 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr, 3585 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3586 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3587 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3588 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3589 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3590 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3591 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3592 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3593 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr, 3594 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3595 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr, 3596 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr, 3597 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr, 3598 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 3599 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 3600 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 3601 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 3602 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 3603 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 3604 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 3605 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 3606 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 3607 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 3608 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 3609 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 3610 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 3611 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 3612 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 3613 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 3614 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 3615 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 3616 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 3617 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 3618 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 3619 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 3620 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 3621 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 3622 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 3623 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 3624 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 3625 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 3626 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr, 3627 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr, 3628 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr, 3629 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr, 3630 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr, 3631 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr, 3632 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr, 3633 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr, 3634 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr, 3635 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr, 3636 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr, 3637 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr, 3638 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 3639 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 3640 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 3641 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 3642 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr, 3643 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr, 3644 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3645 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3646 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3647 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3648 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3649 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 3650 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 3651 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3652 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3653 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3654 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr, 3655 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr, 3656 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr, 3657 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr, 3658 [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr, 3659 [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr, 3660 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr, 3661 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr, 3662 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = 3663 &gcc_ufs_card_ice_core_hw_ctl_clk.clkr, 3664 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr, 3665 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr, 3666 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = 3667 &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr, 3668 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr, 3669 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr, 3670 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr, 3671 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr, 3672 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = 3673 &gcc_ufs_card_unipro_core_clk_src.clkr, 3674 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = 3675 &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr, 3676 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 3677 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3678 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3679 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3680 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 3681 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3682 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3683 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 3684 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 3685 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3686 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3687 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 3688 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 3689 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 3690 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 3691 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3692 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 3693 &gcc_ufs_phy_unipro_core_clk_src.clkr, 3694 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 3695 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 3696 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3697 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3698 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3699 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 3700 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3701 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3702 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr, 3703 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr, 3704 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr, 3705 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = 3706 &gcc_usb30_sec_mock_utmi_clk_src.clkr, 3707 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr, 3708 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 3709 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 3710 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3711 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3712 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3713 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr, 3714 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr, 3715 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr, 3716 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr, 3717 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr, 3718 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr, 3719 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3720 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr, 3721 [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr, 3722 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr, 3723 [GPLL0] = &gpll0.clkr, 3724 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 3725 [GPLL7] = &gpll7.clkr, 3726 [GPLL9] = &gpll9.clkr, 3727 }; 3728 3729 static const struct qcom_reset_map gcc_sm8150_resets[] = { 3730 [GCC_EMAC_BCR] = { 0x6000 }, 3731 [GCC_GPU_BCR] = { 0x71000 }, 3732 [GCC_MMSS_BCR] = { 0xb000 }, 3733 [GCC_NPU_BCR] = { 0x4d000 }, 3734 [GCC_PCIE_0_BCR] = { 0x6b000 }, 3735 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3736 [GCC_PCIE_1_BCR] = { 0x8d000 }, 3737 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c }, 3738 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3739 [GCC_PDM_BCR] = { 0x33000 }, 3740 [GCC_PRNG_BCR] = { 0x34000 }, 3741 [GCC_QSPI_BCR] = { 0x24008 }, 3742 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 }, 3743 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 }, 3744 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 }, 3745 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 3746 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 3747 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 }, 3748 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 }, 3749 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c }, 3750 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 }, 3751 [GCC_SDCC2_BCR] = { 0x14000 }, 3752 [GCC_SDCC4_BCR] = { 0x16000 }, 3753 [GCC_TSIF_BCR] = { 0x36000 }, 3754 [GCC_UFS_CARD_BCR] = { 0x75000 }, 3755 [GCC_UFS_PHY_BCR] = { 0x77000 }, 3756 [GCC_USB30_PRIM_BCR] = { 0xf000 }, 3757 [GCC_USB30_SEC_BCR] = { 0x10000 }, 3758 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 3759 }; 3760 3761 static struct gdsc *gcc_sm8150_gdscs[] = { 3762 [EMAC_GDSC] = &emac_gdsc, 3763 [PCIE_0_GDSC] = &pcie_0_gdsc, 3764 [PCIE_1_GDSC] = &pcie_1_gdsc, 3765 [UFS_CARD_GDSC] = &ufs_card_gdsc, 3766 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 3767 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 3768 [USB30_SEC_GDSC] = &usb30_sec_gdsc, 3769 }; 3770 3771 static const struct regmap_config gcc_sm8150_regmap_config = { 3772 .reg_bits = 32, 3773 .reg_stride = 4, 3774 .val_bits = 32, 3775 .max_register = 0x9c040, 3776 .fast_io = true, 3777 }; 3778 3779 static const struct qcom_cc_desc gcc_sm8150_desc = { 3780 .config = &gcc_sm8150_regmap_config, 3781 .clks = gcc_sm8150_clocks, 3782 .num_clks = ARRAY_SIZE(gcc_sm8150_clocks), 3783 .resets = gcc_sm8150_resets, 3784 .num_resets = ARRAY_SIZE(gcc_sm8150_resets), 3785 .gdscs = gcc_sm8150_gdscs, 3786 .num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs), 3787 }; 3788 3789 static const struct of_device_id gcc_sm8150_match_table[] = { 3790 { .compatible = "qcom,gcc-sm8150" }, 3791 { } 3792 }; 3793 MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table); 3794 3795 static int gcc_sm8150_probe(struct platform_device *pdev) 3796 { 3797 struct regmap *regmap; 3798 3799 regmap = qcom_cc_map(pdev, &gcc_sm8150_desc); 3800 if (IS_ERR(regmap)) 3801 return PTR_ERR(regmap); 3802 3803 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */ 3804 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3); 3805 regmap_update_bits(regmap, 0x71028, 0x3, 0x3); 3806 3807 return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap); 3808 } 3809 3810 static struct platform_driver gcc_sm8150_driver = { 3811 .probe = gcc_sm8150_probe, 3812 .driver = { 3813 .name = "gcc-sm8150", 3814 .of_match_table = gcc_sm8150_match_table, 3815 }, 3816 }; 3817 3818 static int __init gcc_sm8150_init(void) 3819 { 3820 return platform_driver_register(&gcc_sm8150_driver); 3821 } 3822 subsys_initcall(gcc_sm8150_init); 3823 3824 static void __exit gcc_sm8150_exit(void) 3825 { 3826 platform_driver_unregister(&gcc_sm8150_driver); 3827 } 3828 module_exit(gcc_sm8150_exit); 3829 3830 MODULE_DESCRIPTION("QTI GCC SM8150 Driver"); 3831 MODULE_LICENSE("GPL v2"); 3832