1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2015, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/bitops.h> 8 #include <linux/err.h> 9 #include <linux/platform_device.h> 10 #include <linux/module.h> 11 #include <linux/of.h> 12 #include <linux/of_device.h> 13 #include <linux/clk-provider.h> 14 #include <linux/regmap.h> 15 #include <linux/reset-controller.h> 16 17 #include <dt-bindings/clock/qcom,gcc-msm8996.h> 18 19 #include "common.h" 20 #include "clk-regmap.h" 21 #include "clk-alpha-pll.h" 22 #include "clk-rcg.h" 23 #include "clk-branch.h" 24 #include "reset.h" 25 #include "gdsc.h" 26 27 enum { 28 P_XO, 29 P_GPLL0, 30 P_GPLL2, 31 P_GPLL3, 32 P_GPLL1, 33 P_GPLL2_EARLY, 34 P_GPLL0_EARLY_DIV, 35 P_SLEEP_CLK, 36 P_GPLL4, 37 P_AUD_REF_CLK, 38 P_GPLL1_EARLY_DIV 39 }; 40 41 static const struct parent_map gcc_sleep_clk_map[] = { 42 { P_SLEEP_CLK, 5 } 43 }; 44 45 static const char * const gcc_sleep_clk[] = { 46 "sleep_clk" 47 }; 48 49 static const struct parent_map gcc_xo_gpll0_map[] = { 50 { P_XO, 0 }, 51 { P_GPLL0, 1 } 52 }; 53 54 static const char * const gcc_xo_gpll0[] = { 55 "xo", 56 "gpll0" 57 }; 58 59 static const struct parent_map gcc_xo_sleep_clk_map[] = { 60 { P_XO, 0 }, 61 { P_SLEEP_CLK, 5 } 62 }; 63 64 static const char * const gcc_xo_sleep_clk[] = { 65 "xo", 66 "sleep_clk" 67 }; 68 69 static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = { 70 { P_XO, 0 }, 71 { P_GPLL0, 1 }, 72 { P_GPLL0_EARLY_DIV, 6 } 73 }; 74 75 static const char * const gcc_xo_gpll0_gpll0_early_div[] = { 76 "xo", 77 "gpll0", 78 "gpll0_early_div" 79 }; 80 81 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = { 82 { P_XO, 0 }, 83 { P_GPLL0, 1 }, 84 { P_GPLL4, 5 } 85 }; 86 87 static const char * const gcc_xo_gpll0_gpll4[] = { 88 "xo", 89 "gpll0", 90 "gpll4" 91 }; 92 93 static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = { 94 { P_XO, 0 }, 95 { P_GPLL0, 1 }, 96 { P_AUD_REF_CLK, 2 } 97 }; 98 99 static const char * const gcc_xo_gpll0_aud_ref_clk[] = { 100 "xo", 101 "gpll0", 102 "aud_ref_clk" 103 }; 104 105 static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = { 106 { P_XO, 0 }, 107 { P_GPLL0, 1 }, 108 { P_SLEEP_CLK, 5 }, 109 { P_GPLL0_EARLY_DIV, 6 } 110 }; 111 112 static const char * const gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = { 113 "xo", 114 "gpll0", 115 "sleep_clk", 116 "gpll0_early_div" 117 }; 118 119 static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = { 120 { P_XO, 0 }, 121 { P_GPLL0, 1 }, 122 { P_GPLL4, 5 }, 123 { P_GPLL0_EARLY_DIV, 6 } 124 }; 125 126 static const char * const gcc_xo_gpll0_gpll4_gpll0_early_div[] = { 127 "xo", 128 "gpll0", 129 "gpll4", 130 "gpll0_early_div" 131 }; 132 133 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div_map[] = { 134 { P_XO, 0 }, 135 { P_GPLL0, 1 }, 136 { P_GPLL2, 2 }, 137 { P_GPLL3, 3 }, 138 { P_GPLL0_EARLY_DIV, 6 } 139 }; 140 141 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div[] = { 142 "xo", 143 "gpll0", 144 "gpll2", 145 "gpll3", 146 "gpll0_early_div" 147 }; 148 149 static const struct parent_map gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map[] = { 150 { P_XO, 0 }, 151 { P_GPLL0, 1 }, 152 { P_GPLL1_EARLY_DIV, 3 }, 153 { P_GPLL1, 4 }, 154 { P_GPLL4, 5 }, 155 { P_GPLL0_EARLY_DIV, 6 } 156 }; 157 158 static const char * const gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div[] = { 159 "xo", 160 "gpll0", 161 "gpll1_early_div", 162 "gpll1", 163 "gpll4", 164 "gpll0_early_div" 165 }; 166 167 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map[] = { 168 { P_XO, 0 }, 169 { P_GPLL0, 1 }, 170 { P_GPLL2, 2 }, 171 { P_GPLL3, 3 }, 172 { P_GPLL1, 4 }, 173 { P_GPLL2_EARLY, 5 }, 174 { P_GPLL0_EARLY_DIV, 6 } 175 }; 176 177 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div[] = { 178 "xo", 179 "gpll0", 180 "gpll2", 181 "gpll3", 182 "gpll1", 183 "gpll2_early", 184 "gpll0_early_div" 185 }; 186 187 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div_map[] = { 188 { P_XO, 0 }, 189 { P_GPLL0, 1 }, 190 { P_GPLL2, 2 }, 191 { P_GPLL3, 3 }, 192 { P_GPLL1, 4 }, 193 { P_GPLL4, 5 }, 194 { P_GPLL0_EARLY_DIV, 6 } 195 }; 196 197 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div[] = { 198 "xo", 199 "gpll0", 200 "gpll2", 201 "gpll3", 202 "gpll1", 203 "gpll4", 204 "gpll0_early_div" 205 }; 206 207 static struct clk_fixed_factor xo = { 208 .mult = 1, 209 .div = 1, 210 .hw.init = &(struct clk_init_data){ 211 .name = "xo", 212 .parent_names = (const char *[]){ "xo_board" }, 213 .num_parents = 1, 214 .ops = &clk_fixed_factor_ops, 215 }, 216 }; 217 218 static struct clk_alpha_pll gpll0_early = { 219 .offset = 0x00000, 220 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 221 .clkr = { 222 .enable_reg = 0x52000, 223 .enable_mask = BIT(0), 224 .hw.init = &(struct clk_init_data){ 225 .name = "gpll0_early", 226 .parent_names = (const char *[]){ "xo" }, 227 .num_parents = 1, 228 .ops = &clk_alpha_pll_ops, 229 }, 230 }, 231 }; 232 233 static struct clk_fixed_factor gpll0_early_div = { 234 .mult = 1, 235 .div = 2, 236 .hw.init = &(struct clk_init_data){ 237 .name = "gpll0_early_div", 238 .parent_names = (const char *[]){ "gpll0_early" }, 239 .num_parents = 1, 240 .ops = &clk_fixed_factor_ops, 241 }, 242 }; 243 244 static struct clk_alpha_pll_postdiv gpll0 = { 245 .offset = 0x00000, 246 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 247 .clkr.hw.init = &(struct clk_init_data){ 248 .name = "gpll0", 249 .parent_names = (const char *[]){ "gpll0_early" }, 250 .num_parents = 1, 251 .ops = &clk_alpha_pll_postdiv_ops, 252 }, 253 }; 254 255 static struct clk_branch gcc_mmss_gpll0_div_clk = { 256 .halt_check = BRANCH_HALT_DELAY, 257 .clkr = { 258 .enable_reg = 0x5200c, 259 .enable_mask = BIT(0), 260 .hw.init = &(struct clk_init_data){ 261 .name = "gcc_mmss_gpll0_div_clk", 262 .parent_names = (const char *[]){ "gpll0" }, 263 .num_parents = 1, 264 .flags = CLK_SET_RATE_PARENT, 265 .ops = &clk_branch2_ops, 266 }, 267 }, 268 }; 269 270 static struct clk_branch gcc_mss_gpll0_div_clk = { 271 .halt_check = BRANCH_HALT_DELAY, 272 .clkr = { 273 .enable_reg = 0x5200c, 274 .enable_mask = BIT(2), 275 .hw.init = &(struct clk_init_data){ 276 .name = "gcc_mss_gpll0_div_clk", 277 .parent_names = (const char *[]){ "gpll0" }, 278 .num_parents = 1, 279 .flags = CLK_SET_RATE_PARENT, 280 .ops = &clk_branch2_ops 281 }, 282 }, 283 }; 284 285 static struct clk_alpha_pll gpll4_early = { 286 .offset = 0x77000, 287 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 288 .clkr = { 289 .enable_reg = 0x52000, 290 .enable_mask = BIT(4), 291 .hw.init = &(struct clk_init_data){ 292 .name = "gpll4_early", 293 .parent_names = (const char *[]){ "xo" }, 294 .num_parents = 1, 295 .ops = &clk_alpha_pll_ops, 296 }, 297 }, 298 }; 299 300 static struct clk_alpha_pll_postdiv gpll4 = { 301 .offset = 0x77000, 302 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 303 .clkr.hw.init = &(struct clk_init_data){ 304 .name = "gpll4", 305 .parent_names = (const char *[]){ "gpll4_early" }, 306 .num_parents = 1, 307 .ops = &clk_alpha_pll_postdiv_ops, 308 }, 309 }; 310 311 static const struct freq_tbl ftbl_system_noc_clk_src[] = { 312 F(19200000, P_XO, 1, 0, 0), 313 F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0), 314 F(100000000, P_GPLL0, 6, 0, 0), 315 F(150000000, P_GPLL0, 4, 0, 0), 316 F(200000000, P_GPLL0, 3, 0, 0), 317 F(240000000, P_GPLL0, 2.5, 0, 0), 318 { } 319 }; 320 321 static struct clk_rcg2 system_noc_clk_src = { 322 .cmd_rcgr = 0x0401c, 323 .hid_width = 5, 324 .parent_map = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map, 325 .freq_tbl = ftbl_system_noc_clk_src, 326 .clkr.hw.init = &(struct clk_init_data){ 327 .name = "system_noc_clk_src", 328 .parent_names = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div, 329 .num_parents = 7, 330 .ops = &clk_rcg2_ops, 331 }, 332 }; 333 334 static const struct freq_tbl ftbl_config_noc_clk_src[] = { 335 F(19200000, P_XO, 1, 0, 0), 336 F(37500000, P_GPLL0, 16, 0, 0), 337 F(75000000, P_GPLL0, 8, 0, 0), 338 { } 339 }; 340 341 static struct clk_rcg2 config_noc_clk_src = { 342 .cmd_rcgr = 0x0500c, 343 .hid_width = 5, 344 .parent_map = gcc_xo_gpll0_map, 345 .freq_tbl = ftbl_config_noc_clk_src, 346 .clkr.hw.init = &(struct clk_init_data){ 347 .name = "config_noc_clk_src", 348 .parent_names = gcc_xo_gpll0, 349 .num_parents = 2, 350 .ops = &clk_rcg2_ops, 351 }, 352 }; 353 354 static const struct freq_tbl ftbl_periph_noc_clk_src[] = { 355 F(19200000, P_XO, 1, 0, 0), 356 F(37500000, P_GPLL0, 16, 0, 0), 357 F(50000000, P_GPLL0, 12, 0, 0), 358 F(75000000, P_GPLL0, 8, 0, 0), 359 F(100000000, P_GPLL0, 6, 0, 0), 360 { } 361 }; 362 363 static struct clk_rcg2 periph_noc_clk_src = { 364 .cmd_rcgr = 0x06014, 365 .hid_width = 5, 366 .parent_map = gcc_xo_gpll0_map, 367 .freq_tbl = ftbl_periph_noc_clk_src, 368 .clkr.hw.init = &(struct clk_init_data){ 369 .name = "periph_noc_clk_src", 370 .parent_names = gcc_xo_gpll0, 371 .num_parents = 2, 372 .ops = &clk_rcg2_ops, 373 }, 374 }; 375 376 static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 377 F(19200000, P_XO, 1, 0, 0), 378 F(120000000, P_GPLL0, 5, 0, 0), 379 F(150000000, P_GPLL0, 4, 0, 0), 380 { } 381 }; 382 383 static struct clk_rcg2 usb30_master_clk_src = { 384 .cmd_rcgr = 0x0f014, 385 .mnd_width = 8, 386 .hid_width = 5, 387 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 388 .freq_tbl = ftbl_usb30_master_clk_src, 389 .clkr.hw.init = &(struct clk_init_data){ 390 .name = "usb30_master_clk_src", 391 .parent_names = gcc_xo_gpll0_gpll0_early_div, 392 .num_parents = 3, 393 .ops = &clk_rcg2_ops, 394 }, 395 }; 396 397 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 398 F(19200000, P_XO, 1, 0, 0), 399 { } 400 }; 401 402 static struct clk_rcg2 usb30_mock_utmi_clk_src = { 403 .cmd_rcgr = 0x0f028, 404 .hid_width = 5, 405 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 406 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 407 .clkr.hw.init = &(struct clk_init_data){ 408 .name = "usb30_mock_utmi_clk_src", 409 .parent_names = gcc_xo_gpll0_gpll0_early_div, 410 .num_parents = 3, 411 .ops = &clk_rcg2_ops, 412 }, 413 }; 414 415 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = { 416 F(1200000, P_XO, 16, 0, 0), 417 { } 418 }; 419 420 static struct clk_rcg2 usb3_phy_aux_clk_src = { 421 .cmd_rcgr = 0x5000c, 422 .hid_width = 5, 423 .parent_map = gcc_xo_sleep_clk_map, 424 .freq_tbl = ftbl_usb3_phy_aux_clk_src, 425 .clkr.hw.init = &(struct clk_init_data){ 426 .name = "usb3_phy_aux_clk_src", 427 .parent_names = gcc_xo_sleep_clk, 428 .num_parents = 2, 429 .ops = &clk_rcg2_ops, 430 }, 431 }; 432 433 static const struct freq_tbl ftbl_usb20_master_clk_src[] = { 434 F(120000000, P_GPLL0, 5, 0, 0), 435 { } 436 }; 437 438 static struct clk_rcg2 usb20_master_clk_src = { 439 .cmd_rcgr = 0x12010, 440 .mnd_width = 8, 441 .hid_width = 5, 442 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 443 .freq_tbl = ftbl_usb20_master_clk_src, 444 .clkr.hw.init = &(struct clk_init_data){ 445 .name = "usb20_master_clk_src", 446 .parent_names = gcc_xo_gpll0_gpll0_early_div, 447 .num_parents = 3, 448 .ops = &clk_rcg2_ops, 449 }, 450 }; 451 452 static struct clk_rcg2 usb20_mock_utmi_clk_src = { 453 .cmd_rcgr = 0x12024, 454 .hid_width = 5, 455 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 456 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 457 .clkr.hw.init = &(struct clk_init_data){ 458 .name = "usb20_mock_utmi_clk_src", 459 .parent_names = gcc_xo_gpll0_gpll0_early_div, 460 .num_parents = 3, 461 .ops = &clk_rcg2_ops, 462 }, 463 }; 464 465 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 466 F(144000, P_XO, 16, 3, 25), 467 F(400000, P_XO, 12, 1, 4), 468 F(20000000, P_GPLL0, 15, 1, 2), 469 F(25000000, P_GPLL0, 12, 1, 2), 470 F(50000000, P_GPLL0, 12, 0, 0), 471 F(96000000, P_GPLL4, 4, 0, 0), 472 F(192000000, P_GPLL4, 2, 0, 0), 473 F(384000000, P_GPLL4, 1, 0, 0), 474 { } 475 }; 476 477 static struct clk_rcg2 sdcc1_apps_clk_src = { 478 .cmd_rcgr = 0x13010, 479 .mnd_width = 8, 480 .hid_width = 5, 481 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 482 .freq_tbl = ftbl_sdcc1_apps_clk_src, 483 .clkr.hw.init = &(struct clk_init_data){ 484 .name = "sdcc1_apps_clk_src", 485 .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div, 486 .num_parents = 4, 487 .ops = &clk_rcg2_floor_ops, 488 }, 489 }; 490 491 static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { 492 F(19200000, P_XO, 1, 0, 0), 493 F(150000000, P_GPLL0, 4, 0, 0), 494 F(300000000, P_GPLL0, 2, 0, 0), 495 { } 496 }; 497 498 static struct clk_rcg2 sdcc1_ice_core_clk_src = { 499 .cmd_rcgr = 0x13024, 500 .hid_width = 5, 501 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 502 .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 503 .clkr.hw.init = &(struct clk_init_data){ 504 .name = "sdcc1_ice_core_clk_src", 505 .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div, 506 .num_parents = 4, 507 .ops = &clk_rcg2_ops, 508 }, 509 }; 510 511 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 512 F(144000, P_XO, 16, 3, 25), 513 F(400000, P_XO, 12, 1, 4), 514 F(20000000, P_GPLL0, 15, 1, 2), 515 F(25000000, P_GPLL0, 12, 1, 2), 516 F(50000000, P_GPLL0, 12, 0, 0), 517 F(100000000, P_GPLL0, 6, 0, 0), 518 F(200000000, P_GPLL0, 3, 0, 0), 519 { } 520 }; 521 522 static struct clk_rcg2 sdcc2_apps_clk_src = { 523 .cmd_rcgr = 0x14010, 524 .mnd_width = 8, 525 .hid_width = 5, 526 .parent_map = gcc_xo_gpll0_gpll4_map, 527 .freq_tbl = ftbl_sdcc2_apps_clk_src, 528 .clkr.hw.init = &(struct clk_init_data){ 529 .name = "sdcc2_apps_clk_src", 530 .parent_names = gcc_xo_gpll0_gpll4, 531 .num_parents = 3, 532 .ops = &clk_rcg2_floor_ops, 533 }, 534 }; 535 536 static struct clk_rcg2 sdcc3_apps_clk_src = { 537 .cmd_rcgr = 0x15010, 538 .mnd_width = 8, 539 .hid_width = 5, 540 .parent_map = gcc_xo_gpll0_gpll4_map, 541 .freq_tbl = ftbl_sdcc2_apps_clk_src, 542 .clkr.hw.init = &(struct clk_init_data){ 543 .name = "sdcc3_apps_clk_src", 544 .parent_names = gcc_xo_gpll0_gpll4, 545 .num_parents = 3, 546 .ops = &clk_rcg2_floor_ops, 547 }, 548 }; 549 550 static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = { 551 F(144000, P_XO, 16, 3, 25), 552 F(400000, P_XO, 12, 1, 4), 553 F(20000000, P_GPLL0, 15, 1, 2), 554 F(25000000, P_GPLL0, 12, 1, 2), 555 F(50000000, P_GPLL0, 12, 0, 0), 556 F(100000000, P_GPLL0, 6, 0, 0), 557 { } 558 }; 559 560 static struct clk_rcg2 sdcc4_apps_clk_src = { 561 .cmd_rcgr = 0x16010, 562 .mnd_width = 8, 563 .hid_width = 5, 564 .parent_map = gcc_xo_gpll0_map, 565 .freq_tbl = ftbl_sdcc4_apps_clk_src, 566 .clkr.hw.init = &(struct clk_init_data){ 567 .name = "sdcc4_apps_clk_src", 568 .parent_names = gcc_xo_gpll0, 569 .num_parents = 2, 570 .ops = &clk_rcg2_floor_ops, 571 }, 572 }; 573 574 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = { 575 F(960000, P_XO, 10, 1, 2), 576 F(4800000, P_XO, 4, 0, 0), 577 F(9600000, P_XO, 2, 0, 0), 578 F(15000000, P_GPLL0, 10, 1, 4), 579 F(19200000, P_XO, 1, 0, 0), 580 F(25000000, P_GPLL0, 12, 1, 2), 581 F(50000000, P_GPLL0, 12, 0, 0), 582 { } 583 }; 584 585 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 586 .cmd_rcgr = 0x1900c, 587 .mnd_width = 8, 588 .hid_width = 5, 589 .parent_map = gcc_xo_gpll0_map, 590 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 591 .clkr.hw.init = &(struct clk_init_data){ 592 .name = "blsp1_qup1_spi_apps_clk_src", 593 .parent_names = gcc_xo_gpll0, 594 .num_parents = 2, 595 .ops = &clk_rcg2_ops, 596 }, 597 }; 598 599 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = { 600 F(19200000, P_XO, 1, 0, 0), 601 F(50000000, P_GPLL0, 12, 0, 0), 602 { } 603 }; 604 605 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 606 .cmd_rcgr = 0x19020, 607 .hid_width = 5, 608 .parent_map = gcc_xo_gpll0_map, 609 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 610 .clkr.hw.init = &(struct clk_init_data){ 611 .name = "blsp1_qup1_i2c_apps_clk_src", 612 .parent_names = gcc_xo_gpll0, 613 .num_parents = 2, 614 .ops = &clk_rcg2_ops, 615 }, 616 }; 617 618 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = { 619 F(3686400, P_GPLL0, 1, 96, 15625), 620 F(7372800, P_GPLL0, 1, 192, 15625), 621 F(14745600, P_GPLL0, 1, 384, 15625), 622 F(16000000, P_GPLL0, 5, 2, 15), 623 F(19200000, P_XO, 1, 0, 0), 624 F(24000000, P_GPLL0, 5, 1, 5), 625 F(32000000, P_GPLL0, 1, 4, 75), 626 F(40000000, P_GPLL0, 15, 0, 0), 627 F(46400000, P_GPLL0, 1, 29, 375), 628 F(48000000, P_GPLL0, 12.5, 0, 0), 629 F(51200000, P_GPLL0, 1, 32, 375), 630 F(56000000, P_GPLL0, 1, 7, 75), 631 F(58982400, P_GPLL0, 1, 1536, 15625), 632 F(60000000, P_GPLL0, 10, 0, 0), 633 F(63157895, P_GPLL0, 9.5, 0, 0), 634 { } 635 }; 636 637 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 638 .cmd_rcgr = 0x1a00c, 639 .mnd_width = 16, 640 .hid_width = 5, 641 .parent_map = gcc_xo_gpll0_map, 642 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 643 .clkr.hw.init = &(struct clk_init_data){ 644 .name = "blsp1_uart1_apps_clk_src", 645 .parent_names = gcc_xo_gpll0, 646 .num_parents = 2, 647 .ops = &clk_rcg2_ops, 648 }, 649 }; 650 651 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 652 .cmd_rcgr = 0x1b00c, 653 .mnd_width = 8, 654 .hid_width = 5, 655 .parent_map = gcc_xo_gpll0_map, 656 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 657 .clkr.hw.init = &(struct clk_init_data){ 658 .name = "blsp1_qup2_spi_apps_clk_src", 659 .parent_names = gcc_xo_gpll0, 660 .num_parents = 2, 661 .ops = &clk_rcg2_ops, 662 }, 663 }; 664 665 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 666 .cmd_rcgr = 0x1b020, 667 .hid_width = 5, 668 .parent_map = gcc_xo_gpll0_map, 669 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 670 .clkr.hw.init = &(struct clk_init_data){ 671 .name = "blsp1_qup2_i2c_apps_clk_src", 672 .parent_names = gcc_xo_gpll0, 673 .num_parents = 2, 674 .ops = &clk_rcg2_ops, 675 }, 676 }; 677 678 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 679 .cmd_rcgr = 0x1c00c, 680 .mnd_width = 16, 681 .hid_width = 5, 682 .parent_map = gcc_xo_gpll0_map, 683 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 684 .clkr.hw.init = &(struct clk_init_data){ 685 .name = "blsp1_uart2_apps_clk_src", 686 .parent_names = gcc_xo_gpll0, 687 .num_parents = 2, 688 .ops = &clk_rcg2_ops, 689 }, 690 }; 691 692 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 693 .cmd_rcgr = 0x1d00c, 694 .mnd_width = 8, 695 .hid_width = 5, 696 .parent_map = gcc_xo_gpll0_map, 697 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 698 .clkr.hw.init = &(struct clk_init_data){ 699 .name = "blsp1_qup3_spi_apps_clk_src", 700 .parent_names = gcc_xo_gpll0, 701 .num_parents = 2, 702 .ops = &clk_rcg2_ops, 703 }, 704 }; 705 706 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 707 .cmd_rcgr = 0x1d020, 708 .hid_width = 5, 709 .parent_map = gcc_xo_gpll0_map, 710 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 711 .clkr.hw.init = &(struct clk_init_data){ 712 .name = "blsp1_qup3_i2c_apps_clk_src", 713 .parent_names = gcc_xo_gpll0, 714 .num_parents = 2, 715 .ops = &clk_rcg2_ops, 716 }, 717 }; 718 719 static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 720 .cmd_rcgr = 0x1e00c, 721 .mnd_width = 16, 722 .hid_width = 5, 723 .parent_map = gcc_xo_gpll0_map, 724 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 725 .clkr.hw.init = &(struct clk_init_data){ 726 .name = "blsp1_uart3_apps_clk_src", 727 .parent_names = gcc_xo_gpll0, 728 .num_parents = 2, 729 .ops = &clk_rcg2_ops, 730 }, 731 }; 732 733 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 734 .cmd_rcgr = 0x1f00c, 735 .mnd_width = 8, 736 .hid_width = 5, 737 .parent_map = gcc_xo_gpll0_map, 738 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 739 .clkr.hw.init = &(struct clk_init_data){ 740 .name = "blsp1_qup4_spi_apps_clk_src", 741 .parent_names = gcc_xo_gpll0, 742 .num_parents = 2, 743 .ops = &clk_rcg2_ops, 744 }, 745 }; 746 747 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 748 .cmd_rcgr = 0x1f020, 749 .hid_width = 5, 750 .parent_map = gcc_xo_gpll0_map, 751 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 752 .clkr.hw.init = &(struct clk_init_data){ 753 .name = "blsp1_qup4_i2c_apps_clk_src", 754 .parent_names = gcc_xo_gpll0, 755 .num_parents = 2, 756 .ops = &clk_rcg2_ops, 757 }, 758 }; 759 760 static struct clk_rcg2 blsp1_uart4_apps_clk_src = { 761 .cmd_rcgr = 0x2000c, 762 .mnd_width = 16, 763 .hid_width = 5, 764 .parent_map = gcc_xo_gpll0_map, 765 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 766 .clkr.hw.init = &(struct clk_init_data){ 767 .name = "blsp1_uart4_apps_clk_src", 768 .parent_names = gcc_xo_gpll0, 769 .num_parents = 2, 770 .ops = &clk_rcg2_ops, 771 }, 772 }; 773 774 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 775 .cmd_rcgr = 0x2100c, 776 .mnd_width = 8, 777 .hid_width = 5, 778 .parent_map = gcc_xo_gpll0_map, 779 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 780 .clkr.hw.init = &(struct clk_init_data){ 781 .name = "blsp1_qup5_spi_apps_clk_src", 782 .parent_names = gcc_xo_gpll0, 783 .num_parents = 2, 784 .ops = &clk_rcg2_ops, 785 }, 786 }; 787 788 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 789 .cmd_rcgr = 0x21020, 790 .hid_width = 5, 791 .parent_map = gcc_xo_gpll0_map, 792 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 793 .clkr.hw.init = &(struct clk_init_data){ 794 .name = "blsp1_qup5_i2c_apps_clk_src", 795 .parent_names = gcc_xo_gpll0, 796 .num_parents = 2, 797 .ops = &clk_rcg2_ops, 798 }, 799 }; 800 801 static struct clk_rcg2 blsp1_uart5_apps_clk_src = { 802 .cmd_rcgr = 0x2200c, 803 .mnd_width = 16, 804 .hid_width = 5, 805 .parent_map = gcc_xo_gpll0_map, 806 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 807 .clkr.hw.init = &(struct clk_init_data){ 808 .name = "blsp1_uart5_apps_clk_src", 809 .parent_names = gcc_xo_gpll0, 810 .num_parents = 2, 811 .ops = &clk_rcg2_ops, 812 }, 813 }; 814 815 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 816 .cmd_rcgr = 0x2300c, 817 .mnd_width = 8, 818 .hid_width = 5, 819 .parent_map = gcc_xo_gpll0_map, 820 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 821 .clkr.hw.init = &(struct clk_init_data){ 822 .name = "blsp1_qup6_spi_apps_clk_src", 823 .parent_names = gcc_xo_gpll0, 824 .num_parents = 2, 825 .ops = &clk_rcg2_ops, 826 }, 827 }; 828 829 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 830 .cmd_rcgr = 0x23020, 831 .hid_width = 5, 832 .parent_map = gcc_xo_gpll0_map, 833 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 834 .clkr.hw.init = &(struct clk_init_data){ 835 .name = "blsp1_qup6_i2c_apps_clk_src", 836 .parent_names = gcc_xo_gpll0, 837 .num_parents = 2, 838 .ops = &clk_rcg2_ops, 839 }, 840 }; 841 842 static struct clk_rcg2 blsp1_uart6_apps_clk_src = { 843 .cmd_rcgr = 0x2400c, 844 .mnd_width = 16, 845 .hid_width = 5, 846 .parent_map = gcc_xo_gpll0_map, 847 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 848 .clkr.hw.init = &(struct clk_init_data){ 849 .name = "blsp1_uart6_apps_clk_src", 850 .parent_names = gcc_xo_gpll0, 851 .num_parents = 2, 852 .ops = &clk_rcg2_ops, 853 }, 854 }; 855 856 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 857 .cmd_rcgr = 0x2600c, 858 .mnd_width = 8, 859 .hid_width = 5, 860 .parent_map = gcc_xo_gpll0_map, 861 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 862 .clkr.hw.init = &(struct clk_init_data){ 863 .name = "blsp2_qup1_spi_apps_clk_src", 864 .parent_names = gcc_xo_gpll0, 865 .num_parents = 2, 866 .ops = &clk_rcg2_ops, 867 }, 868 }; 869 870 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 871 .cmd_rcgr = 0x26020, 872 .hid_width = 5, 873 .parent_map = gcc_xo_gpll0_map, 874 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 875 .clkr.hw.init = &(struct clk_init_data){ 876 .name = "blsp2_qup1_i2c_apps_clk_src", 877 .parent_names = gcc_xo_gpll0, 878 .num_parents = 2, 879 .ops = &clk_rcg2_ops, 880 }, 881 }; 882 883 static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 884 .cmd_rcgr = 0x2700c, 885 .mnd_width = 16, 886 .hid_width = 5, 887 .parent_map = gcc_xo_gpll0_map, 888 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 889 .clkr.hw.init = &(struct clk_init_data){ 890 .name = "blsp2_uart1_apps_clk_src", 891 .parent_names = gcc_xo_gpll0, 892 .num_parents = 2, 893 .ops = &clk_rcg2_ops, 894 }, 895 }; 896 897 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 898 .cmd_rcgr = 0x2800c, 899 .mnd_width = 8, 900 .hid_width = 5, 901 .parent_map = gcc_xo_gpll0_map, 902 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 903 .clkr.hw.init = &(struct clk_init_data){ 904 .name = "blsp2_qup2_spi_apps_clk_src", 905 .parent_names = gcc_xo_gpll0, 906 .num_parents = 2, 907 .ops = &clk_rcg2_ops, 908 }, 909 }; 910 911 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 912 .cmd_rcgr = 0x28020, 913 .hid_width = 5, 914 .parent_map = gcc_xo_gpll0_map, 915 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 916 .clkr.hw.init = &(struct clk_init_data){ 917 .name = "blsp2_qup2_i2c_apps_clk_src", 918 .parent_names = gcc_xo_gpll0, 919 .num_parents = 2, 920 .ops = &clk_rcg2_ops, 921 }, 922 }; 923 924 static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 925 .cmd_rcgr = 0x2900c, 926 .mnd_width = 16, 927 .hid_width = 5, 928 .parent_map = gcc_xo_gpll0_map, 929 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 930 .clkr.hw.init = &(struct clk_init_data){ 931 .name = "blsp2_uart2_apps_clk_src", 932 .parent_names = gcc_xo_gpll0, 933 .num_parents = 2, 934 .ops = &clk_rcg2_ops, 935 }, 936 }; 937 938 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 939 .cmd_rcgr = 0x2a00c, 940 .mnd_width = 8, 941 .hid_width = 5, 942 .parent_map = gcc_xo_gpll0_map, 943 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 944 .clkr.hw.init = &(struct clk_init_data){ 945 .name = "blsp2_qup3_spi_apps_clk_src", 946 .parent_names = gcc_xo_gpll0, 947 .num_parents = 2, 948 .ops = &clk_rcg2_ops, 949 }, 950 }; 951 952 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 953 .cmd_rcgr = 0x2a020, 954 .hid_width = 5, 955 .parent_map = gcc_xo_gpll0_map, 956 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 957 .clkr.hw.init = &(struct clk_init_data){ 958 .name = "blsp2_qup3_i2c_apps_clk_src", 959 .parent_names = gcc_xo_gpll0, 960 .num_parents = 2, 961 .ops = &clk_rcg2_ops, 962 }, 963 }; 964 965 static struct clk_rcg2 blsp2_uart3_apps_clk_src = { 966 .cmd_rcgr = 0x2b00c, 967 .mnd_width = 16, 968 .hid_width = 5, 969 .parent_map = gcc_xo_gpll0_map, 970 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 971 .clkr.hw.init = &(struct clk_init_data){ 972 .name = "blsp2_uart3_apps_clk_src", 973 .parent_names = gcc_xo_gpll0, 974 .num_parents = 2, 975 .ops = &clk_rcg2_ops, 976 }, 977 }; 978 979 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 980 .cmd_rcgr = 0x2c00c, 981 .mnd_width = 8, 982 .hid_width = 5, 983 .parent_map = gcc_xo_gpll0_map, 984 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 985 .clkr.hw.init = &(struct clk_init_data){ 986 .name = "blsp2_qup4_spi_apps_clk_src", 987 .parent_names = gcc_xo_gpll0, 988 .num_parents = 2, 989 .ops = &clk_rcg2_ops, 990 }, 991 }; 992 993 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 994 .cmd_rcgr = 0x2c020, 995 .hid_width = 5, 996 .parent_map = gcc_xo_gpll0_map, 997 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 998 .clkr.hw.init = &(struct clk_init_data){ 999 .name = "blsp2_qup4_i2c_apps_clk_src", 1000 .parent_names = gcc_xo_gpll0, 1001 .num_parents = 2, 1002 .ops = &clk_rcg2_ops, 1003 }, 1004 }; 1005 1006 static struct clk_rcg2 blsp2_uart4_apps_clk_src = { 1007 .cmd_rcgr = 0x2d00c, 1008 .mnd_width = 16, 1009 .hid_width = 5, 1010 .parent_map = gcc_xo_gpll0_map, 1011 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 1012 .clkr.hw.init = &(struct clk_init_data){ 1013 .name = "blsp2_uart4_apps_clk_src", 1014 .parent_names = gcc_xo_gpll0, 1015 .num_parents = 2, 1016 .ops = &clk_rcg2_ops, 1017 }, 1018 }; 1019 1020 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = { 1021 .cmd_rcgr = 0x2e00c, 1022 .mnd_width = 8, 1023 .hid_width = 5, 1024 .parent_map = gcc_xo_gpll0_map, 1025 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 1026 .clkr.hw.init = &(struct clk_init_data){ 1027 .name = "blsp2_qup5_spi_apps_clk_src", 1028 .parent_names = gcc_xo_gpll0, 1029 .num_parents = 2, 1030 .ops = &clk_rcg2_ops, 1031 }, 1032 }; 1033 1034 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = { 1035 .cmd_rcgr = 0x2e020, 1036 .hid_width = 5, 1037 .parent_map = gcc_xo_gpll0_map, 1038 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 1039 .clkr.hw.init = &(struct clk_init_data){ 1040 .name = "blsp2_qup5_i2c_apps_clk_src", 1041 .parent_names = gcc_xo_gpll0, 1042 .num_parents = 2, 1043 .ops = &clk_rcg2_ops, 1044 }, 1045 }; 1046 1047 static struct clk_rcg2 blsp2_uart5_apps_clk_src = { 1048 .cmd_rcgr = 0x2f00c, 1049 .mnd_width = 16, 1050 .hid_width = 5, 1051 .parent_map = gcc_xo_gpll0_map, 1052 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 1053 .clkr.hw.init = &(struct clk_init_data){ 1054 .name = "blsp2_uart5_apps_clk_src", 1055 .parent_names = gcc_xo_gpll0, 1056 .num_parents = 2, 1057 .ops = &clk_rcg2_ops, 1058 }, 1059 }; 1060 1061 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = { 1062 .cmd_rcgr = 0x3000c, 1063 .mnd_width = 8, 1064 .hid_width = 5, 1065 .parent_map = gcc_xo_gpll0_map, 1066 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 1067 .clkr.hw.init = &(struct clk_init_data){ 1068 .name = "blsp2_qup6_spi_apps_clk_src", 1069 .parent_names = gcc_xo_gpll0, 1070 .num_parents = 2, 1071 .ops = &clk_rcg2_ops, 1072 }, 1073 }; 1074 1075 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = { 1076 .cmd_rcgr = 0x30020, 1077 .hid_width = 5, 1078 .parent_map = gcc_xo_gpll0_map, 1079 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 1080 .clkr.hw.init = &(struct clk_init_data){ 1081 .name = "blsp2_qup6_i2c_apps_clk_src", 1082 .parent_names = gcc_xo_gpll0, 1083 .num_parents = 2, 1084 .ops = &clk_rcg2_ops, 1085 }, 1086 }; 1087 1088 static struct clk_rcg2 blsp2_uart6_apps_clk_src = { 1089 .cmd_rcgr = 0x3100c, 1090 .mnd_width = 16, 1091 .hid_width = 5, 1092 .parent_map = gcc_xo_gpll0_map, 1093 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 1094 .clkr.hw.init = &(struct clk_init_data){ 1095 .name = "blsp2_uart6_apps_clk_src", 1096 .parent_names = gcc_xo_gpll0, 1097 .num_parents = 2, 1098 .ops = &clk_rcg2_ops, 1099 }, 1100 }; 1101 1102 static const struct freq_tbl ftbl_pdm2_clk_src[] = { 1103 F(60000000, P_GPLL0, 10, 0, 0), 1104 { } 1105 }; 1106 1107 static struct clk_rcg2 pdm2_clk_src = { 1108 .cmd_rcgr = 0x33010, 1109 .hid_width = 5, 1110 .parent_map = gcc_xo_gpll0_map, 1111 .freq_tbl = ftbl_pdm2_clk_src, 1112 .clkr.hw.init = &(struct clk_init_data){ 1113 .name = "pdm2_clk_src", 1114 .parent_names = gcc_xo_gpll0, 1115 .num_parents = 2, 1116 .ops = &clk_rcg2_ops, 1117 }, 1118 }; 1119 1120 static const struct freq_tbl ftbl_tsif_ref_clk_src[] = { 1121 F(105495, P_XO, 1, 1, 182), 1122 { } 1123 }; 1124 1125 static struct clk_rcg2 tsif_ref_clk_src = { 1126 .cmd_rcgr = 0x36010, 1127 .mnd_width = 8, 1128 .hid_width = 5, 1129 .parent_map = gcc_xo_gpll0_aud_ref_clk_map, 1130 .freq_tbl = ftbl_tsif_ref_clk_src, 1131 .clkr.hw.init = &(struct clk_init_data){ 1132 .name = "tsif_ref_clk_src", 1133 .parent_names = gcc_xo_gpll0_aud_ref_clk, 1134 .num_parents = 3, 1135 .ops = &clk_rcg2_ops, 1136 }, 1137 }; 1138 1139 static struct clk_rcg2 gcc_sleep_clk_src = { 1140 .cmd_rcgr = 0x43014, 1141 .hid_width = 5, 1142 .parent_map = gcc_sleep_clk_map, 1143 .clkr.hw.init = &(struct clk_init_data){ 1144 .name = "gcc_sleep_clk_src", 1145 .parent_names = gcc_sleep_clk, 1146 .num_parents = 1, 1147 .ops = &clk_rcg2_ops, 1148 }, 1149 }; 1150 1151 static struct clk_rcg2 hmss_rbcpr_clk_src = { 1152 .cmd_rcgr = 0x48040, 1153 .hid_width = 5, 1154 .parent_map = gcc_xo_gpll0_map, 1155 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 1156 .clkr.hw.init = &(struct clk_init_data){ 1157 .name = "hmss_rbcpr_clk_src", 1158 .parent_names = gcc_xo_gpll0, 1159 .num_parents = 2, 1160 .ops = &clk_rcg2_ops, 1161 }, 1162 }; 1163 1164 static struct clk_rcg2 hmss_gpll0_clk_src = { 1165 .cmd_rcgr = 0x48058, 1166 .hid_width = 5, 1167 .parent_map = gcc_xo_gpll0_map, 1168 .clkr.hw.init = &(struct clk_init_data){ 1169 .name = "hmss_gpll0_clk_src", 1170 .parent_names = gcc_xo_gpll0, 1171 .num_parents = 2, 1172 .ops = &clk_rcg2_ops, 1173 }, 1174 }; 1175 1176 static const struct freq_tbl ftbl_gp1_clk_src[] = { 1177 F(19200000, P_XO, 1, 0, 0), 1178 F(100000000, P_GPLL0, 6, 0, 0), 1179 F(200000000, P_GPLL0, 3, 0, 0), 1180 { } 1181 }; 1182 1183 static struct clk_rcg2 gp1_clk_src = { 1184 .cmd_rcgr = 0x64004, 1185 .mnd_width = 8, 1186 .hid_width = 5, 1187 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1188 .freq_tbl = ftbl_gp1_clk_src, 1189 .clkr.hw.init = &(struct clk_init_data){ 1190 .name = "gp1_clk_src", 1191 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1192 .num_parents = 4, 1193 .ops = &clk_rcg2_ops, 1194 }, 1195 }; 1196 1197 static struct clk_rcg2 gp2_clk_src = { 1198 .cmd_rcgr = 0x65004, 1199 .mnd_width = 8, 1200 .hid_width = 5, 1201 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1202 .freq_tbl = ftbl_gp1_clk_src, 1203 .clkr.hw.init = &(struct clk_init_data){ 1204 .name = "gp2_clk_src", 1205 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1206 .num_parents = 4, 1207 .ops = &clk_rcg2_ops, 1208 }, 1209 }; 1210 1211 static struct clk_rcg2 gp3_clk_src = { 1212 .cmd_rcgr = 0x66004, 1213 .mnd_width = 8, 1214 .hid_width = 5, 1215 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1216 .freq_tbl = ftbl_gp1_clk_src, 1217 .clkr.hw.init = &(struct clk_init_data){ 1218 .name = "gp3_clk_src", 1219 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1220 .num_parents = 4, 1221 .ops = &clk_rcg2_ops, 1222 }, 1223 }; 1224 1225 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = { 1226 F(1010526, P_XO, 1, 1, 19), 1227 { } 1228 }; 1229 1230 static struct clk_rcg2 pcie_aux_clk_src = { 1231 .cmd_rcgr = 0x6c000, 1232 .mnd_width = 16, 1233 .hid_width = 5, 1234 .parent_map = gcc_xo_sleep_clk_map, 1235 .freq_tbl = ftbl_pcie_aux_clk_src, 1236 .clkr.hw.init = &(struct clk_init_data){ 1237 .name = "pcie_aux_clk_src", 1238 .parent_names = gcc_xo_sleep_clk, 1239 .num_parents = 2, 1240 .ops = &clk_rcg2_ops, 1241 }, 1242 }; 1243 1244 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = { 1245 F(100000000, P_GPLL0, 6, 0, 0), 1246 F(200000000, P_GPLL0, 3, 0, 0), 1247 F(240000000, P_GPLL0, 2.5, 0, 0), 1248 { } 1249 }; 1250 1251 static struct clk_rcg2 ufs_axi_clk_src = { 1252 .cmd_rcgr = 0x75024, 1253 .mnd_width = 8, 1254 .hid_width = 5, 1255 .parent_map = gcc_xo_gpll0_map, 1256 .freq_tbl = ftbl_ufs_axi_clk_src, 1257 .clkr.hw.init = &(struct clk_init_data){ 1258 .name = "ufs_axi_clk_src", 1259 .parent_names = gcc_xo_gpll0, 1260 .num_parents = 2, 1261 .ops = &clk_rcg2_ops, 1262 }, 1263 }; 1264 1265 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = { 1266 F(19200000, P_XO, 1, 0, 0), 1267 F(150000000, P_GPLL0, 4, 0, 0), 1268 F(300000000, P_GPLL0, 2, 0, 0), 1269 { } 1270 }; 1271 1272 static struct clk_rcg2 ufs_ice_core_clk_src = { 1273 .cmd_rcgr = 0x76014, 1274 .hid_width = 5, 1275 .parent_map = gcc_xo_gpll0_map, 1276 .freq_tbl = ftbl_ufs_ice_core_clk_src, 1277 .clkr.hw.init = &(struct clk_init_data){ 1278 .name = "ufs_ice_core_clk_src", 1279 .parent_names = gcc_xo_gpll0, 1280 .num_parents = 2, 1281 .ops = &clk_rcg2_ops, 1282 }, 1283 }; 1284 1285 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = { 1286 F(75000000, P_GPLL0, 8, 0, 0), 1287 F(150000000, P_GPLL0, 4, 0, 0), 1288 F(256000000, P_GPLL4, 1.5, 0, 0), 1289 F(300000000, P_GPLL0, 2, 0, 0), 1290 { } 1291 }; 1292 1293 static struct clk_rcg2 qspi_ser_clk_src = { 1294 .cmd_rcgr = 0x8b00c, 1295 .hid_width = 5, 1296 .parent_map = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map, 1297 .freq_tbl = ftbl_qspi_ser_clk_src, 1298 .clkr.hw.init = &(struct clk_init_data){ 1299 .name = "qspi_ser_clk_src", 1300 .parent_names = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div, 1301 .num_parents = 6, 1302 .ops = &clk_rcg2_ops, 1303 }, 1304 }; 1305 1306 static struct clk_branch gcc_sys_noc_usb3_axi_clk = { 1307 .halt_reg = 0x0f03c, 1308 .clkr = { 1309 .enable_reg = 0x0f03c, 1310 .enable_mask = BIT(0), 1311 .hw.init = &(struct clk_init_data){ 1312 .name = "gcc_sys_noc_usb3_axi_clk", 1313 .parent_names = (const char *[]){ "usb30_master_clk_src" }, 1314 .num_parents = 1, 1315 .flags = CLK_SET_RATE_PARENT, 1316 .ops = &clk_branch2_ops, 1317 }, 1318 }, 1319 }; 1320 1321 static struct clk_branch gcc_sys_noc_ufs_axi_clk = { 1322 .halt_reg = 0x75038, 1323 .clkr = { 1324 .enable_reg = 0x75038, 1325 .enable_mask = BIT(0), 1326 .hw.init = &(struct clk_init_data){ 1327 .name = "gcc_sys_noc_ufs_axi_clk", 1328 .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 1329 .num_parents = 1, 1330 .flags = CLK_SET_RATE_PARENT, 1331 .ops = &clk_branch2_ops, 1332 }, 1333 }, 1334 }; 1335 1336 static struct clk_branch gcc_periph_noc_usb20_ahb_clk = { 1337 .halt_reg = 0x6010, 1338 .clkr = { 1339 .enable_reg = 0x6010, 1340 .enable_mask = BIT(0), 1341 .hw.init = &(struct clk_init_data){ 1342 .name = "gcc_periph_noc_usb20_ahb_clk", 1343 .parent_names = (const char *[]){ "usb20_master_clk_src" }, 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_mmss_noc_cfg_ahb_clk = { 1352 .halt_reg = 0x9008, 1353 .clkr = { 1354 .enable_reg = 0x9008, 1355 .enable_mask = BIT(0), 1356 .hw.init = &(struct clk_init_data){ 1357 .name = "gcc_mmss_noc_cfg_ahb_clk", 1358 .parent_names = (const char *[]){ "config_noc_clk_src" }, 1359 .num_parents = 1, 1360 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 1361 .ops = &clk_branch2_ops, 1362 }, 1363 }, 1364 }; 1365 1366 static struct clk_branch gcc_mmss_bimc_gfx_clk = { 1367 .halt_reg = 0x9010, 1368 .clkr = { 1369 .enable_reg = 0x9010, 1370 .enable_mask = BIT(0), 1371 .hw.init = &(struct clk_init_data){ 1372 .name = "gcc_mmss_bimc_gfx_clk", 1373 .flags = CLK_SET_RATE_PARENT, 1374 .ops = &clk_branch2_ops, 1375 }, 1376 }, 1377 }; 1378 1379 static struct clk_branch gcc_usb30_master_clk = { 1380 .halt_reg = 0x0f008, 1381 .clkr = { 1382 .enable_reg = 0x0f008, 1383 .enable_mask = BIT(0), 1384 .hw.init = &(struct clk_init_data){ 1385 .name = "gcc_usb30_master_clk", 1386 .parent_names = (const char *[]){ "usb30_master_clk_src" }, 1387 .num_parents = 1, 1388 .flags = CLK_SET_RATE_PARENT, 1389 .ops = &clk_branch2_ops, 1390 }, 1391 }, 1392 }; 1393 1394 static struct clk_branch gcc_usb30_sleep_clk = { 1395 .halt_reg = 0x0f00c, 1396 .clkr = { 1397 .enable_reg = 0x0f00c, 1398 .enable_mask = BIT(0), 1399 .hw.init = &(struct clk_init_data){ 1400 .name = "gcc_usb30_sleep_clk", 1401 .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1402 .num_parents = 1, 1403 .flags = CLK_SET_RATE_PARENT, 1404 .ops = &clk_branch2_ops, 1405 }, 1406 }, 1407 }; 1408 1409 static struct clk_branch gcc_usb30_mock_utmi_clk = { 1410 .halt_reg = 0x0f010, 1411 .clkr = { 1412 .enable_reg = 0x0f010, 1413 .enable_mask = BIT(0), 1414 .hw.init = &(struct clk_init_data){ 1415 .name = "gcc_usb30_mock_utmi_clk", 1416 .parent_names = (const char *[]){ "usb30_mock_utmi_clk_src" }, 1417 .num_parents = 1, 1418 .flags = CLK_SET_RATE_PARENT, 1419 .ops = &clk_branch2_ops, 1420 }, 1421 }, 1422 }; 1423 1424 static struct clk_branch gcc_usb3_phy_aux_clk = { 1425 .halt_reg = 0x50000, 1426 .clkr = { 1427 .enable_reg = 0x50000, 1428 .enable_mask = BIT(0), 1429 .hw.init = &(struct clk_init_data){ 1430 .name = "gcc_usb3_phy_aux_clk", 1431 .parent_names = (const char *[]){ "usb3_phy_aux_clk_src" }, 1432 .num_parents = 1, 1433 .flags = CLK_SET_RATE_PARENT, 1434 .ops = &clk_branch2_ops, 1435 }, 1436 }, 1437 }; 1438 1439 static struct clk_branch gcc_usb3_phy_pipe_clk = { 1440 .halt_reg = 0x50004, 1441 .halt_check = BRANCH_HALT_SKIP, 1442 .clkr = { 1443 .enable_reg = 0x50004, 1444 .enable_mask = BIT(0), 1445 .hw.init = &(struct clk_init_data){ 1446 .name = "gcc_usb3_phy_pipe_clk", 1447 .parent_names = (const char *[]){ "usb3_phy_pipe_clk_src" }, 1448 .num_parents = 1, 1449 .flags = CLK_SET_RATE_PARENT, 1450 .ops = &clk_branch2_ops, 1451 }, 1452 }, 1453 }; 1454 1455 static struct clk_branch gcc_usb20_master_clk = { 1456 .halt_reg = 0x12004, 1457 .clkr = { 1458 .enable_reg = 0x12004, 1459 .enable_mask = BIT(0), 1460 .hw.init = &(struct clk_init_data){ 1461 .name = "gcc_usb20_master_clk", 1462 .parent_names = (const char *[]){ "usb20_master_clk_src" }, 1463 .num_parents = 1, 1464 .flags = CLK_SET_RATE_PARENT, 1465 .ops = &clk_branch2_ops, 1466 }, 1467 }, 1468 }; 1469 1470 static struct clk_branch gcc_usb20_sleep_clk = { 1471 .halt_reg = 0x12008, 1472 .clkr = { 1473 .enable_reg = 0x12008, 1474 .enable_mask = BIT(0), 1475 .hw.init = &(struct clk_init_data){ 1476 .name = "gcc_usb20_sleep_clk", 1477 .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1478 .num_parents = 1, 1479 .flags = CLK_SET_RATE_PARENT, 1480 .ops = &clk_branch2_ops, 1481 }, 1482 }, 1483 }; 1484 1485 static struct clk_branch gcc_usb20_mock_utmi_clk = { 1486 .halt_reg = 0x1200c, 1487 .clkr = { 1488 .enable_reg = 0x1200c, 1489 .enable_mask = BIT(0), 1490 .hw.init = &(struct clk_init_data){ 1491 .name = "gcc_usb20_mock_utmi_clk", 1492 .parent_names = (const char *[]){ "usb20_mock_utmi_clk_src" }, 1493 .num_parents = 1, 1494 .flags = CLK_SET_RATE_PARENT, 1495 .ops = &clk_branch2_ops, 1496 }, 1497 }, 1498 }; 1499 1500 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = { 1501 .halt_reg = 0x6a004, 1502 .clkr = { 1503 .enable_reg = 0x6a004, 1504 .enable_mask = BIT(0), 1505 .hw.init = &(struct clk_init_data){ 1506 .name = "gcc_usb_phy_cfg_ahb2phy_clk", 1507 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1508 .num_parents = 1, 1509 .flags = CLK_SET_RATE_PARENT, 1510 .ops = &clk_branch2_ops, 1511 }, 1512 }, 1513 }; 1514 1515 static struct clk_branch gcc_sdcc1_apps_clk = { 1516 .halt_reg = 0x13004, 1517 .clkr = { 1518 .enable_reg = 0x13004, 1519 .enable_mask = BIT(0), 1520 .hw.init = &(struct clk_init_data){ 1521 .name = "gcc_sdcc1_apps_clk", 1522 .parent_names = (const char *[]){ "sdcc1_apps_clk_src" }, 1523 .num_parents = 1, 1524 .flags = CLK_SET_RATE_PARENT, 1525 .ops = &clk_branch2_ops, 1526 }, 1527 }, 1528 }; 1529 1530 static struct clk_branch gcc_sdcc1_ahb_clk = { 1531 .halt_reg = 0x13008, 1532 .clkr = { 1533 .enable_reg = 0x13008, 1534 .enable_mask = BIT(0), 1535 .hw.init = &(struct clk_init_data){ 1536 .name = "gcc_sdcc1_ahb_clk", 1537 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1538 .num_parents = 1, 1539 .flags = CLK_SET_RATE_PARENT, 1540 .ops = &clk_branch2_ops, 1541 }, 1542 }, 1543 }; 1544 1545 static struct clk_branch gcc_sdcc1_ice_core_clk = { 1546 .halt_reg = 0x13038, 1547 .clkr = { 1548 .enable_reg = 0x13038, 1549 .enable_mask = BIT(0), 1550 .hw.init = &(struct clk_init_data){ 1551 .name = "gcc_sdcc1_ice_core_clk", 1552 .parent_names = (const char *[]){ "sdcc1_ice_core_clk_src" }, 1553 .num_parents = 1, 1554 .flags = CLK_SET_RATE_PARENT, 1555 .ops = &clk_branch2_ops, 1556 }, 1557 }, 1558 }; 1559 1560 static struct clk_branch gcc_sdcc2_apps_clk = { 1561 .halt_reg = 0x14004, 1562 .clkr = { 1563 .enable_reg = 0x14004, 1564 .enable_mask = BIT(0), 1565 .hw.init = &(struct clk_init_data){ 1566 .name = "gcc_sdcc2_apps_clk", 1567 .parent_names = (const char *[]){ "sdcc2_apps_clk_src" }, 1568 .num_parents = 1, 1569 .flags = CLK_SET_RATE_PARENT, 1570 .ops = &clk_branch2_ops, 1571 }, 1572 }, 1573 }; 1574 1575 static struct clk_branch gcc_sdcc2_ahb_clk = { 1576 .halt_reg = 0x14008, 1577 .clkr = { 1578 .enable_reg = 0x14008, 1579 .enable_mask = BIT(0), 1580 .hw.init = &(struct clk_init_data){ 1581 .name = "gcc_sdcc2_ahb_clk", 1582 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1583 .num_parents = 1, 1584 .flags = CLK_SET_RATE_PARENT, 1585 .ops = &clk_branch2_ops, 1586 }, 1587 }, 1588 }; 1589 1590 static struct clk_branch gcc_sdcc3_apps_clk = { 1591 .halt_reg = 0x15004, 1592 .clkr = { 1593 .enable_reg = 0x15004, 1594 .enable_mask = BIT(0), 1595 .hw.init = &(struct clk_init_data){ 1596 .name = "gcc_sdcc3_apps_clk", 1597 .parent_names = (const char *[]){ "sdcc3_apps_clk_src" }, 1598 .num_parents = 1, 1599 .flags = CLK_SET_RATE_PARENT, 1600 .ops = &clk_branch2_ops, 1601 }, 1602 }, 1603 }; 1604 1605 static struct clk_branch gcc_sdcc3_ahb_clk = { 1606 .halt_reg = 0x15008, 1607 .clkr = { 1608 .enable_reg = 0x15008, 1609 .enable_mask = BIT(0), 1610 .hw.init = &(struct clk_init_data){ 1611 .name = "gcc_sdcc3_ahb_clk", 1612 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1613 .num_parents = 1, 1614 .flags = CLK_SET_RATE_PARENT, 1615 .ops = &clk_branch2_ops, 1616 }, 1617 }, 1618 }; 1619 1620 static struct clk_branch gcc_sdcc4_apps_clk = { 1621 .halt_reg = 0x16004, 1622 .clkr = { 1623 .enable_reg = 0x16004, 1624 .enable_mask = BIT(0), 1625 .hw.init = &(struct clk_init_data){ 1626 .name = "gcc_sdcc4_apps_clk", 1627 .parent_names = (const char *[]){ "sdcc4_apps_clk_src" }, 1628 .num_parents = 1, 1629 .flags = CLK_SET_RATE_PARENT, 1630 .ops = &clk_branch2_ops, 1631 }, 1632 }, 1633 }; 1634 1635 static struct clk_branch gcc_sdcc4_ahb_clk = { 1636 .halt_reg = 0x16008, 1637 .clkr = { 1638 .enable_reg = 0x16008, 1639 .enable_mask = BIT(0), 1640 .hw.init = &(struct clk_init_data){ 1641 .name = "gcc_sdcc4_ahb_clk", 1642 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1643 .num_parents = 1, 1644 .flags = CLK_SET_RATE_PARENT, 1645 .ops = &clk_branch2_ops, 1646 }, 1647 }, 1648 }; 1649 1650 static struct clk_branch gcc_blsp1_ahb_clk = { 1651 .halt_reg = 0x17004, 1652 .halt_check = BRANCH_HALT_VOTED, 1653 .clkr = { 1654 .enable_reg = 0x52004, 1655 .enable_mask = BIT(17), 1656 .hw.init = &(struct clk_init_data){ 1657 .name = "gcc_blsp1_ahb_clk", 1658 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1659 .num_parents = 1, 1660 .flags = CLK_SET_RATE_PARENT, 1661 .ops = &clk_branch2_ops, 1662 }, 1663 }, 1664 }; 1665 1666 static struct clk_branch gcc_blsp1_sleep_clk = { 1667 .halt_reg = 0x17008, 1668 .halt_check = BRANCH_HALT_VOTED, 1669 .clkr = { 1670 .enable_reg = 0x52004, 1671 .enable_mask = BIT(16), 1672 .hw.init = &(struct clk_init_data){ 1673 .name = "gcc_blsp1_sleep_clk", 1674 .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1675 .num_parents = 1, 1676 .flags = CLK_SET_RATE_PARENT, 1677 .ops = &clk_branch2_ops, 1678 }, 1679 }, 1680 }; 1681 1682 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1683 .halt_reg = 0x19004, 1684 .clkr = { 1685 .enable_reg = 0x19004, 1686 .enable_mask = BIT(0), 1687 .hw.init = &(struct clk_init_data){ 1688 .name = "gcc_blsp1_qup1_spi_apps_clk", 1689 .parent_names = (const char *[]){ "blsp1_qup1_spi_apps_clk_src" }, 1690 .num_parents = 1, 1691 .flags = CLK_SET_RATE_PARENT, 1692 .ops = &clk_branch2_ops, 1693 }, 1694 }, 1695 }; 1696 1697 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1698 .halt_reg = 0x19008, 1699 .clkr = { 1700 .enable_reg = 0x19008, 1701 .enable_mask = BIT(0), 1702 .hw.init = &(struct clk_init_data){ 1703 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1704 .parent_names = (const char *[]){ "blsp1_qup1_i2c_apps_clk_src" }, 1705 .num_parents = 1, 1706 .flags = CLK_SET_RATE_PARENT, 1707 .ops = &clk_branch2_ops, 1708 }, 1709 }, 1710 }; 1711 1712 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1713 .halt_reg = 0x1a004, 1714 .clkr = { 1715 .enable_reg = 0x1a004, 1716 .enable_mask = BIT(0), 1717 .hw.init = &(struct clk_init_data){ 1718 .name = "gcc_blsp1_uart1_apps_clk", 1719 .parent_names = (const char *[]){ "blsp1_uart1_apps_clk_src" }, 1720 .num_parents = 1, 1721 .flags = CLK_SET_RATE_PARENT, 1722 .ops = &clk_branch2_ops, 1723 }, 1724 }, 1725 }; 1726 1727 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1728 .halt_reg = 0x1b004, 1729 .clkr = { 1730 .enable_reg = 0x1b004, 1731 .enable_mask = BIT(0), 1732 .hw.init = &(struct clk_init_data){ 1733 .name = "gcc_blsp1_qup2_spi_apps_clk", 1734 .parent_names = (const char *[]){ "blsp1_qup2_spi_apps_clk_src" }, 1735 .num_parents = 1, 1736 .flags = CLK_SET_RATE_PARENT, 1737 .ops = &clk_branch2_ops, 1738 }, 1739 }, 1740 }; 1741 1742 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1743 .halt_reg = 0x1b008, 1744 .clkr = { 1745 .enable_reg = 0x1b008, 1746 .enable_mask = BIT(0), 1747 .hw.init = &(struct clk_init_data){ 1748 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1749 .parent_names = (const char *[]){ "blsp1_qup2_i2c_apps_clk_src" }, 1750 .num_parents = 1, 1751 .flags = CLK_SET_RATE_PARENT, 1752 .ops = &clk_branch2_ops, 1753 }, 1754 }, 1755 }; 1756 1757 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1758 .halt_reg = 0x1c004, 1759 .clkr = { 1760 .enable_reg = 0x1c004, 1761 .enable_mask = BIT(0), 1762 .hw.init = &(struct clk_init_data){ 1763 .name = "gcc_blsp1_uart2_apps_clk", 1764 .parent_names = (const char *[]){ "blsp1_uart2_apps_clk_src" }, 1765 .num_parents = 1, 1766 .flags = CLK_SET_RATE_PARENT, 1767 .ops = &clk_branch2_ops, 1768 }, 1769 }, 1770 }; 1771 1772 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1773 .halt_reg = 0x1d004, 1774 .clkr = { 1775 .enable_reg = 0x1d004, 1776 .enable_mask = BIT(0), 1777 .hw.init = &(struct clk_init_data){ 1778 .name = "gcc_blsp1_qup3_spi_apps_clk", 1779 .parent_names = (const char *[]){ "blsp1_qup3_spi_apps_clk_src" }, 1780 .num_parents = 1, 1781 .flags = CLK_SET_RATE_PARENT, 1782 .ops = &clk_branch2_ops, 1783 }, 1784 }, 1785 }; 1786 1787 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1788 .halt_reg = 0x1d008, 1789 .clkr = { 1790 .enable_reg = 0x1d008, 1791 .enable_mask = BIT(0), 1792 .hw.init = &(struct clk_init_data){ 1793 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1794 .parent_names = (const char *[]){ "blsp1_qup3_i2c_apps_clk_src" }, 1795 .num_parents = 1, 1796 .flags = CLK_SET_RATE_PARENT, 1797 .ops = &clk_branch2_ops, 1798 }, 1799 }, 1800 }; 1801 1802 static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1803 .halt_reg = 0x1e004, 1804 .clkr = { 1805 .enable_reg = 0x1e004, 1806 .enable_mask = BIT(0), 1807 .hw.init = &(struct clk_init_data){ 1808 .name = "gcc_blsp1_uart3_apps_clk", 1809 .parent_names = (const char *[]){ "blsp1_uart3_apps_clk_src" }, 1810 .num_parents = 1, 1811 .flags = CLK_SET_RATE_PARENT, 1812 .ops = &clk_branch2_ops, 1813 }, 1814 }, 1815 }; 1816 1817 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1818 .halt_reg = 0x1f004, 1819 .clkr = { 1820 .enable_reg = 0x1f004, 1821 .enable_mask = BIT(0), 1822 .hw.init = &(struct clk_init_data){ 1823 .name = "gcc_blsp1_qup4_spi_apps_clk", 1824 .parent_names = (const char *[]){ "blsp1_qup4_spi_apps_clk_src" }, 1825 .num_parents = 1, 1826 .flags = CLK_SET_RATE_PARENT, 1827 .ops = &clk_branch2_ops, 1828 }, 1829 }, 1830 }; 1831 1832 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1833 .halt_reg = 0x1f008, 1834 .clkr = { 1835 .enable_reg = 0x1f008, 1836 .enable_mask = BIT(0), 1837 .hw.init = &(struct clk_init_data){ 1838 .name = "gcc_blsp1_qup4_i2c_apps_clk", 1839 .parent_names = (const char *[]){ "blsp1_qup4_i2c_apps_clk_src" }, 1840 .num_parents = 1, 1841 .flags = CLK_SET_RATE_PARENT, 1842 .ops = &clk_branch2_ops, 1843 }, 1844 }, 1845 }; 1846 1847 static struct clk_branch gcc_blsp1_uart4_apps_clk = { 1848 .halt_reg = 0x20004, 1849 .clkr = { 1850 .enable_reg = 0x20004, 1851 .enable_mask = BIT(0), 1852 .hw.init = &(struct clk_init_data){ 1853 .name = "gcc_blsp1_uart4_apps_clk", 1854 .parent_names = (const char *[]){ "blsp1_uart4_apps_clk_src" }, 1855 .num_parents = 1, 1856 .flags = CLK_SET_RATE_PARENT, 1857 .ops = &clk_branch2_ops, 1858 }, 1859 }, 1860 }; 1861 1862 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 1863 .halt_reg = 0x21004, 1864 .clkr = { 1865 .enable_reg = 0x21004, 1866 .enable_mask = BIT(0), 1867 .hw.init = &(struct clk_init_data){ 1868 .name = "gcc_blsp1_qup5_spi_apps_clk", 1869 .parent_names = (const char *[]){ "blsp1_qup5_spi_apps_clk_src" }, 1870 .num_parents = 1, 1871 .flags = CLK_SET_RATE_PARENT, 1872 .ops = &clk_branch2_ops, 1873 }, 1874 }, 1875 }; 1876 1877 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 1878 .halt_reg = 0x21008, 1879 .clkr = { 1880 .enable_reg = 0x21008, 1881 .enable_mask = BIT(0), 1882 .hw.init = &(struct clk_init_data){ 1883 .name = "gcc_blsp1_qup5_i2c_apps_clk", 1884 .parent_names = (const char *[]){ "blsp1_qup5_i2c_apps_clk_src" }, 1885 .num_parents = 1, 1886 .flags = CLK_SET_RATE_PARENT, 1887 .ops = &clk_branch2_ops, 1888 }, 1889 }, 1890 }; 1891 1892 static struct clk_branch gcc_blsp1_uart5_apps_clk = { 1893 .halt_reg = 0x22004, 1894 .clkr = { 1895 .enable_reg = 0x22004, 1896 .enable_mask = BIT(0), 1897 .hw.init = &(struct clk_init_data){ 1898 .name = "gcc_blsp1_uart5_apps_clk", 1899 .parent_names = (const char *[]){ "blsp1_uart5_apps_clk_src" }, 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_blsp1_qup6_spi_apps_clk = { 1908 .halt_reg = 0x23004, 1909 .clkr = { 1910 .enable_reg = 0x23004, 1911 .enable_mask = BIT(0), 1912 .hw.init = &(struct clk_init_data){ 1913 .name = "gcc_blsp1_qup6_spi_apps_clk", 1914 .parent_names = (const char *[]){ "blsp1_qup6_spi_apps_clk_src" }, 1915 .num_parents = 1, 1916 .flags = CLK_SET_RATE_PARENT, 1917 .ops = &clk_branch2_ops, 1918 }, 1919 }, 1920 }; 1921 1922 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { 1923 .halt_reg = 0x23008, 1924 .clkr = { 1925 .enable_reg = 0x23008, 1926 .enable_mask = BIT(0), 1927 .hw.init = &(struct clk_init_data){ 1928 .name = "gcc_blsp1_qup6_i2c_apps_clk", 1929 .parent_names = (const char *[]){ "blsp1_qup6_i2c_apps_clk_src" }, 1930 .num_parents = 1, 1931 .flags = CLK_SET_RATE_PARENT, 1932 .ops = &clk_branch2_ops, 1933 }, 1934 }, 1935 }; 1936 1937 static struct clk_branch gcc_blsp1_uart6_apps_clk = { 1938 .halt_reg = 0x24004, 1939 .clkr = { 1940 .enable_reg = 0x24004, 1941 .enable_mask = BIT(0), 1942 .hw.init = &(struct clk_init_data){ 1943 .name = "gcc_blsp1_uart6_apps_clk", 1944 .parent_names = (const char *[]){ "blsp1_uart6_apps_clk_src" }, 1945 .num_parents = 1, 1946 .flags = CLK_SET_RATE_PARENT, 1947 .ops = &clk_branch2_ops, 1948 }, 1949 }, 1950 }; 1951 1952 static struct clk_branch gcc_blsp2_ahb_clk = { 1953 .halt_reg = 0x25004, 1954 .halt_check = BRANCH_HALT_VOTED, 1955 .clkr = { 1956 .enable_reg = 0x52004, 1957 .enable_mask = BIT(15), 1958 .hw.init = &(struct clk_init_data){ 1959 .name = "gcc_blsp2_ahb_clk", 1960 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 1961 .num_parents = 1, 1962 .flags = CLK_SET_RATE_PARENT, 1963 .ops = &clk_branch2_ops, 1964 }, 1965 }, 1966 }; 1967 1968 static struct clk_branch gcc_blsp2_sleep_clk = { 1969 .halt_reg = 0x25008, 1970 .halt_check = BRANCH_HALT_VOTED, 1971 .clkr = { 1972 .enable_reg = 0x52004, 1973 .enable_mask = BIT(14), 1974 .hw.init = &(struct clk_init_data){ 1975 .name = "gcc_blsp2_sleep_clk", 1976 .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 1977 .num_parents = 1, 1978 .flags = CLK_SET_RATE_PARENT, 1979 .ops = &clk_branch2_ops, 1980 }, 1981 }, 1982 }; 1983 1984 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 1985 .halt_reg = 0x26004, 1986 .clkr = { 1987 .enable_reg = 0x26004, 1988 .enable_mask = BIT(0), 1989 .hw.init = &(struct clk_init_data){ 1990 .name = "gcc_blsp2_qup1_spi_apps_clk", 1991 .parent_names = (const char *[]){ "blsp2_qup1_spi_apps_clk_src" }, 1992 .num_parents = 1, 1993 .flags = CLK_SET_RATE_PARENT, 1994 .ops = &clk_branch2_ops, 1995 }, 1996 }, 1997 }; 1998 1999 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 2000 .halt_reg = 0x26008, 2001 .clkr = { 2002 .enable_reg = 0x26008, 2003 .enable_mask = BIT(0), 2004 .hw.init = &(struct clk_init_data){ 2005 .name = "gcc_blsp2_qup1_i2c_apps_clk", 2006 .parent_names = (const char *[]){ "blsp2_qup1_i2c_apps_clk_src" }, 2007 .num_parents = 1, 2008 .flags = CLK_SET_RATE_PARENT, 2009 .ops = &clk_branch2_ops, 2010 }, 2011 }, 2012 }; 2013 2014 static struct clk_branch gcc_blsp2_uart1_apps_clk = { 2015 .halt_reg = 0x27004, 2016 .clkr = { 2017 .enable_reg = 0x27004, 2018 .enable_mask = BIT(0), 2019 .hw.init = &(struct clk_init_data){ 2020 .name = "gcc_blsp2_uart1_apps_clk", 2021 .parent_names = (const char *[]){ "blsp2_uart1_apps_clk_src" }, 2022 .num_parents = 1, 2023 .flags = CLK_SET_RATE_PARENT, 2024 .ops = &clk_branch2_ops, 2025 }, 2026 }, 2027 }; 2028 2029 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 2030 .halt_reg = 0x28004, 2031 .clkr = { 2032 .enable_reg = 0x28004, 2033 .enable_mask = BIT(0), 2034 .hw.init = &(struct clk_init_data){ 2035 .name = "gcc_blsp2_qup2_spi_apps_clk", 2036 .parent_names = (const char *[]){ "blsp2_qup2_spi_apps_clk_src" }, 2037 .num_parents = 1, 2038 .flags = CLK_SET_RATE_PARENT, 2039 .ops = &clk_branch2_ops, 2040 }, 2041 }, 2042 }; 2043 2044 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 2045 .halt_reg = 0x28008, 2046 .clkr = { 2047 .enable_reg = 0x28008, 2048 .enable_mask = BIT(0), 2049 .hw.init = &(struct clk_init_data){ 2050 .name = "gcc_blsp2_qup2_i2c_apps_clk", 2051 .parent_names = (const char *[]){ "blsp2_qup2_i2c_apps_clk_src" }, 2052 .num_parents = 1, 2053 .flags = CLK_SET_RATE_PARENT, 2054 .ops = &clk_branch2_ops, 2055 }, 2056 }, 2057 }; 2058 2059 static struct clk_branch gcc_blsp2_uart2_apps_clk = { 2060 .halt_reg = 0x29004, 2061 .clkr = { 2062 .enable_reg = 0x29004, 2063 .enable_mask = BIT(0), 2064 .hw.init = &(struct clk_init_data){ 2065 .name = "gcc_blsp2_uart2_apps_clk", 2066 .parent_names = (const char *[]){ "blsp2_uart2_apps_clk_src" }, 2067 .num_parents = 1, 2068 .flags = CLK_SET_RATE_PARENT, 2069 .ops = &clk_branch2_ops, 2070 }, 2071 }, 2072 }; 2073 2074 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 2075 .halt_reg = 0x2a004, 2076 .clkr = { 2077 .enable_reg = 0x2a004, 2078 .enable_mask = BIT(0), 2079 .hw.init = &(struct clk_init_data){ 2080 .name = "gcc_blsp2_qup3_spi_apps_clk", 2081 .parent_names = (const char *[]){ "blsp2_qup3_spi_apps_clk_src" }, 2082 .num_parents = 1, 2083 .flags = CLK_SET_RATE_PARENT, 2084 .ops = &clk_branch2_ops, 2085 }, 2086 }, 2087 }; 2088 2089 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 2090 .halt_reg = 0x2a008, 2091 .clkr = { 2092 .enable_reg = 0x2a008, 2093 .enable_mask = BIT(0), 2094 .hw.init = &(struct clk_init_data){ 2095 .name = "gcc_blsp2_qup3_i2c_apps_clk", 2096 .parent_names = (const char *[]){ "blsp2_qup3_i2c_apps_clk_src" }, 2097 .num_parents = 1, 2098 .flags = CLK_SET_RATE_PARENT, 2099 .ops = &clk_branch2_ops, 2100 }, 2101 }, 2102 }; 2103 2104 static struct clk_branch gcc_blsp2_uart3_apps_clk = { 2105 .halt_reg = 0x2b004, 2106 .clkr = { 2107 .enable_reg = 0x2b004, 2108 .enable_mask = BIT(0), 2109 .hw.init = &(struct clk_init_data){ 2110 .name = "gcc_blsp2_uart3_apps_clk", 2111 .parent_names = (const char *[]){ "blsp2_uart3_apps_clk_src" }, 2112 .num_parents = 1, 2113 .flags = CLK_SET_RATE_PARENT, 2114 .ops = &clk_branch2_ops, 2115 }, 2116 }, 2117 }; 2118 2119 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 2120 .halt_reg = 0x2c004, 2121 .clkr = { 2122 .enable_reg = 0x2c004, 2123 .enable_mask = BIT(0), 2124 .hw.init = &(struct clk_init_data){ 2125 .name = "gcc_blsp2_qup4_spi_apps_clk", 2126 .parent_names = (const char *[]){ "blsp2_qup4_spi_apps_clk_src" }, 2127 .num_parents = 1, 2128 .flags = CLK_SET_RATE_PARENT, 2129 .ops = &clk_branch2_ops, 2130 }, 2131 }, 2132 }; 2133 2134 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 2135 .halt_reg = 0x2c008, 2136 .clkr = { 2137 .enable_reg = 0x2c008, 2138 .enable_mask = BIT(0), 2139 .hw.init = &(struct clk_init_data){ 2140 .name = "gcc_blsp2_qup4_i2c_apps_clk", 2141 .parent_names = (const char *[]){ "blsp2_qup4_i2c_apps_clk_src" }, 2142 .num_parents = 1, 2143 .flags = CLK_SET_RATE_PARENT, 2144 .ops = &clk_branch2_ops, 2145 }, 2146 }, 2147 }; 2148 2149 static struct clk_branch gcc_blsp2_uart4_apps_clk = { 2150 .halt_reg = 0x2d004, 2151 .clkr = { 2152 .enable_reg = 0x2d004, 2153 .enable_mask = BIT(0), 2154 .hw.init = &(struct clk_init_data){ 2155 .name = "gcc_blsp2_uart4_apps_clk", 2156 .parent_names = (const char *[]){ "blsp2_uart4_apps_clk_src" }, 2157 .num_parents = 1, 2158 .flags = CLK_SET_RATE_PARENT, 2159 .ops = &clk_branch2_ops, 2160 }, 2161 }, 2162 }; 2163 2164 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = { 2165 .halt_reg = 0x2e004, 2166 .clkr = { 2167 .enable_reg = 0x2e004, 2168 .enable_mask = BIT(0), 2169 .hw.init = &(struct clk_init_data){ 2170 .name = "gcc_blsp2_qup5_spi_apps_clk", 2171 .parent_names = (const char *[]){ "blsp2_qup5_spi_apps_clk_src" }, 2172 .num_parents = 1, 2173 .flags = CLK_SET_RATE_PARENT, 2174 .ops = &clk_branch2_ops, 2175 }, 2176 }, 2177 }; 2178 2179 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = { 2180 .halt_reg = 0x2e008, 2181 .clkr = { 2182 .enable_reg = 0x2e008, 2183 .enable_mask = BIT(0), 2184 .hw.init = &(struct clk_init_data){ 2185 .name = "gcc_blsp2_qup5_i2c_apps_clk", 2186 .parent_names = (const char *[]){ "blsp2_qup5_i2c_apps_clk_src" }, 2187 .num_parents = 1, 2188 .flags = CLK_SET_RATE_PARENT, 2189 .ops = &clk_branch2_ops, 2190 }, 2191 }, 2192 }; 2193 2194 static struct clk_branch gcc_blsp2_uart5_apps_clk = { 2195 .halt_reg = 0x2f004, 2196 .clkr = { 2197 .enable_reg = 0x2f004, 2198 .enable_mask = BIT(0), 2199 .hw.init = &(struct clk_init_data){ 2200 .name = "gcc_blsp2_uart5_apps_clk", 2201 .parent_names = (const char *[]){ "blsp2_uart5_apps_clk_src" }, 2202 .num_parents = 1, 2203 .flags = CLK_SET_RATE_PARENT, 2204 .ops = &clk_branch2_ops, 2205 }, 2206 }, 2207 }; 2208 2209 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = { 2210 .halt_reg = 0x30004, 2211 .clkr = { 2212 .enable_reg = 0x30004, 2213 .enable_mask = BIT(0), 2214 .hw.init = &(struct clk_init_data){ 2215 .name = "gcc_blsp2_qup6_spi_apps_clk", 2216 .parent_names = (const char *[]){ "blsp2_qup6_spi_apps_clk_src" }, 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_blsp2_qup6_i2c_apps_clk = { 2225 .halt_reg = 0x30008, 2226 .clkr = { 2227 .enable_reg = 0x30008, 2228 .enable_mask = BIT(0), 2229 .hw.init = &(struct clk_init_data){ 2230 .name = "gcc_blsp2_qup6_i2c_apps_clk", 2231 .parent_names = (const char *[]){ "blsp2_qup6_i2c_apps_clk_src" }, 2232 .num_parents = 1, 2233 .flags = CLK_SET_RATE_PARENT, 2234 .ops = &clk_branch2_ops, 2235 }, 2236 }, 2237 }; 2238 2239 static struct clk_branch gcc_blsp2_uart6_apps_clk = { 2240 .halt_reg = 0x31004, 2241 .clkr = { 2242 .enable_reg = 0x31004, 2243 .enable_mask = BIT(0), 2244 .hw.init = &(struct clk_init_data){ 2245 .name = "gcc_blsp2_uart6_apps_clk", 2246 .parent_names = (const char *[]){ "blsp2_uart6_apps_clk_src" }, 2247 .num_parents = 1, 2248 .flags = CLK_SET_RATE_PARENT, 2249 .ops = &clk_branch2_ops, 2250 }, 2251 }, 2252 }; 2253 2254 static struct clk_branch gcc_pdm_ahb_clk = { 2255 .halt_reg = 0x33004, 2256 .clkr = { 2257 .enable_reg = 0x33004, 2258 .enable_mask = BIT(0), 2259 .hw.init = &(struct clk_init_data){ 2260 .name = "gcc_pdm_ahb_clk", 2261 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2262 .num_parents = 1, 2263 .flags = CLK_SET_RATE_PARENT, 2264 .ops = &clk_branch2_ops, 2265 }, 2266 }, 2267 }; 2268 2269 static struct clk_branch gcc_pdm2_clk = { 2270 .halt_reg = 0x3300c, 2271 .clkr = { 2272 .enable_reg = 0x3300c, 2273 .enable_mask = BIT(0), 2274 .hw.init = &(struct clk_init_data){ 2275 .name = "gcc_pdm2_clk", 2276 .parent_names = (const char *[]){ "pdm2_clk_src" }, 2277 .num_parents = 1, 2278 .flags = CLK_SET_RATE_PARENT, 2279 .ops = &clk_branch2_ops, 2280 }, 2281 }, 2282 }; 2283 2284 static struct clk_branch gcc_prng_ahb_clk = { 2285 .halt_reg = 0x34004, 2286 .halt_check = BRANCH_HALT_VOTED, 2287 .clkr = { 2288 .enable_reg = 0x52004, 2289 .enable_mask = BIT(13), 2290 .hw.init = &(struct clk_init_data){ 2291 .name = "gcc_prng_ahb_clk", 2292 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2293 .num_parents = 1, 2294 .flags = CLK_SET_RATE_PARENT, 2295 .ops = &clk_branch2_ops, 2296 }, 2297 }, 2298 }; 2299 2300 static struct clk_branch gcc_tsif_ahb_clk = { 2301 .halt_reg = 0x36004, 2302 .clkr = { 2303 .enable_reg = 0x36004, 2304 .enable_mask = BIT(0), 2305 .hw.init = &(struct clk_init_data){ 2306 .name = "gcc_tsif_ahb_clk", 2307 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2308 .num_parents = 1, 2309 .flags = CLK_SET_RATE_PARENT, 2310 .ops = &clk_branch2_ops, 2311 }, 2312 }, 2313 }; 2314 2315 static struct clk_branch gcc_tsif_ref_clk = { 2316 .halt_reg = 0x36008, 2317 .clkr = { 2318 .enable_reg = 0x36008, 2319 .enable_mask = BIT(0), 2320 .hw.init = &(struct clk_init_data){ 2321 .name = "gcc_tsif_ref_clk", 2322 .parent_names = (const char *[]){ "tsif_ref_clk_src" }, 2323 .num_parents = 1, 2324 .flags = CLK_SET_RATE_PARENT, 2325 .ops = &clk_branch2_ops, 2326 }, 2327 }, 2328 }; 2329 2330 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2331 .halt_reg = 0x3600c, 2332 .clkr = { 2333 .enable_reg = 0x3600c, 2334 .enable_mask = BIT(0), 2335 .hw.init = &(struct clk_init_data){ 2336 .name = "gcc_tsif_inactivity_timers_clk", 2337 .parent_names = (const char *[]){ "gcc_sleep_clk_src" }, 2338 .num_parents = 1, 2339 .flags = CLK_SET_RATE_PARENT, 2340 .ops = &clk_branch2_ops, 2341 }, 2342 }, 2343 }; 2344 2345 static struct clk_branch gcc_boot_rom_ahb_clk = { 2346 .halt_reg = 0x38004, 2347 .halt_check = BRANCH_HALT_VOTED, 2348 .clkr = { 2349 .enable_reg = 0x52004, 2350 .enable_mask = BIT(10), 2351 .hw.init = &(struct clk_init_data){ 2352 .name = "gcc_boot_rom_ahb_clk", 2353 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2354 .num_parents = 1, 2355 .flags = CLK_SET_RATE_PARENT, 2356 .ops = &clk_branch2_ops, 2357 }, 2358 }, 2359 }; 2360 2361 static struct clk_branch gcc_bimc_gfx_clk = { 2362 .halt_reg = 0x46018, 2363 .clkr = { 2364 .enable_reg = 0x46018, 2365 .enable_mask = BIT(0), 2366 .hw.init = &(struct clk_init_data){ 2367 .name = "gcc_bimc_gfx_clk", 2368 .flags = CLK_SET_RATE_PARENT, 2369 .ops = &clk_branch2_ops, 2370 }, 2371 }, 2372 }; 2373 2374 static struct clk_branch gcc_hmss_rbcpr_clk = { 2375 .halt_reg = 0x4800c, 2376 .clkr = { 2377 .enable_reg = 0x4800c, 2378 .enable_mask = BIT(0), 2379 .hw.init = &(struct clk_init_data){ 2380 .name = "gcc_hmss_rbcpr_clk", 2381 .parent_names = (const char *[]){ "hmss_rbcpr_clk_src" }, 2382 .num_parents = 1, 2383 .flags = CLK_SET_RATE_PARENT, 2384 .ops = &clk_branch2_ops, 2385 }, 2386 }, 2387 }; 2388 2389 static struct clk_branch gcc_gp1_clk = { 2390 .halt_reg = 0x64000, 2391 .clkr = { 2392 .enable_reg = 0x64000, 2393 .enable_mask = BIT(0), 2394 .hw.init = &(struct clk_init_data){ 2395 .name = "gcc_gp1_clk", 2396 .parent_names = (const char *[]){ "gp1_clk_src" }, 2397 .num_parents = 1, 2398 .flags = CLK_SET_RATE_PARENT, 2399 .ops = &clk_branch2_ops, 2400 }, 2401 }, 2402 }; 2403 2404 static struct clk_branch gcc_gp2_clk = { 2405 .halt_reg = 0x65000, 2406 .clkr = { 2407 .enable_reg = 0x65000, 2408 .enable_mask = BIT(0), 2409 .hw.init = &(struct clk_init_data){ 2410 .name = "gcc_gp2_clk", 2411 .parent_names = (const char *[]){ "gp2_clk_src" }, 2412 .num_parents = 1, 2413 .flags = CLK_SET_RATE_PARENT, 2414 .ops = &clk_branch2_ops, 2415 }, 2416 }, 2417 }; 2418 2419 static struct clk_branch gcc_gp3_clk = { 2420 .halt_reg = 0x66000, 2421 .clkr = { 2422 .enable_reg = 0x66000, 2423 .enable_mask = BIT(0), 2424 .hw.init = &(struct clk_init_data){ 2425 .name = "gcc_gp3_clk", 2426 .parent_names = (const char *[]){ "gp3_clk_src" }, 2427 .num_parents = 1, 2428 .flags = CLK_SET_RATE_PARENT, 2429 .ops = &clk_branch2_ops, 2430 }, 2431 }, 2432 }; 2433 2434 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 2435 .halt_reg = 0x6b008, 2436 .clkr = { 2437 .enable_reg = 0x6b008, 2438 .enable_mask = BIT(0), 2439 .hw.init = &(struct clk_init_data){ 2440 .name = "gcc_pcie_0_slv_axi_clk", 2441 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2442 .num_parents = 1, 2443 .flags = CLK_SET_RATE_PARENT, 2444 .ops = &clk_branch2_ops, 2445 }, 2446 }, 2447 }; 2448 2449 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 2450 .halt_reg = 0x6b00c, 2451 .clkr = { 2452 .enable_reg = 0x6b00c, 2453 .enable_mask = BIT(0), 2454 .hw.init = &(struct clk_init_data){ 2455 .name = "gcc_pcie_0_mstr_axi_clk", 2456 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2457 .num_parents = 1, 2458 .flags = CLK_SET_RATE_PARENT, 2459 .ops = &clk_branch2_ops, 2460 }, 2461 }, 2462 }; 2463 2464 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 2465 .halt_reg = 0x6b010, 2466 .clkr = { 2467 .enable_reg = 0x6b010, 2468 .enable_mask = BIT(0), 2469 .hw.init = &(struct clk_init_data){ 2470 .name = "gcc_pcie_0_cfg_ahb_clk", 2471 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2472 .num_parents = 1, 2473 .flags = CLK_SET_RATE_PARENT, 2474 .ops = &clk_branch2_ops, 2475 }, 2476 }, 2477 }; 2478 2479 static struct clk_branch gcc_pcie_0_aux_clk = { 2480 .halt_reg = 0x6b014, 2481 .clkr = { 2482 .enable_reg = 0x6b014, 2483 .enable_mask = BIT(0), 2484 .hw.init = &(struct clk_init_data){ 2485 .name = "gcc_pcie_0_aux_clk", 2486 .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2487 .num_parents = 1, 2488 .flags = CLK_SET_RATE_PARENT, 2489 .ops = &clk_branch2_ops, 2490 }, 2491 }, 2492 }; 2493 2494 static struct clk_branch gcc_pcie_0_pipe_clk = { 2495 .halt_reg = 0x6b018, 2496 .halt_check = BRANCH_HALT_SKIP, 2497 .clkr = { 2498 .enable_reg = 0x6b018, 2499 .enable_mask = BIT(0), 2500 .hw.init = &(struct clk_init_data){ 2501 .name = "gcc_pcie_0_pipe_clk", 2502 .parent_names = (const char *[]){ "pcie_0_pipe_clk_src" }, 2503 .num_parents = 1, 2504 .flags = CLK_SET_RATE_PARENT, 2505 .ops = &clk_branch2_ops, 2506 }, 2507 }, 2508 }; 2509 2510 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 2511 .halt_reg = 0x6d008, 2512 .clkr = { 2513 .enable_reg = 0x6d008, 2514 .enable_mask = BIT(0), 2515 .hw.init = &(struct clk_init_data){ 2516 .name = "gcc_pcie_1_slv_axi_clk", 2517 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2518 .num_parents = 1, 2519 .flags = CLK_SET_RATE_PARENT, 2520 .ops = &clk_branch2_ops, 2521 }, 2522 }, 2523 }; 2524 2525 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 2526 .halt_reg = 0x6d00c, 2527 .clkr = { 2528 .enable_reg = 0x6d00c, 2529 .enable_mask = BIT(0), 2530 .hw.init = &(struct clk_init_data){ 2531 .name = "gcc_pcie_1_mstr_axi_clk", 2532 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2533 .num_parents = 1, 2534 .flags = CLK_SET_RATE_PARENT, 2535 .ops = &clk_branch2_ops, 2536 }, 2537 }, 2538 }; 2539 2540 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 2541 .halt_reg = 0x6d010, 2542 .clkr = { 2543 .enable_reg = 0x6d010, 2544 .enable_mask = BIT(0), 2545 .hw.init = &(struct clk_init_data){ 2546 .name = "gcc_pcie_1_cfg_ahb_clk", 2547 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2548 .num_parents = 1, 2549 .flags = CLK_SET_RATE_PARENT, 2550 .ops = &clk_branch2_ops, 2551 }, 2552 }, 2553 }; 2554 2555 static struct clk_branch gcc_pcie_1_aux_clk = { 2556 .halt_reg = 0x6d014, 2557 .clkr = { 2558 .enable_reg = 0x6d014, 2559 .enable_mask = BIT(0), 2560 .hw.init = &(struct clk_init_data){ 2561 .name = "gcc_pcie_1_aux_clk", 2562 .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2563 .num_parents = 1, 2564 .flags = CLK_SET_RATE_PARENT, 2565 .ops = &clk_branch2_ops, 2566 }, 2567 }, 2568 }; 2569 2570 static struct clk_branch gcc_pcie_1_pipe_clk = { 2571 .halt_reg = 0x6d018, 2572 .halt_check = BRANCH_HALT_SKIP, 2573 .clkr = { 2574 .enable_reg = 0x6d018, 2575 .enable_mask = BIT(0), 2576 .hw.init = &(struct clk_init_data){ 2577 .name = "gcc_pcie_1_pipe_clk", 2578 .parent_names = (const char *[]){ "pcie_1_pipe_clk_src" }, 2579 .num_parents = 1, 2580 .flags = CLK_SET_RATE_PARENT, 2581 .ops = &clk_branch2_ops, 2582 }, 2583 }, 2584 }; 2585 2586 static struct clk_branch gcc_pcie_2_slv_axi_clk = { 2587 .halt_reg = 0x6e008, 2588 .clkr = { 2589 .enable_reg = 0x6e008, 2590 .enable_mask = BIT(0), 2591 .hw.init = &(struct clk_init_data){ 2592 .name = "gcc_pcie_2_slv_axi_clk", 2593 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2594 .num_parents = 1, 2595 .flags = CLK_SET_RATE_PARENT, 2596 .ops = &clk_branch2_ops, 2597 }, 2598 }, 2599 }; 2600 2601 static struct clk_branch gcc_pcie_2_mstr_axi_clk = { 2602 .halt_reg = 0x6e00c, 2603 .clkr = { 2604 .enable_reg = 0x6e00c, 2605 .enable_mask = BIT(0), 2606 .hw.init = &(struct clk_init_data){ 2607 .name = "gcc_pcie_2_mstr_axi_clk", 2608 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2609 .num_parents = 1, 2610 .flags = CLK_SET_RATE_PARENT, 2611 .ops = &clk_branch2_ops, 2612 }, 2613 }, 2614 }; 2615 2616 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = { 2617 .halt_reg = 0x6e010, 2618 .clkr = { 2619 .enable_reg = 0x6e010, 2620 .enable_mask = BIT(0), 2621 .hw.init = &(struct clk_init_data){ 2622 .name = "gcc_pcie_2_cfg_ahb_clk", 2623 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2624 .num_parents = 1, 2625 .flags = CLK_SET_RATE_PARENT, 2626 .ops = &clk_branch2_ops, 2627 }, 2628 }, 2629 }; 2630 2631 static struct clk_branch gcc_pcie_2_aux_clk = { 2632 .halt_reg = 0x6e014, 2633 .clkr = { 2634 .enable_reg = 0x6e014, 2635 .enable_mask = BIT(0), 2636 .hw.init = &(struct clk_init_data){ 2637 .name = "gcc_pcie_2_aux_clk", 2638 .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2639 .num_parents = 1, 2640 .flags = CLK_SET_RATE_PARENT, 2641 .ops = &clk_branch2_ops, 2642 }, 2643 }, 2644 }; 2645 2646 static struct clk_branch gcc_pcie_2_pipe_clk = { 2647 .halt_reg = 0x6e018, 2648 .halt_check = BRANCH_HALT_SKIP, 2649 .clkr = { 2650 .enable_reg = 0x6e018, 2651 .enable_mask = BIT(0), 2652 .hw.init = &(struct clk_init_data){ 2653 .name = "gcc_pcie_2_pipe_clk", 2654 .parent_names = (const char *[]){ "pcie_2_pipe_clk_src" }, 2655 .num_parents = 1, 2656 .flags = CLK_SET_RATE_PARENT, 2657 .ops = &clk_branch2_ops, 2658 }, 2659 }, 2660 }; 2661 2662 static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = { 2663 .halt_reg = 0x6f004, 2664 .clkr = { 2665 .enable_reg = 0x6f004, 2666 .enable_mask = BIT(0), 2667 .hw.init = &(struct clk_init_data){ 2668 .name = "gcc_pcie_phy_cfg_ahb_clk", 2669 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2670 .num_parents = 1, 2671 .flags = CLK_SET_RATE_PARENT, 2672 .ops = &clk_branch2_ops, 2673 }, 2674 }, 2675 }; 2676 2677 static struct clk_branch gcc_pcie_phy_aux_clk = { 2678 .halt_reg = 0x6f008, 2679 .clkr = { 2680 .enable_reg = 0x6f008, 2681 .enable_mask = BIT(0), 2682 .hw.init = &(struct clk_init_data){ 2683 .name = "gcc_pcie_phy_aux_clk", 2684 .parent_names = (const char *[]){ "pcie_aux_clk_src" }, 2685 .num_parents = 1, 2686 .flags = CLK_SET_RATE_PARENT, 2687 .ops = &clk_branch2_ops, 2688 }, 2689 }, 2690 }; 2691 2692 static struct clk_branch gcc_ufs_axi_clk = { 2693 .halt_reg = 0x75008, 2694 .clkr = { 2695 .enable_reg = 0x75008, 2696 .enable_mask = BIT(0), 2697 .hw.init = &(struct clk_init_data){ 2698 .name = "gcc_ufs_axi_clk", 2699 .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2700 .num_parents = 1, 2701 .flags = CLK_SET_RATE_PARENT, 2702 .ops = &clk_branch2_ops, 2703 }, 2704 }, 2705 }; 2706 2707 static struct clk_branch gcc_ufs_ahb_clk = { 2708 .halt_reg = 0x7500c, 2709 .clkr = { 2710 .enable_reg = 0x7500c, 2711 .enable_mask = BIT(0), 2712 .hw.init = &(struct clk_init_data){ 2713 .name = "gcc_ufs_ahb_clk", 2714 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2715 .num_parents = 1, 2716 .flags = CLK_SET_RATE_PARENT, 2717 .ops = &clk_branch2_ops, 2718 }, 2719 }, 2720 }; 2721 2722 static struct clk_fixed_factor ufs_tx_cfg_clk_src = { 2723 .mult = 1, 2724 .div = 16, 2725 .hw.init = &(struct clk_init_data){ 2726 .name = "ufs_tx_cfg_clk_src", 2727 .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2728 .num_parents = 1, 2729 .flags = CLK_SET_RATE_PARENT, 2730 .ops = &clk_fixed_factor_ops, 2731 }, 2732 }; 2733 2734 static struct clk_branch gcc_ufs_tx_cfg_clk = { 2735 .halt_reg = 0x75010, 2736 .clkr = { 2737 .enable_reg = 0x75010, 2738 .enable_mask = BIT(0), 2739 .hw.init = &(struct clk_init_data){ 2740 .name = "gcc_ufs_tx_cfg_clk", 2741 .parent_names = (const char *[]){ "ufs_tx_cfg_clk_src" }, 2742 .num_parents = 1, 2743 .flags = CLK_SET_RATE_PARENT, 2744 .ops = &clk_branch2_ops, 2745 }, 2746 }, 2747 }; 2748 2749 static struct clk_fixed_factor ufs_rx_cfg_clk_src = { 2750 .mult = 1, 2751 .div = 16, 2752 .hw.init = &(struct clk_init_data){ 2753 .name = "ufs_rx_cfg_clk_src", 2754 .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2755 .num_parents = 1, 2756 .flags = CLK_SET_RATE_PARENT, 2757 .ops = &clk_fixed_factor_ops, 2758 }, 2759 }; 2760 2761 static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = { 2762 .halt_reg = 0x7d010, 2763 .halt_check = BRANCH_HALT_VOTED, 2764 .clkr = { 2765 .enable_reg = 0x7d010, 2766 .enable_mask = BIT(0), 2767 .hw.init = &(struct clk_init_data){ 2768 .name = "hlos1_vote_lpass_core_smmu_clk", 2769 .ops = &clk_branch2_ops, 2770 }, 2771 }, 2772 }; 2773 2774 static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = { 2775 .halt_reg = 0x7d014, 2776 .halt_check = BRANCH_HALT_VOTED, 2777 .clkr = { 2778 .enable_reg = 0x7d014, 2779 .enable_mask = BIT(0), 2780 .hw.init = &(struct clk_init_data){ 2781 .name = "hlos1_vote_lpass_adsp_smmu_clk", 2782 .ops = &clk_branch2_ops, 2783 }, 2784 }, 2785 }; 2786 2787 static struct clk_branch gcc_ufs_rx_cfg_clk = { 2788 .halt_reg = 0x75014, 2789 .clkr = { 2790 .enable_reg = 0x75014, 2791 .enable_mask = BIT(0), 2792 .hw.init = &(struct clk_init_data){ 2793 .name = "gcc_ufs_rx_cfg_clk", 2794 .parent_names = (const char *[]){ "ufs_rx_cfg_clk_src" }, 2795 .num_parents = 1, 2796 .flags = CLK_SET_RATE_PARENT, 2797 .ops = &clk_branch2_ops, 2798 }, 2799 }, 2800 }; 2801 2802 static struct clk_branch gcc_ufs_tx_symbol_0_clk = { 2803 .halt_reg = 0x75018, 2804 .halt_check = BRANCH_HALT_SKIP, 2805 .clkr = { 2806 .enable_reg = 0x75018, 2807 .enable_mask = BIT(0), 2808 .hw.init = &(struct clk_init_data){ 2809 .name = "gcc_ufs_tx_symbol_0_clk", 2810 .parent_names = (const char *[]){ "ufs_tx_symbol_0_clk_src" }, 2811 .num_parents = 1, 2812 .flags = CLK_SET_RATE_PARENT, 2813 .ops = &clk_branch2_ops, 2814 }, 2815 }, 2816 }; 2817 2818 static struct clk_branch gcc_ufs_rx_symbol_0_clk = { 2819 .halt_reg = 0x7501c, 2820 .halt_check = BRANCH_HALT_SKIP, 2821 .clkr = { 2822 .enable_reg = 0x7501c, 2823 .enable_mask = BIT(0), 2824 .hw.init = &(struct clk_init_data){ 2825 .name = "gcc_ufs_rx_symbol_0_clk", 2826 .parent_names = (const char *[]){ "ufs_rx_symbol_0_clk_src" }, 2827 .num_parents = 1, 2828 .flags = CLK_SET_RATE_PARENT, 2829 .ops = &clk_branch2_ops, 2830 }, 2831 }, 2832 }; 2833 2834 static struct clk_branch gcc_ufs_rx_symbol_1_clk = { 2835 .halt_reg = 0x75020, 2836 .halt_check = BRANCH_HALT_SKIP, 2837 .clkr = { 2838 .enable_reg = 0x75020, 2839 .enable_mask = BIT(0), 2840 .hw.init = &(struct clk_init_data){ 2841 .name = "gcc_ufs_rx_symbol_1_clk", 2842 .parent_names = (const char *[]){ "ufs_rx_symbol_1_clk_src" }, 2843 .num_parents = 1, 2844 .flags = CLK_SET_RATE_PARENT, 2845 .ops = &clk_branch2_ops, 2846 }, 2847 }, 2848 }; 2849 2850 static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = { 2851 .mult = 1, 2852 .div = 2, 2853 .hw.init = &(struct clk_init_data){ 2854 .name = "ufs_ice_core_postdiv_clk_src", 2855 .parent_names = (const char *[]){ "ufs_ice_core_clk_src" }, 2856 .num_parents = 1, 2857 .flags = CLK_SET_RATE_PARENT, 2858 .ops = &clk_fixed_factor_ops, 2859 }, 2860 }; 2861 2862 static struct clk_branch gcc_ufs_unipro_core_clk = { 2863 .halt_reg = 0x7600c, 2864 .clkr = { 2865 .enable_reg = 0x7600c, 2866 .enable_mask = BIT(0), 2867 .hw.init = &(struct clk_init_data){ 2868 .name = "gcc_ufs_unipro_core_clk", 2869 .parent_names = (const char *[]){ "ufs_ice_core_postdiv_clk_src" }, 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_ice_core_clk = { 2878 .halt_reg = 0x76010, 2879 .clkr = { 2880 .enable_reg = 0x76010, 2881 .enable_mask = BIT(0), 2882 .hw.init = &(struct clk_init_data){ 2883 .name = "gcc_ufs_ice_core_clk", 2884 .parent_names = (const char *[]){ "ufs_ice_core_clk_src" }, 2885 .num_parents = 1, 2886 .flags = CLK_SET_RATE_PARENT, 2887 .ops = &clk_branch2_ops, 2888 }, 2889 }, 2890 }; 2891 2892 static struct clk_branch gcc_ufs_sys_clk_core_clk = { 2893 .halt_check = BRANCH_HALT_DELAY, 2894 .clkr = { 2895 .enable_reg = 0x76030, 2896 .enable_mask = BIT(0), 2897 .hw.init = &(struct clk_init_data){ 2898 .name = "gcc_ufs_sys_clk_core_clk", 2899 .ops = &clk_branch2_ops, 2900 }, 2901 }, 2902 }; 2903 2904 static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = { 2905 .halt_check = BRANCH_HALT_DELAY, 2906 .clkr = { 2907 .enable_reg = 0x76034, 2908 .enable_mask = BIT(0), 2909 .hw.init = &(struct clk_init_data){ 2910 .name = "gcc_ufs_tx_symbol_clk_core_clk", 2911 .ops = &clk_branch2_ops, 2912 }, 2913 }, 2914 }; 2915 2916 static struct clk_branch gcc_aggre0_snoc_axi_clk = { 2917 .halt_reg = 0x81008, 2918 .clkr = { 2919 .enable_reg = 0x81008, 2920 .enable_mask = BIT(0), 2921 .hw.init = &(struct clk_init_data){ 2922 .name = "gcc_aggre0_snoc_axi_clk", 2923 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2924 .num_parents = 1, 2925 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 2926 .ops = &clk_branch2_ops, 2927 }, 2928 }, 2929 }; 2930 2931 static struct clk_branch gcc_aggre0_cnoc_ahb_clk = { 2932 .halt_reg = 0x8100c, 2933 .clkr = { 2934 .enable_reg = 0x8100c, 2935 .enable_mask = BIT(0), 2936 .hw.init = &(struct clk_init_data){ 2937 .name = "gcc_aggre0_cnoc_ahb_clk", 2938 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2939 .num_parents = 1, 2940 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 2941 .ops = &clk_branch2_ops, 2942 }, 2943 }, 2944 }; 2945 2946 static struct clk_branch gcc_smmu_aggre0_axi_clk = { 2947 .halt_reg = 0x81014, 2948 .clkr = { 2949 .enable_reg = 0x81014, 2950 .enable_mask = BIT(0), 2951 .hw.init = &(struct clk_init_data){ 2952 .name = "gcc_smmu_aggre0_axi_clk", 2953 .parent_names = (const char *[]){ "system_noc_clk_src" }, 2954 .num_parents = 1, 2955 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 2956 .ops = &clk_branch2_ops, 2957 }, 2958 }, 2959 }; 2960 2961 static struct clk_branch gcc_smmu_aggre0_ahb_clk = { 2962 .halt_reg = 0x81018, 2963 .clkr = { 2964 .enable_reg = 0x81018, 2965 .enable_mask = BIT(0), 2966 .hw.init = &(struct clk_init_data){ 2967 .name = "gcc_smmu_aggre0_ahb_clk", 2968 .parent_names = (const char *[]){ "config_noc_clk_src" }, 2969 .num_parents = 1, 2970 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 2971 .ops = &clk_branch2_ops, 2972 }, 2973 }, 2974 }; 2975 2976 static struct clk_branch gcc_aggre1_pnoc_ahb_clk = { 2977 .halt_reg = 0x82014, 2978 .clkr = { 2979 .enable_reg = 0x82014, 2980 .enable_mask = BIT(0), 2981 .hw.init = &(struct clk_init_data){ 2982 .name = "gcc_aggre1_pnoc_ahb_clk", 2983 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 2984 .num_parents = 1, 2985 .ops = &clk_branch2_ops, 2986 }, 2987 }, 2988 }; 2989 2990 static struct clk_branch gcc_aggre2_ufs_axi_clk = { 2991 .halt_reg = 0x83014, 2992 .clkr = { 2993 .enable_reg = 0x83014, 2994 .enable_mask = BIT(0), 2995 .hw.init = &(struct clk_init_data){ 2996 .name = "gcc_aggre2_ufs_axi_clk", 2997 .parent_names = (const char *[]){ "ufs_axi_clk_src" }, 2998 .num_parents = 1, 2999 .flags = CLK_SET_RATE_PARENT, 3000 .ops = &clk_branch2_ops, 3001 }, 3002 }, 3003 }; 3004 3005 static struct clk_branch gcc_aggre2_usb3_axi_clk = { 3006 .halt_reg = 0x83018, 3007 .clkr = { 3008 .enable_reg = 0x83018, 3009 .enable_mask = BIT(0), 3010 .hw.init = &(struct clk_init_data){ 3011 .name = "gcc_aggre2_usb3_axi_clk", 3012 .parent_names = (const char *[]){ "usb30_master_clk_src" }, 3013 .num_parents = 1, 3014 .flags = CLK_SET_RATE_PARENT, 3015 .ops = &clk_branch2_ops, 3016 }, 3017 }, 3018 }; 3019 3020 static struct clk_branch gcc_dcc_ahb_clk = { 3021 .halt_reg = 0x84004, 3022 .clkr = { 3023 .enable_reg = 0x84004, 3024 .enable_mask = BIT(0), 3025 .hw.init = &(struct clk_init_data){ 3026 .name = "gcc_dcc_ahb_clk", 3027 .parent_names = (const char *[]){ "config_noc_clk_src" }, 3028 .num_parents = 1, 3029 .ops = &clk_branch2_ops, 3030 }, 3031 }, 3032 }; 3033 3034 static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = { 3035 .halt_reg = 0x85000, 3036 .clkr = { 3037 .enable_reg = 0x85000, 3038 .enable_mask = BIT(0), 3039 .hw.init = &(struct clk_init_data){ 3040 .name = "gcc_aggre0_noc_mpu_cfg_ahb_clk", 3041 .parent_names = (const char *[]){ "config_noc_clk_src" }, 3042 .num_parents = 1, 3043 .ops = &clk_branch2_ops, 3044 }, 3045 }, 3046 }; 3047 3048 static struct clk_branch gcc_qspi_ahb_clk = { 3049 .halt_reg = 0x8b004, 3050 .clkr = { 3051 .enable_reg = 0x8b004, 3052 .enable_mask = BIT(0), 3053 .hw.init = &(struct clk_init_data){ 3054 .name = "gcc_qspi_ahb_clk", 3055 .parent_names = (const char *[]){ "periph_noc_clk_src" }, 3056 .num_parents = 1, 3057 .flags = CLK_SET_RATE_PARENT, 3058 .ops = &clk_branch2_ops, 3059 }, 3060 }, 3061 }; 3062 3063 static struct clk_branch gcc_qspi_ser_clk = { 3064 .halt_reg = 0x8b008, 3065 .clkr = { 3066 .enable_reg = 0x8b008, 3067 .enable_mask = BIT(0), 3068 .hw.init = &(struct clk_init_data){ 3069 .name = "gcc_qspi_ser_clk", 3070 .parent_names = (const char *[]){ "qspi_ser_clk_src" }, 3071 .num_parents = 1, 3072 .flags = CLK_SET_RATE_PARENT, 3073 .ops = &clk_branch2_ops, 3074 }, 3075 }, 3076 }; 3077 3078 static struct clk_branch gcc_usb3_clkref_clk = { 3079 .halt_reg = 0x8800C, 3080 .clkr = { 3081 .enable_reg = 0x8800C, 3082 .enable_mask = BIT(0), 3083 .hw.init = &(struct clk_init_data){ 3084 .name = "gcc_usb3_clkref_clk", 3085 .parent_names = (const char *[]){ "xo" }, 3086 .num_parents = 1, 3087 .ops = &clk_branch2_ops, 3088 }, 3089 }, 3090 }; 3091 3092 static struct clk_branch gcc_hdmi_clkref_clk = { 3093 .halt_reg = 0x88000, 3094 .clkr = { 3095 .enable_reg = 0x88000, 3096 .enable_mask = BIT(0), 3097 .hw.init = &(struct clk_init_data){ 3098 .name = "gcc_hdmi_clkref_clk", 3099 .parent_names = (const char *[]){ "xo" }, 3100 .num_parents = 1, 3101 .ops = &clk_branch2_ops, 3102 }, 3103 }, 3104 }; 3105 3106 static struct clk_branch gcc_edp_clkref_clk = { 3107 .halt_reg = 0x88004, 3108 .clkr = { 3109 .enable_reg = 0x88004, 3110 .enable_mask = BIT(0), 3111 .hw.init = &(struct clk_init_data){ 3112 .name = "gcc_edp_clkref_clk", 3113 .parent_names = (const char *[]){ "xo" }, 3114 .num_parents = 1, 3115 .ops = &clk_branch2_ops, 3116 }, 3117 }, 3118 }; 3119 3120 static struct clk_branch gcc_ufs_clkref_clk = { 3121 .halt_reg = 0x88008, 3122 .clkr = { 3123 .enable_reg = 0x88008, 3124 .enable_mask = BIT(0), 3125 .hw.init = &(struct clk_init_data){ 3126 .name = "gcc_ufs_clkref_clk", 3127 .parent_names = (const char *[]){ "xo" }, 3128 .num_parents = 1, 3129 .ops = &clk_branch2_ops, 3130 }, 3131 }, 3132 }; 3133 3134 static struct clk_branch gcc_pcie_clkref_clk = { 3135 .halt_reg = 0x88010, 3136 .clkr = { 3137 .enable_reg = 0x88010, 3138 .enable_mask = BIT(0), 3139 .hw.init = &(struct clk_init_data){ 3140 .name = "gcc_pcie_clkref_clk", 3141 .parent_names = (const char *[]){ "xo" }, 3142 .num_parents = 1, 3143 .ops = &clk_branch2_ops, 3144 }, 3145 }, 3146 }; 3147 3148 static struct clk_branch gcc_rx2_usb2_clkref_clk = { 3149 .halt_reg = 0x88014, 3150 .clkr = { 3151 .enable_reg = 0x88014, 3152 .enable_mask = BIT(0), 3153 .hw.init = &(struct clk_init_data){ 3154 .name = "gcc_rx2_usb2_clkref_clk", 3155 .parent_names = (const char *[]){ "xo" }, 3156 .num_parents = 1, 3157 .ops = &clk_branch2_ops, 3158 }, 3159 }, 3160 }; 3161 3162 static struct clk_branch gcc_rx1_usb2_clkref_clk = { 3163 .halt_reg = 0x88018, 3164 .clkr = { 3165 .enable_reg = 0x88018, 3166 .enable_mask = BIT(0), 3167 .hw.init = &(struct clk_init_data){ 3168 .name = "gcc_rx1_usb2_clkref_clk", 3169 .parent_names = (const char *[]){ "xo" }, 3170 .num_parents = 1, 3171 .ops = &clk_branch2_ops, 3172 }, 3173 }, 3174 }; 3175 3176 static struct clk_branch gcc_mss_cfg_ahb_clk = { 3177 .halt_reg = 0x8a000, 3178 .clkr = { 3179 .enable_reg = 0x8a000, 3180 .enable_mask = BIT(0), 3181 .hw.init = &(struct clk_init_data){ 3182 .name = "gcc_mss_cfg_ahb_clk", 3183 .parent_names = (const char *[]){ "config_noc_clk_src" }, 3184 .num_parents = 1, 3185 .ops = &clk_branch2_ops, 3186 }, 3187 }, 3188 }; 3189 3190 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = { 3191 .halt_reg = 0x8a004, 3192 .clkr = { 3193 .enable_reg = 0x8a004, 3194 .enable_mask = BIT(0), 3195 .hw.init = &(struct clk_init_data){ 3196 .name = "gcc_mss_mnoc_bimc_axi_clk", 3197 .parent_names = (const char *[]){ "system_noc_clk_src" }, 3198 .num_parents = 1, 3199 .ops = &clk_branch2_ops, 3200 }, 3201 }, 3202 }; 3203 3204 static struct clk_branch gcc_mss_snoc_axi_clk = { 3205 .halt_reg = 0x8a024, 3206 .clkr = { 3207 .enable_reg = 0x8a024, 3208 .enable_mask = BIT(0), 3209 .hw.init = &(struct clk_init_data){ 3210 .name = "gcc_mss_snoc_axi_clk", 3211 .parent_names = (const char *[]){ "system_noc_clk_src" }, 3212 .num_parents = 1, 3213 .ops = &clk_branch2_ops, 3214 }, 3215 }, 3216 }; 3217 3218 static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 3219 .halt_reg = 0x8a028, 3220 .clkr = { 3221 .enable_reg = 0x8a028, 3222 .enable_mask = BIT(0), 3223 .hw.init = &(struct clk_init_data){ 3224 .name = "gcc_mss_q6_bimc_axi_clk", 3225 .parent_names = (const char *[]){ "system_noc_clk_src" }, 3226 .num_parents = 1, 3227 .ops = &clk_branch2_ops, 3228 }, 3229 }, 3230 }; 3231 3232 static struct clk_hw *gcc_msm8996_hws[] = { 3233 &xo.hw, 3234 &gpll0_early_div.hw, 3235 &ufs_tx_cfg_clk_src.hw, 3236 &ufs_rx_cfg_clk_src.hw, 3237 &ufs_ice_core_postdiv_clk_src.hw, 3238 }; 3239 3240 static struct gdsc aggre0_noc_gdsc = { 3241 .gdscr = 0x81004, 3242 .gds_hw_ctrl = 0x81028, 3243 .pd = { 3244 .name = "aggre0_noc", 3245 }, 3246 .pwrsts = PWRSTS_OFF_ON, 3247 .flags = VOTABLE | ALWAYS_ON, 3248 }; 3249 3250 static struct gdsc hlos1_vote_aggre0_noc_gdsc = { 3251 .gdscr = 0x7d024, 3252 .pd = { 3253 .name = "hlos1_vote_aggre0_noc", 3254 }, 3255 .pwrsts = PWRSTS_OFF_ON, 3256 .flags = VOTABLE, 3257 }; 3258 3259 static struct gdsc hlos1_vote_lpass_adsp_gdsc = { 3260 .gdscr = 0x7d034, 3261 .pd = { 3262 .name = "hlos1_vote_lpass_adsp", 3263 }, 3264 .pwrsts = PWRSTS_OFF_ON, 3265 .flags = VOTABLE, 3266 }; 3267 3268 static struct gdsc hlos1_vote_lpass_core_gdsc = { 3269 .gdscr = 0x7d038, 3270 .pd = { 3271 .name = "hlos1_vote_lpass_core", 3272 }, 3273 .pwrsts = PWRSTS_OFF_ON, 3274 .flags = VOTABLE, 3275 }; 3276 3277 static struct gdsc usb30_gdsc = { 3278 .gdscr = 0xf004, 3279 .pd = { 3280 .name = "usb30", 3281 }, 3282 .pwrsts = PWRSTS_OFF_ON, 3283 }; 3284 3285 static struct gdsc pcie0_gdsc = { 3286 .gdscr = 0x6b004, 3287 .pd = { 3288 .name = "pcie0", 3289 }, 3290 .pwrsts = PWRSTS_OFF_ON, 3291 }; 3292 3293 static struct gdsc pcie1_gdsc = { 3294 .gdscr = 0x6d004, 3295 .pd = { 3296 .name = "pcie1", 3297 }, 3298 .pwrsts = PWRSTS_OFF_ON, 3299 }; 3300 3301 static struct gdsc pcie2_gdsc = { 3302 .gdscr = 0x6e004, 3303 .pd = { 3304 .name = "pcie2", 3305 }, 3306 .pwrsts = PWRSTS_OFF_ON, 3307 }; 3308 3309 static struct gdsc ufs_gdsc = { 3310 .gdscr = 0x75004, 3311 .pd = { 3312 .name = "ufs", 3313 }, 3314 .pwrsts = PWRSTS_OFF_ON, 3315 }; 3316 3317 static struct clk_regmap *gcc_msm8996_clocks[] = { 3318 [GPLL0_EARLY] = &gpll0_early.clkr, 3319 [GPLL0] = &gpll0.clkr, 3320 [GPLL4_EARLY] = &gpll4_early.clkr, 3321 [GPLL4] = &gpll4.clkr, 3322 [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr, 3323 [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr, 3324 [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr, 3325 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 3326 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 3327 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr, 3328 [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr, 3329 [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr, 3330 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3331 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 3332 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3333 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr, 3334 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr, 3335 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3336 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3337 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3338 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3339 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3340 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3341 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3342 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3343 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 3344 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3345 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3346 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr, 3347 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 3348 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 3349 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr, 3350 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 3351 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 3352 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr, 3353 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 3354 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 3355 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 3356 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 3357 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 3358 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 3359 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 3360 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 3361 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr, 3362 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 3363 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 3364 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr, 3365 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr, 3366 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr, 3367 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr, 3368 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr, 3369 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr, 3370 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr, 3371 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3372 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr, 3373 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr, 3374 [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr, 3375 [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr, 3376 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3377 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3378 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3379 [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr, 3380 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, 3381 [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr, 3382 [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr, 3383 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr, 3384 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr, 3385 [GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr, 3386 [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr, 3387 [GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr, 3388 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 3389 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 3390 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 3391 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr, 3392 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr, 3393 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr, 3394 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr, 3395 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr, 3396 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr, 3397 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3398 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3399 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 3400 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3401 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3402 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr, 3403 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr, 3404 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3405 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3406 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3407 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, 3408 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3409 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3410 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3411 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3412 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3413 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3414 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3415 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3416 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 3417 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3418 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3419 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr, 3420 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 3421 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 3422 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr, 3423 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 3424 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 3425 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr, 3426 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3427 [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr, 3428 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 3429 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 3430 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 3431 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 3432 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 3433 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 3434 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 3435 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 3436 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr, 3437 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 3438 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 3439 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr, 3440 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr, 3441 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr, 3442 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr, 3443 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr, 3444 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr, 3445 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr, 3446 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3447 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3448 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3449 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3450 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3451 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3452 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3453 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 3454 [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr, 3455 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3456 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3457 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3458 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3459 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3460 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3461 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3462 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3463 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3464 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3465 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3466 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3467 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3468 [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr, 3469 [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr, 3470 [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr, 3471 [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr, 3472 [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr, 3473 [GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr, 3474 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 3475 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr, 3476 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr, 3477 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr, 3478 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr, 3479 [GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr, 3480 [GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr, 3481 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr, 3482 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr, 3483 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr, 3484 [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr, 3485 [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr, 3486 [GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr, 3487 [GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr, 3488 [GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr, 3489 [GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr, 3490 [GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr, 3491 [GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr, 3492 [GCC_AGGRE1_PNOC_AHB_CLK] = &gcc_aggre1_pnoc_ahb_clk.clkr, 3493 [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr, 3494 [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr, 3495 [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr, 3496 [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr, 3497 [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr, 3498 [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr, 3499 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr, 3500 [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr, 3501 [GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr, 3502 [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr, 3503 [GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr, 3504 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 3505 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 3506 [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr, 3507 [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr, 3508 [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr, 3509 [GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr, 3510 [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr, 3511 [GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr, 3512 }; 3513 3514 static struct gdsc *gcc_msm8996_gdscs[] = { 3515 [AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc, 3516 [HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc, 3517 [HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc, 3518 [HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc, 3519 [USB30_GDSC] = &usb30_gdsc, 3520 [PCIE0_GDSC] = &pcie0_gdsc, 3521 [PCIE1_GDSC] = &pcie1_gdsc, 3522 [PCIE2_GDSC] = &pcie2_gdsc, 3523 [UFS_GDSC] = &ufs_gdsc, 3524 }; 3525 3526 static const struct qcom_reset_map gcc_msm8996_resets[] = { 3527 [GCC_SYSTEM_NOC_BCR] = { 0x4000 }, 3528 [GCC_CONFIG_NOC_BCR] = { 0x5000 }, 3529 [GCC_PERIPH_NOC_BCR] = { 0x6000 }, 3530 [GCC_IMEM_BCR] = { 0x8000 }, 3531 [GCC_MMSS_BCR] = { 0x9000 }, 3532 [GCC_PIMEM_BCR] = { 0x0a000 }, 3533 [GCC_QDSS_BCR] = { 0x0c000 }, 3534 [GCC_USB_30_BCR] = { 0x0f000 }, 3535 [GCC_USB_20_BCR] = { 0x12000 }, 3536 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 }, 3537 [GCC_QUSB2PHY_SEC_BCR] = { 0x1203c }, 3538 [GCC_USB3_PHY_BCR] = { 0x50020 }, 3539 [GCC_USB3PHY_PHY_BCR] = { 0x50024 }, 3540 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 3541 [GCC_SDCC1_BCR] = { 0x13000 }, 3542 [GCC_SDCC2_BCR] = { 0x14000 }, 3543 [GCC_SDCC3_BCR] = { 0x15000 }, 3544 [GCC_SDCC4_BCR] = { 0x16000 }, 3545 [GCC_BLSP1_BCR] = { 0x17000 }, 3546 [GCC_BLSP1_QUP1_BCR] = { 0x19000 }, 3547 [GCC_BLSP1_UART1_BCR] = { 0x1a000 }, 3548 [GCC_BLSP1_QUP2_BCR] = { 0x1b000 }, 3549 [GCC_BLSP1_UART2_BCR] = { 0x1c000 }, 3550 [GCC_BLSP1_QUP3_BCR] = { 0x1d000 }, 3551 [GCC_BLSP1_UART3_BCR] = { 0x1e000 }, 3552 [GCC_BLSP1_QUP4_BCR] = { 0x1f000 }, 3553 [GCC_BLSP1_UART4_BCR] = { 0x20000 }, 3554 [GCC_BLSP1_QUP5_BCR] = { 0x21000 }, 3555 [GCC_BLSP1_UART5_BCR] = { 0x22000 }, 3556 [GCC_BLSP1_QUP6_BCR] = { 0x23000 }, 3557 [GCC_BLSP1_UART6_BCR] = { 0x24000 }, 3558 [GCC_BLSP2_BCR] = { 0x25000 }, 3559 [GCC_BLSP2_QUP1_BCR] = { 0x26000 }, 3560 [GCC_BLSP2_UART1_BCR] = { 0x27000 }, 3561 [GCC_BLSP2_QUP2_BCR] = { 0x28000 }, 3562 [GCC_BLSP2_UART2_BCR] = { 0x29000 }, 3563 [GCC_BLSP2_QUP3_BCR] = { 0x2a000 }, 3564 [GCC_BLSP2_UART3_BCR] = { 0x2b000 }, 3565 [GCC_BLSP2_QUP4_BCR] = { 0x2c000 }, 3566 [GCC_BLSP2_UART4_BCR] = { 0x2d000 }, 3567 [GCC_BLSP2_QUP5_BCR] = { 0x2e000 }, 3568 [GCC_BLSP2_UART5_BCR] = { 0x2f000 }, 3569 [GCC_BLSP2_QUP6_BCR] = { 0x30000 }, 3570 [GCC_BLSP2_UART6_BCR] = { 0x31000 }, 3571 [GCC_PDM_BCR] = { 0x33000 }, 3572 [GCC_PRNG_BCR] = { 0x34000 }, 3573 [GCC_TSIF_BCR] = { 0x36000 }, 3574 [GCC_TCSR_BCR] = { 0x37000 }, 3575 [GCC_BOOT_ROM_BCR] = { 0x38000 }, 3576 [GCC_MSG_RAM_BCR] = { 0x39000 }, 3577 [GCC_TLMM_BCR] = { 0x3a000 }, 3578 [GCC_MPM_BCR] = { 0x3b000 }, 3579 [GCC_SEC_CTRL_BCR] = { 0x3d000 }, 3580 [GCC_SPMI_BCR] = { 0x3f000 }, 3581 [GCC_SPDM_BCR] = { 0x40000 }, 3582 [GCC_CE1_BCR] = { 0x41000 }, 3583 [GCC_BIMC_BCR] = { 0x44000 }, 3584 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 }, 3585 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 }, 3586 [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 }, 3587 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 }, 3588 [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 }, 3589 [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 }, 3590 [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 }, 3591 [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 }, 3592 [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 }, 3593 [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 }, 3594 [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 }, 3595 [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 }, 3596 [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 }, 3597 [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 }, 3598 [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 }, 3599 [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 }, 3600 [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 }, 3601 [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 }, 3602 [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 }, 3603 [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 }, 3604 [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 }, 3605 [GCC_APB2JTAG_BCR] = { 0x4c000 }, 3606 [GCC_RBCPR_CX_BCR] = { 0x4e000 }, 3607 [GCC_RBCPR_MX_BCR] = { 0x4f000 }, 3608 [GCC_PCIE_0_BCR] = { 0x6b000 }, 3609 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3610 [GCC_PCIE_1_BCR] = { 0x6d000 }, 3611 [GCC_PCIE_1_PHY_BCR] = { 0x6d038 }, 3612 [GCC_PCIE_2_BCR] = { 0x6e000 }, 3613 [GCC_PCIE_2_PHY_BCR] = { 0x6e038 }, 3614 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3615 [GCC_PCIE_PHY_COM_BCR] = { 0x6f014 }, 3616 [GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c }, 3617 [GCC_DCD_BCR] = { 0x70000 }, 3618 [GCC_OBT_ODT_BCR] = { 0x73000 }, 3619 [GCC_UFS_BCR] = { 0x75000 }, 3620 [GCC_SSC_BCR] = { 0x63000 }, 3621 [GCC_VS_BCR] = { 0x7a000 }, 3622 [GCC_AGGRE0_NOC_BCR] = { 0x81000 }, 3623 [GCC_AGGRE1_NOC_BCR] = { 0x82000 }, 3624 [GCC_AGGRE2_NOC_BCR] = { 0x83000 }, 3625 [GCC_DCC_BCR] = { 0x84000 }, 3626 [GCC_IPA_BCR] = { 0x89000 }, 3627 [GCC_QSPI_BCR] = { 0x8b000 }, 3628 [GCC_SKL_BCR] = { 0x8c000 }, 3629 [GCC_MSMPU_BCR] = { 0x8d000 }, 3630 [GCC_MSS_Q6_BCR] = { 0x8e000 }, 3631 [GCC_QREFS_VBG_CAL_BCR] = { 0x88020 }, 3632 [GCC_MSS_RESTART] = { 0x8f008 }, 3633 }; 3634 3635 static const struct regmap_config gcc_msm8996_regmap_config = { 3636 .reg_bits = 32, 3637 .reg_stride = 4, 3638 .val_bits = 32, 3639 .max_register = 0x8f010, 3640 .fast_io = true, 3641 }; 3642 3643 static const struct qcom_cc_desc gcc_msm8996_desc = { 3644 .config = &gcc_msm8996_regmap_config, 3645 .clks = gcc_msm8996_clocks, 3646 .num_clks = ARRAY_SIZE(gcc_msm8996_clocks), 3647 .resets = gcc_msm8996_resets, 3648 .num_resets = ARRAY_SIZE(gcc_msm8996_resets), 3649 .gdscs = gcc_msm8996_gdscs, 3650 .num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs), 3651 .clk_hws = gcc_msm8996_hws, 3652 .num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws), 3653 }; 3654 3655 static const struct of_device_id gcc_msm8996_match_table[] = { 3656 { .compatible = "qcom,gcc-msm8996" }, 3657 { } 3658 }; 3659 MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table); 3660 3661 static int gcc_msm8996_probe(struct platform_device *pdev) 3662 { 3663 struct regmap *regmap; 3664 3665 regmap = qcom_cc_map(pdev, &gcc_msm8996_desc); 3666 if (IS_ERR(regmap)) 3667 return PTR_ERR(regmap); 3668 3669 /* 3670 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be 3671 * turned off by hardware during certain apps low power modes. 3672 */ 3673 regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21)); 3674 3675 return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap); 3676 } 3677 3678 static struct platform_driver gcc_msm8996_driver = { 3679 .probe = gcc_msm8996_probe, 3680 .driver = { 3681 .name = "gcc-msm8996", 3682 .of_match_table = gcc_msm8996_match_table, 3683 }, 3684 }; 3685 3686 static int __init gcc_msm8996_init(void) 3687 { 3688 return platform_driver_register(&gcc_msm8996_driver); 3689 } 3690 core_initcall(gcc_msm8996_init); 3691 3692 static void __exit gcc_msm8996_exit(void) 3693 { 3694 platform_driver_unregister(&gcc_msm8996_driver); 3695 } 3696 module_exit(gcc_msm8996_exit); 3697 3698 MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver"); 3699 MODULE_LICENSE("GPL v2"); 3700 MODULE_ALIAS("platform:gcc-msm8996"); 3701