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