xref: /OK3568_Linux_fs/kernel/drivers/memory/tegra/tegra30.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2014 NVIDIA CORPORATION.  All rights reserved.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <linux/of.h>
7*4882a593Smuzhiyun #include <linux/mm.h>
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <dt-bindings/memory/tegra30-mc.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "mc.h"
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun static const unsigned long tegra30_mc_emem_regs[] = {
14*4882a593Smuzhiyun 	MC_EMEM_ARB_CFG,
15*4882a593Smuzhiyun 	MC_EMEM_ARB_OUTSTANDING_REQ,
16*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_RCD,
17*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_RP,
18*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_RC,
19*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_RAS,
20*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_FAW,
21*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_RRD,
22*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_RAP2PRE,
23*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_WAP2PRE,
24*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_R2R,
25*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_W2W,
26*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_R2W,
27*4882a593Smuzhiyun 	MC_EMEM_ARB_TIMING_W2R,
28*4882a593Smuzhiyun 	MC_EMEM_ARB_DA_TURNS,
29*4882a593Smuzhiyun 	MC_EMEM_ARB_DA_COVERS,
30*4882a593Smuzhiyun 	MC_EMEM_ARB_MISC0,
31*4882a593Smuzhiyun 	MC_EMEM_ARB_RING1_THROTTLE,
32*4882a593Smuzhiyun };
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun static const struct tegra_mc_client tegra30_mc_clients[] = {
35*4882a593Smuzhiyun 	{
36*4882a593Smuzhiyun 		.id = 0x00,
37*4882a593Smuzhiyun 		.name = "ptcr",
38*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_PTC,
39*4882a593Smuzhiyun 	}, {
40*4882a593Smuzhiyun 		.id = 0x01,
41*4882a593Smuzhiyun 		.name = "display0a",
42*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DC,
43*4882a593Smuzhiyun 		.smmu = {
44*4882a593Smuzhiyun 			.reg = 0x228,
45*4882a593Smuzhiyun 			.bit = 1,
46*4882a593Smuzhiyun 		},
47*4882a593Smuzhiyun 		.la = {
48*4882a593Smuzhiyun 			.reg = 0x2e8,
49*4882a593Smuzhiyun 			.shift = 0,
50*4882a593Smuzhiyun 			.mask = 0xff,
51*4882a593Smuzhiyun 			.def = 0x4e,
52*4882a593Smuzhiyun 		},
53*4882a593Smuzhiyun 	}, {
54*4882a593Smuzhiyun 		.id = 0x02,
55*4882a593Smuzhiyun 		.name = "display0ab",
56*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DCB,
57*4882a593Smuzhiyun 		.smmu = {
58*4882a593Smuzhiyun 			.reg = 0x228,
59*4882a593Smuzhiyun 			.bit = 2,
60*4882a593Smuzhiyun 		},
61*4882a593Smuzhiyun 		.la = {
62*4882a593Smuzhiyun 			.reg = 0x2f4,
63*4882a593Smuzhiyun 			.shift = 0,
64*4882a593Smuzhiyun 			.mask = 0xff,
65*4882a593Smuzhiyun 			.def = 0x4e,
66*4882a593Smuzhiyun 		},
67*4882a593Smuzhiyun 	}, {
68*4882a593Smuzhiyun 		.id = 0x03,
69*4882a593Smuzhiyun 		.name = "display0b",
70*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DC,
71*4882a593Smuzhiyun 		.smmu = {
72*4882a593Smuzhiyun 			.reg = 0x228,
73*4882a593Smuzhiyun 			.bit = 3,
74*4882a593Smuzhiyun 		},
75*4882a593Smuzhiyun 		.la = {
76*4882a593Smuzhiyun 			.reg = 0x2e8,
77*4882a593Smuzhiyun 			.shift = 16,
78*4882a593Smuzhiyun 			.mask = 0xff,
79*4882a593Smuzhiyun 			.def = 0x4e,
80*4882a593Smuzhiyun 		},
81*4882a593Smuzhiyun 	}, {
82*4882a593Smuzhiyun 		.id = 0x04,
83*4882a593Smuzhiyun 		.name = "display0bb",
84*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DCB,
85*4882a593Smuzhiyun 		.smmu = {
86*4882a593Smuzhiyun 			.reg = 0x228,
87*4882a593Smuzhiyun 			.bit = 4,
88*4882a593Smuzhiyun 		},
89*4882a593Smuzhiyun 		.la = {
90*4882a593Smuzhiyun 			.reg = 0x2f4,
91*4882a593Smuzhiyun 			.shift = 16,
92*4882a593Smuzhiyun 			.mask = 0xff,
93*4882a593Smuzhiyun 			.def = 0x4e,
94*4882a593Smuzhiyun 		},
95*4882a593Smuzhiyun 	}, {
96*4882a593Smuzhiyun 		.id = 0x05,
97*4882a593Smuzhiyun 		.name = "display0c",
98*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DC,
99*4882a593Smuzhiyun 		.smmu = {
100*4882a593Smuzhiyun 			.reg = 0x228,
101*4882a593Smuzhiyun 			.bit = 5,
102*4882a593Smuzhiyun 		},
103*4882a593Smuzhiyun 		.la = {
104*4882a593Smuzhiyun 			.reg = 0x2ec,
105*4882a593Smuzhiyun 			.shift = 0,
106*4882a593Smuzhiyun 			.mask = 0xff,
107*4882a593Smuzhiyun 			.def = 0x4e,
108*4882a593Smuzhiyun 		},
109*4882a593Smuzhiyun 	}, {
110*4882a593Smuzhiyun 		.id = 0x06,
111*4882a593Smuzhiyun 		.name = "display0cb",
112*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DCB,
113*4882a593Smuzhiyun 		.smmu = {
114*4882a593Smuzhiyun 			.reg = 0x228,
115*4882a593Smuzhiyun 			.bit = 6,
116*4882a593Smuzhiyun 		},
117*4882a593Smuzhiyun 		.la = {
118*4882a593Smuzhiyun 			.reg = 0x2f8,
119*4882a593Smuzhiyun 			.shift = 0,
120*4882a593Smuzhiyun 			.mask = 0xff,
121*4882a593Smuzhiyun 			.def = 0x4e,
122*4882a593Smuzhiyun 		},
123*4882a593Smuzhiyun 	}, {
124*4882a593Smuzhiyun 		.id = 0x07,
125*4882a593Smuzhiyun 		.name = "display1b",
126*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DC,
127*4882a593Smuzhiyun 		.smmu = {
128*4882a593Smuzhiyun 			.reg = 0x228,
129*4882a593Smuzhiyun 			.bit = 7,
130*4882a593Smuzhiyun 		},
131*4882a593Smuzhiyun 		.la = {
132*4882a593Smuzhiyun 			.reg = 0x2ec,
133*4882a593Smuzhiyun 			.shift = 16,
134*4882a593Smuzhiyun 			.mask = 0xff,
135*4882a593Smuzhiyun 			.def = 0x4e,
136*4882a593Smuzhiyun 		},
137*4882a593Smuzhiyun 	}, {
138*4882a593Smuzhiyun 		.id = 0x08,
139*4882a593Smuzhiyun 		.name = "display1bb",
140*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DCB,
141*4882a593Smuzhiyun 		.smmu = {
142*4882a593Smuzhiyun 			.reg = 0x228,
143*4882a593Smuzhiyun 			.bit = 8,
144*4882a593Smuzhiyun 		},
145*4882a593Smuzhiyun 		.la = {
146*4882a593Smuzhiyun 			.reg = 0x2f8,
147*4882a593Smuzhiyun 			.shift = 16,
148*4882a593Smuzhiyun 			.mask = 0xff,
149*4882a593Smuzhiyun 			.def = 0x4e,
150*4882a593Smuzhiyun 		},
151*4882a593Smuzhiyun 	}, {
152*4882a593Smuzhiyun 		.id = 0x09,
153*4882a593Smuzhiyun 		.name = "eppup",
154*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_EPP,
155*4882a593Smuzhiyun 		.smmu = {
156*4882a593Smuzhiyun 			.reg = 0x228,
157*4882a593Smuzhiyun 			.bit = 9,
158*4882a593Smuzhiyun 		},
159*4882a593Smuzhiyun 		.la = {
160*4882a593Smuzhiyun 			.reg = 0x300,
161*4882a593Smuzhiyun 			.shift = 0,
162*4882a593Smuzhiyun 			.mask = 0xff,
163*4882a593Smuzhiyun 			.def = 0x17,
164*4882a593Smuzhiyun 		},
165*4882a593Smuzhiyun 	}, {
166*4882a593Smuzhiyun 		.id = 0x0a,
167*4882a593Smuzhiyun 		.name = "g2pr",
168*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_G2,
169*4882a593Smuzhiyun 		.smmu = {
170*4882a593Smuzhiyun 			.reg = 0x228,
171*4882a593Smuzhiyun 			.bit = 10,
172*4882a593Smuzhiyun 		},
173*4882a593Smuzhiyun 		.la = {
174*4882a593Smuzhiyun 			.reg = 0x308,
175*4882a593Smuzhiyun 			.shift = 0,
176*4882a593Smuzhiyun 			.mask = 0xff,
177*4882a593Smuzhiyun 			.def = 0x09,
178*4882a593Smuzhiyun 		},
179*4882a593Smuzhiyun 	}, {
180*4882a593Smuzhiyun 		.id = 0x0b,
181*4882a593Smuzhiyun 		.name = "g2sr",
182*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_G2,
183*4882a593Smuzhiyun 		.smmu = {
184*4882a593Smuzhiyun 			.reg = 0x228,
185*4882a593Smuzhiyun 			.bit = 11,
186*4882a593Smuzhiyun 		},
187*4882a593Smuzhiyun 		.la = {
188*4882a593Smuzhiyun 			.reg = 0x308,
189*4882a593Smuzhiyun 			.shift = 16,
190*4882a593Smuzhiyun 			.mask = 0xff,
191*4882a593Smuzhiyun 			.def = 0x09,
192*4882a593Smuzhiyun 		},
193*4882a593Smuzhiyun 	}, {
194*4882a593Smuzhiyun 		.id = 0x0c,
195*4882a593Smuzhiyun 		.name = "mpeunifbr",
196*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPE,
197*4882a593Smuzhiyun 		.smmu = {
198*4882a593Smuzhiyun 			.reg = 0x228,
199*4882a593Smuzhiyun 			.bit = 12,
200*4882a593Smuzhiyun 		},
201*4882a593Smuzhiyun 		.la = {
202*4882a593Smuzhiyun 			.reg = 0x328,
203*4882a593Smuzhiyun 			.shift = 0,
204*4882a593Smuzhiyun 			.mask = 0xff,
205*4882a593Smuzhiyun 			.def = 0x50,
206*4882a593Smuzhiyun 		},
207*4882a593Smuzhiyun 	}, {
208*4882a593Smuzhiyun 		.id = 0x0d,
209*4882a593Smuzhiyun 		.name = "viruv",
210*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VI,
211*4882a593Smuzhiyun 		.smmu = {
212*4882a593Smuzhiyun 			.reg = 0x228,
213*4882a593Smuzhiyun 			.bit = 13,
214*4882a593Smuzhiyun 		},
215*4882a593Smuzhiyun 		.la = {
216*4882a593Smuzhiyun 			.reg = 0x364,
217*4882a593Smuzhiyun 			.shift = 0,
218*4882a593Smuzhiyun 			.mask = 0xff,
219*4882a593Smuzhiyun 			.def = 0x2c,
220*4882a593Smuzhiyun 		},
221*4882a593Smuzhiyun 	}, {
222*4882a593Smuzhiyun 		.id = 0x0e,
223*4882a593Smuzhiyun 		.name = "afir",
224*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_AFI,
225*4882a593Smuzhiyun 		.smmu = {
226*4882a593Smuzhiyun 			.reg = 0x228,
227*4882a593Smuzhiyun 			.bit = 14,
228*4882a593Smuzhiyun 		},
229*4882a593Smuzhiyun 		.la = {
230*4882a593Smuzhiyun 			.reg = 0x2e0,
231*4882a593Smuzhiyun 			.shift = 0,
232*4882a593Smuzhiyun 			.mask = 0xff,
233*4882a593Smuzhiyun 			.def = 0x10,
234*4882a593Smuzhiyun 		},
235*4882a593Smuzhiyun 	}, {
236*4882a593Smuzhiyun 		.id = 0x0f,
237*4882a593Smuzhiyun 		.name = "avpcarm7r",
238*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_AVPC,
239*4882a593Smuzhiyun 		.smmu = {
240*4882a593Smuzhiyun 			.reg = 0x228,
241*4882a593Smuzhiyun 			.bit = 15,
242*4882a593Smuzhiyun 		},
243*4882a593Smuzhiyun 		.la = {
244*4882a593Smuzhiyun 			.reg = 0x2e4,
245*4882a593Smuzhiyun 			.shift = 0,
246*4882a593Smuzhiyun 			.mask = 0xff,
247*4882a593Smuzhiyun 			.def = 0x04,
248*4882a593Smuzhiyun 		},
249*4882a593Smuzhiyun 	}, {
250*4882a593Smuzhiyun 		.id = 0x10,
251*4882a593Smuzhiyun 		.name = "displayhc",
252*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DC,
253*4882a593Smuzhiyun 		.smmu = {
254*4882a593Smuzhiyun 			.reg = 0x228,
255*4882a593Smuzhiyun 			.bit = 16,
256*4882a593Smuzhiyun 		},
257*4882a593Smuzhiyun 		.la = {
258*4882a593Smuzhiyun 			.reg = 0x2f0,
259*4882a593Smuzhiyun 			.shift = 0,
260*4882a593Smuzhiyun 			.mask = 0xff,
261*4882a593Smuzhiyun 			.def = 0xff,
262*4882a593Smuzhiyun 		},
263*4882a593Smuzhiyun 	}, {
264*4882a593Smuzhiyun 		.id = 0x11,
265*4882a593Smuzhiyun 		.name = "displayhcb",
266*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_DCB,
267*4882a593Smuzhiyun 		.smmu = {
268*4882a593Smuzhiyun 			.reg = 0x228,
269*4882a593Smuzhiyun 			.bit = 17,
270*4882a593Smuzhiyun 		},
271*4882a593Smuzhiyun 		.la = {
272*4882a593Smuzhiyun 			.reg = 0x2fc,
273*4882a593Smuzhiyun 			.shift = 0,
274*4882a593Smuzhiyun 			.mask = 0xff,
275*4882a593Smuzhiyun 			.def = 0xff,
276*4882a593Smuzhiyun 		},
277*4882a593Smuzhiyun 	}, {
278*4882a593Smuzhiyun 		.id = 0x12,
279*4882a593Smuzhiyun 		.name = "fdcdrd",
280*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV,
281*4882a593Smuzhiyun 		.smmu = {
282*4882a593Smuzhiyun 			.reg = 0x228,
283*4882a593Smuzhiyun 			.bit = 18,
284*4882a593Smuzhiyun 		},
285*4882a593Smuzhiyun 		.la = {
286*4882a593Smuzhiyun 			.reg = 0x334,
287*4882a593Smuzhiyun 			.shift = 0,
288*4882a593Smuzhiyun 			.mask = 0xff,
289*4882a593Smuzhiyun 			.def = 0x0a,
290*4882a593Smuzhiyun 		},
291*4882a593Smuzhiyun 	}, {
292*4882a593Smuzhiyun 		.id = 0x13,
293*4882a593Smuzhiyun 		.name = "fdcdrd2",
294*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV2,
295*4882a593Smuzhiyun 		.smmu = {
296*4882a593Smuzhiyun 			.reg = 0x228,
297*4882a593Smuzhiyun 			.bit = 19,
298*4882a593Smuzhiyun 		},
299*4882a593Smuzhiyun 		.la = {
300*4882a593Smuzhiyun 			.reg = 0x33c,
301*4882a593Smuzhiyun 			.shift = 0,
302*4882a593Smuzhiyun 			.mask = 0xff,
303*4882a593Smuzhiyun 			.def = 0x0a,
304*4882a593Smuzhiyun 		},
305*4882a593Smuzhiyun 	}, {
306*4882a593Smuzhiyun 		.id = 0x14,
307*4882a593Smuzhiyun 		.name = "g2dr",
308*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_G2,
309*4882a593Smuzhiyun 		.smmu = {
310*4882a593Smuzhiyun 			.reg = 0x228,
311*4882a593Smuzhiyun 			.bit = 20,
312*4882a593Smuzhiyun 		},
313*4882a593Smuzhiyun 		.la = {
314*4882a593Smuzhiyun 			.reg = 0x30c,
315*4882a593Smuzhiyun 			.shift = 0,
316*4882a593Smuzhiyun 			.mask = 0xff,
317*4882a593Smuzhiyun 			.def = 0x0a,
318*4882a593Smuzhiyun 		},
319*4882a593Smuzhiyun 	}, {
320*4882a593Smuzhiyun 		.id = 0x15,
321*4882a593Smuzhiyun 		.name = "hdar",
322*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_HDA,
323*4882a593Smuzhiyun 		.smmu = {
324*4882a593Smuzhiyun 			.reg = 0x228,
325*4882a593Smuzhiyun 			.bit = 21,
326*4882a593Smuzhiyun 		},
327*4882a593Smuzhiyun 		.la = {
328*4882a593Smuzhiyun 			.reg = 0x318,
329*4882a593Smuzhiyun 			.shift = 0,
330*4882a593Smuzhiyun 			.mask = 0xff,
331*4882a593Smuzhiyun 			.def = 0xff,
332*4882a593Smuzhiyun 		},
333*4882a593Smuzhiyun 	}, {
334*4882a593Smuzhiyun 		.id = 0x16,
335*4882a593Smuzhiyun 		.name = "host1xdmar",
336*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_HC,
337*4882a593Smuzhiyun 		.smmu = {
338*4882a593Smuzhiyun 			.reg = 0x228,
339*4882a593Smuzhiyun 			.bit = 22,
340*4882a593Smuzhiyun 		},
341*4882a593Smuzhiyun 		.la = {
342*4882a593Smuzhiyun 			.reg = 0x310,
343*4882a593Smuzhiyun 			.shift = 0,
344*4882a593Smuzhiyun 			.mask = 0xff,
345*4882a593Smuzhiyun 			.def = 0x05,
346*4882a593Smuzhiyun 		},
347*4882a593Smuzhiyun 	}, {
348*4882a593Smuzhiyun 		.id = 0x17,
349*4882a593Smuzhiyun 		.name = "host1xr",
350*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_HC,
351*4882a593Smuzhiyun 		.smmu = {
352*4882a593Smuzhiyun 			.reg = 0x228,
353*4882a593Smuzhiyun 			.bit = 23,
354*4882a593Smuzhiyun 		},
355*4882a593Smuzhiyun 		.la = {
356*4882a593Smuzhiyun 			.reg = 0x310,
357*4882a593Smuzhiyun 			.shift = 16,
358*4882a593Smuzhiyun 			.mask = 0xff,
359*4882a593Smuzhiyun 			.def = 0x50,
360*4882a593Smuzhiyun 		},
361*4882a593Smuzhiyun 	}, {
362*4882a593Smuzhiyun 		.id = 0x18,
363*4882a593Smuzhiyun 		.name = "idxsrd",
364*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV,
365*4882a593Smuzhiyun 		.smmu = {
366*4882a593Smuzhiyun 			.reg = 0x228,
367*4882a593Smuzhiyun 			.bit = 24,
368*4882a593Smuzhiyun 		},
369*4882a593Smuzhiyun 		.la = {
370*4882a593Smuzhiyun 			.reg = 0x334,
371*4882a593Smuzhiyun 			.shift = 16,
372*4882a593Smuzhiyun 			.mask = 0xff,
373*4882a593Smuzhiyun 			.def = 0x13,
374*4882a593Smuzhiyun 		},
375*4882a593Smuzhiyun 	}, {
376*4882a593Smuzhiyun 		.id = 0x19,
377*4882a593Smuzhiyun 		.name = "idxsrd2",
378*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV2,
379*4882a593Smuzhiyun 		.smmu = {
380*4882a593Smuzhiyun 			.reg = 0x228,
381*4882a593Smuzhiyun 			.bit = 25,
382*4882a593Smuzhiyun 		},
383*4882a593Smuzhiyun 		.la = {
384*4882a593Smuzhiyun 			.reg = 0x33c,
385*4882a593Smuzhiyun 			.shift = 16,
386*4882a593Smuzhiyun 			.mask = 0xff,
387*4882a593Smuzhiyun 			.def = 0x13,
388*4882a593Smuzhiyun 		},
389*4882a593Smuzhiyun 	}, {
390*4882a593Smuzhiyun 		.id = 0x1a,
391*4882a593Smuzhiyun 		.name = "mpe_ipred",
392*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPE,
393*4882a593Smuzhiyun 		.smmu = {
394*4882a593Smuzhiyun 			.reg = 0x228,
395*4882a593Smuzhiyun 			.bit = 26,
396*4882a593Smuzhiyun 		},
397*4882a593Smuzhiyun 		.la = {
398*4882a593Smuzhiyun 			.reg = 0x328,
399*4882a593Smuzhiyun 			.shift = 16,
400*4882a593Smuzhiyun 			.mask = 0xff,
401*4882a593Smuzhiyun 			.def = 0x80,
402*4882a593Smuzhiyun 		},
403*4882a593Smuzhiyun 	}, {
404*4882a593Smuzhiyun 		.id = 0x1b,
405*4882a593Smuzhiyun 		.name = "mpeamemrd",
406*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPE,
407*4882a593Smuzhiyun 		.smmu = {
408*4882a593Smuzhiyun 			.reg = 0x228,
409*4882a593Smuzhiyun 			.bit = 27,
410*4882a593Smuzhiyun 		},
411*4882a593Smuzhiyun 		.la = {
412*4882a593Smuzhiyun 			.reg = 0x32c,
413*4882a593Smuzhiyun 			.shift = 0,
414*4882a593Smuzhiyun 			.mask = 0xff,
415*4882a593Smuzhiyun 			.def = 0x42,
416*4882a593Smuzhiyun 		},
417*4882a593Smuzhiyun 	}, {
418*4882a593Smuzhiyun 		.id = 0x1c,
419*4882a593Smuzhiyun 		.name = "mpecsrd",
420*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPE,
421*4882a593Smuzhiyun 		.smmu = {
422*4882a593Smuzhiyun 			.reg = 0x228,
423*4882a593Smuzhiyun 			.bit = 28,
424*4882a593Smuzhiyun 		},
425*4882a593Smuzhiyun 		.la = {
426*4882a593Smuzhiyun 			.reg = 0x32c,
427*4882a593Smuzhiyun 			.shift = 16,
428*4882a593Smuzhiyun 			.mask = 0xff,
429*4882a593Smuzhiyun 			.def = 0xff,
430*4882a593Smuzhiyun 		},
431*4882a593Smuzhiyun 	}, {
432*4882a593Smuzhiyun 		.id = 0x1d,
433*4882a593Smuzhiyun 		.name = "ppcsahbdmar",
434*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_PPCS,
435*4882a593Smuzhiyun 		.smmu = {
436*4882a593Smuzhiyun 			.reg = 0x228,
437*4882a593Smuzhiyun 			.bit = 29,
438*4882a593Smuzhiyun 		},
439*4882a593Smuzhiyun 		.la = {
440*4882a593Smuzhiyun 			.reg = 0x344,
441*4882a593Smuzhiyun 			.shift = 0,
442*4882a593Smuzhiyun 			.mask = 0xff,
443*4882a593Smuzhiyun 			.def = 0x10,
444*4882a593Smuzhiyun 		},
445*4882a593Smuzhiyun 	}, {
446*4882a593Smuzhiyun 		.id = 0x1e,
447*4882a593Smuzhiyun 		.name = "ppcsahbslvr",
448*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_PPCS,
449*4882a593Smuzhiyun 		.smmu = {
450*4882a593Smuzhiyun 			.reg = 0x228,
451*4882a593Smuzhiyun 			.bit = 30,
452*4882a593Smuzhiyun 		},
453*4882a593Smuzhiyun 		.la = {
454*4882a593Smuzhiyun 			.reg = 0x344,
455*4882a593Smuzhiyun 			.shift = 16,
456*4882a593Smuzhiyun 			.mask = 0xff,
457*4882a593Smuzhiyun 			.def = 0x12,
458*4882a593Smuzhiyun 		},
459*4882a593Smuzhiyun 	}, {
460*4882a593Smuzhiyun 		.id = 0x1f,
461*4882a593Smuzhiyun 		.name = "satar",
462*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_SATA,
463*4882a593Smuzhiyun 		.smmu = {
464*4882a593Smuzhiyun 			.reg = 0x228,
465*4882a593Smuzhiyun 			.bit = 31,
466*4882a593Smuzhiyun 		},
467*4882a593Smuzhiyun 		.la = {
468*4882a593Smuzhiyun 			.reg = 0x350,
469*4882a593Smuzhiyun 			.shift = 0,
470*4882a593Smuzhiyun 			.mask = 0xff,
471*4882a593Smuzhiyun 			.def = 0x33,
472*4882a593Smuzhiyun 		},
473*4882a593Smuzhiyun 	}, {
474*4882a593Smuzhiyun 		.id = 0x20,
475*4882a593Smuzhiyun 		.name = "texsrd",
476*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV,
477*4882a593Smuzhiyun 		.smmu = {
478*4882a593Smuzhiyun 			.reg = 0x22c,
479*4882a593Smuzhiyun 			.bit = 0,
480*4882a593Smuzhiyun 		},
481*4882a593Smuzhiyun 		.la = {
482*4882a593Smuzhiyun 			.reg = 0x338,
483*4882a593Smuzhiyun 			.shift = 0,
484*4882a593Smuzhiyun 			.mask = 0xff,
485*4882a593Smuzhiyun 			.def = 0x13,
486*4882a593Smuzhiyun 		},
487*4882a593Smuzhiyun 	}, {
488*4882a593Smuzhiyun 		.id = 0x21,
489*4882a593Smuzhiyun 		.name = "texsrd2",
490*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV2,
491*4882a593Smuzhiyun 		.smmu = {
492*4882a593Smuzhiyun 			.reg = 0x22c,
493*4882a593Smuzhiyun 			.bit = 1,
494*4882a593Smuzhiyun 		},
495*4882a593Smuzhiyun 		.la = {
496*4882a593Smuzhiyun 			.reg = 0x340,
497*4882a593Smuzhiyun 			.shift = 0,
498*4882a593Smuzhiyun 			.mask = 0xff,
499*4882a593Smuzhiyun 			.def = 0x13,
500*4882a593Smuzhiyun 		},
501*4882a593Smuzhiyun 	}, {
502*4882a593Smuzhiyun 		.id = 0x22,
503*4882a593Smuzhiyun 		.name = "vdebsevr",
504*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
505*4882a593Smuzhiyun 		.smmu = {
506*4882a593Smuzhiyun 			.reg = 0x22c,
507*4882a593Smuzhiyun 			.bit = 2,
508*4882a593Smuzhiyun 		},
509*4882a593Smuzhiyun 		.la = {
510*4882a593Smuzhiyun 			.reg = 0x354,
511*4882a593Smuzhiyun 			.shift = 0,
512*4882a593Smuzhiyun 			.mask = 0xff,
513*4882a593Smuzhiyun 			.def = 0xff,
514*4882a593Smuzhiyun 		},
515*4882a593Smuzhiyun 	}, {
516*4882a593Smuzhiyun 		.id = 0x23,
517*4882a593Smuzhiyun 		.name = "vdember",
518*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
519*4882a593Smuzhiyun 		.smmu = {
520*4882a593Smuzhiyun 			.reg = 0x22c,
521*4882a593Smuzhiyun 			.bit = 3,
522*4882a593Smuzhiyun 		},
523*4882a593Smuzhiyun 		.la = {
524*4882a593Smuzhiyun 			.reg = 0x354,
525*4882a593Smuzhiyun 			.shift = 16,
526*4882a593Smuzhiyun 			.mask = 0xff,
527*4882a593Smuzhiyun 			.def = 0xd0,
528*4882a593Smuzhiyun 		},
529*4882a593Smuzhiyun 	}, {
530*4882a593Smuzhiyun 		.id = 0x24,
531*4882a593Smuzhiyun 		.name = "vdemcer",
532*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
533*4882a593Smuzhiyun 		.smmu = {
534*4882a593Smuzhiyun 			.reg = 0x22c,
535*4882a593Smuzhiyun 			.bit = 4,
536*4882a593Smuzhiyun 		},
537*4882a593Smuzhiyun 		.la = {
538*4882a593Smuzhiyun 			.reg = 0x358,
539*4882a593Smuzhiyun 			.shift = 0,
540*4882a593Smuzhiyun 			.mask = 0xff,
541*4882a593Smuzhiyun 			.def = 0x2a,
542*4882a593Smuzhiyun 		},
543*4882a593Smuzhiyun 	}, {
544*4882a593Smuzhiyun 		.id = 0x25,
545*4882a593Smuzhiyun 		.name = "vdetper",
546*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
547*4882a593Smuzhiyun 		.smmu = {
548*4882a593Smuzhiyun 			.reg = 0x22c,
549*4882a593Smuzhiyun 			.bit = 5,
550*4882a593Smuzhiyun 		},
551*4882a593Smuzhiyun 		.la = {
552*4882a593Smuzhiyun 			.reg = 0x358,
553*4882a593Smuzhiyun 			.shift = 16,
554*4882a593Smuzhiyun 			.mask = 0xff,
555*4882a593Smuzhiyun 			.def = 0x74,
556*4882a593Smuzhiyun 		},
557*4882a593Smuzhiyun 	}, {
558*4882a593Smuzhiyun 		.id = 0x26,
559*4882a593Smuzhiyun 		.name = "mpcorelpr",
560*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPCORELP,
561*4882a593Smuzhiyun 		.la = {
562*4882a593Smuzhiyun 			.reg = 0x324,
563*4882a593Smuzhiyun 			.shift = 0,
564*4882a593Smuzhiyun 			.mask = 0xff,
565*4882a593Smuzhiyun 			.def = 0x04,
566*4882a593Smuzhiyun 		},
567*4882a593Smuzhiyun 	}, {
568*4882a593Smuzhiyun 		.id = 0x27,
569*4882a593Smuzhiyun 		.name = "mpcorer",
570*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPCORE,
571*4882a593Smuzhiyun 		.la = {
572*4882a593Smuzhiyun 			.reg = 0x320,
573*4882a593Smuzhiyun 			.shift = 0,
574*4882a593Smuzhiyun 			.mask = 0xff,
575*4882a593Smuzhiyun 			.def = 0x04,
576*4882a593Smuzhiyun 		},
577*4882a593Smuzhiyun 	}, {
578*4882a593Smuzhiyun 		.id = 0x28,
579*4882a593Smuzhiyun 		.name = "eppu",
580*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_EPP,
581*4882a593Smuzhiyun 		.smmu = {
582*4882a593Smuzhiyun 			.reg = 0x22c,
583*4882a593Smuzhiyun 			.bit = 8,
584*4882a593Smuzhiyun 		},
585*4882a593Smuzhiyun 		.la = {
586*4882a593Smuzhiyun 			.reg = 0x300,
587*4882a593Smuzhiyun 			.shift = 16,
588*4882a593Smuzhiyun 			.mask = 0xff,
589*4882a593Smuzhiyun 			.def = 0x6c,
590*4882a593Smuzhiyun 		},
591*4882a593Smuzhiyun 	}, {
592*4882a593Smuzhiyun 		.id = 0x29,
593*4882a593Smuzhiyun 		.name = "eppv",
594*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_EPP,
595*4882a593Smuzhiyun 		.smmu = {
596*4882a593Smuzhiyun 			.reg = 0x22c,
597*4882a593Smuzhiyun 			.bit = 9,
598*4882a593Smuzhiyun 		},
599*4882a593Smuzhiyun 		.la = {
600*4882a593Smuzhiyun 			.reg = 0x304,
601*4882a593Smuzhiyun 			.shift = 0,
602*4882a593Smuzhiyun 			.mask = 0xff,
603*4882a593Smuzhiyun 			.def = 0x6c,
604*4882a593Smuzhiyun 		},
605*4882a593Smuzhiyun 	}, {
606*4882a593Smuzhiyun 		.id = 0x2a,
607*4882a593Smuzhiyun 		.name = "eppy",
608*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_EPP,
609*4882a593Smuzhiyun 		.smmu = {
610*4882a593Smuzhiyun 			.reg = 0x22c,
611*4882a593Smuzhiyun 			.bit = 10,
612*4882a593Smuzhiyun 		},
613*4882a593Smuzhiyun 		.la = {
614*4882a593Smuzhiyun 			.reg = 0x304,
615*4882a593Smuzhiyun 			.shift = 16,
616*4882a593Smuzhiyun 			.mask = 0xff,
617*4882a593Smuzhiyun 			.def = 0x6c,
618*4882a593Smuzhiyun 		},
619*4882a593Smuzhiyun 	}, {
620*4882a593Smuzhiyun 		.id = 0x2b,
621*4882a593Smuzhiyun 		.name = "mpeunifbw",
622*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPE,
623*4882a593Smuzhiyun 		.smmu = {
624*4882a593Smuzhiyun 			.reg = 0x22c,
625*4882a593Smuzhiyun 			.bit = 11,
626*4882a593Smuzhiyun 		},
627*4882a593Smuzhiyun 		.la = {
628*4882a593Smuzhiyun 			.reg = 0x330,
629*4882a593Smuzhiyun 			.shift = 0,
630*4882a593Smuzhiyun 			.mask = 0xff,
631*4882a593Smuzhiyun 			.def = 0x13,
632*4882a593Smuzhiyun 		},
633*4882a593Smuzhiyun 	}, {
634*4882a593Smuzhiyun 		.id = 0x2c,
635*4882a593Smuzhiyun 		.name = "viwsb",
636*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VI,
637*4882a593Smuzhiyun 		.smmu = {
638*4882a593Smuzhiyun 			.reg = 0x22c,
639*4882a593Smuzhiyun 			.bit = 12,
640*4882a593Smuzhiyun 		},
641*4882a593Smuzhiyun 		.la = {
642*4882a593Smuzhiyun 			.reg = 0x364,
643*4882a593Smuzhiyun 			.shift = 16,
644*4882a593Smuzhiyun 			.mask = 0xff,
645*4882a593Smuzhiyun 			.def = 0x12,
646*4882a593Smuzhiyun 		},
647*4882a593Smuzhiyun 	}, {
648*4882a593Smuzhiyun 		.id = 0x2d,
649*4882a593Smuzhiyun 		.name = "viwu",
650*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VI,
651*4882a593Smuzhiyun 		.smmu = {
652*4882a593Smuzhiyun 			.reg = 0x22c,
653*4882a593Smuzhiyun 			.bit = 13,
654*4882a593Smuzhiyun 		},
655*4882a593Smuzhiyun 		.la = {
656*4882a593Smuzhiyun 			.reg = 0x368,
657*4882a593Smuzhiyun 			.shift = 0,
658*4882a593Smuzhiyun 			.mask = 0xff,
659*4882a593Smuzhiyun 			.def = 0xb2,
660*4882a593Smuzhiyun 		},
661*4882a593Smuzhiyun 	}, {
662*4882a593Smuzhiyun 		.id = 0x2e,
663*4882a593Smuzhiyun 		.name = "viwv",
664*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VI,
665*4882a593Smuzhiyun 		.smmu = {
666*4882a593Smuzhiyun 			.reg = 0x22c,
667*4882a593Smuzhiyun 			.bit = 14,
668*4882a593Smuzhiyun 		},
669*4882a593Smuzhiyun 		.la = {
670*4882a593Smuzhiyun 			.reg = 0x368,
671*4882a593Smuzhiyun 			.shift = 16,
672*4882a593Smuzhiyun 			.mask = 0xff,
673*4882a593Smuzhiyun 			.def = 0xb2,
674*4882a593Smuzhiyun 		},
675*4882a593Smuzhiyun 	}, {
676*4882a593Smuzhiyun 		.id = 0x2f,
677*4882a593Smuzhiyun 		.name = "viwy",
678*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VI,
679*4882a593Smuzhiyun 		.smmu = {
680*4882a593Smuzhiyun 			.reg = 0x22c,
681*4882a593Smuzhiyun 			.bit = 15,
682*4882a593Smuzhiyun 		},
683*4882a593Smuzhiyun 		.la = {
684*4882a593Smuzhiyun 			.reg = 0x36c,
685*4882a593Smuzhiyun 			.shift = 0,
686*4882a593Smuzhiyun 			.mask = 0xff,
687*4882a593Smuzhiyun 			.def = 0x12,
688*4882a593Smuzhiyun 		},
689*4882a593Smuzhiyun 	}, {
690*4882a593Smuzhiyun 		.id = 0x30,
691*4882a593Smuzhiyun 		.name = "g2dw",
692*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_G2,
693*4882a593Smuzhiyun 		.smmu = {
694*4882a593Smuzhiyun 			.reg = 0x22c,
695*4882a593Smuzhiyun 			.bit = 16,
696*4882a593Smuzhiyun 		},
697*4882a593Smuzhiyun 		.la = {
698*4882a593Smuzhiyun 			.reg = 0x30c,
699*4882a593Smuzhiyun 			.shift = 16,
700*4882a593Smuzhiyun 			.mask = 0xff,
701*4882a593Smuzhiyun 			.def = 0x9,
702*4882a593Smuzhiyun 		},
703*4882a593Smuzhiyun 	}, {
704*4882a593Smuzhiyun 		.id = 0x31,
705*4882a593Smuzhiyun 		.name = "afiw",
706*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_AFI,
707*4882a593Smuzhiyun 		.smmu = {
708*4882a593Smuzhiyun 			.reg = 0x22c,
709*4882a593Smuzhiyun 			.bit = 17,
710*4882a593Smuzhiyun 		},
711*4882a593Smuzhiyun 		.la = {
712*4882a593Smuzhiyun 			.reg = 0x2e0,
713*4882a593Smuzhiyun 			.shift = 16,
714*4882a593Smuzhiyun 			.mask = 0xff,
715*4882a593Smuzhiyun 			.def = 0x0c,
716*4882a593Smuzhiyun 		},
717*4882a593Smuzhiyun 	}, {
718*4882a593Smuzhiyun 		.id = 0x32,
719*4882a593Smuzhiyun 		.name = "avpcarm7w",
720*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_AVPC,
721*4882a593Smuzhiyun 		.smmu = {
722*4882a593Smuzhiyun 			.reg = 0x22c,
723*4882a593Smuzhiyun 			.bit = 18,
724*4882a593Smuzhiyun 		},
725*4882a593Smuzhiyun 		.la = {
726*4882a593Smuzhiyun 			.reg = 0x2e4,
727*4882a593Smuzhiyun 			.shift = 16,
728*4882a593Smuzhiyun 			.mask = 0xff,
729*4882a593Smuzhiyun 			.def = 0x0e,
730*4882a593Smuzhiyun 		},
731*4882a593Smuzhiyun 	}, {
732*4882a593Smuzhiyun 		.id = 0x33,
733*4882a593Smuzhiyun 		.name = "fdcdwr",
734*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV,
735*4882a593Smuzhiyun 		.smmu = {
736*4882a593Smuzhiyun 			.reg = 0x22c,
737*4882a593Smuzhiyun 			.bit = 19,
738*4882a593Smuzhiyun 		},
739*4882a593Smuzhiyun 		.la = {
740*4882a593Smuzhiyun 			.reg = 0x338,
741*4882a593Smuzhiyun 			.shift = 16,
742*4882a593Smuzhiyun 			.mask = 0xff,
743*4882a593Smuzhiyun 			.def = 0x0a,
744*4882a593Smuzhiyun 		},
745*4882a593Smuzhiyun 	}, {
746*4882a593Smuzhiyun 		.id = 0x34,
747*4882a593Smuzhiyun 		.name = "fdcdwr2",
748*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_NV2,
749*4882a593Smuzhiyun 		.smmu = {
750*4882a593Smuzhiyun 			.reg = 0x22c,
751*4882a593Smuzhiyun 			.bit = 20,
752*4882a593Smuzhiyun 		},
753*4882a593Smuzhiyun 		.la = {
754*4882a593Smuzhiyun 			.reg = 0x340,
755*4882a593Smuzhiyun 			.shift = 16,
756*4882a593Smuzhiyun 			.mask = 0xff,
757*4882a593Smuzhiyun 			.def = 0x0a,
758*4882a593Smuzhiyun 		},
759*4882a593Smuzhiyun 	}, {
760*4882a593Smuzhiyun 		.id = 0x35,
761*4882a593Smuzhiyun 		.name = "hdaw",
762*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_HDA,
763*4882a593Smuzhiyun 		.smmu = {
764*4882a593Smuzhiyun 			.reg = 0x22c,
765*4882a593Smuzhiyun 			.bit = 21,
766*4882a593Smuzhiyun 		},
767*4882a593Smuzhiyun 		.la = {
768*4882a593Smuzhiyun 			.reg = 0x318,
769*4882a593Smuzhiyun 			.shift = 16,
770*4882a593Smuzhiyun 			.mask = 0xff,
771*4882a593Smuzhiyun 			.def = 0xff,
772*4882a593Smuzhiyun 		},
773*4882a593Smuzhiyun 	}, {
774*4882a593Smuzhiyun 		.id = 0x36,
775*4882a593Smuzhiyun 		.name = "host1xw",
776*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_HC,
777*4882a593Smuzhiyun 		.smmu = {
778*4882a593Smuzhiyun 			.reg = 0x22c,
779*4882a593Smuzhiyun 			.bit = 22,
780*4882a593Smuzhiyun 		},
781*4882a593Smuzhiyun 		.la = {
782*4882a593Smuzhiyun 			.reg = 0x314,
783*4882a593Smuzhiyun 			.shift = 0,
784*4882a593Smuzhiyun 			.mask = 0xff,
785*4882a593Smuzhiyun 			.def = 0x10,
786*4882a593Smuzhiyun 		},
787*4882a593Smuzhiyun 	}, {
788*4882a593Smuzhiyun 		.id = 0x37,
789*4882a593Smuzhiyun 		.name = "ispw",
790*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_ISP,
791*4882a593Smuzhiyun 		.smmu = {
792*4882a593Smuzhiyun 			.reg = 0x22c,
793*4882a593Smuzhiyun 			.bit = 23,
794*4882a593Smuzhiyun 		},
795*4882a593Smuzhiyun 		.la = {
796*4882a593Smuzhiyun 			.reg = 0x31c,
797*4882a593Smuzhiyun 			.shift = 0,
798*4882a593Smuzhiyun 			.mask = 0xff,
799*4882a593Smuzhiyun 			.def = 0xff,
800*4882a593Smuzhiyun 		},
801*4882a593Smuzhiyun 	}, {
802*4882a593Smuzhiyun 		.id = 0x38,
803*4882a593Smuzhiyun 		.name = "mpcorelpw",
804*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPCORELP,
805*4882a593Smuzhiyun 		.la = {
806*4882a593Smuzhiyun 			.reg = 0x324,
807*4882a593Smuzhiyun 			.shift = 16,
808*4882a593Smuzhiyun 			.mask = 0xff,
809*4882a593Smuzhiyun 			.def = 0x0e,
810*4882a593Smuzhiyun 		},
811*4882a593Smuzhiyun 	}, {
812*4882a593Smuzhiyun 		.id = 0x39,
813*4882a593Smuzhiyun 		.name = "mpcorew",
814*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPCORE,
815*4882a593Smuzhiyun 		.la = {
816*4882a593Smuzhiyun 			.reg = 0x320,
817*4882a593Smuzhiyun 			.shift = 16,
818*4882a593Smuzhiyun 			.mask = 0xff,
819*4882a593Smuzhiyun 			.def = 0x0e,
820*4882a593Smuzhiyun 		},
821*4882a593Smuzhiyun 	}, {
822*4882a593Smuzhiyun 		.id = 0x3a,
823*4882a593Smuzhiyun 		.name = "mpecswr",
824*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_MPE,
825*4882a593Smuzhiyun 		.smmu = {
826*4882a593Smuzhiyun 			.reg = 0x22c,
827*4882a593Smuzhiyun 			.bit = 26,
828*4882a593Smuzhiyun 		},
829*4882a593Smuzhiyun 		.la = {
830*4882a593Smuzhiyun 			.reg = 0x330,
831*4882a593Smuzhiyun 			.shift = 16,
832*4882a593Smuzhiyun 			.mask = 0xff,
833*4882a593Smuzhiyun 			.def = 0xff,
834*4882a593Smuzhiyun 		},
835*4882a593Smuzhiyun 	}, {
836*4882a593Smuzhiyun 		.id = 0x3b,
837*4882a593Smuzhiyun 		.name = "ppcsahbdmaw",
838*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_PPCS,
839*4882a593Smuzhiyun 		.smmu = {
840*4882a593Smuzhiyun 			.reg = 0x22c,
841*4882a593Smuzhiyun 			.bit = 27,
842*4882a593Smuzhiyun 		},
843*4882a593Smuzhiyun 		.la = {
844*4882a593Smuzhiyun 			.reg = 0x348,
845*4882a593Smuzhiyun 			.shift = 0,
846*4882a593Smuzhiyun 			.mask = 0xff,
847*4882a593Smuzhiyun 			.def = 0x10,
848*4882a593Smuzhiyun 		},
849*4882a593Smuzhiyun 	}, {
850*4882a593Smuzhiyun 		.id = 0x3c,
851*4882a593Smuzhiyun 		.name = "ppcsahbslvw",
852*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_PPCS,
853*4882a593Smuzhiyun 		.smmu = {
854*4882a593Smuzhiyun 			.reg = 0x22c,
855*4882a593Smuzhiyun 			.bit = 28,
856*4882a593Smuzhiyun 		},
857*4882a593Smuzhiyun 		.la = {
858*4882a593Smuzhiyun 			.reg = 0x348,
859*4882a593Smuzhiyun 			.shift = 16,
860*4882a593Smuzhiyun 			.mask = 0xff,
861*4882a593Smuzhiyun 			.def = 0x06,
862*4882a593Smuzhiyun 		},
863*4882a593Smuzhiyun 	}, {
864*4882a593Smuzhiyun 		.id = 0x3d,
865*4882a593Smuzhiyun 		.name = "sataw",
866*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_SATA,
867*4882a593Smuzhiyun 		.smmu = {
868*4882a593Smuzhiyun 			.reg = 0x22c,
869*4882a593Smuzhiyun 			.bit = 29,
870*4882a593Smuzhiyun 		},
871*4882a593Smuzhiyun 		.la = {
872*4882a593Smuzhiyun 			.reg = 0x350,
873*4882a593Smuzhiyun 			.shift = 16,
874*4882a593Smuzhiyun 			.mask = 0xff,
875*4882a593Smuzhiyun 			.def = 0x33,
876*4882a593Smuzhiyun 		},
877*4882a593Smuzhiyun 	}, {
878*4882a593Smuzhiyun 		.id = 0x3e,
879*4882a593Smuzhiyun 		.name = "vdebsevw",
880*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
881*4882a593Smuzhiyun 		.smmu = {
882*4882a593Smuzhiyun 			.reg = 0x22c,
883*4882a593Smuzhiyun 			.bit = 30,
884*4882a593Smuzhiyun 		},
885*4882a593Smuzhiyun 		.la = {
886*4882a593Smuzhiyun 			.reg = 0x35c,
887*4882a593Smuzhiyun 			.shift = 0,
888*4882a593Smuzhiyun 			.mask = 0xff,
889*4882a593Smuzhiyun 			.def = 0xff,
890*4882a593Smuzhiyun 		},
891*4882a593Smuzhiyun 	}, {
892*4882a593Smuzhiyun 		.id = 0x3f,
893*4882a593Smuzhiyun 		.name = "vdedbgw",
894*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
895*4882a593Smuzhiyun 		.smmu = {
896*4882a593Smuzhiyun 			.reg = 0x22c,
897*4882a593Smuzhiyun 			.bit = 31,
898*4882a593Smuzhiyun 		},
899*4882a593Smuzhiyun 		.la = {
900*4882a593Smuzhiyun 			.reg = 0x35c,
901*4882a593Smuzhiyun 			.shift = 16,
902*4882a593Smuzhiyun 			.mask = 0xff,
903*4882a593Smuzhiyun 			.def = 0xff,
904*4882a593Smuzhiyun 		},
905*4882a593Smuzhiyun 	}, {
906*4882a593Smuzhiyun 		.id = 0x40,
907*4882a593Smuzhiyun 		.name = "vdembew",
908*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
909*4882a593Smuzhiyun 		.smmu = {
910*4882a593Smuzhiyun 			.reg = 0x230,
911*4882a593Smuzhiyun 			.bit = 0,
912*4882a593Smuzhiyun 		},
913*4882a593Smuzhiyun 		.la = {
914*4882a593Smuzhiyun 			.reg = 0x360,
915*4882a593Smuzhiyun 			.shift = 0,
916*4882a593Smuzhiyun 			.mask = 0xff,
917*4882a593Smuzhiyun 			.def = 0x42,
918*4882a593Smuzhiyun 		},
919*4882a593Smuzhiyun 	}, {
920*4882a593Smuzhiyun 		.id = 0x41,
921*4882a593Smuzhiyun 		.name = "vdetpmw",
922*4882a593Smuzhiyun 		.swgroup = TEGRA_SWGROUP_VDE,
923*4882a593Smuzhiyun 		.smmu = {
924*4882a593Smuzhiyun 			.reg = 0x230,
925*4882a593Smuzhiyun 			.bit = 1,
926*4882a593Smuzhiyun 		},
927*4882a593Smuzhiyun 		.la = {
928*4882a593Smuzhiyun 			.reg = 0x360,
929*4882a593Smuzhiyun 			.shift = 16,
930*4882a593Smuzhiyun 			.mask = 0xff,
931*4882a593Smuzhiyun 			.def = 0x2a,
932*4882a593Smuzhiyun 		},
933*4882a593Smuzhiyun 	},
934*4882a593Smuzhiyun };
935*4882a593Smuzhiyun 
936*4882a593Smuzhiyun static const struct tegra_smmu_swgroup tegra30_swgroups[] = {
937*4882a593Smuzhiyun 	{ .name = "dc",   .swgroup = TEGRA_SWGROUP_DC,   .reg = 0x240 },
938*4882a593Smuzhiyun 	{ .name = "dcb",  .swgroup = TEGRA_SWGROUP_DCB,  .reg = 0x244 },
939*4882a593Smuzhiyun 	{ .name = "epp",  .swgroup = TEGRA_SWGROUP_EPP,  .reg = 0x248 },
940*4882a593Smuzhiyun 	{ .name = "g2",   .swgroup = TEGRA_SWGROUP_G2,   .reg = 0x24c },
941*4882a593Smuzhiyun 	{ .name = "mpe",  .swgroup = TEGRA_SWGROUP_MPE,  .reg = 0x264 },
942*4882a593Smuzhiyun 	{ .name = "vi",   .swgroup = TEGRA_SWGROUP_VI,   .reg = 0x280 },
943*4882a593Smuzhiyun 	{ .name = "afi",  .swgroup = TEGRA_SWGROUP_AFI,  .reg = 0x238 },
944*4882a593Smuzhiyun 	{ .name = "avpc", .swgroup = TEGRA_SWGROUP_AVPC, .reg = 0x23c },
945*4882a593Smuzhiyun 	{ .name = "nv",   .swgroup = TEGRA_SWGROUP_NV,   .reg = 0x268 },
946*4882a593Smuzhiyun 	{ .name = "nv2",  .swgroup = TEGRA_SWGROUP_NV2,  .reg = 0x26c },
947*4882a593Smuzhiyun 	{ .name = "hda",  .swgroup = TEGRA_SWGROUP_HDA,  .reg = 0x254 },
948*4882a593Smuzhiyun 	{ .name = "hc",   .swgroup = TEGRA_SWGROUP_HC,   .reg = 0x250 },
949*4882a593Smuzhiyun 	{ .name = "ppcs", .swgroup = TEGRA_SWGROUP_PPCS, .reg = 0x270 },
950*4882a593Smuzhiyun 	{ .name = "sata", .swgroup = TEGRA_SWGROUP_SATA, .reg = 0x278 },
951*4882a593Smuzhiyun 	{ .name = "vde",  .swgroup = TEGRA_SWGROUP_VDE,  .reg = 0x27c },
952*4882a593Smuzhiyun 	{ .name = "isp",  .swgroup = TEGRA_SWGROUP_ISP,  .reg = 0x258 },
953*4882a593Smuzhiyun };
954*4882a593Smuzhiyun 
955*4882a593Smuzhiyun static const unsigned int tegra30_group_drm[] = {
956*4882a593Smuzhiyun 	TEGRA_SWGROUP_DC,
957*4882a593Smuzhiyun 	TEGRA_SWGROUP_DCB,
958*4882a593Smuzhiyun 	TEGRA_SWGROUP_G2,
959*4882a593Smuzhiyun 	TEGRA_SWGROUP_NV,
960*4882a593Smuzhiyun 	TEGRA_SWGROUP_NV2,
961*4882a593Smuzhiyun };
962*4882a593Smuzhiyun 
963*4882a593Smuzhiyun static const struct tegra_smmu_group_soc tegra30_groups[] = {
964*4882a593Smuzhiyun 	{
965*4882a593Smuzhiyun 		.name = "drm",
966*4882a593Smuzhiyun 		.swgroups = tegra30_group_drm,
967*4882a593Smuzhiyun 		.num_swgroups = ARRAY_SIZE(tegra30_group_drm),
968*4882a593Smuzhiyun 	},
969*4882a593Smuzhiyun };
970*4882a593Smuzhiyun 
971*4882a593Smuzhiyun static const struct tegra_smmu_soc tegra30_smmu_soc = {
972*4882a593Smuzhiyun 	.clients = tegra30_mc_clients,
973*4882a593Smuzhiyun 	.num_clients = ARRAY_SIZE(tegra30_mc_clients),
974*4882a593Smuzhiyun 	.swgroups = tegra30_swgroups,
975*4882a593Smuzhiyun 	.num_swgroups = ARRAY_SIZE(tegra30_swgroups),
976*4882a593Smuzhiyun 	.groups = tegra30_groups,
977*4882a593Smuzhiyun 	.num_groups = ARRAY_SIZE(tegra30_groups),
978*4882a593Smuzhiyun 	.supports_round_robin_arbitration = false,
979*4882a593Smuzhiyun 	.supports_request_limit = false,
980*4882a593Smuzhiyun 	.num_tlb_lines = 16,
981*4882a593Smuzhiyun 	.num_asids = 4,
982*4882a593Smuzhiyun };
983*4882a593Smuzhiyun 
984*4882a593Smuzhiyun #define TEGRA30_MC_RESET(_name, _control, _status, _bit)	\
985*4882a593Smuzhiyun 	{							\
986*4882a593Smuzhiyun 		.name = #_name,					\
987*4882a593Smuzhiyun 		.id = TEGRA30_MC_RESET_##_name,			\
988*4882a593Smuzhiyun 		.control = _control,				\
989*4882a593Smuzhiyun 		.status = _status,				\
990*4882a593Smuzhiyun 		.bit = _bit,					\
991*4882a593Smuzhiyun 	}
992*4882a593Smuzhiyun 
993*4882a593Smuzhiyun static const struct tegra_mc_reset tegra30_mc_resets[] = {
994*4882a593Smuzhiyun 	TEGRA30_MC_RESET(AFI,      0x200, 0x204,  0),
995*4882a593Smuzhiyun 	TEGRA30_MC_RESET(AVPC,     0x200, 0x204,  1),
996*4882a593Smuzhiyun 	TEGRA30_MC_RESET(DC,       0x200, 0x204,  2),
997*4882a593Smuzhiyun 	TEGRA30_MC_RESET(DCB,      0x200, 0x204,  3),
998*4882a593Smuzhiyun 	TEGRA30_MC_RESET(EPP,      0x200, 0x204,  4),
999*4882a593Smuzhiyun 	TEGRA30_MC_RESET(2D,       0x200, 0x204,  5),
1000*4882a593Smuzhiyun 	TEGRA30_MC_RESET(HC,       0x200, 0x204,  6),
1001*4882a593Smuzhiyun 	TEGRA30_MC_RESET(HDA,      0x200, 0x204,  7),
1002*4882a593Smuzhiyun 	TEGRA30_MC_RESET(ISP,      0x200, 0x204,  8),
1003*4882a593Smuzhiyun 	TEGRA30_MC_RESET(MPCORE,   0x200, 0x204,  9),
1004*4882a593Smuzhiyun 	TEGRA30_MC_RESET(MPCORELP, 0x200, 0x204, 10),
1005*4882a593Smuzhiyun 	TEGRA30_MC_RESET(MPE,      0x200, 0x204, 11),
1006*4882a593Smuzhiyun 	TEGRA30_MC_RESET(3D,       0x200, 0x204, 12),
1007*4882a593Smuzhiyun 	TEGRA30_MC_RESET(3D2,      0x200, 0x204, 13),
1008*4882a593Smuzhiyun 	TEGRA30_MC_RESET(PPCS,     0x200, 0x204, 14),
1009*4882a593Smuzhiyun 	TEGRA30_MC_RESET(SATA,     0x200, 0x204, 15),
1010*4882a593Smuzhiyun 	TEGRA30_MC_RESET(VDE,      0x200, 0x204, 16),
1011*4882a593Smuzhiyun 	TEGRA30_MC_RESET(VI,       0x200, 0x204, 17),
1012*4882a593Smuzhiyun };
1013*4882a593Smuzhiyun 
1014*4882a593Smuzhiyun const struct tegra_mc_soc tegra30_mc_soc = {
1015*4882a593Smuzhiyun 	.clients = tegra30_mc_clients,
1016*4882a593Smuzhiyun 	.num_clients = ARRAY_SIZE(tegra30_mc_clients),
1017*4882a593Smuzhiyun 	.num_address_bits = 32,
1018*4882a593Smuzhiyun 	.atom_size = 16,
1019*4882a593Smuzhiyun 	.client_id_mask = 0x7f,
1020*4882a593Smuzhiyun 	.smmu = &tegra30_smmu_soc,
1021*4882a593Smuzhiyun 	.emem_regs = tegra30_mc_emem_regs,
1022*4882a593Smuzhiyun 	.num_emem_regs = ARRAY_SIZE(tegra30_mc_emem_regs),
1023*4882a593Smuzhiyun 	.intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION |
1024*4882a593Smuzhiyun 		   MC_INT_DECERR_EMEM,
1025*4882a593Smuzhiyun 	.reset_ops = &tegra_mc_reset_ops_common,
1026*4882a593Smuzhiyun 	.resets = tegra30_mc_resets,
1027*4882a593Smuzhiyun 	.num_resets = ARRAY_SIZE(tegra30_mc_resets),
1028*4882a593Smuzhiyun };
1029