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 .flags = CLK_IS_ROOT, 1550 }, 1551 }, 1552 }; 1553 1554 static struct clk_rcg prng_src = { 1555 .ns_reg = 0x2e80, 1556 .p = { 1557 .pre_div_shift = 3, 1558 .pre_div_width = 4, 1559 }, 1560 .s = { 1561 .src_sel_shift = 0, 1562 .parent_map = gcc_pxo_pll8_map, 1563 }, 1564 .clkr = { 1565 .hw.init = &(struct clk_init_data){ 1566 .name = "prng_src", 1567 .parent_names = gcc_pxo_pll8, 1568 .num_parents = 2, 1569 .ops = &clk_rcg_ops, 1570 }, 1571 }, 1572 }; 1573 1574 static struct clk_branch prng_clk = { 1575 .halt_reg = 0x2fd8, 1576 .halt_check = BRANCH_HALT_VOTED, 1577 .halt_bit = 10, 1578 .clkr = { 1579 .enable_reg = 0x3080, 1580 .enable_mask = BIT(10), 1581 .hw.init = &(struct clk_init_data){ 1582 .name = "prng_clk", 1583 .parent_names = (const char *[]){ "prng_src" }, 1584 .num_parents = 1, 1585 .ops = &clk_branch_ops, 1586 }, 1587 }, 1588 }; 1589 1590 static const struct freq_tbl clk_tbl_sdc[] = { 1591 { 144000, P_PXO, 3, 2, 125 }, 1592 { 400000, P_PLL8, 4, 1, 240 }, 1593 { 16000000, P_PLL8, 4, 1, 6 }, 1594 { 17070000, P_PLL8, 1, 2, 45 }, 1595 { 20210000, P_PLL8, 1, 1, 19 }, 1596 { 24000000, P_PLL8, 4, 1, 4 }, 1597 { 48000000, P_PLL8, 4, 1, 2 }, 1598 { 64000000, P_PLL8, 3, 1, 2 }, 1599 { 96000000, P_PLL8, 4, 0, 0 }, 1600 { 192000000, P_PLL8, 2, 0, 0 }, 1601 { } 1602 }; 1603 1604 static struct clk_rcg sdc1_src = { 1605 .ns_reg = 0x282c, 1606 .md_reg = 0x2828, 1607 .mn = { 1608 .mnctr_en_bit = 8, 1609 .mnctr_reset_bit = 7, 1610 .mnctr_mode_shift = 5, 1611 .n_val_shift = 16, 1612 .m_val_shift = 16, 1613 .width = 8, 1614 }, 1615 .p = { 1616 .pre_div_shift = 3, 1617 .pre_div_width = 2, 1618 }, 1619 .s = { 1620 .src_sel_shift = 0, 1621 .parent_map = gcc_pxo_pll8_map, 1622 }, 1623 .freq_tbl = clk_tbl_sdc, 1624 .clkr = { 1625 .enable_reg = 0x282c, 1626 .enable_mask = BIT(11), 1627 .hw.init = &(struct clk_init_data){ 1628 .name = "sdc1_src", 1629 .parent_names = gcc_pxo_pll8, 1630 .num_parents = 2, 1631 .ops = &clk_rcg_ops, 1632 .flags = CLK_SET_RATE_GATE, 1633 }, 1634 } 1635 }; 1636 1637 static struct clk_branch sdc1_clk = { 1638 .halt_reg = 0x2fc8, 1639 .halt_bit = 6, 1640 .clkr = { 1641 .enable_reg = 0x282c, 1642 .enable_mask = BIT(9), 1643 .hw.init = &(struct clk_init_data){ 1644 .name = "sdc1_clk", 1645 .parent_names = (const char *[]){ "sdc1_src" }, 1646 .num_parents = 1, 1647 .ops = &clk_branch_ops, 1648 .flags = CLK_SET_RATE_PARENT, 1649 }, 1650 }, 1651 }; 1652 1653 static struct clk_rcg sdc2_src = { 1654 .ns_reg = 0x284c, 1655 .md_reg = 0x2848, 1656 .mn = { 1657 .mnctr_en_bit = 8, 1658 .mnctr_reset_bit = 7, 1659 .mnctr_mode_shift = 5, 1660 .n_val_shift = 16, 1661 .m_val_shift = 16, 1662 .width = 8, 1663 }, 1664 .p = { 1665 .pre_div_shift = 3, 1666 .pre_div_width = 2, 1667 }, 1668 .s = { 1669 .src_sel_shift = 0, 1670 .parent_map = gcc_pxo_pll8_map, 1671 }, 1672 .freq_tbl = clk_tbl_sdc, 1673 .clkr = { 1674 .enable_reg = 0x284c, 1675 .enable_mask = BIT(11), 1676 .hw.init = &(struct clk_init_data){ 1677 .name = "sdc2_src", 1678 .parent_names = gcc_pxo_pll8, 1679 .num_parents = 2, 1680 .ops = &clk_rcg_ops, 1681 .flags = CLK_SET_RATE_GATE, 1682 }, 1683 } 1684 }; 1685 1686 static struct clk_branch sdc2_clk = { 1687 .halt_reg = 0x2fc8, 1688 .halt_bit = 5, 1689 .clkr = { 1690 .enable_reg = 0x284c, 1691 .enable_mask = BIT(9), 1692 .hw.init = &(struct clk_init_data){ 1693 .name = "sdc2_clk", 1694 .parent_names = (const char *[]){ "sdc2_src" }, 1695 .num_parents = 1, 1696 .ops = &clk_branch_ops, 1697 .flags = CLK_SET_RATE_PARENT, 1698 }, 1699 }, 1700 }; 1701 1702 static struct clk_rcg sdc3_src = { 1703 .ns_reg = 0x286c, 1704 .md_reg = 0x2868, 1705 .mn = { 1706 .mnctr_en_bit = 8, 1707 .mnctr_reset_bit = 7, 1708 .mnctr_mode_shift = 5, 1709 .n_val_shift = 16, 1710 .m_val_shift = 16, 1711 .width = 8, 1712 }, 1713 .p = { 1714 .pre_div_shift = 3, 1715 .pre_div_width = 2, 1716 }, 1717 .s = { 1718 .src_sel_shift = 0, 1719 .parent_map = gcc_pxo_pll8_map, 1720 }, 1721 .freq_tbl = clk_tbl_sdc, 1722 .clkr = { 1723 .enable_reg = 0x286c, 1724 .enable_mask = BIT(11), 1725 .hw.init = &(struct clk_init_data){ 1726 .name = "sdc3_src", 1727 .parent_names = gcc_pxo_pll8, 1728 .num_parents = 2, 1729 .ops = &clk_rcg_ops, 1730 .flags = CLK_SET_RATE_GATE, 1731 }, 1732 } 1733 }; 1734 1735 static struct clk_branch sdc3_clk = { 1736 .halt_reg = 0x2fc8, 1737 .halt_bit = 4, 1738 .clkr = { 1739 .enable_reg = 0x286c, 1740 .enable_mask = BIT(9), 1741 .hw.init = &(struct clk_init_data){ 1742 .name = "sdc3_clk", 1743 .parent_names = (const char *[]){ "sdc3_src" }, 1744 .num_parents = 1, 1745 .ops = &clk_branch_ops, 1746 .flags = CLK_SET_RATE_PARENT, 1747 }, 1748 }, 1749 }; 1750 1751 static struct clk_rcg sdc4_src = { 1752 .ns_reg = 0x288c, 1753 .md_reg = 0x2888, 1754 .mn = { 1755 .mnctr_en_bit = 8, 1756 .mnctr_reset_bit = 7, 1757 .mnctr_mode_shift = 5, 1758 .n_val_shift = 16, 1759 .m_val_shift = 16, 1760 .width = 8, 1761 }, 1762 .p = { 1763 .pre_div_shift = 3, 1764 .pre_div_width = 2, 1765 }, 1766 .s = { 1767 .src_sel_shift = 0, 1768 .parent_map = gcc_pxo_pll8_map, 1769 }, 1770 .freq_tbl = clk_tbl_sdc, 1771 .clkr = { 1772 .enable_reg = 0x288c, 1773 .enable_mask = BIT(11), 1774 .hw.init = &(struct clk_init_data){ 1775 .name = "sdc4_src", 1776 .parent_names = gcc_pxo_pll8, 1777 .num_parents = 2, 1778 .ops = &clk_rcg_ops, 1779 .flags = CLK_SET_RATE_GATE, 1780 }, 1781 } 1782 }; 1783 1784 static struct clk_branch sdc4_clk = { 1785 .halt_reg = 0x2fc8, 1786 .halt_bit = 3, 1787 .clkr = { 1788 .enable_reg = 0x288c, 1789 .enable_mask = BIT(9), 1790 .hw.init = &(struct clk_init_data){ 1791 .name = "sdc4_clk", 1792 .parent_names = (const char *[]){ "sdc4_src" }, 1793 .num_parents = 1, 1794 .ops = &clk_branch_ops, 1795 .flags = CLK_SET_RATE_PARENT, 1796 }, 1797 }, 1798 }; 1799 1800 static struct clk_rcg sdc5_src = { 1801 .ns_reg = 0x28ac, 1802 .md_reg = 0x28a8, 1803 .mn = { 1804 .mnctr_en_bit = 8, 1805 .mnctr_reset_bit = 7, 1806 .mnctr_mode_shift = 5, 1807 .n_val_shift = 16, 1808 .m_val_shift = 16, 1809 .width = 8, 1810 }, 1811 .p = { 1812 .pre_div_shift = 3, 1813 .pre_div_width = 2, 1814 }, 1815 .s = { 1816 .src_sel_shift = 0, 1817 .parent_map = gcc_pxo_pll8_map, 1818 }, 1819 .freq_tbl = clk_tbl_sdc, 1820 .clkr = { 1821 .enable_reg = 0x28ac, 1822 .enable_mask = BIT(11), 1823 .hw.init = &(struct clk_init_data){ 1824 .name = "sdc5_src", 1825 .parent_names = gcc_pxo_pll8, 1826 .num_parents = 2, 1827 .ops = &clk_rcg_ops, 1828 .flags = CLK_SET_RATE_GATE, 1829 }, 1830 } 1831 }; 1832 1833 static struct clk_branch sdc5_clk = { 1834 .halt_reg = 0x2fc8, 1835 .halt_bit = 2, 1836 .clkr = { 1837 .enable_reg = 0x28ac, 1838 .enable_mask = BIT(9), 1839 .hw.init = &(struct clk_init_data){ 1840 .name = "sdc5_clk", 1841 .parent_names = (const char *[]){ "sdc5_src" }, 1842 .num_parents = 1, 1843 .ops = &clk_branch_ops, 1844 .flags = CLK_SET_RATE_PARENT, 1845 }, 1846 }, 1847 }; 1848 1849 static const struct freq_tbl clk_tbl_tsif_ref[] = { 1850 { 105000, P_PXO, 1, 1, 256 }, 1851 { } 1852 }; 1853 1854 static struct clk_rcg tsif_ref_src = { 1855 .ns_reg = 0x2710, 1856 .md_reg = 0x270c, 1857 .mn = { 1858 .mnctr_en_bit = 8, 1859 .mnctr_reset_bit = 7, 1860 .mnctr_mode_shift = 5, 1861 .n_val_shift = 16, 1862 .m_val_shift = 16, 1863 .width = 16, 1864 }, 1865 .p = { 1866 .pre_div_shift = 3, 1867 .pre_div_width = 2, 1868 }, 1869 .s = { 1870 .src_sel_shift = 0, 1871 .parent_map = gcc_pxo_pll8_map, 1872 }, 1873 .freq_tbl = clk_tbl_tsif_ref, 1874 .clkr = { 1875 .enable_reg = 0x2710, 1876 .enable_mask = BIT(11), 1877 .hw.init = &(struct clk_init_data){ 1878 .name = "tsif_ref_src", 1879 .parent_names = gcc_pxo_pll8, 1880 .num_parents = 2, 1881 .ops = &clk_rcg_ops, 1882 .flags = CLK_SET_RATE_GATE, 1883 }, 1884 } 1885 }; 1886 1887 static struct clk_branch tsif_ref_clk = { 1888 .halt_reg = 0x2fd4, 1889 .halt_bit = 5, 1890 .clkr = { 1891 .enable_reg = 0x2710, 1892 .enable_mask = BIT(9), 1893 .hw.init = &(struct clk_init_data){ 1894 .name = "tsif_ref_clk", 1895 .parent_names = (const char *[]){ "tsif_ref_src" }, 1896 .num_parents = 1, 1897 .ops = &clk_branch_ops, 1898 .flags = CLK_SET_RATE_PARENT, 1899 }, 1900 }, 1901 }; 1902 1903 static const struct freq_tbl clk_tbl_usb[] = { 1904 { 60000000, P_PLL8, 1, 5, 32 }, 1905 { } 1906 }; 1907 1908 static struct clk_rcg usb_hs1_xcvr_src = { 1909 .ns_reg = 0x290c, 1910 .md_reg = 0x2908, 1911 .mn = { 1912 .mnctr_en_bit = 8, 1913 .mnctr_reset_bit = 7, 1914 .mnctr_mode_shift = 5, 1915 .n_val_shift = 16, 1916 .m_val_shift = 16, 1917 .width = 8, 1918 }, 1919 .p = { 1920 .pre_div_shift = 3, 1921 .pre_div_width = 2, 1922 }, 1923 .s = { 1924 .src_sel_shift = 0, 1925 .parent_map = gcc_pxo_pll8_map, 1926 }, 1927 .freq_tbl = clk_tbl_usb, 1928 .clkr = { 1929 .enable_reg = 0x290c, 1930 .enable_mask = BIT(11), 1931 .hw.init = &(struct clk_init_data){ 1932 .name = "usb_hs1_xcvr_src", 1933 .parent_names = gcc_pxo_pll8, 1934 .num_parents = 2, 1935 .ops = &clk_rcg_ops, 1936 .flags = CLK_SET_RATE_GATE, 1937 }, 1938 } 1939 }; 1940 1941 static struct clk_branch usb_hs1_xcvr_clk = { 1942 .halt_reg = 0x2fc8, 1943 .halt_bit = 0, 1944 .clkr = { 1945 .enable_reg = 0x290c, 1946 .enable_mask = BIT(9), 1947 .hw.init = &(struct clk_init_data){ 1948 .name = "usb_hs1_xcvr_clk", 1949 .parent_names = (const char *[]){ "usb_hs1_xcvr_src" }, 1950 .num_parents = 1, 1951 .ops = &clk_branch_ops, 1952 .flags = CLK_SET_RATE_PARENT, 1953 }, 1954 }, 1955 }; 1956 1957 static struct clk_rcg usb_hs3_xcvr_src = { 1958 .ns_reg = 0x370c, 1959 .md_reg = 0x3708, 1960 .mn = { 1961 .mnctr_en_bit = 8, 1962 .mnctr_reset_bit = 7, 1963 .mnctr_mode_shift = 5, 1964 .n_val_shift = 16, 1965 .m_val_shift = 16, 1966 .width = 8, 1967 }, 1968 .p = { 1969 .pre_div_shift = 3, 1970 .pre_div_width = 2, 1971 }, 1972 .s = { 1973 .src_sel_shift = 0, 1974 .parent_map = gcc_pxo_pll8_map, 1975 }, 1976 .freq_tbl = clk_tbl_usb, 1977 .clkr = { 1978 .enable_reg = 0x370c, 1979 .enable_mask = BIT(11), 1980 .hw.init = &(struct clk_init_data){ 1981 .name = "usb_hs3_xcvr_src", 1982 .parent_names = gcc_pxo_pll8, 1983 .num_parents = 2, 1984 .ops = &clk_rcg_ops, 1985 .flags = CLK_SET_RATE_GATE, 1986 }, 1987 } 1988 }; 1989 1990 static struct clk_branch usb_hs3_xcvr_clk = { 1991 .halt_reg = 0x2fc8, 1992 .halt_bit = 30, 1993 .clkr = { 1994 .enable_reg = 0x370c, 1995 .enable_mask = BIT(9), 1996 .hw.init = &(struct clk_init_data){ 1997 .name = "usb_hs3_xcvr_clk", 1998 .parent_names = (const char *[]){ "usb_hs3_xcvr_src" }, 1999 .num_parents = 1, 2000 .ops = &clk_branch_ops, 2001 .flags = CLK_SET_RATE_PARENT, 2002 }, 2003 }, 2004 }; 2005 2006 static struct clk_rcg usb_hs4_xcvr_src = { 2007 .ns_reg = 0x372c, 2008 .md_reg = 0x3728, 2009 .mn = { 2010 .mnctr_en_bit = 8, 2011 .mnctr_reset_bit = 7, 2012 .mnctr_mode_shift = 5, 2013 .n_val_shift = 16, 2014 .m_val_shift = 16, 2015 .width = 8, 2016 }, 2017 .p = { 2018 .pre_div_shift = 3, 2019 .pre_div_width = 2, 2020 }, 2021 .s = { 2022 .src_sel_shift = 0, 2023 .parent_map = gcc_pxo_pll8_map, 2024 }, 2025 .freq_tbl = clk_tbl_usb, 2026 .clkr = { 2027 .enable_reg = 0x372c, 2028 .enable_mask = BIT(11), 2029 .hw.init = &(struct clk_init_data){ 2030 .name = "usb_hs4_xcvr_src", 2031 .parent_names = gcc_pxo_pll8, 2032 .num_parents = 2, 2033 .ops = &clk_rcg_ops, 2034 .flags = CLK_SET_RATE_GATE, 2035 }, 2036 } 2037 }; 2038 2039 static struct clk_branch usb_hs4_xcvr_clk = { 2040 .halt_reg = 0x2fc8, 2041 .halt_bit = 2, 2042 .clkr = { 2043 .enable_reg = 0x372c, 2044 .enable_mask = BIT(9), 2045 .hw.init = &(struct clk_init_data){ 2046 .name = "usb_hs4_xcvr_clk", 2047 .parent_names = (const char *[]){ "usb_hs4_xcvr_src" }, 2048 .num_parents = 1, 2049 .ops = &clk_branch_ops, 2050 .flags = CLK_SET_RATE_PARENT, 2051 }, 2052 }, 2053 }; 2054 2055 static struct clk_rcg usb_hsic_xcvr_fs_src = { 2056 .ns_reg = 0x2928, 2057 .md_reg = 0x2924, 2058 .mn = { 2059 .mnctr_en_bit = 8, 2060 .mnctr_reset_bit = 7, 2061 .mnctr_mode_shift = 5, 2062 .n_val_shift = 16, 2063 .m_val_shift = 16, 2064 .width = 8, 2065 }, 2066 .p = { 2067 .pre_div_shift = 3, 2068 .pre_div_width = 2, 2069 }, 2070 .s = { 2071 .src_sel_shift = 0, 2072 .parent_map = gcc_pxo_pll8_map, 2073 }, 2074 .freq_tbl = clk_tbl_usb, 2075 .clkr = { 2076 .enable_reg = 0x2928, 2077 .enable_mask = BIT(11), 2078 .hw.init = &(struct clk_init_data){ 2079 .name = "usb_hsic_xcvr_fs_src", 2080 .parent_names = gcc_pxo_pll8, 2081 .num_parents = 2, 2082 .ops = &clk_rcg_ops, 2083 .flags = CLK_SET_RATE_GATE, 2084 }, 2085 } 2086 }; 2087 2088 static const char * const usb_hsic_xcvr_fs_src_p[] = { "usb_hsic_xcvr_fs_src" }; 2089 2090 static struct clk_branch usb_hsic_xcvr_fs_clk = { 2091 .halt_reg = 0x2fc8, 2092 .halt_bit = 2, 2093 .clkr = { 2094 .enable_reg = 0x2928, 2095 .enable_mask = BIT(9), 2096 .hw.init = &(struct clk_init_data){ 2097 .name = "usb_hsic_xcvr_fs_clk", 2098 .parent_names = usb_hsic_xcvr_fs_src_p, 2099 .num_parents = 1, 2100 .ops = &clk_branch_ops, 2101 .flags = CLK_SET_RATE_PARENT, 2102 }, 2103 }, 2104 }; 2105 2106 static struct clk_branch usb_hsic_system_clk = { 2107 .halt_reg = 0x2fcc, 2108 .halt_bit = 24, 2109 .clkr = { 2110 .enable_reg = 0x292c, 2111 .enable_mask = BIT(4), 2112 .hw.init = &(struct clk_init_data){ 2113 .parent_names = usb_hsic_xcvr_fs_src_p, 2114 .num_parents = 1, 2115 .name = "usb_hsic_system_clk", 2116 .ops = &clk_branch_ops, 2117 .flags = CLK_SET_RATE_PARENT, 2118 }, 2119 }, 2120 }; 2121 2122 static struct clk_branch usb_hsic_hsic_clk = { 2123 .halt_reg = 0x2fcc, 2124 .halt_bit = 19, 2125 .clkr = { 2126 .enable_reg = 0x2b44, 2127 .enable_mask = BIT(0), 2128 .hw.init = &(struct clk_init_data){ 2129 .parent_names = (const char *[]){ "pll14_vote" }, 2130 .num_parents = 1, 2131 .name = "usb_hsic_hsic_clk", 2132 .ops = &clk_branch_ops, 2133 }, 2134 }, 2135 }; 2136 2137 static struct clk_branch usb_hsic_hsio_cal_clk = { 2138 .halt_reg = 0x2fcc, 2139 .halt_bit = 23, 2140 .clkr = { 2141 .enable_reg = 0x2b48, 2142 .enable_mask = BIT(0), 2143 .hw.init = &(struct clk_init_data){ 2144 .name = "usb_hsic_hsio_cal_clk", 2145 .ops = &clk_branch_ops, 2146 .flags = CLK_IS_ROOT, 2147 }, 2148 }, 2149 }; 2150 2151 static struct clk_rcg usb_fs1_xcvr_fs_src = { 2152 .ns_reg = 0x2968, 2153 .md_reg = 0x2964, 2154 .mn = { 2155 .mnctr_en_bit = 8, 2156 .mnctr_reset_bit = 7, 2157 .mnctr_mode_shift = 5, 2158 .n_val_shift = 16, 2159 .m_val_shift = 16, 2160 .width = 8, 2161 }, 2162 .p = { 2163 .pre_div_shift = 3, 2164 .pre_div_width = 2, 2165 }, 2166 .s = { 2167 .src_sel_shift = 0, 2168 .parent_map = gcc_pxo_pll8_map, 2169 }, 2170 .freq_tbl = clk_tbl_usb, 2171 .clkr = { 2172 .enable_reg = 0x2968, 2173 .enable_mask = BIT(11), 2174 .hw.init = &(struct clk_init_data){ 2175 .name = "usb_fs1_xcvr_fs_src", 2176 .parent_names = gcc_pxo_pll8, 2177 .num_parents = 2, 2178 .ops = &clk_rcg_ops, 2179 .flags = CLK_SET_RATE_GATE, 2180 }, 2181 } 2182 }; 2183 2184 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" }; 2185 2186 static struct clk_branch usb_fs1_xcvr_fs_clk = { 2187 .halt_reg = 0x2fcc, 2188 .halt_bit = 15, 2189 .clkr = { 2190 .enable_reg = 0x2968, 2191 .enable_mask = BIT(9), 2192 .hw.init = &(struct clk_init_data){ 2193 .name = "usb_fs1_xcvr_fs_clk", 2194 .parent_names = usb_fs1_xcvr_fs_src_p, 2195 .num_parents = 1, 2196 .ops = &clk_branch_ops, 2197 .flags = CLK_SET_RATE_PARENT, 2198 }, 2199 }, 2200 }; 2201 2202 static struct clk_branch usb_fs1_system_clk = { 2203 .halt_reg = 0x2fcc, 2204 .halt_bit = 16, 2205 .clkr = { 2206 .enable_reg = 0x296c, 2207 .enable_mask = BIT(4), 2208 .hw.init = &(struct clk_init_data){ 2209 .parent_names = usb_fs1_xcvr_fs_src_p, 2210 .num_parents = 1, 2211 .name = "usb_fs1_system_clk", 2212 .ops = &clk_branch_ops, 2213 .flags = CLK_SET_RATE_PARENT, 2214 }, 2215 }, 2216 }; 2217 2218 static struct clk_rcg usb_fs2_xcvr_fs_src = { 2219 .ns_reg = 0x2988, 2220 .md_reg = 0x2984, 2221 .mn = { 2222 .mnctr_en_bit = 8, 2223 .mnctr_reset_bit = 7, 2224 .mnctr_mode_shift = 5, 2225 .n_val_shift = 16, 2226 .m_val_shift = 16, 2227 .width = 8, 2228 }, 2229 .p = { 2230 .pre_div_shift = 3, 2231 .pre_div_width = 2, 2232 }, 2233 .s = { 2234 .src_sel_shift = 0, 2235 .parent_map = gcc_pxo_pll8_map, 2236 }, 2237 .freq_tbl = clk_tbl_usb, 2238 .clkr = { 2239 .enable_reg = 0x2988, 2240 .enable_mask = BIT(11), 2241 .hw.init = &(struct clk_init_data){ 2242 .name = "usb_fs2_xcvr_fs_src", 2243 .parent_names = gcc_pxo_pll8, 2244 .num_parents = 2, 2245 .ops = &clk_rcg_ops, 2246 .flags = CLK_SET_RATE_GATE, 2247 }, 2248 } 2249 }; 2250 2251 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" }; 2252 2253 static struct clk_branch usb_fs2_xcvr_fs_clk = { 2254 .halt_reg = 0x2fcc, 2255 .halt_bit = 12, 2256 .clkr = { 2257 .enable_reg = 0x2988, 2258 .enable_mask = BIT(9), 2259 .hw.init = &(struct clk_init_data){ 2260 .name = "usb_fs2_xcvr_fs_clk", 2261 .parent_names = usb_fs2_xcvr_fs_src_p, 2262 .num_parents = 1, 2263 .ops = &clk_branch_ops, 2264 .flags = CLK_SET_RATE_PARENT, 2265 }, 2266 }, 2267 }; 2268 2269 static struct clk_branch usb_fs2_system_clk = { 2270 .halt_reg = 0x2fcc, 2271 .halt_bit = 13, 2272 .clkr = { 2273 .enable_reg = 0x298c, 2274 .enable_mask = BIT(4), 2275 .hw.init = &(struct clk_init_data){ 2276 .name = "usb_fs2_system_clk", 2277 .parent_names = usb_fs2_xcvr_fs_src_p, 2278 .num_parents = 1, 2279 .ops = &clk_branch_ops, 2280 .flags = CLK_SET_RATE_PARENT, 2281 }, 2282 }, 2283 }; 2284 2285 static struct clk_branch ce1_core_clk = { 2286 .hwcg_reg = 0x2724, 2287 .hwcg_bit = 6, 2288 .halt_reg = 0x2fd4, 2289 .halt_bit = 27, 2290 .clkr = { 2291 .enable_reg = 0x2724, 2292 .enable_mask = BIT(4), 2293 .hw.init = &(struct clk_init_data){ 2294 .name = "ce1_core_clk", 2295 .ops = &clk_branch_ops, 2296 .flags = CLK_IS_ROOT, 2297 }, 2298 }, 2299 }; 2300 2301 static struct clk_branch ce1_h_clk = { 2302 .halt_reg = 0x2fd4, 2303 .halt_bit = 1, 2304 .clkr = { 2305 .enable_reg = 0x2720, 2306 .enable_mask = BIT(4), 2307 .hw.init = &(struct clk_init_data){ 2308 .name = "ce1_h_clk", 2309 .ops = &clk_branch_ops, 2310 .flags = CLK_IS_ROOT, 2311 }, 2312 }, 2313 }; 2314 2315 static struct clk_branch dma_bam_h_clk = { 2316 .hwcg_reg = 0x25c0, 2317 .hwcg_bit = 6, 2318 .halt_reg = 0x2fc8, 2319 .halt_bit = 12, 2320 .clkr = { 2321 .enable_reg = 0x25c0, 2322 .enable_mask = BIT(4), 2323 .hw.init = &(struct clk_init_data){ 2324 .name = "dma_bam_h_clk", 2325 .ops = &clk_branch_ops, 2326 .flags = CLK_IS_ROOT, 2327 }, 2328 }, 2329 }; 2330 2331 static struct clk_branch gsbi1_h_clk = { 2332 .hwcg_reg = 0x29c0, 2333 .hwcg_bit = 6, 2334 .halt_reg = 0x2fcc, 2335 .halt_bit = 11, 2336 .clkr = { 2337 .enable_reg = 0x29c0, 2338 .enable_mask = BIT(4), 2339 .hw.init = &(struct clk_init_data){ 2340 .name = "gsbi1_h_clk", 2341 .ops = &clk_branch_ops, 2342 .flags = CLK_IS_ROOT, 2343 }, 2344 }, 2345 }; 2346 2347 static struct clk_branch gsbi2_h_clk = { 2348 .hwcg_reg = 0x29e0, 2349 .hwcg_bit = 6, 2350 .halt_reg = 0x2fcc, 2351 .halt_bit = 7, 2352 .clkr = { 2353 .enable_reg = 0x29e0, 2354 .enable_mask = BIT(4), 2355 .hw.init = &(struct clk_init_data){ 2356 .name = "gsbi2_h_clk", 2357 .ops = &clk_branch_ops, 2358 .flags = CLK_IS_ROOT, 2359 }, 2360 }, 2361 }; 2362 2363 static struct clk_branch gsbi3_h_clk = { 2364 .hwcg_reg = 0x2a00, 2365 .hwcg_bit = 6, 2366 .halt_reg = 0x2fcc, 2367 .halt_bit = 3, 2368 .clkr = { 2369 .enable_reg = 0x2a00, 2370 .enable_mask = BIT(4), 2371 .hw.init = &(struct clk_init_data){ 2372 .name = "gsbi3_h_clk", 2373 .ops = &clk_branch_ops, 2374 .flags = CLK_IS_ROOT, 2375 }, 2376 }, 2377 }; 2378 2379 static struct clk_branch gsbi4_h_clk = { 2380 .hwcg_reg = 0x2a20, 2381 .hwcg_bit = 6, 2382 .halt_reg = 0x2fd0, 2383 .halt_bit = 27, 2384 .clkr = { 2385 .enable_reg = 0x2a20, 2386 .enable_mask = BIT(4), 2387 .hw.init = &(struct clk_init_data){ 2388 .name = "gsbi4_h_clk", 2389 .ops = &clk_branch_ops, 2390 .flags = CLK_IS_ROOT, 2391 }, 2392 }, 2393 }; 2394 2395 static struct clk_branch gsbi5_h_clk = { 2396 .hwcg_reg = 0x2a40, 2397 .hwcg_bit = 6, 2398 .halt_reg = 0x2fd0, 2399 .halt_bit = 23, 2400 .clkr = { 2401 .enable_reg = 0x2a40, 2402 .enable_mask = BIT(4), 2403 .hw.init = &(struct clk_init_data){ 2404 .name = "gsbi5_h_clk", 2405 .ops = &clk_branch_ops, 2406 .flags = CLK_IS_ROOT, 2407 }, 2408 }, 2409 }; 2410 2411 static struct clk_branch gsbi6_h_clk = { 2412 .hwcg_reg = 0x2a60, 2413 .hwcg_bit = 6, 2414 .halt_reg = 0x2fd0, 2415 .halt_bit = 19, 2416 .clkr = { 2417 .enable_reg = 0x2a60, 2418 .enable_mask = BIT(4), 2419 .hw.init = &(struct clk_init_data){ 2420 .name = "gsbi6_h_clk", 2421 .ops = &clk_branch_ops, 2422 .flags = CLK_IS_ROOT, 2423 }, 2424 }, 2425 }; 2426 2427 static struct clk_branch gsbi7_h_clk = { 2428 .hwcg_reg = 0x2a80, 2429 .hwcg_bit = 6, 2430 .halt_reg = 0x2fd0, 2431 .halt_bit = 15, 2432 .clkr = { 2433 .enable_reg = 0x2a80, 2434 .enable_mask = BIT(4), 2435 .hw.init = &(struct clk_init_data){ 2436 .name = "gsbi7_h_clk", 2437 .ops = &clk_branch_ops, 2438 .flags = CLK_IS_ROOT, 2439 }, 2440 }, 2441 }; 2442 2443 static struct clk_branch gsbi8_h_clk = { 2444 .hwcg_reg = 0x2aa0, 2445 .hwcg_bit = 6, 2446 .halt_reg = 0x2fd0, 2447 .halt_bit = 11, 2448 .clkr = { 2449 .enable_reg = 0x2aa0, 2450 .enable_mask = BIT(4), 2451 .hw.init = &(struct clk_init_data){ 2452 .name = "gsbi8_h_clk", 2453 .ops = &clk_branch_ops, 2454 .flags = CLK_IS_ROOT, 2455 }, 2456 }, 2457 }; 2458 2459 static struct clk_branch gsbi9_h_clk = { 2460 .hwcg_reg = 0x2ac0, 2461 .hwcg_bit = 6, 2462 .halt_reg = 0x2fd0, 2463 .halt_bit = 7, 2464 .clkr = { 2465 .enable_reg = 0x2ac0, 2466 .enable_mask = BIT(4), 2467 .hw.init = &(struct clk_init_data){ 2468 .name = "gsbi9_h_clk", 2469 .ops = &clk_branch_ops, 2470 .flags = CLK_IS_ROOT, 2471 }, 2472 }, 2473 }; 2474 2475 static struct clk_branch gsbi10_h_clk = { 2476 .hwcg_reg = 0x2ae0, 2477 .hwcg_bit = 6, 2478 .halt_reg = 0x2fd0, 2479 .halt_bit = 3, 2480 .clkr = { 2481 .enable_reg = 0x2ae0, 2482 .enable_mask = BIT(4), 2483 .hw.init = &(struct clk_init_data){ 2484 .name = "gsbi10_h_clk", 2485 .ops = &clk_branch_ops, 2486 .flags = CLK_IS_ROOT, 2487 }, 2488 }, 2489 }; 2490 2491 static struct clk_branch gsbi11_h_clk = { 2492 .hwcg_reg = 0x2b00, 2493 .hwcg_bit = 6, 2494 .halt_reg = 0x2fd4, 2495 .halt_bit = 18, 2496 .clkr = { 2497 .enable_reg = 0x2b00, 2498 .enable_mask = BIT(4), 2499 .hw.init = &(struct clk_init_data){ 2500 .name = "gsbi11_h_clk", 2501 .ops = &clk_branch_ops, 2502 .flags = CLK_IS_ROOT, 2503 }, 2504 }, 2505 }; 2506 2507 static struct clk_branch gsbi12_h_clk = { 2508 .hwcg_reg = 0x2b20, 2509 .hwcg_bit = 6, 2510 .halt_reg = 0x2fd4, 2511 .halt_bit = 14, 2512 .clkr = { 2513 .enable_reg = 0x2b20, 2514 .enable_mask = BIT(4), 2515 .hw.init = &(struct clk_init_data){ 2516 .name = "gsbi12_h_clk", 2517 .ops = &clk_branch_ops, 2518 .flags = CLK_IS_ROOT, 2519 }, 2520 }, 2521 }; 2522 2523 static struct clk_branch tsif_h_clk = { 2524 .hwcg_reg = 0x2700, 2525 .hwcg_bit = 6, 2526 .halt_reg = 0x2fd4, 2527 .halt_bit = 7, 2528 .clkr = { 2529 .enable_reg = 0x2700, 2530 .enable_mask = BIT(4), 2531 .hw.init = &(struct clk_init_data){ 2532 .name = "tsif_h_clk", 2533 .ops = &clk_branch_ops, 2534 .flags = CLK_IS_ROOT, 2535 }, 2536 }, 2537 }; 2538 2539 static struct clk_branch usb_fs1_h_clk = { 2540 .halt_reg = 0x2fcc, 2541 .halt_bit = 17, 2542 .clkr = { 2543 .enable_reg = 0x2960, 2544 .enable_mask = BIT(4), 2545 .hw.init = &(struct clk_init_data){ 2546 .name = "usb_fs1_h_clk", 2547 .ops = &clk_branch_ops, 2548 .flags = CLK_IS_ROOT, 2549 }, 2550 }, 2551 }; 2552 2553 static struct clk_branch usb_fs2_h_clk = { 2554 .halt_reg = 0x2fcc, 2555 .halt_bit = 14, 2556 .clkr = { 2557 .enable_reg = 0x2980, 2558 .enable_mask = BIT(4), 2559 .hw.init = &(struct clk_init_data){ 2560 .name = "usb_fs2_h_clk", 2561 .ops = &clk_branch_ops, 2562 .flags = CLK_IS_ROOT, 2563 }, 2564 }, 2565 }; 2566 2567 static struct clk_branch usb_hs1_h_clk = { 2568 .hwcg_reg = 0x2900, 2569 .hwcg_bit = 6, 2570 .halt_reg = 0x2fc8, 2571 .halt_bit = 1, 2572 .clkr = { 2573 .enable_reg = 0x2900, 2574 .enable_mask = BIT(4), 2575 .hw.init = &(struct clk_init_data){ 2576 .name = "usb_hs1_h_clk", 2577 .ops = &clk_branch_ops, 2578 .flags = CLK_IS_ROOT, 2579 }, 2580 }, 2581 }; 2582 2583 static struct clk_branch usb_hs3_h_clk = { 2584 .halt_reg = 0x2fc8, 2585 .halt_bit = 31, 2586 .clkr = { 2587 .enable_reg = 0x3700, 2588 .enable_mask = BIT(4), 2589 .hw.init = &(struct clk_init_data){ 2590 .name = "usb_hs3_h_clk", 2591 .ops = &clk_branch_ops, 2592 .flags = CLK_IS_ROOT, 2593 }, 2594 }, 2595 }; 2596 2597 static struct clk_branch usb_hs4_h_clk = { 2598 .halt_reg = 0x2fc8, 2599 .halt_bit = 7, 2600 .clkr = { 2601 .enable_reg = 0x3720, 2602 .enable_mask = BIT(4), 2603 .hw.init = &(struct clk_init_data){ 2604 .name = "usb_hs4_h_clk", 2605 .ops = &clk_branch_ops, 2606 .flags = CLK_IS_ROOT, 2607 }, 2608 }, 2609 }; 2610 2611 static struct clk_branch usb_hsic_h_clk = { 2612 .halt_reg = 0x2fcc, 2613 .halt_bit = 28, 2614 .clkr = { 2615 .enable_reg = 0x2920, 2616 .enable_mask = BIT(4), 2617 .hw.init = &(struct clk_init_data){ 2618 .name = "usb_hsic_h_clk", 2619 .ops = &clk_branch_ops, 2620 .flags = CLK_IS_ROOT, 2621 }, 2622 }, 2623 }; 2624 2625 static struct clk_branch sdc1_h_clk = { 2626 .hwcg_reg = 0x2820, 2627 .hwcg_bit = 6, 2628 .halt_reg = 0x2fc8, 2629 .halt_bit = 11, 2630 .clkr = { 2631 .enable_reg = 0x2820, 2632 .enable_mask = BIT(4), 2633 .hw.init = &(struct clk_init_data){ 2634 .name = "sdc1_h_clk", 2635 .ops = &clk_branch_ops, 2636 .flags = CLK_IS_ROOT, 2637 }, 2638 }, 2639 }; 2640 2641 static struct clk_branch sdc2_h_clk = { 2642 .hwcg_reg = 0x2840, 2643 .hwcg_bit = 6, 2644 .halt_reg = 0x2fc8, 2645 .halt_bit = 10, 2646 .clkr = { 2647 .enable_reg = 0x2840, 2648 .enable_mask = BIT(4), 2649 .hw.init = &(struct clk_init_data){ 2650 .name = "sdc2_h_clk", 2651 .ops = &clk_branch_ops, 2652 .flags = CLK_IS_ROOT, 2653 }, 2654 }, 2655 }; 2656 2657 static struct clk_branch sdc3_h_clk = { 2658 .hwcg_reg = 0x2860, 2659 .hwcg_bit = 6, 2660 .halt_reg = 0x2fc8, 2661 .halt_bit = 9, 2662 .clkr = { 2663 .enable_reg = 0x2860, 2664 .enable_mask = BIT(4), 2665 .hw.init = &(struct clk_init_data){ 2666 .name = "sdc3_h_clk", 2667 .ops = &clk_branch_ops, 2668 .flags = CLK_IS_ROOT, 2669 }, 2670 }, 2671 }; 2672 2673 static struct clk_branch sdc4_h_clk = { 2674 .hwcg_reg = 0x2880, 2675 .hwcg_bit = 6, 2676 .halt_reg = 0x2fc8, 2677 .halt_bit = 8, 2678 .clkr = { 2679 .enable_reg = 0x2880, 2680 .enable_mask = BIT(4), 2681 .hw.init = &(struct clk_init_data){ 2682 .name = "sdc4_h_clk", 2683 .ops = &clk_branch_ops, 2684 .flags = CLK_IS_ROOT, 2685 }, 2686 }, 2687 }; 2688 2689 static struct clk_branch sdc5_h_clk = { 2690 .hwcg_reg = 0x28a0, 2691 .hwcg_bit = 6, 2692 .halt_reg = 0x2fc8, 2693 .halt_bit = 7, 2694 .clkr = { 2695 .enable_reg = 0x28a0, 2696 .enable_mask = BIT(4), 2697 .hw.init = &(struct clk_init_data){ 2698 .name = "sdc5_h_clk", 2699 .ops = &clk_branch_ops, 2700 .flags = CLK_IS_ROOT, 2701 }, 2702 }, 2703 }; 2704 2705 static struct clk_branch adm0_clk = { 2706 .halt_reg = 0x2fdc, 2707 .halt_check = BRANCH_HALT_VOTED, 2708 .halt_bit = 14, 2709 .clkr = { 2710 .enable_reg = 0x3080, 2711 .enable_mask = BIT(2), 2712 .hw.init = &(struct clk_init_data){ 2713 .name = "adm0_clk", 2714 .ops = &clk_branch_ops, 2715 .flags = CLK_IS_ROOT, 2716 }, 2717 }, 2718 }; 2719 2720 static struct clk_branch adm0_pbus_clk = { 2721 .hwcg_reg = 0x2208, 2722 .hwcg_bit = 6, 2723 .halt_reg = 0x2fdc, 2724 .halt_check = BRANCH_HALT_VOTED, 2725 .halt_bit = 13, 2726 .clkr = { 2727 .enable_reg = 0x3080, 2728 .enable_mask = BIT(3), 2729 .hw.init = &(struct clk_init_data){ 2730 .name = "adm0_pbus_clk", 2731 .ops = &clk_branch_ops, 2732 .flags = CLK_IS_ROOT, 2733 }, 2734 }, 2735 }; 2736 2737 static struct freq_tbl clk_tbl_ce3[] = { 2738 { 48000000, P_PLL8, 8 }, 2739 { 100000000, P_PLL3, 12 }, 2740 { 120000000, P_PLL3, 10 }, 2741 { } 2742 }; 2743 2744 static struct clk_rcg ce3_src = { 2745 .ns_reg = 0x36c0, 2746 .p = { 2747 .pre_div_shift = 3, 2748 .pre_div_width = 4, 2749 }, 2750 .s = { 2751 .src_sel_shift = 0, 2752 .parent_map = gcc_pxo_pll8_pll3_map, 2753 }, 2754 .freq_tbl = clk_tbl_ce3, 2755 .clkr = { 2756 .enable_reg = 0x2c08, 2757 .enable_mask = BIT(7), 2758 .hw.init = &(struct clk_init_data){ 2759 .name = "ce3_src", 2760 .parent_names = gcc_pxo_pll8_pll3, 2761 .num_parents = 3, 2762 .ops = &clk_rcg_ops, 2763 .flags = CLK_SET_RATE_GATE, 2764 }, 2765 }, 2766 }; 2767 2768 static struct clk_branch ce3_core_clk = { 2769 .halt_reg = 0x2fdc, 2770 .halt_bit = 5, 2771 .clkr = { 2772 .enable_reg = 0x36c4, 2773 .enable_mask = BIT(4), 2774 .hw.init = &(struct clk_init_data){ 2775 .name = "ce3_core_clk", 2776 .parent_names = (const char *[]){ "ce3_src" }, 2777 .num_parents = 1, 2778 .ops = &clk_branch_ops, 2779 .flags = CLK_SET_RATE_PARENT, 2780 }, 2781 }, 2782 }; 2783 2784 static struct clk_branch ce3_h_clk = { 2785 .halt_reg = 0x2fc4, 2786 .halt_bit = 16, 2787 .clkr = { 2788 .enable_reg = 0x36c4, 2789 .enable_mask = BIT(4), 2790 .hw.init = &(struct clk_init_data){ 2791 .name = "ce3_h_clk", 2792 .parent_names = (const char *[]){ "ce3_src" }, 2793 .num_parents = 1, 2794 .ops = &clk_branch_ops, 2795 .flags = CLK_SET_RATE_PARENT, 2796 }, 2797 }, 2798 }; 2799 2800 static const struct freq_tbl clk_tbl_sata_ref[] = { 2801 { 48000000, P_PLL8, 8, 0, 0 }, 2802 { 100000000, P_PLL3, 12, 0, 0 }, 2803 { } 2804 }; 2805 2806 static struct clk_rcg sata_clk_src = { 2807 .ns_reg = 0x2c08, 2808 .p = { 2809 .pre_div_shift = 3, 2810 .pre_div_width = 4, 2811 }, 2812 .s = { 2813 .src_sel_shift = 0, 2814 .parent_map = gcc_pxo_pll8_pll3_map, 2815 }, 2816 .freq_tbl = clk_tbl_sata_ref, 2817 .clkr = { 2818 .enable_reg = 0x2c08, 2819 .enable_mask = BIT(7), 2820 .hw.init = &(struct clk_init_data){ 2821 .name = "sata_clk_src", 2822 .parent_names = gcc_pxo_pll8_pll3, 2823 .num_parents = 3, 2824 .ops = &clk_rcg_ops, 2825 .flags = CLK_SET_RATE_GATE, 2826 }, 2827 }, 2828 }; 2829 2830 static struct clk_branch sata_rxoob_clk = { 2831 .halt_reg = 0x2fdc, 2832 .halt_bit = 26, 2833 .clkr = { 2834 .enable_reg = 0x2c0c, 2835 .enable_mask = BIT(4), 2836 .hw.init = &(struct clk_init_data){ 2837 .name = "sata_rxoob_clk", 2838 .parent_names = (const char *[]){ "sata_clk_src" }, 2839 .num_parents = 1, 2840 .ops = &clk_branch_ops, 2841 .flags = CLK_SET_RATE_PARENT, 2842 }, 2843 }, 2844 }; 2845 2846 static struct clk_branch sata_pmalive_clk = { 2847 .halt_reg = 0x2fdc, 2848 .halt_bit = 25, 2849 .clkr = { 2850 .enable_reg = 0x2c10, 2851 .enable_mask = BIT(4), 2852 .hw.init = &(struct clk_init_data){ 2853 .name = "sata_pmalive_clk", 2854 .parent_names = (const char *[]){ "sata_clk_src" }, 2855 .num_parents = 1, 2856 .ops = &clk_branch_ops, 2857 .flags = CLK_SET_RATE_PARENT, 2858 }, 2859 }, 2860 }; 2861 2862 static struct clk_branch sata_phy_ref_clk = { 2863 .halt_reg = 0x2fdc, 2864 .halt_bit = 24, 2865 .clkr = { 2866 .enable_reg = 0x2c14, 2867 .enable_mask = BIT(4), 2868 .hw.init = &(struct clk_init_data){ 2869 .name = "sata_phy_ref_clk", 2870 .parent_names = (const char *[]){ "pxo" }, 2871 .num_parents = 1, 2872 .ops = &clk_branch_ops, 2873 }, 2874 }, 2875 }; 2876 2877 static struct clk_branch sata_a_clk = { 2878 .halt_reg = 0x2fc0, 2879 .halt_bit = 12, 2880 .clkr = { 2881 .enable_reg = 0x2c20, 2882 .enable_mask = BIT(4), 2883 .hw.init = &(struct clk_init_data){ 2884 .name = "sata_a_clk", 2885 .ops = &clk_branch_ops, 2886 .flags = CLK_IS_ROOT, 2887 }, 2888 }, 2889 }; 2890 2891 static struct clk_branch sata_h_clk = { 2892 .halt_reg = 0x2fdc, 2893 .halt_bit = 27, 2894 .clkr = { 2895 .enable_reg = 0x2c00, 2896 .enable_mask = BIT(4), 2897 .hw.init = &(struct clk_init_data){ 2898 .name = "sata_h_clk", 2899 .ops = &clk_branch_ops, 2900 .flags = CLK_IS_ROOT, 2901 }, 2902 }, 2903 }; 2904 2905 static struct clk_branch sfab_sata_s_h_clk = { 2906 .halt_reg = 0x2fc4, 2907 .halt_bit = 14, 2908 .clkr = { 2909 .enable_reg = 0x2480, 2910 .enable_mask = BIT(4), 2911 .hw.init = &(struct clk_init_data){ 2912 .name = "sfab_sata_s_h_clk", 2913 .ops = &clk_branch_ops, 2914 .flags = CLK_IS_ROOT, 2915 }, 2916 }, 2917 }; 2918 2919 static struct clk_branch sata_phy_cfg_clk = { 2920 .halt_reg = 0x2fcc, 2921 .halt_bit = 12, 2922 .clkr = { 2923 .enable_reg = 0x2c40, 2924 .enable_mask = BIT(4), 2925 .hw.init = &(struct clk_init_data){ 2926 .name = "sata_phy_cfg_clk", 2927 .ops = &clk_branch_ops, 2928 .flags = CLK_IS_ROOT, 2929 }, 2930 }, 2931 }; 2932 2933 static struct clk_branch pcie_phy_ref_clk = { 2934 .halt_reg = 0x2fdc, 2935 .halt_bit = 29, 2936 .clkr = { 2937 .enable_reg = 0x22d0, 2938 .enable_mask = BIT(4), 2939 .hw.init = &(struct clk_init_data){ 2940 .name = "pcie_phy_ref_clk", 2941 .ops = &clk_branch_ops, 2942 .flags = CLK_IS_ROOT, 2943 }, 2944 }, 2945 }; 2946 2947 static struct clk_branch pcie_h_clk = { 2948 .halt_reg = 0x2fd4, 2949 .halt_bit = 8, 2950 .clkr = { 2951 .enable_reg = 0x22cc, 2952 .enable_mask = BIT(4), 2953 .hw.init = &(struct clk_init_data){ 2954 .name = "pcie_h_clk", 2955 .ops = &clk_branch_ops, 2956 .flags = CLK_IS_ROOT, 2957 }, 2958 }, 2959 }; 2960 2961 static struct clk_branch pcie_a_clk = { 2962 .halt_reg = 0x2fc0, 2963 .halt_bit = 13, 2964 .clkr = { 2965 .enable_reg = 0x22c0, 2966 .enable_mask = BIT(4), 2967 .hw.init = &(struct clk_init_data){ 2968 .name = "pcie_a_clk", 2969 .ops = &clk_branch_ops, 2970 .flags = CLK_IS_ROOT, 2971 }, 2972 }, 2973 }; 2974 2975 static struct clk_branch pmic_arb0_h_clk = { 2976 .halt_reg = 0x2fd8, 2977 .halt_check = BRANCH_HALT_VOTED, 2978 .halt_bit = 22, 2979 .clkr = { 2980 .enable_reg = 0x3080, 2981 .enable_mask = BIT(8), 2982 .hw.init = &(struct clk_init_data){ 2983 .name = "pmic_arb0_h_clk", 2984 .ops = &clk_branch_ops, 2985 .flags = CLK_IS_ROOT, 2986 }, 2987 }, 2988 }; 2989 2990 static struct clk_branch pmic_arb1_h_clk = { 2991 .halt_reg = 0x2fd8, 2992 .halt_check = BRANCH_HALT_VOTED, 2993 .halt_bit = 21, 2994 .clkr = { 2995 .enable_reg = 0x3080, 2996 .enable_mask = BIT(9), 2997 .hw.init = &(struct clk_init_data){ 2998 .name = "pmic_arb1_h_clk", 2999 .ops = &clk_branch_ops, 3000 .flags = CLK_IS_ROOT, 3001 }, 3002 }, 3003 }; 3004 3005 static struct clk_branch pmic_ssbi2_clk = { 3006 .halt_reg = 0x2fd8, 3007 .halt_check = BRANCH_HALT_VOTED, 3008 .halt_bit = 23, 3009 .clkr = { 3010 .enable_reg = 0x3080, 3011 .enable_mask = BIT(7), 3012 .hw.init = &(struct clk_init_data){ 3013 .name = "pmic_ssbi2_clk", 3014 .ops = &clk_branch_ops, 3015 .flags = CLK_IS_ROOT, 3016 }, 3017 }, 3018 }; 3019 3020 static struct clk_branch rpm_msg_ram_h_clk = { 3021 .hwcg_reg = 0x27e0, 3022 .hwcg_bit = 6, 3023 .halt_reg = 0x2fd8, 3024 .halt_check = BRANCH_HALT_VOTED, 3025 .halt_bit = 12, 3026 .clkr = { 3027 .enable_reg = 0x3080, 3028 .enable_mask = BIT(6), 3029 .hw.init = &(struct clk_init_data){ 3030 .name = "rpm_msg_ram_h_clk", 3031 .ops = &clk_branch_ops, 3032 .flags = CLK_IS_ROOT, 3033 }, 3034 }, 3035 }; 3036 3037 static struct clk_regmap *gcc_msm8960_clks[] = { 3038 [PLL3] = &pll3.clkr, 3039 [PLL4_VOTE] = &pll4_vote, 3040 [PLL8] = &pll8.clkr, 3041 [PLL8_VOTE] = &pll8_vote, 3042 [PLL14] = &pll14.clkr, 3043 [PLL14_VOTE] = &pll14_vote, 3044 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 3045 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 3046 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 3047 [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 3048 [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr, 3049 [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr, 3050 [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 3051 [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 3052 [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 3053 [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 3054 [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 3055 [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 3056 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 3057 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 3058 [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr, 3059 [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr, 3060 [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr, 3061 [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr, 3062 [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr, 3063 [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr, 3064 [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr, 3065 [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr, 3066 [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr, 3067 [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr, 3068 [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 3069 [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 3070 [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 3071 [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 3072 [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr, 3073 [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr, 3074 [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 3075 [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 3076 [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 3077 [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 3078 [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 3079 [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 3080 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 3081 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 3082 [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr, 3083 [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr, 3084 [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr, 3085 [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr, 3086 [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr, 3087 [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr, 3088 [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr, 3089 [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr, 3090 [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr, 3091 [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr, 3092 [GP0_SRC] = &gp0_src.clkr, 3093 [GP0_CLK] = &gp0_clk.clkr, 3094 [GP1_SRC] = &gp1_src.clkr, 3095 [GP1_CLK] = &gp1_clk.clkr, 3096 [GP2_SRC] = &gp2_src.clkr, 3097 [GP2_CLK] = &gp2_clk.clkr, 3098 [PMEM_A_CLK] = &pmem_clk.clkr, 3099 [PRNG_SRC] = &prng_src.clkr, 3100 [PRNG_CLK] = &prng_clk.clkr, 3101 [SDC1_SRC] = &sdc1_src.clkr, 3102 [SDC1_CLK] = &sdc1_clk.clkr, 3103 [SDC2_SRC] = &sdc2_src.clkr, 3104 [SDC2_CLK] = &sdc2_clk.clkr, 3105 [SDC3_SRC] = &sdc3_src.clkr, 3106 [SDC3_CLK] = &sdc3_clk.clkr, 3107 [SDC4_SRC] = &sdc4_src.clkr, 3108 [SDC4_CLK] = &sdc4_clk.clkr, 3109 [SDC5_SRC] = &sdc5_src.clkr, 3110 [SDC5_CLK] = &sdc5_clk.clkr, 3111 [TSIF_REF_SRC] = &tsif_ref_src.clkr, 3112 [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 3113 [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr, 3114 [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 3115 [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr, 3116 [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr, 3117 [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr, 3118 [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr, 3119 [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr, 3120 [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr, 3121 [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr, 3122 [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr, 3123 [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr, 3124 [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr, 3125 [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr, 3126 [CE1_CORE_CLK] = &ce1_core_clk.clkr, 3127 [CE1_H_CLK] = &ce1_h_clk.clkr, 3128 [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr, 3129 [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 3130 [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 3131 [GSBI3_H_CLK] = &gsbi3_h_clk.clkr, 3132 [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 3133 [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 3134 [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 3135 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 3136 [GSBI8_H_CLK] = &gsbi8_h_clk.clkr, 3137 [GSBI9_H_CLK] = &gsbi9_h_clk.clkr, 3138 [GSBI10_H_CLK] = &gsbi10_h_clk.clkr, 3139 [GSBI11_H_CLK] = &gsbi11_h_clk.clkr, 3140 [GSBI12_H_CLK] = &gsbi12_h_clk.clkr, 3141 [TSIF_H_CLK] = &tsif_h_clk.clkr, 3142 [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 3143 [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr, 3144 [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 3145 [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr, 3146 [SDC1_H_CLK] = &sdc1_h_clk.clkr, 3147 [SDC2_H_CLK] = &sdc2_h_clk.clkr, 3148 [SDC3_H_CLK] = &sdc3_h_clk.clkr, 3149 [SDC4_H_CLK] = &sdc4_h_clk.clkr, 3150 [SDC5_H_CLK] = &sdc5_h_clk.clkr, 3151 [ADM0_CLK] = &adm0_clk.clkr, 3152 [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 3153 [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 3154 [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 3155 [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 3156 [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 3157 }; 3158 3159 static const struct qcom_reset_map gcc_msm8960_resets[] = { 3160 [SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 }, 3161 [SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 }, 3162 [QDSS_STM_RESET] = { 0x2060, 6 }, 3163 [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 3164 [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 3165 [AFAB_SMPSS_M0_RESET] = { 0x20b8 }, 3166 [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 }, 3167 [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7}, 3168 [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 3169 [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 3170 [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 }, 3171 [ADM0_C2_RESET] = { 0x220c, 4}, 3172 [ADM0_C1_RESET] = { 0x220c, 3}, 3173 [ADM0_C0_RESET] = { 0x220c, 2}, 3174 [ADM0_PBUS_RESET] = { 0x220c, 1 }, 3175 [ADM0_RESET] = { 0x220c }, 3176 [QDSS_CLKS_SW_RESET] = { 0x2260, 5 }, 3177 [QDSS_POR_RESET] = { 0x2260, 4 }, 3178 [QDSS_TSCTR_RESET] = { 0x2260, 3 }, 3179 [QDSS_HRESET_RESET] = { 0x2260, 2 }, 3180 [QDSS_AXI_RESET] = { 0x2260, 1 }, 3181 [QDSS_DBG_RESET] = { 0x2260 }, 3182 [PCIE_A_RESET] = { 0x22c0, 7 }, 3183 [PCIE_AUX_RESET] = { 0x22c8, 7 }, 3184 [PCIE_H_RESET] = { 0x22d0, 7 }, 3185 [SFAB_PCIE_M_RESET] = { 0x22d4, 1 }, 3186 [SFAB_PCIE_S_RESET] = { 0x22d4 }, 3187 [SFAB_MSS_M_RESET] = { 0x2340, 7 }, 3188 [SFAB_USB3_M_RESET] = { 0x2360, 7 }, 3189 [SFAB_RIVA_M_RESET] = { 0x2380, 7 }, 3190 [SFAB_LPASS_RESET] = { 0x23a0, 7 }, 3191 [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 3192 [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 3193 [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 3194 [SFAB_SATA_S_RESET] = { 0x2480, 7 }, 3195 [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 3196 [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 3197 [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 3198 [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 3199 [DFAB_ARB0_RESET] = { 0x2560, 7 }, 3200 [DFAB_ARB1_RESET] = { 0x2564, 7 }, 3201 [PPSS_PROC_RESET] = { 0x2594, 1 }, 3202 [PPSS_RESET] = { 0x2594}, 3203 [DMA_BAM_RESET] = { 0x25c0, 7 }, 3204 [SPS_TIC_H_RESET] = { 0x2600, 7 }, 3205 [SLIMBUS_H_RESET] = { 0x2620, 7 }, 3206 [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 3207 [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 3208 [TSIF_H_RESET] = { 0x2700, 7 }, 3209 [CE1_H_RESET] = { 0x2720, 7 }, 3210 [CE1_CORE_RESET] = { 0x2724, 7 }, 3211 [CE1_SLEEP_RESET] = { 0x2728, 7 }, 3212 [CE2_H_RESET] = { 0x2740, 7 }, 3213 [CE2_CORE_RESET] = { 0x2744, 7 }, 3214 [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 3215 [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 3216 [RPM_PROC_RESET] = { 0x27c0, 7 }, 3217 [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 3218 [SDC1_RESET] = { 0x2830 }, 3219 [SDC2_RESET] = { 0x2850 }, 3220 [SDC3_RESET] = { 0x2870 }, 3221 [SDC4_RESET] = { 0x2890 }, 3222 [SDC5_RESET] = { 0x28b0 }, 3223 [DFAB_A2_RESET] = { 0x28c0, 7 }, 3224 [USB_HS1_RESET] = { 0x2910 }, 3225 [USB_HSIC_RESET] = { 0x2934 }, 3226 [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 3227 [USB_FS1_RESET] = { 0x2974 }, 3228 [USB_FS2_XCVR_RESET] = { 0x2994, 1 }, 3229 [USB_FS2_RESET] = { 0x2994 }, 3230 [GSBI1_RESET] = { 0x29dc }, 3231 [GSBI2_RESET] = { 0x29fc }, 3232 [GSBI3_RESET] = { 0x2a1c }, 3233 [GSBI4_RESET] = { 0x2a3c }, 3234 [GSBI5_RESET] = { 0x2a5c }, 3235 [GSBI6_RESET] = { 0x2a7c }, 3236 [GSBI7_RESET] = { 0x2a9c }, 3237 [GSBI8_RESET] = { 0x2abc }, 3238 [GSBI9_RESET] = { 0x2adc }, 3239 [GSBI10_RESET] = { 0x2afc }, 3240 [GSBI11_RESET] = { 0x2b1c }, 3241 [GSBI12_RESET] = { 0x2b3c }, 3242 [SPDM_RESET] = { 0x2b6c }, 3243 [TLMM_H_RESET] = { 0x2ba0, 7 }, 3244 [SFAB_MSS_S_RESET] = { 0x2c00, 7 }, 3245 [MSS_SLP_RESET] = { 0x2c60, 7 }, 3246 [MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 }, 3247 [MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 }, 3248 [MSS_RESET] = { 0x2c64 }, 3249 [SATA_H_RESET] = { 0x2c80, 7 }, 3250 [SATA_RXOOB_RESE] = { 0x2c8c, 7 }, 3251 [SATA_PMALIVE_RESET] = { 0x2c90, 7 }, 3252 [SATA_SFAB_M_RESET] = { 0x2c98, 7 }, 3253 [TSSC_RESET] = { 0x2ca0, 7 }, 3254 [PDM_RESET] = { 0x2cc0, 12 }, 3255 [MPM_H_RESET] = { 0x2da0, 7 }, 3256 [MPM_RESET] = { 0x2da4 }, 3257 [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 3258 [PRNG_RESET] = { 0x2e80, 12 }, 3259 [RIVA_RESET] = { 0x35e0 }, 3260 }; 3261 3262 static struct clk_regmap *gcc_apq8064_clks[] = { 3263 [PLL3] = &pll3.clkr, 3264 [PLL4_VOTE] = &pll4_vote, 3265 [PLL8] = &pll8.clkr, 3266 [PLL8_VOTE] = &pll8_vote, 3267 [PLL14] = &pll14.clkr, 3268 [PLL14_VOTE] = &pll14_vote, 3269 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 3270 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 3271 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, 3272 [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr, 3273 [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr, 3274 [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr, 3275 [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr, 3276 [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr, 3277 [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr, 3278 [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr, 3279 [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr, 3280 [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr, 3281 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr, 3282 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr, 3283 [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr, 3284 [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr, 3285 [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr, 3286 [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr, 3287 [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr, 3288 [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr, 3289 [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr, 3290 [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr, 3291 [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr, 3292 [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr, 3293 [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr, 3294 [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr, 3295 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr, 3296 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr, 3297 [GP0_SRC] = &gp0_src.clkr, 3298 [GP0_CLK] = &gp0_clk.clkr, 3299 [GP1_SRC] = &gp1_src.clkr, 3300 [GP1_CLK] = &gp1_clk.clkr, 3301 [GP2_SRC] = &gp2_src.clkr, 3302 [GP2_CLK] = &gp2_clk.clkr, 3303 [PMEM_A_CLK] = &pmem_clk.clkr, 3304 [PRNG_SRC] = &prng_src.clkr, 3305 [PRNG_CLK] = &prng_clk.clkr, 3306 [SDC1_SRC] = &sdc1_src.clkr, 3307 [SDC1_CLK] = &sdc1_clk.clkr, 3308 [SDC2_SRC] = &sdc2_src.clkr, 3309 [SDC2_CLK] = &sdc2_clk.clkr, 3310 [SDC3_SRC] = &sdc3_src.clkr, 3311 [SDC3_CLK] = &sdc3_clk.clkr, 3312 [SDC4_SRC] = &sdc4_src.clkr, 3313 [SDC4_CLK] = &sdc4_clk.clkr, 3314 [TSIF_REF_SRC] = &tsif_ref_src.clkr, 3315 [TSIF_REF_CLK] = &tsif_ref_clk.clkr, 3316 [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr, 3317 [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr, 3318 [USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr, 3319 [USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr, 3320 [USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr, 3321 [USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr, 3322 [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr, 3323 [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr, 3324 [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr, 3325 [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr, 3326 [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr, 3327 [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr, 3328 [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr, 3329 [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr, 3330 [SATA_H_CLK] = &sata_h_clk.clkr, 3331 [SATA_CLK_SRC] = &sata_clk_src.clkr, 3332 [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr, 3333 [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr, 3334 [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr, 3335 [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr, 3336 [SATA_A_CLK] = &sata_a_clk.clkr, 3337 [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr, 3338 [CE3_SRC] = &ce3_src.clkr, 3339 [CE3_CORE_CLK] = &ce3_core_clk.clkr, 3340 [CE3_H_CLK] = &ce3_h_clk.clkr, 3341 [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr, 3342 [GSBI1_H_CLK] = &gsbi1_h_clk.clkr, 3343 [GSBI2_H_CLK] = &gsbi2_h_clk.clkr, 3344 [GSBI3_H_CLK] = &gsbi3_h_clk.clkr, 3345 [GSBI4_H_CLK] = &gsbi4_h_clk.clkr, 3346 [GSBI5_H_CLK] = &gsbi5_h_clk.clkr, 3347 [GSBI6_H_CLK] = &gsbi6_h_clk.clkr, 3348 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr, 3349 [TSIF_H_CLK] = &tsif_h_clk.clkr, 3350 [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr, 3351 [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr, 3352 [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr, 3353 [USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr, 3354 [USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr, 3355 [SDC1_H_CLK] = &sdc1_h_clk.clkr, 3356 [SDC2_H_CLK] = &sdc2_h_clk.clkr, 3357 [SDC3_H_CLK] = &sdc3_h_clk.clkr, 3358 [SDC4_H_CLK] = &sdc4_h_clk.clkr, 3359 [ADM0_CLK] = &adm0_clk.clkr, 3360 [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr, 3361 [PCIE_A_CLK] = &pcie_a_clk.clkr, 3362 [PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr, 3363 [PCIE_H_CLK] = &pcie_h_clk.clkr, 3364 [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr, 3365 [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr, 3366 [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr, 3367 [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr, 3368 }; 3369 3370 static const struct qcom_reset_map gcc_apq8064_resets[] = { 3371 [QDSS_STM_RESET] = { 0x2060, 6 }, 3372 [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 }, 3373 [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 }, 3374 [AFAB_SMPSS_M0_RESET] = { 0x20b8 }, 3375 [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 }, 3376 [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7}, 3377 [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 }, 3378 [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 }, 3379 [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 }, 3380 [ADM0_C2_RESET] = { 0x220c, 4}, 3381 [ADM0_C1_RESET] = { 0x220c, 3}, 3382 [ADM0_C0_RESET] = { 0x220c, 2}, 3383 [ADM0_PBUS_RESET] = { 0x220c, 1 }, 3384 [ADM0_RESET] = { 0x220c }, 3385 [QDSS_CLKS_SW_RESET] = { 0x2260, 5 }, 3386 [QDSS_POR_RESET] = { 0x2260, 4 }, 3387 [QDSS_TSCTR_RESET] = { 0x2260, 3 }, 3388 [QDSS_HRESET_RESET] = { 0x2260, 2 }, 3389 [QDSS_AXI_RESET] = { 0x2260, 1 }, 3390 [QDSS_DBG_RESET] = { 0x2260 }, 3391 [SFAB_PCIE_M_RESET] = { 0x22d8, 1 }, 3392 [SFAB_PCIE_S_RESET] = { 0x22d8 }, 3393 [PCIE_EXT_PCI_RESET] = { 0x22dc, 6 }, 3394 [PCIE_PHY_RESET] = { 0x22dc, 5 }, 3395 [PCIE_PCI_RESET] = { 0x22dc, 4 }, 3396 [PCIE_POR_RESET] = { 0x22dc, 3 }, 3397 [PCIE_HCLK_RESET] = { 0x22dc, 2 }, 3398 [PCIE_ACLK_RESET] = { 0x22dc }, 3399 [SFAB_USB3_M_RESET] = { 0x2360, 7 }, 3400 [SFAB_RIVA_M_RESET] = { 0x2380, 7 }, 3401 [SFAB_LPASS_RESET] = { 0x23a0, 7 }, 3402 [SFAB_AFAB_M_RESET] = { 0x23e0, 7 }, 3403 [AFAB_SFAB_M0_RESET] = { 0x2420, 7 }, 3404 [AFAB_SFAB_M1_RESET] = { 0x2424, 7 }, 3405 [SFAB_SATA_S_RESET] = { 0x2480, 7 }, 3406 [SFAB_DFAB_M_RESET] = { 0x2500, 7 }, 3407 [DFAB_SFAB_M_RESET] = { 0x2520, 7 }, 3408 [DFAB_SWAY0_RESET] = { 0x2540, 7 }, 3409 [DFAB_SWAY1_RESET] = { 0x2544, 7 }, 3410 [DFAB_ARB0_RESET] = { 0x2560, 7 }, 3411 [DFAB_ARB1_RESET] = { 0x2564, 7 }, 3412 [PPSS_PROC_RESET] = { 0x2594, 1 }, 3413 [PPSS_RESET] = { 0x2594}, 3414 [DMA_BAM_RESET] = { 0x25c0, 7 }, 3415 [SPS_TIC_H_RESET] = { 0x2600, 7 }, 3416 [SFAB_CFPB_M_RESET] = { 0x2680, 7 }, 3417 [SFAB_CFPB_S_RESET] = { 0x26c0, 7 }, 3418 [TSIF_H_RESET] = { 0x2700, 7 }, 3419 [CE1_H_RESET] = { 0x2720, 7 }, 3420 [CE1_CORE_RESET] = { 0x2724, 7 }, 3421 [CE1_SLEEP_RESET] = { 0x2728, 7 }, 3422 [CE2_H_RESET] = { 0x2740, 7 }, 3423 [CE2_CORE_RESET] = { 0x2744, 7 }, 3424 [SFAB_SFPB_M_RESET] = { 0x2780, 7 }, 3425 [SFAB_SFPB_S_RESET] = { 0x27a0, 7 }, 3426 [RPM_PROC_RESET] = { 0x27c0, 7 }, 3427 [PMIC_SSBI2_RESET] = { 0x280c, 12 }, 3428 [SDC1_RESET] = { 0x2830 }, 3429 [SDC2_RESET] = { 0x2850 }, 3430 [SDC3_RESET] = { 0x2870 }, 3431 [SDC4_RESET] = { 0x2890 }, 3432 [USB_HS1_RESET] = { 0x2910 }, 3433 [USB_HSIC_RESET] = { 0x2934 }, 3434 [USB_FS1_XCVR_RESET] = { 0x2974, 1 }, 3435 [USB_FS1_RESET] = { 0x2974 }, 3436 [GSBI1_RESET] = { 0x29dc }, 3437 [GSBI2_RESET] = { 0x29fc }, 3438 [GSBI3_RESET] = { 0x2a1c }, 3439 [GSBI4_RESET] = { 0x2a3c }, 3440 [GSBI5_RESET] = { 0x2a5c }, 3441 [GSBI6_RESET] = { 0x2a7c }, 3442 [GSBI7_RESET] = { 0x2a9c }, 3443 [SPDM_RESET] = { 0x2b6c }, 3444 [TLMM_H_RESET] = { 0x2ba0, 7 }, 3445 [SATA_SFAB_M_RESET] = { 0x2c18 }, 3446 [SATA_RESET] = { 0x2c1c }, 3447 [GSS_SLP_RESET] = { 0x2c60, 7 }, 3448 [GSS_RESET] = { 0x2c64 }, 3449 [TSSC_RESET] = { 0x2ca0, 7 }, 3450 [PDM_RESET] = { 0x2cc0, 12 }, 3451 [MPM_H_RESET] = { 0x2da0, 7 }, 3452 [MPM_RESET] = { 0x2da4 }, 3453 [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 }, 3454 [PRNG_RESET] = { 0x2e80, 12 }, 3455 [RIVA_RESET] = { 0x35e0 }, 3456 [CE3_H_RESET] = { 0x36c4, 7 }, 3457 [SFAB_CE3_M_RESET] = { 0x36c8, 1 }, 3458 [SFAB_CE3_S_RESET] = { 0x36c8 }, 3459 [CE3_RESET] = { 0x36cc, 7 }, 3460 [CE3_SLEEP_RESET] = { 0x36d0, 7 }, 3461 [USB_HS3_RESET] = { 0x3710 }, 3462 [USB_HS4_RESET] = { 0x3730 }, 3463 }; 3464 3465 static const struct regmap_config gcc_msm8960_regmap_config = { 3466 .reg_bits = 32, 3467 .reg_stride = 4, 3468 .val_bits = 32, 3469 .max_register = 0x3660, 3470 .fast_io = true, 3471 }; 3472 3473 static const struct regmap_config gcc_apq8064_regmap_config = { 3474 .reg_bits = 32, 3475 .reg_stride = 4, 3476 .val_bits = 32, 3477 .max_register = 0x3880, 3478 .fast_io = true, 3479 }; 3480 3481 static const struct qcom_cc_desc gcc_msm8960_desc = { 3482 .config = &gcc_msm8960_regmap_config, 3483 .clks = gcc_msm8960_clks, 3484 .num_clks = ARRAY_SIZE(gcc_msm8960_clks), 3485 .resets = gcc_msm8960_resets, 3486 .num_resets = ARRAY_SIZE(gcc_msm8960_resets), 3487 }; 3488 3489 static const struct qcom_cc_desc gcc_apq8064_desc = { 3490 .config = &gcc_apq8064_regmap_config, 3491 .clks = gcc_apq8064_clks, 3492 .num_clks = ARRAY_SIZE(gcc_apq8064_clks), 3493 .resets = gcc_apq8064_resets, 3494 .num_resets = ARRAY_SIZE(gcc_apq8064_resets), 3495 }; 3496 3497 static const struct of_device_id gcc_msm8960_match_table[] = { 3498 { .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc }, 3499 { .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc }, 3500 { } 3501 }; 3502 MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table); 3503 3504 static int gcc_msm8960_probe(struct platform_device *pdev) 3505 { 3506 struct clk *clk; 3507 struct device *dev = &pdev->dev; 3508 const struct of_device_id *match; 3509 struct platform_device *tsens; 3510 int ret; 3511 3512 match = of_match_device(gcc_msm8960_match_table, &pdev->dev); 3513 if (!match) 3514 return -EINVAL; 3515 3516 /* Temporary until RPM clocks supported */ 3517 clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000); 3518 if (IS_ERR(clk)) 3519 return PTR_ERR(clk); 3520 3521 clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000); 3522 if (IS_ERR(clk)) 3523 return PTR_ERR(clk); 3524 3525 ret = qcom_cc_probe(pdev, match->data); 3526 if (ret) 3527 return ret; 3528 3529 tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1, 3530 NULL, 0); 3531 if (IS_ERR(tsens)) 3532 return PTR_ERR(tsens); 3533 3534 platform_set_drvdata(pdev, tsens); 3535 3536 return 0; 3537 } 3538 3539 static int gcc_msm8960_remove(struct platform_device *pdev) 3540 { 3541 struct platform_device *tsens = platform_get_drvdata(pdev); 3542 3543 platform_device_unregister(tsens); 3544 3545 return 0; 3546 } 3547 3548 static struct platform_driver gcc_msm8960_driver = { 3549 .probe = gcc_msm8960_probe, 3550 .remove = gcc_msm8960_remove, 3551 .driver = { 3552 .name = "gcc-msm8960", 3553 .of_match_table = gcc_msm8960_match_table, 3554 }, 3555 }; 3556 3557 static int __init gcc_msm8960_init(void) 3558 { 3559 return platform_driver_register(&gcc_msm8960_driver); 3560 } 3561 core_initcall(gcc_msm8960_init); 3562 3563 static void __exit gcc_msm8960_exit(void) 3564 { 3565 platform_driver_unregister(&gcc_msm8960_driver); 3566 } 3567 module_exit(gcc_msm8960_exit); 3568 3569 MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver"); 3570 MODULE_LICENSE("GPL v2"); 3571 MODULE_ALIAS("platform:gcc-msm8960"); 3572