• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20  * DEALINGS IN THE SOFTWARE.
21  */
22 
23 #include <bl_common.h>
24 #include <smmu.h>
25 #include <tegra_def.h>
26 
27 /*******************************************************************************
28  * Array to hold SMMU context for Tegra186
29  ******************************************************************************/
30 static __attribute__((aligned(16))) smmu_regs_t tegra186_smmu_context[] = {
31 	_START_OF_TABLE_,
32 	mc_make_sid_security_cfg(SCEW),
33 	mc_make_sid_security_cfg(AFIR),
34 	mc_make_sid_security_cfg(NVDISPLAYR1),
35 	mc_make_sid_security_cfg(XUSB_DEVR),
36 	mc_make_sid_security_cfg(VICSRD1),
37 	mc_make_sid_security_cfg(NVENCSWR),
38 	mc_make_sid_security_cfg(TSECSRDB),
39 	mc_make_sid_security_cfg(AXISW),
40 	mc_make_sid_security_cfg(SDMMCWAB),
41 	mc_make_sid_security_cfg(AONDMAW),
42 	mc_make_sid_security_cfg(GPUSWR2),
43 	mc_make_sid_security_cfg(SATAW),
44 	mc_make_sid_security_cfg(UFSHCW),
45 	mc_make_sid_security_cfg(AFIW),
46 	mc_make_sid_security_cfg(SDMMCR),
47 	mc_make_sid_security_cfg(SCEDMAW),
48 	mc_make_sid_security_cfg(UFSHCR),
49 	mc_make_sid_security_cfg(SDMMCWAA),
50 	mc_make_sid_security_cfg(APEDMAW),
51 	mc_make_sid_security_cfg(SESWR),
52 	mc_make_sid_security_cfg(MPCORER),
53 	mc_make_sid_security_cfg(PTCR),
54 	mc_make_sid_security_cfg(BPMPW),
55 	mc_make_sid_security_cfg(ETRW),
56 	mc_make_sid_security_cfg(GPUSRD),
57 	mc_make_sid_security_cfg(VICSWR),
58 	mc_make_sid_security_cfg(SCEDMAR),
59 	mc_make_sid_security_cfg(HDAW),
60 	mc_make_sid_security_cfg(ISPWA),
61 	mc_make_sid_security_cfg(EQOSW),
62 	mc_make_sid_security_cfg(XUSB_HOSTW),
63 	mc_make_sid_security_cfg(TSECSWR),
64 	mc_make_sid_security_cfg(SDMMCRAA),
65 	mc_make_sid_security_cfg(APER),
66 	mc_make_sid_security_cfg(VIW),
67 	mc_make_sid_security_cfg(APEW),
68 	mc_make_sid_security_cfg(AXISR),
69 	mc_make_sid_security_cfg(SDMMCW),
70 	mc_make_sid_security_cfg(BPMPDMAW),
71 	mc_make_sid_security_cfg(ISPRA),
72 	mc_make_sid_security_cfg(NVDECSWR),
73 	mc_make_sid_security_cfg(XUSB_DEVW),
74 	mc_make_sid_security_cfg(NVDECSRD),
75 	mc_make_sid_security_cfg(MPCOREW),
76 	mc_make_sid_security_cfg(NVDISPLAYR),
77 	mc_make_sid_security_cfg(BPMPDMAR),
78 	mc_make_sid_security_cfg(NVJPGSWR),
79 	mc_make_sid_security_cfg(NVDECSRD1),
80 	mc_make_sid_security_cfg(TSECSRD),
81 	mc_make_sid_security_cfg(NVJPGSRD),
82 	mc_make_sid_security_cfg(SDMMCWA),
83 	mc_make_sid_security_cfg(SCER),
84 	mc_make_sid_security_cfg(XUSB_HOSTR),
85 	mc_make_sid_security_cfg(VICSRD),
86 	mc_make_sid_security_cfg(AONDMAR),
87 	mc_make_sid_security_cfg(AONW),
88 	mc_make_sid_security_cfg(SDMMCRA),
89 	mc_make_sid_security_cfg(HOST1XDMAR),
90 	mc_make_sid_security_cfg(EQOSR),
91 	mc_make_sid_security_cfg(SATAR),
92 	mc_make_sid_security_cfg(BPMPR),
93 	mc_make_sid_security_cfg(HDAR),
94 	mc_make_sid_security_cfg(SDMMCRAB),
95 	mc_make_sid_security_cfg(ETRR),
96 	mc_make_sid_security_cfg(AONR),
97 	mc_make_sid_security_cfg(APEDMAR),
98 	mc_make_sid_security_cfg(SESRD),
99 	mc_make_sid_security_cfg(NVENCSRD),
100 	mc_make_sid_security_cfg(GPUSWR),
101 	mc_make_sid_security_cfg(TSECSWRB),
102 	mc_make_sid_security_cfg(ISPWB),
103 	mc_make_sid_security_cfg(GPUSRD2),
104 	mc_make_sid_override_cfg(APER),
105 	mc_make_sid_override_cfg(VICSRD),
106 	mc_make_sid_override_cfg(NVENCSRD),
107 	mc_make_sid_override_cfg(NVJPGSWR),
108 	mc_make_sid_override_cfg(AONW),
109 	mc_make_sid_override_cfg(BPMPR),
110 	mc_make_sid_override_cfg(BPMPW),
111 	mc_make_sid_override_cfg(HDAW),
112 	mc_make_sid_override_cfg(NVDISPLAYR1),
113 	mc_make_sid_override_cfg(APEDMAR),
114 	mc_make_sid_override_cfg(AFIR),
115 	mc_make_sid_override_cfg(AXISR),
116 	mc_make_sid_override_cfg(VICSRD1),
117 	mc_make_sid_override_cfg(TSECSRD),
118 	mc_make_sid_override_cfg(BPMPDMAW),
119 	mc_make_sid_override_cfg(MPCOREW),
120 	mc_make_sid_override_cfg(XUSB_HOSTR),
121 	mc_make_sid_override_cfg(GPUSWR),
122 	mc_make_sid_override_cfg(XUSB_DEVR),
123 	mc_make_sid_override_cfg(UFSHCW),
124 	mc_make_sid_override_cfg(XUSB_HOSTW),
125 	mc_make_sid_override_cfg(SDMMCWAB),
126 	mc_make_sid_override_cfg(SATAW),
127 	mc_make_sid_override_cfg(SCEDMAR),
128 	mc_make_sid_override_cfg(HOST1XDMAR),
129 	mc_make_sid_override_cfg(SDMMCWA),
130 	mc_make_sid_override_cfg(APEDMAW),
131 	mc_make_sid_override_cfg(SESWR),
132 	mc_make_sid_override_cfg(AXISW),
133 	mc_make_sid_override_cfg(AONDMAW),
134 	mc_make_sid_override_cfg(TSECSWRB),
135 	mc_make_sid_override_cfg(MPCORER),
136 	mc_make_sid_override_cfg(ISPWB),
137 	mc_make_sid_override_cfg(AONR),
138 	mc_make_sid_override_cfg(BPMPDMAR),
139 	mc_make_sid_override_cfg(HDAR),
140 	mc_make_sid_override_cfg(SDMMCRA),
141 	mc_make_sid_override_cfg(ETRW),
142 	mc_make_sid_override_cfg(GPUSWR2),
143 	mc_make_sid_override_cfg(EQOSR),
144 	mc_make_sid_override_cfg(TSECSWR),
145 	mc_make_sid_override_cfg(ETRR),
146 	mc_make_sid_override_cfg(NVDECSRD),
147 	mc_make_sid_override_cfg(TSECSRDB),
148 	mc_make_sid_override_cfg(SDMMCRAA),
149 	mc_make_sid_override_cfg(NVDECSRD1),
150 	mc_make_sid_override_cfg(SDMMCR),
151 	mc_make_sid_override_cfg(NVJPGSRD),
152 	mc_make_sid_override_cfg(SCEDMAW),
153 	mc_make_sid_override_cfg(SDMMCWAA),
154 	mc_make_sid_override_cfg(APEW),
155 	mc_make_sid_override_cfg(AONDMAR),
156 	mc_make_sid_override_cfg(PTCR),
157 	mc_make_sid_override_cfg(SCER),
158 	mc_make_sid_override_cfg(ISPRA),
159 	mc_make_sid_override_cfg(ISPWA),
160 	mc_make_sid_override_cfg(VICSWR),
161 	mc_make_sid_override_cfg(SESRD),
162 	mc_make_sid_override_cfg(SDMMCW),
163 	mc_make_sid_override_cfg(SDMMCRAB),
164 	mc_make_sid_override_cfg(EQOSW),
165 	mc_make_sid_override_cfg(GPUSRD2),
166 	mc_make_sid_override_cfg(SCEW),
167 	mc_make_sid_override_cfg(GPUSRD),
168 	mc_make_sid_override_cfg(NVDECSWR),
169 	mc_make_sid_override_cfg(XUSB_DEVW),
170 	mc_make_sid_override_cfg(SATAR),
171 	mc_make_sid_override_cfg(NVDISPLAYR),
172 	mc_make_sid_override_cfg(VIW),
173 	mc_make_sid_override_cfg(UFSHCR),
174 	mc_make_sid_override_cfg(NVENCSWR),
175 	mc_make_sid_override_cfg(AFIW),
176 	smmu_make_gnsr0_nsec_cfg(CR0),
177 	smmu_make_gnsr0_sec_cfg(IDR0),
178 	smmu_make_gnsr0_sec_cfg(IDR1),
179 	smmu_make_gnsr0_sec_cfg(IDR2),
180 	smmu_make_gnsr0_nsec_cfg(GFSR),
181 	smmu_make_gnsr0_nsec_cfg(GFSYNR0),
182 	smmu_make_gnsr0_nsec_cfg(GFSYNR1),
183 	smmu_make_gnsr0_nsec_cfg(TLBGSTATUS),
184 	smmu_make_gnsr0_nsec_cfg(PIDR2),
185 	smmu_make_smrg_group(0),
186 	smmu_make_smrg_group(1),
187 	smmu_make_smrg_group(2),
188 	smmu_make_smrg_group(3),
189 	smmu_make_smrg_group(4),
190 	smmu_make_smrg_group(5),
191 	smmu_make_smrg_group(6),
192 	smmu_make_smrg_group(7),
193 	smmu_make_smrg_group(8),
194 	smmu_make_smrg_group(9),
195 	smmu_make_smrg_group(10),
196 	smmu_make_smrg_group(11),
197 	smmu_make_smrg_group(12),
198 	smmu_make_smrg_group(13),
199 	smmu_make_smrg_group(14),
200 	smmu_make_smrg_group(15),
201 	smmu_make_smrg_group(16),
202 	smmu_make_smrg_group(17),
203 	smmu_make_smrg_group(18),
204 	smmu_make_smrg_group(19),
205 	smmu_make_smrg_group(20),
206 	smmu_make_smrg_group(21),
207 	smmu_make_smrg_group(22),
208 	smmu_make_smrg_group(23),
209 	smmu_make_smrg_group(24),
210 	smmu_make_smrg_group(25),
211 	smmu_make_smrg_group(26),
212 	smmu_make_smrg_group(27),
213 	smmu_make_smrg_group(28),
214 	smmu_make_smrg_group(29),
215 	smmu_make_smrg_group(30),
216 	smmu_make_smrg_group(31),
217 	smmu_make_smrg_group(32),
218 	smmu_make_smrg_group(33),
219 	smmu_make_smrg_group(34),
220 	smmu_make_smrg_group(35),
221 	smmu_make_smrg_group(36),
222 	smmu_make_smrg_group(37),
223 	smmu_make_smrg_group(38),
224 	smmu_make_smrg_group(39),
225 	smmu_make_smrg_group(40),
226 	smmu_make_smrg_group(41),
227 	smmu_make_smrg_group(42),
228 	smmu_make_smrg_group(43),
229 	smmu_make_smrg_group(44),
230 	smmu_make_smrg_group(45),
231 	smmu_make_smrg_group(46),
232 	smmu_make_smrg_group(47),
233 	smmu_make_smrg_group(48),
234 	smmu_make_smrg_group(49),
235 	smmu_make_smrg_group(50),
236 	smmu_make_smrg_group(51),
237 	smmu_make_smrg_group(52),
238 	smmu_make_smrg_group(53),
239 	smmu_make_smrg_group(54),
240 	smmu_make_smrg_group(55),
241 	smmu_make_smrg_group(56),
242 	smmu_make_smrg_group(57),
243 	smmu_make_smrg_group(58),
244 	smmu_make_smrg_group(59),
245 	smmu_make_smrg_group(60),
246 	smmu_make_smrg_group(61),
247 	smmu_make_smrg_group(62),
248 	smmu_make_smrg_group(63),
249 	smmu_make_cb_group(0),
250 	smmu_make_cb_group(1),
251 	smmu_make_cb_group(2),
252 	smmu_make_cb_group(3),
253 	smmu_make_cb_group(4),
254 	smmu_make_cb_group(5),
255 	smmu_make_cb_group(6),
256 	smmu_make_cb_group(7),
257 	smmu_make_cb_group(8),
258 	smmu_make_cb_group(9),
259 	smmu_make_cb_group(10),
260 	smmu_make_cb_group(11),
261 	smmu_make_cb_group(12),
262 	smmu_make_cb_group(13),
263 	smmu_make_cb_group(14),
264 	smmu_make_cb_group(15),
265 	smmu_make_cb_group(16),
266 	smmu_make_cb_group(17),
267 	smmu_make_cb_group(18),
268 	smmu_make_cb_group(19),
269 	smmu_make_cb_group(20),
270 	smmu_make_cb_group(21),
271 	smmu_make_cb_group(22),
272 	smmu_make_cb_group(23),
273 	smmu_make_cb_group(24),
274 	smmu_make_cb_group(25),
275 	smmu_make_cb_group(26),
276 	smmu_make_cb_group(27),
277 	smmu_make_cb_group(28),
278 	smmu_make_cb_group(29),
279 	smmu_make_cb_group(30),
280 	smmu_make_cb_group(31),
281 	smmu_make_cb_group(32),
282 	smmu_make_cb_group(33),
283 	smmu_make_cb_group(34),
284 	smmu_make_cb_group(35),
285 	smmu_make_cb_group(36),
286 	smmu_make_cb_group(37),
287 	smmu_make_cb_group(38),
288 	smmu_make_cb_group(39),
289 	smmu_make_cb_group(40),
290 	smmu_make_cb_group(41),
291 	smmu_make_cb_group(42),
292 	smmu_make_cb_group(43),
293 	smmu_make_cb_group(44),
294 	smmu_make_cb_group(45),
295 	smmu_make_cb_group(46),
296 	smmu_make_cb_group(47),
297 	smmu_make_cb_group(48),
298 	smmu_make_cb_group(49),
299 	smmu_make_cb_group(50),
300 	smmu_make_cb_group(51),
301 	smmu_make_cb_group(52),
302 	smmu_make_cb_group(53),
303 	smmu_make_cb_group(54),
304 	smmu_make_cb_group(55),
305 	smmu_make_cb_group(56),
306 	smmu_make_cb_group(57),
307 	smmu_make_cb_group(58),
308 	smmu_make_cb_group(59),
309 	smmu_make_cb_group(60),
310 	smmu_make_cb_group(61),
311 	smmu_make_cb_group(62),
312 	smmu_make_cb_group(63),
313 	smmu_bypass_cfg,	/* TBU settings */
314 	_END_OF_TABLE_,
315 };
316 
317 /*******************************************************************************
318  * Handler to return the pointer to the SMMU's context struct
319  ******************************************************************************/
plat_get_smmu_ctx(void)320 smmu_regs_t *plat_get_smmu_ctx(void)
321 {
322 	/* index of _END_OF_TABLE_ */
323 	tegra186_smmu_context[0].val = ARRAY_SIZE(tegra186_smmu_context) - 1;
324 
325 	return tegra186_smmu_context;
326 }
327