1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2013-2014, 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-msm8960.h> 18 #include <dt-bindings/reset/qcom,gcc-msm8960.h> 19 20 #include "common.h" 21 #include "clk-regmap.h" 22 #include "clk-pll.h" 23 #include "clk-rcg.h" 24 #include "clk-branch.h" 25 #include "clk-hfpll.h" 26 #include "reset.h" 27 28 static struct clk_pll pll3 = { 29 .l_reg = 0x3164, 30 .m_reg = 0x3168, 31 .n_reg = 0x316c, 32 .config_reg = 0x3174, 33 .mode_reg = 0x3160, 34 .status_reg = 0x3178, 35 .status_bit = 16, 36 .clkr.hw.init = &(struct clk_init_data){ 37 .name = "pll3", 38 .parent_names = (const char *[]){ "pxo" }, 39 .num_parents = 1, 40 .ops = &clk_pll_ops, 41 }, 42 }; 43 44 static struct clk_regmap pll4_vote = { 45 .enable_reg = 0x34c0, 46 .enable_mask = BIT(4), 47 .hw.init = &(struct clk_init_data){ 48 .name = "pll4_vote", 49 .parent_names = (const char *[]){ "pll4" }, 50 .num_parents = 1, 51 .ops = &clk_pll_vote_ops, 52 }, 53 }; 54 55 static struct clk_pll pll8 = { 56 .l_reg = 0x3144, 57 .m_reg = 0x3148, 58 .n_reg = 0x314c, 59 .config_reg = 0x3154, 60 .mode_reg = 0x3140, 61 .status_reg = 0x3158, 62 .status_bit = 16, 63 .clkr.hw.init = &(struct clk_init_data){ 64 .name = "pll8", 65 .parent_names = (const char *[]){ "pxo" }, 66 .num_parents = 1, 67 .ops = &clk_pll_ops, 68 }, 69 }; 70 71 static struct clk_regmap pll8_vote = { 72 .enable_reg = 0x34c0, 73 .enable_mask = BIT(8), 74 .hw.init = &(struct clk_init_data){ 75 .name = "pll8_vote", 76 .parent_names = (const char *[]){ "pll8" }, 77 .num_parents = 1, 78 .ops = &clk_pll_vote_ops, 79 }, 80 }; 81 82 static struct hfpll_data hfpll0_data = { 83 .mode_reg = 0x3200, 84 .l_reg = 0x3208, 85 .m_reg = 0x320c, 86 .n_reg = 0x3210, 87 .config_reg = 0x3204, 88 .status_reg = 0x321c, 89 .config_val = 0x7845c665, 90 .droop_reg = 0x3214, 91 .droop_val = 0x0108c000, 92 .min_rate = 600000000UL, 93 .max_rate = 1800000000UL, 94 }; 95 96 static struct clk_hfpll hfpll0 = { 97 .d = &hfpll0_data, 98 .clkr.hw.init = &(struct clk_init_data){ 99 .parent_names = (const char *[]){ "pxo" }, 100 .num_parents = 1, 101 .name = "hfpll0", 102 .ops = &clk_ops_hfpll, 103 .flags = CLK_IGNORE_UNUSED, 104 }, 105 .lock = __SPIN_LOCK_UNLOCKED(hfpll0.lock), 106 }; 107 108 static struct hfpll_data hfpll1_8064_data = { 109 .mode_reg = 0x3240, 110 .l_reg = 0x3248, 111 .m_reg = 0x324c, 112 .n_reg = 0x3250, 113 .config_reg = 0x3244, 114 .status_reg = 0x325c, 115 .config_val = 0x7845c665, 116 .droop_reg = 0x3254, 117 .droop_val = 0x0108c000, 118 .min_rate = 600000000UL, 119 .max_rate = 1800000000UL, 120 }; 121 122 static struct hfpll_data hfpll1_data = { 123 .mode_reg = 0x3300, 124 .l_reg = 0x3308, 125 .m_reg = 0x330c, 126 .n_reg = 0x3310, 127 .config_reg = 0x3304, 128 .status_reg = 0x331c, 129 .config_val = 0x7845c665, 130 .droop_reg = 0x3314, 131 .droop_val = 0x0108c000, 132 .min_rate = 600000000UL, 133 .max_rate = 1800000000UL, 134 }; 135 136 static struct clk_hfpll hfpll1 = { 137 .d = &hfpll1_data, 138 .clkr.hw.init = &(struct clk_init_data){ 139 .parent_names = (const char *[]){ "pxo" }, 140 .num_parents = 1, 141 .name = "hfpll1", 142 .ops = &clk_ops_hfpll, 143 .flags = CLK_IGNORE_UNUSED, 144 }, 145 .lock = __SPIN_LOCK_UNLOCKED(hfpll1.lock), 146 }; 147 148 static struct hfpll_data hfpll2_data = { 149 .mode_reg = 0x3280, 150 .l_reg = 0x3288, 151 .m_reg = 0x328c, 152 .n_reg = 0x3290, 153 .config_reg = 0x3284, 154 .status_reg = 0x329c, 155 .config_val = 0x7845c665, 156 .droop_reg = 0x3294, 157 .droop_val = 0x0108c000, 158 .min_rate = 600000000UL, 159 .max_rate = 1800000000UL, 160 }; 161 162 static struct clk_hfpll hfpll2 = { 163 .d = &hfpll2_data, 164 .clkr.hw.init = &(struct clk_init_data){ 165 .parent_names = (const char *[]){ "pxo" }, 166 .num_parents = 1, 167 .name = "hfpll2", 168 .ops = &clk_ops_hfpll, 169 .flags = CLK_IGNORE_UNUSED, 170 }, 171 .lock = __SPIN_LOCK_UNLOCKED(hfpll2.lock), 172 }; 173 174 static struct hfpll_data hfpll3_data = { 175 .mode_reg = 0x32c0, 176 .l_reg = 0x32c8, 177 .m_reg = 0x32cc, 178 .n_reg = 0x32d0, 179 .config_reg = 0x32c4, 180 .status_reg = 0x32dc, 181 .config_val = 0x7845c665, 182 .droop_reg = 0x32d4, 183 .droop_val = 0x0108c000, 184 .min_rate = 600000000UL, 185 .max_rate = 1800000000UL, 186 }; 187 188 static struct clk_hfpll hfpll3 = { 189 .d = &hfpll3_data, 190 .clkr.hw.init = &(struct clk_init_data){ 191 .parent_names = (const char *[]){ "pxo" }, 192 .num_parents = 1, 193 .name = "hfpll3", 194 .ops = &clk_ops_hfpll, 195 .flags = CLK_IGNORE_UNUSED, 196 }, 197 .lock = __SPIN_LOCK_UNLOCKED(hfpll3.lock), 198 }; 199 200 static struct hfpll_data hfpll_l2_8064_data = { 201 .mode_reg = 0x3300, 202 .l_reg = 0x3308, 203 .m_reg = 0x330c, 204 .n_reg = 0x3310, 205 .config_reg = 0x3304, 206 .status_reg = 0x331c, 207 .config_val = 0x7845c665, 208 .droop_reg = 0x3314, 209 .droop_val = 0x0108c000, 210 .min_rate = 600000000UL, 211 .max_rate = 1800000000UL, 212 }; 213 214 static struct hfpll_data hfpll_l2_data = { 215 .mode_reg = 0x3400, 216 .l_reg = 0x3408, 217 .m_reg = 0x340c, 218 .n_reg = 0x3410, 219 .config_reg = 0x3404, 220 .status_reg = 0x341c, 221 .config_val = 0x7845c665, 222 .droop_reg = 0x3414, 223 .droop_val = 0x0108c000, 224 .min_rate = 600000000UL, 225 .max_rate = 1800000000UL, 226 }; 227 228 static struct clk_hfpll hfpll_l2 = { 229 .d = &hfpll_l2_data, 230 .clkr.hw.init = &(struct clk_init_data){ 231 .parent_names = (const char *[]){ "pxo" }, 232 .num_parents = 1, 233 .name = "hfpll_l2", 234 .ops = &clk_ops_hfpll, 235 .flags = CLK_IGNORE_UNUSED, 236 }, 237 .lock = __SPIN_LOCK_UNLOCKED(hfpll_l2.lock), 238 }; 239 240 static struct clk_pll pll14 = { 241 .l_reg = 0x31c4, 242 .m_reg = 0x31c8, 243 .n_reg = 0x31cc, 244 .config_reg = 0x31d4, 245 .mode_reg = 0x31c0, 246 .status_reg = 0x31d8, 247 .status_bit = 16, 248 .clkr.hw.init = &(struct clk_init_data){ 249 .name = "pll14", 250 .parent_names = (const char *[]){ "pxo" }, 251 .num_parents = 1, 252 .ops = &clk_pll_ops, 253 }, 254 }; 255 256 static struct clk_regmap pll14_vote = { 257 .enable_reg = 0x34c0, 258 .enable_mask = BIT(14), 259 .hw.init = &(struct clk_init_data){ 260 .name = "pll14_vote", 261 .parent_names = (const char *[]){ "pll14" }, 262 .num_parents = 1, 263 .ops = &clk_pll_vote_ops, 264 }, 265 }; 266 267 enum { 268 P_PXO, 269 P_PLL8, 270 P_PLL3, 271 P_CXO, 272 }; 273 274 static const struct parent_map gcc_pxo_pll8_map[] = { 275 { P_PXO, 0 }, 276 { P_PLL8, 3 } 277 }; 278 279 static const char * const gcc_pxo_pll8[] = { 280 "pxo", 281 "pll8_vote", 282 }; 283 284 static const struct parent_map gcc_pxo_pll8_cxo_map[] = { 285 { P_PXO, 0 }, 286 { P_PLL8, 3 }, 287 { P_CXO, 5 } 288 }; 289 290 static const char * const gcc_pxo_pll8_cxo[] = { 291 "pxo", 292 "pll8_vote", 293 "cxo", 294 }; 295 296 static const struct parent_map gcc_pxo_pll8_pll3_map[] = { 297 { P_PXO, 0 }, 298 { P_PLL8, 3 }, 299 { P_PLL3, 6 } 300 }; 301 302 static const char * const gcc_pxo_pll8_pll3[] = { 303 "pxo", 304 "pll8_vote", 305 "pll3", 306 }; 307 308 static struct freq_tbl clk_tbl_gsbi_uart[] = { 309 { 1843200, P_PLL8, 2, 6, 625 }, 310 { 3686400, P_PLL8, 2, 12, 625 }, 311 { 7372800, P_PLL8, 2, 24, 625 }, 312 { 14745600, P_PLL8, 2, 48, 625 }, 313 { 16000000, P_PLL8, 4, 1, 6 }, 314 { 24000000, P_PLL8, 4, 1, 4 }, 315 { 32000000, P_PLL8, 4, 1, 3 }, 316 { 40000000, P_PLL8, 1, 5, 48 }, 317 { 46400000, P_PLL8, 1, 29, 240 }, 318 { 48000000, P_PLL8, 4, 1, 2 }, 319 { 51200000, P_PLL8, 1, 2, 15 }, 320 { 56000000, P_PLL8, 1, 7, 48 }, 321 { 58982400, P_PLL8, 1, 96, 625 }, 322 { 64000000, P_PLL8, 2, 1, 3 }, 323 { } 324 }; 325 326 static struct clk_rcg gsbi1_uart_src = { 327 .ns_reg = 0x29d4, 328 .md_reg = 0x29d0, 329 .mn = { 330 .mnctr_en_bit = 8, 331 .mnctr_reset_bit = 7, 332 .mnctr_mode_shift = 5, 333 .n_val_shift = 16, 334 .m_val_shift = 16, 335 .width = 16, 336 }, 337 .p = { 338 .pre_div_shift = 3, 339 .pre_div_width = 2, 340 }, 341 .s = { 342 .src_sel_shift = 0, 343 .parent_map = gcc_pxo_pll8_map, 344 }, 345 .freq_tbl = clk_tbl_gsbi_uart, 346 .clkr = { 347 .enable_reg = 0x29d4, 348 .enable_mask = BIT(11), 349 .hw.init = &(struct clk_init_data){ 350 .name = "gsbi1_uart_src", 351 .parent_names = gcc_pxo_pll8, 352 .num_parents = 2, 353 .ops = &clk_rcg_ops, 354 .flags = CLK_SET_PARENT_GATE, 355 }, 356 }, 357 }; 358 359 static struct clk_branch gsbi1_uart_clk = { 360 .halt_reg = 0x2fcc, 361 .halt_bit = 10, 362 .clkr = { 363 .enable_reg = 0x29d4, 364 .enable_mask = BIT(9), 365 .hw.init = &(struct clk_init_data){ 366 .name = "gsbi1_uart_clk", 367 .parent_names = (const char *[]){ 368 "gsbi1_uart_src", 369 }, 370 .num_parents = 1, 371 .ops = &clk_branch_ops, 372 .flags = CLK_SET_RATE_PARENT, 373 }, 374 }, 375 }; 376 377 static struct clk_rcg gsbi2_uart_src = { 378 .ns_reg = 0x29f4, 379 .md_reg = 0x29f0, 380 .mn = { 381 .mnctr_en_bit = 8, 382 .mnctr_reset_bit = 7, 383 .mnctr_mode_shift = 5, 384 .n_val_shift = 16, 385 .m_val_shift = 16, 386 .width = 16, 387 }, 388 .p = { 389 .pre_div_shift = 3, 390 .pre_div_width = 2, 391 }, 392 .s = { 393 .src_sel_shift = 0, 394 .parent_map = gcc_pxo_pll8_map, 395 }, 396 .freq_tbl = clk_tbl_gsbi_uart, 397 .clkr = { 398 .enable_reg = 0x29f4, 399 .enable_mask = BIT(11), 400 .hw.init = &(struct clk_init_data){ 401 .name = "gsbi2_uart_src", 402 .parent_names = gcc_pxo_pll8, 403 .num_parents = 2, 404 .ops = &clk_rcg_ops, 405 .flags = CLK_SET_PARENT_GATE, 406 }, 407 }, 408 }; 409 410 static struct clk_branch gsbi2_uart_clk = { 411 .halt_reg = 0x2fcc, 412 .halt_bit = 6, 413 .clkr = { 414 .enable_reg = 0x29f4, 415 .enable_mask = BIT(9), 416 .hw.init = &(struct clk_init_data){ 417 .name = "gsbi2_uart_clk", 418 .parent_names = (const char *[]){ 419 "gsbi2_uart_src", 420 }, 421 .num_parents = 1, 422 .ops = &clk_branch_ops, 423 .flags = CLK_SET_RATE_PARENT, 424 }, 425 }, 426 }; 427 428 static struct clk_rcg gsbi3_uart_src = { 429 .ns_reg = 0x2a14, 430 .md_reg = 0x2a10, 431 .mn = { 432 .mnctr_en_bit = 8, 433 .mnctr_reset_bit = 7, 434 .mnctr_mode_shift = 5, 435 .n_val_shift = 16, 436 .m_val_shift = 16, 437 .width = 16, 438 }, 439 .p = { 440 .pre_div_shift = 3, 441 .pre_div_width = 2, 442 }, 443 .s = { 444 .src_sel_shift = 0, 445 .parent_map = gcc_pxo_pll8_map, 446 }, 447 .freq_tbl = clk_tbl_gsbi_uart, 448 .clkr = { 449 .enable_reg = 0x2a14, 450 .enable_mask = BIT(11), 451 .hw.init = &(struct clk_init_data){ 452 .name = "gsbi3_uart_src", 453 .parent_names = gcc_pxo_pll8, 454 .num_parents = 2, 455 .ops = &clk_rcg_ops, 456 .flags = CLK_SET_PARENT_GATE, 457 }, 458 }, 459 }; 460 461 static struct clk_branch gsbi3_uart_clk = { 462 .halt_reg = 0x2fcc, 463 .halt_bit = 2, 464 .clkr = { 465 .enable_reg = 0x2a14, 466 .enable_mask = BIT(9), 467 .hw.init = &(struct clk_init_data){ 468 .name = "gsbi3_uart_clk", 469 .parent_names = (const char *[]){ 470 "gsbi3_uart_src", 471 }, 472 .num_parents = 1, 473 .ops = &clk_branch_ops, 474 .flags = CLK_SET_RATE_PARENT, 475 }, 476 }, 477 }; 478 479 static struct clk_rcg gsbi4_uart_src = { 480 .ns_reg = 0x2a34, 481 .md_reg = 0x2a30, 482 .mn = { 483 .mnctr_en_bit = 8, 484 .mnctr_reset_bit = 7, 485 .mnctr_mode_shift = 5, 486 .n_val_shift = 16, 487 .m_val_shift = 16, 488 .width = 16, 489 }, 490 .p = { 491 .pre_div_shift = 3, 492 .pre_div_width = 2, 493 }, 494 .s = { 495 .src_sel_shift = 0, 496 .parent_map = gcc_pxo_pll8_map, 497 }, 498 .freq_tbl = clk_tbl_gsbi_uart, 499 .clkr = { 500 .enable_reg = 0x2a34, 501 .enable_mask = BIT(11), 502 .hw.init = &(struct clk_init_data){ 503 .name = "gsbi4_uart_src", 504 .parent_names = gcc_pxo_pll8, 505 .num_parents = 2, 506 .ops = &clk_rcg_ops, 507 .flags = CLK_SET_PARENT_GATE, 508 }, 509 }, 510 }; 511 512 static struct clk_branch gsbi4_uart_clk = { 513 .halt_reg = 0x2fd0, 514 .halt_bit = 26, 515 .clkr = { 516 .enable_reg = 0x2a34, 517 .enable_mask = BIT(9), 518 .hw.init = &(struct clk_init_data){ 519 .name = "gsbi4_uart_clk", 520 .parent_names = (const char *[]){ 521 "gsbi4_uart_src", 522 }, 523 .num_parents = 1, 524 .ops = &clk_branch_ops, 525 .flags = CLK_SET_RATE_PARENT, 526 }, 527 }, 528 }; 529 530 static struct clk_rcg gsbi5_uart_src = { 531 .ns_reg = 0x2a54, 532 .md_reg = 0x2a50, 533 .mn = { 534 .mnctr_en_bit = 8, 535 .mnctr_reset_bit = 7, 536 .mnctr_mode_shift = 5, 537 .n_val_shift = 16, 538 .m_val_shift = 16, 539 .width = 16, 540 }, 541 .p = { 542 .pre_div_shift = 3, 543 .pre_div_width = 2, 544 }, 545 .s = { 546 .src_sel_shift = 0, 547 .parent_map = gcc_pxo_pll8_map, 548 }, 549 .freq_tbl = clk_tbl_gsbi_uart, 550 .clkr = { 551 .enable_reg = 0x2a54, 552 .enable_mask = BIT(11), 553 .hw.init = &(struct clk_init_data){ 554 .name = "gsbi5_uart_src", 555 .parent_names = gcc_pxo_pll8, 556 .num_parents = 2, 557 .ops = &clk_rcg_ops, 558 .flags = CLK_SET_PARENT_GATE, 559 }, 560 }, 561 }; 562 563 static struct clk_branch gsbi5_uart_clk = { 564 .halt_reg = 0x2fd0, 565 .halt_bit = 22, 566 .clkr = { 567 .enable_reg = 0x2a54, 568 .enable_mask = BIT(9), 569 .hw.init = &(struct clk_init_data){ 570 .name = "gsbi5_uart_clk", 571 .parent_names = (const char *[]){ 572 "gsbi5_uart_src", 573 }, 574 .num_parents = 1, 575 .ops = &clk_branch_ops, 576 .flags = CLK_SET_RATE_PARENT, 577 }, 578 }, 579 }; 580 581 static struct clk_rcg gsbi6_uart_src = { 582 .ns_reg = 0x2a74, 583 .md_reg = 0x2a70, 584 .mn = { 585 .mnctr_en_bit = 8, 586 .mnctr_reset_bit = 7, 587 .mnctr_mode_shift = 5, 588 .n_val_shift = 16, 589 .m_val_shift = 16, 590 .width = 16, 591 }, 592 .p = { 593 .pre_div_shift = 3, 594 .pre_div_width = 2, 595 }, 596 .s = { 597 .src_sel_shift = 0, 598 .parent_map = gcc_pxo_pll8_map, 599 }, 600 .freq_tbl = clk_tbl_gsbi_uart, 601 .clkr = { 602 .enable_reg = 0x2a74, 603 .enable_mask = BIT(11), 604 .hw.init = &(struct clk_init_data){ 605 .name = "gsbi6_uart_src", 606 .parent_names = gcc_pxo_pll8, 607 .num_parents = 2, 608 .ops = &clk_rcg_ops, 609 .flags = CLK_SET_PARENT_GATE, 610 }, 611 }, 612 }; 613 614 static struct clk_branch gsbi6_uart_clk = { 615 .halt_reg = 0x2fd0, 616 .halt_bit = 18, 617 .clkr = { 618 .enable_reg = 0x2a74, 619 .enable_mask = BIT(9), 620 .hw.init = &(struct clk_init_data){ 621 .name = "gsbi6_uart_clk", 622 .parent_names = (const char *[]){ 623 "gsbi6_uart_src", 624 }, 625 .num_parents = 1, 626 .ops = &clk_branch_ops, 627 .flags = CLK_SET_RATE_PARENT, 628 }, 629 }, 630 }; 631 632 static struct clk_rcg gsbi7_uart_src = { 633 .ns_reg = 0x2a94, 634 .md_reg = 0x2a90, 635 .mn = { 636 .mnctr_en_bit = 8, 637 .mnctr_reset_bit = 7, 638 .mnctr_mode_shift = 5, 639 .n_val_shift = 16, 640 .m_val_shift = 16, 641 .width = 16, 642 }, 643 .p = { 644 .pre_div_shift = 3, 645 .pre_div_width = 2, 646 }, 647 .s = { 648 .src_sel_shift = 0, 649 .parent_map = gcc_pxo_pll8_map, 650 }, 651 .freq_tbl = clk_tbl_gsbi_uart, 652 .clkr = { 653 .enable_reg = 0x2a94, 654 .enable_mask = BIT(11), 655 .hw.init = &(struct clk_init_data){ 656 .name = "gsbi7_uart_src", 657 .parent_names = gcc_pxo_pll8, 658 .num_parents = 2, 659 .ops = &clk_rcg_ops, 660 .flags = CLK_SET_PARENT_GATE, 661 }, 662 }, 663 }; 664 665 static struct clk_branch gsbi7_uart_clk = { 666 .halt_reg = 0x2fd0, 667 .halt_bit = 14, 668 .clkr = { 669 .enable_reg = 0x2a94, 670 .enable_mask = BIT(9), 671 .hw.init = &(struct clk_init_data){ 672 .name = "gsbi7_uart_clk", 673 .parent_names = (const char *[]){ 674 "gsbi7_uart_src", 675 }, 676 .num_parents = 1, 677 .ops = &clk_branch_ops, 678 .flags = CLK_SET_RATE_PARENT, 679 }, 680 }, 681 }; 682 683 static struct clk_rcg gsbi8_uart_src = { 684 .ns_reg = 0x2ab4, 685 .md_reg = 0x2ab0, 686 .mn = { 687 .mnctr_en_bit = 8, 688 .mnctr_reset_bit = 7, 689 .mnctr_mode_shift = 5, 690 .n_val_shift = 16, 691 .m_val_shift = 16, 692 .width = 16, 693 }, 694 .p = { 695 .pre_div_shift = 3, 696 .pre_div_width = 2, 697 }, 698 .s = { 699 .src_sel_shift = 0, 700 .parent_map = gcc_pxo_pll8_map, 701 }, 702 .freq_tbl = clk_tbl_gsbi_uart, 703 .clkr = { 704 .enable_reg = 0x2ab4, 705 .enable_mask = BIT(11), 706 .hw.init = &(struct clk_init_data){ 707 .name = "gsbi8_uart_src", 708 .parent_names = gcc_pxo_pll8, 709 .num_parents = 2, 710 .ops = &clk_rcg_ops, 711 .flags = CLK_SET_PARENT_GATE, 712 }, 713 }, 714 }; 715 716 static struct clk_branch gsbi8_uart_clk = { 717 .halt_reg = 0x2fd0, 718 .halt_bit = 10, 719 .clkr = { 720 .enable_reg = 0x2ab4, 721 .enable_mask = BIT(9), 722 .hw.init = &(struct clk_init_data){ 723 .name = "gsbi8_uart_clk", 724 .parent_names = (const char *[]){ "gsbi8_uart_src" }, 725 .num_parents = 1, 726 .ops = &clk_branch_ops, 727 .flags = CLK_SET_RATE_PARENT, 728 }, 729 }, 730 }; 731 732 static struct clk_rcg gsbi9_uart_src = { 733 .ns_reg = 0x2ad4, 734 .md_reg = 0x2ad0, 735 .mn = { 736 .mnctr_en_bit = 8, 737 .mnctr_reset_bit = 7, 738 .mnctr_mode_shift = 5, 739 .n_val_shift = 16, 740 .m_val_shift = 16, 741 .width = 16, 742 }, 743 .p = { 744 .pre_div_shift = 3, 745 .pre_div_width = 2, 746 }, 747 .s = { 748 .src_sel_shift = 0, 749 .parent_map = gcc_pxo_pll8_map, 750 }, 751 .freq_tbl = clk_tbl_gsbi_uart, 752 .clkr = { 753 .enable_reg = 0x2ad4, 754 .enable_mask = BIT(11), 755 .hw.init = &(struct clk_init_data){ 756 .name = "gsbi9_uart_src", 757 .parent_names = gcc_pxo_pll8, 758 .num_parents = 2, 759 .ops = &clk_rcg_ops, 760 .flags = CLK_SET_PARENT_GATE, 761 }, 762 }, 763 }; 764 765 static struct clk_branch gsbi9_uart_clk = { 766 .halt_reg = 0x2fd0, 767 .halt_bit = 6, 768 .clkr = { 769 .enable_reg = 0x2ad4, 770 .enable_mask = BIT(9), 771 .hw.init = &(struct clk_init_data){ 772 .name = "gsbi9_uart_clk", 773 .parent_names = (const char *[]){ "gsbi9_uart_src" }, 774 .num_parents = 1, 775 .ops = &clk_branch_ops, 776 .flags = CLK_SET_RATE_PARENT, 777 }, 778 }, 779 }; 780 781 static struct clk_rcg gsbi10_uart_src = { 782 .ns_reg = 0x2af4, 783 .md_reg = 0x2af0, 784 .mn = { 785 .mnctr_en_bit = 8, 786 .mnctr_reset_bit = 7, 787 .mnctr_mode_shift = 5, 788 .n_val_shift = 16, 789 .m_val_shift = 16, 790 .width = 16, 791 }, 792 .p = { 793 .pre_div_shift = 3, 794 .pre_div_width = 2, 795 }, 796 .s = { 797 .src_sel_shift = 0, 798 .parent_map = gcc_pxo_pll8_map, 799 }, 800 .freq_tbl = clk_tbl_gsbi_uart, 801 .clkr = { 802 .enable_reg = 0x2af4, 803 .enable_mask = BIT(11), 804 .hw.init = &(struct clk_init_data){ 805 .name = "gsbi10_uart_src", 806 .parent_names = gcc_pxo_pll8, 807 .num_parents = 2, 808 .ops = &clk_rcg_ops, 809 .flags = CLK_SET_PARENT_GATE, 810 }, 811 }, 812 }; 813 814 static struct clk_branch gsbi10_uart_clk = { 815 .halt_reg = 0x2fd0, 816 .halt_bit = 2, 817 .clkr = { 818 .enable_reg = 0x2af4, 819 .enable_mask = BIT(9), 820 .hw.init = &(struct clk_init_data){ 821 .name = "gsbi10_uart_clk", 822 .parent_names = (const char *[]){ "gsbi10_uart_src" }, 823 .num_parents = 1, 824 .ops = &clk_branch_ops, 825 .flags = CLK_SET_RATE_PARENT, 826 }, 827 }, 828 }; 829 830 static struct clk_rcg gsbi11_uart_src = { 831 .ns_reg = 0x2b14, 832 .md_reg = 0x2b10, 833 .mn = { 834 .mnctr_en_bit = 8, 835 .mnctr_reset_bit = 7, 836 .mnctr_mode_shift = 5, 837 .n_val_shift = 16, 838 .m_val_shift = 16, 839 .width = 16, 840 }, 841 .p = { 842 .pre_div_shift = 3, 843 .pre_div_width = 2, 844 }, 845 .s = { 846 .src_sel_shift = 0, 847 .parent_map = gcc_pxo_pll8_map, 848 }, 849 .freq_tbl = clk_tbl_gsbi_uart, 850 .clkr = { 851 .enable_reg = 0x2b14, 852 .enable_mask = BIT(11), 853 .hw.init = &(struct clk_init_data){ 854 .name = "gsbi11_uart_src", 855 .parent_names = gcc_pxo_pll8, 856 .num_parents = 2, 857 .ops = &clk_rcg_ops, 858 .flags = CLK_SET_PARENT_GATE, 859 }, 860 }, 861 }; 862 863 static struct clk_branch gsbi11_uart_clk = { 864 .halt_reg = 0x2fd4, 865 .halt_bit = 17, 866 .clkr = { 867 .enable_reg = 0x2b14, 868 .enable_mask = BIT(9), 869 .hw.init = &(struct clk_init_data){ 870 .name = "gsbi11_uart_clk", 871 .parent_names = (const char *[]){ "gsbi11_uart_src" }, 872 .num_parents = 1, 873 .ops = &clk_branch_ops, 874 .flags = CLK_SET_RATE_PARENT, 875 }, 876 }, 877 }; 878 879 static struct clk_rcg gsbi12_uart_src = { 880 .ns_reg = 0x2b34, 881 .md_reg = 0x2b30, 882 .mn = { 883 .mnctr_en_bit = 8, 884 .mnctr_reset_bit = 7, 885 .mnctr_mode_shift = 5, 886 .n_val_shift = 16, 887 .m_val_shift = 16, 888 .width = 16, 889 }, 890 .p = { 891 .pre_div_shift = 3, 892 .pre_div_width = 2, 893 }, 894 .s = { 895 .src_sel_shift = 0, 896 .parent_map = gcc_pxo_pll8_map, 897 }, 898 .freq_tbl = clk_tbl_gsbi_uart, 899 .clkr = { 900 .enable_reg = 0x2b34, 901 .enable_mask = BIT(11), 902 .hw.init = &(struct clk_init_data){ 903 .name = "gsbi12_uart_src", 904 .parent_names = gcc_pxo_pll8, 905 .num_parents = 2, 906 .ops = &clk_rcg_ops, 907 .flags = CLK_SET_PARENT_GATE, 908 }, 909 }, 910 }; 911 912 static struct clk_branch gsbi12_uart_clk = { 913 .halt_reg = 0x2fd4, 914 .halt_bit = 13, 915 .clkr = { 916 .enable_reg = 0x2b34, 917 .enable_mask = BIT(9), 918 .hw.init = &(struct clk_init_data){ 919 .name = "gsbi12_uart_clk", 920 .parent_names = (const char *[]){ "gsbi12_uart_src" }, 921 .num_parents = 1, 922 .ops = &clk_branch_ops, 923 .flags = CLK_SET_RATE_PARENT, 924 }, 925 }, 926 }; 927 928 static struct freq_tbl clk_tbl_gsbi_qup[] = { 929 { 1100000, P_PXO, 1, 2, 49 }, 930 { 5400000, P_PXO, 1, 1, 5 }, 931 { 10800000, P_PXO, 1, 2, 5 }, 932 { 15060000, P_PLL8, 1, 2, 51 }, 933 { 24000000, P_PLL8, 4, 1, 4 }, 934 { 25600000, P_PLL8, 1, 1, 15 }, 935 { 27000000, P_PXO, 1, 0, 0 }, 936 { 48000000, P_PLL8, 4, 1, 2 }, 937 { 51200000, P_PLL8, 1, 2, 15 }, 938 { } 939 }; 940 941 static struct clk_rcg gsbi1_qup_src = { 942 .ns_reg = 0x29cc, 943 .md_reg = 0x29c8, 944 .mn = { 945 .mnctr_en_bit = 8, 946 .mnctr_reset_bit = 7, 947 .mnctr_mode_shift = 5, 948 .n_val_shift = 16, 949 .m_val_shift = 16, 950 .width = 8, 951 }, 952 .p = { 953 .pre_div_shift = 3, 954 .pre_div_width = 2, 955 }, 956 .s = { 957 .src_sel_shift = 0, 958 .parent_map = gcc_pxo_pll8_map, 959 }, 960 .freq_tbl = clk_tbl_gsbi_qup, 961 .clkr = { 962 .enable_reg = 0x29cc, 963 .enable_mask = BIT(11), 964 .hw.init = &(struct clk_init_data){ 965 .name = "gsbi1_qup_src", 966 .parent_names = gcc_pxo_pll8, 967 .num_parents = 2, 968 .ops = &clk_rcg_ops, 969 .flags = CLK_SET_PARENT_GATE, 970 }, 971 }, 972 }; 973 974 static struct clk_branch gsbi1_qup_clk = { 975 .halt_reg = 0x2fcc, 976 .halt_bit = 9, 977 .clkr = { 978 .enable_reg = 0x29cc, 979 .enable_mask = BIT(9), 980 .hw.init = &(struct clk_init_data){ 981 .name = "gsbi1_qup_clk", 982 .parent_names = (const char *[]){ "gsbi1_qup_src" }, 983 .num_parents = 1, 984 .ops = &clk_branch_ops, 985 .flags = CLK_SET_RATE_PARENT, 986 }, 987 }, 988 }; 989 990 static struct clk_rcg gsbi2_qup_src = { 991 .ns_reg = 0x29ec, 992 .md_reg = 0x29e8, 993 .mn = { 994 .mnctr_en_bit = 8, 995 .mnctr_reset_bit = 7, 996 .mnctr_mode_shift = 5, 997 .n_val_shift = 16, 998 .m_val_shift = 16, 999 .width = 8, 1000 }, 1001 .p = { 1002 .pre_div_shift = 3, 1003 .pre_div_width = 2, 1004 }, 1005 .s = { 1006 .src_sel_shift = 0, 1007 .parent_map = gcc_pxo_pll8_map, 1008 }, 1009 .freq_tbl = clk_tbl_gsbi_qup, 1010 .clkr = { 1011 .enable_reg = 0x29ec, 1012 .enable_mask = BIT(11), 1013 .hw.init = &(struct clk_init_data){ 1014 .name = "gsbi2_qup_src", 1015 .parent_names = gcc_pxo_pll8, 1016 .num_parents = 2, 1017 .ops = &clk_rcg_ops, 1018 .flags = CLK_SET_PARENT_GATE, 1019 }, 1020 }, 1021 }; 1022 1023 static struct clk_branch gsbi2_qup_clk = { 1024 .halt_reg = 0x2fcc, 1025 .halt_bit = 4, 1026 .clkr = { 1027 .enable_reg = 0x29ec, 1028 .enable_mask = BIT(9), 1029 .hw.init = &(struct clk_init_data){ 1030 .name = "gsbi2_qup_clk", 1031 .parent_names = (const char *[]){ "gsbi2_qup_src" }, 1032 .num_parents = 1, 1033 .ops = &clk_branch_ops, 1034 .flags = CLK_SET_RATE_PARENT, 1035 }, 1036 }, 1037 }; 1038 1039 static struct clk_rcg gsbi3_qup_src = { 1040 .ns_reg = 0x2a0c, 1041 .md_reg = 0x2a08, 1042 .mn = { 1043 .mnctr_en_bit = 8, 1044 .mnctr_reset_bit = 7, 1045 .mnctr_mode_shift = 5, 1046 .n_val_shift = 16, 1047 .m_val_shift = 16, 1048 .width = 8, 1049 }, 1050 .p = { 1051 .pre_div_shift = 3, 1052 .pre_div_width = 2, 1053 }, 1054 .s = { 1055 .src_sel_shift = 0, 1056 .parent_map = gcc_pxo_pll8_map, 1057 }, 1058 .freq_tbl = clk_tbl_gsbi_qup, 1059 .clkr = { 1060 .enable_reg = 0x2a0c, 1061 .enable_mask = BIT(11), 1062 .hw.init = &(struct clk_init_data){ 1063 .name = "gsbi3_qup_src", 1064 .parent_names = gcc_pxo_pll8, 1065 .num_parents = 2, 1066 .ops = &clk_rcg_ops, 1067 .flags = CLK_SET_PARENT_GATE, 1068 }, 1069 }, 1070 }; 1071 1072 static struct clk_branch gsbi3_qup_clk = { 1073 .halt_reg = 0x2fcc, 1074 .halt_bit = 0, 1075 .clkr = { 1076 .enable_reg = 0x2a0c, 1077 .enable_mask = BIT(9), 1078 .hw.init = &(struct clk_init_data){ 1079 .name = "gsbi3_qup_clk", 1080 .parent_names = (const char *[]){ "gsbi3_qup_src" }, 1081 .num_parents = 1, 1082 .ops = &clk_branch_ops, 1083 .flags = CLK_SET_RATE_PARENT, 1084 }, 1085 }, 1086 }; 1087 1088 static struct clk_rcg gsbi4_qup_src = { 1089 .ns_reg = 0x2a2c, 1090 .md_reg = 0x2a28, 1091 .mn = { 1092 .mnctr_en_bit = 8, 1093 .mnctr_reset_bit = 7, 1094 .mnctr_mode_shift = 5, 1095 .n_val_shift = 16, 1096 .m_val_shift = 16, 1097 .width = 8, 1098 }, 1099 .p = { 1100 .pre_div_shift = 3, 1101 .pre_div_width = 2, 1102 }, 1103 .s = { 1104 .src_sel_shift = 0, 1105 .parent_map = gcc_pxo_pll8_map, 1106 }, 1107 .freq_tbl = clk_tbl_gsbi_qup, 1108 .clkr = { 1109 .enable_reg = 0x2a2c, 1110 .enable_mask = BIT(11), 1111 .hw.init = &(struct clk_init_data){ 1112 .name = "gsbi4_qup_src", 1113 .parent_names = gcc_pxo_pll8, 1114 .num_parents = 2, 1115 .ops = &clk_rcg_ops, 1116 .flags = CLK_SET_PARENT_GATE, 1117 }, 1118 }, 1119 }; 1120 1121 static struct clk_branch gsbi4_qup_clk = { 1122 .halt_reg = 0x2fd0, 1123 .halt_bit = 24, 1124 .clkr = { 1125 .enable_reg = 0x2a2c, 1126 .enable_mask = BIT(9), 1127 .hw.init = &(struct clk_init_data){ 1128 .name = "gsbi4_qup_clk", 1129 .parent_names = (const char *[]){ "gsbi4_qup_src" }, 1130 .num_parents = 1, 1131 .ops = &clk_branch_ops, 1132 .flags = CLK_SET_RATE_PARENT, 1133 }, 1134 }, 1135 }; 1136 1137 static struct clk_rcg gsbi5_qup_src = { 1138 .ns_reg = 0x2a4c, 1139 .md_reg = 0x2a48, 1140 .mn = { 1141 .mnctr_en_bit = 8, 1142 .mnctr_reset_bit = 7, 1143 .mnctr_mode_shift = 5, 1144 .n_val_shift = 16, 1145 .m_val_shift = 16, 1146 .width = 8, 1147 }, 1148 .p = { 1149 .pre_div_shift = 3, 1150 .pre_div_width = 2, 1151 }, 1152 .s = { 1153 .src_sel_shift = 0, 1154 .parent_map = gcc_pxo_pll8_map, 1155 }, 1156 .freq_tbl = clk_tbl_gsbi_qup, 1157 .clkr = { 1158 .enable_reg = 0x2a4c, 1159 .enable_mask = BIT(11), 1160 .hw.init = &(struct clk_init_data){ 1161 .name = "gsbi5_qup_src", 1162 .parent_names = gcc_pxo_pll8, 1163 .num_parents = 2, 1164 .ops = &clk_rcg_ops, 1165 .flags = CLK_SET_PARENT_GATE, 1166 }, 1167 }, 1168 }; 1169 1170 static struct clk_branch gsbi5_qup_clk = { 1171 .halt_reg = 0x2fd0, 1172 .halt_bit = 20, 1173 .clkr = { 1174 .enable_reg = 0x2a4c, 1175 .enable_mask = BIT(9), 1176 .hw.init = &(struct clk_init_data){ 1177 .name = "gsbi5_qup_clk", 1178 .parent_names = (const char *[]){ "gsbi5_qup_src" }, 1179 .num_parents = 1, 1180 .ops = &clk_branch_ops, 1181 .flags = CLK_SET_RATE_PARENT, 1182 }, 1183 }, 1184 }; 1185 1186 static struct clk_rcg gsbi6_qup_src = { 1187 .ns_reg = 0x2a6c, 1188 .md_reg = 0x2a68, 1189 .mn = { 1190 .mnctr_en_bit = 8, 1191 .mnctr_reset_bit = 7, 1192 .mnctr_mode_shift = 5, 1193 .n_val_shift = 16, 1194 .m_val_shift = 16, 1195 .width = 8, 1196 }, 1197 .p = { 1198 .pre_div_shift = 3, 1199 .pre_div_width = 2, 1200 }, 1201 .s = { 1202 .src_sel_shift = 0, 1203 .parent_map = gcc_pxo_pll8_map, 1204 }, 1205 .freq_tbl = clk_tbl_gsbi_qup, 1206 .clkr = { 1207 .enable_reg = 0x2a6c, 1208 .enable_mask = BIT(11), 1209 .hw.init = &(struct clk_init_data){ 1210 .name = "gsbi6_qup_src", 1211 .parent_names = gcc_pxo_pll8, 1212 .num_parents = 2, 1213 .ops = &clk_rcg_ops, 1214 .flags = CLK_SET_PARENT_GATE, 1215 }, 1216 }, 1217 }; 1218 1219 static struct clk_branch gsbi6_qup_clk = { 1220 .halt_reg = 0x2fd0, 1221 .halt_bit = 16, 1222 .clkr = { 1223 .enable_reg = 0x2a6c, 1224 .enable_mask = BIT(9), 1225 .hw.init = &(struct clk_init_data){ 1226 .name = "gsbi6_qup_clk", 1227 .parent_names = (const char *[]){ "gsbi6_qup_src" }, 1228 .num_parents = 1, 1229 .ops = &clk_branch_ops, 1230 .flags = CLK_SET_RATE_PARENT, 1231 }, 1232 }, 1233 }; 1234 1235 static struct clk_rcg gsbi7_qup_src = { 1236 .ns_reg = 0x2a8c, 1237 .md_reg = 0x2a88, 1238 .mn = { 1239 .mnctr_en_bit = 8, 1240 .mnctr_reset_bit = 7, 1241 .mnctr_mode_shift = 5, 1242 .n_val_shift = 16, 1243 .m_val_shift = 16, 1244 .width = 8, 1245 }, 1246 .p = { 1247 .pre_div_shift = 3, 1248 .pre_div_width = 2, 1249 }, 1250 .s = { 1251 .src_sel_shift = 0, 1252 .parent_map = gcc_pxo_pll8_map, 1253 }, 1254 .freq_tbl = clk_tbl_gsbi_qup, 1255 .clkr = { 1256 .enable_reg = 0x2a8c, 1257 .enable_mask = BIT(11), 1258 .hw.init = &(struct clk_init_data){ 1259 .name = "gsbi7_qup_src", 1260 .parent_names = gcc_pxo_pll8, 1261 .num_parents = 2, 1262 .ops = &clk_rcg_ops, 1263 .flags = CLK_SET_PARENT_GATE, 1264 }, 1265 }, 1266 }; 1267 1268 static struct clk_branch gsbi7_qup_clk = { 1269 .halt_reg = 0x2fd0, 1270 .halt_bit = 12, 1271 .clkr = { 1272 .enable_reg = 0x2a8c, 1273 .enable_mask = BIT(9), 1274 .hw.init = &(struct clk_init_data){ 1275 .name = "gsbi7_qup_clk", 1276 .parent_names = (const char *[]){ "gsbi7_qup_src" }, 1277 .num_parents = 1, 1278 .ops = &clk_branch_ops, 1279 .flags = CLK_SET_RATE_PARENT, 1280 }, 1281 }, 1282 }; 1283 1284 static struct clk_rcg gsbi8_qup_src = { 1285 .ns_reg = 0x2aac, 1286 .md_reg = 0x2aa8, 1287 .mn = { 1288 .mnctr_en_bit = 8, 1289 .mnctr_reset_bit = 7, 1290 .mnctr_mode_shift = 5, 1291 .n_val_shift = 16, 1292 .m_val_shift = 16, 1293 .width = 8, 1294 }, 1295 .p = { 1296 .pre_div_shift = 3, 1297 .pre_div_width = 2, 1298 }, 1299 .s = { 1300 .src_sel_shift = 0, 1301 .parent_map = gcc_pxo_pll8_map, 1302 }, 1303 .freq_tbl = clk_tbl_gsbi_qup, 1304 .clkr = { 1305 .enable_reg = 0x2aac, 1306 .enable_mask = BIT(11), 1307 .hw.init = &(struct clk_init_data){ 1308 .name = "gsbi8_qup_src", 1309 .parent_names = gcc_pxo_pll8, 1310 .num_parents = 2, 1311 .ops = &clk_rcg_ops, 1312 .flags = CLK_SET_PARENT_GATE, 1313 }, 1314 }, 1315 }; 1316 1317 static struct clk_branch gsbi8_qup_clk = { 1318 .halt_reg = 0x2fd0, 1319 .halt_bit = 8, 1320 .clkr = { 1321 .enable_reg = 0x2aac, 1322 .enable_mask = BIT(9), 1323 .hw.init = &(struct clk_init_data){ 1324 .name = "gsbi8_qup_clk", 1325 .parent_names = (const char *[]){ "gsbi8_qup_src" }, 1326 .num_parents = 1, 1327 .ops = &clk_branch_ops, 1328 .flags = CLK_SET_RATE_PARENT, 1329 }, 1330 }, 1331 }; 1332 1333 static struct clk_rcg gsbi9_qup_src = { 1334 .ns_reg = 0x2acc, 1335 .md_reg = 0x2ac8, 1336 .mn = { 1337 .mnctr_en_bit = 8, 1338 .mnctr_reset_bit = 7, 1339 .mnctr_mode_shift = 5, 1340 .n_val_shift = 16, 1341 .m_val_shift = 16, 1342 .width = 8, 1343 }, 1344 .p = { 1345 .pre_div_shift = 3, 1346 .pre_div_width = 2, 1347 }, 1348 .s = { 1349 .src_sel_shift = 0, 1350 .parent_map = gcc_pxo_pll8_map, 1351 }, 1352 .freq_tbl = clk_tbl_gsbi_qup, 1353 .clkr = { 1354 .enable_reg = 0x2acc, 1355 .enable_mask = BIT(11), 1356 .hw.init = &(struct clk_init_data){ 1357 .name = "gsbi9_qup_src", 1358 .parent_names = gcc_pxo_pll8, 1359 .num_parents = 2, 1360 .ops = &clk_rcg_ops, 1361 .flags = CLK_SET_PARENT_GATE, 1362 }, 1363 }, 1364 }; 1365 1366 static struct clk_branch gsbi9_qup_clk = { 1367 .halt_reg = 0x2fd0, 1368 .halt_bit = 4, 1369 .clkr = { 1370 .enable_reg = 0x2acc, 1371 .enable_mask = BIT(9), 1372 .hw.init = &(struct clk_init_data){ 1373 .name = "gsbi9_qup_clk", 1374 .parent_names = (const char *[]){ "gsbi9_qup_src" }, 1375 .num_parents = 1, 1376 .ops = &clk_branch_ops, 1377 .flags = CLK_SET_RATE_PARENT, 1378 }, 1379 }, 1380 }; 1381 1382 static struct clk_rcg gsbi10_qup_src = { 1383 .ns_reg = 0x2aec, 1384 .md_reg = 0x2ae8, 1385 .mn = { 1386 .mnctr_en_bit = 8, 1387 .mnctr_reset_bit = 7, 1388 .mnctr_mode_shift = 5, 1389 .n_val_shift = 16, 1390 .m_val_shift = 16, 1391 .width = 8, 1392 }, 1393 .p = { 1394 .pre_div_shift = 3, 1395 .pre_div_width = 2, 1396 }, 1397 .s = { 1398 .src_sel_shift = 0, 1399 .parent_map = gcc_pxo_pll8_map, 1400 }, 1401 .freq_tbl = clk_tbl_gsbi_qup, 1402 .clkr = { 1403 .enable_reg = 0x2aec, 1404 .enable_mask = BIT(11), 1405 .hw.init = &(struct clk_init_data){ 1406 .name = "gsbi10_qup_src", 1407 .parent_names = gcc_pxo_pll8, 1408 .num_parents = 2, 1409 .ops = &clk_rcg_ops, 1410 .flags = CLK_SET_PARENT_GATE, 1411 }, 1412 }, 1413 }; 1414 1415 static struct clk_branch gsbi10_qup_clk = { 1416 .halt_reg = 0x2fd0, 1417 .halt_bit = 0, 1418 .clkr = { 1419 .enable_reg = 0x2aec, 1420 .enable_mask = BIT(9), 1421 .hw.init = &(struct clk_init_data){ 1422 .name = "gsbi10_qup_clk", 1423 .parent_names = (const char *[]){ "gsbi10_qup_src" }, 1424 .num_parents = 1, 1425 .ops = &clk_branch_ops, 1426 .flags = CLK_SET_RATE_PARENT, 1427 }, 1428 }, 1429 }; 1430 1431 static struct clk_rcg gsbi11_qup_src = { 1432 .ns_reg = 0x2b0c, 1433 .md_reg = 0x2b08, 1434 .mn = { 1435 .mnctr_en_bit = 8, 1436 .mnctr_reset_bit = 7, 1437 .mnctr_mode_shift = 5, 1438 .n_val_shift = 16, 1439 .m_val_shift = 16, 1440 .width = 8, 1441 }, 1442 .p = { 1443 .pre_div_shift = 3, 1444 .pre_div_width = 2, 1445 }, 1446 .s = { 1447 .src_sel_shift = 0, 1448 .parent_map = gcc_pxo_pll8_map, 1449 }, 1450 .freq_tbl = clk_tbl_gsbi_qup, 1451 .clkr = { 1452 .enable_reg = 0x2b0c, 1453 .enable_mask = BIT(11), 1454 .hw.init = &(struct clk_init_data){ 1455 .name = "gsbi11_qup_src", 1456 .parent_names = gcc_pxo_pll8, 1457 .num_parents = 2, 1458 .ops = &clk_rcg_ops, 1459 .flags = CLK_SET_PARENT_GATE, 1460 }, 1461 }, 1462 }; 1463 1464 static struct clk_branch gsbi11_qup_clk = { 1465 .halt_reg = 0x2fd4, 1466 .halt_bit = 15, 1467 .clkr = { 1468 .enable_reg = 0x2b0c, 1469 .enable_mask = BIT(9), 1470 .hw.init = &(struct clk_init_data){ 1471 .name = "gsbi11_qup_clk", 1472 .parent_names = (const char *[]){ "gsbi11_qup_src" }, 1473 .num_parents = 1, 1474 .ops = &clk_branch_ops, 1475 .flags = CLK_SET_RATE_PARENT, 1476 }, 1477 }, 1478 }; 1479 1480 static struct clk_rcg gsbi12_qup_src = { 1481 .ns_reg = 0x2b2c, 1482 .md_reg = 0x2b28, 1483 .mn = { 1484 .mnctr_en_bit = 8, 1485 .mnctr_reset_bit = 7, 1486 .mnctr_mode_shift = 5, 1487 .n_val_shift = 16, 1488 .m_val_shift = 16, 1489 .width = 8, 1490 }, 1491 .p = { 1492 .pre_div_shift = 3, 1493 .pre_div_width = 2, 1494 }, 1495 .s = { 1496 .src_sel_shift = 0, 1497 .parent_map = gcc_pxo_pll8_map, 1498 }, 1499 .freq_tbl = clk_tbl_gsbi_qup, 1500 .clkr = { 1501 .enable_reg = 0x2b2c, 1502 .enable_mask = BIT(11), 1503 .hw.init = &(struct clk_init_data){ 1504 .name = "gsbi12_qup_src", 1505 .parent_names = gcc_pxo_pll8, 1506 .num_parents = 2, 1507 .ops = &clk_rcg_ops, 1508 .flags = CLK_SET_PARENT_GATE, 1509 }, 1510 }, 1511 }; 1512 1513 static struct clk_branch gsbi12_qup_clk = { 1514 .halt_reg = 0x2fd4, 1515 .halt_bit = 11, 1516 .clkr = { 1517 .enable_reg = 0x2b2c, 1518 .enable_mask = BIT(9), 1519 .hw.init = &(struct clk_init_data){ 1520 .name = "gsbi12_qup_clk", 1521 .parent_names = (const char *[]){ "gsbi12_qup_src" }, 1522 .num_parents = 1, 1523 .ops = &clk_branch_ops, 1524 .flags = CLK_SET_RATE_PARENT, 1525 }, 1526 }, 1527 }; 1528 1529 static const struct freq_tbl clk_tbl_gp[] = { 1530 { 9600000, P_CXO, 2, 0, 0 }, 1531 { 13500000, P_PXO, 2, 0, 0 }, 1532 { 19200000, P_CXO, 1, 0, 0 }, 1533 { 27000000, P_PXO, 1, 0, 0 }, 1534 { 64000000, P_PLL8, 2, 1, 3 }, 1535 { 76800000, P_PLL8, 1, 1, 5 }, 1536 { 96000000, P_PLL8, 4, 0, 0 }, 1537 { 128000000, P_PLL8, 3, 0, 0 }, 1538 { 192000000, P_PLL8, 2, 0, 0 }, 1539 { } 1540 }; 1541 1542 static struct clk_rcg gp0_src = { 1543 .ns_reg = 0x2d24, 1544 .md_reg = 0x2d00, 1545 .mn = { 1546 .mnctr_en_bit = 8, 1547 .mnctr_reset_bit = 7, 1548 .mnctr_mode_shift = 5, 1549 .n_val_shift = 16, 1550 .m_val_shift = 16, 1551 .width = 8, 1552 }, 1553 .p = { 1554 .pre_div_shift = 3, 1555 .pre_div_width = 2, 1556 }, 1557 .s = { 1558 .src_sel_shift = 0, 1559 .parent_map = gcc_pxo_pll8_cxo_map, 1560 }, 1561 .freq_tbl = clk_tbl_gp, 1562 .clkr = { 1563 .enable_reg = 0x2d24, 1564 .enable_mask = BIT(11), 1565 .hw.init = &(struct clk_init_data){ 1566 .name = "gp0_src", 1567 .parent_names = gcc_pxo_pll8_cxo, 1568 .num_parents = 3, 1569 .ops = &clk_rcg_ops, 1570 .flags = CLK_SET_PARENT_GATE, 1571 }, 1572 } 1573 }; 1574 1575 static struct clk_branch gp0_clk = { 1576 .halt_reg = 0x2fd8, 1577 .halt_bit = 7, 1578 .clkr = { 1579 .enable_reg = 0x2d24, 1580 .enable_mask = BIT(9), 1581 .hw.init = &(struct clk_init_data){ 1582 .name = "gp0_clk", 1583 .parent_names = (const char *[]){ "gp0_src" }, 1584 .num_parents = 1, 1585 .ops = &clk_branch_ops, 1586 .flags = CLK_SET_RATE_PARENT, 1587 }, 1588 }, 1589 }; 1590 1591 static struct clk_rcg gp1_src = { 1592 .ns_reg = 0x2d44, 1593 .md_reg = 0x2d40, 1594 .mn = { 1595 .mnctr_en_bit = 8, 1596 .mnctr_reset_bit = 7, 1597 .mnctr_mode_shift = 5, 1598 .n_val_shift = 16, 1599 .m_val_shift = 16, 1600 .width = 8, 1601 }, 1602 .p = { 1603 .pre_div_shift = 3, 1604 .pre_div_width = 2, 1605 }, 1606 .s = { 1607 .src_sel_shift = 0, 1608 .parent_map = gcc_pxo_pll8_cxo_map, 1609 }, 1610 .freq_tbl = clk_tbl_gp, 1611 .clkr = { 1612 .enable_reg = 0x2d44, 1613 .enable_mask = BIT(11), 1614 .hw.init = &(struct clk_init_data){ 1615 .name = "gp1_src", 1616 .parent_names = gcc_pxo_pll8_cxo, 1617 .num_parents = 3, 1618 .ops = &clk_rcg_ops, 1619 .flags = CLK_SET_RATE_GATE, 1620 }, 1621 } 1622 }; 1623 1624 static struct clk_branch gp1_clk = { 1625 .halt_reg = 0x2fd8, 1626 .halt_bit = 6, 1627 .clkr = { 1628 .enable_reg = 0x2d44, 1629 .enable_mask = BIT(9), 1630 .hw.init = &(struct clk_init_data){ 1631 .name = "gp1_clk", 1632 .parent_names = (const char *[]){ "gp1_src" }, 1633 .num_parents = 1, 1634 .ops = &clk_branch_ops, 1635 .flags = CLK_SET_RATE_PARENT, 1636 }, 1637 }, 1638 }; 1639 1640 static struct clk_rcg gp2_src = { 1641 .ns_reg = 0x2d64, 1642 .md_reg = 0x2d60, 1643 .mn = { 1644 .mnctr_en_bit = 8, 1645 .mnctr_reset_bit = 7, 1646 .mnctr_mode_shift = 5, 1647 .n_val_shift = 16, 1648 .m_val_shift = 16, 1649 .width = 8, 1650 }, 1651 .p = { 1652 .pre_div_shift = 3, 1653 .pre_div_width = 2, 1654 }, 1655 .s = { 1656 .src_sel_shift = 0, 1657 .parent_map = gcc_pxo_pll8_cxo_map, 1658 }, 1659 .freq_tbl = clk_tbl_gp, 1660 .clkr = { 1661 .enable_reg = 0x2d64, 1662 .enable_mask = BIT(11), 1663 .hw.init = &(struct clk_init_data){ 1664 .name = "gp2_src", 1665 .parent_names = gcc_pxo_pll8_cxo, 1666 .num_parents = 3, 1667 .ops = &clk_rcg_ops, 1668 .flags = CLK_SET_RATE_GATE, 1669 }, 1670 } 1671 }; 1672 1673 static struct clk_branch gp2_clk = { 1674 .halt_reg = 0x2fd8, 1675 .halt_bit = 5, 1676 .clkr = { 1677 .enable_reg = 0x2d64, 1678 .enable_mask = BIT(9), 1679 .hw.init = &(struct clk_init_data){ 1680 .name = "gp2_clk", 1681 .parent_names = (const char *[]){ "gp2_src" }, 1682 .num_parents = 1, 1683 .ops = &clk_branch_ops, 1684 .flags = CLK_SET_RATE_PARENT, 1685 }, 1686 }, 1687 }; 1688 1689 static struct clk_branch pmem_clk = { 1690 .hwcg_reg = 0x25a0, 1691 .hwcg_bit = 6, 1692 .halt_reg = 0x2fc8, 1693 .halt_bit = 20, 1694 .clkr = { 1695 .enable_reg = 0x25a0, 1696 .enable_mask = BIT(4), 1697 .hw.init = &(struct clk_init_data){ 1698 .name = "pmem_clk", 1699 .ops = &clk_branch_ops, 1700 }, 1701 }, 1702 }; 1703 1704 static struct clk_rcg prng_src = { 1705 .ns_reg = 0x2e80, 1706 .p = { 1707 .pre_div_shift = 3, 1708 .pre_div_width = 4, 1709 }, 1710 .s = { 1711 .src_sel_shift = 0, 1712 .parent_map = gcc_pxo_pll8_map, 1713 }, 1714 .clkr = { 1715 .hw.init = &(struct clk_init_data){ 1716 .name = "prng_src", 1717 .parent_names = gcc_pxo_pll8, 1718 .num_parents = 2, 1719 .ops = &clk_rcg_ops, 1720 }, 1721 }, 1722 }; 1723 1724 static struct clk_branch prng_clk = { 1725 .halt_reg = 0x2fd8, 1726 .halt_check = BRANCH_HALT_VOTED, 1727 .halt_bit = 10, 1728 .clkr = { 1729 .enable_reg = 0x3080, 1730 .enable_mask = BIT(10), 1731 .hw.init = &(struct clk_init_data){ 1732 .name = "prng_clk", 1733 .parent_names = (const char *[]){ "prng_src" }, 1734 .num_parents = 1, 1735 .ops = &clk_branch_ops, 1736 }, 1737 }, 1738 }; 1739 1740 static const struct freq_tbl clk_tbl_sdc[] = { 1741 { 144000, P_PXO, 3, 2, 125 }, 1742 { 400000, P_PLL8, 4, 1, 240 }, 1743 { 16000000, P_PLL8, 4, 1, 6 }, 1744 { 17070000, P_PLL8, 1, 2, 45 }, 1745 { 20210000, P_PLL8, 1, 1, 19 }, 1746 { 24000000, P_PLL8, 4, 1, 4 }, 1747 { 48000000, P_PLL8, 4, 1, 2 }, 1748 { 64000000, P_PLL8, 3, 1, 2 }, 1749 { 96000000, P_PLL8, 4, 0, 0 }, 1750 { 192000000, P_PLL8, 2, 0, 0 }, 1751 { } 1752 }; 1753 1754 static struct clk_rcg sdc1_src = { 1755 .ns_reg = 0x282c, 1756 .md_reg = 0x2828, 1757 .mn = { 1758 .mnctr_en_bit = 8, 1759 .mnctr_reset_bit = 7, 1760 .mnctr_mode_shift = 5, 1761 .n_val_shift = 16, 1762 .m_val_shift = 16, 1763 .width = 8, 1764 }, 1765 .p = { 1766 .pre_div_shift = 3, 1767 .pre_div_width = 2, 1768 }, 1769 .s = { 1770 .src_sel_shift = 0, 1771 .parent_map = gcc_pxo_pll8_map, 1772 }, 1773 .freq_tbl = clk_tbl_sdc, 1774 .clkr = { 1775 .enable_reg = 0x282c, 1776 .enable_mask = BIT(11), 1777 .hw.init = &(struct clk_init_data){ 1778 .name = "sdc1_src", 1779 .parent_names = gcc_pxo_pll8, 1780 .num_parents = 2, 1781 .ops = &clk_rcg_ops, 1782 }, 1783 } 1784 }; 1785 1786 static struct clk_branch sdc1_clk = { 1787 .halt_reg = 0x2fc8, 1788 .halt_bit = 6, 1789 .clkr = { 1790 .enable_reg = 0x282c, 1791 .enable_mask = BIT(9), 1792 .hw.init = &(struct clk_init_data){ 1793 .name = "sdc1_clk", 1794 .parent_names = (const char *[]){ "sdc1_src" }, 1795 .num_parents = 1, 1796 .ops = &clk_branch_ops, 1797 .flags = CLK_SET_RATE_PARENT, 1798 }, 1799 }, 1800 }; 1801 1802 static struct clk_rcg sdc2_src = { 1803 .ns_reg = 0x284c, 1804 .md_reg = 0x2848, 1805 .mn = { 1806 .mnctr_en_bit = 8, 1807 .mnctr_reset_bit = 7, 1808 .mnctr_mode_shift = 5, 1809 .n_val_shift = 16, 1810 .m_val_shift = 16, 1811 .width = 8, 1812 }, 1813 .p = { 1814 .pre_div_shift = 3, 1815 .pre_div_width = 2, 1816 }, 1817 .s = { 1818 .src_sel_shift = 0, 1819 .parent_map = gcc_pxo_pll8_map, 1820 }, 1821 .freq_tbl = clk_tbl_sdc, 1822 .clkr = { 1823 .enable_reg = 0x284c, 1824 .enable_mask = BIT(11), 1825 .hw.init = &(struct clk_init_data){ 1826 .name = "sdc2_src", 1827 .parent_names = gcc_pxo_pll8, 1828 .num_parents = 2, 1829 .ops = &clk_rcg_ops, 1830 }, 1831 } 1832 }; 1833 1834 static struct clk_branch sdc2_clk = { 1835 .halt_reg = 0x2fc8, 1836 .halt_bit = 5, 1837 .clkr = { 1838 .enable_reg = 0x284c, 1839 .enable_mask = BIT(9), 1840 .hw.init = &(struct clk_init_data){ 1841 .name = "sdc2_clk", 1842 .parent_names = (const char *[]){ "sdc2_src" }, 1843 .num_parents = 1, 1844 .ops = &clk_branch_ops, 1845 .flags = CLK_SET_RATE_PARENT, 1846 }, 1847 }, 1848 }; 1849 1850 static struct clk_rcg sdc3_src = { 1851 .ns_reg = 0x286c, 1852 .md_reg = 0x2868, 1853 .mn = { 1854 .mnctr_en_bit = 8, 1855 .mnctr_reset_bit = 7, 1856 .mnctr_mode_shift = 5, 1857 .n_val_shift = 16, 1858 .m_val_shift = 16, 1859 .width = 8, 1860 }, 1861 .p = { 1862 .pre_div_shift = 3, 1863 .pre_div_width = 2, 1864 }, 1865 .s = { 1866 .src_sel_shift = 0, 1867 .parent_map = gcc_pxo_pll8_map, 1868 }, 1869 .freq_tbl = clk_tbl_sdc, 1870 .clkr = { 1871 .enable_reg = 0x286c, 1872 .enable_mask = BIT(11), 1873 .hw.init = &(struct clk_init_data){ 1874 .name = "sdc3_src", 1875 .parent_names = gcc_pxo_pll8, 1876 .num_parents = 2, 1877 .ops = &clk_rcg_ops, 1878 }, 1879 } 1880 }; 1881 1882 static struct clk_branch sdc3_clk = { 1883 .halt_reg = 0x2fc8, 1884 .halt_bit = 4, 1885 .clkr = { 1886 .enable_reg = 0x286c, 1887 .enable_mask = BIT(9), 1888 .hw.init = &(struct clk_init_data){ 1889 .name = "sdc3_clk", 1890 .parent_names = (const char *[]){ "sdc3_src" }, 1891 .num_parents = 1, 1892 .ops = &clk_branch_ops, 1893 .flags = CLK_SET_RATE_PARENT, 1894 }, 1895 }, 1896 }; 1897 1898 static struct clk_rcg sdc4_src = { 1899 .ns_reg = 0x288c, 1900 .md_reg = 0x2888, 1901 .mn = { 1902 .mnctr_en_bit = 8, 1903 .mnctr_reset_bit = 7, 1904 .mnctr_mode_shift = 5, 1905 .n_val_shift = 16, 1906 .m_val_shift = 16, 1907 .width = 8, 1908 }, 1909 .p = { 1910 .pre_div_shift = 3, 1911 .pre_div_width = 2, 1912 }, 1913 .s = { 1914 .src_sel_shift = 0, 1915 .parent_map = gcc_pxo_pll8_map, 1916 }, 1917 .freq_tbl = clk_tbl_sdc, 1918 .clkr = { 1919 .enable_reg = 0x288c, 1920 .enable_mask = BIT(11), 1921 .hw.init = &(struct clk_init_data){ 1922 .name = "sdc4_src", 1923 .parent_names = gcc_pxo_pll8, 1924 .num_parents = 2, 1925 .ops = &clk_rcg_ops, 1926 }, 1927 } 1928 }; 1929 1930 static struct clk_branch sdc4_clk = { 1931 .halt_reg = 0x2fc8, 1932 .halt_bit = 3, 1933 .clkr = { 1934 .enable_reg = 0x288c, 1935 .enable_mask = BIT(9), 1936 .hw.init = &(struct clk_init_data){ 1937 .name = "sdc4_clk", 1938 .parent_names = (const char *[]){ "sdc4_src" }, 1939 .num_parents = 1, 1940 .ops = &clk_branch_ops, 1941 .flags = CLK_SET_RATE_PARENT, 1942 }, 1943 }, 1944 }; 1945 1946 static struct clk_rcg sdc5_src = { 1947 .ns_reg = 0x28ac, 1948 .md_reg = 0x28a8, 1949 .mn = { 1950 .mnctr_en_bit = 8, 1951 .mnctr_reset_bit = 7, 1952 .mnctr_mode_shift = 5, 1953 .n_val_shift = 16, 1954 .m_val_shift = 16, 1955 .width = 8, 1956 }, 1957 .p = { 1958 .pre_div_shift = 3, 1959 .pre_div_width = 2, 1960 }, 1961 .s = { 1962 .src_sel_shift = 0, 1963 .parent_map = gcc_pxo_pll8_map, 1964 }, 1965 .freq_tbl = clk_tbl_sdc, 1966 .clkr = { 1967 .enable_reg = 0x28ac, 1968 .enable_mask = BIT(11), 1969 .hw.init = &(struct clk_init_data){ 1970 .name = "sdc5_src", 1971 .parent_names = gcc_pxo_pll8, 1972 .num_parents = 2, 1973 .ops = &clk_rcg_ops, 1974 }, 1975 } 1976 }; 1977 1978 static struct clk_branch sdc5_clk = { 1979 .halt_reg = 0x2fc8, 1980 .halt_bit = 2, 1981 .clkr = { 1982 .enable_reg = 0x28ac, 1983 .enable_mask = BIT(9), 1984 .hw.init = &(struct clk_init_data){ 1985 .name = "sdc5_clk", 1986 .parent_names = (const char *[]){ "sdc5_src" }, 1987 .num_parents = 1, 1988 .ops = &clk_branch_ops, 1989 .flags = CLK_SET_RATE_PARENT, 1990 }, 1991 }, 1992 }; 1993 1994 static const struct freq_tbl clk_tbl_tsif_ref[] = { 1995 { 105000, P_PXO, 1, 1, 256 }, 1996 { } 1997 }; 1998 1999 static struct clk_rcg tsif_ref_src = { 2000 .ns_reg = 0x2710, 2001 .md_reg = 0x270c, 2002 .mn = { 2003 .mnctr_en_bit = 8, 2004 .mnctr_reset_bit = 7, 2005 .mnctr_mode_shift = 5, 2006 .n_val_shift = 16, 2007 .m_val_shift = 16, 2008 .width = 16, 2009 }, 2010 .p = { 2011 .pre_div_shift = 3, 2012 .pre_div_width = 2, 2013 }, 2014 .s = { 2015 .src_sel_shift = 0, 2016 .parent_map = gcc_pxo_pll8_map, 2017 }, 2018 .freq_tbl = clk_tbl_tsif_ref, 2019 .clkr = { 2020 .enable_reg = 0x2710, 2021 .enable_mask = BIT(11), 2022 .hw.init = &(struct clk_init_data){ 2023 .name = "tsif_ref_src", 2024 .parent_names = gcc_pxo_pll8, 2025 .num_parents = 2, 2026 .ops = &clk_rcg_ops, 2027 .flags = CLK_SET_RATE_GATE, 2028 }, 2029 } 2030 }; 2031 2032 static struct clk_branch tsif_ref_clk = { 2033 .halt_reg = 0x2fd4, 2034 .halt_bit = 5, 2035 .clkr = { 2036 .enable_reg = 0x2710, 2037 .enable_mask = BIT(9), 2038 .hw.init = &(struct clk_init_data){ 2039 .name = "tsif_ref_clk", 2040 .parent_names = (const char *[]){ "tsif_ref_src" }, 2041 .num_parents = 1, 2042 .ops = &clk_branch_ops, 2043 .flags = CLK_SET_RATE_PARENT, 2044 }, 2045 }, 2046 }; 2047 2048 static const struct freq_tbl clk_tbl_usb[] = { 2049 { 60000000, P_PLL8, 1, 5, 32 }, 2050 { } 2051 }; 2052 2053 static struct clk_rcg usb_hs1_xcvr_src = { 2054 .ns_reg = 0x290c, 2055 .md_reg = 0x2908, 2056 .mn = { 2057 .mnctr_en_bit = 8, 2058 .mnctr_reset_bit = 7, 2059 .mnctr_mode_shift = 5, 2060 .n_val_shift = 16, 2061 .m_val_shift = 16, 2062 .width = 8, 2063 }, 2064 .p = { 2065 .pre_div_shift = 3, 2066 .pre_div_width = 2, 2067 }, 2068 .s = { 2069 .src_sel_shift = 0, 2070 .parent_map = gcc_pxo_pll8_map, 2071 }, 2072 .freq_tbl = clk_tbl_usb, 2073 .clkr = { 2074 .enable_reg = 0x290c, 2075 .enable_mask = BIT(11), 2076 .hw.init = &(struct clk_init_data){ 2077 .name = "usb_hs1_xcvr_src", 2078 .parent_names = gcc_pxo_pll8, 2079 .num_parents = 2, 2080 .ops = &clk_rcg_ops, 2081 .flags = CLK_SET_RATE_GATE, 2082 }, 2083 } 2084 }; 2085 2086 static struct clk_branch usb_hs1_xcvr_clk = { 2087 .halt_reg = 0x2fc8, 2088 .halt_bit = 0, 2089 .clkr = { 2090 .enable_reg = 0x290c, 2091 .enable_mask = BIT(9), 2092 .hw.init = &(struct clk_init_data){ 2093 .name = "usb_hs1_xcvr_clk", 2094 .parent_names = (const char *[]){ "usb_hs1_xcvr_src" }, 2095 .num_parents = 1, 2096 .ops = &clk_branch_ops, 2097 .flags = CLK_SET_RATE_PARENT, 2098 }, 2099 }, 2100 }; 2101 2102 static struct clk_rcg usb_hs3_xcvr_src = { 2103 .ns_reg = 0x370c, 2104 .md_reg = 0x3708, 2105 .mn = { 2106 .mnctr_en_bit = 8, 2107 .mnctr_reset_bit = 7, 2108 .mnctr_mode_shift = 5, 2109 .n_val_shift = 16, 2110 .m_val_shift = 16, 2111 .width = 8, 2112 }, 2113 .p = { 2114 .pre_div_shift = 3, 2115 .pre_div_width = 2, 2116 }, 2117 .s = { 2118 .src_sel_shift = 0, 2119 .parent_map = gcc_pxo_pll8_map, 2120 }, 2121 .freq_tbl = clk_tbl_usb, 2122 .clkr = { 2123 .enable_reg = 0x370c, 2124 .enable_mask = BIT(11), 2125 .hw.init = &(struct clk_init_data){ 2126 .name = "usb_hs3_xcvr_src", 2127 .parent_names = gcc_pxo_pll8, 2128 .num_parents = 2, 2129 .ops = &clk_rcg_ops, 2130 .flags = CLK_SET_RATE_GATE, 2131 }, 2132 } 2133 }; 2134 2135 static struct clk_branch usb_hs3_xcvr_clk = { 2136 .halt_reg = 0x2fc8, 2137 .halt_bit = 30, 2138 .clkr = { 2139 .enable_reg = 0x370c, 2140 .enable_mask = BIT(9), 2141 .hw.init = &(struct clk_init_data){ 2142 .name = "usb_hs3_xcvr_clk", 2143 .parent_names = (const char *[]){ "usb_hs3_xcvr_src" }, 2144 .num_parents = 1, 2145 .ops = &clk_branch_ops, 2146 .flags = CLK_SET_RATE_PARENT, 2147 }, 2148 }, 2149 }; 2150 2151 static struct clk_rcg usb_hs4_xcvr_src = { 2152 .ns_reg = 0x372c, 2153 .md_reg = 0x3728, 2154 .mn = { 2155 .mnctr_en_bit = 8, 2156 .mnctr_reset_bit = 7, 2157 .mnctr_mode_shift = 5, 2158 .n_val_shift = 16, 2159 .m_val_shift = 16, 2160 .width = 8, 2161 }, 2162 .p = { 2163 .pre_div_shift = 3, 2164 .pre_div_width = 2, 2165 }, 2166 .s = { 2167 .src_sel_shift = 0, 2168 .parent_map = gcc_pxo_pll8_map, 2169 }, 2170 .freq_tbl = clk_tbl_usb, 2171 .clkr = { 2172 .enable_reg = 0x372c, 2173 .enable_mask = BIT(11), 2174 .hw.init = &(struct clk_init_data){ 2175 .name = "usb_hs4_xcvr_src", 2176 .parent_names = gcc_pxo_pll8, 2177 .num_parents = 2, 2178 .ops = &clk_rcg_ops, 2179 .flags = CLK_SET_RATE_GATE, 2180 }, 2181 } 2182 }; 2183 2184 static struct clk_branch usb_hs4_xcvr_clk = { 2185 .halt_reg = 0x2fc8, 2186 .halt_bit = 2, 2187 .clkr = { 2188 .enable_reg = 0x372c, 2189 .enable_mask = BIT(9), 2190 .hw.init = &(struct clk_init_data){ 2191 .name = "usb_hs4_xcvr_clk", 2192 .parent_names = (const char *[]){ "usb_hs4_xcvr_src" }, 2193 .num_parents = 1, 2194 .ops = &clk_branch_ops, 2195 .flags = CLK_SET_RATE_PARENT, 2196 }, 2197 }, 2198 }; 2199 2200 static struct clk_rcg usb_hsic_xcvr_fs_src = { 2201 .ns_reg = 0x2928, 2202 .md_reg = 0x2924, 2203 .mn = { 2204 .mnctr_en_bit = 8, 2205 .mnctr_reset_bit = 7, 2206 .mnctr_mode_shift = 5, 2207 .n_val_shift = 16, 2208 .m_val_shift = 16, 2209 .width = 8, 2210 }, 2211 .p = { 2212 .pre_div_shift = 3, 2213 .pre_div_width = 2, 2214 }, 2215 .s = { 2216 .src_sel_shift = 0, 2217 .parent_map = gcc_pxo_pll8_map, 2218 }, 2219 .freq_tbl = clk_tbl_usb, 2220 .clkr = { 2221 .enable_reg = 0x2928, 2222 .enable_mask = BIT(11), 2223 .hw.init = &(struct clk_init_data){ 2224 .name = "usb_hsic_xcvr_fs_src", 2225 .parent_names = gcc_pxo_pll8, 2226 .num_parents = 2, 2227 .ops = &clk_rcg_ops, 2228 .flags = CLK_SET_RATE_GATE, 2229 }, 2230 } 2231 }; 2232 2233 static const char * const usb_hsic_xcvr_fs_src_p[] = { "usb_hsic_xcvr_fs_src" }; 2234 2235 static struct clk_branch usb_hsic_xcvr_fs_clk = { 2236 .halt_reg = 0x2fc8, 2237 .halt_bit = 2, 2238 .clkr = { 2239 .enable_reg = 0x2928, 2240 .enable_mask = BIT(9), 2241 .hw.init = &(struct clk_init_data){ 2242 .name = "usb_hsic_xcvr_fs_clk", 2243 .parent_names = usb_hsic_xcvr_fs_src_p, 2244 .num_parents = 1, 2245 .ops = &clk_branch_ops, 2246 .flags = CLK_SET_RATE_PARENT, 2247 }, 2248 }, 2249 }; 2250 2251 static struct clk_branch usb_hsic_system_clk = { 2252 .halt_reg = 0x2fcc, 2253 .halt_bit = 24, 2254 .clkr = { 2255 .enable_reg = 0x292c, 2256 .enable_mask = BIT(4), 2257 .hw.init = &(struct clk_init_data){ 2258 .parent_names = usb_hsic_xcvr_fs_src_p, 2259 .num_parents = 1, 2260 .name = "usb_hsic_system_clk", 2261 .ops = &clk_branch_ops, 2262 .flags = CLK_SET_RATE_PARENT, 2263 }, 2264 }, 2265 }; 2266 2267 static struct clk_branch usb_hsic_hsic_clk = { 2268 .halt_reg = 0x2fcc, 2269 .halt_bit = 19, 2270 .clkr = { 2271 .enable_reg = 0x2b44, 2272 .enable_mask = BIT(0), 2273 .hw.init = &(struct clk_init_data){ 2274 .parent_names = (const char *[]){ "pll14_vote" }, 2275 .num_parents = 1, 2276 .name = "usb_hsic_hsic_clk", 2277 .ops = &clk_branch_ops, 2278 }, 2279 }, 2280 }; 2281 2282 static struct clk_branch usb_hsic_hsio_cal_clk = { 2283 .halt_reg = 0x2fcc, 2284 .halt_bit = 23, 2285 .clkr = { 2286 .enable_reg = 0x2b48, 2287 .enable_mask = BIT(0), 2288 .hw.init = &(struct clk_init_data){ 2289 .name = "usb_hsic_hsio_cal_clk", 2290 .ops = &clk_branch_ops, 2291 }, 2292 }, 2293 }; 2294 2295 static struct clk_rcg usb_fs1_xcvr_fs_src = { 2296 .ns_reg = 0x2968, 2297 .md_reg = 0x2964, 2298 .mn = { 2299 .mnctr_en_bit = 8, 2300 .mnctr_reset_bit = 7, 2301 .mnctr_mode_shift = 5, 2302 .n_val_shift = 16, 2303 .m_val_shift = 16, 2304 .width = 8, 2305 }, 2306 .p = { 2307 .pre_div_shift = 3, 2308 .pre_div_width = 2, 2309 }, 2310 .s = { 2311 .src_sel_shift = 0, 2312 .parent_map = gcc_pxo_pll8_map, 2313 }, 2314 .freq_tbl = clk_tbl_usb, 2315 .clkr = { 2316 .enable_reg = 0x2968, 2317 .enable_mask = BIT(11), 2318 .hw.init = &(struct clk_init_data){ 2319 .name = "usb_fs1_xcvr_fs_src", 2320 .parent_names = gcc_pxo_pll8, 2321 .num_parents = 2, 2322 .ops = &clk_rcg_ops, 2323 .flags = CLK_SET_RATE_GATE, 2324 }, 2325 } 2326 }; 2327 2328 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" }; 2329 2330 static struct clk_branch usb_fs1_xcvr_fs_clk = { 2331 .halt_reg = 0x2fcc, 2332 .halt_bit = 15, 2333 .clkr = { 2334 .enable_reg = 0x2968, 2335 .enable_mask = BIT(9), 2336 .hw.init = &(struct clk_init_data){ 2337 .name = "usb_fs1_xcvr_fs_clk", 2338 .parent_names = usb_fs1_xcvr_fs_src_p, 2339 .num_parents = 1, 2340 .ops = &clk_branch_ops, 2341 .flags = CLK_SET_RATE_PARENT, 2342 }, 2343 }, 2344 }; 2345 2346 static struct clk_branch usb_fs1_system_clk = { 2347 .halt_reg = 0x2fcc, 2348 .halt_bit = 16, 2349 .clkr = { 2350 .enable_reg = 0x296c, 2351 .enable_mask = BIT(4), 2352 .hw.init = &(struct clk_init_data){ 2353 .parent_names = usb_fs1_xcvr_fs_src_p, 2354 .num_parents = 1, 2355 .name = "usb_fs1_system_clk", 2356 .ops = &clk_branch_ops, 2357 .flags = CLK_SET_RATE_PARENT, 2358 }, 2359 }, 2360 }; 2361 2362 static struct clk_rcg usb_fs2_xcvr_fs_src = { 2363 .ns_reg = 0x2988, 2364 .md_reg = 0x2984, 2365 .mn = { 2366 .mnctr_en_bit = 8, 2367 .mnctr_reset_bit = 7, 2368 .mnctr_mode_shift = 5, 2369 .n_val_shift = 16, 2370 .m_val_shift = 16, 2371 .width = 8, 2372 }, 2373 .p = { 2374 .pre_div_shift = 3, 2375 .pre_div_width = 2, 2376 }, 2377 .s = { 2378 .src_sel_shift = 0, 2379 .parent_map = gcc_pxo_pll8_map, 2380 }, 2381 .freq_tbl = clk_tbl_usb, 2382 .clkr = { 2383 .enable_reg = 0x2988, 2384 .enable_mask = BIT(11), 2385 .hw.init = &(struct clk_init_data){ 2386 .name = "usb_fs2_xcvr_fs_src", 2387 .parent_names = gcc_pxo_pll8, 2388 .num_parents = 2, 2389 .ops = &clk_rcg_ops, 2390 .flags = CLK_SET_RATE_GATE, 2391 }, 2392 } 2393 }; 2394 2395 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" }; 2396 2397 static struct clk_branch usb_fs2_xcvr_fs_clk = { 2398 .halt_reg = 0x2fcc, 2399 .halt_bit = 12, 2400 .clkr = { 2401 .enable_reg = 0x2988, 2402 .enable_mask = BIT(9), 2403 .hw.init = &(struct clk_init_data){ 2404 .name = "usb_fs2_xcvr_fs_clk", 2405 .parent_names = usb_fs2_xcvr_fs_src_p, 2406 .num_parents = 1, 2407 .ops = &clk_branch_ops, 2408 .flags = CLK_SET_RATE_PARENT, 2409 }, 2410 }, 2411 }; 2412 2413 static struct clk_branch usb_fs2_system_clk = { 2414 .halt_reg = 0x2fcc, 2415 .halt_bit = 13, 2416 .clkr = { 2417 .enable_reg = 0x298c, 2418 .enable_mask = BIT(4), 2419 .hw.init = &(struct clk_init_data){ 2420 .name = "usb_fs2_system_clk", 2421 .parent_names = usb_fs2_xcvr_fs_src_p, 2422 .num_parents = 1, 2423 .ops = &clk_branch_ops, 2424 .flags = CLK_SET_RATE_PARENT, 2425 }, 2426 }, 2427 }; 2428 2429 static struct clk_branch ce1_core_clk = { 2430 .hwcg_reg = 0x2724, 2431 .hwcg_bit = 6, 2432 .halt_reg = 0x2fd4, 2433 .halt_bit = 27, 2434 .clkr = { 2435 .enable_reg = 0x2724, 2436 .enable_mask = BIT(4), 2437 .hw.init = &(struct clk_init_data){ 2438 .name = "ce1_core_clk", 2439 .ops = &clk_branch_ops, 2440 }, 2441 }, 2442 }; 2443 2444 static struct clk_branch ce1_h_clk = { 2445 .halt_reg = 0x2fd4, 2446 .halt_bit = 1, 2447 .clkr = { 2448 .enable_reg = 0x2720, 2449 .enable_mask = BIT(4), 2450 .hw.init = &(struct clk_init_data){ 2451 .name = "ce1_h_clk", 2452 .ops = &clk_branch_ops, 2453 }, 2454 }, 2455 }; 2456 2457 static struct clk_branch dma_bam_h_clk = { 2458 .hwcg_reg = 0x25c0, 2459 .hwcg_bit = 6, 2460 .halt_reg = 0x2fc8, 2461 .halt_bit = 12, 2462 .clkr = { 2463 .enable_reg = 0x25c0, 2464 .enable_mask = BIT(4), 2465 .hw.init = &(struct clk_init_data){ 2466 .name = "dma_bam_h_clk", 2467 .ops = &clk_branch_ops, 2468 }, 2469 }, 2470 }; 2471 2472 static struct clk_branch gsbi1_h_clk = { 2473 .hwcg_reg = 0x29c0, 2474 .hwcg_bit = 6, 2475 .halt_reg = 0x2fcc, 2476 .halt_bit = 11, 2477 .clkr = { 2478 .enable_reg = 0x29c0, 2479 .enable_mask = BIT(4), 2480 .hw.init = &(struct clk_init_data){ 2481 .name = "gsbi1_h_clk", 2482 .ops = &clk_branch_ops, 2483 }, 2484 }, 2485 }; 2486 2487 static struct clk_branch gsbi2_h_clk = { 2488 .hwcg_reg = 0x29e0, 2489 .hwcg_bit = 6, 2490 .halt_reg = 0x2fcc, 2491 .halt_bit = 7, 2492 .clkr = { 2493 .enable_reg = 0x29e0, 2494 .enable_mask = BIT(4), 2495 .hw.init = &(struct clk_init_data){ 2496 .name = "gsbi2_h_clk", 2497 .ops = &clk_branch_ops, 2498 }, 2499 }, 2500 }; 2501 2502 static struct clk_branch gsbi3_h_clk = { 2503 .hwcg_reg = 0x2a00, 2504 .hwcg_bit = 6, 2505 .halt_reg = 0x2fcc, 2506 .halt_bit = 3, 2507 .clkr = { 2508 .enable_reg = 0x2a00, 2509 .enable_mask = BIT(4), 2510 .hw.init = &(struct clk_init_data){ 2511 .name = "gsbi3_h_clk", 2512 .ops = &clk_branch_ops, 2513 }, 2514 }, 2515 }; 2516 2517 static struct clk_branch gsbi4_h_clk = { 2518 .hwcg_reg = 0x2a20, 2519 .hwcg_bit = 6, 2520 .halt_reg = 0x2fd0, 2521 .halt_bit = 27, 2522 .clkr = { 2523 .enable_reg = 0x2a20, 2524 .enable_mask = BIT(4), 2525 .hw.init = &(struct clk_init_data){ 2526 .name = "gsbi4_h_clk", 2527 .ops = &clk_branch_ops, 2528 }, 2529 }, 2530 }; 2531 2532 static struct clk_branch gsbi5_h_clk = { 2533 .hwcg_reg = 0x2a40, 2534 .hwcg_bit = 6, 2535 .halt_reg = 0x2fd0, 2536 .halt_bit = 23, 2537 .clkr = { 2538 .enable_reg = 0x2a40, 2539 .enable_mask = BIT(4), 2540 .hw.init = &(struct clk_init_data){ 2541 .name = "gsbi5_h_clk", 2542 .ops = &clk_branch_ops, 2543 }, 2544 }, 2545 }; 2546 2547 static struct clk_branch gsbi6_h_clk = { 2548 .hwcg_reg = 0x2a60, 2549 .hwcg_bit = 6, 2550 .halt_reg = 0x2fd0, 2551 .halt_bit = 19, 2552 .clkr = { 2553 .enable_reg = 0x2a60, 2554 .enable_mask = BIT(4), 2555 .hw.init = &(struct clk_init_data){ 2556 .name = "gsbi6_h_clk", 2557 .ops = &clk_branch_ops, 2558 }, 2559 }, 2560 }; 2561 2562 static struct clk_branch gsbi7_h_clk = { 2563 .hwcg_reg = 0x2a80, 2564 .hwcg_bit = 6, 2565 .halt_reg = 0x2fd0, 2566 .halt_bit = 15, 2567 .clkr = { 2568 .enable_reg = 0x2a80, 2569 .enable_mask = BIT(4), 2570 .hw.init = &(struct clk_init_data){ 2571 .name = "gsbi7_h_clk", 2572 .ops = &clk_branch_ops, 2573 }, 2574 }, 2575 }; 2576 2577 static struct clk_branch gsbi8_h_clk = { 2578 .hwcg_reg = 0x2aa0, 2579 .hwcg_bit = 6, 2580 .halt_reg = 0x2fd0, 2581 .halt_bit = 11, 2582 .clkr = { 2583 .enable_reg = 0x2aa0, 2584 .enable_mask = BIT(4), 2585 .hw.init = &(struct clk_init_data){ 2586 .name = "gsbi8_h_clk", 2587 .ops = &clk_branch_ops, 2588 }, 2589 }, 2590 }; 2591 2592 static struct clk_branch gsbi9_h_clk = { 2593 .hwcg_reg = 0x2ac0, 2594 .hwcg_bit = 6, 2595 .halt_reg = 0x2fd0, 2596 .halt_bit = 7, 2597 .clkr = { 2598 .enable_reg = 0x2ac0, 2599 .enable_mask = BIT(4), 2600 .hw.init = &(struct clk_init_data){ 2601 .name = "gsbi9_h_clk", 2602 .ops = &clk_branch_ops, 2603 }, 2604 }, 2605 }; 2606 2607 static struct clk_branch gsbi10_h_clk = { 2608 .hwcg_reg = 0x2ae0, 2609 .hwcg_bit = 6, 2610 .halt_reg = 0x2fd0, 2611 .halt_bit = 3, 2612 .clkr = { 2613 .enable_reg = 0x2ae0, 2614 .enable_mask = BIT(4), 2615 .hw.init = &(struct clk_init_data){ 2616 .name = "gsbi10_h_clk", 2617 .ops = &clk_branch_ops, 2618 }, 2619 }, 2620 }; 2621 2622 static struct clk_branch gsbi11_h_clk = { 2623 .hwcg_reg = 0x2b00, 2624 .hwcg_bit = 6, 2625 .halt_reg = 0x2fd4, 2626 .halt_bit = 18, 2627 .clkr = { 2628 .enable_reg = 0x2b00, 2629 .enable_mask = BIT(4), 2630 .hw.init = &(struct clk_init_data){ 2631 .name = "gsbi11_h_clk", 2632 .ops = &clk_branch_ops, 2633 }, 2634 }, 2635 }; 2636 2637 static struct clk_branch gsbi12_h_clk = { 2638 .hwcg_reg = 0x2b20, 2639 .hwcg_bit = 6, 2640 .halt_reg = 0x2fd4, 2641 .halt_bit = 14, 2642 .clkr = { 2643 .enable_reg = 0x2b20, 2644 .enable_mask = BIT(4), 2645 .hw.init = &(struct clk_init_data){ 2646 .name = "gsbi12_h_clk", 2647 .ops = &clk_branch_ops, 2648 }, 2649 }, 2650 }; 2651 2652 static struct clk_branch tsif_h_clk = { 2653 .hwcg_reg = 0x2700, 2654 .hwcg_bit = 6, 2655 .halt_reg = 0x2fd4, 2656 .halt_bit = 7, 2657 .clkr = { 2658 .enable_reg = 0x2700, 2659 .enable_mask = BIT(4), 2660 .hw.init = &(struct clk_init_data){ 2661 .name = "tsif_h_clk", 2662 .ops = &clk_branch_ops, 2663 }, 2664 }, 2665 }; 2666 2667 static struct clk_branch usb_fs1_h_clk = { 2668 .halt_reg = 0x2fcc, 2669 .halt_bit = 17, 2670 .clkr = { 2671 .enable_reg = 0x2960, 2672 .enable_mask = BIT(4), 2673 .hw.init = &(struct clk_init_data){ 2674 .name = "usb_fs1_h_clk", 2675 .ops = &clk_branch_ops, 2676 }, 2677 }, 2678 }; 2679 2680 static struct clk_branch usb_fs2_h_clk = { 2681 .halt_reg = 0x2fcc, 2682 .halt_bit = 14, 2683 .clkr = { 2684 .enable_reg = 0x2980, 2685 .enable_mask = BIT(4), 2686 .hw.init = &(struct clk_init_data){ 2687 .name = "usb_fs2_h_clk", 2688 .ops = &clk_branch_ops, 2689 }, 2690 }, 2691 }; 2692 2693 static struct clk_branch usb_hs1_h_clk = { 2694 .hwcg_reg = 0x2900, 2695 .hwcg_bit = 6, 2696 .halt_reg = 0x2fc8, 2697 .halt_bit = 1, 2698 .clkr = { 2699 .enable_reg = 0x2900, 2700 .enable_mask = BIT(4), 2701 .hw.init = &(struct clk_init_data){ 2702 .name = "usb_hs1_h_clk", 2703 .ops = &clk_branch_ops, 2704 }, 2705 }, 2706 }; 2707 2708 static struct clk_branch usb_hs3_h_clk = { 2709 .halt_reg = 0x2fc8, 2710 .halt_bit = 31, 2711 .clkr = { 2712 .enable_reg = 0x3700, 2713 .enable_mask = BIT(4), 2714 .hw.init = &(struct clk_init_data){ 2715 .name = "usb_hs3_h_clk", 2716 .ops = &clk_branch_ops, 2717 }, 2718 }, 2719 }; 2720 2721 static struct clk_branch usb_hs4_h_clk = { 2722 .halt_reg = 0x2fc8, 2723 .halt_bit = 7, 2724 .clkr = { 2725 .enable_reg = 0x3720, 2726 .enable_mask = BIT(4), 2727 .hw.init = &(struct clk_init_data){ 2728 .name = "usb_hs4_h_clk", 2729 .ops = &clk_branch_ops, 2730 }, 2731 }, 2732 }; 2733 2734 static struct clk_branch usb_hsic_h_clk = { 2735 .halt_reg = 0x2fcc, 2736 .halt_bit = 28, 2737 .clkr = { 2738 .enable_reg = 0x2920, 2739 .enable_mask = BIT(4), 2740 .hw.init = &(struct clk_init_data){ 2741 .name = "usb_hsic_h_clk", 2742 .ops = &clk_branch_ops, 2743 }, 2744 }, 2745 }; 2746 2747 static struct clk_branch sdc1_h_clk = { 2748 .hwcg_reg = 0x2820, 2749 .hwcg_bit = 6, 2750 .halt_reg = 0x2fc8, 2751 .halt_bit = 11, 2752 .clkr = { 2753 .enable_reg = 0x2820, 2754 .enable_mask = BIT(4), 2755 .hw.init = &(struct clk_init_data){ 2756 .name = "sdc1_h_clk", 2757 .ops = &clk_branch_ops, 2758 }, 2759 }, 2760 }; 2761 2762 static struct clk_branch sdc2_h_clk = { 2763 .hwcg_reg = 0x2840, 2764 .hwcg_bit = 6, 2765 .halt_reg = 0x2fc8, 2766 .halt_bit = 10, 2767 .clkr = { 2768 .enable_reg = 0x2840, 2769 .enable_mask = BIT(4), 2770 .hw.init = &(struct clk_init_data){ 2771 .name = "sdc2_h_clk", 2772 .ops = &clk_branch_ops, 2773 }, 2774 }, 2775 }; 2776 2777 static struct clk_branch sdc3_h_clk = { 2778 .hwcg_reg = 0x2860, 2779 .hwcg_bit = 6, 2780 .halt_reg = 0x2fc8, 2781 .halt_bit = 9, 2782 .clkr = { 2783 .enable_reg = 0x2860, 2784 .enable_mask = BIT(4), 2785 .hw.init = &(struct clk_init_data){ 2786 .name = "sdc3_h_clk", 2787 .ops = &clk_branch_ops, 2788 }, 2789 }, 2790 }; 2791 2792 static struct clk_branch sdc4_h_clk = { 2793 .hwcg_reg = 0x2880, 2794 .hwcg_bit = 6, 2795 .halt_reg = 0x2fc8, 2796 .halt_bit = 8, 2797 .clkr = { 2798 .enable_reg = 0x2880, 2799 .enable_mask = BIT(4), 2800 .hw.init = &(struct clk_init_data){ 2801 .name = "sdc4_h_clk", 2802 .ops = &clk_branch_ops, 2803 }, 2804 }, 2805 }; 2806 2807 static struct clk_branch sdc5_h_clk = { 2808 .hwcg_reg = 0x28a0, 2809 .hwcg_bit = 6, 2810 .halt_reg = 0x2fc8, 2811 .halt_bit = 7, 2812 .clkr = { 2813 .enable_reg = 0x28a0, 2814 .enable_mask = BIT(4), 2815 .hw.init = &(struct clk_init_data){ 2816 .name = "sdc5_h_clk", 2817 .ops = &clk_branch_ops, 2818 }, 2819 }, 2820 }; 2821 2822 static struct clk_branch adm0_clk = { 2823 .halt_reg = 0x2fdc, 2824 .halt_check = BRANCH_HALT_VOTED, 2825 .halt_bit = 14, 2826 .clkr = { 2827 .enable_reg = 0x3080, 2828 .enable_mask = BIT(2), 2829 .hw.init = &(struct clk_init_data){ 2830 .name = "adm0_clk", 2831 .ops = &clk_branch_ops, 2832 }, 2833 }, 2834 }; 2835 2836 static struct clk_branch adm0_pbus_clk = { 2837 .hwcg_reg = 0x2208, 2838 .hwcg_bit = 6, 2839 .halt_reg = 0x2fdc, 2840 .halt_check = BRANCH_HALT_VOTED, 2841 .halt_bit = 13, 2842 .clkr = { 2843 .enable_reg = 0x3080, 2844 .enable_mask = BIT(3), 2845 .hw.init = &(struct clk_init_data){ 2846 .name = "adm0_pbus_clk", 2847 .ops = &clk_branch_ops, 2848 }, 2849 }, 2850 }; 2851 2852 static struct freq_tbl clk_tbl_ce3[] = { 2853 { 48000000, P_PLL8, 8 }, 2854 { 100000000, P_PLL3, 12 }, 2855 { 120000000, P_PLL3, 10 }, 2856 { } 2857 }; 2858 2859 static struct clk_rcg ce3_src = { 2860 .ns_reg = 0x36c0, 2861 .p = { 2862 .pre_div_shift = 3, 2863 .pre_div_width = 4, 2864 }, 2865 .s = { 2866 .src_sel_shift = 0, 2867 .parent_map = gcc_pxo_pll8_pll3_map, 2868 }, 2869 .freq_tbl = clk_tbl_ce3, 2870 .clkr = { 2871 .enable_reg = 0x36c0, 2872 .enable_mask = BIT(7), 2873 .hw.init = &(struct clk_init_data){ 2874 .name = "ce3_src", 2875 .parent_names = gcc_pxo_pll8_pll3, 2876 .num_parents = 3, 2877 .ops = &clk_rcg_ops, 2878 .flags = CLK_SET_RATE_GATE, 2879 }, 2880 }, 2881 }; 2882 2883 static struct clk_branch ce3_core_clk = { 2884 .halt_reg = 0x2fdc, 2885 .halt_bit = 5, 2886 .clkr = { 2887 .enable_reg = 0x36cc, 2888 .enable_mask = BIT(4), 2889 .hw.init = &(struct clk_init_data){ 2890 .name = "ce3_core_clk", 2891 .parent_names = (const char *[]){ "ce3_src" }, 2892 .num_parents = 1, 2893 .ops = &clk_branch_ops, 2894 .flags = CLK_SET_RATE_PARENT, 2895 }, 2896 }, 2897 }; 2898 2899 static struct clk_branch ce3_h_clk = { 2900 .halt_reg = 0x2fc4, 2901 .halt_bit = 16, 2902 .clkr = { 2903 .enable_reg = 0x36c4, 2904 .enable_mask = BIT(4), 2905 .hw.init = &(struct clk_init_data){ 2906 .name = "ce3_h_clk", 2907 .parent_names = (const char *[]){ "ce3_src" }, 2908 .num_parents = 1, 2909 .ops = &clk_branch_ops, 2910 .flags = CLK_SET_RATE_PARENT, 2911 }, 2912 }, 2913 }; 2914 2915 static const struct freq_tbl clk_tbl_sata_ref[] = { 2916 { 48000000, P_PLL8, 8, 0, 0 }, 2917 { 100000000, P_PLL3, 12, 0, 0 }, 2918 { } 2919 }; 2920 2921 static struct clk_rcg sata_clk_src = { 2922 .ns_reg = 0x2c08, 2923 .p = { 2924 .pre_div_shift = 3, 2925 .pre_div_width = 4, 2926 }, 2927 .s = { 2928 .src_sel_shift = 0, 2929 .parent_map = gcc_pxo_pll8_pll3_map, 2930 }, 2931 .freq_tbl = clk_tbl_sata_ref, 2932 .clkr = { 2933 .enable_reg = 0x2c08, 2934 .enable_mask = BIT(7), 2935 .hw.init = &(struct clk_init_data){ 2936 .name = "sata_clk_src", 2937 .parent_names = gcc_pxo_pll8_pll3, 2938 .num_parents = 3, 2939 .ops = &clk_rcg_ops, 2940 .flags = CLK_SET_RATE_GATE, 2941 }, 2942 }, 2943 }; 2944 2945 static struct clk_branch sata_rxoob_clk = { 2946 .halt_reg = 0x2fdc, 2947 .halt_bit = 26, 2948 .clkr = { 2949 .enable_reg = 0x2c0c, 2950 .enable_mask = BIT(4), 2951 .hw.init = &(struct clk_init_data){ 2952 .name = "sata_rxoob_clk", 2953 .parent_names = (const char *[]){ "sata_clk_src" }, 2954 .num_parents = 1, 2955 .ops = &clk_branch_ops, 2956 .flags = CLK_SET_RATE_PARENT, 2957 }, 2958 }, 2959 }; 2960 2961 static struct clk_branch sata_pmalive_clk = { 2962 .halt_reg = 0x2fdc, 2963 .halt_bit = 25, 2964 .clkr = { 2965 .enable_reg = 0x2c10, 2966 .enable_mask = BIT(4), 2967 .hw.init = &(struct clk_init_data){ 2968 .name = "sata_pmalive_clk", 2969 .parent_names = (const char *[]){ "sata_clk_src" }, 2970 .num_parents = 1, 2971 .ops = &clk_branch_ops, 2972 .flags = CLK_SET_RATE_PARENT, 2973 }, 2974 }, 2975 }; 2976 2977 static struct clk_branch sata_phy_ref_clk = { 2978 .halt_reg = 0x2fdc, 2979 .halt_bit = 24, 2980 .clkr = { 2981 .enable_reg = 0x2c14, 2982 .enable_mask = BIT(4), 2983 .hw.init = &(struct clk_init_data){ 2984 .name = "sata_phy_ref_clk", 2985 .parent_names = (const char *[]){ "pxo" }, 2986 .num_parents = 1, 2987 .ops = &clk_branch_ops, 2988 }, 2989 }, 2990 }; 2991 2992 static struct clk_branch sata_a_clk = { 2993 .halt_reg = 0x2fc0, 2994 .halt_bit = 12, 2995 .clkr = { 2996 .enable_reg = 0x2c20, 2997 .enable_mask = BIT(4), 2998 .hw.init = &(struct clk_init_data){ 2999 .name = "sata_a_clk", 3000 .ops = &clk_branch_ops, 3001 }, 3002 }, 3003 }; 3004 3005 static struct clk_branch sata_h_clk = { 3006 .halt_reg = 0x2fdc, 3007 .halt_bit = 27, 3008 .clkr = { 3009 .enable_reg = 0x2c00, 3010 .enable_mask = BIT(4), 3011 .hw.init = &(struct clk_init_data){ 3012 .name = "sata_h_clk", 3013 .ops = &clk_branch_ops, 3014 }, 3015 }, 3016 }; 3017 3018 static struct clk_branch sfab_sata_s_h_clk = { 3019 .halt_reg = 0x2fc4, 3020 .halt_bit = 14, 3021 .clkr = { 3022 .enable_reg = 0x2480, 3023 .enable_mask = BIT(4), 3024 .hw.init = &(struct clk_init_data){ 3025 .name = "sfab_sata_s_h_clk", 3026 .ops = &clk_branch_ops, 3027 }, 3028 }, 3029 }; 3030 3031 static struct clk_branch sata_phy_cfg_clk = { 3032 .halt_reg = 0x2fcc, 3033 .halt_bit = 12, 3034 .clkr = { 3035 .enable_reg = 0x2c40, 3036 .enable_mask = BIT(4), 3037 .hw.init = &(struct clk_init_data){ 3038 .name = "sata_phy_cfg_clk", 3039 .ops = &clk_branch_ops, 3040 }, 3041 }, 3042 }; 3043 3044 static struct clk_branch pcie_phy_ref_clk = { 3045 .halt_reg = 0x2fdc, 3046 .halt_bit = 29, 3047 .clkr = { 3048 .enable_reg = 0x22d0, 3049 .enable_mask = BIT(4), 3050 .hw.init = &(struct clk_init_data){ 3051 .name = "pcie_phy_ref_clk", 3052 .ops = &clk_branch_ops, 3053 }, 3054 }, 3055 }; 3056 3057 static struct clk_branch pcie_h_clk = { 3058 .halt_reg = 0x2fd4, 3059 .halt_bit = 8, 3060 .clkr = { 3061 .enable_reg = 0x22cc, 3062 .enable_mask = BIT(4), 3063 .hw.init = &(struct clk_init_data){ 3064 .name = "pcie_h_clk", 3065 .ops = &clk_branch_ops, 3066 }, 3067 }, 3068 }; 3069 3070 static struct clk_branch pcie_a_clk = { 3071 .halt_reg = 0x2fc0, 3072 .halt_bit = 13, 3073 .clkr = { 3074 .enable_reg = 0x22c0, 3075 .enable_mask = BIT(4), 3076 .hw.init = &(struct clk_init_data){ 3077 .name = "pcie_a_clk", 3078 .ops = &clk_branch_ops, 3079 }, 3080 }, 3081 }; 3082 3083 static struct clk_branch pmic_arb0_h_clk = { 3084 .halt_reg = 0x2fd8, 3085 .halt_check = BRANCH_HALT_VOTED, 3086 .halt_bit = 22, 3087 .clkr = { 3088 .enable_reg = 0x3080, 3089 .enable_mask = BIT(8), 3090 .hw.init = &(struct clk_init_data){ 3091 .name = "pmic_arb0_h_clk", 3092 .ops = &clk_branch_ops, 3093 }, 3094 }, 3095 }; 3096 3097 static struct clk_branch pmic_arb1_h_clk = { 3098 .halt_reg = 0x2fd8, 3099 .halt_check = BRANCH_HALT_VOTED, 3100 .halt_bit = 21, 3101 .clkr = { 3102 .enable_reg = 0x3080, 3103 .enable_mask = BIT(9), 3104 .hw.init = &(struct clk_init_data){ 3105 .name = "pmic_arb1_h_clk", 3106 .ops = &clk_branch_ops, 3107 }, 3108 }, 3109 }; 3110 3111 static struct clk_branch pmic_ssbi2_clk = { 3112 .halt_reg = 0x2fd8, 3113 .halt_check = BRANCH_HALT_VOTED, 3114 .halt_bit = 23, 3115 .clkr = { 3116 .enable_reg = 0x3080, 3117 .enable_mask = BIT(7), 3118 .hw.init = &(struct clk_init_data){ 3119 .name = "pmic_ssbi2_clk", 3120 .ops = &clk_branch_ops, 3121 }, 3122 }, 3123 }; 3124 3125 static struct clk_branch rpm_msg_ram_h_clk = { 3126 .hwcg_reg = 0x27e0, 3127 .hwcg_bit = 6, 3128 .halt_reg = 0x2fd8, 3129 .halt_check = BRANCH_HALT_VOTED, 3130 .halt_bit = 12, 3131 .clkr = { 3132 .enable_reg = 0x3080, 3133 .enable_mask = BIT(6), 3134 .hw.init = &(struct clk_init_data){ 3135 .name = "rpm_msg_ram_h_clk", 3136 .ops = &clk_branch_ops, 3137 }, 3138 }, 3139 }; 3140 3141 static struct clk_regmap *gcc_msm8960_clks[] = { 3142 [PLL3] = &pll3.clkr, 3143 [PLL4_VOTE] = &pll4_vote, 3144 [PLL8] = &pll8.clkr, 3145 [PLL8_VOTE] = &pll8_vote, 3146 [PLL14] = &pll14.clkr, 3147 [PLL14_VOTE] = &pll14_vote, 3148 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 3149 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 3150 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 3151 [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 3152 [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr, 3153 [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr, 3154 [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 3155 [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 3156 [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 3157 [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 3158 [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 3159 [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 3160 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 3161 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 3162 [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr, 3163 [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr, 3164 [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr, 3165 [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr, 3166 [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr, 3167 [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr, 3168 [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr, 3169 [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr, 3170 [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr, 3171 [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr, 3172 [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 3173 [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 3174 [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 3175 [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 3176 [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr, 3177 [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr, 3178 [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 3179 [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 3180 [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 3181 [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 3182 [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 3183 [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 3184 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 3185 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 3186 [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr, 3187 [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr, 3188 [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr, 3189 [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr, 3190 [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr, 3191 [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr, 3192 [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr, 3193 [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr, 3194 [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr, 3195 [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr, 3196 [GP0_SRC] = &gp0_src.clkr, 3197 [GP0_CLK] = &gp0_clk.clkr, 3198 [GP1_SRC] = &gp1_src.clkr, 3199 [GP1_CLK] = &gp1_clk.clkr, 3200 [GP2_SRC] = &gp2_src.clkr, 3201 [GP2_CLK] = &gp2_clk.clkr, 3202 [PMEM_A_CLK] = &pmem_clk.clkr, 3203 [PRNG_SRC] = &prng_src.clkr, 3204 [PRNG_CLK] = &prng_clk.clkr, 3205 [SDC1_SRC] = &sdc1_src.clkr, 3206 [SDC1_CLK] = &sdc1_clk.clkr, 3207 [SDC2_SRC] = &sdc2_src.clkr, 3208 [SDC2_CLK] = &sdc2_clk.clkr, 3209 [SDC3_SRC] = &sdc3_src.clkr, 3210 [SDC3_CLK] = &sdc3_clk.clkr, 3211 [SDC4_SRC] = &sdc4_src.clkr, 3212 [SDC4_CLK] = &sdc4_clk.clkr, 3213 [SDC5_SRC] = &sdc5_src.clkr, 3214 [SDC5_CLK] = &sdc5_clk.clkr, 3215 [TSIF_REF_SRC] = &tsif_ref_src.clkr, 3216 [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 3217 [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr, 3218 [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 3219 [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr, 3220 [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr, 3221 [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr, 3222 [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr, 3223 [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr, 3224 [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr, 3225 [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr, 3226 [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr, 3227 [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr, 3228 [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr, 3229 [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr, 3230 [CE1_CORE_CLK] = &ce1_core_clk.clkr, 3231 [CE1_H_CLK] = &ce1_h_clk.clkr, 3232 [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr, 3233 [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 3234 [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 3235 [GSBI3_H_CLK] = &gsbi3_h_clk.clkr, 3236 [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 3237 [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 3238 [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 3239 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 3240 [GSBI8_H_CLK] = &gsbi8_h_clk.clkr, 3241 [GSBI9_H_CLK] = &gsbi9_h_clk.clkr, 3242 [GSBI10_H_CLK] = &gsbi10_h_clk.clkr, 3243 [GSBI11_H_CLK] = &gsbi11_h_clk.clkr, 3244 [GSBI12_H_CLK] = &gsbi12_h_clk.clkr, 3245 [TSIF_H_CLK] = &tsif_h_clk.clkr, 3246 [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 3247 [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr, 3248 [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 3249 [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr, 3250 [SDC1_H_CLK] = &sdc1_h_clk.clkr, 3251 [SDC2_H_CLK] = &sdc2_h_clk.clkr, 3252 [SDC3_H_CLK] = &sdc3_h_clk.clkr, 3253 [SDC4_H_CLK] = &sdc4_h_clk.clkr, 3254 [SDC5_H_CLK] = &sdc5_h_clk.clkr, 3255 [ADM0_CLK] = &adm0_clk.clkr, 3256 [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 3257 [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 3258 [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 3259 [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 3260 [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 3261 [PLL9] = &hfpll0.clkr, 3262 [PLL10] = &hfpll1.clkr, 3263 [PLL12] = &hfpll_l2.clkr, 3264 }; 3265 3266 static const struct qcom_reset_map gcc_msm8960_resets[] = { 3267 [SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 }, 3268 [SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 }, 3269 [QDSS_STM_RESET] = { 0x2060, 6 }, 3270 [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 3271 [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 3272 [AFAB_SMPSS_M0_RESET] = { 0x20b8 }, 3273 [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 }, 3274 [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7}, 3275 [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 3276 [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 3277 [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 }, 3278 [ADM0_C2_RESET] = { 0x220c, 4}, 3279 [ADM0_C1_RESET] = { 0x220c, 3}, 3280 [ADM0_C0_RESET] = { 0x220c, 2}, 3281 [ADM0_PBUS_RESET] = { 0x220c, 1 }, 3282 [ADM0_RESET] = { 0x220c }, 3283 [QDSS_CLKS_SW_RESET] = { 0x2260, 5 }, 3284 [QDSS_POR_RESET] = { 0x2260, 4 }, 3285 [QDSS_TSCTR_RESET] = { 0x2260, 3 }, 3286 [QDSS_HRESET_RESET] = { 0x2260, 2 }, 3287 [QDSS_AXI_RESET] = { 0x2260, 1 }, 3288 [QDSS_DBG_RESET] = { 0x2260 }, 3289 [PCIE_A_RESET] = { 0x22c0, 7 }, 3290 [PCIE_AUX_RESET] = { 0x22c8, 7 }, 3291 [PCIE_H_RESET] = { 0x22d0, 7 }, 3292 [SFAB_PCIE_M_RESET] = { 0x22d4, 1 }, 3293 [SFAB_PCIE_S_RESET] = { 0x22d4 }, 3294 [SFAB_MSS_M_RESET] = { 0x2340, 7 }, 3295 [SFAB_USB3_M_RESET] = { 0x2360, 7 }, 3296 [SFAB_RIVA_M_RESET] = { 0x2380, 7 }, 3297 [SFAB_LPASS_RESET] = { 0x23a0, 7 }, 3298 [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 3299 [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 3300 [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 3301 [SFAB_SATA_S_RESET] = { 0x2480, 7 }, 3302 [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 3303 [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 3304 [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 3305 [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 3306 [DFAB_ARB0_RESET] = { 0x2560, 7 }, 3307 [DFAB_ARB1_RESET] = { 0x2564, 7 }, 3308 [PPSS_PROC_RESET] = { 0x2594, 1 }, 3309 [PPSS_RESET] = { 0x2594}, 3310 [DMA_BAM_RESET] = { 0x25c0, 7 }, 3311 [SPS_TIC_H_RESET] = { 0x2600, 7 }, 3312 [SLIMBUS_H_RESET] = { 0x2620, 7 }, 3313 [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 3314 [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 3315 [TSIF_H_RESET] = { 0x2700, 7 }, 3316 [CE1_H_RESET] = { 0x2720, 7 }, 3317 [CE1_CORE_RESET] = { 0x2724, 7 }, 3318 [CE1_SLEEP_RESET] = { 0x2728, 7 }, 3319 [CE2_H_RESET] = { 0x2740, 7 }, 3320 [CE2_CORE_RESET] = { 0x2744, 7 }, 3321 [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 3322 [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 3323 [RPM_PROC_RESET] = { 0x27c0, 7 }, 3324 [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 3325 [SDC1_RESET] = { 0x2830 }, 3326 [SDC2_RESET] = { 0x2850 }, 3327 [SDC3_RESET] = { 0x2870 }, 3328 [SDC4_RESET] = { 0x2890 }, 3329 [SDC5_RESET] = { 0x28b0 }, 3330 [DFAB_A2_RESET] = { 0x28c0, 7 }, 3331 [USB_HS1_RESET] = { 0x2910 }, 3332 [USB_HSIC_RESET] = { 0x2934 }, 3333 [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 3334 [USB_FS1_RESET] = { 0x2974 }, 3335 [USB_FS2_XCVR_RESET] = { 0x2994, 1 }, 3336 [USB_FS2_RESET] = { 0x2994 }, 3337 [GSBI1_RESET] = { 0x29dc }, 3338 [GSBI2_RESET] = { 0x29fc }, 3339 [GSBI3_RESET] = { 0x2a1c }, 3340 [GSBI4_RESET] = { 0x2a3c }, 3341 [GSBI5_RESET] = { 0x2a5c }, 3342 [GSBI6_RESET] = { 0x2a7c }, 3343 [GSBI7_RESET] = { 0x2a9c }, 3344 [GSBI8_RESET] = { 0x2abc }, 3345 [GSBI9_RESET] = { 0x2adc }, 3346 [GSBI10_RESET] = { 0x2afc }, 3347 [GSBI11_RESET] = { 0x2b1c }, 3348 [GSBI12_RESET] = { 0x2b3c }, 3349 [SPDM_RESET] = { 0x2b6c }, 3350 [TLMM_H_RESET] = { 0x2ba0, 7 }, 3351 [SFAB_MSS_S_RESET] = { 0x2c00, 7 }, 3352 [MSS_SLP_RESET] = { 0x2c60, 7 }, 3353 [MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 }, 3354 [MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 }, 3355 [MSS_RESET] = { 0x2c64 }, 3356 [SATA_H_RESET] = { 0x2c80, 7 }, 3357 [SATA_RXOOB_RESE] = { 0x2c8c, 7 }, 3358 [SATA_PMALIVE_RESET] = { 0x2c90, 7 }, 3359 [SATA_SFAB_M_RESET] = { 0x2c98, 7 }, 3360 [TSSC_RESET] = { 0x2ca0, 7 }, 3361 [PDM_RESET] = { 0x2cc0, 12 }, 3362 [MPM_H_RESET] = { 0x2da0, 7 }, 3363 [MPM_RESET] = { 0x2da4 }, 3364 [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 3365 [PRNG_RESET] = { 0x2e80, 12 }, 3366 [RIVA_RESET] = { 0x35e0 }, 3367 }; 3368 3369 static struct clk_regmap *gcc_apq8064_clks[] = { 3370 [PLL3] = &pll3.clkr, 3371 [PLL4_VOTE] = &pll4_vote, 3372 [PLL8] = &pll8.clkr, 3373 [PLL8_VOTE] = &pll8_vote, 3374 [PLL14] = &pll14.clkr, 3375 [PLL14_VOTE] = &pll14_vote, 3376 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 3377 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 3378 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 3379 [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 3380 [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr, 3381 [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr, 3382 [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 3383 [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 3384 [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 3385 [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 3386 [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 3387 [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 3388 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 3389 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 3390 [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 3391 [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 3392 [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 3393 [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 3394 [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr, 3395 [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr, 3396 [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 3397 [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 3398 [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 3399 [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 3400 [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 3401 [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 3402 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 3403 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 3404 [GP0_SRC] = &gp0_src.clkr, 3405 [GP0_CLK] = &gp0_clk.clkr, 3406 [GP1_SRC] = &gp1_src.clkr, 3407 [GP1_CLK] = &gp1_clk.clkr, 3408 [GP2_SRC] = &gp2_src.clkr, 3409 [GP2_CLK] = &gp2_clk.clkr, 3410 [PMEM_A_CLK] = &pmem_clk.clkr, 3411 [PRNG_SRC] = &prng_src.clkr, 3412 [PRNG_CLK] = &prng_clk.clkr, 3413 [SDC1_SRC] = &sdc1_src.clkr, 3414 [SDC1_CLK] = &sdc1_clk.clkr, 3415 [SDC2_SRC] = &sdc2_src.clkr, 3416 [SDC2_CLK] = &sdc2_clk.clkr, 3417 [SDC3_SRC] = &sdc3_src.clkr, 3418 [SDC3_CLK] = &sdc3_clk.clkr, 3419 [SDC4_SRC] = &sdc4_src.clkr, 3420 [SDC4_CLK] = &sdc4_clk.clkr, 3421 [TSIF_REF_SRC] = &tsif_ref_src.clkr, 3422 [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 3423 [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr, 3424 [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 3425 [USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr, 3426 [USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr, 3427 [USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr, 3428 [USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr, 3429 [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr, 3430 [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr, 3431 [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr, 3432 [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr, 3433 [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr, 3434 [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr, 3435 [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr, 3436 [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr, 3437 [SATA_H_CLK] = &sata_h_clk.clkr, 3438 [SATA_CLK_SRC] = &sata_clk_src.clkr, 3439 [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr, 3440 [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr, 3441 [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr, 3442 [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr, 3443 [SATA_A_CLK] = &sata_a_clk.clkr, 3444 [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr, 3445 [CE3_SRC] = &ce3_src.clkr, 3446 [CE3_CORE_CLK] = &ce3_core_clk.clkr, 3447 [CE3_H_CLK] = &ce3_h_clk.clkr, 3448 [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr, 3449 [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 3450 [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 3451 [GSBI3_H_CLK] = &gsbi3_h_clk.clkr, 3452 [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 3453 [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 3454 [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 3455 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 3456 [TSIF_H_CLK] = &tsif_h_clk.clkr, 3457 [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 3458 [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 3459 [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr, 3460 [USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr, 3461 [USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr, 3462 [SDC1_H_CLK] = &sdc1_h_clk.clkr, 3463 [SDC2_H_CLK] = &sdc2_h_clk.clkr, 3464 [SDC3_H_CLK] = &sdc3_h_clk.clkr, 3465 [SDC4_H_CLK] = &sdc4_h_clk.clkr, 3466 [ADM0_CLK] = &adm0_clk.clkr, 3467 [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 3468 [PCIE_A_CLK] = &pcie_a_clk.clkr, 3469 [PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr, 3470 [PCIE_H_CLK] = &pcie_h_clk.clkr, 3471 [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 3472 [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 3473 [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 3474 [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 3475 [PLL9] = &hfpll0.clkr, 3476 [PLL10] = &hfpll1.clkr, 3477 [PLL12] = &hfpll_l2.clkr, 3478 [PLL16] = &hfpll2.clkr, 3479 [PLL17] = &hfpll3.clkr, 3480 }; 3481 3482 static const struct qcom_reset_map gcc_apq8064_resets[] = { 3483 [QDSS_STM_RESET] = { 0x2060, 6 }, 3484 [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 3485 [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 3486 [AFAB_SMPSS_M0_RESET] = { 0x20b8 }, 3487 [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 }, 3488 [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7}, 3489 [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 3490 [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 3491 [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 }, 3492 [ADM0_C2_RESET] = { 0x220c, 4}, 3493 [ADM0_C1_RESET] = { 0x220c, 3}, 3494 [ADM0_C0_RESET] = { 0x220c, 2}, 3495 [ADM0_PBUS_RESET] = { 0x220c, 1 }, 3496 [ADM0_RESET] = { 0x220c }, 3497 [QDSS_CLKS_SW_RESET] = { 0x2260, 5 }, 3498 [QDSS_POR_RESET] = { 0x2260, 4 }, 3499 [QDSS_TSCTR_RESET] = { 0x2260, 3 }, 3500 [QDSS_HRESET_RESET] = { 0x2260, 2 }, 3501 [QDSS_AXI_RESET] = { 0x2260, 1 }, 3502 [QDSS_DBG_RESET] = { 0x2260 }, 3503 [SFAB_PCIE_M_RESET] = { 0x22d8, 1 }, 3504 [SFAB_PCIE_S_RESET] = { 0x22d8 }, 3505 [PCIE_EXT_PCI_RESET] = { 0x22dc, 6 }, 3506 [PCIE_PHY_RESET] = { 0x22dc, 5 }, 3507 [PCIE_PCI_RESET] = { 0x22dc, 4 }, 3508 [PCIE_POR_RESET] = { 0x22dc, 3 }, 3509 [PCIE_HCLK_RESET] = { 0x22dc, 2 }, 3510 [PCIE_ACLK_RESET] = { 0x22dc }, 3511 [SFAB_USB3_M_RESET] = { 0x2360, 7 }, 3512 [SFAB_RIVA_M_RESET] = { 0x2380, 7 }, 3513 [SFAB_LPASS_RESET] = { 0x23a0, 7 }, 3514 [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 3515 [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 3516 [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 3517 [SFAB_SATA_S_RESET] = { 0x2480, 7 }, 3518 [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 3519 [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 3520 [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 3521 [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 3522 [DFAB_ARB0_RESET] = { 0x2560, 7 }, 3523 [DFAB_ARB1_RESET] = { 0x2564, 7 }, 3524 [PPSS_PROC_RESET] = { 0x2594, 1 }, 3525 [PPSS_RESET] = { 0x2594}, 3526 [DMA_BAM_RESET] = { 0x25c0, 7 }, 3527 [SPS_TIC_H_RESET] = { 0x2600, 7 }, 3528 [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 3529 [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 3530 [TSIF_H_RESET] = { 0x2700, 7 }, 3531 [CE1_H_RESET] = { 0x2720, 7 }, 3532 [CE1_CORE_RESET] = { 0x2724, 7 }, 3533 [CE1_SLEEP_RESET] = { 0x2728, 7 }, 3534 [CE2_H_RESET] = { 0x2740, 7 }, 3535 [CE2_CORE_RESET] = { 0x2744, 7 }, 3536 [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 3537 [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 3538 [RPM_PROC_RESET] = { 0x27c0, 7 }, 3539 [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 3540 [SDC1_RESET] = { 0x2830 }, 3541 [SDC2_RESET] = { 0x2850 }, 3542 [SDC3_RESET] = { 0x2870 }, 3543 [SDC4_RESET] = { 0x2890 }, 3544 [USB_HS1_RESET] = { 0x2910 }, 3545 [USB_HSIC_RESET] = { 0x2934 }, 3546 [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 3547 [USB_FS1_RESET] = { 0x2974 }, 3548 [GSBI1_RESET] = { 0x29dc }, 3549 [GSBI2_RESET] = { 0x29fc }, 3550 [GSBI3_RESET] = { 0x2a1c }, 3551 [GSBI4_RESET] = { 0x2a3c }, 3552 [GSBI5_RESET] = { 0x2a5c }, 3553 [GSBI6_RESET] = { 0x2a7c }, 3554 [GSBI7_RESET] = { 0x2a9c }, 3555 [SPDM_RESET] = { 0x2b6c }, 3556 [TLMM_H_RESET] = { 0x2ba0, 7 }, 3557 [SATA_SFAB_M_RESET] = { 0x2c18 }, 3558 [SATA_RESET] = { 0x2c1c }, 3559 [GSS_SLP_RESET] = { 0x2c60, 7 }, 3560 [GSS_RESET] = { 0x2c64 }, 3561 [TSSC_RESET] = { 0x2ca0, 7 }, 3562 [PDM_RESET] = { 0x2cc0, 12 }, 3563 [MPM_H_RESET] = { 0x2da0, 7 }, 3564 [MPM_RESET] = { 0x2da4 }, 3565 [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 3566 [PRNG_RESET] = { 0x2e80, 12 }, 3567 [RIVA_RESET] = { 0x35e0 }, 3568 [CE3_H_RESET] = { 0x36c4, 7 }, 3569 [SFAB_CE3_M_RESET] = { 0x36c8, 1 }, 3570 [SFAB_CE3_S_RESET] = { 0x36c8 }, 3571 [CE3_RESET] = { 0x36cc, 7 }, 3572 [CE3_SLEEP_RESET] = { 0x36d0, 7 }, 3573 [USB_HS3_RESET] = { 0x3710 }, 3574 [USB_HS4_RESET] = { 0x3730 }, 3575 }; 3576 3577 static const struct regmap_config gcc_msm8960_regmap_config = { 3578 .reg_bits = 32, 3579 .reg_stride = 4, 3580 .val_bits = 32, 3581 .max_register = 0x3660, 3582 .fast_io = true, 3583 }; 3584 3585 static const struct regmap_config gcc_apq8064_regmap_config = { 3586 .reg_bits = 32, 3587 .reg_stride = 4, 3588 .val_bits = 32, 3589 .max_register = 0x3880, 3590 .fast_io = true, 3591 }; 3592 3593 static const struct qcom_cc_desc gcc_msm8960_desc = { 3594 .config = &gcc_msm8960_regmap_config, 3595 .clks = gcc_msm8960_clks, 3596 .num_clks = ARRAY_SIZE(gcc_msm8960_clks), 3597 .resets = gcc_msm8960_resets, 3598 .num_resets = ARRAY_SIZE(gcc_msm8960_resets), 3599 }; 3600 3601 static const struct qcom_cc_desc gcc_apq8064_desc = { 3602 .config = &gcc_apq8064_regmap_config, 3603 .clks = gcc_apq8064_clks, 3604 .num_clks = ARRAY_SIZE(gcc_apq8064_clks), 3605 .resets = gcc_apq8064_resets, 3606 .num_resets = ARRAY_SIZE(gcc_apq8064_resets), 3607 }; 3608 3609 static const struct of_device_id gcc_msm8960_match_table[] = { 3610 { .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc }, 3611 { .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc }, 3612 { } 3613 }; 3614 MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table); 3615 3616 static int gcc_msm8960_probe(struct platform_device *pdev) 3617 { 3618 struct device *dev = &pdev->dev; 3619 const struct of_device_id *match; 3620 struct platform_device *tsens; 3621 int ret; 3622 3623 match = of_match_device(gcc_msm8960_match_table, &pdev->dev); 3624 if (!match) 3625 return -EINVAL; 3626 3627 ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000); 3628 if (ret) 3629 return ret; 3630 3631 ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000); 3632 if (ret) 3633 return ret; 3634 3635 ret = qcom_cc_probe(pdev, match->data); 3636 if (ret) 3637 return ret; 3638 3639 if (match->data == &gcc_apq8064_desc) { 3640 hfpll1.d = &hfpll1_8064_data; 3641 hfpll_l2.d = &hfpll_l2_8064_data; 3642 } 3643 3644 tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1, 3645 NULL, 0); 3646 if (IS_ERR(tsens)) 3647 return PTR_ERR(tsens); 3648 3649 platform_set_drvdata(pdev, tsens); 3650 3651 return 0; 3652 } 3653 3654 static int gcc_msm8960_remove(struct platform_device *pdev) 3655 { 3656 struct platform_device *tsens = platform_get_drvdata(pdev); 3657 3658 platform_device_unregister(tsens); 3659 3660 return 0; 3661 } 3662 3663 static struct platform_driver gcc_msm8960_driver = { 3664 .probe = gcc_msm8960_probe, 3665 .remove = gcc_msm8960_remove, 3666 .driver = { 3667 .name = "gcc-msm8960", 3668 .of_match_table = gcc_msm8960_match_table, 3669 }, 3670 }; 3671 3672 static int __init gcc_msm8960_init(void) 3673 { 3674 return platform_driver_register(&gcc_msm8960_driver); 3675 } 3676 core_initcall(gcc_msm8960_init); 3677 3678 static void __exit gcc_msm8960_exit(void) 3679 { 3680 platform_driver_unregister(&gcc_msm8960_driver); 3681 } 3682 module_exit(gcc_msm8960_exit); 3683 3684 MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver"); 3685 MODULE_LICENSE("GPL v2"); 3686 MODULE_ALIAS("platform:gcc-msm8960"); 3687