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