1 /* 2 * Copyright (C) 2014 NVIDIA CORPORATION. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 */ 8 9 #include <linux/of.h> 10 #include <linux/mm.h> 11 12 #include <dt-bindings/memory/tegra30-mc.h> 13 14 #include "mc.h" 15 16 static const struct tegra_mc_client tegra30_mc_clients[] = { 17 { 18 .id = 0x00, 19 .name = "ptcr", 20 .swgroup = TEGRA_SWGROUP_PTC, 21 }, { 22 .id = 0x01, 23 .name = "display0a", 24 .swgroup = TEGRA_SWGROUP_DC, 25 .smmu = { 26 .reg = 0x228, 27 .bit = 1, 28 }, 29 .la = { 30 .reg = 0x2e8, 31 .shift = 0, 32 .mask = 0xff, 33 .def = 0x4e, 34 }, 35 }, { 36 .id = 0x02, 37 .name = "display0ab", 38 .swgroup = TEGRA_SWGROUP_DCB, 39 .smmu = { 40 .reg = 0x228, 41 .bit = 2, 42 }, 43 .la = { 44 .reg = 0x2f4, 45 .shift = 0, 46 .mask = 0xff, 47 .def = 0x4e, 48 }, 49 }, { 50 .id = 0x03, 51 .name = "display0b", 52 .swgroup = TEGRA_SWGROUP_DC, 53 .smmu = { 54 .reg = 0x228, 55 .bit = 3, 56 }, 57 .la = { 58 .reg = 0x2e8, 59 .shift = 16, 60 .mask = 0xff, 61 .def = 0x4e, 62 }, 63 }, { 64 .id = 0x04, 65 .name = "display0bb", 66 .swgroup = TEGRA_SWGROUP_DCB, 67 .smmu = { 68 .reg = 0x228, 69 .bit = 4, 70 }, 71 .la = { 72 .reg = 0x2f4, 73 .shift = 16, 74 .mask = 0xff, 75 .def = 0x4e, 76 }, 77 }, { 78 .id = 0x05, 79 .name = "display0c", 80 .swgroup = TEGRA_SWGROUP_DC, 81 .smmu = { 82 .reg = 0x228, 83 .bit = 5, 84 }, 85 .la = { 86 .reg = 0x2ec, 87 .shift = 0, 88 .mask = 0xff, 89 .def = 0x4e, 90 }, 91 }, { 92 .id = 0x06, 93 .name = "display0cb", 94 .swgroup = TEGRA_SWGROUP_DCB, 95 .smmu = { 96 .reg = 0x228, 97 .bit = 6, 98 }, 99 .la = { 100 .reg = 0x2f8, 101 .shift = 0, 102 .mask = 0xff, 103 .def = 0x4e, 104 }, 105 }, { 106 .id = 0x07, 107 .name = "display1b", 108 .swgroup = TEGRA_SWGROUP_DC, 109 .smmu = { 110 .reg = 0x228, 111 .bit = 7, 112 }, 113 .la = { 114 .reg = 0x2ec, 115 .shift = 16, 116 .mask = 0xff, 117 .def = 0x4e, 118 }, 119 }, { 120 .id = 0x08, 121 .name = "display1bb", 122 .swgroup = TEGRA_SWGROUP_DCB, 123 .smmu = { 124 .reg = 0x228, 125 .bit = 8, 126 }, 127 .la = { 128 .reg = 0x2f8, 129 .shift = 16, 130 .mask = 0xff, 131 .def = 0x4e, 132 }, 133 }, { 134 .id = 0x09, 135 .name = "eppup", 136 .swgroup = TEGRA_SWGROUP_EPP, 137 .smmu = { 138 .reg = 0x228, 139 .bit = 9, 140 }, 141 .la = { 142 .reg = 0x300, 143 .shift = 0, 144 .mask = 0xff, 145 .def = 0x17, 146 }, 147 }, { 148 .id = 0x0a, 149 .name = "g2pr", 150 .swgroup = TEGRA_SWGROUP_G2, 151 .smmu = { 152 .reg = 0x228, 153 .bit = 10, 154 }, 155 .la = { 156 .reg = 0x308, 157 .shift = 0, 158 .mask = 0xff, 159 .def = 0x09, 160 }, 161 }, { 162 .id = 0x0b, 163 .name = "g2sr", 164 .swgroup = TEGRA_SWGROUP_G2, 165 .smmu = { 166 .reg = 0x228, 167 .bit = 11, 168 }, 169 .la = { 170 .reg = 0x308, 171 .shift = 16, 172 .mask = 0xff, 173 .def = 0x09, 174 }, 175 }, { 176 .id = 0x0c, 177 .name = "mpeunifbr", 178 .swgroup = TEGRA_SWGROUP_MPE, 179 .smmu = { 180 .reg = 0x228, 181 .bit = 12, 182 }, 183 .la = { 184 .reg = 0x328, 185 .shift = 0, 186 .mask = 0xff, 187 .def = 0x50, 188 }, 189 }, { 190 .id = 0x0d, 191 .name = "viruv", 192 .swgroup = TEGRA_SWGROUP_VI, 193 .smmu = { 194 .reg = 0x228, 195 .bit = 13, 196 }, 197 .la = { 198 .reg = 0x364, 199 .shift = 0, 200 .mask = 0xff, 201 .def = 0x2c, 202 }, 203 }, { 204 .id = 0x0e, 205 .name = "afir", 206 .swgroup = TEGRA_SWGROUP_AFI, 207 .smmu = { 208 .reg = 0x228, 209 .bit = 14, 210 }, 211 .la = { 212 .reg = 0x2e0, 213 .shift = 0, 214 .mask = 0xff, 215 .def = 0x10, 216 }, 217 }, { 218 .id = 0x0f, 219 .name = "avpcarm7r", 220 .swgroup = TEGRA_SWGROUP_AVPC, 221 .smmu = { 222 .reg = 0x228, 223 .bit = 15, 224 }, 225 .la = { 226 .reg = 0x2e4, 227 .shift = 0, 228 .mask = 0xff, 229 .def = 0x04, 230 }, 231 }, { 232 .id = 0x10, 233 .name = "displayhc", 234 .swgroup = TEGRA_SWGROUP_DC, 235 .smmu = { 236 .reg = 0x228, 237 .bit = 16, 238 }, 239 .la = { 240 .reg = 0x2f0, 241 .shift = 0, 242 .mask = 0xff, 243 .def = 0xff, 244 }, 245 }, { 246 .id = 0x11, 247 .name = "displayhcb", 248 .swgroup = TEGRA_SWGROUP_DCB, 249 .smmu = { 250 .reg = 0x228, 251 .bit = 17, 252 }, 253 .la = { 254 .reg = 0x2fc, 255 .shift = 0, 256 .mask = 0xff, 257 .def = 0xff, 258 }, 259 }, { 260 .id = 0x12, 261 .name = "fdcdrd", 262 .swgroup = TEGRA_SWGROUP_NV, 263 .smmu = { 264 .reg = 0x228, 265 .bit = 18, 266 }, 267 .la = { 268 .reg = 0x334, 269 .shift = 0, 270 .mask = 0xff, 271 .def = 0x0a, 272 }, 273 }, { 274 .id = 0x13, 275 .name = "fdcdrd2", 276 .swgroup = TEGRA_SWGROUP_NV2, 277 .smmu = { 278 .reg = 0x228, 279 .bit = 19, 280 }, 281 .la = { 282 .reg = 0x33c, 283 .shift = 0, 284 .mask = 0xff, 285 .def = 0x0a, 286 }, 287 }, { 288 .id = 0x14, 289 .name = "g2dr", 290 .swgroup = TEGRA_SWGROUP_G2, 291 .smmu = { 292 .reg = 0x228, 293 .bit = 20, 294 }, 295 .la = { 296 .reg = 0x30c, 297 .shift = 0, 298 .mask = 0xff, 299 .def = 0x0a, 300 }, 301 }, { 302 .id = 0x15, 303 .name = "hdar", 304 .swgroup = TEGRA_SWGROUP_HDA, 305 .smmu = { 306 .reg = 0x228, 307 .bit = 21, 308 }, 309 .la = { 310 .reg = 0x318, 311 .shift = 0, 312 .mask = 0xff, 313 .def = 0xff, 314 }, 315 }, { 316 .id = 0x16, 317 .name = "host1xdmar", 318 .swgroup = TEGRA_SWGROUP_HC, 319 .smmu = { 320 .reg = 0x228, 321 .bit = 22, 322 }, 323 .la = { 324 .reg = 0x310, 325 .shift = 0, 326 .mask = 0xff, 327 .def = 0x05, 328 }, 329 }, { 330 .id = 0x17, 331 .name = "host1xr", 332 .swgroup = TEGRA_SWGROUP_HC, 333 .smmu = { 334 .reg = 0x228, 335 .bit = 23, 336 }, 337 .la = { 338 .reg = 0x310, 339 .shift = 16, 340 .mask = 0xff, 341 .def = 0x50, 342 }, 343 }, { 344 .id = 0x18, 345 .name = "idxsrd", 346 .swgroup = TEGRA_SWGROUP_NV, 347 .smmu = { 348 .reg = 0x228, 349 .bit = 24, 350 }, 351 .la = { 352 .reg = 0x334, 353 .shift = 16, 354 .mask = 0xff, 355 .def = 0x13, 356 }, 357 }, { 358 .id = 0x19, 359 .name = "idxsrd2", 360 .swgroup = TEGRA_SWGROUP_NV2, 361 .smmu = { 362 .reg = 0x228, 363 .bit = 25, 364 }, 365 .la = { 366 .reg = 0x33c, 367 .shift = 16, 368 .mask = 0xff, 369 .def = 0x13, 370 }, 371 }, { 372 .id = 0x1a, 373 .name = "mpe_ipred", 374 .swgroup = TEGRA_SWGROUP_MPE, 375 .smmu = { 376 .reg = 0x228, 377 .bit = 26, 378 }, 379 .la = { 380 .reg = 0x328, 381 .shift = 16, 382 .mask = 0xff, 383 .def = 0x80, 384 }, 385 }, { 386 .id = 0x1b, 387 .name = "mpeamemrd", 388 .swgroup = TEGRA_SWGROUP_MPE, 389 .smmu = { 390 .reg = 0x228, 391 .bit = 27, 392 }, 393 .la = { 394 .reg = 0x32c, 395 .shift = 0, 396 .mask = 0xff, 397 .def = 0x42, 398 }, 399 }, { 400 .id = 0x1c, 401 .name = "mpecsrd", 402 .swgroup = TEGRA_SWGROUP_MPE, 403 .smmu = { 404 .reg = 0x228, 405 .bit = 28, 406 }, 407 .la = { 408 .reg = 0x32c, 409 .shift = 16, 410 .mask = 0xff, 411 .def = 0xff, 412 }, 413 }, { 414 .id = 0x1d, 415 .name = "ppcsahbdmar", 416 .swgroup = TEGRA_SWGROUP_PPCS, 417 .smmu = { 418 .reg = 0x228, 419 .bit = 29, 420 }, 421 .la = { 422 .reg = 0x344, 423 .shift = 0, 424 .mask = 0xff, 425 .def = 0x10, 426 }, 427 }, { 428 .id = 0x1e, 429 .name = "ppcsahbslvr", 430 .swgroup = TEGRA_SWGROUP_PPCS, 431 .smmu = { 432 .reg = 0x228, 433 .bit = 30, 434 }, 435 .la = { 436 .reg = 0x344, 437 .shift = 16, 438 .mask = 0xff, 439 .def = 0x12, 440 }, 441 }, { 442 .id = 0x1f, 443 .name = "satar", 444 .swgroup = TEGRA_SWGROUP_SATA, 445 .smmu = { 446 .reg = 0x228, 447 .bit = 31, 448 }, 449 .la = { 450 .reg = 0x350, 451 .shift = 0, 452 .mask = 0xff, 453 .def = 0x33, 454 }, 455 }, { 456 .id = 0x20, 457 .name = "texsrd", 458 .swgroup = TEGRA_SWGROUP_NV, 459 .smmu = { 460 .reg = 0x22c, 461 .bit = 0, 462 }, 463 .la = { 464 .reg = 0x338, 465 .shift = 0, 466 .mask = 0xff, 467 .def = 0x13, 468 }, 469 }, { 470 .id = 0x21, 471 .name = "texsrd2", 472 .swgroup = TEGRA_SWGROUP_NV2, 473 .smmu = { 474 .reg = 0x22c, 475 .bit = 1, 476 }, 477 .la = { 478 .reg = 0x340, 479 .shift = 0, 480 .mask = 0xff, 481 .def = 0x13, 482 }, 483 }, { 484 .id = 0x22, 485 .name = "vdebsevr", 486 .swgroup = TEGRA_SWGROUP_VDE, 487 .smmu = { 488 .reg = 0x22c, 489 .bit = 2, 490 }, 491 .la = { 492 .reg = 0x354, 493 .shift = 0, 494 .mask = 0xff, 495 .def = 0xff, 496 }, 497 }, { 498 .id = 0x23, 499 .name = "vdember", 500 .swgroup = TEGRA_SWGROUP_VDE, 501 .smmu = { 502 .reg = 0x22c, 503 .bit = 3, 504 }, 505 .la = { 506 .reg = 0x354, 507 .shift = 16, 508 .mask = 0xff, 509 .def = 0xd0, 510 }, 511 }, { 512 .id = 0x24, 513 .name = "vdemcer", 514 .swgroup = TEGRA_SWGROUP_VDE, 515 .smmu = { 516 .reg = 0x22c, 517 .bit = 4, 518 }, 519 .la = { 520 .reg = 0x358, 521 .shift = 0, 522 .mask = 0xff, 523 .def = 0x2a, 524 }, 525 }, { 526 .id = 0x25, 527 .name = "vdetper", 528 .swgroup = TEGRA_SWGROUP_VDE, 529 .smmu = { 530 .reg = 0x22c, 531 .bit = 5, 532 }, 533 .la = { 534 .reg = 0x358, 535 .shift = 16, 536 .mask = 0xff, 537 .def = 0x74, 538 }, 539 }, { 540 .id = 0x26, 541 .name = "mpcorelpr", 542 .swgroup = TEGRA_SWGROUP_MPCORELP, 543 .la = { 544 .reg = 0x324, 545 .shift = 0, 546 .mask = 0xff, 547 .def = 0x04, 548 }, 549 }, { 550 .id = 0x27, 551 .name = "mpcorer", 552 .swgroup = TEGRA_SWGROUP_MPCORE, 553 .la = { 554 .reg = 0x320, 555 .shift = 0, 556 .mask = 0xff, 557 .def = 0x04, 558 }, 559 }, { 560 .id = 0x28, 561 .name = "eppu", 562 .swgroup = TEGRA_SWGROUP_EPP, 563 .smmu = { 564 .reg = 0x22c, 565 .bit = 8, 566 }, 567 .la = { 568 .reg = 0x300, 569 .shift = 16, 570 .mask = 0xff, 571 .def = 0x6c, 572 }, 573 }, { 574 .id = 0x29, 575 .name = "eppv", 576 .swgroup = TEGRA_SWGROUP_EPP, 577 .smmu = { 578 .reg = 0x22c, 579 .bit = 9, 580 }, 581 .la = { 582 .reg = 0x304, 583 .shift = 0, 584 .mask = 0xff, 585 .def = 0x6c, 586 }, 587 }, { 588 .id = 0x2a, 589 .name = "eppy", 590 .swgroup = TEGRA_SWGROUP_EPP, 591 .smmu = { 592 .reg = 0x22c, 593 .bit = 10, 594 }, 595 .la = { 596 .reg = 0x304, 597 .shift = 16, 598 .mask = 0xff, 599 .def = 0x6c, 600 }, 601 }, { 602 .id = 0x2b, 603 .name = "mpeunifbw", 604 .swgroup = TEGRA_SWGROUP_MPE, 605 .smmu = { 606 .reg = 0x22c, 607 .bit = 11, 608 }, 609 .la = { 610 .reg = 0x330, 611 .shift = 0, 612 .mask = 0xff, 613 .def = 0x13, 614 }, 615 }, { 616 .id = 0x2c, 617 .name = "viwsb", 618 .swgroup = TEGRA_SWGROUP_VI, 619 .smmu = { 620 .reg = 0x22c, 621 .bit = 12, 622 }, 623 .la = { 624 .reg = 0x364, 625 .shift = 16, 626 .mask = 0xff, 627 .def = 0x12, 628 }, 629 }, { 630 .id = 0x2d, 631 .name = "viwu", 632 .swgroup = TEGRA_SWGROUP_VI, 633 .smmu = { 634 .reg = 0x22c, 635 .bit = 13, 636 }, 637 .la = { 638 .reg = 0x368, 639 .shift = 0, 640 .mask = 0xff, 641 .def = 0xb2, 642 }, 643 }, { 644 .id = 0x2e, 645 .name = "viwv", 646 .swgroup = TEGRA_SWGROUP_VI, 647 .smmu = { 648 .reg = 0x22c, 649 .bit = 14, 650 }, 651 .la = { 652 .reg = 0x368, 653 .shift = 16, 654 .mask = 0xff, 655 .def = 0xb2, 656 }, 657 }, { 658 .id = 0x2f, 659 .name = "viwy", 660 .swgroup = TEGRA_SWGROUP_VI, 661 .smmu = { 662 .reg = 0x22c, 663 .bit = 15, 664 }, 665 .la = { 666 .reg = 0x36c, 667 .shift = 0, 668 .mask = 0xff, 669 .def = 0x12, 670 }, 671 }, { 672 .id = 0x30, 673 .name = "g2dw", 674 .swgroup = TEGRA_SWGROUP_G2, 675 .smmu = { 676 .reg = 0x22c, 677 .bit = 16, 678 }, 679 .la = { 680 .reg = 0x30c, 681 .shift = 16, 682 .mask = 0xff, 683 .def = 0x9, 684 }, 685 }, { 686 .id = 0x31, 687 .name = "afiw", 688 .swgroup = TEGRA_SWGROUP_AFI, 689 .smmu = { 690 .reg = 0x22c, 691 .bit = 17, 692 }, 693 .la = { 694 .reg = 0x2e0, 695 .shift = 16, 696 .mask = 0xff, 697 .def = 0x0c, 698 }, 699 }, { 700 .id = 0x32, 701 .name = "avpcarm7w", 702 .swgroup = TEGRA_SWGROUP_AVPC, 703 .smmu = { 704 .reg = 0x22c, 705 .bit = 18, 706 }, 707 .la = { 708 .reg = 0x2e4, 709 .shift = 16, 710 .mask = 0xff, 711 .def = 0x0e, 712 }, 713 }, { 714 .id = 0x33, 715 .name = "fdcdwr", 716 .swgroup = TEGRA_SWGROUP_NV, 717 .smmu = { 718 .reg = 0x22c, 719 .bit = 19, 720 }, 721 .la = { 722 .reg = 0x338, 723 .shift = 16, 724 .mask = 0xff, 725 .def = 0x0a, 726 }, 727 }, { 728 .id = 0x34, 729 .name = "fdcwr2", 730 .swgroup = TEGRA_SWGROUP_NV2, 731 .smmu = { 732 .reg = 0x22c, 733 .bit = 20, 734 }, 735 .la = { 736 .reg = 0x340, 737 .shift = 16, 738 .mask = 0xff, 739 .def = 0x0a, 740 }, 741 }, { 742 .id = 0x35, 743 .name = "hdaw", 744 .swgroup = TEGRA_SWGROUP_HDA, 745 .smmu = { 746 .reg = 0x22c, 747 .bit = 21, 748 }, 749 .la = { 750 .reg = 0x318, 751 .shift = 16, 752 .mask = 0xff, 753 .def = 0xff, 754 }, 755 }, { 756 .id = 0x36, 757 .name = "host1xw", 758 .swgroup = TEGRA_SWGROUP_HC, 759 .smmu = { 760 .reg = 0x22c, 761 .bit = 22, 762 }, 763 .la = { 764 .reg = 0x314, 765 .shift = 0, 766 .mask = 0xff, 767 .def = 0x10, 768 }, 769 }, { 770 .id = 0x37, 771 .name = "ispw", 772 .swgroup = TEGRA_SWGROUP_ISP, 773 .smmu = { 774 .reg = 0x22c, 775 .bit = 23, 776 }, 777 .la = { 778 .reg = 0x31c, 779 .shift = 0, 780 .mask = 0xff, 781 .def = 0xff, 782 }, 783 }, { 784 .id = 0x38, 785 .name = "mpcorelpw", 786 .swgroup = TEGRA_SWGROUP_MPCORELP, 787 .la = { 788 .reg = 0x324, 789 .shift = 16, 790 .mask = 0xff, 791 .def = 0x0e, 792 }, 793 }, { 794 .id = 0x39, 795 .name = "mpcorew", 796 .swgroup = TEGRA_SWGROUP_MPCORE, 797 .la = { 798 .reg = 0x320, 799 .shift = 16, 800 .mask = 0xff, 801 .def = 0x0e, 802 }, 803 }, { 804 .id = 0x3a, 805 .name = "mpecswr", 806 .swgroup = TEGRA_SWGROUP_MPE, 807 .smmu = { 808 .reg = 0x22c, 809 .bit = 26, 810 }, 811 .la = { 812 .reg = 0x330, 813 .shift = 16, 814 .mask = 0xff, 815 .def = 0xff, 816 }, 817 }, { 818 .id = 0x3b, 819 .name = "ppcsahbdmaw", 820 .swgroup = TEGRA_SWGROUP_PPCS, 821 .smmu = { 822 .reg = 0x22c, 823 .bit = 27, 824 }, 825 .la = { 826 .reg = 0x348, 827 .shift = 0, 828 .mask = 0xff, 829 .def = 0x10, 830 }, 831 }, { 832 .id = 0x3c, 833 .name = "ppcsahbslvw", 834 .swgroup = TEGRA_SWGROUP_PPCS, 835 .smmu = { 836 .reg = 0x22c, 837 .bit = 28, 838 }, 839 .la = { 840 .reg = 0x348, 841 .shift = 16, 842 .mask = 0xff, 843 .def = 0x06, 844 }, 845 }, { 846 .id = 0x3d, 847 .name = "sataw", 848 .swgroup = TEGRA_SWGROUP_SATA, 849 .smmu = { 850 .reg = 0x22c, 851 .bit = 29, 852 }, 853 .la = { 854 .reg = 0x350, 855 .shift = 16, 856 .mask = 0xff, 857 .def = 0x33, 858 }, 859 }, { 860 .id = 0x3e, 861 .name = "vdebsevw", 862 .swgroup = TEGRA_SWGROUP_VDE, 863 .smmu = { 864 .reg = 0x22c, 865 .bit = 30, 866 }, 867 .la = { 868 .reg = 0x35c, 869 .shift = 0, 870 .mask = 0xff, 871 .def = 0xff, 872 }, 873 }, { 874 .id = 0x3f, 875 .name = "vdedbgw", 876 .swgroup = TEGRA_SWGROUP_VDE, 877 .smmu = { 878 .reg = 0x22c, 879 .bit = 31, 880 }, 881 .la = { 882 .reg = 0x35c, 883 .shift = 16, 884 .mask = 0xff, 885 .def = 0xff, 886 }, 887 }, { 888 .id = 0x40, 889 .name = "vdembew", 890 .swgroup = TEGRA_SWGROUP_VDE, 891 .smmu = { 892 .reg = 0x230, 893 .bit = 0, 894 }, 895 .la = { 896 .reg = 0x360, 897 .shift = 0, 898 .mask = 0xff, 899 .def = 0x42, 900 }, 901 }, { 902 .id = 0x41, 903 .name = "vdetpmw", 904 .swgroup = TEGRA_SWGROUP_VDE, 905 .smmu = { 906 .reg = 0x230, 907 .bit = 1, 908 }, 909 .la = { 910 .reg = 0x360, 911 .shift = 16, 912 .mask = 0xff, 913 .def = 0x2a, 914 }, 915 }, 916 }; 917 918 static const struct tegra_smmu_swgroup tegra30_swgroups[] = { 919 { .name = "dc", .swgroup = TEGRA_SWGROUP_DC, .reg = 0x240 }, 920 { .name = "dcb", .swgroup = TEGRA_SWGROUP_DCB, .reg = 0x244 }, 921 { .name = "epp", .swgroup = TEGRA_SWGROUP_EPP, .reg = 0x248 }, 922 { .name = "g2", .swgroup = TEGRA_SWGROUP_G2, .reg = 0x24c }, 923 { .name = "mpe", .swgroup = TEGRA_SWGROUP_MPE, .reg = 0x264 }, 924 { .name = "vi", .swgroup = TEGRA_SWGROUP_VI, .reg = 0x280 }, 925 { .name = "afi", .swgroup = TEGRA_SWGROUP_AFI, .reg = 0x238 }, 926 { .name = "avpc", .swgroup = TEGRA_SWGROUP_AVPC, .reg = 0x23c }, 927 { .name = "nv", .swgroup = TEGRA_SWGROUP_NV, .reg = 0x268 }, 928 { .name = "nv2", .swgroup = TEGRA_SWGROUP_NV2, .reg = 0x26c }, 929 { .name = "hda", .swgroup = TEGRA_SWGROUP_HDA, .reg = 0x254 }, 930 { .name = "hc", .swgroup = TEGRA_SWGROUP_HC, .reg = 0x250 }, 931 { .name = "ppcs", .swgroup = TEGRA_SWGROUP_PPCS, .reg = 0x270 }, 932 { .name = "sata", .swgroup = TEGRA_SWGROUP_SATA, .reg = 0x278 }, 933 { .name = "vde", .swgroup = TEGRA_SWGROUP_VDE, .reg = 0x27c }, 934 { .name = "isp", .swgroup = TEGRA_SWGROUP_ISP, .reg = 0x258 }, 935 }; 936 937 static const unsigned int tegra30_group_display[] = { 938 TEGRA_SWGROUP_DC, 939 TEGRA_SWGROUP_DCB, 940 }; 941 942 static const struct tegra_smmu_group_soc tegra30_groups[] = { 943 { 944 .name = "display", 945 .swgroups = tegra30_group_display, 946 .num_swgroups = ARRAY_SIZE(tegra30_group_display), 947 }, 948 }; 949 950 static const struct tegra_smmu_soc tegra30_smmu_soc = { 951 .clients = tegra30_mc_clients, 952 .num_clients = ARRAY_SIZE(tegra30_mc_clients), 953 .swgroups = tegra30_swgroups, 954 .num_swgroups = ARRAY_SIZE(tegra30_swgroups), 955 .groups = tegra30_groups, 956 .num_groups = ARRAY_SIZE(tegra30_groups), 957 .supports_round_robin_arbitration = false, 958 .supports_request_limit = false, 959 .num_tlb_lines = 16, 960 .num_asids = 4, 961 }; 962 963 #define TEGRA30_MC_RESET(_name, _control, _status, _bit) \ 964 { \ 965 .name = #_name, \ 966 .id = TEGRA30_MC_RESET_##_name, \ 967 .control = _control, \ 968 .status = _status, \ 969 .bit = _bit, \ 970 } 971 972 static const struct tegra_mc_reset tegra30_mc_resets[] = { 973 TEGRA30_MC_RESET(AFI, 0x200, 0x204, 0), 974 TEGRA30_MC_RESET(AVPC, 0x200, 0x204, 1), 975 TEGRA30_MC_RESET(DC, 0x200, 0x204, 2), 976 TEGRA30_MC_RESET(DCB, 0x200, 0x204, 3), 977 TEGRA30_MC_RESET(EPP, 0x200, 0x204, 4), 978 TEGRA30_MC_RESET(2D, 0x200, 0x204, 5), 979 TEGRA30_MC_RESET(HC, 0x200, 0x204, 6), 980 TEGRA30_MC_RESET(HDA, 0x200, 0x204, 7), 981 TEGRA30_MC_RESET(ISP, 0x200, 0x204, 8), 982 TEGRA30_MC_RESET(MPCORE, 0x200, 0x204, 9), 983 TEGRA30_MC_RESET(MPCORELP, 0x200, 0x204, 10), 984 TEGRA30_MC_RESET(MPE, 0x200, 0x204, 11), 985 TEGRA30_MC_RESET(3D, 0x200, 0x204, 12), 986 TEGRA30_MC_RESET(3D2, 0x200, 0x204, 13), 987 TEGRA30_MC_RESET(PPCS, 0x200, 0x204, 14), 988 TEGRA30_MC_RESET(SATA, 0x200, 0x204, 15), 989 TEGRA30_MC_RESET(VDE, 0x200, 0x204, 16), 990 TEGRA30_MC_RESET(VI, 0x200, 0x204, 17), 991 }; 992 993 const struct tegra_mc_soc tegra30_mc_soc = { 994 .clients = tegra30_mc_clients, 995 .num_clients = ARRAY_SIZE(tegra30_mc_clients), 996 .num_address_bits = 32, 997 .atom_size = 16, 998 .client_id_mask = 0x7f, 999 .smmu = &tegra30_smmu_soc, 1000 .intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION | 1001 MC_INT_DECERR_EMEM, 1002 .reset_ops = &terga_mc_reset_ops_common, 1003 .resets = tegra30_mc_resets, 1004 .num_resets = ARRAY_SIZE(tegra30_mc_resets), 1005 }; 1006