Merge tag 'net-5.14-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / drivers / memory / tegra / tegra210.c
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                 .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
1166 static 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
1208 static const unsigned int tegra210_group_display[] = {
1209         TEGRA_SWGROUP_DC,
1210         TEGRA_SWGROUP_DCB,
1211 };
1212
1213 static 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
1221 static 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
1243 static 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
1276 const 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 };