summaryrefslogtreecommitdiffstats
path: root/arch/microblaze/kernel/hw_exception_handler.S
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2011-01-31 15:10:04 +0100
committerMichal Simek <monstr@monstr.eu>2011-03-09 08:09:54 +0100
commit6e83557c38b40d6e9d1c82ad0ae59d8e5db9c50c (patch)
tree856d8cf13273c2f8a696473ff9237cdc17c46632 /arch/microblaze/kernel/hw_exception_handler.S
parentmicroblaze: Do not use r0_ram space for syscall debugging (diff)
downloadlinux-6e83557c38b40d6e9d1c82ad0ae59d8e5db9c50c.tar.xz
linux-6e83557c38b40d6e9d1c82ad0ae59d8e5db9c50c.zip
microblaze: Remove r0_ram pointer and PTO alignment
r0_ram pool was used for saving/restoring register content if hw exception happen. This poll was replaced by pt_pool_space with PT_SIZE size. Based on this change SAVE_STATE_ARG_SPACE was removed which caused that PTO offset is zero that's why is also removed. r0_ram space was used as scratchpad by v850. In early Microblaze Linux developing phase was this part of code blindly copied. Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze/kernel/hw_exception_handler.S')
-rw-r--r--arch/microblaze/kernel/hw_exception_handler.S16
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S
index ec5e99dd5d75..2401fa4b7ce1 100644
--- a/arch/microblaze/kernel/hw_exception_handler.S
+++ b/arch/microblaze/kernel/hw_exception_handler.S
@@ -93,7 +93,7 @@
lwi r6, r1, PT_R6; \
lwi r11, r1, PT_R11; \
lwi r31, r1, PT_R31; \
- lwi r1, r0, TOPHYS(r0_ram + 0);
+ lwi r1, r1, PT_R1;
#endif /* CONFIG_MMU */
#define LWREG_NOP \
@@ -208,8 +208,8 @@
* | . |
* | . |
*
- * NO_MMU kernel use the same r0_ram pointed space - look to vmlinux.lds.S
- * which is used for storing register values - old style was, that value were
+ * MMU kernel uses the same 'pt_pool_space' pointed space
+ * which is used for storing register values - noMMu style was, that values were
* stored in stack but in case of failure you lost information about register.
* Currently you can see register value in memory in specific place.
* In compare to with previous solution the speed should be the same.
@@ -228,8 +228,12 @@
*/
/* wrappers to restore state before coming to entry.S */
-
#ifdef CONFIG_MMU
+.section .data
+.align 4
+pt_pool_space:
+ .space PT_SIZE
+
#ifdef DEBUG
/* Create space for exception counting. */
.section .data
@@ -299,10 +303,10 @@ _hw_exception_handler:
#ifndef CONFIG_MMU
addik r1, r1, -(EX_HANDLER_STACK_SIZ); /* Create stack frame */
#else
- swi r1, r0, TOPHYS(r0_ram + 0); /* GET_SP */
+ swi r1, r0, TOPHYS(pt_pool_space + PT_R1); /* GET_SP */
/* Save date to kernel memory. Here is the problem
* when you came from user space */
- ori r1, r0, TOPHYS(r0_ram + 28);
+ ori r1, r0, TOPHYS(pt_pool_space);
#endif
swi r3, r1, PT_R3
swi r4, r1, PT_R4