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