Linux Audio

Check our new training course

In-person Linux kernel drivers training

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