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