summaryrefslogtreecommitdiff
path: root/arch/arm/common/fiq_glue.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/common/fiq_glue.S')
-rw-r--r--arch/arm/common/fiq_glue.S26
1 files changed, 10 insertions, 16 deletions
diff --git a/arch/arm/common/fiq_glue.S b/arch/arm/common/fiq_glue.S
index 24b42cec4813..596565afed9d 100644
--- a/arch/arm/common/fiq_glue.S
+++ b/arch/arm/common/fiq_glue.S
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2008 Google, Inc.
+ * Copyright (C) 2010-2015 NVIDIA Corporation. All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -22,14 +23,13 @@
/* fiq stack: r0-r15,cpsr,spsr of interrupted mode */
ENTRY(fiq_glue)
- /* store pc, cpsr from previous mode, reserve space for spsr */
+ /* store pc, cpsr from previous mode */
mrs r12, spsr
- sub lr, lr, #4
+ sub r11, lr, #4
subs r10, #1
bne nested_fiq
- str r12, [sp, #-8]!
- str lr, [sp, #-4]!
+ stmfd sp!, {r11-r12, lr}
/* store r8-r14 from previous mode */
sub sp, sp, #(7 * 4)
@@ -86,15 +86,12 @@ fiq_from_usr_mode_exit:
msr cpsr_c, #(FIQ_MODE | PSR_I_BIT | PSR_F_BIT)
ldmfd sp!, {r0-r7}
- ldr lr, [sp, #(4 * 7)]
- ldr r12, [sp, #(4 * 8)]
- add sp, sp, #(10 * 4)
+ add sp, sp, #(7 * 4)
+ ldmfd sp!, {r11-r12, lr}
exit_fiq:
msr spsr_cxsf, r12
add r10, #1
- cmp r11, #0
- moveqs pc, lr
- bx r11 /* jump to custom fiq return function */
+ movs pc, r11
nested_fiq:
orr r12, r12, #(PSR_F_BIT)
@@ -102,17 +99,14 @@ nested_fiq:
fiq_glue_end:
-ENTRY(fiq_glue_setup) /* func, data, sp, smc call number */
- stmfd sp!, {r4}
- mrs r4, cpsr
+ENTRY(fiq_glue_setup) /* func, data, sp */
+ mrs r3, cpsr
msr cpsr_c, #(FIQ_MODE | PSR_I_BIT | PSR_F_BIT)
movs r8, r0
mov r9, r1
mov sp, r2
- mov r11, r3
moveq r10, #0
movne r10, #1
- msr cpsr_c, r4
- ldmfd sp!, {r4}
+ msr cpsr_c, r3
bx lr