Merge tag 'block-5.11-2021-01-10' of git://git.kernel.dk/linux-block
[linux/fpc-iii.git] / drivers / memory / tegra / tegra114.c
blobed376ba2d2fed82f201c18a060673b22b4ca6305
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (C) 2014 NVIDIA CORPORATION. All rights reserved.
4 */
6 #include <linux/of.h>
7 #include <linux/mm.h>
9 #include <dt-bindings/memory/tegra114-mc.h>
11 #include "mc.h"
13 static const struct tegra_mc_client tegra114_mc_clients[] = {
15 .id = 0x00,
16 .name = "ptcr",
17 .swgroup = TEGRA_SWGROUP_PTC,
18 .la = {
19 .reg = 0x34c,
20 .shift = 0,
21 .mask = 0xff,
22 .def = 0x0,
24 }, {
25 .id = 0x01,
26 .name = "display0a",
27 .swgroup = TEGRA_SWGROUP_DC,
28 .smmu = {
29 .reg = 0x228,
30 .bit = 1,
32 .la = {
33 .reg = 0x2e8,
34 .shift = 0,
35 .mask = 0xff,
36 .def = 0x4e,
38 }, {
39 .id = 0x02,
40 .name = "display0ab",
41 .swgroup = TEGRA_SWGROUP_DCB,
42 .smmu = {
43 .reg = 0x228,
44 .bit = 2,
46 .la = {
47 .reg = 0x2f4,
48 .shift = 0,
49 .mask = 0xff,
50 .def = 0x4e,
52 }, {
53 .id = 0x03,
54 .name = "display0b",
55 .swgroup = TEGRA_SWGROUP_DC,
56 .smmu = {
57 .reg = 0x228,
58 .bit = 3,
60 .la = {
61 .reg = 0x2e8,
62 .shift = 16,
63 .mask = 0xff,
64 .def = 0x4e,
66 }, {
67 .id = 0x04,
68 .name = "display0bb",
69 .swgroup = TEGRA_SWGROUP_DCB,
70 .smmu = {
71 .reg = 0x228,
72 .bit = 4,
74 .la = {
75 .reg = 0x2f4,
76 .shift = 16,
77 .mask = 0xff,
78 .def = 0x4e,
80 }, {
81 .id = 0x05,
82 .name = "display0c",
83 .swgroup = TEGRA_SWGROUP_DC,
84 .smmu = {
85 .reg = 0x228,
86 .bit = 5,
88 .la = {
89 .reg = 0x2ec,
90 .shift = 0,
91 .mask = 0xff,
92 .def = 0x4e,
94 }, {
95 .id = 0x06,
96 .name = "display0cb",
97 .swgroup = TEGRA_SWGROUP_DCB,
98 .smmu = {
99 .reg = 0x228,
100 .bit = 6,
102 .la = {
103 .reg = 0x2f8,
104 .shift = 0,
105 .mask = 0xff,
106 .def = 0x4e,
108 }, {
109 .id = 0x09,
110 .name = "eppup",
111 .swgroup = TEGRA_SWGROUP_EPP,
112 .smmu = {
113 .reg = 0x228,
114 .bit = 9,
116 .la = {
117 .reg = 0x300,
118 .shift = 0,
119 .mask = 0xff,
120 .def = 0x33,
122 }, {
123 .id = 0x0a,
124 .name = "g2pr",
125 .swgroup = TEGRA_SWGROUP_G2,
126 .smmu = {
127 .reg = 0x228,
128 .bit = 10,
130 .la = {
131 .reg = 0x308,
132 .shift = 0,
133 .mask = 0xff,
134 .def = 0x09,
136 }, {
137 .id = 0x0b,
138 .name = "g2sr",
139 .swgroup = TEGRA_SWGROUP_G2,
140 .smmu = {
141 .reg = 0x228,
142 .bit = 11,
144 .la = {
145 .reg = 0x308,
146 .shift = 16,
147 .mask = 0xff,
148 .def = 0x09,
150 }, {
151 .id = 0x0f,
152 .name = "avpcarm7r",
153 .swgroup = TEGRA_SWGROUP_AVPC,
154 .smmu = {
155 .reg = 0x228,
156 .bit = 15,
158 .la = {
159 .reg = 0x2e4,
160 .shift = 0,
161 .mask = 0xff,
162 .def = 0x04,
164 }, {
165 .id = 0x10,
166 .name = "displayhc",
167 .swgroup = TEGRA_SWGROUP_DC,
168 .smmu = {
169 .reg = 0x228,
170 .bit = 16,
172 .la = {
173 .reg = 0x2f0,
174 .shift = 0,
175 .mask = 0xff,
176 .def = 0x68,
178 }, {
179 .id = 0x11,
180 .name = "displayhcb",
181 .swgroup = TEGRA_SWGROUP_DCB,
182 .smmu = {
183 .reg = 0x228,
184 .bit = 17,
186 .la = {
187 .reg = 0x2fc,
188 .shift = 0,
189 .mask = 0xff,
190 .def = 0x68,
192 }, {
193 .id = 0x12,
194 .name = "fdcdrd",
195 .swgroup = TEGRA_SWGROUP_NV,
196 .smmu = {
197 .reg = 0x228,
198 .bit = 18,
200 .la = {
201 .reg = 0x334,
202 .shift = 0,
203 .mask = 0xff,
204 .def = 0x0c,
206 }, {
207 .id = 0x13,
208 .name = "fdcdrd2",
209 .swgroup = TEGRA_SWGROUP_NV,
210 .smmu = {
211 .reg = 0x228,
212 .bit = 19,
214 .la = {
215 .reg = 0x33c,
216 .shift = 0,
217 .mask = 0xff,
218 .def = 0x0c,
220 }, {
221 .id = 0x14,
222 .name = "g2dr",
223 .swgroup = TEGRA_SWGROUP_G2,
224 .smmu = {
225 .reg = 0x228,
226 .bit = 20,
228 .la = {
229 .reg = 0x30c,
230 .shift = 0,
231 .mask = 0xff,
232 .def = 0x0a,
234 }, {
235 .id = 0x15,
236 .name = "hdar",
237 .swgroup = TEGRA_SWGROUP_HDA,
238 .smmu = {
239 .reg = 0x228,
240 .bit = 21,
242 .la = {
243 .reg = 0x318,
244 .shift = 0,
245 .mask = 0xff,
246 .def = 0xff,
248 }, {
249 .id = 0x16,
250 .name = "host1xdmar",
251 .swgroup = TEGRA_SWGROUP_HC,
252 .smmu = {
253 .reg = 0x228,
254 .bit = 22,
256 .la = {
257 .reg = 0x310,
258 .shift = 0,
259 .mask = 0xff,
260 .def = 0x10,
262 }, {
263 .id = 0x17,
264 .name = "host1xr",
265 .swgroup = TEGRA_SWGROUP_HC,
266 .smmu = {
267 .reg = 0x228,
268 .bit = 23,
270 .la = {
271 .reg = 0x310,
272 .shift = 16,
273 .mask = 0xff,
274 .def = 0xa5,
276 }, {
277 .id = 0x18,
278 .name = "idxsrd",
279 .swgroup = TEGRA_SWGROUP_NV,
280 .smmu = {
281 .reg = 0x228,
282 .bit = 24,
284 .la = {
285 .reg = 0x334,
286 .shift = 16,
287 .mask = 0xff,
288 .def = 0x0b,
290 }, {
291 .id = 0x1c,
292 .name = "msencsrd",
293 .swgroup = TEGRA_SWGROUP_MSENC,
294 .smmu = {
295 .reg = 0x228,
296 .bit = 28,
298 .la = {
299 .reg = 0x328,
300 .shift = 0,
301 .mask = 0xff,
302 .def = 0x80,
304 }, {
305 .id = 0x1d,
306 .name = "ppcsahbdmar",
307 .swgroup = TEGRA_SWGROUP_PPCS,
308 .smmu = {
309 .reg = 0x228,
310 .bit = 29,
312 .la = {
313 .reg = 0x344,
314 .shift = 0,
315 .mask = 0xff,
316 .def = 0x50,
318 }, {
319 .id = 0x1e,
320 .name = "ppcsahbslvr",
321 .swgroup = TEGRA_SWGROUP_PPCS,
322 .smmu = {
323 .reg = 0x228,
324 .bit = 30,
326 .la = {
327 .reg = 0x344,
328 .shift = 16,
329 .mask = 0xff,
330 .def = 0xe8,
332 }, {
333 .id = 0x20,
334 .name = "texl2srd",
335 .swgroup = TEGRA_SWGROUP_NV,
336 .smmu = {
337 .reg = 0x22c,
338 .bit = 0,
340 .la = {
341 .reg = 0x338,
342 .shift = 0,
343 .mask = 0xff,
344 .def = 0x0c,
346 }, {
347 .id = 0x22,
348 .name = "vdebsevr",
349 .swgroup = TEGRA_SWGROUP_VDE,
350 .smmu = {
351 .reg = 0x22c,
352 .bit = 2,
354 .la = {
355 .reg = 0x354,
356 .shift = 0,
357 .mask = 0xff,
358 .def = 0xff,
360 }, {
361 .id = 0x23,
362 .name = "vdember",
363 .swgroup = TEGRA_SWGROUP_VDE,
364 .smmu = {
365 .reg = 0x22c,
366 .bit = 3,
368 .la = {
369 .reg = 0x354,
370 .shift = 16,
371 .mask = 0xff,
372 .def = 0xff,
374 }, {
375 .id = 0x24,
376 .name = "vdemcer",
377 .swgroup = TEGRA_SWGROUP_VDE,
378 .smmu = {
379 .reg = 0x22c,
380 .bit = 4,
382 .la = {
383 .reg = 0x358,
384 .shift = 0,
385 .mask = 0xff,
386 .def = 0xb8,
388 }, {
389 .id = 0x25,
390 .name = "vdetper",
391 .swgroup = TEGRA_SWGROUP_VDE,
392 .smmu = {
393 .reg = 0x22c,
394 .bit = 5,
396 .la = {
397 .reg = 0x358,
398 .shift = 16,
399 .mask = 0xff,
400 .def = 0xee,
402 }, {
403 .id = 0x26,
404 .name = "mpcorelpr",
405 .swgroup = TEGRA_SWGROUP_MPCORELP,
406 .la = {
407 .reg = 0x324,
408 .shift = 0,
409 .mask = 0xff,
410 .def = 0x04,
412 }, {
413 .id = 0x27,
414 .name = "mpcorer",
415 .swgroup = TEGRA_SWGROUP_MPCORE,
416 .la = {
417 .reg = 0x320,
418 .shift = 0,
419 .mask = 0xff,
420 .def = 0x04,
422 }, {
423 .id = 0x28,
424 .name = "eppu",
425 .swgroup = TEGRA_SWGROUP_EPP,
426 .smmu = {
427 .reg = 0x22c,
428 .bit = 8,
430 .la = {
431 .reg = 0x300,
432 .shift = 16,
433 .mask = 0xff,
434 .def = 0x33,
436 }, {
437 .id = 0x29,
438 .name = "eppv",
439 .swgroup = TEGRA_SWGROUP_EPP,
440 .smmu = {
441 .reg = 0x22c,
442 .bit = 9,
444 .la = {
445 .reg = 0x304,
446 .shift = 0,
447 .mask = 0xff,
448 .def = 0x6c,
450 }, {
451 .id = 0x2a,
452 .name = "eppy",
453 .swgroup = TEGRA_SWGROUP_EPP,
454 .smmu = {
455 .reg = 0x22c,
456 .bit = 10,
458 .la = {
459 .reg = 0x304,
460 .shift = 16,
461 .mask = 0xff,
462 .def = 0x6c,
464 }, {
465 .id = 0x2b,
466 .name = "msencswr",
467 .swgroup = TEGRA_SWGROUP_MSENC,
468 .smmu = {
469 .reg = 0x22c,
470 .bit = 11,
472 .la = {
473 .reg = 0x328,
474 .shift = 16,
475 .mask = 0xff,
476 .def = 0x80,
478 }, {
479 .id = 0x2c,
480 .name = "viwsb",
481 .swgroup = TEGRA_SWGROUP_VI,
482 .smmu = {
483 .reg = 0x22c,
484 .bit = 12,
486 .la = {
487 .reg = 0x364,
488 .shift = 0,
489 .mask = 0xff,
490 .def = 0x47,
492 }, {
493 .id = 0x2d,
494 .name = "viwu",
495 .swgroup = TEGRA_SWGROUP_VI,
496 .smmu = {
497 .reg = 0x22c,
498 .bit = 13,
500 .la = {
501 .reg = 0x368,
502 .shift = 0,
503 .mask = 0xff,
504 .def = 0xff,
506 }, {
507 .id = 0x2e,
508 .name = "viwv",
509 .swgroup = TEGRA_SWGROUP_VI,
510 .smmu = {
511 .reg = 0x22c,
512 .bit = 14,
514 .la = {
515 .reg = 0x368,
516 .shift = 16,
517 .mask = 0xff,
518 .def = 0xff,
520 }, {
521 .id = 0x2f,
522 .name = "viwy",
523 .swgroup = TEGRA_SWGROUP_VI,
524 .smmu = {
525 .reg = 0x22c,
526 .bit = 15,
528 .la = {
529 .reg = 0x36c,
530 .shift = 0,
531 .mask = 0xff,
532 .def = 0x47,
534 }, {
535 .id = 0x30,
536 .name = "g2dw",
537 .swgroup = TEGRA_SWGROUP_G2,
538 .smmu = {
539 .reg = 0x22c,
540 .bit = 16,
542 .la = {
543 .reg = 0x30c,
544 .shift = 16,
545 .mask = 0xff,
546 .def = 0x9,
548 }, {
549 .id = 0x32,
550 .name = "avpcarm7w",
551 .swgroup = TEGRA_SWGROUP_AVPC,
552 .smmu = {
553 .reg = 0x22c,
554 .bit = 18,
556 .la = {
557 .reg = 0x2e4,
558 .shift = 16,
559 .mask = 0xff,
560 .def = 0x0e,
562 }, {
563 .id = 0x33,
564 .name = "fdcdwr",
565 .swgroup = TEGRA_SWGROUP_NV,
566 .smmu = {
567 .reg = 0x22c,
568 .bit = 19,
570 .la = {
571 .reg = 0x338,
572 .shift = 16,
573 .mask = 0xff,
574 .def = 0x10,
576 }, {
577 .id = 0x34,
578 .name = "fdcdwr2",
579 .swgroup = TEGRA_SWGROUP_NV,
580 .smmu = {
581 .reg = 0x22c,
582 .bit = 20,
584 .la = {
585 .reg = 0x340,
586 .shift = 0,
587 .mask = 0xff,
588 .def = 0x10,
590 }, {
591 .id = 0x35,
592 .name = "hdaw",
593 .swgroup = TEGRA_SWGROUP_HDA,
594 .smmu = {
595 .reg = 0x22c,
596 .bit = 21,
598 .la = {
599 .reg = 0x318,
600 .shift = 16,
601 .mask = 0xff,
602 .def = 0xff,
604 }, {
605 .id = 0x36,
606 .name = "host1xw",
607 .swgroup = TEGRA_SWGROUP_HC,
608 .smmu = {
609 .reg = 0x22c,
610 .bit = 22,
612 .la = {
613 .reg = 0x314,
614 .shift = 0,
615 .mask = 0xff,
616 .def = 0x25,
618 }, {
619 .id = 0x37,
620 .name = "ispw",
621 .swgroup = TEGRA_SWGROUP_ISP,
622 .smmu = {
623 .reg = 0x22c,
624 .bit = 23,
626 .la = {
627 .reg = 0x31c,
628 .shift = 0,
629 .mask = 0xff,
630 .def = 0xff,
632 }, {
633 .id = 0x38,
634 .name = "mpcorelpw",
635 .swgroup = TEGRA_SWGROUP_MPCORELP,
636 .la = {
637 .reg = 0x324,
638 .shift = 16,
639 .mask = 0xff,
640 .def = 0x80,
642 }, {
643 .id = 0x39,
644 .name = "mpcorew",
645 .swgroup = TEGRA_SWGROUP_MPCORE,
646 .la = {
647 .reg = 0x320,
648 .shift = 16,
649 .mask = 0xff,
650 .def = 0x0e,
652 }, {
653 .id = 0x3b,
654 .name = "ppcsahbdmaw",
655 .swgroup = TEGRA_SWGROUP_PPCS,
656 .smmu = {
657 .reg = 0x22c,
658 .bit = 27,
660 .la = {
661 .reg = 0x348,
662 .shift = 0,
663 .mask = 0xff,
664 .def = 0xa5,
666 }, {
667 .id = 0x3c,
668 .name = "ppcsahbslvw",
669 .swgroup = TEGRA_SWGROUP_PPCS,
670 .smmu = {
671 .reg = 0x22c,
672 .bit = 28,
674 .la = {
675 .reg = 0x348,
676 .shift = 16,
677 .mask = 0xff,
678 .def = 0xe8,
680 }, {
681 .id = 0x3e,
682 .name = "vdebsevw",
683 .swgroup = TEGRA_SWGROUP_VDE,
684 .smmu = {
685 .reg = 0x22c,
686 .bit = 30,
688 .la = {
689 .reg = 0x35c,
690 .shift = 0,
691 .mask = 0xff,
692 .def = 0xff,
694 }, {
695 .id = 0x3f,
696 .name = "vdedbgw",
697 .swgroup = TEGRA_SWGROUP_VDE,
698 .smmu = {
699 .reg = 0x22c,
700 .bit = 31,
702 .la = {
703 .reg = 0x35c,
704 .shift = 16,
705 .mask = 0xff,
706 .def = 0xff,
708 }, {
709 .id = 0x40,
710 .name = "vdembew",
711 .swgroup = TEGRA_SWGROUP_VDE,
712 .smmu = {
713 .reg = 0x230,
714 .bit = 0,
716 .la = {
717 .reg = 0x360,
718 .shift = 0,
719 .mask = 0xff,
720 .def = 0x89,
722 }, {
723 .id = 0x41,
724 .name = "vdetpmw",
725 .swgroup = TEGRA_SWGROUP_VDE,
726 .smmu = {
727 .reg = 0x230,
728 .bit = 1,
730 .la = {
731 .reg = 0x360,
732 .shift = 16,
733 .mask = 0xff,
734 .def = 0x59,
736 }, {
737 .id = 0x4a,
738 .name = "xusb_hostr",
739 .swgroup = TEGRA_SWGROUP_XUSB_HOST,
740 .smmu = {
741 .reg = 0x230,
742 .bit = 10,
744 .la = {
745 .reg = 0x37c,
746 .shift = 0,
747 .mask = 0xff,
748 .def = 0xa5,
750 }, {
751 .id = 0x4b,
752 .name = "xusb_hostw",
753 .swgroup = TEGRA_SWGROUP_XUSB_HOST,
754 .smmu = {
755 .reg = 0x230,
756 .bit = 11,
758 .la = {
759 .reg = 0x37c,
760 .shift = 16,
761 .mask = 0xff,
762 .def = 0xa5,
764 }, {
765 .id = 0x4c,
766 .name = "xusb_devr",
767 .swgroup = TEGRA_SWGROUP_XUSB_DEV,
768 .smmu = {
769 .reg = 0x230,
770 .bit = 12,
772 .la = {
773 .reg = 0x380,
774 .shift = 0,
775 .mask = 0xff,
776 .def = 0xa5,
778 }, {
779 .id = 0x4d,
780 .name = "xusb_devw",
781 .swgroup = TEGRA_SWGROUP_XUSB_DEV,
782 .smmu = {
783 .reg = 0x230,
784 .bit = 13,
786 .la = {
787 .reg = 0x380,
788 .shift = 16,
789 .mask = 0xff,
790 .def = 0xa5,
792 }, {
793 .id = 0x4e,
794 .name = "fdcdwr3",
795 .swgroup = TEGRA_SWGROUP_NV,
796 .smmu = {
797 .reg = 0x230,
798 .bit = 14,
800 .la = {
801 .reg = 0x388,
802 .shift = 0,
803 .mask = 0xff,
804 .def = 0x10,
806 }, {
807 .id = 0x4f,
808 .name = "fdcdrd3",
809 .swgroup = TEGRA_SWGROUP_NV,
810 .smmu = {
811 .reg = 0x230,
812 .bit = 15,
814 .la = {
815 .reg = 0x384,
816 .shift = 0,
817 .mask = 0xff,
818 .def = 0x0c,
820 }, {
821 .id = 0x50,
822 .name = "fdcwr4",
823 .swgroup = TEGRA_SWGROUP_NV,
824 .smmu = {
825 .reg = 0x230,
826 .bit = 16,
828 .la = {
829 .reg = 0x388,
830 .shift = 16,
831 .mask = 0xff,
832 .def = 0x10,
834 }, {
835 .id = 0x51,
836 .name = "fdcrd4",
837 .swgroup = TEGRA_SWGROUP_NV,
838 .smmu = {
839 .reg = 0x230,
840 .bit = 17,
842 .la = {
843 .reg = 0x384,
844 .shift = 16,
845 .mask = 0xff,
846 .def = 0x0c,
848 }, {
849 .id = 0x52,
850 .name = "emucifr",
851 .swgroup = TEGRA_SWGROUP_EMUCIF,
852 .la = {
853 .reg = 0x38c,
854 .shift = 0,
855 .mask = 0xff,
856 .def = 0x04,
858 }, {
859 .id = 0x53,
860 .name = "emucifw",
861 .swgroup = TEGRA_SWGROUP_EMUCIF,
862 .la = {
863 .reg = 0x38c,
864 .shift = 16,
865 .mask = 0xff,
866 .def = 0x0e,
868 }, {
869 .id = 0x54,
870 .name = "tsecsrd",
871 .swgroup = TEGRA_SWGROUP_TSEC,
872 .smmu = {
873 .reg = 0x230,
874 .bit = 20,
876 .la = {
877 .reg = 0x390,
878 .shift = 0,
879 .mask = 0xff,
880 .def = 0x50,
882 }, {
883 .id = 0x55,
884 .name = "tsecswr",
885 .swgroup = TEGRA_SWGROUP_TSEC,
886 .smmu = {
887 .reg = 0x230,
888 .bit = 21,
890 .la = {
891 .reg = 0x390,
892 .shift = 16,
893 .mask = 0xff,
894 .def = 0x50,
899 static const struct tegra_smmu_swgroup tegra114_swgroups[] = {
900 { .name = "dc", .swgroup = TEGRA_SWGROUP_DC, .reg = 0x240 },
901 { .name = "dcb", .swgroup = TEGRA_SWGROUP_DCB, .reg = 0x244 },
902 { .name = "epp", .swgroup = TEGRA_SWGROUP_EPP, .reg = 0x248 },
903 { .name = "g2", .swgroup = TEGRA_SWGROUP_G2, .reg = 0x24c },
904 { .name = "avpc", .swgroup = TEGRA_SWGROUP_AVPC, .reg = 0x23c },
905 { .name = "nv", .swgroup = TEGRA_SWGROUP_NV, .reg = 0x268 },
906 { .name = "hda", .swgroup = TEGRA_SWGROUP_HDA, .reg = 0x254 },
907 { .name = "hc", .swgroup = TEGRA_SWGROUP_HC, .reg = 0x250 },
908 { .name = "msenc", .swgroup = TEGRA_SWGROUP_MSENC, .reg = 0x264 },
909 { .name = "ppcs", .swgroup = TEGRA_SWGROUP_PPCS, .reg = 0x270 },
910 { .name = "vde", .swgroup = TEGRA_SWGROUP_VDE, .reg = 0x27c },
911 { .name = "vi", .swgroup = TEGRA_SWGROUP_VI, .reg = 0x280 },
912 { .name = "isp", .swgroup = TEGRA_SWGROUP_ISP, .reg = 0x258 },
913 { .name = "xusb_host", .swgroup = TEGRA_SWGROUP_XUSB_HOST, .reg = 0x288 },
914 { .name = "xusb_dev", .swgroup = TEGRA_SWGROUP_XUSB_DEV, .reg = 0x28c },
915 { .name = "tsec", .swgroup = TEGRA_SWGROUP_TSEC, .reg = 0x294 },
918 static const unsigned int tegra114_group_drm[] = {
919 TEGRA_SWGROUP_DC,
920 TEGRA_SWGROUP_DCB,
921 TEGRA_SWGROUP_G2,
922 TEGRA_SWGROUP_NV,
925 static const struct tegra_smmu_group_soc tegra114_groups[] = {
927 .name = "drm",
928 .swgroups = tegra114_group_drm,
929 .num_swgroups = ARRAY_SIZE(tegra114_group_drm),
933 static const struct tegra_smmu_soc tegra114_smmu_soc = {
934 .clients = tegra114_mc_clients,
935 .num_clients = ARRAY_SIZE(tegra114_mc_clients),
936 .swgroups = tegra114_swgroups,
937 .num_swgroups = ARRAY_SIZE(tegra114_swgroups),
938 .groups = tegra114_groups,
939 .num_groups = ARRAY_SIZE(tegra114_groups),
940 .supports_round_robin_arbitration = false,
941 .supports_request_limit = false,
942 .num_tlb_lines = 32,
943 .num_asids = 4,
946 #define TEGRA114_MC_RESET(_name, _control, _status, _bit) \
948 .name = #_name, \
949 .id = TEGRA114_MC_RESET_##_name, \
950 .control = _control, \
951 .status = _status, \
952 .bit = _bit, \
955 static const struct tegra_mc_reset tegra114_mc_resets[] = {
956 TEGRA114_MC_RESET(AVPC, 0x200, 0x204, 1),
957 TEGRA114_MC_RESET(DC, 0x200, 0x204, 2),
958 TEGRA114_MC_RESET(DCB, 0x200, 0x204, 3),
959 TEGRA114_MC_RESET(EPP, 0x200, 0x204, 4),
960 TEGRA114_MC_RESET(2D, 0x200, 0x204, 5),
961 TEGRA114_MC_RESET(HC, 0x200, 0x204, 6),
962 TEGRA114_MC_RESET(HDA, 0x200, 0x204, 7),
963 TEGRA114_MC_RESET(ISP, 0x200, 0x204, 8),
964 TEGRA114_MC_RESET(MPCORE, 0x200, 0x204, 9),
965 TEGRA114_MC_RESET(MPCORELP, 0x200, 0x204, 10),
966 TEGRA114_MC_RESET(MPE, 0x200, 0x204, 11),
967 TEGRA114_MC_RESET(3D, 0x200, 0x204, 12),
968 TEGRA114_MC_RESET(3D2, 0x200, 0x204, 13),
969 TEGRA114_MC_RESET(PPCS, 0x200, 0x204, 14),
970 TEGRA114_MC_RESET(VDE, 0x200, 0x204, 16),
971 TEGRA114_MC_RESET(VI, 0x200, 0x204, 17),
974 const struct tegra_mc_soc tegra114_mc_soc = {
975 .clients = tegra114_mc_clients,
976 .num_clients = ARRAY_SIZE(tegra114_mc_clients),
977 .num_address_bits = 32,
978 .atom_size = 32,
979 .client_id_mask = 0x7f,
980 .smmu = &tegra114_smmu_soc,
981 .intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION |
982 MC_INT_DECERR_EMEM,
983 .reset_ops = &tegra_mc_reset_ops_common,
984 .resets = tegra114_mc_resets,
985 .num_resets = ARRAY_SIZE(tegra114_mc_resets),