1 /* 2 * Copyright (c) 2013, 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-msm8660.h> 26 #include <dt-bindings/reset/qcom,gcc-msm8660.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 "reset.h" 34 35 static struct clk_pll pll8 = { 36 .l_reg = 0x3144, 37 .m_reg = 0x3148, 38 .n_reg = 0x314c, 39 .config_reg = 0x3154, 40 .mode_reg = 0x3140, 41 .status_reg = 0x3158, 42 .status_bit = 16, 43 .clkr.hw.init = &(struct clk_init_data){ 44 .name = "pll8", 45 .parent_names = (const char *[]){ "pxo" }, 46 .num_parents = 1, 47 .ops = &clk_pll_ops, 48 }, 49 }; 50 51 static struct clk_regmap pll8_vote = { 52 .enable_reg = 0x34c0, 53 .enable_mask = BIT(8), 54 .hw.init = &(struct clk_init_data){ 55 .name = "pll8_vote", 56 .parent_names = (const char *[]){ "pll8" }, 57 .num_parents = 1, 58 .ops = &clk_pll_vote_ops, 59 }, 60 }; 61 62 enum { 63 P_PXO, 64 P_PLL8, 65 P_CXO, 66 }; 67 68 static const struct parent_map gcc_pxo_pll8_map[] = { 69 { P_PXO, 0 }, 70 { P_PLL8, 3 } 71 }; 72 73 static const char * const gcc_pxo_pll8[] = { 74 "pxo", 75 "pll8_vote", 76 }; 77 78 static const struct parent_map gcc_pxo_pll8_cxo_map[] = { 79 { P_PXO, 0 }, 80 { P_PLL8, 3 }, 81 { P_CXO, 5 } 82 }; 83 84 static const char * const gcc_pxo_pll8_cxo[] = { 85 "pxo", 86 "pll8_vote", 87 "cxo", 88 }; 89 90 static struct freq_tbl clk_tbl_gsbi_uart[] = { 91 { 1843200, P_PLL8, 2, 6, 625 }, 92 { 3686400, P_PLL8, 2, 12, 625 }, 93 { 7372800, P_PLL8, 2, 24, 625 }, 94 { 14745600, P_PLL8, 2, 48, 625 }, 95 { 16000000, P_PLL8, 4, 1, 6 }, 96 { 24000000, P_PLL8, 4, 1, 4 }, 97 { 32000000, P_PLL8, 4, 1, 3 }, 98 { 40000000, P_PLL8, 1, 5, 48 }, 99 { 46400000, P_PLL8, 1, 29, 240 }, 100 { 48000000, P_PLL8, 4, 1, 2 }, 101 { 51200000, P_PLL8, 1, 2, 15 }, 102 { 56000000, P_PLL8, 1, 7, 48 }, 103 { 58982400, P_PLL8, 1, 96, 625 }, 104 { 64000000, P_PLL8, 2, 1, 3 }, 105 { } 106 }; 107 108 static struct clk_rcg gsbi1_uart_src = { 109 .ns_reg = 0x29d4, 110 .md_reg = 0x29d0, 111 .mn = { 112 .mnctr_en_bit = 8, 113 .mnctr_reset_bit = 7, 114 .mnctr_mode_shift = 5, 115 .n_val_shift = 16, 116 .m_val_shift = 16, 117 .width = 16, 118 }, 119 .p = { 120 .pre_div_shift = 3, 121 .pre_div_width = 2, 122 }, 123 .s = { 124 .src_sel_shift = 0, 125 .parent_map = gcc_pxo_pll8_map, 126 }, 127 .freq_tbl = clk_tbl_gsbi_uart, 128 .clkr = { 129 .enable_reg = 0x29d4, 130 .enable_mask = BIT(11), 131 .hw.init = &(struct clk_init_data){ 132 .name = "gsbi1_uart_src", 133 .parent_names = gcc_pxo_pll8, 134 .num_parents = 2, 135 .ops = &clk_rcg_ops, 136 .flags = CLK_SET_PARENT_GATE, 137 }, 138 }, 139 }; 140 141 static struct clk_branch gsbi1_uart_clk = { 142 .halt_reg = 0x2fcc, 143 .halt_bit = 10, 144 .clkr = { 145 .enable_reg = 0x29d4, 146 .enable_mask = BIT(9), 147 .hw.init = &(struct clk_init_data){ 148 .name = "gsbi1_uart_clk", 149 .parent_names = (const char *[]){ 150 "gsbi1_uart_src", 151 }, 152 .num_parents = 1, 153 .ops = &clk_branch_ops, 154 .flags = CLK_SET_RATE_PARENT, 155 }, 156 }, 157 }; 158 159 static struct clk_rcg gsbi2_uart_src = { 160 .ns_reg = 0x29f4, 161 .md_reg = 0x29f0, 162 .mn = { 163 .mnctr_en_bit = 8, 164 .mnctr_reset_bit = 7, 165 .mnctr_mode_shift = 5, 166 .n_val_shift = 16, 167 .m_val_shift = 16, 168 .width = 16, 169 }, 170 .p = { 171 .pre_div_shift = 3, 172 .pre_div_width = 2, 173 }, 174 .s = { 175 .src_sel_shift = 0, 176 .parent_map = gcc_pxo_pll8_map, 177 }, 178 .freq_tbl = clk_tbl_gsbi_uart, 179 .clkr = { 180 .enable_reg = 0x29f4, 181 .enable_mask = BIT(11), 182 .hw.init = &(struct clk_init_data){ 183 .name = "gsbi2_uart_src", 184 .parent_names = gcc_pxo_pll8, 185 .num_parents = 2, 186 .ops = &clk_rcg_ops, 187 .flags = CLK_SET_PARENT_GATE, 188 }, 189 }, 190 }; 191 192 static struct clk_branch gsbi2_uart_clk = { 193 .halt_reg = 0x2fcc, 194 .halt_bit = 6, 195 .clkr = { 196 .enable_reg = 0x29f4, 197 .enable_mask = BIT(9), 198 .hw.init = &(struct clk_init_data){ 199 .name = "gsbi2_uart_clk", 200 .parent_names = (const char *[]){ 201 "gsbi2_uart_src", 202 }, 203 .num_parents = 1, 204 .ops = &clk_branch_ops, 205 .flags = CLK_SET_RATE_PARENT, 206 }, 207 }, 208 }; 209 210 static struct clk_rcg gsbi3_uart_src = { 211 .ns_reg = 0x2a14, 212 .md_reg = 0x2a10, 213 .mn = { 214 .mnctr_en_bit = 8, 215 .mnctr_reset_bit = 7, 216 .mnctr_mode_shift = 5, 217 .n_val_shift = 16, 218 .m_val_shift = 16, 219 .width = 16, 220 }, 221 .p = { 222 .pre_div_shift = 3, 223 .pre_div_width = 2, 224 }, 225 .s = { 226 .src_sel_shift = 0, 227 .parent_map = gcc_pxo_pll8_map, 228 }, 229 .freq_tbl = clk_tbl_gsbi_uart, 230 .clkr = { 231 .enable_reg = 0x2a14, 232 .enable_mask = BIT(11), 233 .hw.init = &(struct clk_init_data){ 234 .name = "gsbi3_uart_src", 235 .parent_names = gcc_pxo_pll8, 236 .num_parents = 2, 237 .ops = &clk_rcg_ops, 238 .flags = CLK_SET_PARENT_GATE, 239 }, 240 }, 241 }; 242 243 static struct clk_branch gsbi3_uart_clk = { 244 .halt_reg = 0x2fcc, 245 .halt_bit = 2, 246 .clkr = { 247 .enable_reg = 0x2a14, 248 .enable_mask = BIT(9), 249 .hw.init = &(struct clk_init_data){ 250 .name = "gsbi3_uart_clk", 251 .parent_names = (const char *[]){ 252 "gsbi3_uart_src", 253 }, 254 .num_parents = 1, 255 .ops = &clk_branch_ops, 256 .flags = CLK_SET_RATE_PARENT, 257 }, 258 }, 259 }; 260 261 static struct clk_rcg gsbi4_uart_src = { 262 .ns_reg = 0x2a34, 263 .md_reg = 0x2a30, 264 .mn = { 265 .mnctr_en_bit = 8, 266 .mnctr_reset_bit = 7, 267 .mnctr_mode_shift = 5, 268 .n_val_shift = 16, 269 .m_val_shift = 16, 270 .width = 16, 271 }, 272 .p = { 273 .pre_div_shift = 3, 274 .pre_div_width = 2, 275 }, 276 .s = { 277 .src_sel_shift = 0, 278 .parent_map = gcc_pxo_pll8_map, 279 }, 280 .freq_tbl = clk_tbl_gsbi_uart, 281 .clkr = { 282 .enable_reg = 0x2a34, 283 .enable_mask = BIT(11), 284 .hw.init = &(struct clk_init_data){ 285 .name = "gsbi4_uart_src", 286 .parent_names = gcc_pxo_pll8, 287 .num_parents = 2, 288 .ops = &clk_rcg_ops, 289 .flags = CLK_SET_PARENT_GATE, 290 }, 291 }, 292 }; 293 294 static struct clk_branch gsbi4_uart_clk = { 295 .halt_reg = 0x2fd0, 296 .halt_bit = 26, 297 .clkr = { 298 .enable_reg = 0x2a34, 299 .enable_mask = BIT(9), 300 .hw.init = &(struct clk_init_data){ 301 .name = "gsbi4_uart_clk", 302 .parent_names = (const char *[]){ 303 "gsbi4_uart_src", 304 }, 305 .num_parents = 1, 306 .ops = &clk_branch_ops, 307 .flags = CLK_SET_RATE_PARENT, 308 }, 309 }, 310 }; 311 312 static struct clk_rcg gsbi5_uart_src = { 313 .ns_reg = 0x2a54, 314 .md_reg = 0x2a50, 315 .mn = { 316 .mnctr_en_bit = 8, 317 .mnctr_reset_bit = 7, 318 .mnctr_mode_shift = 5, 319 .n_val_shift = 16, 320 .m_val_shift = 16, 321 .width = 16, 322 }, 323 .p = { 324 .pre_div_shift = 3, 325 .pre_div_width = 2, 326 }, 327 .s = { 328 .src_sel_shift = 0, 329 .parent_map = gcc_pxo_pll8_map, 330 }, 331 .freq_tbl = clk_tbl_gsbi_uart, 332 .clkr = { 333 .enable_reg = 0x2a54, 334 .enable_mask = BIT(11), 335 .hw.init = &(struct clk_init_data){ 336 .name = "gsbi5_uart_src", 337 .parent_names = gcc_pxo_pll8, 338 .num_parents = 2, 339 .ops = &clk_rcg_ops, 340 .flags = CLK_SET_PARENT_GATE, 341 }, 342 }, 343 }; 344 345 static struct clk_branch gsbi5_uart_clk = { 346 .halt_reg = 0x2fd0, 347 .halt_bit = 22, 348 .clkr = { 349 .enable_reg = 0x2a54, 350 .enable_mask = BIT(9), 351 .hw.init = &(struct clk_init_data){ 352 .name = "gsbi5_uart_clk", 353 .parent_names = (const char *[]){ 354 "gsbi5_uart_src", 355 }, 356 .num_parents = 1, 357 .ops = &clk_branch_ops, 358 .flags = CLK_SET_RATE_PARENT, 359 }, 360 }, 361 }; 362 363 static struct clk_rcg gsbi6_uart_src = { 364 .ns_reg = 0x2a74, 365 .md_reg = 0x2a70, 366 .mn = { 367 .mnctr_en_bit = 8, 368 .mnctr_reset_bit = 7, 369 .mnctr_mode_shift = 5, 370 .n_val_shift = 16, 371 .m_val_shift = 16, 372 .width = 16, 373 }, 374 .p = { 375 .pre_div_shift = 3, 376 .pre_div_width = 2, 377 }, 378 .s = { 379 .src_sel_shift = 0, 380 .parent_map = gcc_pxo_pll8_map, 381 }, 382 .freq_tbl = clk_tbl_gsbi_uart, 383 .clkr = { 384 .enable_reg = 0x2a74, 385 .enable_mask = BIT(11), 386 .hw.init = &(struct clk_init_data){ 387 .name = "gsbi6_uart_src", 388 .parent_names = gcc_pxo_pll8, 389 .num_parents = 2, 390 .ops = &clk_rcg_ops, 391 .flags = CLK_SET_PARENT_GATE, 392 }, 393 }, 394 }; 395 396 static struct clk_branch gsbi6_uart_clk = { 397 .halt_reg = 0x2fd0, 398 .halt_bit = 18, 399 .clkr = { 400 .enable_reg = 0x2a74, 401 .enable_mask = BIT(9), 402 .hw.init = &(struct clk_init_data){ 403 .name = "gsbi6_uart_clk", 404 .parent_names = (const char *[]){ 405 "gsbi6_uart_src", 406 }, 407 .num_parents = 1, 408 .ops = &clk_branch_ops, 409 .flags = CLK_SET_RATE_PARENT, 410 }, 411 }, 412 }; 413 414 static struct clk_rcg gsbi7_uart_src = { 415 .ns_reg = 0x2a94, 416 .md_reg = 0x2a90, 417 .mn = { 418 .mnctr_en_bit = 8, 419 .mnctr_reset_bit = 7, 420 .mnctr_mode_shift = 5, 421 .n_val_shift = 16, 422 .m_val_shift = 16, 423 .width = 16, 424 }, 425 .p = { 426 .pre_div_shift = 3, 427 .pre_div_width = 2, 428 }, 429 .s = { 430 .src_sel_shift = 0, 431 .parent_map = gcc_pxo_pll8_map, 432 }, 433 .freq_tbl = clk_tbl_gsbi_uart, 434 .clkr = { 435 .enable_reg = 0x2a94, 436 .enable_mask = BIT(11), 437 .hw.init = &(struct clk_init_data){ 438 .name = "gsbi7_uart_src", 439 .parent_names = gcc_pxo_pll8, 440 .num_parents = 2, 441 .ops = &clk_rcg_ops, 442 .flags = CLK_SET_PARENT_GATE, 443 }, 444 }, 445 }; 446 447 static struct clk_branch gsbi7_uart_clk = { 448 .halt_reg = 0x2fd0, 449 .halt_bit = 14, 450 .clkr = { 451 .enable_reg = 0x2a94, 452 .enable_mask = BIT(9), 453 .hw.init = &(struct clk_init_data){ 454 .name = "gsbi7_uart_clk", 455 .parent_names = (const char *[]){ 456 "gsbi7_uart_src", 457 }, 458 .num_parents = 1, 459 .ops = &clk_branch_ops, 460 .flags = CLK_SET_RATE_PARENT, 461 }, 462 }, 463 }; 464 465 static struct clk_rcg gsbi8_uart_src = { 466 .ns_reg = 0x2ab4, 467 .md_reg = 0x2ab0, 468 .mn = { 469 .mnctr_en_bit = 8, 470 .mnctr_reset_bit = 7, 471 .mnctr_mode_shift = 5, 472 .n_val_shift = 16, 473 .m_val_shift = 16, 474 .width = 16, 475 }, 476 .p = { 477 .pre_div_shift = 3, 478 .pre_div_width = 2, 479 }, 480 .s = { 481 .src_sel_shift = 0, 482 .parent_map = gcc_pxo_pll8_map, 483 }, 484 .freq_tbl = clk_tbl_gsbi_uart, 485 .clkr = { 486 .enable_reg = 0x2ab4, 487 .enable_mask = BIT(11), 488 .hw.init = &(struct clk_init_data){ 489 .name = "gsbi8_uart_src", 490 .parent_names = gcc_pxo_pll8, 491 .num_parents = 2, 492 .ops = &clk_rcg_ops, 493 .flags = CLK_SET_PARENT_GATE, 494 }, 495 }, 496 }; 497 498 static struct clk_branch gsbi8_uart_clk = { 499 .halt_reg = 0x2fd0, 500 .halt_bit = 10, 501 .clkr = { 502 .enable_reg = 0x2ab4, 503 .enable_mask = BIT(9), 504 .hw.init = &(struct clk_init_data){ 505 .name = "gsbi8_uart_clk", 506 .parent_names = (const char *[]){ "gsbi8_uart_src" }, 507 .num_parents = 1, 508 .ops = &clk_branch_ops, 509 .flags = CLK_SET_RATE_PARENT, 510 }, 511 }, 512 }; 513 514 static struct clk_rcg gsbi9_uart_src = { 515 .ns_reg = 0x2ad4, 516 .md_reg = 0x2ad0, 517 .mn = { 518 .mnctr_en_bit = 8, 519 .mnctr_reset_bit = 7, 520 .mnctr_mode_shift = 5, 521 .n_val_shift = 16, 522 .m_val_shift = 16, 523 .width = 16, 524 }, 525 .p = { 526 .pre_div_shift = 3, 527 .pre_div_width = 2, 528 }, 529 .s = { 530 .src_sel_shift = 0, 531 .parent_map = gcc_pxo_pll8_map, 532 }, 533 .freq_tbl = clk_tbl_gsbi_uart, 534 .clkr = { 535 .enable_reg = 0x2ad4, 536 .enable_mask = BIT(11), 537 .hw.init = &(struct clk_init_data){ 538 .name = "gsbi9_uart_src", 539 .parent_names = gcc_pxo_pll8, 540 .num_parents = 2, 541 .ops = &clk_rcg_ops, 542 .flags = CLK_SET_PARENT_GATE, 543 }, 544 }, 545 }; 546 547 static struct clk_branch gsbi9_uart_clk = { 548 .halt_reg = 0x2fd0, 549 .halt_bit = 6, 550 .clkr = { 551 .enable_reg = 0x2ad4, 552 .enable_mask = BIT(9), 553 .hw.init = &(struct clk_init_data){ 554 .name = "gsbi9_uart_clk", 555 .parent_names = (const char *[]){ "gsbi9_uart_src" }, 556 .num_parents = 1, 557 .ops = &clk_branch_ops, 558 .flags = CLK_SET_RATE_PARENT, 559 }, 560 }, 561 }; 562 563 static struct clk_rcg gsbi10_uart_src = { 564 .ns_reg = 0x2af4, 565 .md_reg = 0x2af0, 566 .mn = { 567 .mnctr_en_bit = 8, 568 .mnctr_reset_bit = 7, 569 .mnctr_mode_shift = 5, 570 .n_val_shift = 16, 571 .m_val_shift = 16, 572 .width = 16, 573 }, 574 .p = { 575 .pre_div_shift = 3, 576 .pre_div_width = 2, 577 }, 578 .s = { 579 .src_sel_shift = 0, 580 .parent_map = gcc_pxo_pll8_map, 581 }, 582 .freq_tbl = clk_tbl_gsbi_uart, 583 .clkr = { 584 .enable_reg = 0x2af4, 585 .enable_mask = BIT(11), 586 .hw.init = &(struct clk_init_data){ 587 .name = "gsbi10_uart_src", 588 .parent_names = gcc_pxo_pll8, 589 .num_parents = 2, 590 .ops = &clk_rcg_ops, 591 .flags = CLK_SET_PARENT_GATE, 592 }, 593 }, 594 }; 595 596 static struct clk_branch gsbi10_uart_clk = { 597 .halt_reg = 0x2fd0, 598 .halt_bit = 2, 599 .clkr = { 600 .enable_reg = 0x2af4, 601 .enable_mask = BIT(9), 602 .hw.init = &(struct clk_init_data){ 603 .name = "gsbi10_uart_clk", 604 .parent_names = (const char *[]){ "gsbi10_uart_src" }, 605 .num_parents = 1, 606 .ops = &clk_branch_ops, 607 .flags = CLK_SET_RATE_PARENT, 608 }, 609 }, 610 }; 611 612 static struct clk_rcg gsbi11_uart_src = { 613 .ns_reg = 0x2b14, 614 .md_reg = 0x2b10, 615 .mn = { 616 .mnctr_en_bit = 8, 617 .mnctr_reset_bit = 7, 618 .mnctr_mode_shift = 5, 619 .n_val_shift = 16, 620 .m_val_shift = 16, 621 .width = 16, 622 }, 623 .p = { 624 .pre_div_shift = 3, 625 .pre_div_width = 2, 626 }, 627 .s = { 628 .src_sel_shift = 0, 629 .parent_map = gcc_pxo_pll8_map, 630 }, 631 .freq_tbl = clk_tbl_gsbi_uart, 632 .clkr = { 633 .enable_reg = 0x2b14, 634 .enable_mask = BIT(11), 635 .hw.init = &(struct clk_init_data){ 636 .name = "gsbi11_uart_src", 637 .parent_names = gcc_pxo_pll8, 638 .num_parents = 2, 639 .ops = &clk_rcg_ops, 640 .flags = CLK_SET_PARENT_GATE, 641 }, 642 }, 643 }; 644 645 static struct clk_branch gsbi11_uart_clk = { 646 .halt_reg = 0x2fd4, 647 .halt_bit = 17, 648 .clkr = { 649 .enable_reg = 0x2b14, 650 .enable_mask = BIT(9), 651 .hw.init = &(struct clk_init_data){ 652 .name = "gsbi11_uart_clk", 653 .parent_names = (const char *[]){ "gsbi11_uart_src" }, 654 .num_parents = 1, 655 .ops = &clk_branch_ops, 656 .flags = CLK_SET_RATE_PARENT, 657 }, 658 }, 659 }; 660 661 static struct clk_rcg gsbi12_uart_src = { 662 .ns_reg = 0x2b34, 663 .md_reg = 0x2b30, 664 .mn = { 665 .mnctr_en_bit = 8, 666 .mnctr_reset_bit = 7, 667 .mnctr_mode_shift = 5, 668 .n_val_shift = 16, 669 .m_val_shift = 16, 670 .width = 16, 671 }, 672 .p = { 673 .pre_div_shift = 3, 674 .pre_div_width = 2, 675 }, 676 .s = { 677 .src_sel_shift = 0, 678 .parent_map = gcc_pxo_pll8_map, 679 }, 680 .freq_tbl = clk_tbl_gsbi_uart, 681 .clkr = { 682 .enable_reg = 0x2b34, 683 .enable_mask = BIT(11), 684 .hw.init = &(struct clk_init_data){ 685 .name = "gsbi12_uart_src", 686 .parent_names = gcc_pxo_pll8, 687 .num_parents = 2, 688 .ops = &clk_rcg_ops, 689 .flags = CLK_SET_PARENT_GATE, 690 }, 691 }, 692 }; 693 694 static struct clk_branch gsbi12_uart_clk = { 695 .halt_reg = 0x2fd4, 696 .halt_bit = 13, 697 .clkr = { 698 .enable_reg = 0x2b34, 699 .enable_mask = BIT(9), 700 .hw.init = &(struct clk_init_data){ 701 .name = "gsbi12_uart_clk", 702 .parent_names = (const char *[]){ "gsbi12_uart_src" }, 703 .num_parents = 1, 704 .ops = &clk_branch_ops, 705 .flags = CLK_SET_RATE_PARENT, 706 }, 707 }, 708 }; 709 710 static struct freq_tbl clk_tbl_gsbi_qup[] = { 711 { 1100000, P_PXO, 1, 2, 49 }, 712 { 5400000, P_PXO, 1, 1, 5 }, 713 { 10800000, P_PXO, 1, 2, 5 }, 714 { 15060000, P_PLL8, 1, 2, 51 }, 715 { 24000000, P_PLL8, 4, 1, 4 }, 716 { 25600000, P_PLL8, 1, 1, 15 }, 717 { 27000000, P_PXO, 1, 0, 0 }, 718 { 48000000, P_PLL8, 4, 1, 2 }, 719 { 51200000, P_PLL8, 1, 2, 15 }, 720 { } 721 }; 722 723 static struct clk_rcg gsbi1_qup_src = { 724 .ns_reg = 0x29cc, 725 .md_reg = 0x29c8, 726 .mn = { 727 .mnctr_en_bit = 8, 728 .mnctr_reset_bit = 7, 729 .mnctr_mode_shift = 5, 730 .n_val_shift = 16, 731 .m_val_shift = 16, 732 .width = 8, 733 }, 734 .p = { 735 .pre_div_shift = 3, 736 .pre_div_width = 2, 737 }, 738 .s = { 739 .src_sel_shift = 0, 740 .parent_map = gcc_pxo_pll8_map, 741 }, 742 .freq_tbl = clk_tbl_gsbi_qup, 743 .clkr = { 744 .enable_reg = 0x29cc, 745 .enable_mask = BIT(11), 746 .hw.init = &(struct clk_init_data){ 747 .name = "gsbi1_qup_src", 748 .parent_names = gcc_pxo_pll8, 749 .num_parents = 2, 750 .ops = &clk_rcg_ops, 751 .flags = CLK_SET_PARENT_GATE, 752 }, 753 }, 754 }; 755 756 static struct clk_branch gsbi1_qup_clk = { 757 .halt_reg = 0x2fcc, 758 .halt_bit = 9, 759 .clkr = { 760 .enable_reg = 0x29cc, 761 .enable_mask = BIT(9), 762 .hw.init = &(struct clk_init_data){ 763 .name = "gsbi1_qup_clk", 764 .parent_names = (const char *[]){ "gsbi1_qup_src" }, 765 .num_parents = 1, 766 .ops = &clk_branch_ops, 767 .flags = CLK_SET_RATE_PARENT, 768 }, 769 }, 770 }; 771 772 static struct clk_rcg gsbi2_qup_src = { 773 .ns_reg = 0x29ec, 774 .md_reg = 0x29e8, 775 .mn = { 776 .mnctr_en_bit = 8, 777 .mnctr_reset_bit = 7, 778 .mnctr_mode_shift = 5, 779 .n_val_shift = 16, 780 .m_val_shift = 16, 781 .width = 8, 782 }, 783 .p = { 784 .pre_div_shift = 3, 785 .pre_div_width = 2, 786 }, 787 .s = { 788 .src_sel_shift = 0, 789 .parent_map = gcc_pxo_pll8_map, 790 }, 791 .freq_tbl = clk_tbl_gsbi_qup, 792 .clkr = { 793 .enable_reg = 0x29ec, 794 .enable_mask = BIT(11), 795 .hw.init = &(struct clk_init_data){ 796 .name = "gsbi2_qup_src", 797 .parent_names = gcc_pxo_pll8, 798 .num_parents = 2, 799 .ops = &clk_rcg_ops, 800 .flags = CLK_SET_PARENT_GATE, 801 }, 802 }, 803 }; 804 805 static struct clk_branch gsbi2_qup_clk = { 806 .halt_reg = 0x2fcc, 807 .halt_bit = 4, 808 .clkr = { 809 .enable_reg = 0x29ec, 810 .enable_mask = BIT(9), 811 .hw.init = &(struct clk_init_data){ 812 .name = "gsbi2_qup_clk", 813 .parent_names = (const char *[]){ "gsbi2_qup_src" }, 814 .num_parents = 1, 815 .ops = &clk_branch_ops, 816 .flags = CLK_SET_RATE_PARENT, 817 }, 818 }, 819 }; 820 821 static struct clk_rcg gsbi3_qup_src = { 822 .ns_reg = 0x2a0c, 823 .md_reg = 0x2a08, 824 .mn = { 825 .mnctr_en_bit = 8, 826 .mnctr_reset_bit = 7, 827 .mnctr_mode_shift = 5, 828 .n_val_shift = 16, 829 .m_val_shift = 16, 830 .width = 8, 831 }, 832 .p = { 833 .pre_div_shift = 3, 834 .pre_div_width = 2, 835 }, 836 .s = { 837 .src_sel_shift = 0, 838 .parent_map = gcc_pxo_pll8_map, 839 }, 840 .freq_tbl = clk_tbl_gsbi_qup, 841 .clkr = { 842 .enable_reg = 0x2a0c, 843 .enable_mask = BIT(11), 844 .hw.init = &(struct clk_init_data){ 845 .name = "gsbi3_qup_src", 846 .parent_names = gcc_pxo_pll8, 847 .num_parents = 2, 848 .ops = &clk_rcg_ops, 849 .flags = CLK_SET_PARENT_GATE, 850 }, 851 }, 852 }; 853 854 static struct clk_branch gsbi3_qup_clk = { 855 .halt_reg = 0x2fcc, 856 .halt_bit = 0, 857 .clkr = { 858 .enable_reg = 0x2a0c, 859 .enable_mask = BIT(9), 860 .hw.init = &(struct clk_init_data){ 861 .name = "gsbi3_qup_clk", 862 .parent_names = (const char *[]){ "gsbi3_qup_src" }, 863 .num_parents = 1, 864 .ops = &clk_branch_ops, 865 .flags = CLK_SET_RATE_PARENT, 866 }, 867 }, 868 }; 869 870 static struct clk_rcg gsbi4_qup_src = { 871 .ns_reg = 0x2a2c, 872 .md_reg = 0x2a28, 873 .mn = { 874 .mnctr_en_bit = 8, 875 .mnctr_reset_bit = 7, 876 .mnctr_mode_shift = 5, 877 .n_val_shift = 16, 878 .m_val_shift = 16, 879 .width = 8, 880 }, 881 .p = { 882 .pre_div_shift = 3, 883 .pre_div_width = 2, 884 }, 885 .s = { 886 .src_sel_shift = 0, 887 .parent_map = gcc_pxo_pll8_map, 888 }, 889 .freq_tbl = clk_tbl_gsbi_qup, 890 .clkr = { 891 .enable_reg = 0x2a2c, 892 .enable_mask = BIT(11), 893 .hw.init = &(struct clk_init_data){ 894 .name = "gsbi4_qup_src", 895 .parent_names = gcc_pxo_pll8, 896 .num_parents = 2, 897 .ops = &clk_rcg_ops, 898 .flags = CLK_SET_PARENT_GATE, 899 }, 900 }, 901 }; 902 903 static struct clk_branch gsbi4_qup_clk = { 904 .halt_reg = 0x2fd0, 905 .halt_bit = 24, 906 .clkr = { 907 .enable_reg = 0x2a2c, 908 .enable_mask = BIT(9), 909 .hw.init = &(struct clk_init_data){ 910 .name = "gsbi4_qup_clk", 911 .parent_names = (const char *[]){ "gsbi4_qup_src" }, 912 .num_parents = 1, 913 .ops = &clk_branch_ops, 914 .flags = CLK_SET_RATE_PARENT, 915 }, 916 }, 917 }; 918 919 static struct clk_rcg gsbi5_qup_src = { 920 .ns_reg = 0x2a4c, 921 .md_reg = 0x2a48, 922 .mn = { 923 .mnctr_en_bit = 8, 924 .mnctr_reset_bit = 7, 925 .mnctr_mode_shift = 5, 926 .n_val_shift = 16, 927 .m_val_shift = 16, 928 .width = 8, 929 }, 930 .p = { 931 .pre_div_shift = 3, 932 .pre_div_width = 2, 933 }, 934 .s = { 935 .src_sel_shift = 0, 936 .parent_map = gcc_pxo_pll8_map, 937 }, 938 .freq_tbl = clk_tbl_gsbi_qup, 939 .clkr = { 940 .enable_reg = 0x2a4c, 941 .enable_mask = BIT(11), 942 .hw.init = &(struct clk_init_data){ 943 .name = "gsbi5_qup_src", 944 .parent_names = gcc_pxo_pll8, 945 .num_parents = 2, 946 .ops = &clk_rcg_ops, 947 .flags = CLK_SET_PARENT_GATE, 948 }, 949 }, 950 }; 951 952 static struct clk_branch gsbi5_qup_clk = { 953 .halt_reg = 0x2fd0, 954 .halt_bit = 20, 955 .clkr = { 956 .enable_reg = 0x2a4c, 957 .enable_mask = BIT(9), 958 .hw.init = &(struct clk_init_data){ 959 .name = "gsbi5_qup_clk", 960 .parent_names = (const char *[]){ "gsbi5_qup_src" }, 961 .num_parents = 1, 962 .ops = &clk_branch_ops, 963 .flags = CLK_SET_RATE_PARENT, 964 }, 965 }, 966 }; 967 968 static struct clk_rcg gsbi6_qup_src = { 969 .ns_reg = 0x2a6c, 970 .md_reg = 0x2a68, 971 .mn = { 972 .mnctr_en_bit = 8, 973 .mnctr_reset_bit = 7, 974 .mnctr_mode_shift = 5, 975 .n_val_shift = 16, 976 .m_val_shift = 16, 977 .width = 8, 978 }, 979 .p = { 980 .pre_div_shift = 3, 981 .pre_div_width = 2, 982 }, 983 .s = { 984 .src_sel_shift = 0, 985 .parent_map = gcc_pxo_pll8_map, 986 }, 987 .freq_tbl = clk_tbl_gsbi_qup, 988 .clkr = { 989 .enable_reg = 0x2a6c, 990 .enable_mask = BIT(11), 991 .hw.init = &(struct clk_init_data){ 992 .name = "gsbi6_qup_src", 993 .parent_names = gcc_pxo_pll8, 994 .num_parents = 2, 995 .ops = &clk_rcg_ops, 996 .flags = CLK_SET_PARENT_GATE, 997 }, 998 }, 999 }; 1000 1001 static struct clk_branch gsbi6_qup_clk = { 1002 .halt_reg = 0x2fd0, 1003 .halt_bit = 16, 1004 .clkr = { 1005 .enable_reg = 0x2a6c, 1006 .enable_mask = BIT(9), 1007 .hw.init = &(struct clk_init_data){ 1008 .name = "gsbi6_qup_clk", 1009 .parent_names = (const char *[]){ "gsbi6_qup_src" }, 1010 .num_parents = 1, 1011 .ops = &clk_branch_ops, 1012 .flags = CLK_SET_RATE_PARENT, 1013 }, 1014 }, 1015 }; 1016 1017 static struct clk_rcg gsbi7_qup_src = { 1018 .ns_reg = 0x2a8c, 1019 .md_reg = 0x2a88, 1020 .mn = { 1021 .mnctr_en_bit = 8, 1022 .mnctr_reset_bit = 7, 1023 .mnctr_mode_shift = 5, 1024 .n_val_shift = 16, 1025 .m_val_shift = 16, 1026 .width = 8, 1027 }, 1028 .p = { 1029 .pre_div_shift = 3, 1030 .pre_div_width = 2, 1031 }, 1032 .s = { 1033 .src_sel_shift = 0, 1034 .parent_map = gcc_pxo_pll8_map, 1035 }, 1036 .freq_tbl = clk_tbl_gsbi_qup, 1037 .clkr = { 1038 .enable_reg = 0x2a8c, 1039 .enable_mask = BIT(11), 1040 .hw.init = &(struct clk_init_data){ 1041 .name = "gsbi7_qup_src", 1042 .parent_names = gcc_pxo_pll8, 1043 .num_parents = 2, 1044 .ops = &clk_rcg_ops, 1045 .flags = CLK_SET_PARENT_GATE, 1046 }, 1047 }, 1048 }; 1049 1050 static struct clk_branch gsbi7_qup_clk = { 1051 .halt_reg = 0x2fd0, 1052 .halt_bit = 12, 1053 .clkr = { 1054 .enable_reg = 0x2a8c, 1055 .enable_mask = BIT(9), 1056 .hw.init = &(struct clk_init_data){ 1057 .name = "gsbi7_qup_clk", 1058 .parent_names = (const char *[]){ "gsbi7_qup_src" }, 1059 .num_parents = 1, 1060 .ops = &clk_branch_ops, 1061 .flags = CLK_SET_RATE_PARENT, 1062 }, 1063 }, 1064 }; 1065 1066 static struct clk_rcg gsbi8_qup_src = { 1067 .ns_reg = 0x2aac, 1068 .md_reg = 0x2aa8, 1069 .mn = { 1070 .mnctr_en_bit = 8, 1071 .mnctr_reset_bit = 7, 1072 .mnctr_mode_shift = 5, 1073 .n_val_shift = 16, 1074 .m_val_shift = 16, 1075 .width = 8, 1076 }, 1077 .p = { 1078 .pre_div_shift = 3, 1079 .pre_div_width = 2, 1080 }, 1081 .s = { 1082 .src_sel_shift = 0, 1083 .parent_map = gcc_pxo_pll8_map, 1084 }, 1085 .freq_tbl = clk_tbl_gsbi_qup, 1086 .clkr = { 1087 .enable_reg = 0x2aac, 1088 .enable_mask = BIT(11), 1089 .hw.init = &(struct clk_init_data){ 1090 .name = "gsbi8_qup_src", 1091 .parent_names = gcc_pxo_pll8, 1092 .num_parents = 2, 1093 .ops = &clk_rcg_ops, 1094 .flags = CLK_SET_PARENT_GATE, 1095 }, 1096 }, 1097 }; 1098 1099 static struct clk_branch gsbi8_qup_clk = { 1100 .halt_reg = 0x2fd0, 1101 .halt_bit = 8, 1102 .clkr = { 1103 .enable_reg = 0x2aac, 1104 .enable_mask = BIT(9), 1105 .hw.init = &(struct clk_init_data){ 1106 .name = "gsbi8_qup_clk", 1107 .parent_names = (const char *[]){ "gsbi8_qup_src" }, 1108 .num_parents = 1, 1109 .ops = &clk_branch_ops, 1110 .flags = CLK_SET_RATE_PARENT, 1111 }, 1112 }, 1113 }; 1114 1115 static struct clk_rcg gsbi9_qup_src = { 1116 .ns_reg = 0x2acc, 1117 .md_reg = 0x2ac8, 1118 .mn = { 1119 .mnctr_en_bit = 8, 1120 .mnctr_reset_bit = 7, 1121 .mnctr_mode_shift = 5, 1122 .n_val_shift = 16, 1123 .m_val_shift = 16, 1124 .width = 8, 1125 }, 1126 .p = { 1127 .pre_div_shift = 3, 1128 .pre_div_width = 2, 1129 }, 1130 .s = { 1131 .src_sel_shift = 0, 1132 .parent_map = gcc_pxo_pll8_map, 1133 }, 1134 .freq_tbl = clk_tbl_gsbi_qup, 1135 .clkr = { 1136 .enable_reg = 0x2acc, 1137 .enable_mask = BIT(11), 1138 .hw.init = &(struct clk_init_data){ 1139 .name = "gsbi9_qup_src", 1140 .parent_names = gcc_pxo_pll8, 1141 .num_parents = 2, 1142 .ops = &clk_rcg_ops, 1143 .flags = CLK_SET_PARENT_GATE, 1144 }, 1145 }, 1146 }; 1147 1148 static struct clk_branch gsbi9_qup_clk = { 1149 .halt_reg = 0x2fd0, 1150 .halt_bit = 4, 1151 .clkr = { 1152 .enable_reg = 0x2acc, 1153 .enable_mask = BIT(9), 1154 .hw.init = &(struct clk_init_data){ 1155 .name = "gsbi9_qup_clk", 1156 .parent_names = (const char *[]){ "gsbi9_qup_src" }, 1157 .num_parents = 1, 1158 .ops = &clk_branch_ops, 1159 .flags = CLK_SET_RATE_PARENT, 1160 }, 1161 }, 1162 }; 1163 1164 static struct clk_rcg gsbi10_qup_src = { 1165 .ns_reg = 0x2aec, 1166 .md_reg = 0x2ae8, 1167 .mn = { 1168 .mnctr_en_bit = 8, 1169 .mnctr_reset_bit = 7, 1170 .mnctr_mode_shift = 5, 1171 .n_val_shift = 16, 1172 .m_val_shift = 16, 1173 .width = 8, 1174 }, 1175 .p = { 1176 .pre_div_shift = 3, 1177 .pre_div_width = 2, 1178 }, 1179 .s = { 1180 .src_sel_shift = 0, 1181 .parent_map = gcc_pxo_pll8_map, 1182 }, 1183 .freq_tbl = clk_tbl_gsbi_qup, 1184 .clkr = { 1185 .enable_reg = 0x2aec, 1186 .enable_mask = BIT(11), 1187 .hw.init = &(struct clk_init_data){ 1188 .name = "gsbi10_qup_src", 1189 .parent_names = gcc_pxo_pll8, 1190 .num_parents = 2, 1191 .ops = &clk_rcg_ops, 1192 .flags = CLK_SET_PARENT_GATE, 1193 }, 1194 }, 1195 }; 1196 1197 static struct clk_branch gsbi10_qup_clk = { 1198 .halt_reg = 0x2fd0, 1199 .halt_bit = 0, 1200 .clkr = { 1201 .enable_reg = 0x2aec, 1202 .enable_mask = BIT(9), 1203 .hw.init = &(struct clk_init_data){ 1204 .name = "gsbi10_qup_clk", 1205 .parent_names = (const char *[]){ "gsbi10_qup_src" }, 1206 .num_parents = 1, 1207 .ops = &clk_branch_ops, 1208 .flags = CLK_SET_RATE_PARENT, 1209 }, 1210 }, 1211 }; 1212 1213 static struct clk_rcg gsbi11_qup_src = { 1214 .ns_reg = 0x2b0c, 1215 .md_reg = 0x2b08, 1216 .mn = { 1217 .mnctr_en_bit = 8, 1218 .mnctr_reset_bit = 7, 1219 .mnctr_mode_shift = 5, 1220 .n_val_shift = 16, 1221 .m_val_shift = 16, 1222 .width = 8, 1223 }, 1224 .p = { 1225 .pre_div_shift = 3, 1226 .pre_div_width = 2, 1227 }, 1228 .s = { 1229 .src_sel_shift = 0, 1230 .parent_map = gcc_pxo_pll8_map, 1231 }, 1232 .freq_tbl = clk_tbl_gsbi_qup, 1233 .clkr = { 1234 .enable_reg = 0x2b0c, 1235 .enable_mask = BIT(11), 1236 .hw.init = &(struct clk_init_data){ 1237 .name = "gsbi11_qup_src", 1238 .parent_names = gcc_pxo_pll8, 1239 .num_parents = 2, 1240 .ops = &clk_rcg_ops, 1241 .flags = CLK_SET_PARENT_GATE, 1242 }, 1243 }, 1244 }; 1245 1246 static struct clk_branch gsbi11_qup_clk = { 1247 .halt_reg = 0x2fd4, 1248 .halt_bit = 15, 1249 .clkr = { 1250 .enable_reg = 0x2b0c, 1251 .enable_mask = BIT(9), 1252 .hw.init = &(struct clk_init_data){ 1253 .name = "gsbi11_qup_clk", 1254 .parent_names = (const char *[]){ "gsbi11_qup_src" }, 1255 .num_parents = 1, 1256 .ops = &clk_branch_ops, 1257 .flags = CLK_SET_RATE_PARENT, 1258 }, 1259 }, 1260 }; 1261 1262 static struct clk_rcg gsbi12_qup_src = { 1263 .ns_reg = 0x2b2c, 1264 .md_reg = 0x2b28, 1265 .mn = { 1266 .mnctr_en_bit = 8, 1267 .mnctr_reset_bit = 7, 1268 .mnctr_mode_shift = 5, 1269 .n_val_shift = 16, 1270 .m_val_shift = 16, 1271 .width = 8, 1272 }, 1273 .p = { 1274 .pre_div_shift = 3, 1275 .pre_div_width = 2, 1276 }, 1277 .s = { 1278 .src_sel_shift = 0, 1279 .parent_map = gcc_pxo_pll8_map, 1280 }, 1281 .freq_tbl = clk_tbl_gsbi_qup, 1282 .clkr = { 1283 .enable_reg = 0x2b2c, 1284 .enable_mask = BIT(11), 1285 .hw.init = &(struct clk_init_data){ 1286 .name = "gsbi12_qup_src", 1287 .parent_names = gcc_pxo_pll8, 1288 .num_parents = 2, 1289 .ops = &clk_rcg_ops, 1290 .flags = CLK_SET_PARENT_GATE, 1291 }, 1292 }, 1293 }; 1294 1295 static struct clk_branch gsbi12_qup_clk = { 1296 .halt_reg = 0x2fd4, 1297 .halt_bit = 11, 1298 .clkr = { 1299 .enable_reg = 0x2b2c, 1300 .enable_mask = BIT(9), 1301 .hw.init = &(struct clk_init_data){ 1302 .name = "gsbi12_qup_clk", 1303 .parent_names = (const char *[]){ "gsbi12_qup_src" }, 1304 .num_parents = 1, 1305 .ops = &clk_branch_ops, 1306 .flags = CLK_SET_RATE_PARENT, 1307 }, 1308 }, 1309 }; 1310 1311 static const struct freq_tbl clk_tbl_gp[] = { 1312 { 9600000, P_CXO, 2, 0, 0 }, 1313 { 13500000, P_PXO, 2, 0, 0 }, 1314 { 19200000, P_CXO, 1, 0, 0 }, 1315 { 27000000, P_PXO, 1, 0, 0 }, 1316 { 64000000, P_PLL8, 2, 1, 3 }, 1317 { 76800000, P_PLL8, 1, 1, 5 }, 1318 { 96000000, P_PLL8, 4, 0, 0 }, 1319 { 128000000, P_PLL8, 3, 0, 0 }, 1320 { 192000000, P_PLL8, 2, 0, 0 }, 1321 { } 1322 }; 1323 1324 static struct clk_rcg gp0_src = { 1325 .ns_reg = 0x2d24, 1326 .md_reg = 0x2d00, 1327 .mn = { 1328 .mnctr_en_bit = 8, 1329 .mnctr_reset_bit = 7, 1330 .mnctr_mode_shift = 5, 1331 .n_val_shift = 16, 1332 .m_val_shift = 16, 1333 .width = 8, 1334 }, 1335 .p = { 1336 .pre_div_shift = 3, 1337 .pre_div_width = 2, 1338 }, 1339 .s = { 1340 .src_sel_shift = 0, 1341 .parent_map = gcc_pxo_pll8_cxo_map, 1342 }, 1343 .freq_tbl = clk_tbl_gp, 1344 .clkr = { 1345 .enable_reg = 0x2d24, 1346 .enable_mask = BIT(11), 1347 .hw.init = &(struct clk_init_data){ 1348 .name = "gp0_src", 1349 .parent_names = gcc_pxo_pll8_cxo, 1350 .num_parents = 3, 1351 .ops = &clk_rcg_ops, 1352 .flags = CLK_SET_PARENT_GATE, 1353 }, 1354 } 1355 }; 1356 1357 static struct clk_branch gp0_clk = { 1358 .halt_reg = 0x2fd8, 1359 .halt_bit = 7, 1360 .clkr = { 1361 .enable_reg = 0x2d24, 1362 .enable_mask = BIT(9), 1363 .hw.init = &(struct clk_init_data){ 1364 .name = "gp0_clk", 1365 .parent_names = (const char *[]){ "gp0_src" }, 1366 .num_parents = 1, 1367 .ops = &clk_branch_ops, 1368 .flags = CLK_SET_RATE_PARENT, 1369 }, 1370 }, 1371 }; 1372 1373 static struct clk_rcg gp1_src = { 1374 .ns_reg = 0x2d44, 1375 .md_reg = 0x2d40, 1376 .mn = { 1377 .mnctr_en_bit = 8, 1378 .mnctr_reset_bit = 7, 1379 .mnctr_mode_shift = 5, 1380 .n_val_shift = 16, 1381 .m_val_shift = 16, 1382 .width = 8, 1383 }, 1384 .p = { 1385 .pre_div_shift = 3, 1386 .pre_div_width = 2, 1387 }, 1388 .s = { 1389 .src_sel_shift = 0, 1390 .parent_map = gcc_pxo_pll8_cxo_map, 1391 }, 1392 .freq_tbl = clk_tbl_gp, 1393 .clkr = { 1394 .enable_reg = 0x2d44, 1395 .enable_mask = BIT(11), 1396 .hw.init = &(struct clk_init_data){ 1397 .name = "gp1_src", 1398 .parent_names = gcc_pxo_pll8_cxo, 1399 .num_parents = 3, 1400 .ops = &clk_rcg_ops, 1401 .flags = CLK_SET_RATE_GATE, 1402 }, 1403 } 1404 }; 1405 1406 static struct clk_branch gp1_clk = { 1407 .halt_reg = 0x2fd8, 1408 .halt_bit = 6, 1409 .clkr = { 1410 .enable_reg = 0x2d44, 1411 .enable_mask = BIT(9), 1412 .hw.init = &(struct clk_init_data){ 1413 .name = "gp1_clk", 1414 .parent_names = (const char *[]){ "gp1_src" }, 1415 .num_parents = 1, 1416 .ops = &clk_branch_ops, 1417 .flags = CLK_SET_RATE_PARENT, 1418 }, 1419 }, 1420 }; 1421 1422 static struct clk_rcg gp2_src = { 1423 .ns_reg = 0x2d64, 1424 .md_reg = 0x2d60, 1425 .mn = { 1426 .mnctr_en_bit = 8, 1427 .mnctr_reset_bit = 7, 1428 .mnctr_mode_shift = 5, 1429 .n_val_shift = 16, 1430 .m_val_shift = 16, 1431 .width = 8, 1432 }, 1433 .p = { 1434 .pre_div_shift = 3, 1435 .pre_div_width = 2, 1436 }, 1437 .s = { 1438 .src_sel_shift = 0, 1439 .parent_map = gcc_pxo_pll8_cxo_map, 1440 }, 1441 .freq_tbl = clk_tbl_gp, 1442 .clkr = { 1443 .enable_reg = 0x2d64, 1444 .enable_mask = BIT(11), 1445 .hw.init = &(struct clk_init_data){ 1446 .name = "gp2_src", 1447 .parent_names = gcc_pxo_pll8_cxo, 1448 .num_parents = 3, 1449 .ops = &clk_rcg_ops, 1450 .flags = CLK_SET_RATE_GATE, 1451 }, 1452 } 1453 }; 1454 1455 static struct clk_branch gp2_clk = { 1456 .halt_reg = 0x2fd8, 1457 .halt_bit = 5, 1458 .clkr = { 1459 .enable_reg = 0x2d64, 1460 .enable_mask = BIT(9), 1461 .hw.init = &(struct clk_init_data){ 1462 .name = "gp2_clk", 1463 .parent_names = (const char *[]){ "gp2_src" }, 1464 .num_parents = 1, 1465 .ops = &clk_branch_ops, 1466 .flags = CLK_SET_RATE_PARENT, 1467 }, 1468 }, 1469 }; 1470 1471 static struct clk_branch pmem_clk = { 1472 .hwcg_reg = 0x25a0, 1473 .hwcg_bit = 6, 1474 .halt_reg = 0x2fc8, 1475 .halt_bit = 20, 1476 .clkr = { 1477 .enable_reg = 0x25a0, 1478 .enable_mask = BIT(4), 1479 .hw.init = &(struct clk_init_data){ 1480 .name = "pmem_clk", 1481 .ops = &clk_branch_ops, 1482 .flags = CLK_IS_ROOT, 1483 }, 1484 }, 1485 }; 1486 1487 static struct clk_rcg prng_src = { 1488 .ns_reg = 0x2e80, 1489 .p = { 1490 .pre_div_shift = 3, 1491 .pre_div_width = 4, 1492 }, 1493 .s = { 1494 .src_sel_shift = 0, 1495 .parent_map = gcc_pxo_pll8_map, 1496 }, 1497 .clkr.hw = { 1498 .init = &(struct clk_init_data){ 1499 .name = "prng_src", 1500 .parent_names = gcc_pxo_pll8, 1501 .num_parents = 2, 1502 .ops = &clk_rcg_ops, 1503 }, 1504 }, 1505 }; 1506 1507 static struct clk_branch prng_clk = { 1508 .halt_reg = 0x2fd8, 1509 .halt_check = BRANCH_HALT_VOTED, 1510 .halt_bit = 10, 1511 .clkr = { 1512 .enable_reg = 0x3080, 1513 .enable_mask = BIT(10), 1514 .hw.init = &(struct clk_init_data){ 1515 .name = "prng_clk", 1516 .parent_names = (const char *[]){ "prng_src" }, 1517 .num_parents = 1, 1518 .ops = &clk_branch_ops, 1519 }, 1520 }, 1521 }; 1522 1523 static const struct freq_tbl clk_tbl_sdc[] = { 1524 { 144000, P_PXO, 3, 2, 125 }, 1525 { 400000, P_PLL8, 4, 1, 240 }, 1526 { 16000000, P_PLL8, 4, 1, 6 }, 1527 { 17070000, P_PLL8, 1, 2, 45 }, 1528 { 20210000, P_PLL8, 1, 1, 19 }, 1529 { 24000000, P_PLL8, 4, 1, 4 }, 1530 { 48000000, P_PLL8, 4, 1, 2 }, 1531 { } 1532 }; 1533 1534 static struct clk_rcg sdc1_src = { 1535 .ns_reg = 0x282c, 1536 .md_reg = 0x2828, 1537 .mn = { 1538 .mnctr_en_bit = 8, 1539 .mnctr_reset_bit = 7, 1540 .mnctr_mode_shift = 5, 1541 .n_val_shift = 16, 1542 .m_val_shift = 16, 1543 .width = 8, 1544 }, 1545 .p = { 1546 .pre_div_shift = 3, 1547 .pre_div_width = 2, 1548 }, 1549 .s = { 1550 .src_sel_shift = 0, 1551 .parent_map = gcc_pxo_pll8_map, 1552 }, 1553 .freq_tbl = clk_tbl_sdc, 1554 .clkr = { 1555 .enable_reg = 0x282c, 1556 .enable_mask = BIT(11), 1557 .hw.init = &(struct clk_init_data){ 1558 .name = "sdc1_src", 1559 .parent_names = gcc_pxo_pll8, 1560 .num_parents = 2, 1561 .ops = &clk_rcg_ops, 1562 .flags = CLK_SET_RATE_GATE, 1563 }, 1564 } 1565 }; 1566 1567 static struct clk_branch sdc1_clk = { 1568 .halt_reg = 0x2fc8, 1569 .halt_bit = 6, 1570 .clkr = { 1571 .enable_reg = 0x282c, 1572 .enable_mask = BIT(9), 1573 .hw.init = &(struct clk_init_data){ 1574 .name = "sdc1_clk", 1575 .parent_names = (const char *[]){ "sdc1_src" }, 1576 .num_parents = 1, 1577 .ops = &clk_branch_ops, 1578 .flags = CLK_SET_RATE_PARENT, 1579 }, 1580 }, 1581 }; 1582 1583 static struct clk_rcg sdc2_src = { 1584 .ns_reg = 0x284c, 1585 .md_reg = 0x2848, 1586 .mn = { 1587 .mnctr_en_bit = 8, 1588 .mnctr_reset_bit = 7, 1589 .mnctr_mode_shift = 5, 1590 .n_val_shift = 16, 1591 .m_val_shift = 16, 1592 .width = 8, 1593 }, 1594 .p = { 1595 .pre_div_shift = 3, 1596 .pre_div_width = 2, 1597 }, 1598 .s = { 1599 .src_sel_shift = 0, 1600 .parent_map = gcc_pxo_pll8_map, 1601 }, 1602 .freq_tbl = clk_tbl_sdc, 1603 .clkr = { 1604 .enable_reg = 0x284c, 1605 .enable_mask = BIT(11), 1606 .hw.init = &(struct clk_init_data){ 1607 .name = "sdc2_src", 1608 .parent_names = gcc_pxo_pll8, 1609 .num_parents = 2, 1610 .ops = &clk_rcg_ops, 1611 .flags = CLK_SET_RATE_GATE, 1612 }, 1613 } 1614 }; 1615 1616 static struct clk_branch sdc2_clk = { 1617 .halt_reg = 0x2fc8, 1618 .halt_bit = 5, 1619 .clkr = { 1620 .enable_reg = 0x284c, 1621 .enable_mask = BIT(9), 1622 .hw.init = &(struct clk_init_data){ 1623 .name = "sdc2_clk", 1624 .parent_names = (const char *[]){ "sdc2_src" }, 1625 .num_parents = 1, 1626 .ops = &clk_branch_ops, 1627 .flags = CLK_SET_RATE_PARENT, 1628 }, 1629 }, 1630 }; 1631 1632 static struct clk_rcg sdc3_src = { 1633 .ns_reg = 0x286c, 1634 .md_reg = 0x2868, 1635 .mn = { 1636 .mnctr_en_bit = 8, 1637 .mnctr_reset_bit = 7, 1638 .mnctr_mode_shift = 5, 1639 .n_val_shift = 16, 1640 .m_val_shift = 16, 1641 .width = 8, 1642 }, 1643 .p = { 1644 .pre_div_shift = 3, 1645 .pre_div_width = 2, 1646 }, 1647 .s = { 1648 .src_sel_shift = 0, 1649 .parent_map = gcc_pxo_pll8_map, 1650 }, 1651 .freq_tbl = clk_tbl_sdc, 1652 .clkr = { 1653 .enable_reg = 0x286c, 1654 .enable_mask = BIT(11), 1655 .hw.init = &(struct clk_init_data){ 1656 .name = "sdc3_src", 1657 .parent_names = gcc_pxo_pll8, 1658 .num_parents = 2, 1659 .ops = &clk_rcg_ops, 1660 .flags = CLK_SET_RATE_GATE, 1661 }, 1662 } 1663 }; 1664 1665 static struct clk_branch sdc3_clk = { 1666 .halt_reg = 0x2fc8, 1667 .halt_bit = 4, 1668 .clkr = { 1669 .enable_reg = 0x286c, 1670 .enable_mask = BIT(9), 1671 .hw.init = &(struct clk_init_data){ 1672 .name = "sdc3_clk", 1673 .parent_names = (const char *[]){ "sdc3_src" }, 1674 .num_parents = 1, 1675 .ops = &clk_branch_ops, 1676 .flags = CLK_SET_RATE_PARENT, 1677 }, 1678 }, 1679 }; 1680 1681 static struct clk_rcg sdc4_src = { 1682 .ns_reg = 0x288c, 1683 .md_reg = 0x2888, 1684 .mn = { 1685 .mnctr_en_bit = 8, 1686 .mnctr_reset_bit = 7, 1687 .mnctr_mode_shift = 5, 1688 .n_val_shift = 16, 1689 .m_val_shift = 16, 1690 .width = 8, 1691 }, 1692 .p = { 1693 .pre_div_shift = 3, 1694 .pre_div_width = 2, 1695 }, 1696 .s = { 1697 .src_sel_shift = 0, 1698 .parent_map = gcc_pxo_pll8_map, 1699 }, 1700 .freq_tbl = clk_tbl_sdc, 1701 .clkr = { 1702 .enable_reg = 0x288c, 1703 .enable_mask = BIT(11), 1704 .hw.init = &(struct clk_init_data){ 1705 .name = "sdc4_src", 1706 .parent_names = gcc_pxo_pll8, 1707 .num_parents = 2, 1708 .ops = &clk_rcg_ops, 1709 .flags = CLK_SET_RATE_GATE, 1710 }, 1711 } 1712 }; 1713 1714 static struct clk_branch sdc4_clk = { 1715 .halt_reg = 0x2fc8, 1716 .halt_bit = 3, 1717 .clkr = { 1718 .enable_reg = 0x288c, 1719 .enable_mask = BIT(9), 1720 .hw.init = &(struct clk_init_data){ 1721 .name = "sdc4_clk", 1722 .parent_names = (const char *[]){ "sdc4_src" }, 1723 .num_parents = 1, 1724 .ops = &clk_branch_ops, 1725 .flags = CLK_SET_RATE_PARENT, 1726 }, 1727 }, 1728 }; 1729 1730 static struct clk_rcg sdc5_src = { 1731 .ns_reg = 0x28ac, 1732 .md_reg = 0x28a8, 1733 .mn = { 1734 .mnctr_en_bit = 8, 1735 .mnctr_reset_bit = 7, 1736 .mnctr_mode_shift = 5, 1737 .n_val_shift = 16, 1738 .m_val_shift = 16, 1739 .width = 8, 1740 }, 1741 .p = { 1742 .pre_div_shift = 3, 1743 .pre_div_width = 2, 1744 }, 1745 .s = { 1746 .src_sel_shift = 0, 1747 .parent_map = gcc_pxo_pll8_map, 1748 }, 1749 .freq_tbl = clk_tbl_sdc, 1750 .clkr = { 1751 .enable_reg = 0x28ac, 1752 .enable_mask = BIT(11), 1753 .hw.init = &(struct clk_init_data){ 1754 .name = "sdc5_src", 1755 .parent_names = gcc_pxo_pll8, 1756 .num_parents = 2, 1757 .ops = &clk_rcg_ops, 1758 .flags = CLK_SET_RATE_GATE, 1759 }, 1760 } 1761 }; 1762 1763 static struct clk_branch sdc5_clk = { 1764 .halt_reg = 0x2fc8, 1765 .halt_bit = 2, 1766 .clkr = { 1767 .enable_reg = 0x28ac, 1768 .enable_mask = BIT(9), 1769 .hw.init = &(struct clk_init_data){ 1770 .name = "sdc5_clk", 1771 .parent_names = (const char *[]){ "sdc5_src" }, 1772 .num_parents = 1, 1773 .ops = &clk_branch_ops, 1774 .flags = CLK_SET_RATE_PARENT, 1775 }, 1776 }, 1777 }; 1778 1779 static const struct freq_tbl clk_tbl_tsif_ref[] = { 1780 { 105000, P_PXO, 1, 1, 256 }, 1781 { } 1782 }; 1783 1784 static struct clk_rcg tsif_ref_src = { 1785 .ns_reg = 0x2710, 1786 .md_reg = 0x270c, 1787 .mn = { 1788 .mnctr_en_bit = 8, 1789 .mnctr_reset_bit = 7, 1790 .mnctr_mode_shift = 5, 1791 .n_val_shift = 16, 1792 .m_val_shift = 16, 1793 .width = 16, 1794 }, 1795 .p = { 1796 .pre_div_shift = 3, 1797 .pre_div_width = 2, 1798 }, 1799 .s = { 1800 .src_sel_shift = 0, 1801 .parent_map = gcc_pxo_pll8_map, 1802 }, 1803 .freq_tbl = clk_tbl_tsif_ref, 1804 .clkr = { 1805 .enable_reg = 0x2710, 1806 .enable_mask = BIT(11), 1807 .hw.init = &(struct clk_init_data){ 1808 .name = "tsif_ref_src", 1809 .parent_names = gcc_pxo_pll8, 1810 .num_parents = 2, 1811 .ops = &clk_rcg_ops, 1812 .flags = CLK_SET_RATE_GATE, 1813 }, 1814 } 1815 }; 1816 1817 static struct clk_branch tsif_ref_clk = { 1818 .halt_reg = 0x2fd4, 1819 .halt_bit = 5, 1820 .clkr = { 1821 .enable_reg = 0x2710, 1822 .enable_mask = BIT(9), 1823 .hw.init = &(struct clk_init_data){ 1824 .name = "tsif_ref_clk", 1825 .parent_names = (const char *[]){ "tsif_ref_src" }, 1826 .num_parents = 1, 1827 .ops = &clk_branch_ops, 1828 .flags = CLK_SET_RATE_PARENT, 1829 }, 1830 }, 1831 }; 1832 1833 static const struct freq_tbl clk_tbl_usb[] = { 1834 { 60000000, P_PLL8, 1, 5, 32 }, 1835 { } 1836 }; 1837 1838 static struct clk_rcg usb_hs1_xcvr_src = { 1839 .ns_reg = 0x290c, 1840 .md_reg = 0x2908, 1841 .mn = { 1842 .mnctr_en_bit = 8, 1843 .mnctr_reset_bit = 7, 1844 .mnctr_mode_shift = 5, 1845 .n_val_shift = 16, 1846 .m_val_shift = 16, 1847 .width = 8, 1848 }, 1849 .p = { 1850 .pre_div_shift = 3, 1851 .pre_div_width = 2, 1852 }, 1853 .s = { 1854 .src_sel_shift = 0, 1855 .parent_map = gcc_pxo_pll8_map, 1856 }, 1857 .freq_tbl = clk_tbl_usb, 1858 .clkr = { 1859 .enable_reg = 0x290c, 1860 .enable_mask = BIT(11), 1861 .hw.init = &(struct clk_init_data){ 1862 .name = "usb_hs1_xcvr_src", 1863 .parent_names = gcc_pxo_pll8, 1864 .num_parents = 2, 1865 .ops = &clk_rcg_ops, 1866 .flags = CLK_SET_RATE_GATE, 1867 }, 1868 } 1869 }; 1870 1871 static struct clk_branch usb_hs1_xcvr_clk = { 1872 .halt_reg = 0x2fc8, 1873 .halt_bit = 0, 1874 .clkr = { 1875 .enable_reg = 0x290c, 1876 .enable_mask = BIT(9), 1877 .hw.init = &(struct clk_init_data){ 1878 .name = "usb_hs1_xcvr_clk", 1879 .parent_names = (const char *[]){ "usb_hs1_xcvr_src" }, 1880 .num_parents = 1, 1881 .ops = &clk_branch_ops, 1882 .flags = CLK_SET_RATE_PARENT, 1883 }, 1884 }, 1885 }; 1886 1887 static struct clk_rcg usb_fs1_xcvr_fs_src = { 1888 .ns_reg = 0x2968, 1889 .md_reg = 0x2964, 1890 .mn = { 1891 .mnctr_en_bit = 8, 1892 .mnctr_reset_bit = 7, 1893 .mnctr_mode_shift = 5, 1894 .n_val_shift = 16, 1895 .m_val_shift = 16, 1896 .width = 8, 1897 }, 1898 .p = { 1899 .pre_div_shift = 3, 1900 .pre_div_width = 2, 1901 }, 1902 .s = { 1903 .src_sel_shift = 0, 1904 .parent_map = gcc_pxo_pll8_map, 1905 }, 1906 .freq_tbl = clk_tbl_usb, 1907 .clkr = { 1908 .enable_reg = 0x2968, 1909 .enable_mask = BIT(11), 1910 .hw.init = &(struct clk_init_data){ 1911 .name = "usb_fs1_xcvr_fs_src", 1912 .parent_names = gcc_pxo_pll8, 1913 .num_parents = 2, 1914 .ops = &clk_rcg_ops, 1915 .flags = CLK_SET_RATE_GATE, 1916 }, 1917 } 1918 }; 1919 1920 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" }; 1921 1922 static struct clk_branch usb_fs1_xcvr_fs_clk = { 1923 .halt_reg = 0x2fcc, 1924 .halt_bit = 15, 1925 .clkr = { 1926 .enable_reg = 0x2968, 1927 .enable_mask = BIT(9), 1928 .hw.init = &(struct clk_init_data){ 1929 .name = "usb_fs1_xcvr_fs_clk", 1930 .parent_names = usb_fs1_xcvr_fs_src_p, 1931 .num_parents = 1, 1932 .ops = &clk_branch_ops, 1933 .flags = CLK_SET_RATE_PARENT, 1934 }, 1935 }, 1936 }; 1937 1938 static struct clk_branch usb_fs1_system_clk = { 1939 .halt_reg = 0x2fcc, 1940 .halt_bit = 16, 1941 .clkr = { 1942 .enable_reg = 0x296c, 1943 .enable_mask = BIT(4), 1944 .hw.init = &(struct clk_init_data){ 1945 .parent_names = usb_fs1_xcvr_fs_src_p, 1946 .num_parents = 1, 1947 .name = "usb_fs1_system_clk", 1948 .ops = &clk_branch_ops, 1949 .flags = CLK_SET_RATE_PARENT, 1950 }, 1951 }, 1952 }; 1953 1954 static struct clk_rcg usb_fs2_xcvr_fs_src = { 1955 .ns_reg = 0x2988, 1956 .md_reg = 0x2984, 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_usb, 1974 .clkr = { 1975 .enable_reg = 0x2988, 1976 .enable_mask = BIT(11), 1977 .hw.init = &(struct clk_init_data){ 1978 .name = "usb_fs2_xcvr_fs_src", 1979 .parent_names = gcc_pxo_pll8, 1980 .num_parents = 2, 1981 .ops = &clk_rcg_ops, 1982 .flags = CLK_SET_RATE_GATE, 1983 }, 1984 } 1985 }; 1986 1987 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" }; 1988 1989 static struct clk_branch usb_fs2_xcvr_fs_clk = { 1990 .halt_reg = 0x2fcc, 1991 .halt_bit = 12, 1992 .clkr = { 1993 .enable_reg = 0x2988, 1994 .enable_mask = BIT(9), 1995 .hw.init = &(struct clk_init_data){ 1996 .name = "usb_fs2_xcvr_fs_clk", 1997 .parent_names = usb_fs2_xcvr_fs_src_p, 1998 .num_parents = 1, 1999 .ops = &clk_branch_ops, 2000 .flags = CLK_SET_RATE_PARENT, 2001 }, 2002 }, 2003 }; 2004 2005 static struct clk_branch usb_fs2_system_clk = { 2006 .halt_reg = 0x2fcc, 2007 .halt_bit = 13, 2008 .clkr = { 2009 .enable_reg = 0x298c, 2010 .enable_mask = BIT(4), 2011 .hw.init = &(struct clk_init_data){ 2012 .name = "usb_fs2_system_clk", 2013 .parent_names = usb_fs2_xcvr_fs_src_p, 2014 .num_parents = 1, 2015 .ops = &clk_branch_ops, 2016 .flags = CLK_SET_RATE_PARENT, 2017 }, 2018 }, 2019 }; 2020 2021 static struct clk_branch gsbi1_h_clk = { 2022 .halt_reg = 0x2fcc, 2023 .halt_bit = 11, 2024 .clkr = { 2025 .enable_reg = 0x29c0, 2026 .enable_mask = BIT(4), 2027 .hw.init = &(struct clk_init_data){ 2028 .name = "gsbi1_h_clk", 2029 .ops = &clk_branch_ops, 2030 .flags = CLK_IS_ROOT, 2031 }, 2032 }, 2033 }; 2034 2035 static struct clk_branch gsbi2_h_clk = { 2036 .halt_reg = 0x2fcc, 2037 .halt_bit = 7, 2038 .clkr = { 2039 .enable_reg = 0x29e0, 2040 .enable_mask = BIT(4), 2041 .hw.init = &(struct clk_init_data){ 2042 .name = "gsbi2_h_clk", 2043 .ops = &clk_branch_ops, 2044 .flags = CLK_IS_ROOT, 2045 }, 2046 }, 2047 }; 2048 2049 static struct clk_branch gsbi3_h_clk = { 2050 .halt_reg = 0x2fcc, 2051 .halt_bit = 3, 2052 .clkr = { 2053 .enable_reg = 0x2a00, 2054 .enable_mask = BIT(4), 2055 .hw.init = &(struct clk_init_data){ 2056 .name = "gsbi3_h_clk", 2057 .ops = &clk_branch_ops, 2058 .flags = CLK_IS_ROOT, 2059 }, 2060 }, 2061 }; 2062 2063 static struct clk_branch gsbi4_h_clk = { 2064 .halt_reg = 0x2fd0, 2065 .halt_bit = 27, 2066 .clkr = { 2067 .enable_reg = 0x2a20, 2068 .enable_mask = BIT(4), 2069 .hw.init = &(struct clk_init_data){ 2070 .name = "gsbi4_h_clk", 2071 .ops = &clk_branch_ops, 2072 .flags = CLK_IS_ROOT, 2073 }, 2074 }, 2075 }; 2076 2077 static struct clk_branch gsbi5_h_clk = { 2078 .halt_reg = 0x2fd0, 2079 .halt_bit = 23, 2080 .clkr = { 2081 .enable_reg = 0x2a40, 2082 .enable_mask = BIT(4), 2083 .hw.init = &(struct clk_init_data){ 2084 .name = "gsbi5_h_clk", 2085 .ops = &clk_branch_ops, 2086 .flags = CLK_IS_ROOT, 2087 }, 2088 }, 2089 }; 2090 2091 static struct clk_branch gsbi6_h_clk = { 2092 .halt_reg = 0x2fd0, 2093 .halt_bit = 19, 2094 .clkr = { 2095 .enable_reg = 0x2a60, 2096 .enable_mask = BIT(4), 2097 .hw.init = &(struct clk_init_data){ 2098 .name = "gsbi6_h_clk", 2099 .ops = &clk_branch_ops, 2100 .flags = CLK_IS_ROOT, 2101 }, 2102 }, 2103 }; 2104 2105 static struct clk_branch gsbi7_h_clk = { 2106 .halt_reg = 0x2fd0, 2107 .halt_bit = 15, 2108 .clkr = { 2109 .enable_reg = 0x2a80, 2110 .enable_mask = BIT(4), 2111 .hw.init = &(struct clk_init_data){ 2112 .name = "gsbi7_h_clk", 2113 .ops = &clk_branch_ops, 2114 .flags = CLK_IS_ROOT, 2115 }, 2116 }, 2117 }; 2118 2119 static struct clk_branch gsbi8_h_clk = { 2120 .halt_reg = 0x2fd0, 2121 .halt_bit = 11, 2122 .clkr = { 2123 .enable_reg = 0x2aa0, 2124 .enable_mask = BIT(4), 2125 .hw.init = &(struct clk_init_data){ 2126 .name = "gsbi8_h_clk", 2127 .ops = &clk_branch_ops, 2128 .flags = CLK_IS_ROOT, 2129 }, 2130 }, 2131 }; 2132 2133 static struct clk_branch gsbi9_h_clk = { 2134 .halt_reg = 0x2fd0, 2135 .halt_bit = 7, 2136 .clkr = { 2137 .enable_reg = 0x2ac0, 2138 .enable_mask = BIT(4), 2139 .hw.init = &(struct clk_init_data){ 2140 .name = "gsbi9_h_clk", 2141 .ops = &clk_branch_ops, 2142 .flags = CLK_IS_ROOT, 2143 }, 2144 }, 2145 }; 2146 2147 static struct clk_branch gsbi10_h_clk = { 2148 .halt_reg = 0x2fd0, 2149 .halt_bit = 3, 2150 .clkr = { 2151 .enable_reg = 0x2ae0, 2152 .enable_mask = BIT(4), 2153 .hw.init = &(struct clk_init_data){ 2154 .name = "gsbi10_h_clk", 2155 .ops = &clk_branch_ops, 2156 .flags = CLK_IS_ROOT, 2157 }, 2158 }, 2159 }; 2160 2161 static struct clk_branch gsbi11_h_clk = { 2162 .halt_reg = 0x2fd4, 2163 .halt_bit = 18, 2164 .clkr = { 2165 .enable_reg = 0x2b00, 2166 .enable_mask = BIT(4), 2167 .hw.init = &(struct clk_init_data){ 2168 .name = "gsbi11_h_clk", 2169 .ops = &clk_branch_ops, 2170 .flags = CLK_IS_ROOT, 2171 }, 2172 }, 2173 }; 2174 2175 static struct clk_branch gsbi12_h_clk = { 2176 .halt_reg = 0x2fd4, 2177 .halt_bit = 14, 2178 .clkr = { 2179 .enable_reg = 0x2b20, 2180 .enable_mask = BIT(4), 2181 .hw.init = &(struct clk_init_data){ 2182 .name = "gsbi12_h_clk", 2183 .ops = &clk_branch_ops, 2184 .flags = CLK_IS_ROOT, 2185 }, 2186 }, 2187 }; 2188 2189 static struct clk_branch tsif_h_clk = { 2190 .halt_reg = 0x2fd4, 2191 .halt_bit = 7, 2192 .clkr = { 2193 .enable_reg = 0x2700, 2194 .enable_mask = BIT(4), 2195 .hw.init = &(struct clk_init_data){ 2196 .name = "tsif_h_clk", 2197 .ops = &clk_branch_ops, 2198 .flags = CLK_IS_ROOT, 2199 }, 2200 }, 2201 }; 2202 2203 static struct clk_branch usb_fs1_h_clk = { 2204 .halt_reg = 0x2fcc, 2205 .halt_bit = 17, 2206 .clkr = { 2207 .enable_reg = 0x2960, 2208 .enable_mask = BIT(4), 2209 .hw.init = &(struct clk_init_data){ 2210 .name = "usb_fs1_h_clk", 2211 .ops = &clk_branch_ops, 2212 .flags = CLK_IS_ROOT, 2213 }, 2214 }, 2215 }; 2216 2217 static struct clk_branch usb_fs2_h_clk = { 2218 .halt_reg = 0x2fcc, 2219 .halt_bit = 14, 2220 .clkr = { 2221 .enable_reg = 0x2980, 2222 .enable_mask = BIT(4), 2223 .hw.init = &(struct clk_init_data){ 2224 .name = "usb_fs2_h_clk", 2225 .ops = &clk_branch_ops, 2226 .flags = CLK_IS_ROOT, 2227 }, 2228 }, 2229 }; 2230 2231 static struct clk_branch usb_hs1_h_clk = { 2232 .halt_reg = 0x2fc8, 2233 .halt_bit = 1, 2234 .clkr = { 2235 .enable_reg = 0x2900, 2236 .enable_mask = BIT(4), 2237 .hw.init = &(struct clk_init_data){ 2238 .name = "usb_hs1_h_clk", 2239 .ops = &clk_branch_ops, 2240 .flags = CLK_IS_ROOT, 2241 }, 2242 }, 2243 }; 2244 2245 static struct clk_branch sdc1_h_clk = { 2246 .halt_reg = 0x2fc8, 2247 .halt_bit = 11, 2248 .clkr = { 2249 .enable_reg = 0x2820, 2250 .enable_mask = BIT(4), 2251 .hw.init = &(struct clk_init_data){ 2252 .name = "sdc1_h_clk", 2253 .ops = &clk_branch_ops, 2254 .flags = CLK_IS_ROOT, 2255 }, 2256 }, 2257 }; 2258 2259 static struct clk_branch sdc2_h_clk = { 2260 .halt_reg = 0x2fc8, 2261 .halt_bit = 10, 2262 .clkr = { 2263 .enable_reg = 0x2840, 2264 .enable_mask = BIT(4), 2265 .hw.init = &(struct clk_init_data){ 2266 .name = "sdc2_h_clk", 2267 .ops = &clk_branch_ops, 2268 .flags = CLK_IS_ROOT, 2269 }, 2270 }, 2271 }; 2272 2273 static struct clk_branch sdc3_h_clk = { 2274 .halt_reg = 0x2fc8, 2275 .halt_bit = 9, 2276 .clkr = { 2277 .enable_reg = 0x2860, 2278 .enable_mask = BIT(4), 2279 .hw.init = &(struct clk_init_data){ 2280 .name = "sdc3_h_clk", 2281 .ops = &clk_branch_ops, 2282 .flags = CLK_IS_ROOT, 2283 }, 2284 }, 2285 }; 2286 2287 static struct clk_branch sdc4_h_clk = { 2288 .halt_reg = 0x2fc8, 2289 .halt_bit = 8, 2290 .clkr = { 2291 .enable_reg = 0x2880, 2292 .enable_mask = BIT(4), 2293 .hw.init = &(struct clk_init_data){ 2294 .name = "sdc4_h_clk", 2295 .ops = &clk_branch_ops, 2296 .flags = CLK_IS_ROOT, 2297 }, 2298 }, 2299 }; 2300 2301 static struct clk_branch sdc5_h_clk = { 2302 .halt_reg = 0x2fc8, 2303 .halt_bit = 7, 2304 .clkr = { 2305 .enable_reg = 0x28a0, 2306 .enable_mask = BIT(4), 2307 .hw.init = &(struct clk_init_data){ 2308 .name = "sdc5_h_clk", 2309 .ops = &clk_branch_ops, 2310 .flags = CLK_IS_ROOT, 2311 }, 2312 }, 2313 }; 2314 2315 static struct clk_branch adm0_clk = { 2316 .halt_reg = 0x2fdc, 2317 .halt_check = BRANCH_HALT_VOTED, 2318 .halt_bit = 14, 2319 .clkr = { 2320 .enable_reg = 0x3080, 2321 .enable_mask = BIT(2), 2322 .hw.init = &(struct clk_init_data){ 2323 .name = "adm0_clk", 2324 .ops = &clk_branch_ops, 2325 .flags = CLK_IS_ROOT, 2326 }, 2327 }, 2328 }; 2329 2330 static struct clk_branch adm0_pbus_clk = { 2331 .halt_reg = 0x2fdc, 2332 .halt_check = BRANCH_HALT_VOTED, 2333 .halt_bit = 13, 2334 .clkr = { 2335 .enable_reg = 0x3080, 2336 .enable_mask = BIT(3), 2337 .hw.init = &(struct clk_init_data){ 2338 .name = "adm0_pbus_clk", 2339 .ops = &clk_branch_ops, 2340 .flags = CLK_IS_ROOT, 2341 }, 2342 }, 2343 }; 2344 2345 static struct clk_branch adm1_clk = { 2346 .halt_reg = 0x2fdc, 2347 .halt_bit = 12, 2348 .halt_check = BRANCH_HALT_VOTED, 2349 .clkr = { 2350 .enable_reg = 0x3080, 2351 .enable_mask = BIT(4), 2352 .hw.init = &(struct clk_init_data){ 2353 .name = "adm1_clk", 2354 .ops = &clk_branch_ops, 2355 .flags = CLK_IS_ROOT, 2356 }, 2357 }, 2358 }; 2359 2360 static struct clk_branch adm1_pbus_clk = { 2361 .halt_reg = 0x2fdc, 2362 .halt_bit = 11, 2363 .halt_check = BRANCH_HALT_VOTED, 2364 .clkr = { 2365 .enable_reg = 0x3080, 2366 .enable_mask = BIT(5), 2367 .hw.init = &(struct clk_init_data){ 2368 .name = "adm1_pbus_clk", 2369 .ops = &clk_branch_ops, 2370 .flags = CLK_IS_ROOT, 2371 }, 2372 }, 2373 }; 2374 2375 static struct clk_branch modem_ahb1_h_clk = { 2376 .halt_reg = 0x2fdc, 2377 .halt_bit = 8, 2378 .halt_check = BRANCH_HALT_VOTED, 2379 .clkr = { 2380 .enable_reg = 0x3080, 2381 .enable_mask = BIT(0), 2382 .hw.init = &(struct clk_init_data){ 2383 .name = "modem_ahb1_h_clk", 2384 .ops = &clk_branch_ops, 2385 .flags = CLK_IS_ROOT, 2386 }, 2387 }, 2388 }; 2389 2390 static struct clk_branch modem_ahb2_h_clk = { 2391 .halt_reg = 0x2fdc, 2392 .halt_bit = 7, 2393 .halt_check = BRANCH_HALT_VOTED, 2394 .clkr = { 2395 .enable_reg = 0x3080, 2396 .enable_mask = BIT(1), 2397 .hw.init = &(struct clk_init_data){ 2398 .name = "modem_ahb2_h_clk", 2399 .ops = &clk_branch_ops, 2400 .flags = CLK_IS_ROOT, 2401 }, 2402 }, 2403 }; 2404 2405 static struct clk_branch pmic_arb0_h_clk = { 2406 .halt_reg = 0x2fd8, 2407 .halt_check = BRANCH_HALT_VOTED, 2408 .halt_bit = 22, 2409 .clkr = { 2410 .enable_reg = 0x3080, 2411 .enable_mask = BIT(8), 2412 .hw.init = &(struct clk_init_data){ 2413 .name = "pmic_arb0_h_clk", 2414 .ops = &clk_branch_ops, 2415 .flags = CLK_IS_ROOT, 2416 }, 2417 }, 2418 }; 2419 2420 static struct clk_branch pmic_arb1_h_clk = { 2421 .halt_reg = 0x2fd8, 2422 .halt_check = BRANCH_HALT_VOTED, 2423 .halt_bit = 21, 2424 .clkr = { 2425 .enable_reg = 0x3080, 2426 .enable_mask = BIT(9), 2427 .hw.init = &(struct clk_init_data){ 2428 .name = "pmic_arb1_h_clk", 2429 .ops = &clk_branch_ops, 2430 .flags = CLK_IS_ROOT, 2431 }, 2432 }, 2433 }; 2434 2435 static struct clk_branch pmic_ssbi2_clk = { 2436 .halt_reg = 0x2fd8, 2437 .halt_check = BRANCH_HALT_VOTED, 2438 .halt_bit = 23, 2439 .clkr = { 2440 .enable_reg = 0x3080, 2441 .enable_mask = BIT(7), 2442 .hw.init = &(struct clk_init_data){ 2443 .name = "pmic_ssbi2_clk", 2444 .ops = &clk_branch_ops, 2445 .flags = CLK_IS_ROOT, 2446 }, 2447 }, 2448 }; 2449 2450 static struct clk_branch rpm_msg_ram_h_clk = { 2451 .hwcg_reg = 0x27e0, 2452 .hwcg_bit = 6, 2453 .halt_reg = 0x2fd8, 2454 .halt_check = BRANCH_HALT_VOTED, 2455 .halt_bit = 12, 2456 .clkr = { 2457 .enable_reg = 0x3080, 2458 .enable_mask = BIT(6), 2459 .hw.init = &(struct clk_init_data){ 2460 .name = "rpm_msg_ram_h_clk", 2461 .ops = &clk_branch_ops, 2462 .flags = CLK_IS_ROOT, 2463 }, 2464 }, 2465 }; 2466 2467 static struct clk_regmap *gcc_msm8660_clks[] = { 2468 [PLL8] = &pll8.clkr, 2469 [PLL8_VOTE] = &pll8_vote, 2470 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 2471 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 2472 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 2473 [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 2474 [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr, 2475 [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr, 2476 [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 2477 [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 2478 [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 2479 [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 2480 [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 2481 [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 2482 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 2483 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 2484 [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr, 2485 [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr, 2486 [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr, 2487 [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr, 2488 [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr, 2489 [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr, 2490 [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr, 2491 [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr, 2492 [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr, 2493 [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr, 2494 [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 2495 [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 2496 [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 2497 [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 2498 [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr, 2499 [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr, 2500 [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 2501 [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 2502 [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 2503 [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 2504 [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 2505 [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 2506 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 2507 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 2508 [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr, 2509 [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr, 2510 [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr, 2511 [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr, 2512 [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr, 2513 [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr, 2514 [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr, 2515 [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr, 2516 [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr, 2517 [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr, 2518 [GP0_SRC] = &gp0_src.clkr, 2519 [GP0_CLK] = &gp0_clk.clkr, 2520 [GP1_SRC] = &gp1_src.clkr, 2521 [GP1_CLK] = &gp1_clk.clkr, 2522 [GP2_SRC] = &gp2_src.clkr, 2523 [GP2_CLK] = &gp2_clk.clkr, 2524 [PMEM_CLK] = &pmem_clk.clkr, 2525 [PRNG_SRC] = &prng_src.clkr, 2526 [PRNG_CLK] = &prng_clk.clkr, 2527 [SDC1_SRC] = &sdc1_src.clkr, 2528 [SDC1_CLK] = &sdc1_clk.clkr, 2529 [SDC2_SRC] = &sdc2_src.clkr, 2530 [SDC2_CLK] = &sdc2_clk.clkr, 2531 [SDC3_SRC] = &sdc3_src.clkr, 2532 [SDC3_CLK] = &sdc3_clk.clkr, 2533 [SDC4_SRC] = &sdc4_src.clkr, 2534 [SDC4_CLK] = &sdc4_clk.clkr, 2535 [SDC5_SRC] = &sdc5_src.clkr, 2536 [SDC5_CLK] = &sdc5_clk.clkr, 2537 [TSIF_REF_SRC] = &tsif_ref_src.clkr, 2538 [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 2539 [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr, 2540 [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 2541 [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr, 2542 [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr, 2543 [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr, 2544 [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr, 2545 [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr, 2546 [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr, 2547 [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 2548 [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 2549 [GSBI3_H_CLK] = &gsbi3_h_clk.clkr, 2550 [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 2551 [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 2552 [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 2553 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 2554 [GSBI8_H_CLK] = &gsbi8_h_clk.clkr, 2555 [GSBI9_H_CLK] = &gsbi9_h_clk.clkr, 2556 [GSBI10_H_CLK] = &gsbi10_h_clk.clkr, 2557 [GSBI11_H_CLK] = &gsbi11_h_clk.clkr, 2558 [GSBI12_H_CLK] = &gsbi12_h_clk.clkr, 2559 [TSIF_H_CLK] = &tsif_h_clk.clkr, 2560 [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 2561 [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr, 2562 [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 2563 [SDC1_H_CLK] = &sdc1_h_clk.clkr, 2564 [SDC2_H_CLK] = &sdc2_h_clk.clkr, 2565 [SDC3_H_CLK] = &sdc3_h_clk.clkr, 2566 [SDC4_H_CLK] = &sdc4_h_clk.clkr, 2567 [SDC5_H_CLK] = &sdc5_h_clk.clkr, 2568 [ADM0_CLK] = &adm0_clk.clkr, 2569 [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 2570 [ADM1_CLK] = &adm1_clk.clkr, 2571 [ADM1_PBUS_CLK] = &adm1_pbus_clk.clkr, 2572 [MODEM_AHB1_H_CLK] = &modem_ahb1_h_clk.clkr, 2573 [MODEM_AHB2_H_CLK] = &modem_ahb2_h_clk.clkr, 2574 [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 2575 [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 2576 [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 2577 [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 2578 }; 2579 2580 static const struct qcom_reset_map gcc_msm8660_resets[] = { 2581 [AFAB_CORE_RESET] = { 0x2080, 7 }, 2582 [SCSS_SYS_RESET] = { 0x20b4, 1 }, 2583 [SCSS_SYS_POR_RESET] = { 0x20b4 }, 2584 [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 2585 [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 2586 [AFAB_SMPSS_M0_RESET] = { 0x20b8 }, 2587 [AFAB_EBI1_S_RESET] = { 0x20c0, 7 }, 2588 [SFAB_CORE_RESET] = { 0x2120, 7 }, 2589 [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 2590 [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 2591 [SFAB_ADM0_M2_RESET] = { 0x21e4, 7 }, 2592 [ADM0_C2_RESET] = { 0x220c, 4 }, 2593 [ADM0_C1_RESET] = { 0x220c, 3 }, 2594 [ADM0_C0_RESET] = { 0x220c, 2 }, 2595 [ADM0_PBUS_RESET] = { 0x220c, 1 }, 2596 [ADM0_RESET] = { 0x220c }, 2597 [SFAB_ADM1_M0_RESET] = { 0x2220, 7 }, 2598 [SFAB_ADM1_M1_RESET] = { 0x2224, 7 }, 2599 [SFAB_ADM1_M2_RESET] = { 0x2228, 7 }, 2600 [MMFAB_ADM1_M3_RESET] = { 0x2240, 7 }, 2601 [ADM1_C3_RESET] = { 0x226c, 5 }, 2602 [ADM1_C2_RESET] = { 0x226c, 4 }, 2603 [ADM1_C1_RESET] = { 0x226c, 3 }, 2604 [ADM1_C0_RESET] = { 0x226c, 2 }, 2605 [ADM1_PBUS_RESET] = { 0x226c, 1 }, 2606 [ADM1_RESET] = { 0x226c }, 2607 [IMEM0_RESET] = { 0x2280, 7 }, 2608 [SFAB_LPASS_Q6_RESET] = { 0x23a0, 7 }, 2609 [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 2610 [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 2611 [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 2612 [DFAB_CORE_RESET] = { 0x24ac, 7 }, 2613 [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 2614 [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 2615 [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 2616 [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 2617 [DFAB_ARB0_RESET] = { 0x2560, 7 }, 2618 [DFAB_ARB1_RESET] = { 0x2564, 7 }, 2619 [PPSS_PROC_RESET] = { 0x2594, 1 }, 2620 [PPSS_RESET] = { 0x2594 }, 2621 [PMEM_RESET] = { 0x25a0, 7 }, 2622 [DMA_BAM_RESET] = { 0x25c0, 7 }, 2623 [SIC_RESET] = { 0x25e0, 7 }, 2624 [SPS_TIC_RESET] = { 0x2600, 7 }, 2625 [CFBP0_RESET] = { 0x2650, 7 }, 2626 [CFBP1_RESET] = { 0x2654, 7 }, 2627 [CFBP2_RESET] = { 0x2658, 7 }, 2628 [EBI2_RESET] = { 0x2664, 7 }, 2629 [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 2630 [CFPB_MASTER_RESET] = { 0x26a0, 7 }, 2631 [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 2632 [CFPB_SPLITTER_RESET] = { 0x26e0, 7 }, 2633 [TSIF_RESET] = { 0x2700, 7 }, 2634 [CE1_RESET] = { 0x2720, 7 }, 2635 [CE2_RESET] = { 0x2740, 7 }, 2636 [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 2637 [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 2638 [RPM_PROC_RESET] = { 0x27c0, 7 }, 2639 [RPM_BUS_RESET] = { 0x27c4, 7 }, 2640 [RPM_MSG_RAM_RESET] = { 0x27e0, 7 }, 2641 [PMIC_ARB0_RESET] = { 0x2800, 7 }, 2642 [PMIC_ARB1_RESET] = { 0x2804, 7 }, 2643 [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 2644 [SDC1_RESET] = { 0x2830 }, 2645 [SDC2_RESET] = { 0x2850 }, 2646 [SDC3_RESET] = { 0x2870 }, 2647 [SDC4_RESET] = { 0x2890 }, 2648 [SDC5_RESET] = { 0x28b0 }, 2649 [USB_HS1_RESET] = { 0x2910 }, 2650 [USB_HS2_XCVR_RESET] = { 0x2934, 1 }, 2651 [USB_HS2_RESET] = { 0x2934 }, 2652 [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 2653 [USB_FS1_RESET] = { 0x2974 }, 2654 [USB_FS2_XCVR_RESET] = { 0x2994, 1 }, 2655 [USB_FS2_RESET] = { 0x2994 }, 2656 [GSBI1_RESET] = { 0x29dc }, 2657 [GSBI2_RESET] = { 0x29fc }, 2658 [GSBI3_RESET] = { 0x2a1c }, 2659 [GSBI4_RESET] = { 0x2a3c }, 2660 [GSBI5_RESET] = { 0x2a5c }, 2661 [GSBI6_RESET] = { 0x2a7c }, 2662 [GSBI7_RESET] = { 0x2a9c }, 2663 [GSBI8_RESET] = { 0x2abc }, 2664 [GSBI9_RESET] = { 0x2adc }, 2665 [GSBI10_RESET] = { 0x2afc }, 2666 [GSBI11_RESET] = { 0x2b1c }, 2667 [GSBI12_RESET] = { 0x2b3c }, 2668 [SPDM_RESET] = { 0x2b6c }, 2669 [SEC_CTRL_RESET] = { 0x2b80, 7 }, 2670 [TLMM_H_RESET] = { 0x2ba0, 7 }, 2671 [TLMM_RESET] = { 0x2ba4, 7 }, 2672 [MARRM_PWRON_RESET] = { 0x2bd4, 1 }, 2673 [MARM_RESET] = { 0x2bd4 }, 2674 [MAHB1_RESET] = { 0x2be4, 7 }, 2675 [SFAB_MSS_S_RESET] = { 0x2c00, 7 }, 2676 [MAHB2_RESET] = { 0x2c20, 7 }, 2677 [MODEM_SW_AHB_RESET] = { 0x2c48, 1 }, 2678 [MODEM_RESET] = { 0x2c48 }, 2679 [SFAB_MSS_MDM1_RESET] = { 0x2c4c, 1 }, 2680 [SFAB_MSS_MDM0_RESET] = { 0x2c4c }, 2681 [MSS_SLP_RESET] = { 0x2c60, 7 }, 2682 [MSS_MARM_SAW_RESET] = { 0x2c68, 1 }, 2683 [MSS_WDOG_RESET] = { 0x2c68 }, 2684 [TSSC_RESET] = { 0x2ca0, 7 }, 2685 [PDM_RESET] = { 0x2cc0, 12 }, 2686 [SCSS_CORE0_RESET] = { 0x2d60, 1 }, 2687 [SCSS_CORE0_POR_RESET] = { 0x2d60 }, 2688 [SCSS_CORE1_RESET] = { 0x2d80, 1 }, 2689 [SCSS_CORE1_POR_RESET] = { 0x2d80 }, 2690 [MPM_RESET] = { 0x2da4, 1 }, 2691 [EBI1_1X_DIV_RESET] = { 0x2dec, 9 }, 2692 [EBI1_RESET] = { 0x2dec, 7 }, 2693 [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 2694 [USB_PHY0_RESET] = { 0x2e20 }, 2695 [USB_PHY1_RESET] = { 0x2e40 }, 2696 [PRNG_RESET] = { 0x2e80, 12 }, 2697 }; 2698 2699 static const struct regmap_config gcc_msm8660_regmap_config = { 2700 .reg_bits = 32, 2701 .reg_stride = 4, 2702 .val_bits = 32, 2703 .max_register = 0x363c, 2704 .fast_io = true, 2705 }; 2706 2707 static const struct qcom_cc_desc gcc_msm8660_desc = { 2708 .config = &gcc_msm8660_regmap_config, 2709 .clks = gcc_msm8660_clks, 2710 .num_clks = ARRAY_SIZE(gcc_msm8660_clks), 2711 .resets = gcc_msm8660_resets, 2712 .num_resets = ARRAY_SIZE(gcc_msm8660_resets), 2713 }; 2714 2715 static const struct of_device_id gcc_msm8660_match_table[] = { 2716 { .compatible = "qcom,gcc-msm8660" }, 2717 { } 2718 }; 2719 MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table); 2720 2721 static int gcc_msm8660_probe(struct platform_device *pdev) 2722 { 2723 struct clk *clk; 2724 struct device *dev = &pdev->dev; 2725 2726 /* Temporary until RPM clocks supported */ 2727 clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000); 2728 if (IS_ERR(clk)) 2729 return PTR_ERR(clk); 2730 2731 clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000); 2732 if (IS_ERR(clk)) 2733 return PTR_ERR(clk); 2734 2735 return qcom_cc_probe(pdev, &gcc_msm8660_desc); 2736 } 2737 2738 static int gcc_msm8660_remove(struct platform_device *pdev) 2739 { 2740 qcom_cc_remove(pdev); 2741 return 0; 2742 } 2743 2744 static struct platform_driver gcc_msm8660_driver = { 2745 .probe = gcc_msm8660_probe, 2746 .remove = gcc_msm8660_remove, 2747 .driver = { 2748 .name = "gcc-msm8660", 2749 .of_match_table = gcc_msm8660_match_table, 2750 }, 2751 }; 2752 2753 static int __init gcc_msm8660_init(void) 2754 { 2755 return platform_driver_register(&gcc_msm8660_driver); 2756 } 2757 core_initcall(gcc_msm8660_init); 2758 2759 static void __exit gcc_msm8660_exit(void) 2760 { 2761 platform_driver_unregister(&gcc_msm8660_driver); 2762 } 2763 module_exit(gcc_msm8660_exit); 2764 2765 MODULE_DESCRIPTION("GCC MSM 8660 Driver"); 2766 MODULE_LICENSE("GPL v2"); 2767 MODULE_ALIAS("platform:gcc-msm8660"); 2768