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