summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-07-20 13:06:00 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-07-20 13:06:00 -0600
commit57fffd22bdc9ba4d356795734f9020ecc08d6d10 (patch)
tree11dd113d9a34247b36d846872ff830af7d5c4aac /nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c
parentd53f435a4667385c8f1e4b1c93ebcc9965fa0c24 (diff)
downloadpx4-nuttx-57fffd22bdc9ba4d356795734f9020ecc08d6d10.tar.gz
px4-nuttx-57fffd22bdc9ba4d356795734f9020ecc08d6d10.tar.bz2
px4-nuttx-57fffd22bdc9ba4d356795734f9020ecc08d6d10.zip
Misc Cortex-A5 changes include new file for cache operations
Diffstat (limited to 'nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c')
-rw-r--r--nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c b/nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c
index c98bc46ec..3f5c55c70 100644
--- a/nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c
+++ b/nuttx/arch/arm/src/armv7-a/arm_prefetchabort.c
@@ -87,9 +87,10 @@
*
****************************************************************************/
-void arm_prefetchabort(uint32_t *regs)
-{
#ifdef CONFIG_PAGING
+
+void arm_prefetchabort(uint32_t *regs, uint32_t ifar, uint32_t ifsr)
+{
uint32_t *savestate;
/* Save the saved processor context in current_regs where it can be accessed
@@ -97,10 +98,8 @@ void arm_prefetchabort(uint32_t *regs)
*/
savestate = (uint32_t*)current_regs;
-#endif
current_regs = regs;
-#ifdef CONFIG_PAGING
/* Get the (virtual) address of instruction that caused the prefetch abort.
* When the exception occurred, this address was provided in the lr register
* and this value was saved in the context save area as the PC at the
@@ -146,9 +145,28 @@ void arm_prefetchabort(uint32_t *regs)
current_regs = savestate;
}
else
-#endif
{
- lldbg("Prefetch abort. PC: %08x\n", regs[REG_PC]);
+ lldbg("Prefetch abort. PC: %08x IFAR: %08x IFSR: %08x\n",
+ regs[REG_PC], ifar, ifsr);
PANIC();
}
}
+
+#else /* CONFIG_PAGING */
+
+void arm_prefetchabort(uint32_t *regs, uint32_t ifar, uint32_t ifsr)
+{
+ /* Save the saved processor context in current_regs where it can be accessed
+ * for register dumps and possibly context switching.
+ */
+
+ current_regs = regs;
+
+ /* Crash -- possibly showing diagnostic debug information. */
+
+ lldbg("Prefetch abort. PC: %08x IFAR: %08x IFSR: %08x\n",
+ regs[REG_PC], ifar, ifsr);
+ PANIC();
+}
+
+#endif /* CONFIG_PAGING */