1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2023, Danila Tikhonov <danila@jiaxyga.com> 5 * Copyright (c) 2023, David Wronek <davidwronek@gmail.com> 6 */ 7 8 #include <linux/clk-provider.h> 9 #include <linux/err.h> 10 #include <linux/kernel.h> 11 #include <linux/mod_devicetable.h> 12 #include <linux/module.h> 13 #include <linux/platform_device.h> 14 #include <linux/regmap.h> 15 16 #include <dt-bindings/clock/qcom,sm7150-gcc.h> 17 18 #include "clk-alpha-pll.h" 19 #include "clk-branch.h" 20 #include "clk-rcg.h" 21 #include "clk-regmap.h" 22 #include "common.h" 23 #include "gdsc.h" 24 #include "reset.h" 25 26 enum { 27 DT_BI_TCXO, 28 DT_BI_TCXO_AO, 29 DT_SLEEP_CLK 30 }; 31 32 enum { 33 P_BI_TCXO, 34 P_GPLL0_OUT_EVEN, 35 P_GPLL0_OUT_MAIN, 36 P_GPLL6_OUT_MAIN, 37 P_GPLL7_OUT_MAIN, 38 P_SLEEP_CLK, 39 }; 40 41 static struct clk_alpha_pll gpll0 = { 42 .offset = 0x0, 43 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 44 .clkr = { 45 .enable_reg = 0x52000, 46 .enable_mask = BIT(0), 47 .hw.init = &(struct clk_init_data){ 48 .name = "gpll0", 49 .parent_data = &(const struct clk_parent_data){ 50 .index = DT_BI_TCXO, 51 }, 52 .num_parents = 1, 53 .ops = &clk_alpha_pll_fixed_fabia_ops, 54 }, 55 }, 56 }; 57 58 static const struct clk_div_table post_div_table_fabia_even[] = { 59 { 0x0, 1 }, 60 { 0x1, 2 }, 61 { 0x3, 4 }, 62 { 0x7, 8 }, 63 { } 64 }; 65 66 static struct clk_alpha_pll_postdiv gpll0_out_even = { 67 .offset = 0x0, 68 .post_div_shift = 8, 69 .post_div_table = post_div_table_fabia_even, 70 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 71 .width = 4, 72 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 73 .clkr.hw.init = &(struct clk_init_data){ 74 .name = "gpll0_out_even", 75 .parent_hws = (const struct clk_hw*[]){ 76 &gpll0.clkr.hw, 77 }, 78 .num_parents = 1, 79 .ops = &clk_alpha_pll_postdiv_fabia_ops, 80 }, 81 }; 82 83 static struct clk_fixed_factor gcc_pll0_main_div_cdiv = { 84 .mult = 1, 85 .div = 2, 86 .hw.init = &(struct clk_init_data){ 87 .name = "gcc_pll0_main_div_cdiv", 88 .parent_hws = (const struct clk_hw*[]){ 89 &gpll0.clkr.hw, 90 }, 91 .num_parents = 1, 92 .ops = &clk_fixed_factor_ops, 93 }, 94 }; 95 96 static struct clk_alpha_pll gpll6 = { 97 .offset = 0x13000, 98 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 99 .clkr = { 100 .enable_reg = 0x52000, 101 .enable_mask = BIT(6), 102 .hw.init = &(struct clk_init_data){ 103 .name = "gpll6", 104 .parent_data = &(const struct clk_parent_data){ 105 .index = DT_BI_TCXO, 106 }, 107 .num_parents = 1, 108 .ops = &clk_alpha_pll_fixed_fabia_ops, 109 }, 110 }, 111 }; 112 113 static struct clk_alpha_pll gpll7 = { 114 .offset = 0x27000, 115 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 116 .clkr = { 117 .enable_reg = 0x52000, 118 .enable_mask = BIT(7), 119 .hw.init = &(struct clk_init_data){ 120 .name = "gpll7", 121 .parent_data = &(const struct clk_parent_data){ 122 .index = DT_BI_TCXO, 123 }, 124 .num_parents = 1, 125 .ops = &clk_alpha_pll_fixed_fabia_ops, 126 }, 127 }, 128 }; 129 130 static const struct parent_map gcc_parent_map_0[] = { 131 { P_BI_TCXO, 0 }, 132 { P_GPLL0_OUT_MAIN, 1 }, 133 { P_GPLL0_OUT_EVEN, 6 }, 134 }; 135 136 static const struct clk_parent_data gcc_parent_data_0[] = { 137 { .index = DT_BI_TCXO }, 138 { .hw = &gpll0.clkr.hw }, 139 { .hw = &gpll0_out_even.clkr.hw }, 140 }; 141 static const struct clk_parent_data gcc_parent_data_0_ao[] = { 142 { .index = DT_BI_TCXO_AO }, 143 { .hw = &gpll0.clkr.hw }, 144 { .hw = &gpll0_out_even.clkr.hw }, 145 }; 146 147 static const struct parent_map gcc_parent_map_1[] = { 148 { P_BI_TCXO, 0 }, 149 { P_GPLL0_OUT_MAIN, 1 }, 150 { P_SLEEP_CLK, 5 }, 151 { P_GPLL0_OUT_EVEN, 6 }, 152 }; 153 154 static const struct clk_parent_data gcc_parent_data_1[] = { 155 { .index = DT_BI_TCXO }, 156 { .hw = &gpll0.clkr.hw }, 157 { .index = DT_SLEEP_CLK }, 158 { .hw = &gpll0_out_even.clkr.hw }, 159 }; 160 161 static const struct parent_map gcc_parent_map_2[] = { 162 { P_BI_TCXO, 0 }, 163 { P_GPLL0_OUT_MAIN, 1 }, 164 }; 165 166 static const struct clk_parent_data gcc_parent_data_2[] = { 167 { .index = DT_BI_TCXO }, 168 { .hw = &gpll0.clkr.hw }, 169 }; 170 171 static const struct clk_parent_data gcc_parent_data_2_ao[] = { 172 { .index = DT_BI_TCXO_AO }, 173 { .hw = &gpll0.clkr.hw }, 174 }; 175 176 static const struct parent_map gcc_parent_map_3[] = { 177 { P_BI_TCXO, 0 }, 178 { P_SLEEP_CLK, 5 }, 179 }; 180 181 static const struct clk_parent_data gcc_parent_data_3[] = { 182 { .index = DT_BI_TCXO }, 183 { .index = DT_SLEEP_CLK }, 184 }; 185 186 static const struct parent_map gcc_parent_map_4[] = { 187 { P_BI_TCXO, 0 }, 188 }; 189 190 static const struct clk_parent_data gcc_parent_data_4[] = { 191 { .index = DT_BI_TCXO }, 192 }; 193 194 static const struct parent_map gcc_parent_map_5[] = { 195 { P_BI_TCXO, 0 }, 196 { P_GPLL0_OUT_MAIN, 1 }, 197 { P_GPLL6_OUT_MAIN, 2 }, 198 { P_GPLL0_OUT_EVEN, 6 }, 199 }; 200 201 static const struct clk_parent_data gcc_parent_data_5[] = { 202 { .index = DT_BI_TCXO }, 203 { .hw = &gpll0.clkr.hw }, 204 { .hw = &gpll6.clkr.hw }, 205 { .hw = &gpll0_out_even.clkr.hw }, 206 }; 207 208 static const struct parent_map gcc_parent_map_6[] = { 209 { P_BI_TCXO, 0 }, 210 { P_GPLL0_OUT_MAIN, 1 }, 211 { P_GPLL7_OUT_MAIN, 3 }, 212 { P_GPLL0_OUT_EVEN, 6 }, 213 }; 214 215 static const struct clk_parent_data gcc_parent_data_6[] = { 216 { .index = DT_BI_TCXO }, 217 { .hw = &gpll0.clkr.hw }, 218 { .hw = &gpll7.clkr.hw }, 219 { .hw = &gpll0_out_even.clkr.hw }, 220 }; 221 222 static const struct parent_map gcc_parent_map_7[] = { 223 { P_BI_TCXO, 0 }, 224 { P_GPLL0_OUT_MAIN, 1 }, 225 { P_GPLL0_OUT_EVEN, 6 }, 226 }; 227 228 static const struct clk_parent_data gcc_parent_data_7[] = { 229 { .index = DT_BI_TCXO }, 230 { .hw = &gpll0.clkr.hw }, 231 { .hw = &gpll0_out_even.clkr.hw }, 232 }; 233 234 static const struct parent_map gcc_parent_map_8[] = { 235 { P_BI_TCXO, 0 }, 236 { P_GPLL0_OUT_MAIN, 1 }, 237 }; 238 239 static const struct clk_parent_data gcc_parent_data_8[] = { 240 { .index = DT_BI_TCXO }, 241 { .hw = &gpll0.clkr.hw }, 242 }; 243 244 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = { 245 F(19200000, P_BI_TCXO, 1, 0, 0), 246 { } 247 }; 248 249 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = { 250 .cmd_rcgr = 0x48014, 251 .mnd_width = 0, 252 .hid_width = 5, 253 .parent_map = gcc_parent_map_0, 254 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src, 255 .clkr.hw.init = &(struct clk_init_data){ 256 .name = "gcc_cpuss_ahb_clk_src", 257 .parent_data = gcc_parent_data_0_ao, 258 .num_parents = ARRAY_SIZE(gcc_parent_data_0_ao), 259 .flags = CLK_SET_RATE_PARENT, 260 .ops = &clk_rcg2_ops, 261 }, 262 }; 263 264 static const struct freq_tbl ftbl_gcc_cpuss_rbcpr_clk_src[] = { 265 F(19200000, P_BI_TCXO, 1, 0, 0), 266 { } 267 }; 268 269 static struct clk_rcg2 gcc_cpuss_rbcpr_clk_src = { 270 .cmd_rcgr = 0x4815c, 271 .mnd_width = 0, 272 .hid_width = 5, 273 .parent_map = gcc_parent_map_2, 274 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src, 275 .clkr.hw.init = &(struct clk_init_data){ 276 .name = "gcc_cpuss_rbcpr_clk_src", 277 .parent_data = gcc_parent_data_2_ao, 278 .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao), 279 .ops = &clk_rcg2_ops, 280 }, 281 }; 282 283 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 284 F(19200000, P_BI_TCXO, 1, 0, 0), 285 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 286 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 287 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 288 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 289 { } 290 }; 291 292 static struct clk_rcg2 gcc_gp1_clk_src = { 293 .cmd_rcgr = 0x64004, 294 .mnd_width = 8, 295 .hid_width = 5, 296 .parent_map = gcc_parent_map_1, 297 .freq_tbl = ftbl_gcc_gp1_clk_src, 298 .clkr.hw.init = &(struct clk_init_data){ 299 .name = "gcc_gp1_clk_src", 300 .parent_data = gcc_parent_data_1, 301 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 302 .ops = &clk_rcg2_ops, 303 }, 304 }; 305 306 static struct clk_rcg2 gcc_gp2_clk_src = { 307 .cmd_rcgr = 0x65004, 308 .mnd_width = 8, 309 .hid_width = 5, 310 .parent_map = gcc_parent_map_1, 311 .freq_tbl = ftbl_gcc_gp1_clk_src, 312 .clkr.hw.init = &(struct clk_init_data){ 313 .name = "gcc_gp2_clk_src", 314 .parent_data = gcc_parent_data_1, 315 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 316 .ops = &clk_rcg2_ops, 317 }, 318 }; 319 320 static struct clk_rcg2 gcc_gp3_clk_src = { 321 .cmd_rcgr = 0x66004, 322 .mnd_width = 8, 323 .hid_width = 5, 324 .parent_map = gcc_parent_map_1, 325 .freq_tbl = ftbl_gcc_gp1_clk_src, 326 .clkr.hw.init = &(struct clk_init_data){ 327 .name = "gcc_gp3_clk_src", 328 .parent_data = gcc_parent_data_1, 329 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 330 .ops = &clk_rcg2_ops, 331 }, 332 }; 333 334 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 335 F(9600000, P_BI_TCXO, 2, 0, 0), 336 F(19200000, P_BI_TCXO, 1, 0, 0), 337 { } 338 }; 339 340 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 341 .cmd_rcgr = 0x6b028, 342 .mnd_width = 16, 343 .hid_width = 5, 344 .parent_map = gcc_parent_map_3, 345 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 346 .clkr.hw.init = &(struct clk_init_data){ 347 .name = "gcc_pcie_0_aux_clk_src", 348 .parent_data = gcc_parent_data_3, 349 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 350 .ops = &clk_rcg2_ops, 351 }, 352 }; 353 354 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = { 355 F(19200000, P_BI_TCXO, 1, 0, 0), 356 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 357 { } 358 }; 359 360 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = { 361 .cmd_rcgr = 0x6f014, 362 .mnd_width = 0, 363 .hid_width = 5, 364 .parent_map = gcc_parent_map_0, 365 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src, 366 .clkr.hw.init = &(struct clk_init_data){ 367 .name = "gcc_pcie_phy_refgen_clk_src", 368 .parent_data = gcc_parent_data_0, 369 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 370 .ops = &clk_rcg2_ops, 371 }, 372 }; 373 374 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 375 F(19200000, P_BI_TCXO, 1, 0, 0), 376 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 377 { } 378 }; 379 380 static struct clk_rcg2 gcc_pdm2_clk_src = { 381 .cmd_rcgr = 0x33010, 382 .mnd_width = 0, 383 .hid_width = 5, 384 .parent_map = gcc_parent_map_0, 385 .freq_tbl = ftbl_gcc_pdm2_clk_src, 386 .clkr.hw.init = &(struct clk_init_data){ 387 .name = "gcc_pdm2_clk_src", 388 .parent_data = gcc_parent_data_0, 389 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 390 .ops = &clk_rcg2_ops, 391 }, 392 }; 393 394 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 395 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625), 396 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625), 397 F(19200000, P_BI_TCXO, 1, 0, 0), 398 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625), 399 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75), 400 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25), 401 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75), 402 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15), 403 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25), 404 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 405 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375), 406 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75), 407 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625), 408 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0), 409 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75), 410 { } 411 }; 412 413 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 414 .name = "gcc_qupv3_wrap0_s0_clk_src", 415 .parent_data = gcc_parent_data_0, 416 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 417 .ops = &clk_rcg2_ops, 418 }; 419 420 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 421 .cmd_rcgr = 0x17034, 422 .mnd_width = 16, 423 .hid_width = 5, 424 .parent_map = gcc_parent_map_0, 425 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 426 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 427 }; 428 429 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 430 .name = "gcc_qupv3_wrap0_s1_clk_src", 431 .parent_data = gcc_parent_data_0, 432 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 433 .ops = &clk_rcg2_ops, 434 }; 435 436 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 437 .cmd_rcgr = 0x17164, 438 .mnd_width = 16, 439 .hid_width = 5, 440 .parent_map = gcc_parent_map_0, 441 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 442 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 443 }; 444 445 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 446 .name = "gcc_qupv3_wrap0_s2_clk_src", 447 .parent_data = gcc_parent_data_0, 448 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 449 .ops = &clk_rcg2_ops, 450 }; 451 452 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 453 .cmd_rcgr = 0x17294, 454 .mnd_width = 16, 455 .hid_width = 5, 456 .parent_map = gcc_parent_map_0, 457 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 458 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 459 }; 460 461 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 462 .name = "gcc_qupv3_wrap0_s3_clk_src", 463 .parent_data = gcc_parent_data_0, 464 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 465 .ops = &clk_rcg2_ops, 466 }; 467 468 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 469 .cmd_rcgr = 0x173c4, 470 .mnd_width = 16, 471 .hid_width = 5, 472 .parent_map = gcc_parent_map_0, 473 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 474 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 475 }; 476 477 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 478 .name = "gcc_qupv3_wrap0_s4_clk_src", 479 .parent_data = gcc_parent_data_0, 480 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 481 .ops = &clk_rcg2_ops, 482 }; 483 484 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 485 .cmd_rcgr = 0x174f4, 486 .mnd_width = 16, 487 .hid_width = 5, 488 .parent_map = gcc_parent_map_0, 489 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 490 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 491 }; 492 493 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 494 .name = "gcc_qupv3_wrap0_s5_clk_src", 495 .parent_data = gcc_parent_data_0, 496 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 497 .ops = &clk_rcg2_ops, 498 }; 499 500 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 501 .cmd_rcgr = 0x17624, 502 .mnd_width = 16, 503 .hid_width = 5, 504 .parent_map = gcc_parent_map_0, 505 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 506 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 507 }; 508 509 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = { 510 .name = "gcc_qupv3_wrap0_s6_clk_src", 511 .parent_data = gcc_parent_data_0, 512 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 513 .flags = CLK_SET_RATE_PARENT, 514 .ops = &clk_rcg2_ops, 515 }; 516 517 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 518 .cmd_rcgr = 0x17754, 519 .mnd_width = 16, 520 .hid_width = 5, 521 .parent_map = gcc_parent_map_0, 522 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 523 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init, 524 }; 525 526 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = { 527 .name = "gcc_qupv3_wrap0_s7_clk_src", 528 .parent_data = gcc_parent_data_0, 529 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 530 .flags = CLK_SET_RATE_PARENT, 531 .ops = &clk_rcg2_ops, 532 }; 533 534 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 535 .cmd_rcgr = 0x17884, 536 .mnd_width = 16, 537 .hid_width = 5, 538 .parent_map = gcc_parent_map_0, 539 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 540 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init, 541 }; 542 543 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 544 .name = "gcc_qupv3_wrap1_s0_clk_src", 545 .parent_data = gcc_parent_data_0, 546 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 547 .ops = &clk_rcg2_ops, 548 }; 549 550 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 551 .cmd_rcgr = 0x18018, 552 .mnd_width = 16, 553 .hid_width = 5, 554 .parent_map = gcc_parent_map_0, 555 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 556 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 557 }; 558 559 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 560 .name = "gcc_qupv3_wrap1_s1_clk_src", 561 .parent_data = gcc_parent_data_0, 562 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 563 .ops = &clk_rcg2_ops, 564 }; 565 566 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 567 .cmd_rcgr = 0x18148, 568 .mnd_width = 16, 569 .hid_width = 5, 570 .parent_map = gcc_parent_map_0, 571 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 572 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 573 }; 574 575 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 576 .name = "gcc_qupv3_wrap1_s2_clk_src", 577 .parent_data = gcc_parent_data_0, 578 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 579 .ops = &clk_rcg2_ops, 580 }; 581 582 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 583 .cmd_rcgr = 0x18278, 584 .mnd_width = 16, 585 .hid_width = 5, 586 .parent_map = gcc_parent_map_0, 587 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 588 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 589 }; 590 591 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 592 .name = "gcc_qupv3_wrap1_s3_clk_src", 593 .parent_data = gcc_parent_data_0, 594 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 595 .ops = &clk_rcg2_ops, 596 }; 597 598 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 599 .cmd_rcgr = 0x183a8, 600 .mnd_width = 16, 601 .hid_width = 5, 602 .parent_map = gcc_parent_map_0, 603 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 604 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 605 }; 606 607 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 608 .name = "gcc_qupv3_wrap1_s4_clk_src", 609 .parent_data = gcc_parent_data_0, 610 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 611 .ops = &clk_rcg2_ops, 612 }; 613 614 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 615 .cmd_rcgr = 0x184d8, 616 .mnd_width = 16, 617 .hid_width = 5, 618 .parent_map = gcc_parent_map_0, 619 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 620 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 621 }; 622 623 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 624 .name = "gcc_qupv3_wrap1_s5_clk_src", 625 .parent_data = gcc_parent_data_0, 626 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 627 .ops = &clk_rcg2_ops, 628 }; 629 630 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 631 .cmd_rcgr = 0x18608, 632 .mnd_width = 16, 633 .hid_width = 5, 634 .parent_map = gcc_parent_map_0, 635 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 636 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 637 }; 638 639 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = { 640 .name = "gcc_qupv3_wrap1_s6_clk_src", 641 .parent_data = gcc_parent_data_0, 642 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 643 .ops = &clk_rcg2_ops, 644 }; 645 646 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { 647 .cmd_rcgr = 0x18738, 648 .mnd_width = 16, 649 .hid_width = 5, 650 .parent_map = gcc_parent_map_0, 651 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 652 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init, 653 }; 654 655 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = { 656 .name = "gcc_qupv3_wrap1_s7_clk_src", 657 .parent_data = gcc_parent_data_0, 658 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 659 .ops = &clk_rcg2_ops, 660 }; 661 662 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { 663 .cmd_rcgr = 0x18868, 664 .mnd_width = 16, 665 .hid_width = 5, 666 .parent_map = gcc_parent_map_0, 667 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 668 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init, 669 }; 670 671 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = { 672 F(144000, P_BI_TCXO, 16, 3, 25), 673 F(400000, P_BI_TCXO, 12, 1, 4), 674 F(19200000, P_BI_TCXO, 1, 0, 0), 675 F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3), 676 F(25000000, P_GPLL0_OUT_EVEN, 6, 1, 2), 677 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 678 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0), 679 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0), 680 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0), 681 { } 682 }; 683 684 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { 685 .cmd_rcgr = 0x12028, 686 .mnd_width = 8, 687 .hid_width = 5, 688 .parent_map = gcc_parent_map_5, 689 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src, 690 .clkr.hw.init = &(struct clk_init_data){ 691 .name = "gcc_sdcc1_apps_clk_src", 692 .parent_data = gcc_parent_data_5, 693 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 694 .ops = &clk_rcg2_floor_ops, 695 }, 696 }; 697 698 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = { 699 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 700 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 701 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 702 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 703 { } 704 }; 705 706 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { 707 .cmd_rcgr = 0x12010, 708 .mnd_width = 0, 709 .hid_width = 5, 710 .parent_map = gcc_parent_map_0, 711 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src, 712 .clkr.hw.init = &(struct clk_init_data){ 713 .name = "gcc_sdcc1_ice_core_clk_src", 714 .parent_data = gcc_parent_data_0, 715 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 716 .ops = &clk_rcg2_ops, 717 }, 718 }; 719 720 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { 721 F(400000, P_BI_TCXO, 12, 1, 4), 722 F(9600000, P_BI_TCXO, 2, 0, 0), 723 F(19200000, P_BI_TCXO, 1, 0, 0), 724 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 725 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 726 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 727 F(208000000, P_GPLL7_OUT_MAIN, 4, 0, 0), 728 { } 729 }; 730 731 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { 732 .cmd_rcgr = 0x1400c, 733 .mnd_width = 8, 734 .hid_width = 5, 735 .parent_map = gcc_parent_map_6, 736 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src, 737 .clkr.hw.init = &(struct clk_init_data){ 738 .name = "gcc_sdcc2_apps_clk_src", 739 .parent_data = gcc_parent_data_6, 740 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 741 .ops = &clk_rcg2_floor_ops, 742 .flags = CLK_OPS_PARENT_ENABLE, 743 }, 744 }; 745 746 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = { 747 F(400000, P_BI_TCXO, 12, 1, 4), 748 F(9600000, P_BI_TCXO, 2, 0, 0), 749 F(19200000, P_BI_TCXO, 1, 0, 0), 750 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 751 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0), 752 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), 753 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 754 { } 755 }; 756 757 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = { 758 .cmd_rcgr = 0x1600c, 759 .mnd_width = 8, 760 .hid_width = 5, 761 .parent_map = gcc_parent_map_0, 762 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src, 763 .clkr.hw.init = &(struct clk_init_data){ 764 .name = "gcc_sdcc4_apps_clk_src", 765 .parent_data = gcc_parent_data_0, 766 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 767 .ops = &clk_rcg2_floor_ops, 768 }, 769 }; 770 771 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = { 772 F(105495, P_BI_TCXO, 2, 1, 91), 773 { } 774 }; 775 776 static struct clk_rcg2 gcc_tsif_ref_clk_src = { 777 .cmd_rcgr = 0x36010, 778 .mnd_width = 8, 779 .hid_width = 5, 780 .parent_map = gcc_parent_map_7, 781 .freq_tbl = ftbl_gcc_tsif_ref_clk_src, 782 .clkr.hw.init = &(struct clk_init_data){ 783 .name = "gcc_tsif_ref_clk_src", 784 .parent_data = gcc_parent_data_7, 785 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 786 .ops = &clk_rcg2_ops, 787 }, 788 }; 789 790 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = { 791 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0), 792 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), 793 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), 794 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 795 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 796 { } 797 }; 798 799 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = { 800 .cmd_rcgr = 0x77020, 801 .mnd_width = 8, 802 .hid_width = 5, 803 .parent_map = gcc_parent_map_0, 804 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src, 805 .clkr.hw.init = &(struct clk_init_data){ 806 .name = "gcc_ufs_phy_axi_clk_src", 807 .parent_data = gcc_parent_data_0, 808 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 809 .ops = &clk_rcg2_ops, 810 }, 811 }; 812 813 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = { 814 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 815 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0), 816 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 817 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 818 { } 819 }; 820 821 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = { 822 .cmd_rcgr = 0x77048, 823 .mnd_width = 0, 824 .hid_width = 5, 825 .parent_map = gcc_parent_map_0, 826 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src, 827 .clkr.hw.init = &(struct clk_init_data){ 828 .name = "gcc_ufs_phy_ice_core_clk_src", 829 .parent_data = gcc_parent_data_0, 830 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 831 .ops = &clk_rcg2_ops, 832 }, 833 }; 834 835 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = { 836 .cmd_rcgr = 0x77098, 837 .mnd_width = 0, 838 .hid_width = 5, 839 .parent_map = gcc_parent_map_4, 840 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 841 .clkr.hw.init = &(struct clk_init_data){ 842 .name = "gcc_ufs_phy_phy_aux_clk_src", 843 .parent_data = gcc_parent_data_4, 844 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 845 .ops = &clk_rcg2_ops, 846 }, 847 }; 848 849 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = { 850 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0), 851 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 852 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 853 { } 854 }; 855 856 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = { 857 .cmd_rcgr = 0x77060, 858 .mnd_width = 0, 859 .hid_width = 5, 860 .parent_map = gcc_parent_map_0, 861 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src, 862 .clkr.hw.init = &(struct clk_init_data){ 863 .name = "gcc_ufs_phy_unipro_core_clk_src", 864 .parent_data = gcc_parent_data_0, 865 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 866 .ops = &clk_rcg2_ops, 867 }, 868 }; 869 870 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 871 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0), 872 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 873 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 874 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 875 { } 876 }; 877 878 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 879 .cmd_rcgr = 0xf01c, 880 .mnd_width = 8, 881 .hid_width = 5, 882 .parent_map = gcc_parent_map_0, 883 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 884 .clkr.hw.init = &(struct clk_init_data){ 885 .name = "gcc_usb30_prim_master_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 const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = { 893 F(19200000, P_BI_TCXO, 1, 0, 0), 894 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0), 895 F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0), 896 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 897 { } 898 }; 899 900 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 901 .cmd_rcgr = 0xf034, 902 .mnd_width = 0, 903 .hid_width = 5, 904 .parent_map = gcc_parent_map_0, 905 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src, 906 .clkr.hw.init = &(struct clk_init_data){ 907 .name = "gcc_usb30_prim_mock_utmi_clk_src", 908 .parent_data = gcc_parent_data_0, 909 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 910 .ops = &clk_rcg2_ops, 911 }, 912 }; 913 914 static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = { 915 F(19200000, P_BI_TCXO, 1, 0, 0), 916 { } 917 }; 918 919 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 920 .cmd_rcgr = 0xf060, 921 .mnd_width = 0, 922 .hid_width = 5, 923 .parent_map = gcc_parent_map_3, 924 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src, 925 .clkr.hw.init = &(struct clk_init_data){ 926 .name = "gcc_usb3_prim_phy_aux_clk_src", 927 .parent_data = gcc_parent_data_3, 928 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 929 .ops = &clk_rcg2_ops, 930 }, 931 }; 932 933 static struct clk_rcg2 gcc_vs_ctrl_clk_src = { 934 .cmd_rcgr = 0x7a030, 935 .mnd_width = 0, 936 .hid_width = 5, 937 .parent_map = gcc_parent_map_2, 938 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src, 939 .clkr.hw.init = &(struct clk_init_data){ 940 .name = "gcc_vs_ctrl_clk_src", 941 .parent_data = gcc_parent_data_2, 942 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 943 .ops = &clk_rcg2_ops, 944 }, 945 }; 946 947 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = { 948 F(19200000, P_BI_TCXO, 1, 0, 0), 949 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 950 F(600000000, P_GPLL0_OUT_MAIN, 1, 0, 0), 951 { } 952 }; 953 954 static struct clk_rcg2 gcc_vsensor_clk_src = { 955 .cmd_rcgr = 0x7a018, 956 .mnd_width = 0, 957 .hid_width = 5, 958 .parent_map = gcc_parent_map_8, 959 .freq_tbl = ftbl_gcc_vsensor_clk_src, 960 .clkr.hw.init = &(struct clk_init_data){ 961 .name = "gcc_vsensor_clk_src", 962 .parent_data = gcc_parent_data_8, 963 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 964 .ops = &clk_rcg2_ops, 965 }, 966 }; 967 968 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = { 969 .halt_reg = 0x2800c, 970 .halt_check = BRANCH_HALT, 971 .clkr = { 972 .enable_reg = 0x2800c, 973 .enable_mask = BIT(0), 974 .hw.init = &(struct clk_init_data){ 975 .name = "gcc_aggre_noc_pcie_tbu_clk", 976 .ops = &clk_branch2_ops, 977 }, 978 }, 979 }; 980 981 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = { 982 .halt_reg = 0x82024, 983 .halt_check = BRANCH_HALT, 984 .hwcg_reg = 0x82024, 985 .hwcg_bit = 1, 986 .clkr = { 987 .enable_reg = 0x82024, 988 .enable_mask = BIT(0), 989 .hw.init = &(struct clk_init_data){ 990 .name = "gcc_aggre_ufs_phy_axi_clk", 991 .parent_hws = (const struct clk_hw*[]){ 992 &gcc_ufs_phy_axi_clk_src.clkr.hw, 993 }, 994 .num_parents = 1, 995 .flags = CLK_SET_RATE_PARENT, 996 .ops = &clk_branch2_ops, 997 }, 998 }, 999 }; 1000 1001 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = { 1002 .halt_reg = 0x82024, 1003 .halt_check = BRANCH_HALT, 1004 .hwcg_reg = 0x82024, 1005 .hwcg_bit = 1, 1006 .clkr = { 1007 .enable_reg = 0x82024, 1008 .enable_mask = BIT(1), 1009 .hw.init = &(struct clk_init_data){ 1010 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk", 1011 .parent_hws = (const struct clk_hw*[]){ 1012 &gcc_aggre_ufs_phy_axi_clk.clkr.hw, 1013 }, 1014 .num_parents = 1, 1015 .flags = CLK_SET_RATE_PARENT, 1016 .ops = &clk_branch_simple_ops, 1017 }, 1018 }, 1019 }; 1020 1021 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = { 1022 .halt_reg = 0x8201c, 1023 .halt_check = BRANCH_HALT, 1024 .clkr = { 1025 .enable_reg = 0x8201c, 1026 .enable_mask = BIT(0), 1027 .hw.init = &(struct clk_init_data){ 1028 .name = "gcc_aggre_usb3_prim_axi_clk", 1029 .parent_hws = (const struct clk_hw*[]){ 1030 &gcc_usb30_prim_master_clk_src.clkr.hw, 1031 }, 1032 .num_parents = 1, 1033 .flags = CLK_SET_RATE_PARENT, 1034 .ops = &clk_branch2_ops, 1035 }, 1036 }, 1037 }; 1038 1039 static struct clk_branch gcc_apc_vs_clk = { 1040 .halt_reg = 0x7a050, 1041 .halt_check = BRANCH_HALT, 1042 .clkr = { 1043 .enable_reg = 0x7a050, 1044 .enable_mask = BIT(0), 1045 .hw.init = &(struct clk_init_data){ 1046 .name = "gcc_apc_vs_clk", 1047 .parent_hws = (const struct clk_hw*[]){ 1048 &gcc_vsensor_clk_src.clkr.hw, 1049 }, 1050 .num_parents = 1, 1051 .flags = CLK_SET_RATE_PARENT, 1052 .ops = &clk_branch2_ops, 1053 }, 1054 }, 1055 }; 1056 1057 static struct clk_branch gcc_boot_rom_ahb_clk = { 1058 .halt_reg = 0x38004, 1059 .halt_check = BRANCH_HALT_VOTED, 1060 .hwcg_reg = 0x38004, 1061 .hwcg_bit = 1, 1062 .clkr = { 1063 .enable_reg = 0x52004, 1064 .enable_mask = BIT(10), 1065 .hw.init = &(struct clk_init_data){ 1066 .name = "gcc_boot_rom_ahb_clk", 1067 .ops = &clk_branch2_ops, 1068 }, 1069 }, 1070 }; 1071 1072 static struct clk_branch gcc_camera_hf_axi_clk = { 1073 .halt_reg = 0xb020, 1074 .halt_check = BRANCH_HALT, 1075 .clkr = { 1076 .enable_reg = 0xb020, 1077 .enable_mask = BIT(0), 1078 .hw.init = &(struct clk_init_data){ 1079 .name = "gcc_camera_hf_axi_clk", 1080 .ops = &clk_branch2_ops, 1081 }, 1082 }, 1083 }; 1084 1085 static struct clk_branch gcc_camera_sf_axi_clk = { 1086 .halt_reg = 0xb06c, 1087 .halt_check = BRANCH_HALT, 1088 .clkr = { 1089 .enable_reg = 0xb06c, 1090 .enable_mask = BIT(0), 1091 .hw.init = &(struct clk_init_data){ 1092 .name = "gcc_camera_sf_axi_clk", 1093 .ops = &clk_branch2_ops, 1094 }, 1095 }, 1096 }; 1097 1098 static struct clk_branch gcc_ce1_ahb_clk = { 1099 .halt_reg = 0x4100c, 1100 .halt_check = BRANCH_HALT_VOTED, 1101 .hwcg_reg = 0x4100c, 1102 .hwcg_bit = 1, 1103 .clkr = { 1104 .enable_reg = 0x52004, 1105 .enable_mask = BIT(3), 1106 .hw.init = &(struct clk_init_data){ 1107 .name = "gcc_ce1_ahb_clk", 1108 .ops = &clk_branch2_ops, 1109 }, 1110 }, 1111 }; 1112 1113 static struct clk_branch gcc_ce1_axi_clk = { 1114 .halt_reg = 0x41008, 1115 .halt_check = BRANCH_HALT_VOTED, 1116 .clkr = { 1117 .enable_reg = 0x52004, 1118 .enable_mask = BIT(4), 1119 .hw.init = &(struct clk_init_data){ 1120 .name = "gcc_ce1_axi_clk", 1121 .ops = &clk_branch2_ops, 1122 }, 1123 }, 1124 }; 1125 1126 static struct clk_branch gcc_ce1_clk = { 1127 .halt_reg = 0x41004, 1128 .halt_check = BRANCH_HALT_VOTED, 1129 .clkr = { 1130 .enable_reg = 0x52004, 1131 .enable_mask = BIT(5), 1132 .hw.init = &(struct clk_init_data){ 1133 .name = "gcc_ce1_clk", 1134 .ops = &clk_branch2_ops, 1135 }, 1136 }, 1137 }; 1138 1139 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1140 .halt_reg = 0x502c, 1141 .halt_check = BRANCH_HALT, 1142 .clkr = { 1143 .enable_reg = 0x502c, 1144 .enable_mask = BIT(0), 1145 .hw.init = &(struct clk_init_data){ 1146 .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1147 .parent_hws = (const struct clk_hw*[]){ 1148 &gcc_usb30_prim_master_clk_src.clkr.hw, 1149 }, 1150 .num_parents = 1, 1151 .flags = CLK_SET_RATE_PARENT, 1152 .ops = &clk_branch2_ops, 1153 }, 1154 }, 1155 }; 1156 1157 static struct clk_branch gcc_cpuss_ahb_clk = { 1158 .halt_reg = 0x48000, 1159 .halt_check = BRANCH_HALT_VOTED, 1160 .clkr = { 1161 .enable_reg = 0x52004, 1162 .enable_mask = BIT(21), 1163 .hw.init = &(struct clk_init_data){ 1164 .name = "gcc_cpuss_ahb_clk", 1165 .parent_hws = (const struct clk_hw*[]){ 1166 &gcc_cpuss_ahb_clk_src.clkr.hw, 1167 }, 1168 .num_parents = 1, 1169 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 1170 .ops = &clk_branch2_ops, 1171 }, 1172 }, 1173 }; 1174 1175 static struct clk_branch gcc_cpuss_rbcpr_clk = { 1176 .halt_reg = 0x48008, 1177 .halt_check = BRANCH_HALT, 1178 .clkr = { 1179 .enable_reg = 0x48008, 1180 .enable_mask = BIT(0), 1181 .hw.init = &(struct clk_init_data){ 1182 .name = "gcc_cpuss_rbcpr_clk", 1183 .parent_hws = (const struct clk_hw*[]){ 1184 &gcc_cpuss_rbcpr_clk_src.clkr.hw, 1185 }, 1186 .num_parents = 1, 1187 .flags = CLK_SET_RATE_PARENT, 1188 .ops = &clk_branch2_ops, 1189 }, 1190 }, 1191 }; 1192 1193 static struct clk_branch gcc_ddrss_gpu_axi_clk = { 1194 .halt_reg = 0x4452c, 1195 .halt_check = BRANCH_VOTED, 1196 .clkr = { 1197 .enable_reg = 0x4452c, 1198 .enable_mask = BIT(0), 1199 .hw.init = &(struct clk_init_data){ 1200 .name = "gcc_ddrss_gpu_axi_clk", 1201 .ops = &clk_branch2_ops, 1202 }, 1203 }, 1204 }; 1205 1206 1207 static struct clk_branch gcc_disp_gpll0_clk_src = { 1208 .halt_check = BRANCH_HALT_DELAY, 1209 .clkr = { 1210 .enable_reg = 0x52004, 1211 .enable_mask = BIT(18), 1212 .hw.init = &(struct clk_init_data){ 1213 .name = "gcc_disp_gpll0_clk_src", 1214 .parent_hws = (const struct clk_hw*[]){ 1215 &gpll0.clkr.hw, 1216 }, 1217 .num_parents = 1, 1218 .ops = &clk_branch2_aon_ops, 1219 }, 1220 }, 1221 }; 1222 1223 static struct clk_branch gcc_disp_gpll0_div_clk_src = { 1224 .halt_check = BRANCH_HALT_DELAY, 1225 .clkr = { 1226 .enable_reg = 0x52004, 1227 .enable_mask = BIT(19), 1228 .hw.init = &(struct clk_init_data){ 1229 .name = "gcc_disp_gpll0_div_clk_src", 1230 .parent_hws = (const struct clk_hw*[]){ 1231 &gcc_pll0_main_div_cdiv.hw, 1232 }, 1233 .num_parents = 1, 1234 .ops = &clk_branch2_ops, 1235 }, 1236 }, 1237 }; 1238 1239 static struct clk_branch gcc_disp_hf_axi_clk = { 1240 .halt_reg = 0xb024, 1241 .halt_check = BRANCH_HALT, 1242 .clkr = { 1243 .enable_reg = 0xb024, 1244 .enable_mask = BIT(0), 1245 .hw.init = &(struct clk_init_data){ 1246 .name = "gcc_disp_hf_axi_clk", 1247 .ops = &clk_branch2_ops, 1248 }, 1249 }, 1250 }; 1251 1252 static struct clk_branch gcc_disp_sf_axi_clk = { 1253 .halt_reg = 0xb070, 1254 .halt_check = BRANCH_HALT, 1255 .clkr = { 1256 .enable_reg = 0xb070, 1257 .enable_mask = BIT(0), 1258 .hw.init = &(struct clk_init_data){ 1259 .name = "gcc_disp_sf_axi_clk", 1260 .ops = &clk_branch2_ops, 1261 }, 1262 }, 1263 }; 1264 1265 1266 static struct clk_branch gcc_gp1_clk = { 1267 .halt_reg = 0x64000, 1268 .halt_check = BRANCH_HALT, 1269 .clkr = { 1270 .enable_reg = 0x64000, 1271 .enable_mask = BIT(0), 1272 .hw.init = &(struct clk_init_data){ 1273 .name = "gcc_gp1_clk", 1274 .parent_hws = (const struct clk_hw*[]){ 1275 &gcc_gp1_clk_src.clkr.hw, 1276 }, 1277 .num_parents = 1, 1278 .flags = CLK_SET_RATE_PARENT, 1279 .ops = &clk_branch2_ops, 1280 }, 1281 }, 1282 }; 1283 1284 static struct clk_branch gcc_gp2_clk = { 1285 .halt_reg = 0x65000, 1286 .halt_check = BRANCH_HALT, 1287 .clkr = { 1288 .enable_reg = 0x65000, 1289 .enable_mask = BIT(0), 1290 .hw.init = &(struct clk_init_data){ 1291 .name = "gcc_gp2_clk", 1292 .parent_hws = (const struct clk_hw*[]){ 1293 &gcc_gp2_clk_src.clkr.hw, 1294 }, 1295 .num_parents = 1, 1296 .flags = CLK_SET_RATE_PARENT, 1297 .ops = &clk_branch2_ops, 1298 }, 1299 }, 1300 }; 1301 1302 static struct clk_branch gcc_gp3_clk = { 1303 .halt_reg = 0x66000, 1304 .halt_check = BRANCH_HALT, 1305 .clkr = { 1306 .enable_reg = 0x66000, 1307 .enable_mask = BIT(0), 1308 .hw.init = &(struct clk_init_data){ 1309 .name = "gcc_gp3_clk", 1310 .parent_hws = (const struct clk_hw*[]){ 1311 &gcc_gp3_clk_src.clkr.hw, 1312 }, 1313 .num_parents = 1, 1314 .flags = CLK_SET_RATE_PARENT, 1315 .ops = &clk_branch2_ops, 1316 }, 1317 }, 1318 }; 1319 1320 static struct clk_branch gcc_gpu_gpll0_clk_src = { 1321 .halt_check = BRANCH_HALT_DELAY, 1322 .clkr = { 1323 .enable_reg = 0x52004, 1324 .enable_mask = BIT(15), 1325 .hw.init = &(struct clk_init_data){ 1326 .name = "gcc_gpu_gpll0_clk_src", 1327 .parent_hws = (const struct clk_hw*[]){ 1328 &gpll0.clkr.hw, 1329 }, 1330 .num_parents = 1, 1331 .ops = &clk_branch2_ops, 1332 }, 1333 }, 1334 }; 1335 1336 static struct clk_branch gcc_gpu_gpll0_div_clk_src = { 1337 .halt_check = BRANCH_HALT_DELAY, 1338 .clkr = { 1339 .enable_reg = 0x52004, 1340 .enable_mask = BIT(16), 1341 .hw.init = &(struct clk_init_data){ 1342 .name = "gcc_gpu_gpll0_div_clk_src", 1343 .parent_hws = (const struct clk_hw*[]){ 1344 &gcc_pll0_main_div_cdiv.hw, 1345 }, 1346 .num_parents = 1, 1347 .ops = &clk_branch2_ops, 1348 }, 1349 }, 1350 }; 1351 1352 static struct clk_branch gcc_gpu_memnoc_gfx_clk = { 1353 .halt_reg = 0x7100c, 1354 .halt_check = BRANCH_VOTED, 1355 .clkr = { 1356 .enable_reg = 0x7100c, 1357 .enable_mask = BIT(0), 1358 .hw.init = &(struct clk_init_data){ 1359 .name = "gcc_gpu_memnoc_gfx_clk", 1360 .ops = &clk_branch2_ops, 1361 }, 1362 }, 1363 }; 1364 1365 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = { 1366 .halt_reg = 0x71018, 1367 .halt_check = BRANCH_HALT, 1368 .clkr = { 1369 .enable_reg = 0x71018, 1370 .enable_mask = BIT(0), 1371 .hw.init = &(struct clk_init_data){ 1372 .name = "gcc_gpu_snoc_dvm_gfx_clk", 1373 .ops = &clk_branch2_ops, 1374 }, 1375 }, 1376 }; 1377 1378 static struct clk_branch gcc_gpu_vs_clk = { 1379 .halt_reg = 0x7a04c, 1380 .halt_check = BRANCH_HALT, 1381 .clkr = { 1382 .enable_reg = 0x7a04c, 1383 .enable_mask = BIT(0), 1384 .hw.init = &(struct clk_init_data){ 1385 .name = "gcc_gpu_vs_clk", 1386 .parent_hws = (const struct clk_hw*[]){ 1387 &gcc_vsensor_clk_src.clkr.hw, 1388 }, 1389 .num_parents = 1, 1390 .flags = CLK_SET_RATE_PARENT, 1391 .ops = &clk_branch2_ops, 1392 }, 1393 }, 1394 }; 1395 1396 static struct clk_branch gcc_npu_axi_clk = { 1397 .halt_reg = 0x4d008, 1398 .halt_check = BRANCH_HALT, 1399 .clkr = { 1400 .enable_reg = 0x4d008, 1401 .enable_mask = BIT(0), 1402 .hw.init = &(struct clk_init_data){ 1403 .name = "gcc_npu_axi_clk", 1404 .ops = &clk_branch2_ops, 1405 }, 1406 }, 1407 }; 1408 1409 static struct clk_branch gcc_npu_cfg_ahb_clk = { 1410 .halt_reg = 0x4d004, 1411 .halt_check = BRANCH_HALT, 1412 .hwcg_reg = 0x4d004, 1413 .hwcg_bit = 1, 1414 .clkr = { 1415 .enable_reg = 0x4d004, 1416 .enable_mask = BIT(0), 1417 .hw.init = &(struct clk_init_data){ 1418 .name = "gcc_npu_cfg_ahb_clk", 1419 .flags = CLK_IS_CRITICAL, 1420 .ops = &clk_branch2_ops, 1421 }, 1422 }, 1423 }; 1424 1425 static struct clk_branch gcc_npu_gpll0_clk_src = { 1426 .halt_check = BRANCH_HALT_DELAY, 1427 .clkr = { 1428 .enable_reg = 0x52004, 1429 .enable_mask = BIT(25), 1430 .hw.init = &(struct clk_init_data){ 1431 .name = "gcc_npu_gpll0_clk_src", 1432 .parent_hws = (const struct clk_hw*[]){ 1433 &gpll0.clkr.hw, 1434 }, 1435 .num_parents = 1, 1436 .ops = &clk_branch2_ops, 1437 }, 1438 }, 1439 }; 1440 1441 static struct clk_branch gcc_npu_gpll0_div_clk_src = { 1442 .halt_check = BRANCH_HALT_DELAY, 1443 .clkr = { 1444 .enable_reg = 0x52004, 1445 .enable_mask = BIT(26), 1446 .hw.init = &(struct clk_init_data){ 1447 .name = "gcc_npu_gpll0_div_clk_src", 1448 .parent_hws = (const struct clk_hw*[]){ 1449 &gcc_pll0_main_div_cdiv.hw, 1450 }, 1451 .num_parents = 1, 1452 .flags = CLK_SET_RATE_PARENT, 1453 .ops = &clk_branch2_ops, 1454 }, 1455 }, 1456 }; 1457 1458 static struct clk_branch gcc_pcie_0_aux_clk = { 1459 .halt_reg = 0x6b01c, 1460 .halt_check = BRANCH_HALT_VOTED, 1461 .clkr = { 1462 .enable_reg = 0x5200c, 1463 .enable_mask = BIT(3), 1464 .hw.init = &(struct clk_init_data){ 1465 .name = "gcc_pcie_0_aux_clk", 1466 .parent_hws = (const struct clk_hw*[]){ 1467 &gcc_pcie_0_aux_clk_src.clkr.hw, 1468 }, 1469 .num_parents = 1, 1470 .flags = CLK_SET_RATE_PARENT, 1471 .ops = &clk_branch2_ops, 1472 }, 1473 }, 1474 }; 1475 1476 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1477 .halt_reg = 0x6b018, 1478 .halt_check = BRANCH_HALT_VOTED, 1479 .hwcg_reg = 0x6b018, 1480 .hwcg_bit = 1, 1481 .clkr = { 1482 .enable_reg = 0x5200c, 1483 .enable_mask = BIT(2), 1484 .hw.init = &(struct clk_init_data){ 1485 .name = "gcc_pcie_0_cfg_ahb_clk", 1486 .ops = &clk_branch2_ops, 1487 }, 1488 }, 1489 }; 1490 1491 static struct clk_branch gcc_pcie_0_clkref_clk = { 1492 .halt_reg = 0x8c008, 1493 .halt_check = BRANCH_HALT, 1494 .clkr = { 1495 .enable_reg = 0x8c008, 1496 .enable_mask = BIT(0), 1497 .hw.init = &(struct clk_init_data){ 1498 .name = "gcc_pcie_0_clkref_clk", 1499 .ops = &clk_branch2_ops, 1500 }, 1501 }, 1502 }; 1503 1504 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1505 .halt_reg = 0x6b014, 1506 .halt_check = BRANCH_HALT_VOTED, 1507 .clkr = { 1508 .enable_reg = 0x5200c, 1509 .enable_mask = BIT(1), 1510 .hw.init = &(struct clk_init_data){ 1511 .name = "gcc_pcie_0_mstr_axi_clk", 1512 .ops = &clk_branch2_ops, 1513 }, 1514 }, 1515 }; 1516 1517 static struct clk_branch gcc_pcie_0_pipe_clk = { 1518 .halt_reg = 0x6b020, 1519 .halt_check = BRANCH_HALT_SKIP, 1520 .clkr = { 1521 .enable_reg = 0x5200c, 1522 .enable_mask = BIT(4), 1523 .hw.init = &(struct clk_init_data){ 1524 .name = "gcc_pcie_0_pipe_clk", 1525 .ops = &clk_branch2_ops, 1526 }, 1527 }, 1528 }; 1529 1530 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1531 .halt_reg = 0x6b010, 1532 .halt_check = BRANCH_HALT_VOTED, 1533 .hwcg_reg = 0x6b010, 1534 .hwcg_bit = 1, 1535 .clkr = { 1536 .enable_reg = 0x5200c, 1537 .enable_mask = BIT(0), 1538 .hw.init = &(struct clk_init_data){ 1539 .name = "gcc_pcie_0_slv_axi_clk", 1540 .ops = &clk_branch2_ops, 1541 }, 1542 }, 1543 }; 1544 1545 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1546 .halt_reg = 0x6b00c, 1547 .halt_check = BRANCH_HALT_VOTED, 1548 .clkr = { 1549 .enable_reg = 0x5200c, 1550 .enable_mask = BIT(5), 1551 .hw.init = &(struct clk_init_data){ 1552 .name = "gcc_pcie_0_slv_q2a_axi_clk", 1553 .ops = &clk_branch2_ops, 1554 }, 1555 }, 1556 }; 1557 1558 static struct clk_branch gcc_pcie_phy_aux_clk = { 1559 .halt_reg = 0x6f004, 1560 .halt_check = BRANCH_HALT, 1561 .clkr = { 1562 .enable_reg = 0x6f004, 1563 .enable_mask = BIT(0), 1564 .hw.init = &(struct clk_init_data){ 1565 .name = "gcc_pcie_phy_aux_clk", 1566 .parent_hws = (const struct clk_hw*[]){ 1567 &gcc_pcie_0_aux_clk_src.clkr.hw, 1568 }, 1569 .num_parents = 1, 1570 .flags = CLK_SET_RATE_PARENT, 1571 .ops = &clk_branch2_ops, 1572 }, 1573 }, 1574 }; 1575 1576 static struct clk_branch gcc_pcie_phy_refgen_clk = { 1577 .halt_reg = 0x6f02c, 1578 .halt_check = BRANCH_HALT, 1579 .clkr = { 1580 .enable_reg = 0x6f02c, 1581 .enable_mask = BIT(0), 1582 .hw.init = &(struct clk_init_data){ 1583 .name = "gcc_pcie_phy_refgen_clk", 1584 .parent_hws = (const struct clk_hw*[]){ 1585 &gcc_pcie_phy_refgen_clk_src.clkr.hw, 1586 }, 1587 .num_parents = 1, 1588 .flags = CLK_SET_RATE_PARENT, 1589 .ops = &clk_branch2_ops, 1590 }, 1591 }, 1592 }; 1593 1594 static struct clk_branch gcc_pdm2_clk = { 1595 .halt_reg = 0x3300c, 1596 .halt_check = BRANCH_HALT, 1597 .clkr = { 1598 .enable_reg = 0x3300c, 1599 .enable_mask = BIT(0), 1600 .hw.init = &(struct clk_init_data){ 1601 .name = "gcc_pdm2_clk", 1602 .parent_hws = (const struct clk_hw*[]){ 1603 &gcc_pdm2_clk_src.clkr.hw, 1604 }, 1605 .num_parents = 1, 1606 .flags = CLK_SET_RATE_PARENT, 1607 .ops = &clk_branch2_ops, 1608 }, 1609 }, 1610 }; 1611 1612 static struct clk_branch gcc_pdm_ahb_clk = { 1613 .halt_reg = 0x33004, 1614 .halt_check = BRANCH_HALT, 1615 .hwcg_reg = 0x33004, 1616 .hwcg_bit = 1, 1617 .clkr = { 1618 .enable_reg = 0x33004, 1619 .enable_mask = BIT(0), 1620 .hw.init = &(struct clk_init_data){ 1621 .name = "gcc_pdm_ahb_clk", 1622 .ops = &clk_branch2_ops, 1623 }, 1624 }, 1625 }; 1626 1627 static struct clk_branch gcc_pdm_xo4_clk = { 1628 .halt_reg = 0x33008, 1629 .halt_check = BRANCH_HALT, 1630 .clkr = { 1631 .enable_reg = 0x33008, 1632 .enable_mask = BIT(0), 1633 .hw.init = &(struct clk_init_data){ 1634 .name = "gcc_pdm_xo4_clk", 1635 .ops = &clk_branch2_ops, 1636 }, 1637 }, 1638 }; 1639 1640 static struct clk_branch gcc_prng_ahb_clk = { 1641 .halt_reg = 0x34004, 1642 .halt_check = BRANCH_HALT_VOTED, 1643 .hwcg_reg = 0x34004, 1644 .hwcg_bit = 1, 1645 .clkr = { 1646 .enable_reg = 0x52004, 1647 .enable_mask = BIT(13), 1648 .hw.init = &(struct clk_init_data){ 1649 .name = "gcc_prng_ahb_clk", 1650 .ops = &clk_branch2_ops, 1651 }, 1652 }, 1653 }; 1654 1655 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1656 .halt_reg = 0x17014, 1657 .halt_check = BRANCH_HALT_VOTED, 1658 .clkr = { 1659 .enable_reg = 0x5200c, 1660 .enable_mask = BIT(9), 1661 .hw.init = &(struct clk_init_data){ 1662 .name = "gcc_qupv3_wrap0_core_2x_clk", 1663 .ops = &clk_branch2_ops, 1664 }, 1665 }, 1666 }; 1667 1668 static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1669 .halt_reg = 0x1700c, 1670 .halt_check = BRANCH_HALT_VOTED, 1671 .clkr = { 1672 .enable_reg = 0x5200c, 1673 .enable_mask = BIT(8), 1674 .hw.init = &(struct clk_init_data){ 1675 .name = "gcc_qupv3_wrap0_core_clk", 1676 .ops = &clk_branch2_ops, 1677 }, 1678 }, 1679 }; 1680 1681 static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1682 .halt_reg = 0x17030, 1683 .halt_check = BRANCH_HALT_VOTED, 1684 .clkr = { 1685 .enable_reg = 0x5200c, 1686 .enable_mask = BIT(10), 1687 .hw.init = &(struct clk_init_data){ 1688 .name = "gcc_qupv3_wrap0_s0_clk", 1689 .parent_hws = (const struct clk_hw*[]){ 1690 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1691 }, 1692 .num_parents = 1, 1693 .flags = CLK_SET_RATE_PARENT, 1694 .ops = &clk_branch2_ops, 1695 }, 1696 }, 1697 }; 1698 1699 static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1700 .halt_reg = 0x17160, 1701 .halt_check = BRANCH_HALT_VOTED, 1702 .clkr = { 1703 .enable_reg = 0x5200c, 1704 .enable_mask = BIT(11), 1705 .hw.init = &(struct clk_init_data){ 1706 .name = "gcc_qupv3_wrap0_s1_clk", 1707 .parent_hws = (const struct clk_hw*[]){ 1708 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1709 }, 1710 .num_parents = 1, 1711 .flags = CLK_SET_RATE_PARENT, 1712 .ops = &clk_branch2_ops, 1713 }, 1714 }, 1715 }; 1716 1717 static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1718 .halt_reg = 0x17290, 1719 .halt_check = BRANCH_HALT_VOTED, 1720 .clkr = { 1721 .enable_reg = 0x5200c, 1722 .enable_mask = BIT(12), 1723 .hw.init = &(struct clk_init_data){ 1724 .name = "gcc_qupv3_wrap0_s2_clk", 1725 .parent_hws = (const struct clk_hw*[]){ 1726 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1727 }, 1728 .num_parents = 1, 1729 .flags = CLK_SET_RATE_PARENT, 1730 .ops = &clk_branch2_ops, 1731 }, 1732 }, 1733 }; 1734 1735 static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1736 .halt_reg = 0x173c0, 1737 .halt_check = BRANCH_HALT_VOTED, 1738 .clkr = { 1739 .enable_reg = 0x5200c, 1740 .enable_mask = BIT(13), 1741 .hw.init = &(struct clk_init_data){ 1742 .name = "gcc_qupv3_wrap0_s3_clk", 1743 .parent_hws = (const struct clk_hw*[]){ 1744 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1745 }, 1746 .num_parents = 1, 1747 .flags = CLK_SET_RATE_PARENT, 1748 .ops = &clk_branch2_ops, 1749 }, 1750 }, 1751 }; 1752 1753 static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1754 .halt_reg = 0x174f0, 1755 .halt_check = BRANCH_HALT_VOTED, 1756 .clkr = { 1757 .enable_reg = 0x5200c, 1758 .enable_mask = BIT(14), 1759 .hw.init = &(struct clk_init_data){ 1760 .name = "gcc_qupv3_wrap0_s4_clk", 1761 .parent_hws = (const struct clk_hw*[]){ 1762 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1763 }, 1764 .num_parents = 1, 1765 .flags = CLK_SET_RATE_PARENT, 1766 .ops = &clk_branch2_ops, 1767 }, 1768 }, 1769 }; 1770 1771 static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 1772 .halt_reg = 0x17620, 1773 .halt_check = BRANCH_HALT_VOTED, 1774 .clkr = { 1775 .enable_reg = 0x5200c, 1776 .enable_mask = BIT(15), 1777 .hw.init = &(struct clk_init_data){ 1778 .name = "gcc_qupv3_wrap0_s5_clk", 1779 .parent_hws = (const struct clk_hw*[]){ 1780 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 1781 }, 1782 .num_parents = 1, 1783 .flags = CLK_SET_RATE_PARENT, 1784 .ops = &clk_branch2_ops, 1785 }, 1786 }, 1787 }; 1788 1789 static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 1790 .halt_reg = 0x17750, 1791 .halt_check = BRANCH_HALT_VOTED, 1792 .clkr = { 1793 .enable_reg = 0x5200c, 1794 .enable_mask = BIT(16), 1795 .hw.init = &(struct clk_init_data){ 1796 .name = "gcc_qupv3_wrap0_s6_clk", 1797 .parent_hws = (const struct clk_hw*[]){ 1798 &gcc_qupv3_wrap0_s6_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_qupv3_wrap0_s7_clk = { 1808 .halt_reg = 0x17880, 1809 .halt_check = BRANCH_HALT_VOTED, 1810 .clkr = { 1811 .enable_reg = 0x5200c, 1812 .enable_mask = BIT(17), 1813 .hw.init = &(struct clk_init_data){ 1814 .name = "gcc_qupv3_wrap0_s7_clk", 1815 .parent_hws = (const struct clk_hw*[]){ 1816 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw, 1817 }, 1818 .num_parents = 1, 1819 .flags = CLK_SET_RATE_PARENT, 1820 .ops = &clk_branch2_ops, 1821 }, 1822 }, 1823 }; 1824 1825 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1826 .halt_reg = 0x18004, 1827 .halt_check = BRANCH_HALT_VOTED, 1828 .clkr = { 1829 .enable_reg = 0x5200c, 1830 .enable_mask = BIT(18), 1831 .hw.init = &(struct clk_init_data){ 1832 .name = "gcc_qupv3_wrap1_core_2x_clk", 1833 .ops = &clk_branch2_ops, 1834 }, 1835 }, 1836 }; 1837 1838 static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1839 .halt_reg = 0x18008, 1840 .halt_check = BRANCH_HALT_VOTED, 1841 .clkr = { 1842 .enable_reg = 0x5200c, 1843 .enable_mask = BIT(19), 1844 .hw.init = &(struct clk_init_data){ 1845 .name = "gcc_qupv3_wrap1_core_clk", 1846 .ops = &clk_branch2_ops, 1847 }, 1848 }, 1849 }; 1850 1851 static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1852 .halt_reg = 0x18014, 1853 .halt_check = BRANCH_HALT_VOTED, 1854 .clkr = { 1855 .enable_reg = 0x5200c, 1856 .enable_mask = BIT(22), 1857 .hw.init = &(struct clk_init_data){ 1858 .name = "gcc_qupv3_wrap1_s0_clk", 1859 .parent_hws = (const struct clk_hw*[]){ 1860 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1861 }, 1862 .num_parents = 1, 1863 .flags = CLK_SET_RATE_PARENT, 1864 .ops = &clk_branch2_ops, 1865 }, 1866 }, 1867 }; 1868 1869 static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1870 .halt_reg = 0x18144, 1871 .halt_check = BRANCH_HALT_VOTED, 1872 .clkr = { 1873 .enable_reg = 0x5200c, 1874 .enable_mask = BIT(23), 1875 .hw.init = &(struct clk_init_data){ 1876 .name = "gcc_qupv3_wrap1_s1_clk", 1877 .parent_hws = (const struct clk_hw*[]){ 1878 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1879 }, 1880 .num_parents = 1, 1881 .flags = CLK_SET_RATE_PARENT, 1882 .ops = &clk_branch2_ops, 1883 }, 1884 }, 1885 }; 1886 1887 static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1888 .halt_reg = 0x18274, 1889 .halt_check = BRANCH_HALT_VOTED, 1890 .clkr = { 1891 .enable_reg = 0x5200c, 1892 .enable_mask = BIT(24), 1893 .hw.init = &(struct clk_init_data){ 1894 .name = "gcc_qupv3_wrap1_s2_clk", 1895 .parent_hws = (const struct clk_hw*[]){ 1896 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1897 }, 1898 .num_parents = 1, 1899 .flags = CLK_SET_RATE_PARENT, 1900 .ops = &clk_branch2_ops, 1901 }, 1902 }, 1903 }; 1904 1905 static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1906 .halt_reg = 0x183a4, 1907 .halt_check = BRANCH_HALT_VOTED, 1908 .clkr = { 1909 .enable_reg = 0x5200c, 1910 .enable_mask = BIT(25), 1911 .hw.init = &(struct clk_init_data){ 1912 .name = "gcc_qupv3_wrap1_s3_clk", 1913 .parent_hws = (const struct clk_hw*[]){ 1914 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1915 }, 1916 .num_parents = 1, 1917 .flags = CLK_SET_RATE_PARENT, 1918 .ops = &clk_branch2_ops, 1919 }, 1920 }, 1921 }; 1922 1923 static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1924 .halt_reg = 0x184d4, 1925 .halt_check = BRANCH_HALT_VOTED, 1926 .clkr = { 1927 .enable_reg = 0x5200c, 1928 .enable_mask = BIT(26), 1929 .hw.init = &(struct clk_init_data){ 1930 .name = "gcc_qupv3_wrap1_s4_clk", 1931 .parent_hws = (const struct clk_hw*[]){ 1932 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 1933 }, 1934 .num_parents = 1, 1935 .flags = CLK_SET_RATE_PARENT, 1936 .ops = &clk_branch2_ops, 1937 }, 1938 }, 1939 }; 1940 1941 static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 1942 .halt_reg = 0x18604, 1943 .halt_check = BRANCH_HALT_VOTED, 1944 .clkr = { 1945 .enable_reg = 0x5200c, 1946 .enable_mask = BIT(27), 1947 .hw.init = &(struct clk_init_data){ 1948 .name = "gcc_qupv3_wrap1_s5_clk", 1949 .parent_hws = (const struct clk_hw*[]){ 1950 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 1951 }, 1952 .num_parents = 1, 1953 .flags = CLK_SET_RATE_PARENT, 1954 .ops = &clk_branch2_ops, 1955 }, 1956 }, 1957 }; 1958 1959 static struct clk_branch gcc_qupv3_wrap1_s6_clk = { 1960 .halt_reg = 0x18734, 1961 .halt_check = BRANCH_HALT_VOTED, 1962 .clkr = { 1963 .enable_reg = 0x5200c, 1964 .enable_mask = BIT(28), 1965 .hw.init = &(struct clk_init_data){ 1966 .name = "gcc_qupv3_wrap1_s6_clk", 1967 .parent_hws = (const struct clk_hw*[]){ 1968 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw, 1969 }, 1970 .num_parents = 1, 1971 .flags = CLK_SET_RATE_PARENT, 1972 .ops = &clk_branch2_ops, 1973 }, 1974 }, 1975 }; 1976 1977 static struct clk_branch gcc_qupv3_wrap1_s7_clk = { 1978 .halt_reg = 0x18864, 1979 .halt_check = BRANCH_HALT_VOTED, 1980 .clkr = { 1981 .enable_reg = 0x5200c, 1982 .enable_mask = BIT(29), 1983 .hw.init = &(struct clk_init_data){ 1984 .name = "gcc_qupv3_wrap1_s7_clk", 1985 .parent_hws = (const struct clk_hw*[]){ 1986 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw, 1987 }, 1988 .num_parents = 1, 1989 .flags = CLK_SET_RATE_PARENT, 1990 .ops = &clk_branch2_ops, 1991 }, 1992 }, 1993 }; 1994 1995 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 1996 .halt_reg = 0x17004, 1997 .halt_check = BRANCH_HALT_VOTED, 1998 .clkr = { 1999 .enable_reg = 0x5200c, 2000 .enable_mask = BIT(6), 2001 .hw.init = &(struct clk_init_data){ 2002 .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2003 .ops = &clk_branch2_ops, 2004 }, 2005 }, 2006 }; 2007 2008 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2009 .halt_reg = 0x17008, 2010 .halt_check = BRANCH_HALT_VOTED, 2011 .hwcg_reg = 0x17008, 2012 .hwcg_bit = 1, 2013 .clkr = { 2014 .enable_reg = 0x5200c, 2015 .enable_mask = BIT(7), 2016 .hw.init = &(struct clk_init_data){ 2017 .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2018 .ops = &clk_branch2_ops, 2019 }, 2020 }, 2021 }; 2022 2023 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2024 .halt_reg = 0x1800c, 2025 .halt_check = BRANCH_HALT_VOTED, 2026 .clkr = { 2027 .enable_reg = 0x5200c, 2028 .enable_mask = BIT(20), 2029 .hw.init = &(struct clk_init_data){ 2030 .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2031 .ops = &clk_branch2_ops, 2032 }, 2033 }, 2034 }; 2035 2036 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2037 .halt_reg = 0x18010, 2038 .halt_check = BRANCH_HALT_VOTED, 2039 .hwcg_reg = 0x18010, 2040 .hwcg_bit = 1, 2041 .clkr = { 2042 .enable_reg = 0x5200c, 2043 .enable_mask = BIT(21), 2044 .hw.init = &(struct clk_init_data){ 2045 .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2046 .ops = &clk_branch2_ops, 2047 }, 2048 }, 2049 }; 2050 2051 static struct clk_branch gcc_sdcc1_ahb_clk = { 2052 .halt_reg = 0x12008, 2053 .halt_check = BRANCH_HALT, 2054 .clkr = { 2055 .enable_reg = 0x12008, 2056 .enable_mask = BIT(0), 2057 .hw.init = &(struct clk_init_data){ 2058 .name = "gcc_sdcc1_ahb_clk", 2059 .ops = &clk_branch2_ops, 2060 }, 2061 }, 2062 }; 2063 2064 static struct clk_branch gcc_sdcc1_apps_clk = { 2065 .halt_reg = 0x1200c, 2066 .halt_check = BRANCH_HALT, 2067 .clkr = { 2068 .enable_reg = 0x1200c, 2069 .enable_mask = BIT(0), 2070 .hw.init = &(struct clk_init_data){ 2071 .name = "gcc_sdcc1_apps_clk", 2072 .parent_hws = (const struct clk_hw*[]){ 2073 &gcc_sdcc1_apps_clk_src.clkr.hw, 2074 }, 2075 .num_parents = 1, 2076 .flags = CLK_SET_RATE_PARENT, 2077 .ops = &clk_branch2_ops, 2078 }, 2079 }, 2080 }; 2081 2082 static struct clk_branch gcc_sdcc1_ice_core_clk = { 2083 .halt_reg = 0x12040, 2084 .halt_check = BRANCH_HALT, 2085 .clkr = { 2086 .enable_reg = 0x12040, 2087 .enable_mask = BIT(0), 2088 .hw.init = &(struct clk_init_data){ 2089 .name = "gcc_sdcc1_ice_core_clk", 2090 .parent_hws = (const struct clk_hw*[]){ 2091 &gcc_sdcc1_ice_core_clk_src.clkr.hw, 2092 }, 2093 .num_parents = 1, 2094 .flags = CLK_SET_RATE_PARENT, 2095 .ops = &clk_branch2_ops, 2096 }, 2097 }, 2098 }; 2099 2100 static struct clk_branch gcc_sdcc2_ahb_clk = { 2101 .halt_reg = 0x14008, 2102 .halt_check = BRANCH_HALT, 2103 .clkr = { 2104 .enable_reg = 0x14008, 2105 .enable_mask = BIT(0), 2106 .hw.init = &(struct clk_init_data){ 2107 .name = "gcc_sdcc2_ahb_clk", 2108 .ops = &clk_branch2_ops, 2109 }, 2110 }, 2111 }; 2112 2113 static struct clk_branch gcc_sdcc2_apps_clk = { 2114 .halt_reg = 0x14004, 2115 .halt_check = BRANCH_HALT, 2116 .clkr = { 2117 .enable_reg = 0x14004, 2118 .enable_mask = BIT(0), 2119 .hw.init = &(struct clk_init_data){ 2120 .name = "gcc_sdcc2_apps_clk", 2121 .parent_hws = (const struct clk_hw*[]){ 2122 &gcc_sdcc2_apps_clk_src.clkr.hw, 2123 }, 2124 .num_parents = 1, 2125 .flags = CLK_SET_RATE_PARENT, 2126 .ops = &clk_branch2_ops, 2127 }, 2128 }, 2129 }; 2130 2131 static struct clk_branch gcc_sdcc4_ahb_clk = { 2132 .halt_reg = 0x16008, 2133 .halt_check = BRANCH_HALT, 2134 .clkr = { 2135 .enable_reg = 0x16008, 2136 .enable_mask = BIT(0), 2137 .hw.init = &(struct clk_init_data){ 2138 .name = "gcc_sdcc4_ahb_clk", 2139 .ops = &clk_branch2_ops, 2140 }, 2141 }, 2142 }; 2143 2144 static struct clk_branch gcc_sdcc4_apps_clk = { 2145 .halt_reg = 0x16004, 2146 .halt_check = BRANCH_HALT, 2147 .clkr = { 2148 .enable_reg = 0x16004, 2149 .enable_mask = BIT(0), 2150 .hw.init = &(struct clk_init_data){ 2151 .name = "gcc_sdcc4_apps_clk", 2152 .parent_hws = (const struct clk_hw*[]){ 2153 &gcc_sdcc4_apps_clk_src.clkr.hw, 2154 }, 2155 .num_parents = 1, 2156 .flags = CLK_SET_RATE_PARENT, 2157 .ops = &clk_branch2_ops, 2158 }, 2159 }, 2160 }; 2161 2162 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { 2163 .halt_reg = 0x4144, 2164 .halt_check = BRANCH_HALT_VOTED, 2165 .clkr = { 2166 .enable_reg = 0x52004, 2167 .enable_mask = BIT(0), 2168 .hw.init = &(struct clk_init_data){ 2169 .name = "gcc_sys_noc_cpuss_ahb_clk", 2170 .parent_hws = (const struct clk_hw*[]){ 2171 &gcc_cpuss_ahb_clk_src.clkr.hw, 2172 }, 2173 .num_parents = 1, 2174 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 2175 .ops = &clk_branch2_ops, 2176 }, 2177 }, 2178 }; 2179 2180 static struct clk_branch gcc_tsif_ahb_clk = { 2181 .halt_reg = 0x36004, 2182 .halt_check = BRANCH_HALT, 2183 .clkr = { 2184 .enable_reg = 0x36004, 2185 .enable_mask = BIT(0), 2186 .hw.init = &(struct clk_init_data){ 2187 .name = "gcc_tsif_ahb_clk", 2188 .ops = &clk_branch2_ops, 2189 }, 2190 }, 2191 }; 2192 2193 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2194 .halt_reg = 0x3600c, 2195 .halt_check = BRANCH_HALT, 2196 .clkr = { 2197 .enable_reg = 0x3600c, 2198 .enable_mask = BIT(0), 2199 .hw.init = &(struct clk_init_data){ 2200 .name = "gcc_tsif_inactivity_timers_clk", 2201 .ops = &clk_branch2_ops, 2202 }, 2203 }, 2204 }; 2205 2206 static struct clk_branch gcc_tsif_ref_clk = { 2207 .halt_reg = 0x36008, 2208 .halt_check = BRANCH_HALT, 2209 .clkr = { 2210 .enable_reg = 0x36008, 2211 .enable_mask = BIT(0), 2212 .hw.init = &(struct clk_init_data){ 2213 .name = "gcc_tsif_ref_clk", 2214 .parent_hws = (const struct clk_hw*[]){ 2215 &gcc_tsif_ref_clk_src.clkr.hw, 2216 }, 2217 .num_parents = 1, 2218 .flags = CLK_SET_RATE_PARENT, 2219 .ops = &clk_branch2_ops, 2220 }, 2221 }, 2222 }; 2223 2224 static struct clk_branch gcc_ufs_mem_clkref_clk = { 2225 .halt_reg = 0x8c000, 2226 .halt_check = BRANCH_HALT, 2227 .clkr = { 2228 .enable_reg = 0x8c000, 2229 .enable_mask = BIT(0), 2230 .hw.init = &(struct clk_init_data){ 2231 .name = "gcc_ufs_mem_clkref_clk", 2232 .ops = &clk_branch2_ops, 2233 }, 2234 }, 2235 }; 2236 2237 static struct clk_branch gcc_ufs_phy_ahb_clk = { 2238 .halt_reg = 0x77014, 2239 .halt_check = BRANCH_HALT, 2240 .hwcg_reg = 0x77014, 2241 .hwcg_bit = 1, 2242 .clkr = { 2243 .enable_reg = 0x77014, 2244 .enable_mask = BIT(0), 2245 .hw.init = &(struct clk_init_data){ 2246 .name = "gcc_ufs_phy_ahb_clk", 2247 .ops = &clk_branch2_ops, 2248 }, 2249 }, 2250 }; 2251 2252 static struct clk_branch gcc_ufs_phy_axi_clk = { 2253 .halt_reg = 0x77038, 2254 .halt_check = BRANCH_HALT, 2255 .hwcg_reg = 0x77038, 2256 .hwcg_bit = 1, 2257 .clkr = { 2258 .enable_reg = 0x77038, 2259 .enable_mask = BIT(0), 2260 .hw.init = &(struct clk_init_data){ 2261 .name = "gcc_ufs_phy_axi_clk", 2262 .parent_hws = (const struct clk_hw*[]){ 2263 &gcc_ufs_phy_axi_clk_src.clkr.hw, 2264 }, 2265 .num_parents = 1, 2266 .flags = CLK_SET_RATE_PARENT, 2267 .ops = &clk_branch2_ops, 2268 }, 2269 }, 2270 }; 2271 2272 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = { 2273 .halt_reg = 0x77038, 2274 .halt_check = BRANCH_HALT, 2275 .hwcg_reg = 0x77038, 2276 .hwcg_bit = 1, 2277 .clkr = { 2278 .enable_reg = 0x77038, 2279 .enable_mask = BIT(1), 2280 .hw.init = &(struct clk_init_data){ 2281 .name = "gcc_ufs_phy_axi_hw_ctl_clk", 2282 .parent_hws = (const struct clk_hw*[]){ 2283 &gcc_ufs_phy_axi_clk.clkr.hw, 2284 }, 2285 .num_parents = 1, 2286 .flags = CLK_SET_RATE_PARENT, 2287 .ops = &clk_branch_simple_ops, 2288 }, 2289 }, 2290 }; 2291 2292 static struct clk_branch gcc_ufs_phy_ice_core_clk = { 2293 .halt_reg = 0x77090, 2294 .halt_check = BRANCH_HALT, 2295 .hwcg_reg = 0x77090, 2296 .hwcg_bit = 1, 2297 .clkr = { 2298 .enable_reg = 0x77090, 2299 .enable_mask = BIT(0), 2300 .hw.init = &(struct clk_init_data){ 2301 .name = "gcc_ufs_phy_ice_core_clk", 2302 .parent_hws = (const struct clk_hw*[]){ 2303 &gcc_ufs_phy_ice_core_clk_src.clkr.hw, 2304 }, 2305 .num_parents = 1, 2306 .flags = CLK_SET_RATE_PARENT, 2307 .ops = &clk_branch2_ops, 2308 }, 2309 }, 2310 }; 2311 2312 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = { 2313 .halt_reg = 0x77090, 2314 .halt_check = BRANCH_HALT, 2315 .hwcg_reg = 0x77090, 2316 .hwcg_bit = 1, 2317 .clkr = { 2318 .enable_reg = 0x77090, 2319 .enable_mask = BIT(1), 2320 .hw.init = &(struct clk_init_data){ 2321 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk", 2322 .parent_hws = (const struct clk_hw*[]){ 2323 &gcc_ufs_phy_ice_core_clk.clkr.hw, 2324 }, 2325 .num_parents = 1, 2326 .flags = CLK_SET_RATE_PARENT, 2327 .ops = &clk_branch_simple_ops, 2328 }, 2329 }, 2330 }; 2331 2332 static struct clk_branch gcc_ufs_phy_phy_aux_clk = { 2333 .halt_reg = 0x77094, 2334 .halt_check = BRANCH_HALT, 2335 .hwcg_reg = 0x77094, 2336 .hwcg_bit = 1, 2337 .clkr = { 2338 .enable_reg = 0x77094, 2339 .enable_mask = BIT(0), 2340 .hw.init = &(struct clk_init_data){ 2341 .name = "gcc_ufs_phy_phy_aux_clk", 2342 .parent_hws = (const struct clk_hw*[]){ 2343 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw, 2344 }, 2345 .num_parents = 1, 2346 .flags = CLK_SET_RATE_PARENT, 2347 .ops = &clk_branch2_ops, 2348 }, 2349 }, 2350 }; 2351 2352 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = { 2353 .halt_reg = 0x77094, 2354 .halt_check = BRANCH_HALT, 2355 .hwcg_reg = 0x77094, 2356 .hwcg_bit = 1, 2357 .clkr = { 2358 .enable_reg = 0x77094, 2359 .enable_mask = BIT(1), 2360 .hw.init = &(struct clk_init_data){ 2361 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk", 2362 .parent_hws = (const struct clk_hw*[]){ 2363 &gcc_ufs_phy_phy_aux_clk.clkr.hw, 2364 }, 2365 .num_parents = 1, 2366 .flags = CLK_SET_RATE_PARENT, 2367 .ops = &clk_branch_simple_ops, 2368 }, 2369 }, 2370 }; 2371 2372 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = { 2373 .halt_reg = 0x7701c, 2374 .halt_check = BRANCH_HALT_SKIP, 2375 .clkr = { 2376 .enable_reg = 0x7701c, 2377 .enable_mask = BIT(0), 2378 .hw.init = &(struct clk_init_data){ 2379 .name = "gcc_ufs_phy_rx_symbol_0_clk", 2380 .ops = &clk_branch2_ops, 2381 }, 2382 }, 2383 }; 2384 2385 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = { 2386 .halt_reg = 0x77018, 2387 .halt_check = BRANCH_HALT_SKIP, 2388 .clkr = { 2389 .enable_reg = 0x77018, 2390 .enable_mask = BIT(0), 2391 .hw.init = &(struct clk_init_data){ 2392 .name = "gcc_ufs_phy_tx_symbol_0_clk", 2393 .ops = &clk_branch2_ops, 2394 }, 2395 }, 2396 }; 2397 2398 static struct clk_branch gcc_ufs_phy_unipro_core_clk = { 2399 .halt_reg = 0x7708c, 2400 .halt_check = BRANCH_HALT, 2401 .hwcg_reg = 0x7708c, 2402 .hwcg_bit = 1, 2403 .clkr = { 2404 .enable_reg = 0x7708c, 2405 .enable_mask = BIT(0), 2406 .hw.init = &(struct clk_init_data){ 2407 .name = "gcc_ufs_phy_unipro_core_clk", 2408 .parent_hws = (const struct clk_hw*[]){ 2409 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw, 2410 }, 2411 .num_parents = 1, 2412 .flags = CLK_SET_RATE_PARENT, 2413 .ops = &clk_branch2_ops, 2414 }, 2415 }, 2416 }; 2417 2418 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = { 2419 .halt_reg = 0x7708c, 2420 .halt_check = BRANCH_HALT, 2421 .hwcg_reg = 0x7708c, 2422 .hwcg_bit = 1, 2423 .clkr = { 2424 .enable_reg = 0x7708c, 2425 .enable_mask = BIT(1), 2426 .hw.init = &(struct clk_init_data){ 2427 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk", 2428 .parent_hws = (const struct clk_hw*[]){ 2429 &gcc_ufs_phy_unipro_core_clk.clkr.hw, 2430 }, 2431 .num_parents = 1, 2432 .flags = CLK_SET_RATE_PARENT, 2433 .ops = &clk_branch_simple_ops, 2434 }, 2435 }, 2436 }; 2437 2438 static struct clk_branch gcc_usb30_prim_master_clk = { 2439 .halt_reg = 0xf010, 2440 .halt_check = BRANCH_HALT, 2441 .clkr = { 2442 .enable_reg = 0xf010, 2443 .enable_mask = BIT(0), 2444 .hw.init = &(struct clk_init_data){ 2445 .name = "gcc_usb30_prim_master_clk", 2446 .parent_hws = (const struct clk_hw*[]){ 2447 &gcc_usb30_prim_master_clk_src.clkr.hw, 2448 }, 2449 .num_parents = 1, 2450 .flags = CLK_SET_RATE_PARENT, 2451 .ops = &clk_branch2_ops, 2452 }, 2453 }, 2454 }; 2455 2456 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2457 .halt_reg = 0xf018, 2458 .halt_check = BRANCH_HALT, 2459 .clkr = { 2460 .enable_reg = 0xf018, 2461 .enable_mask = BIT(0), 2462 .hw.init = &(struct clk_init_data){ 2463 .name = "gcc_usb30_prim_mock_utmi_clk", 2464 .parent_hws = (const struct clk_hw*[]){ 2465 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 2466 }, 2467 .num_parents = 1, 2468 .flags = CLK_SET_RATE_PARENT, 2469 .ops = &clk_branch2_ops, 2470 }, 2471 }, 2472 }; 2473 2474 static struct clk_branch gcc_usb30_prim_sleep_clk = { 2475 .halt_reg = 0xf014, 2476 .halt_check = BRANCH_HALT, 2477 .clkr = { 2478 .enable_reg = 0xf014, 2479 .enable_mask = BIT(0), 2480 .hw.init = &(struct clk_init_data){ 2481 .name = "gcc_usb30_prim_sleep_clk", 2482 .ops = &clk_branch2_ops, 2483 }, 2484 }, 2485 }; 2486 2487 static struct clk_branch gcc_usb3_prim_clkref_clk = { 2488 .halt_reg = 0x8c010, 2489 .halt_check = BRANCH_HALT, 2490 .clkr = { 2491 .enable_reg = 0x8c010, 2492 .enable_mask = BIT(0), 2493 .hw.init = &(struct clk_init_data){ 2494 .name = "gcc_usb3_prim_clkref_clk", 2495 .ops = &clk_branch2_ops, 2496 }, 2497 }, 2498 }; 2499 2500 static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2501 .halt_reg = 0xf050, 2502 .halt_check = BRANCH_HALT, 2503 .clkr = { 2504 .enable_reg = 0xf050, 2505 .enable_mask = BIT(0), 2506 .hw.init = &(struct clk_init_data){ 2507 .name = "gcc_usb3_prim_phy_aux_clk", 2508 .parent_hws = (const struct clk_hw*[]){ 2509 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2510 }, 2511 .num_parents = 1, 2512 .flags = CLK_SET_RATE_PARENT, 2513 .ops = &clk_branch2_ops, 2514 }, 2515 }, 2516 }; 2517 2518 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2519 .halt_reg = 0xf054, 2520 .halt_check = BRANCH_HALT, 2521 .clkr = { 2522 .enable_reg = 0xf054, 2523 .enable_mask = BIT(0), 2524 .hw.init = &(struct clk_init_data){ 2525 .name = "gcc_usb3_prim_phy_com_aux_clk", 2526 .parent_hws = (const struct clk_hw*[]){ 2527 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2528 }, 2529 .num_parents = 1, 2530 .flags = CLK_SET_RATE_PARENT, 2531 .ops = &clk_branch2_ops, 2532 }, 2533 }, 2534 }; 2535 2536 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2537 .halt_check = BRANCH_HALT_SKIP, 2538 .clkr = { 2539 .enable_reg = 0xf058, 2540 .enable_mask = BIT(0), 2541 .hw.init = &(struct clk_init_data){ 2542 .name = "gcc_usb3_prim_phy_pipe_clk", 2543 .ops = &clk_branch2_ops, 2544 }, 2545 }, 2546 }; 2547 2548 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = { 2549 .halt_reg = 0x6a004, 2550 .halt_check = BRANCH_HALT, 2551 .hwcg_reg = 0x6a004, 2552 .hwcg_bit = 1, 2553 .clkr = { 2554 .enable_reg = 0x6a004, 2555 .enable_mask = BIT(0), 2556 .hw.init = &(struct clk_init_data){ 2557 .name = "gcc_usb_phy_cfg_ahb2phy_clk", 2558 .ops = &clk_branch2_ops, 2559 }, 2560 }, 2561 }; 2562 2563 static struct clk_branch gcc_vdda_vs_clk = { 2564 .halt_reg = 0x7a00c, 2565 .halt_check = BRANCH_HALT, 2566 .clkr = { 2567 .enable_reg = 0x7a00c, 2568 .enable_mask = BIT(0), 2569 .hw.init = &(struct clk_init_data){ 2570 .name = "gcc_vdda_vs_clk", 2571 .parent_hws = (const struct clk_hw*[]){ 2572 &gcc_vsensor_clk_src.clkr.hw, 2573 }, 2574 .num_parents = 1, 2575 .flags = CLK_SET_RATE_PARENT, 2576 .ops = &clk_branch2_ops, 2577 }, 2578 }, 2579 }; 2580 2581 static struct clk_branch gcc_vddcx_vs_clk = { 2582 .halt_reg = 0x7a004, 2583 .halt_check = BRANCH_HALT, 2584 .clkr = { 2585 .enable_reg = 0x7a004, 2586 .enable_mask = BIT(0), 2587 .hw.init = &(struct clk_init_data){ 2588 .name = "gcc_vddcx_vs_clk", 2589 .parent_hws = (const struct clk_hw*[]){ 2590 &gcc_vsensor_clk_src.clkr.hw, 2591 }, 2592 .num_parents = 1, 2593 .flags = CLK_SET_RATE_PARENT, 2594 .ops = &clk_branch2_ops, 2595 }, 2596 }, 2597 }; 2598 2599 static struct clk_branch gcc_vddmx_vs_clk = { 2600 .halt_reg = 0x7a008, 2601 .halt_check = BRANCH_HALT, 2602 .clkr = { 2603 .enable_reg = 0x7a008, 2604 .enable_mask = BIT(0), 2605 .hw.init = &(struct clk_init_data){ 2606 .name = "gcc_vddmx_vs_clk", 2607 .parent_hws = (const struct clk_hw*[]){ 2608 &gcc_vsensor_clk_src.clkr.hw, 2609 }, 2610 .num_parents = 1, 2611 .flags = CLK_SET_RATE_PARENT, 2612 .ops = &clk_branch2_ops, 2613 }, 2614 }, 2615 }; 2616 2617 2618 static struct clk_branch gcc_video_axi_clk = { 2619 .halt_reg = 0xb01c, 2620 .halt_check = BRANCH_HALT, 2621 .clkr = { 2622 .enable_reg = 0xb01c, 2623 .enable_mask = BIT(0), 2624 .hw.init = &(struct clk_init_data){ 2625 .name = "gcc_video_axi_clk", 2626 .ops = &clk_branch2_ops, 2627 }, 2628 }, 2629 }; 2630 2631 static struct clk_branch gcc_vs_ctrl_ahb_clk = { 2632 .halt_reg = 0x7a014, 2633 .halt_check = BRANCH_HALT, 2634 .hwcg_reg = 0x7a014, 2635 .hwcg_bit = 1, 2636 .clkr = { 2637 .enable_reg = 0x7a014, 2638 .enable_mask = BIT(0), 2639 .hw.init = &(struct clk_init_data){ 2640 .name = "gcc_vs_ctrl_ahb_clk", 2641 .ops = &clk_branch2_ops, 2642 }, 2643 }, 2644 }; 2645 2646 static struct clk_branch gcc_vs_ctrl_clk = { 2647 .halt_reg = 0x7a010, 2648 .halt_check = BRANCH_HALT, 2649 .clkr = { 2650 .enable_reg = 0x7a010, 2651 .enable_mask = BIT(0), 2652 .hw.init = &(struct clk_init_data){ 2653 .name = "gcc_vs_ctrl_clk", 2654 .parent_hws = (const struct clk_hw*[]){ 2655 &gcc_vs_ctrl_clk_src.clkr.hw, 2656 }, 2657 .num_parents = 1, 2658 .flags = CLK_SET_RATE_PARENT, 2659 .ops = &clk_branch2_ops, 2660 }, 2661 }, 2662 }; 2663 2664 static struct gdsc pcie_0_gdsc = { 2665 .gdscr = 0x6b004, 2666 .pd = { 2667 .name = "pcie_0_gdsc", 2668 }, 2669 .pwrsts = PWRSTS_OFF_ON, 2670 }; 2671 2672 static struct gdsc ufs_phy_gdsc = { 2673 .gdscr = 0x77004, 2674 .pd = { 2675 .name = "ufs_phy_gdsc", 2676 }, 2677 .pwrsts = PWRSTS_OFF_ON, 2678 }; 2679 2680 static struct gdsc usb30_prim_gdsc = { 2681 .gdscr = 0xf004, 2682 .pd = { 2683 .name = "usb30_prim_gdsc", 2684 }, 2685 .pwrsts = PWRSTS_OFF_ON, 2686 }; 2687 2688 static struct gdsc hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc = { 2689 .gdscr = 0x7d030, 2690 .pd = { 2691 .name = "hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc", 2692 }, 2693 .pwrsts = PWRSTS_OFF_ON, 2694 .flags = VOTABLE, 2695 }; 2696 2697 static struct gdsc hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc = { 2698 .gdscr = 0x7d03c, 2699 .pd = { 2700 .name = "hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc", 2701 }, 2702 .pwrsts = PWRSTS_OFF_ON, 2703 .flags = VOTABLE, 2704 }; 2705 2706 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu1_gdsc = { 2707 .gdscr = 0x7d034, 2708 .pd = { 2709 .name = "hlos1_vote_aggre_noc_mmu_tbu1_gdsc", 2710 }, 2711 .pwrsts = PWRSTS_OFF_ON, 2712 .flags = VOTABLE, 2713 }; 2714 2715 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu2_gdsc = { 2716 .gdscr = 0x7d038, 2717 .pd = { 2718 .name = "hlos1_vote_aggre_noc_mmu_tbu2_gdsc", 2719 }, 2720 .pwrsts = PWRSTS_OFF_ON, 2721 .flags = VOTABLE, 2722 }; 2723 2724 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = { 2725 .gdscr = 0x7d040, 2726 .pd = { 2727 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc", 2728 }, 2729 .pwrsts = PWRSTS_OFF_ON, 2730 .flags = VOTABLE, 2731 }; 2732 2733 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = { 2734 .gdscr = 0x7d048, 2735 .pd = { 2736 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc", 2737 }, 2738 .pwrsts = PWRSTS_OFF_ON, 2739 .flags = VOTABLE, 2740 }; 2741 2742 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = { 2743 .gdscr = 0x7d044, 2744 .pd = { 2745 .name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc", 2746 }, 2747 .pwrsts = PWRSTS_OFF_ON, 2748 .flags = VOTABLE, 2749 }; 2750 2751 static struct clk_hw *gcc_sm7150_hws[] = { 2752 [GCC_GPLL0_MAIN_DIV_CDIV] = &gcc_pll0_main_div_cdiv.hw, 2753 }; 2754 2755 static struct clk_regmap *gcc_sm7150_clocks[] = { 2756 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr, 2757 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 2758 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = 2759 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 2760 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 2761 [GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr, 2762 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2763 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 2764 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 2765 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr, 2766 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr, 2767 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr, 2768 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2769 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, 2770 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, 2771 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, 2772 [GCC_CPUSS_RBCPR_CLK_SRC] = &gcc_cpuss_rbcpr_clk_src.clkr, 2773 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 2774 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr, 2775 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr, 2776 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 2777 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr, 2778 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2779 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2780 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2781 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2782 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2783 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2784 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 2785 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 2786 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 2787 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 2788 [GCC_GPU_VS_CLK] = &gcc_gpu_vs_clk.clkr, 2789 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr, 2790 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr, 2791 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr, 2792 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr, 2793 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 2794 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 2795 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 2796 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr, 2797 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 2798 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 2799 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 2800 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 2801 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 2802 [GCC_PCIE_PHY_REFGEN_CLK] = &gcc_pcie_phy_refgen_clk.clkr, 2803 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr, 2804 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2805 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2806 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2807 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2808 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 2809 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2810 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2811 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2812 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2813 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2814 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2815 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2816 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2817 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2818 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2819 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2820 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2821 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 2822 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 2823 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 2824 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 2825 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 2826 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 2827 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2828 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2829 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2830 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2831 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2832 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2833 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2834 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2835 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2836 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2837 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2838 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2839 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 2840 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 2841 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr, 2842 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr, 2843 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr, 2844 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr, 2845 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2846 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2847 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2848 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2849 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2850 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2851 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr, 2852 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2853 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr, 2854 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2855 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2856 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 2857 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 2858 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 2859 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 2860 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, 2861 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 2862 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 2863 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 2864 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr, 2865 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr, 2866 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 2867 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 2868 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 2869 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 2870 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 2871 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 2872 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = 2873 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 2874 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 2875 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 2876 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 2877 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 2878 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 2879 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 2880 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = 2881 &gcc_ufs_phy_unipro_core_clk_src.clkr, 2882 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = 2883 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 2884 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2885 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2886 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2887 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = 2888 &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2889 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2890 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr, 2891 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2892 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2893 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2894 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2895 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr, 2896 [GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr, 2897 [GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr, 2898 [GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr, 2899 [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr, 2900 [GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr, 2901 [GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr, 2902 [GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr, 2903 [GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr, 2904 [GPLL0] = &gpll0.clkr, 2905 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr, 2906 [GPLL6] = &gpll6.clkr, 2907 [GPLL7] = &gpll7.clkr, 2908 }; 2909 2910 static const struct qcom_reset_map gcc_sm7150_resets[] = { 2911 [GCC_PCIE_0_BCR] = { 0x6b000 }, 2912 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 2913 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 }, 2914 [GCC_UFS_PHY_BCR] = { 0x77000 }, 2915 [GCC_USB30_PRIM_BCR] = { 0xf000 }, 2916 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 }, 2917 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 }, 2918 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 }, 2919 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c }, 2920 [GCC_QUSB2PHY_PRIM_BCR] = { 0x26000 }, 2921 [GCC_VIDEO_AXI_CLK_BCR] = { 0xb01c, 2 }, 2922 }; 2923 2924 static const struct clk_rcg_dfs_data gcc_sm7150_dfs_desc[] = { 2925 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2926 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2927 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2928 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2929 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2930 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 2931 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src), 2932 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src), 2933 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2934 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2935 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2936 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2937 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2938 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 2939 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src), 2940 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src), 2941 }; 2942 2943 static struct gdsc *gcc_sm7150_gdscs[] = { 2944 [PCIE_0_GDSC] = &pcie_0_gdsc, 2945 [UFS_PHY_GDSC] = &ufs_phy_gdsc, 2946 [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 2947 [HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_GDSC] = 2948 &hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc, 2949 [HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_GDSC] = 2950 &hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc, 2951 [HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_GDSC] = 2952 &hlos1_vote_aggre_noc_mmu_tbu1_gdsc, 2953 [HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_GDSC] = 2954 &hlos1_vote_aggre_noc_mmu_tbu2_gdsc, 2955 [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = 2956 &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc, 2957 [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = 2958 &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc, 2959 [HLOS1_VOTE_MMNOC_MMU_TBU_SF_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf_gdsc, 2960 }; 2961 2962 static const struct regmap_config gcc_sm7150_regmap_config = { 2963 .reg_bits = 32, 2964 .reg_stride = 4, 2965 .val_bits = 32, 2966 .max_register = 0x1820b0, 2967 .fast_io = true, 2968 }; 2969 2970 static const struct qcom_cc_desc gcc_sm7150_desc = { 2971 .config = &gcc_sm7150_regmap_config, 2972 .clk_hws = gcc_sm7150_hws, 2973 .num_clk_hws = ARRAY_SIZE(gcc_sm7150_hws), 2974 .clks = gcc_sm7150_clocks, 2975 .num_clks = ARRAY_SIZE(gcc_sm7150_clocks), 2976 .resets = gcc_sm7150_resets, 2977 .num_resets = ARRAY_SIZE(gcc_sm7150_resets), 2978 .gdscs = gcc_sm7150_gdscs, 2979 .num_gdscs = ARRAY_SIZE(gcc_sm7150_gdscs), 2980 }; 2981 2982 static const struct of_device_id gcc_sm7150_match_table[] = { 2983 { .compatible = "qcom,sm7150-gcc" }, 2984 { } 2985 }; 2986 MODULE_DEVICE_TABLE(of, gcc_sm7150_match_table); 2987 2988 static int gcc_sm7150_probe(struct platform_device *pdev) 2989 { 2990 struct regmap *regmap; 2991 int ret; 2992 2993 regmap = qcom_cc_map(pdev, &gcc_sm7150_desc); 2994 if (IS_ERR(regmap)) 2995 return PTR_ERR(regmap); 2996 2997 /* 2998 * Disable the GPLL0 active input to MM blocks, NPU 2999 * and GPU via MISC registers. 3000 */ 3001 regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3); 3002 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3); 3003 regmap_update_bits(regmap, 0x71028, 0x3, 0x3); 3004 3005 /* 3006 * Keep the critical clocks always-ON 3007 * GCC_CPUSS_GNOC_CLK, GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK, 3008 * GCC_DISP_AHB_CLK, GCC_CAMERA_XO_CLK, GCC_VIDEO_XO_CLK, 3009 * GCC_DISP_XO_CLK, GCC_GPU_CFG_AHB_CLK 3010 */ 3011 regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0)); 3012 regmap_update_bits(regmap, 0x0b004, BIT(0), BIT(0)); 3013 regmap_update_bits(regmap, 0x0b008, BIT(0), BIT(0)); 3014 regmap_update_bits(regmap, 0x0b00c, BIT(0), BIT(0)); 3015 regmap_update_bits(regmap, 0x0b02c, BIT(0), BIT(0)); 3016 regmap_update_bits(regmap, 0x0b028, BIT(0), BIT(0)); 3017 regmap_update_bits(regmap, 0x0b030, BIT(0), BIT(0)); 3018 regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0)); 3019 3020 ret = qcom_cc_register_rcg_dfs(regmap, gcc_sm7150_dfs_desc, 3021 ARRAY_SIZE(gcc_sm7150_dfs_desc)); 3022 if (ret) 3023 return ret; 3024 3025 return qcom_cc_really_probe(pdev, &gcc_sm7150_desc, regmap); 3026 } 3027 3028 static struct platform_driver gcc_sm7150_driver = { 3029 .probe = gcc_sm7150_probe, 3030 .driver = { 3031 .name = "gcc-sm7150", 3032 .of_match_table = gcc_sm7150_match_table, 3033 }, 3034 }; 3035 3036 static int __init gcc_sm7150_init(void) 3037 { 3038 return platform_driver_register(&gcc_sm7150_driver); 3039 } 3040 subsys_initcall(gcc_sm7150_init); 3041 3042 static void __exit gcc_sm7150_exit(void) 3043 { 3044 platform_driver_unregister(&gcc_sm7150_driver); 3045 } 3046 module_exit(gcc_sm7150_exit); 3047 3048 MODULE_DESCRIPTION("Qualcomm SM7150 Global Clock Controller"); 3049 MODULE_LICENSE("GPL"); 3050