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