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