1 /* 2 * Copyright (C) 2015 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 <dt-bindings/memory/tegra210-mc.h> 10 11 #include "mc.h" 12 13 static const struct tegra_mc_client tegra210_mc_clients[] = { 14 { 15 .id = 0x00, 16 .name = "ptcr", 17 .swgroup = TEGRA_SWGROUP_PTC, 18 }, { 19 .id = 0x01, 20 .name = "display0a", 21 .swgroup = TEGRA_SWGROUP_DC, 22 .smmu = { 23 .reg = 0x228, 24 .bit = 1, 25 }, 26 .la = { 27 .reg = 0x2e8, 28 .shift = 0, 29 .mask = 0xff, 30 .def = 0xc2, 31 }, 32 }, { 33 .id = 0x02, 34 .name = "display0ab", 35 .swgroup = TEGRA_SWGROUP_DCB, 36 .smmu = { 37 .reg = 0x228, 38 .bit = 2, 39 }, 40 .la = { 41 .reg = 0x2f4, 42 .shift = 0, 43 .mask = 0xff, 44 .def = 0xc6, 45 }, 46 }, { 47 .id = 0x03, 48 .name = "display0b", 49 .swgroup = TEGRA_SWGROUP_DC, 50 .smmu = { 51 .reg = 0x228, 52 .bit = 3, 53 }, 54 .la = { 55 .reg = 0x2e8, 56 .shift = 16, 57 .mask = 0xff, 58 .def = 0x50, 59 }, 60 }, { 61 .id = 0x04, 62 .name = "display0bb", 63 .swgroup = TEGRA_SWGROUP_DCB, 64 .smmu = { 65 .reg = 0x228, 66 .bit = 4, 67 }, 68 .la = { 69 .reg = 0x2f4, 70 .shift = 16, 71 .mask = 0xff, 72 .def = 0x50, 73 }, 74 }, { 75 .id = 0x05, 76 .name = "display0c", 77 .swgroup = TEGRA_SWGROUP_DC, 78 .smmu = { 79 .reg = 0x228, 80 .bit = 5, 81 }, 82 .la = { 83 .reg = 0x2ec, 84 .shift = 0, 85 .mask = 0xff, 86 .def = 0x50, 87 }, 88 }, { 89 .id = 0x06, 90 .name = "display0cb", 91 .swgroup = TEGRA_SWGROUP_DCB, 92 .smmu = { 93 .reg = 0x228, 94 .bit = 6, 95 }, 96 .la = { 97 .reg = 0x2f8, 98 .shift = 0, 99 .mask = 0xff, 100 .def = 0x50, 101 }, 102 }, { 103 .id = 0x0e, 104 .name = "afir", 105 .swgroup = TEGRA_SWGROUP_AFI, 106 .smmu = { 107 .reg = 0x228, 108 .bit = 14, 109 }, 110 .la = { 111 .reg = 0x2e0, 112 .shift = 0, 113 .mask = 0xff, 114 .def = 0x13, 115 }, 116 }, { 117 .id = 0x0f, 118 .name = "avpcarm7r", 119 .swgroup = TEGRA_SWGROUP_AVPC, 120 .smmu = { 121 .reg = 0x228, 122 .bit = 15, 123 }, 124 .la = { 125 .reg = 0x2e4, 126 .shift = 0, 127 .mask = 0xff, 128 .def = 0x04, 129 }, 130 }, { 131 .id = 0x10, 132 .name = "displayhc", 133 .swgroup = TEGRA_SWGROUP_DC, 134 .smmu = { 135 .reg = 0x228, 136 .bit = 16, 137 }, 138 .la = { 139 .reg = 0x2f0, 140 .shift = 0, 141 .mask = 0xff, 142 .def = 0x50, 143 }, 144 }, { 145 .id = 0x11, 146 .name = "displayhcb", 147 .swgroup = TEGRA_SWGROUP_DCB, 148 .smmu = { 149 .reg = 0x228, 150 .bit = 17, 151 }, 152 .la = { 153 .reg = 0x2fc, 154 .shift = 0, 155 .mask = 0xff, 156 .def = 0x50, 157 }, 158 }, { 159 .id = 0x15, 160 .name = "hdar", 161 .swgroup = TEGRA_SWGROUP_HDA, 162 .smmu = { 163 .reg = 0x228, 164 .bit = 21, 165 }, 166 .la = { 167 .reg = 0x318, 168 .shift = 0, 169 .mask = 0xff, 170 .def = 0x24, 171 }, 172 }, { 173 .id = 0x16, 174 .name = "host1xdmar", 175 .swgroup = TEGRA_SWGROUP_HC, 176 .smmu = { 177 .reg = 0x228, 178 .bit = 22, 179 }, 180 .la = { 181 .reg = 0x310, 182 .shift = 0, 183 .mask = 0xff, 184 .def = 0x1e, 185 }, 186 }, { 187 .id = 0x17, 188 .name = "host1xr", 189 .swgroup = TEGRA_SWGROUP_HC, 190 .smmu = { 191 .reg = 0x228, 192 .bit = 23, 193 }, 194 .la = { 195 .reg = 0x310, 196 .shift = 16, 197 .mask = 0xff, 198 .def = 0x50, 199 }, 200 }, { 201 .id = 0x1c, 202 .name = "nvencsrd", 203 .swgroup = TEGRA_SWGROUP_NVENC, 204 .smmu = { 205 .reg = 0x228, 206 .bit = 28, 207 }, 208 .la = { 209 .reg = 0x328, 210 .shift = 0, 211 .mask = 0xff, 212 .def = 0x23, 213 }, 214 }, { 215 .id = 0x1d, 216 .name = "ppcsahbdmar", 217 .swgroup = TEGRA_SWGROUP_PPCS, 218 .smmu = { 219 .reg = 0x228, 220 .bit = 29, 221 }, 222 .la = { 223 .reg = 0x344, 224 .shift = 0, 225 .mask = 0xff, 226 .def = 0x49, 227 }, 228 }, { 229 .id = 0x1e, 230 .name = "ppcsahbslvr", 231 .swgroup = TEGRA_SWGROUP_PPCS, 232 .smmu = { 233 .reg = 0x228, 234 .bit = 30, 235 }, 236 .la = { 237 .reg = 0x344, 238 .shift = 16, 239 .mask = 0xff, 240 .def = 0x1a, 241 }, 242 }, { 243 .id = 0x1f, 244 .name = "satar", 245 .swgroup = TEGRA_SWGROUP_SATA, 246 .smmu = { 247 .reg = 0x228, 248 .bit = 31, 249 }, 250 .la = { 251 .reg = 0x350, 252 .shift = 0, 253 .mask = 0xff, 254 .def = 0x65, 255 }, 256 }, { 257 .id = 0x27, 258 .name = "mpcorer", 259 .swgroup = TEGRA_SWGROUP_MPCORE, 260 .la = { 261 .reg = 0x320, 262 .shift = 0, 263 .mask = 0xff, 264 .def = 0x04, 265 }, 266 }, { 267 .id = 0x2b, 268 .name = "nvencswr", 269 .swgroup = TEGRA_SWGROUP_NVENC, 270 .smmu = { 271 .reg = 0x22c, 272 .bit = 11, 273 }, 274 .la = { 275 .reg = 0x328, 276 .shift = 16, 277 .mask = 0xff, 278 .def = 0x80, 279 }, 280 }, { 281 .id = 0x31, 282 .name = "afiw", 283 .swgroup = TEGRA_SWGROUP_AFI, 284 .smmu = { 285 .reg = 0x22c, 286 .bit = 17, 287 }, 288 .la = { 289 .reg = 0x2e0, 290 .shift = 16, 291 .mask = 0xff, 292 .def = 0x80, 293 }, 294 }, { 295 .id = 0x32, 296 .name = "avpcarm7w", 297 .swgroup = TEGRA_SWGROUP_AVPC, 298 .smmu = { 299 .reg = 0x22c, 300 .bit = 18, 301 }, 302 .la = { 303 .reg = 0x2e4, 304 .shift = 16, 305 .mask = 0xff, 306 .def = 0x80, 307 }, 308 }, { 309 .id = 0x35, 310 .name = "hdaw", 311 .swgroup = TEGRA_SWGROUP_HDA, 312 .smmu = { 313 .reg = 0x22c, 314 .bit = 21, 315 }, 316 .la = { 317 .reg = 0x318, 318 .shift = 16, 319 .mask = 0xff, 320 .def = 0x80, 321 }, 322 }, { 323 .id = 0x36, 324 .name = "host1xw", 325 .swgroup = TEGRA_SWGROUP_HC, 326 .smmu = { 327 .reg = 0x22c, 328 .bit = 22, 329 }, 330 .la = { 331 .reg = 0x314, 332 .shift = 0, 333 .mask = 0xff, 334 .def = 0x80, 335 }, 336 }, { 337 .id = 0x39, 338 .name = "mpcorew", 339 .swgroup = TEGRA_SWGROUP_MPCORE, 340 .la = { 341 .reg = 0x320, 342 .shift = 16, 343 .mask = 0xff, 344 .def = 0x80, 345 }, 346 }, { 347 .id = 0x3b, 348 .name = "ppcsahbdmaw", 349 .swgroup = TEGRA_SWGROUP_PPCS, 350 .smmu = { 351 .reg = 0x22c, 352 .bit = 27, 353 }, 354 .la = { 355 .reg = 0x348, 356 .shift = 0, 357 .mask = 0xff, 358 .def = 0x80, 359 }, 360 }, { 361 .id = 0x3c, 362 .name = "ppcsahbslvw", 363 .swgroup = TEGRA_SWGROUP_PPCS, 364 .smmu = { 365 .reg = 0x22c, 366 .bit = 28, 367 }, 368 .la = { 369 .reg = 0x348, 370 .shift = 16, 371 .mask = 0xff, 372 .def = 0x80, 373 }, 374 }, { 375 .id = 0x3d, 376 .name = "sataw", 377 .swgroup = TEGRA_SWGROUP_SATA, 378 .smmu = { 379 .reg = 0x22c, 380 .bit = 29, 381 }, 382 .la = { 383 .reg = 0x350, 384 .shift = 16, 385 .mask = 0xff, 386 .def = 0x65, 387 }, 388 }, { 389 .id = 0x44, 390 .name = "ispra", 391 .swgroup = TEGRA_SWGROUP_ISP2, 392 .smmu = { 393 .reg = 0x230, 394 .bit = 4, 395 }, 396 .la = { 397 .reg = 0x370, 398 .shift = 0, 399 .mask = 0xff, 400 .def = 0x18, 401 }, 402 }, { 403 .id = 0x46, 404 .name = "ispwa", 405 .swgroup = TEGRA_SWGROUP_ISP2, 406 .smmu = { 407 .reg = 0x230, 408 .bit = 6, 409 }, 410 .la = { 411 .reg = 0x374, 412 .shift = 0, 413 .mask = 0xff, 414 .def = 0x80, 415 }, 416 }, { 417 .id = 0x47, 418 .name = "ispwb", 419 .swgroup = TEGRA_SWGROUP_ISP2, 420 .smmu = { 421 .reg = 0x230, 422 .bit = 7, 423 }, 424 .la = { 425 .reg = 0x374, 426 .shift = 16, 427 .mask = 0xff, 428 .def = 0x80, 429 }, 430 }, { 431 .id = 0x4a, 432 .name = "xusb_hostr", 433 .swgroup = TEGRA_SWGROUP_XUSB_HOST, 434 .smmu = { 435 .reg = 0x230, 436 .bit = 10, 437 }, 438 .la = { 439 .reg = 0x37c, 440 .shift = 0, 441 .mask = 0xff, 442 .def = 0x39, 443 }, 444 }, { 445 .id = 0x4b, 446 .name = "xusb_hostw", 447 .swgroup = TEGRA_SWGROUP_XUSB_HOST, 448 .smmu = { 449 .reg = 0x230, 450 .bit = 11, 451 }, 452 .la = { 453 .reg = 0x37c, 454 .shift = 16, 455 .mask = 0xff, 456 .def = 0x80, 457 }, 458 }, { 459 .id = 0x4c, 460 .name = "xusb_devr", 461 .swgroup = TEGRA_SWGROUP_XUSB_DEV, 462 .smmu = { 463 .reg = 0x230, 464 .bit = 12, 465 }, 466 .la = { 467 .reg = 0x380, 468 .shift = 0, 469 .mask = 0xff, 470 .def = 0x39, 471 }, 472 }, { 473 .id = 0x4d, 474 .name = "xusb_devw", 475 .swgroup = TEGRA_SWGROUP_XUSB_DEV, 476 .smmu = { 477 .reg = 0x230, 478 .bit = 13, 479 }, 480 .la = { 481 .reg = 0x380, 482 .shift = 16, 483 .mask = 0xff, 484 .def = 0x80, 485 }, 486 }, { 487 .id = 0x4e, 488 .name = "isprab", 489 .swgroup = TEGRA_SWGROUP_ISP2B, 490 .smmu = { 491 .reg = 0x230, 492 .bit = 14, 493 }, 494 .la = { 495 .reg = 0x384, 496 .shift = 0, 497 .mask = 0xff, 498 .def = 0x18, 499 }, 500 }, { 501 .id = 0x50, 502 .name = "ispwab", 503 .swgroup = TEGRA_SWGROUP_ISP2B, 504 .smmu = { 505 .reg = 0x230, 506 .bit = 16, 507 }, 508 .la = { 509 .reg = 0x388, 510 .shift = 0, 511 .mask = 0xff, 512 .def = 0x80, 513 }, 514 }, { 515 .id = 0x51, 516 .name = "ispwbb", 517 .swgroup = TEGRA_SWGROUP_ISP2B, 518 .smmu = { 519 .reg = 0x230, 520 .bit = 17, 521 }, 522 .la = { 523 .reg = 0x388, 524 .shift = 16, 525 .mask = 0xff, 526 .def = 0x80, 527 }, 528 }, { 529 .id = 0x54, 530 .name = "tsecsrd", 531 .swgroup = TEGRA_SWGROUP_TSEC, 532 .smmu = { 533 .reg = 0x230, 534 .bit = 20, 535 }, 536 .la = { 537 .reg = 0x390, 538 .shift = 0, 539 .mask = 0xff, 540 .def = 0x9b, 541 }, 542 }, { 543 .id = 0x55, 544 .name = "tsecswr", 545 .swgroup = TEGRA_SWGROUP_TSEC, 546 .smmu = { 547 .reg = 0x230, 548 .bit = 21, 549 }, 550 .la = { 551 .reg = 0x390, 552 .shift = 16, 553 .mask = 0xff, 554 .def = 0x80, 555 }, 556 }, { 557 .id = 0x56, 558 .name = "a9avpscr", 559 .swgroup = TEGRA_SWGROUP_A9AVP, 560 .smmu = { 561 .reg = 0x230, 562 .bit = 22, 563 }, 564 .la = { 565 .reg = 0x3a4, 566 .shift = 0, 567 .mask = 0xff, 568 .def = 0x04, 569 }, 570 }, { 571 .id = 0x57, 572 .name = "a9avpscw", 573 .swgroup = TEGRA_SWGROUP_A9AVP, 574 .smmu = { 575 .reg = 0x230, 576 .bit = 23, 577 }, 578 .la = { 579 .reg = 0x3a4, 580 .shift = 16, 581 .mask = 0xff, 582 .def = 0x80, 583 }, 584 }, { 585 .id = 0x58, 586 .name = "gpusrd", 587 .swgroup = TEGRA_SWGROUP_GPU, 588 .smmu = { 589 /* read-only */ 590 .reg = 0x230, 591 .bit = 24, 592 }, 593 .la = { 594 .reg = 0x3c8, 595 .shift = 0, 596 .mask = 0xff, 597 .def = 0x1a, 598 }, 599 }, { 600 .id = 0x59, 601 .name = "gpuswr", 602 .swgroup = TEGRA_SWGROUP_GPU, 603 .smmu = { 604 /* read-only */ 605 .reg = 0x230, 606 .bit = 25, 607 }, 608 .la = { 609 .reg = 0x3c8, 610 .shift = 16, 611 .mask = 0xff, 612 .def = 0x80, 613 }, 614 }, { 615 .id = 0x5a, 616 .name = "displayt", 617 .swgroup = TEGRA_SWGROUP_DC, 618 .smmu = { 619 .reg = 0x230, 620 .bit = 26, 621 }, 622 .la = { 623 .reg = 0x2f0, 624 .shift = 16, 625 .mask = 0xff, 626 .def = 0x50, 627 }, 628 }, { 629 .id = 0x60, 630 .name = "sdmmcra", 631 .swgroup = TEGRA_SWGROUP_SDMMC1A, 632 .smmu = { 633 .reg = 0x234, 634 .bit = 0, 635 }, 636 .la = { 637 .reg = 0x3b8, 638 .shift = 0, 639 .mask = 0xff, 640 .def = 0x49, 641 }, 642 }, { 643 .id = 0x61, 644 .name = "sdmmcraa", 645 .swgroup = TEGRA_SWGROUP_SDMMC2A, 646 .smmu = { 647 .reg = 0x234, 648 .bit = 1, 649 }, 650 .la = { 651 .reg = 0x3bc, 652 .shift = 0, 653 .mask = 0xff, 654 .def = 0x49, 655 }, 656 }, { 657 .id = 0x62, 658 .name = "sdmmcr", 659 .swgroup = TEGRA_SWGROUP_SDMMC3A, 660 .smmu = { 661 .reg = 0x234, 662 .bit = 2, 663 }, 664 .la = { 665 .reg = 0x3c0, 666 .shift = 0, 667 .mask = 0xff, 668 .def = 0x49, 669 }, 670 }, { 671 .id = 0x63, 672 .swgroup = TEGRA_SWGROUP_SDMMC4A, 673 .name = "sdmmcrab", 674 .smmu = { 675 .reg = 0x234, 676 .bit = 3, 677 }, 678 .la = { 679 .reg = 0x3c4, 680 .shift = 0, 681 .mask = 0xff, 682 .def = 0x49, 683 }, 684 }, { 685 .id = 0x64, 686 .name = "sdmmcwa", 687 .swgroup = TEGRA_SWGROUP_SDMMC1A, 688 .smmu = { 689 .reg = 0x234, 690 .bit = 4, 691 }, 692 .la = { 693 .reg = 0x3b8, 694 .shift = 16, 695 .mask = 0xff, 696 .def = 0x80, 697 }, 698 }, { 699 .id = 0x65, 700 .name = "sdmmcwaa", 701 .swgroup = TEGRA_SWGROUP_SDMMC2A, 702 .smmu = { 703 .reg = 0x234, 704 .bit = 5, 705 }, 706 .la = { 707 .reg = 0x3bc, 708 .shift = 16, 709 .mask = 0xff, 710 .def = 0x80, 711 }, 712 }, { 713 .id = 0x66, 714 .name = "sdmmcw", 715 .swgroup = TEGRA_SWGROUP_SDMMC3A, 716 .smmu = { 717 .reg = 0x234, 718 .bit = 6, 719 }, 720 .la = { 721 .reg = 0x3c0, 722 .shift = 16, 723 .mask = 0xff, 724 .def = 0x80, 725 }, 726 }, { 727 .id = 0x67, 728 .name = "sdmmcwab", 729 .swgroup = TEGRA_SWGROUP_SDMMC4A, 730 .smmu = { 731 .reg = 0x234, 732 .bit = 7, 733 }, 734 .la = { 735 .reg = 0x3c4, 736 .shift = 16, 737 .mask = 0xff, 738 .def = 0x80, 739 }, 740 }, { 741 .id = 0x6c, 742 .name = "vicsrd", 743 .swgroup = TEGRA_SWGROUP_VIC, 744 .smmu = { 745 .reg = 0x234, 746 .bit = 12, 747 }, 748 .la = { 749 .reg = 0x394, 750 .shift = 0, 751 .mask = 0xff, 752 .def = 0x1a, 753 }, 754 }, { 755 .id = 0x6d, 756 .name = "vicswr", 757 .swgroup = TEGRA_SWGROUP_VIC, 758 .smmu = { 759 .reg = 0x234, 760 .bit = 13, 761 }, 762 .la = { 763 .reg = 0x394, 764 .shift = 16, 765 .mask = 0xff, 766 .def = 0x80, 767 }, 768 }, { 769 .id = 0x72, 770 .name = "viw", 771 .swgroup = TEGRA_SWGROUP_VI, 772 .smmu = { 773 .reg = 0x234, 774 .bit = 18, 775 }, 776 .la = { 777 .reg = 0x398, 778 .shift = 0, 779 .mask = 0xff, 780 .def = 0x80, 781 }, 782 }, { 783 .id = 0x73, 784 .name = "displayd", 785 .swgroup = TEGRA_SWGROUP_DC, 786 .smmu = { 787 .reg = 0x234, 788 .bit = 19, 789 }, 790 .la = { 791 .reg = 0x3c8, 792 .shift = 0, 793 .mask = 0xff, 794 .def = 0x50, 795 }, 796 }, { 797 .id = 0x78, 798 .name = "nvdecsrd", 799 .swgroup = TEGRA_SWGROUP_NVDEC, 800 .smmu = { 801 .reg = 0x234, 802 .bit = 24, 803 }, 804 .la = { 805 .reg = 0x3d8, 806 .shift = 0, 807 .mask = 0xff, 808 .def = 0x23, 809 }, 810 }, { 811 .id = 0x79, 812 .name = "nvdecswr", 813 .swgroup = TEGRA_SWGROUP_NVDEC, 814 .smmu = { 815 .reg = 0x234, 816 .bit = 25, 817 }, 818 .la = { 819 .reg = 0x3d8, 820 .shift = 16, 821 .mask = 0xff, 822 .def = 0x80, 823 }, 824 }, { 825 .id = 0x7a, 826 .name = "aper", 827 .swgroup = TEGRA_SWGROUP_APE, 828 .smmu = { 829 .reg = 0x234, 830 .bit = 26, 831 }, 832 .la = { 833 .reg = 0x3dc, 834 .shift = 0, 835 .mask = 0xff, 836 .def = 0xff, 837 }, 838 }, { 839 .id = 0x7b, 840 .name = "apew", 841 .swgroup = TEGRA_SWGROUP_APE, 842 .smmu = { 843 .reg = 0x234, 844 .bit = 27, 845 }, 846 .la = { 847 .reg = 0x3dc, 848 .shift = 0, 849 .mask = 0xff, 850 .def = 0x80, 851 }, 852 }, { 853 .id = 0x7e, 854 .name = "nvjpgsrd", 855 .swgroup = TEGRA_SWGROUP_NVJPG, 856 .smmu = { 857 .reg = 0x234, 858 .bit = 30, 859 }, 860 .la = { 861 .reg = 0x3e4, 862 .shift = 0, 863 .mask = 0xff, 864 .def = 0x23, 865 }, 866 }, { 867 .id = 0x7f, 868 .name = "nvjpgswr", 869 .swgroup = TEGRA_SWGROUP_NVJPG, 870 .smmu = { 871 .reg = 0x234, 872 .bit = 31, 873 }, 874 .la = { 875 .reg = 0x3e4, 876 .shift = 16, 877 .mask = 0xff, 878 .def = 0x80, 879 }, 880 }, { 881 .id = 0x80, 882 .name = "sesrd", 883 .swgroup = TEGRA_SWGROUP_SE, 884 .smmu = { 885 .reg = 0xb98, 886 .bit = 0, 887 }, 888 .la = { 889 .reg = 0x3e0, 890 .shift = 0, 891 .mask = 0xff, 892 .def = 0x2e, 893 }, 894 }, { 895 .id = 0x81, 896 .name = "seswr", 897 .swgroup = TEGRA_SWGROUP_SE, 898 .smmu = { 899 .reg = 0xb98, 900 .bit = 1, 901 }, 902 .la = { 903 .reg = 0xb98, 904 .shift = 16, 905 .mask = 0xff, 906 .def = 0x80, 907 }, 908 }, { 909 .id = 0x82, 910 .name = "axiapr", 911 .swgroup = TEGRA_SWGROUP_AXIAP, 912 .smmu = { 913 .reg = 0xb98, 914 .bit = 2, 915 }, 916 .la = { 917 .reg = 0x3a0, 918 .shift = 0, 919 .mask = 0xff, 920 .def = 0xff, 921 }, 922 }, { 923 .id = 0x83, 924 .name = "axiapw", 925 .swgroup = TEGRA_SWGROUP_AXIAP, 926 .smmu = { 927 .reg = 0xb98, 928 .bit = 3, 929 }, 930 .la = { 931 .reg = 0x3a0, 932 .shift = 16, 933 .mask = 0xff, 934 .def = 0x80, 935 }, 936 }, { 937 .id = 0x84, 938 .name = "etrr", 939 .swgroup = TEGRA_SWGROUP_ETR, 940 .smmu = { 941 .reg = 0xb98, 942 .bit = 4, 943 }, 944 .la = { 945 .reg = 0x3ec, 946 .shift = 0, 947 .mask = 0xff, 948 .def = 0xff, 949 }, 950 }, { 951 .id = 0x85, 952 .name = "etrw", 953 .swgroup = TEGRA_SWGROUP_ETR, 954 .smmu = { 955 .reg = 0xb98, 956 .bit = 5, 957 }, 958 .la = { 959 .reg = 0x3ec, 960 .shift = 16, 961 .mask = 0xff, 962 .def = 0xff, 963 }, 964 }, { 965 .id = 0x86, 966 .name = "tsecsrdb", 967 .swgroup = TEGRA_SWGROUP_TSECB, 968 .smmu = { 969 .reg = 0xb98, 970 .bit = 6, 971 }, 972 .la = { 973 .reg = 0x3f0, 974 .shift = 0, 975 .mask = 0xff, 976 .def = 0x9b, 977 }, 978 }, { 979 .id = 0x87, 980 .name = "tsecswrb", 981 .swgroup = TEGRA_SWGROUP_TSECB, 982 .smmu = { 983 .reg = 0xb98, 984 .bit = 7, 985 }, 986 .la = { 987 .reg = 0x3f0, 988 .shift = 16, 989 .mask = 0xff, 990 .def = 0x80, 991 }, 992 }, { 993 .id = 0x88, 994 .name = "gpusrd2", 995 .swgroup = TEGRA_SWGROUP_GPU, 996 .smmu = { 997 /* read-only */ 998 .reg = 0xb98, 999 .bit = 8, 1000 }, 1001 .la = { 1002 .reg = 0x3e8, 1003 .shift = 0, 1004 .mask = 0xff, 1005 .def = 0x1a, 1006 }, 1007 }, { 1008 .id = 0x89, 1009 .name = "gpuswr2", 1010 .swgroup = TEGRA_SWGROUP_GPU, 1011 .smmu = { 1012 /* read-only */ 1013 .reg = 0xb98, 1014 .bit = 9, 1015 }, 1016 .la = { 1017 .reg = 0x3e8, 1018 .shift = 16, 1019 .mask = 0xff, 1020 .def = 0x80, 1021 }, 1022 }, 1023 }; 1024 1025 static const struct tegra_smmu_swgroup tegra210_swgroups[] = { 1026 { .name = "dc", .swgroup = TEGRA_SWGROUP_DC, .reg = 0x240 }, 1027 { .name = "dcb", .swgroup = TEGRA_SWGROUP_DCB, .reg = 0x244 }, 1028 { .name = "afi", .swgroup = TEGRA_SWGROUP_AFI, .reg = 0x238 }, 1029 { .name = "avpc", .swgroup = TEGRA_SWGROUP_AVPC, .reg = 0x23c }, 1030 { .name = "hda", .swgroup = TEGRA_SWGROUP_HDA, .reg = 0x254 }, 1031 { .name = "hc", .swgroup = TEGRA_SWGROUP_HC, .reg = 0x250 }, 1032 { .name = "nvenc", .swgroup = TEGRA_SWGROUP_NVENC, .reg = 0x264 }, 1033 { .name = "ppcs", .swgroup = TEGRA_SWGROUP_PPCS, .reg = 0x270 }, 1034 { .name = "sata", .swgroup = TEGRA_SWGROUP_SATA, .reg = 0x274 }, 1035 { .name = "isp2", .swgroup = TEGRA_SWGROUP_ISP2, .reg = 0x258 }, 1036 { .name = "xusb_host", .swgroup = TEGRA_SWGROUP_XUSB_HOST, .reg = 0x288 }, 1037 { .name = "xusb_dev", .swgroup = TEGRA_SWGROUP_XUSB_DEV, .reg = 0x28c }, 1038 { .name = "isp2b", .swgroup = TEGRA_SWGROUP_ISP2B, .reg = 0xaa4 }, 1039 { .name = "tsec", .swgroup = TEGRA_SWGROUP_TSEC, .reg = 0x294 }, 1040 { .name = "a9avp", .swgroup = TEGRA_SWGROUP_A9AVP, .reg = 0x290 }, 1041 { .name = "gpu", .swgroup = TEGRA_SWGROUP_GPU, .reg = 0xaac }, 1042 { .name = "sdmmc1a", .swgroup = TEGRA_SWGROUP_SDMMC1A, .reg = 0xa94 }, 1043 { .name = "sdmmc2a", .swgroup = TEGRA_SWGROUP_SDMMC2A, .reg = 0xa98 }, 1044 { .name = "sdmmc3a", .swgroup = TEGRA_SWGROUP_SDMMC3A, .reg = 0xa9c }, 1045 { .name = "sdmmc4a", .swgroup = TEGRA_SWGROUP_SDMMC4A, .reg = 0xaa0 }, 1046 { .name = "vic", .swgroup = TEGRA_SWGROUP_VIC, .reg = 0x284 }, 1047 { .name = "vi", .swgroup = TEGRA_SWGROUP_VI, .reg = 0x280 }, 1048 { .name = "nvdec", .swgroup = TEGRA_SWGROUP_NVDEC, .reg = 0xab4 }, 1049 { .name = "ape", .swgroup = TEGRA_SWGROUP_APE, .reg = 0xab8 }, 1050 { .name = "nvjpg", .swgroup = TEGRA_SWGROUP_NVJPG, .reg = 0xac0 }, 1051 { .name = "se", .swgroup = TEGRA_SWGROUP_SE, .reg = 0xabc }, 1052 { .name = "axiap", .swgroup = TEGRA_SWGROUP_AXIAP, .reg = 0xacc }, 1053 { .name = "etr", .swgroup = TEGRA_SWGROUP_ETR, .reg = 0xad0 }, 1054 { .name = "tsecb", .swgroup = TEGRA_SWGROUP_TSECB, .reg = 0xad4 }, 1055 }; 1056 1057 static const unsigned int tegra210_group_display[] = { 1058 TEGRA_SWGROUP_DC, 1059 TEGRA_SWGROUP_DCB, 1060 }; 1061 1062 static const struct tegra_smmu_group_soc tegra210_groups[] = { 1063 { 1064 .name = "display", 1065 .swgroups = tegra210_group_display, 1066 .num_swgroups = ARRAY_SIZE(tegra210_group_display), 1067 }, 1068 }; 1069 1070 static const struct tegra_smmu_soc tegra210_smmu_soc = { 1071 .clients = tegra210_mc_clients, 1072 .num_clients = ARRAY_SIZE(tegra210_mc_clients), 1073 .swgroups = tegra210_swgroups, 1074 .num_swgroups = ARRAY_SIZE(tegra210_swgroups), 1075 .groups = tegra210_groups, 1076 .num_groups = ARRAY_SIZE(tegra210_groups), 1077 .supports_round_robin_arbitration = true, 1078 .supports_request_limit = true, 1079 .num_tlb_lines = 32, 1080 .num_asids = 128, 1081 }; 1082 1083 #define TEGRA210_MC_RESET(_name, _control, _status, _bit) \ 1084 { \ 1085 .name = #_name, \ 1086 .id = TEGRA210_MC_RESET_##_name, \ 1087 .control = _control, \ 1088 .status = _status, \ 1089 .bit = _bit, \ 1090 } 1091 1092 static const struct tegra_mc_reset tegra210_mc_resets[] = { 1093 TEGRA210_MC_RESET(AFI, 0x200, 0x204, 0), 1094 TEGRA210_MC_RESET(AVPC, 0x200, 0x204, 1), 1095 TEGRA210_MC_RESET(DC, 0x200, 0x204, 2), 1096 TEGRA210_MC_RESET(DCB, 0x200, 0x204, 3), 1097 TEGRA210_MC_RESET(HC, 0x200, 0x204, 6), 1098 TEGRA210_MC_RESET(HDA, 0x200, 0x204, 7), 1099 TEGRA210_MC_RESET(ISP2, 0x200, 0x204, 8), 1100 TEGRA210_MC_RESET(MPCORE, 0x200, 0x204, 9), 1101 TEGRA210_MC_RESET(NVENC, 0x200, 0x204, 11), 1102 TEGRA210_MC_RESET(PPCS, 0x200, 0x204, 14), 1103 TEGRA210_MC_RESET(SATA, 0x200, 0x204, 15), 1104 TEGRA210_MC_RESET(VI, 0x200, 0x204, 17), 1105 TEGRA210_MC_RESET(VIC, 0x200, 0x204, 18), 1106 TEGRA210_MC_RESET(XUSB_HOST, 0x200, 0x204, 19), 1107 TEGRA210_MC_RESET(XUSB_DEV, 0x200, 0x204, 20), 1108 TEGRA210_MC_RESET(A9AVP, 0x200, 0x204, 21), 1109 TEGRA210_MC_RESET(TSEC, 0x200, 0x204, 22), 1110 TEGRA210_MC_RESET(SDMMC1, 0x200, 0x204, 29), 1111 TEGRA210_MC_RESET(SDMMC2, 0x200, 0x204, 30), 1112 TEGRA210_MC_RESET(SDMMC3, 0x200, 0x204, 31), 1113 TEGRA210_MC_RESET(SDMMC4, 0x970, 0x974, 0), 1114 TEGRA210_MC_RESET(ISP2B, 0x970, 0x974, 1), 1115 TEGRA210_MC_RESET(GPU, 0x970, 0x974, 2), 1116 TEGRA210_MC_RESET(NVDEC, 0x970, 0x974, 5), 1117 TEGRA210_MC_RESET(APE, 0x970, 0x974, 6), 1118 TEGRA210_MC_RESET(SE, 0x970, 0x974, 7), 1119 TEGRA210_MC_RESET(NVJPG, 0x970, 0x974, 8), 1120 TEGRA210_MC_RESET(AXIAP, 0x970, 0x974, 11), 1121 TEGRA210_MC_RESET(ETR, 0x970, 0x974, 12), 1122 TEGRA210_MC_RESET(TSECB, 0x970, 0x974, 13), 1123 }; 1124 1125 const struct tegra_mc_soc tegra210_mc_soc = { 1126 .clients = tegra210_mc_clients, 1127 .num_clients = ARRAY_SIZE(tegra210_mc_clients), 1128 .num_address_bits = 34, 1129 .atom_size = 64, 1130 .client_id_mask = 0xff, 1131 .smmu = &tegra210_smmu_soc, 1132 .intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR | 1133 MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE | 1134 MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, 1135 .reset_ops = &terga_mc_reset_ops_common, 1136 .resets = tegra210_mc_resets, 1137 .num_resets = ARRAY_SIZE(tegra210_mc_resets), 1138 }; 1139