FS#10296 - ARM: Display Fault Status and Address for data aborts

Attached to Project: Rockbox
Opened by Rafaël Carré (funman) - Monday, 08 June 2009, 14:17 GMT
Last edited by Rafaël Carré (funman) - Tuesday, 09 March 2010, 16:20 GMT
Task Type Patches
Category Operating System/Drivers
Status Closed
Assigned To No-one
Operating System All players
Severity Low
Priority Normal
Reported Version Version 3.2
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No


This extends UIE(), showing the fault address (the address where the fault occured is already displayed, but not the address causing the fault) and the raw status.

This works on all ARM cpus with coprocessor cp15, but here I don't know if some supported targets don't have it (I suppse targets without mmu won't have it)

Note that we could extend it further to show a textual description of the fault. I didn't do it since I use it on my Clip and the screen width is way too small, so you have to look at the technical reference manual to see the fault's meaning.
This task depends upon

Closed by  Rafaël Carré (funman)
Tuesday, 09 March 2010, 16:20 GMT
Reason for closing:  Accepted
Additional comments about closing:  r25087
Comment by Torne Wuff (torne) - Tuesday, 09 June 2009, 09:22 GMT
Just recording what I said about this on IRC yesterday:

1) This will need to be #ifdef'ed to only apply to ARM cores which have an MMU or MPU. ARM7TDMI (portalplayer) does not, and other targets may not either. The presence of CP15 is not technically sufficient as it's allowed for CP15 to be implemented even if the core does not have the FSR/FAR registers.
2) The FSR could be printed for prefetch aborts as well as data aborts, as it's valid and possibly useful. On ARMv6 and later, there is a separate FSR for prefetch aborts, though, which should be printed instead.
Comment by Rafaël Carré (funman) - Tuesday, 09 March 2010, 14:55 GMT
Here is the list of ARMv4 / ARMv5 CPUs we have:

DSC25 = ? (archos av300 = abandoned, not even any code in svn)
AT91SAM9260 = ? (lyreproto1, abandoned)
TCC77x = ? (used in abandoned ports for m200, c100, logikdax, and iaudio7)

PNX0101 = not supported
PP = not supported

TCC780x = supported
DM320 = supported
S3C2440 = supported
S5L870x = supported
AS3525/AS3525v2 = supported
Comment by Rafaël Carré (funman) - Tuesday, 09 March 2010, 15:21 GMT
Here is the list of ARM cpus we use:

arm922tdmi (as3525)
arm926-ejs (as3525v2, at91sam9260, dm320, tcc780x)
arm7tdmi (PP, pnx0101, dsc25)
arm946-es (tcc77x)
arm940tdmi (s5l870x) -- 8702 has an arm926-ejs /!\
arm920t (s3c2440)

- V6 -
arm1136jfs (imx31l)
arm1176jzs (PP6100 -sansa view, abandoned-)
Comment by Rafaël Carré (funman) - Tuesday, 09 March 2010, 16:08 GMT
synced, add armv6 code, and only enable for CPU != ARM7TDMI