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