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