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