1
2
3
4
5
6
7
8
9
10 #ifndef __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
11 #define __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
12
13
14 #define L3_COMPONENT 0x000
15 #define L3_CORE 0x018
16 #define L3_AGENT_CONTROL 0x020
17 #define L3_AGENT_STATUS 0x028
18 #define L3_ERROR_LOG 0x058
19
20 #define L3_ERROR_LOG_MULTI (1 << 31)
21 #define L3_ERROR_LOG_SECONDARY (1 << 30)
22
23 #define L3_ERROR_LOG_ADDR 0x060
24
25
26 #define L3_SI_CONTROL 0x020
27 #define L3_SI_FLAG_STATUS_0 0x510
28
29 static const u64 shift = 1;
30
31 #define L3_STATUS_0_MPUIA_BRST (shift << 0)
32 #define L3_STATUS_0_MPUIA_RSP (shift << 1)
33 #define L3_STATUS_0_MPUIA_INBAND (shift << 2)
34 #define L3_STATUS_0_IVAIA_BRST (shift << 6)
35 #define L3_STATUS_0_IVAIA_RSP (shift << 7)
36 #define L3_STATUS_0_IVAIA_INBAND (shift << 8)
37 #define L3_STATUS_0_SGXIA_BRST (shift << 9)
38 #define L3_STATUS_0_SGXIA_RSP (shift << 10)
39 #define L3_STATUS_0_SGXIA_MERROR (shift << 11)
40 #define L3_STATUS_0_CAMIA_BRST (shift << 12)
41 #define L3_STATUS_0_CAMIA_RSP (shift << 13)
42 #define L3_STATUS_0_CAMIA_INBAND (shift << 14)
43 #define L3_STATUS_0_DISPIA_BRST (shift << 15)
44 #define L3_STATUS_0_DISPIA_RSP (shift << 16)
45 #define L3_STATUS_0_DMARDIA_BRST (shift << 18)
46 #define L3_STATUS_0_DMARDIA_RSP (shift << 19)
47 #define L3_STATUS_0_DMAWRIA_BRST (shift << 21)
48 #define L3_STATUS_0_DMAWRIA_RSP (shift << 22)
49 #define L3_STATUS_0_USBOTGIA_BRST (shift << 24)
50 #define L3_STATUS_0_USBOTGIA_RSP (shift << 25)
51 #define L3_STATUS_0_USBOTGIA_INBAND (shift << 26)
52 #define L3_STATUS_0_USBHOSTIA_BRST (shift << 27)
53 #define L3_STATUS_0_USBHOSTIA_INBAND (shift << 28)
54 #define L3_STATUS_0_SMSTA_REQ (shift << 48)
55 #define L3_STATUS_0_GPMCTA_REQ (shift << 49)
56 #define L3_STATUS_0_OCMRAMTA_REQ (shift << 50)
57 #define L3_STATUS_0_OCMROMTA_REQ (shift << 51)
58 #define L3_STATUS_0_IVATA_REQ (shift << 54)
59 #define L3_STATUS_0_SGXTA_REQ (shift << 55)
60 #define L3_STATUS_0_SGXTA_SERROR (shift << 56)
61 #define L3_STATUS_0_GPMCTA_SERROR (shift << 57)
62 #define L3_STATUS_0_L4CORETA_REQ (shift << 58)
63 #define L3_STATUS_0_L4PERTA_REQ (shift << 59)
64 #define L3_STATUS_0_L4EMUTA_REQ (shift << 60)
65 #define L3_STATUS_0_MAD2DTA_REQ (shift << 61)
66
67 #define L3_STATUS_0_TIMEOUT_MASK (L3_STATUS_0_MPUIA_BRST \
68 | L3_STATUS_0_MPUIA_RSP \
69 | L3_STATUS_0_IVAIA_BRST \
70 | L3_STATUS_0_IVAIA_RSP \
71 | L3_STATUS_0_SGXIA_BRST \
72 | L3_STATUS_0_SGXIA_RSP \
73 | L3_STATUS_0_CAMIA_BRST \
74 | L3_STATUS_0_CAMIA_RSP \
75 | L3_STATUS_0_DISPIA_BRST \
76 | L3_STATUS_0_DISPIA_RSP \
77 | L3_STATUS_0_DMARDIA_BRST \
78 | L3_STATUS_0_DMARDIA_RSP \
79 | L3_STATUS_0_DMAWRIA_BRST \
80 | L3_STATUS_0_DMAWRIA_RSP \
81 | L3_STATUS_0_USBOTGIA_BRST \
82 | L3_STATUS_0_USBOTGIA_RSP \
83 | L3_STATUS_0_USBHOSTIA_BRST \
84 | L3_STATUS_0_SMSTA_REQ \
85 | L3_STATUS_0_GPMCTA_REQ \
86 | L3_STATUS_0_OCMRAMTA_REQ \
87 | L3_STATUS_0_OCMROMTA_REQ \
88 | L3_STATUS_0_IVATA_REQ \
89 | L3_STATUS_0_SGXTA_REQ \
90 | L3_STATUS_0_L4CORETA_REQ \
91 | L3_STATUS_0_L4PERTA_REQ \
92 | L3_STATUS_0_L4EMUTA_REQ \
93 | L3_STATUS_0_MAD2DTA_REQ)
94
95 #define L3_SI_FLAG_STATUS_1 0x530
96
97 #define L3_STATUS_1_MPU_DATAIA (1 << 0)
98 #define L3_STATUS_1_DAPIA0 (1 << 3)
99 #define L3_STATUS_1_DAPIA1 (1 << 4)
100 #define L3_STATUS_1_IVAIA (1 << 6)
101
102 #define L3_PM_ERROR_LOG 0x020
103 #define L3_PM_CONTROL 0x028
104 #define L3_PM_ERROR_CLEAR_SINGLE 0x030
105 #define L3_PM_ERROR_CLEAR_MULTI 0x038
106 #define L3_PM_REQ_INFO_PERMISSION(n) (0x048 + (0x020 * n))
107 #define L3_PM_READ_PERMISSION(n) (0x050 + (0x020 * n))
108 #define L3_PM_WRITE_PERMISSION(n) (0x058 + (0x020 * n))
109 #define L3_PM_ADDR_MATCH(n) (0x060 + (0x020 * n))
110
111
112 #define L3_ERROR_LOG_CODE 24
113 #define L3_ERROR_LOG_INITID 8
114 #define L3_ERROR_LOG_CMD 0
115
116
117 #define L3_AGENT_STATUS_CLEAR_IA 0x10000000
118 #define L3_AGENT_STATUS_CLEAR_TA 0x01000000
119
120 #define OMAP34xx_IRQ_L3_APP 10
121 #define L3_APPLICATION_ERROR 0x0
122 #define L3_DEBUG_ERROR 0x1
123
124 enum omap3_l3_initiator_id {
125
126 OMAP_L3_LCD = 29,
127
128 OMAP_L3_SAD2D = 28,
129
130 OMAP_L3_IA_MPU_SS_1 = 27,
131 OMAP_L3_IA_MPU_SS_2 = 26,
132 OMAP_L3_IA_MPU_SS_3 = 25,
133 OMAP_L3_IA_MPU_SS_4 = 24,
134 OMAP_L3_IA_MPU_SS_5 = 23,
135
136 OMAP_L3_IA_IVA_SS_1 = 22,
137 OMAP_L3_IA_IVA_SS_2 = 21,
138 OMAP_L3_IA_IVA_SS_3 = 20,
139
140 OMAP_L3_IA_IVA_SS_DMA_1 = 19,
141 OMAP_L3_IA_IVA_SS_DMA_2 = 18,
142 OMAP_L3_IA_IVA_SS_DMA_3 = 17,
143 OMAP_L3_IA_IVA_SS_DMA_4 = 16,
144 OMAP_L3_IA_IVA_SS_DMA_5 = 15,
145 OMAP_L3_IA_IVA_SS_DMA_6 = 14,
146
147 OMAP_L3_IA_SGX = 13,
148
149 OMAP_L3_IA_CAM_1 = 12,
150 OMAP_L3_IA_CAM_2 = 11,
151 OMAP_L3_IA_CAM_3 = 10,
152
153 OMAP_L3_IA_DAP = 9,
154
155 OMAP_L3_SDMA_WR_1 = 8,
156 OMAP_L3_SDMA_WR_2 = 7,
157
158 OMAP_L3_SDMA_RD_1 = 6,
159 OMAP_L3_SDMA_RD_2 = 5,
160 OMAP_L3_SDMA_RD_3 = 4,
161 OMAP_L3_SDMA_RD_4 = 3,
162
163 OMAP_L3_USBOTG = 2,
164
165 OMAP_L3_USBHOST = 1,
166 };
167
168 enum omap3_l3_code {
169 OMAP_L3_CODE_NOERROR = 0,
170 OMAP_L3_CODE_UNSUP_CMD = 1,
171 OMAP_L3_CODE_ADDR_HOLE = 2,
172 OMAP_L3_CODE_PROTECT_VIOLATION = 3,
173 OMAP_L3_CODE_IN_BAND_ERR = 4,
174
175 OMAP_L3_CODE_REQ_TOUT_NOT_ACCEPT = 7,
176 OMAP_L3_CODE_REQ_TOUT_NO_RESP = 8,
177
178 };
179
180 struct omap3_l3 {
181 struct device *dev;
182 struct clk *ick;
183
184
185 void __iomem *rt;
186
187 int debug_irq;
188 int app_irq;
189
190
191 unsigned inband:1;
192 };
193
194
195 static unsigned int omap3_l3_app_bases[] = {
196
197 0x1400,
198 0x1400,
199 0x1400,
200
201 0,
202 0,
203 0,
204
205 0x1800,
206 0x1800,
207 0x1800,
208
209 0x1c00,
210 0x1c00,
211
212 0,
213
214 0x5800,
215 0x5800,
216 0x5800,
217
218 0x5400,
219 0x5400,
220
221 0,
222
223 0x4c00,
224 0x4c00,
225
226 0,
227
228 0x5000,
229 0x5000,
230
231 0,
232
233 0x4400,
234 0x4400,
235 0x4400,
236
237 0x4000,
238 0x4000,
239
240 0,
241 0,
242 0,
243 0,
244
245 0x3000,
246 0x3000,
247 0x3000,
248
249 0,
250 0,
251 0,
252 0,
253 0,
254 0,
255 0,
256 0,
257 0,
258 0,
259 0,
260 0,
261
262 0x2000,
263
264 0x2400,
265
266 0x2800,
267
268 0x2C00,
269
270 0x6800,
271
272 0x6c00,
273
274 0x6000,
275
276 0x6400,
277
278 0x7000,
279
280 0x2400,
281
282 0x6800,
283
284 0x6c00,
285
286 0x7000,
287
288 0x3400,
289
290 0,
291 0,
292 };
293
294 static unsigned int omap3_l3_debug_bases[] = {
295
296 0x1400,
297
298 0,
299 0,
300
301 0x5c00,
302 0x5c00,
303
304 0,
305
306 0x1800,
307
308 };
309
310 static u32 *omap3_l3_bases[] = {
311 omap3_l3_app_bases,
312 omap3_l3_debug_bases,
313 };
314
315
316
317
318
319 #define __raw_writell(v, a) (__chk_io_ptr(a), \
320 *(volatile u64 __force *)(a) = (v))
321 #define __raw_readll(a) (__chk_io_ptr(a), \
322 *(volatile u64 __force *)(a))
323
324 #endif