Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
omap_l3_smx.h
Go to the documentation of this file.
1 /*
2  * OMAP3XXX L3 Interconnect Driver header
3  *
4  * Copyright (C) 2011 Texas Corporation
5  * Felipe Balbi <[email protected]>
6  * Santosh Shilimkar <[email protected]>
7  * sricharan <[email protected]>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22  * USA
23  */
24 #ifndef __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
25 #define __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
26 
27 /* Register definitions. All 64-bit wide */
28 #define L3_COMPONENT 0x000
29 #define L3_CORE 0x018
30 #define L3_AGENT_CONTROL 0x020
31 #define L3_AGENT_STATUS 0x028
32 #define L3_ERROR_LOG 0x058
33 
34 #define L3_ERROR_LOG_MULTI (1 << 31)
35 #define L3_ERROR_LOG_SECONDARY (1 << 30)
36 
37 #define L3_ERROR_LOG_ADDR 0x060
38 
39 /* Register definitions for Sideband Interconnect */
40 #define L3_SI_CONTROL 0x020
41 #define L3_SI_FLAG_STATUS_0 0x510
42 
43 static const u64 shift = 1;
44 
45 #define L3_STATUS_0_MPUIA_BRST (shift << 0)
46 #define L3_STATUS_0_MPUIA_RSP (shift << 1)
47 #define L3_STATUS_0_MPUIA_INBAND (shift << 2)
48 #define L3_STATUS_0_IVAIA_BRST (shift << 6)
49 #define L3_STATUS_0_IVAIA_RSP (shift << 7)
50 #define L3_STATUS_0_IVAIA_INBAND (shift << 8)
51 #define L3_STATUS_0_SGXIA_BRST (shift << 9)
52 #define L3_STATUS_0_SGXIA_RSP (shift << 10)
53 #define L3_STATUS_0_SGXIA_MERROR (shift << 11)
54 #define L3_STATUS_0_CAMIA_BRST (shift << 12)
55 #define L3_STATUS_0_CAMIA_RSP (shift << 13)
56 #define L3_STATUS_0_CAMIA_INBAND (shift << 14)
57 #define L3_STATUS_0_DISPIA_BRST (shift << 15)
58 #define L3_STATUS_0_DISPIA_RSP (shift << 16)
59 #define L3_STATUS_0_DMARDIA_BRST (shift << 18)
60 #define L3_STATUS_0_DMARDIA_RSP (shift << 19)
61 #define L3_STATUS_0_DMAWRIA_BRST (shift << 21)
62 #define L3_STATUS_0_DMAWRIA_RSP (shift << 22)
63 #define L3_STATUS_0_USBOTGIA_BRST (shift << 24)
64 #define L3_STATUS_0_USBOTGIA_RSP (shift << 25)
65 #define L3_STATUS_0_USBOTGIA_INBAND (shift << 26)
66 #define L3_STATUS_0_USBHOSTIA_BRST (shift << 27)
67 #define L3_STATUS_0_USBHOSTIA_INBAND (shift << 28)
68 #define L3_STATUS_0_SMSTA_REQ (shift << 48)
69 #define L3_STATUS_0_GPMCTA_REQ (shift << 49)
70 #define L3_STATUS_0_OCMRAMTA_REQ (shift << 50)
71 #define L3_STATUS_0_OCMROMTA_REQ (shift << 51)
72 #define L3_STATUS_0_IVATA_REQ (shift << 54)
73 #define L3_STATUS_0_SGXTA_REQ (shift << 55)
74 #define L3_STATUS_0_SGXTA_SERROR (shift << 56)
75 #define L3_STATUS_0_GPMCTA_SERROR (shift << 57)
76 #define L3_STATUS_0_L4CORETA_REQ (shift << 58)
77 #define L3_STATUS_0_L4PERTA_REQ (shift << 59)
78 #define L3_STATUS_0_L4EMUTA_REQ (shift << 60)
79 #define L3_STATUS_0_MAD2DTA_REQ (shift << 61)
80 
81 #define L3_STATUS_0_TIMEOUT_MASK (L3_STATUS_0_MPUIA_BRST \
82  | L3_STATUS_0_MPUIA_RSP \
83  | L3_STATUS_0_IVAIA_BRST \
84  | L3_STATUS_0_IVAIA_RSP \
85  | L3_STATUS_0_SGXIA_BRST \
86  | L3_STATUS_0_SGXIA_RSP \
87  | L3_STATUS_0_CAMIA_BRST \
88  | L3_STATUS_0_CAMIA_RSP \
89  | L3_STATUS_0_DISPIA_BRST \
90  | L3_STATUS_0_DISPIA_RSP \
91  | L3_STATUS_0_DMARDIA_BRST \
92  | L3_STATUS_0_DMARDIA_RSP \
93  | L3_STATUS_0_DMAWRIA_BRST \
94  | L3_STATUS_0_DMAWRIA_RSP \
95  | L3_STATUS_0_USBOTGIA_BRST \
96  | L3_STATUS_0_USBOTGIA_RSP \
97  | L3_STATUS_0_USBHOSTIA_BRST \
98  | L3_STATUS_0_SMSTA_REQ \
99  | L3_STATUS_0_GPMCTA_REQ \
100  | L3_STATUS_0_OCMRAMTA_REQ \
101  | L3_STATUS_0_OCMROMTA_REQ \
102  | L3_STATUS_0_IVATA_REQ \
103  | L3_STATUS_0_SGXTA_REQ \
104  | L3_STATUS_0_L4CORETA_REQ \
105  | L3_STATUS_0_L4PERTA_REQ \
106  | L3_STATUS_0_L4EMUTA_REQ \
107  | L3_STATUS_0_MAD2DTA_REQ)
108 
109 #define L3_SI_FLAG_STATUS_1 0x530
110 
111 #define L3_STATUS_1_MPU_DATAIA (1 << 0)
112 #define L3_STATUS_1_DAPIA0 (1 << 3)
113 #define L3_STATUS_1_DAPIA1 (1 << 4)
114 #define L3_STATUS_1_IVAIA (1 << 6)
115 
116 #define L3_PM_ERROR_LOG 0x020
117 #define L3_PM_CONTROL 0x028
118 #define L3_PM_ERROR_CLEAR_SINGLE 0x030
119 #define L3_PM_ERROR_CLEAR_MULTI 0x038
120 #define L3_PM_REQ_INFO_PERMISSION(n) (0x048 + (0x020 * n))
121 #define L3_PM_READ_PERMISSION(n) (0x050 + (0x020 * n))
122 #define L3_PM_WRITE_PERMISSION(n) (0x058 + (0x020 * n))
123 #define L3_PM_ADDR_MATCH(n) (0x060 + (0x020 * n))
124 
125 /* L3 error log bit fields. Common for IA and TA */
126 #define L3_ERROR_LOG_CODE 24
127 #define L3_ERROR_LOG_INITID 8
128 #define L3_ERROR_LOG_CMD 0
129 
130 /* L3 agent status bit fields. */
131 #define L3_AGENT_STATUS_CLEAR_IA 0x10000000
132 #define L3_AGENT_STATUS_CLEAR_TA 0x01000000
133 
134 #define OMAP34xx_IRQ_L3_APP 10
135 #define L3_APPLICATION_ERROR 0x0
136 #define L3_DEBUG_ERROR 0x1
137 
139  /* LCD has 1 ID */
141  /* SAD2D has 1 ID */
143  /* MPU has 5 IDs */
149  /* IVA2.2 SS has 3 IDs*/
153  /* IVA 2.2 SS DMA has 6 IDS */
160  /* SGX has 1 ID */
162  /* CAM has 3 ID */
166  /* DAP has 1 ID */
168  /* SDMA WR has 2 IDs */
171  /* SDMA RD has 4 IDs */
176  /* HSUSB OTG has 1 ID */
178  /* HSUSB HOST has 1 ID */
180 };
181 
188  /* codes 5 and 6 are reserved */
191  /* codes 9 - 15 are also reserved */
192 };
193 
194 struct omap3_l3 {
195  struct device *dev;
196  struct clk *ick;
197 
198  /* memory base*/
199  void __iomem *rt;
200 
202  int app_irq;
203 
204  /* true when and inband functional error occurs */
205  unsigned inband:1;
206 };
207 
208 /* offsets for l3 agents in order with the Flag status register */
209 static unsigned int omap3_l3_app_bases[] = {
210  /* MPU IA */
211  0x1400,
212  0x1400,
213  0x1400,
214  /* RESERVED */
215  0,
216  0,
217  0,
218  /* IVA 2.2 IA */
219  0x1800,
220  0x1800,
221  0x1800,
222  /* SGX IA */
223  0x1c00,
224  0x1c00,
225  /* RESERVED */
226  0,
227  /* CAMERA IA */
228  0x5800,
229  0x5800,
230  0x5800,
231  /* DISPLAY IA */
232  0x5400,
233  0x5400,
234  /* RESERVED */
235  0,
236  /*SDMA RD IA */
237  0x4c00,
238  0x4c00,
239  /* RESERVED */
240  0,
241  /* SDMA WR IA */
242  0x5000,
243  0x5000,
244  /* RESERVED */
245  0,
246  /* USB OTG IA */
247  0x4400,
248  0x4400,
249  0x4400,
250  /* USB HOST IA */
251  0x4000,
252  0x4000,
253  /* RESERVED */
254  0,
255  0,
256  0,
257  0,
258  /* SAD2D IA */
259  0x3000,
260  0x3000,
261  0x3000,
262  /* RESERVED */
263  0,
264  0,
265  0,
266  0,
267  0,
268  0,
269  0,
270  0,
271  0,
272  0,
273  0,
274  0,
275  /* SMA TA */
276  0x2000,
277  /* GPMC TA */
278  0x2400,
279  /* OCM RAM TA */
280  0x2800,
281  /* OCM ROM TA */
282  0x2C00,
283  /* L4 CORE TA */
284  0x6800,
285  /* L4 PER TA */
286  0x6c00,
287  /* IVA 2.2 TA */
288  0x6000,
289  /* SGX TA */
290  0x6400,
291  /* L4 EMU TA */
292  0x7000,
293  /* GPMC TA */
294  0x2400,
295  /* L4 CORE TA */
296  0x6800,
297  /* L4 PER TA */
298  0x6c00,
299  /* L4 EMU TA */
300  0x7000,
301  /* MAD2D TA */
302  0x3400,
303  /* RESERVED */
304  0,
305  0,
306 };
307 
308 static unsigned int omap3_l3_debug_bases[] = {
309  /* MPU DATA IA */
310  0x1400,
311  /* RESERVED */
312  0,
313  0,
314  /* DAP IA */
315  0x5c00,
316  0x5c00,
317  /* RESERVED */
318  0,
319  /* IVA 2.2 IA */
320  0x1800,
321  /* REST RESERVED */
322 };
323 
324 static u32 *omap3_l3_bases[] = {
325  omap3_l3_app_bases,
326  omap3_l3_debug_bases,
327 };
328 
329 /*
330  * REVISIT define __raw_readll/__raw_writell here, but move them to
331  * <asm/io.h> at some point
332  */
333 #define __raw_writell(v, a) (__chk_io_ptr(a), \
334  *(volatile u64 __force *)(a) = (v))
335 #define __raw_readll(a) (__chk_io_ptr(a), \
336  *(volatile u64 __force *)(a))
337 
338 #endif