2 * Copyright (c) 2010 Broadcom Corporation
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 /* Manufacturer Ids */
21 #define MFGID_ARM 0x43b
22 #define MFGID_BRCM 0x4bf
23 #define MFGID_MIPS 0x4a7
25 /* Component Classes */
28 #define CC_CORESIGHT 9
32 #define CC_PRIMECELL 0xf
34 /* Enumeration ROM registers */
35 #define ER_EROMENTRY 0x000
36 #define ER_REMAPCONTROL 0xe00
37 #define ER_REMAPSELECT 0xe04
38 #define ER_MASTERSELECT 0xe10
50 #define ER_BAD 0xffffffff
53 #define CIA_MFG_MASK 0xfff00000
54 #define CIA_MFG_SHIFT 20
55 #define CIA_CID_MASK 0x000fff00
56 #define CIA_CID_SHIFT 8
57 #define CIA_CCL_MASK 0x000000f0
58 #define CIA_CCL_SHIFT 4
61 #define CIB_REV_MASK 0xff000000
62 #define CIB_REV_SHIFT 24
63 #define CIB_NSW_MASK 0x00f80000
64 #define CIB_NSW_SHIFT 19
65 #define CIB_NMW_MASK 0x0007c000
66 #define CIB_NMW_SHIFT 14
67 #define CIB_NSP_MASK 0x00003e00
68 #define CIB_NSP_SHIFT 9
69 #define CIB_NMP_MASK 0x000001f0
70 #define CIB_NMP_SHIFT 4
72 /* EROM MasterPortDesc */
73 #define MPD_MUI_MASK 0x0000ff00
74 #define MPD_MUI_SHIFT 8
75 #define MPD_MP_MASK 0x000000f0
76 #define MPD_MP_SHIFT 4
79 #define AD_ADDR_MASK 0xfffff000
80 #define AD_SP_MASK 0x00000f00
82 #define AD_ST_MASK 0x000000c0
84 #define AD_ST_SLAVE 0x00000000
85 #define AD_ST_BRIDGE 0x00000040
86 #define AD_ST_SWRAP 0x00000080
87 #define AD_ST_MWRAP 0x000000c0
88 #define AD_SZ_MASK 0x00000030
90 #define AD_SZ_4K 0x00000000
91 #define AD_SZ_8K 0x00000010
92 #define AD_SZ_16K 0x00000020
93 #define AD_SZ_SZD 0x00000030
94 #define AD_AG32 0x00000008
95 #define AD_ADDR_ALIGN 0x00000fff
96 #define AD_SZ_BASE 0x00001000 /* 4KB */
99 #define SD_SZ_MASK 0xfffff000
100 #define SD_SG32 0x00000008
101 #define SD_SZ_ALIGN 0x00000fff
103 #ifndef _LANGUAGE_ASSEMBLY
105 typedef volatile struct _aidmp
{
106 u32 oobselina30
; /* 0x000 */
107 u32 oobselina74
; /* 0x004 */
109 u32 oobselinb30
; /* 0x020 */
110 u32 oobselinb74
; /* 0x024 */
112 u32 oobselinc30
; /* 0x040 */
113 u32 oobselinc74
; /* 0x044 */
115 u32 oobselind30
; /* 0x060 */
116 u32 oobselind74
; /* 0x064 */
118 u32 oobselouta30
; /* 0x100 */
119 u32 oobselouta74
; /* 0x104 */
121 u32 oobseloutb30
; /* 0x120 */
122 u32 oobseloutb74
; /* 0x124 */
124 u32 oobseloutc30
; /* 0x140 */
125 u32 oobseloutc74
; /* 0x144 */
127 u32 oobseloutd30
; /* 0x160 */
128 u32 oobseloutd74
; /* 0x164 */
130 u32 oobsynca
; /* 0x200 */
131 u32 oobseloutaen
; /* 0x204 */
133 u32 oobsyncb
; /* 0x220 */
134 u32 oobseloutben
; /* 0x224 */
136 u32 oobsyncc
; /* 0x240 */
137 u32 oobseloutcen
; /* 0x244 */
139 u32 oobsyncd
; /* 0x260 */
140 u32 oobseloutden
; /* 0x264 */
142 u32 oobaextwidth
; /* 0x300 */
143 u32 oobainwidth
; /* 0x304 */
144 u32 oobaoutwidth
; /* 0x308 */
146 u32 oobbextwidth
; /* 0x320 */
147 u32 oobbinwidth
; /* 0x324 */
148 u32 oobboutwidth
; /* 0x328 */
150 u32 oobcextwidth
; /* 0x340 */
151 u32 oobcinwidth
; /* 0x344 */
152 u32 oobcoutwidth
; /* 0x348 */
154 u32 oobdextwidth
; /* 0x360 */
155 u32 oobdinwidth
; /* 0x364 */
156 u32 oobdoutwidth
; /* 0x368 */
158 u32 ioctrlset
; /* 0x400 */
159 u32 ioctrlclear
; /* 0x404 */
160 u32 ioctrl
; /* 0x408 */
162 u32 iostatus
; /* 0x500 */
164 u32 ioctrlwidth
; /* 0x700 */
165 u32 iostatuswidth
; /* 0x704 */
167 u32 resetctrl
; /* 0x800 */
168 u32 resetstatus
; /* 0x804 */
169 u32 resetreadid
; /* 0x808 */
170 u32 resetwriteid
; /* 0x80c */
172 u32 errlogctrl
; /* 0x900 */
173 u32 errlogdone
; /* 0x904 */
174 u32 errlogstatus
; /* 0x908 */
175 u32 errlogaddrlo
; /* 0x90c */
176 u32 errlogaddrhi
; /* 0x910 */
177 u32 errlogid
; /* 0x914 */
178 u32 errloguser
; /* 0x918 */
179 u32 errlogflags
; /* 0x91c */
181 u32 intstatus
; /* 0xa00 */
183 u32 config
; /* 0xe00 */
185 u32 itcr
; /* 0xf00 */
187 u32 itipooba
; /* 0xf10 */
188 u32 itipoobb
; /* 0xf14 */
189 u32 itipoobc
; /* 0xf18 */
190 u32 itipoobd
; /* 0xf1c */
192 u32 itipoobaout
; /* 0xf30 */
193 u32 itipoobbout
; /* 0xf34 */
194 u32 itipoobcout
; /* 0xf38 */
195 u32 itipoobdout
; /* 0xf3c */
197 u32 itopooba
; /* 0xf50 */
198 u32 itopoobb
; /* 0xf54 */
199 u32 itopoobc
; /* 0xf58 */
200 u32 itopoobd
; /* 0xf5c */
202 u32 itopoobain
; /* 0xf70 */
203 u32 itopoobbin
; /* 0xf74 */
204 u32 itopoobcin
; /* 0xf78 */
205 u32 itopoobdin
; /* 0xf7c */
207 u32 itopreset
; /* 0xf90 */
209 u32 peripherialid4
; /* 0xfd0 */
210 u32 peripherialid5
; /* 0xfd4 */
211 u32 peripherialid6
; /* 0xfd8 */
212 u32 peripherialid7
; /* 0xfdc */
213 u32 peripherialid0
; /* 0xfe0 */
214 u32 peripherialid1
; /* 0xfe4 */
215 u32 peripherialid2
; /* 0xfe8 */
216 u32 peripherialid3
; /* 0xfec */
217 u32 componentid0
; /* 0xff0 */
218 u32 componentid1
; /* 0xff4 */
219 u32 componentid2
; /* 0xff8 */
220 u32 componentid3
; /* 0xffc */
223 #endif /* _LANGUAGE_ASSEMBLY */
225 /* Out-of-band Router registers */
226 #define OOB_BUSCONFIG 0x020
227 #define OOB_STATUSA 0x100
228 #define OOB_STATUSB 0x104
229 #define OOB_STATUSC 0x108
230 #define OOB_STATUSD 0x10c
231 #define OOB_ENABLEA0 0x200
232 #define OOB_ENABLEA1 0x204
233 #define OOB_ENABLEA2 0x208
234 #define OOB_ENABLEA3 0x20c
235 #define OOB_ENABLEB0 0x280
236 #define OOB_ENABLEB1 0x284
237 #define OOB_ENABLEB2 0x288
238 #define OOB_ENABLEB3 0x28c
239 #define OOB_ENABLEC0 0x300
240 #define OOB_ENABLEC1 0x304
241 #define OOB_ENABLEC2 0x308
242 #define OOB_ENABLEC3 0x30c
243 #define OOB_ENABLED0 0x380
244 #define OOB_ENABLED1 0x384
245 #define OOB_ENABLED2 0x388
246 #define OOB_ENABLED3 0x38c
247 #define OOB_ITCR 0xf00
248 #define OOB_ITIPOOBA 0xf10
249 #define OOB_ITIPOOBB 0xf14
250 #define OOB_ITIPOOBC 0xf18
251 #define OOB_ITIPOOBD 0xf1c
252 #define OOB_ITOPOOBA 0xf30
253 #define OOB_ITOPOOBB 0xf34
254 #define OOB_ITOPOOBC 0xf38
255 #define OOB_ITOPOOBD 0xf3c
257 /* DMP wrapper registers */
258 #define AI_OOBSELINA30 0x000
259 #define AI_OOBSELINA74 0x004
260 #define AI_OOBSELINB30 0x020
261 #define AI_OOBSELINB74 0x024
262 #define AI_OOBSELINC30 0x040
263 #define AI_OOBSELINC74 0x044
264 #define AI_OOBSELIND30 0x060
265 #define AI_OOBSELIND74 0x064
266 #define AI_OOBSELOUTA30 0x100
267 #define AI_OOBSELOUTA74 0x104
268 #define AI_OOBSELOUTB30 0x120
269 #define AI_OOBSELOUTB74 0x124
270 #define AI_OOBSELOUTC30 0x140
271 #define AI_OOBSELOUTC74 0x144
272 #define AI_OOBSELOUTD30 0x160
273 #define AI_OOBSELOUTD74 0x164
274 #define AI_OOBSYNCA 0x200
275 #define AI_OOBSELOUTAEN 0x204
276 #define AI_OOBSYNCB 0x220
277 #define AI_OOBSELOUTBEN 0x224
278 #define AI_OOBSYNCC 0x240
279 #define AI_OOBSELOUTCEN 0x244
280 #define AI_OOBSYNCD 0x260
281 #define AI_OOBSELOUTDEN 0x264
282 #define AI_OOBAEXTWIDTH 0x300
283 #define AI_OOBAINWIDTH 0x304
284 #define AI_OOBAOUTWIDTH 0x308
285 #define AI_OOBBEXTWIDTH 0x320
286 #define AI_OOBBINWIDTH 0x324
287 #define AI_OOBBOUTWIDTH 0x328
288 #define AI_OOBCEXTWIDTH 0x340
289 #define AI_OOBCINWIDTH 0x344
290 #define AI_OOBCOUTWIDTH 0x348
291 #define AI_OOBDEXTWIDTH 0x360
292 #define AI_OOBDINWIDTH 0x364
293 #define AI_OOBDOUTWIDTH 0x368
295 #if defined(__BIG_ENDIAN) && defined(BCMHND74K)
296 /* Selective swapped defines for those registers we need in
299 #define AI_IOCTRLSET 0x404
300 #define AI_IOCTRLCLEAR 0x400
301 #define AI_IOCTRL 0x40c
302 #define AI_IOSTATUS 0x504
303 #define AI_RESETCTRL 0x804
304 #define AI_RESETSTATUS 0x800
306 #else /* !__BIG_ENDIAN || !BCMHND74K */
308 #define AI_IOCTRLSET 0x400
309 #define AI_IOCTRLCLEAR 0x404
310 #define AI_IOCTRL 0x408
311 #define AI_IOSTATUS 0x500
312 #define AI_RESETCTRL 0x800
313 #define AI_RESETSTATUS 0x804
315 #endif /* __BIG_ENDIAN && BCMHND74K */
317 #define AI_IOCTRLWIDTH 0x700
318 #define AI_IOSTATUSWIDTH 0x704
320 #define AI_RESETREADID 0x808
321 #define AI_RESETWRITEID 0x80c
322 #define AI_ERRLOGCTRL 0xa00
323 #define AI_ERRLOGDONE 0xa04
324 #define AI_ERRLOGSTATUS 0xa08
325 #define AI_ERRLOGADDRLO 0xa0c
326 #define AI_ERRLOGADDRHI 0xa10
327 #define AI_ERRLOGID 0xa14
328 #define AI_ERRLOGUSER 0xa18
329 #define AI_ERRLOGFLAGS 0xa1c
330 #define AI_INTSTATUS 0xa00
331 #define AI_CONFIG 0xe00
332 #define AI_ITCR 0xf00
333 #define AI_ITIPOOBA 0xf10
334 #define AI_ITIPOOBB 0xf14
335 #define AI_ITIPOOBC 0xf18
336 #define AI_ITIPOOBD 0xf1c
337 #define AI_ITIPOOBAOUT 0xf30
338 #define AI_ITIPOOBBOUT 0xf34
339 #define AI_ITIPOOBCOUT 0xf38
340 #define AI_ITIPOOBDOUT 0xf3c
341 #define AI_ITOPOOBA 0xf50
342 #define AI_ITOPOOBB 0xf54
343 #define AI_ITOPOOBC 0xf58
344 #define AI_ITOPOOBD 0xf5c
345 #define AI_ITOPOOBAIN 0xf70
346 #define AI_ITOPOOBBIN 0xf74
347 #define AI_ITOPOOBCIN 0xf78
348 #define AI_ITOPOOBDIN 0xf7c
349 #define AI_ITOPRESET 0xf90
350 #define AI_PERIPHERIALID4 0xfd0
351 #define AI_PERIPHERIALID5 0xfd4
352 #define AI_PERIPHERIALID6 0xfd8
353 #define AI_PERIPHERIALID7 0xfdc
354 #define AI_PERIPHERIALID0 0xfe0
355 #define AI_PERIPHERIALID1 0xfe4
356 #define AI_PERIPHERIALID2 0xfe8
357 #define AI_PERIPHERIALID3 0xfec
358 #define AI_COMPONENTID0 0xff0
359 #define AI_COMPONENTID1 0xff4
360 #define AI_COMPONENTID2 0xff8
361 #define AI_COMPONENTID3 0xffc
367 #define AICFG_OOB 0x00000020
368 #define AICFG_IOS 0x00000010
369 #define AICFG_IOC 0x00000008
370 #define AICFG_TO 0x00000004
371 #define AICFG_ERRL 0x00000002
372 #define AICFG_RST 0x00000001
374 #endif /* _AIDMP_H */