/*1* linux/arch/arm/kernel/fiqasm.S2*3* Derived from code originally in linux/arch/arm/kernel/fiq.c:4*5* Copyright (C) 1998 Russell King6* Copyright (C) 1998, 1999 Phil Blundell7* Copyright (C) 2011, Linaro Limited8*9* FIQ support written by Philip Blundell <[email protected]>, 1998.10*11* FIQ support re-written by Russell King to be more generic12*13* v7/Thumb-2 compatibility modifications by Linaro Limited, 2011.14*/1516#include <linux/linkage.h>17#include <asm/assembler.h>1819/*20* Taking an interrupt in FIQ mode is death, so both these functions21* disable irqs for the duration.22*/2324ENTRY(__set_fiq_regs)25mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE26mrs r1, cpsr27msr cpsr_c, r2 @ select FIQ mode28mov r0, r0 @ avoid hazard prior to ARMv429ldmia r0!, {r8 - r12}30ldr sp, [r0], #431ldr lr, [r0]32msr cpsr_c, r1 @ return to SVC mode33mov r0, r0 @ avoid hazard prior to ARMv434ret lr35ENDPROC(__set_fiq_regs)3637ENTRY(__get_fiq_regs)38mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE39mrs r1, cpsr40msr cpsr_c, r2 @ select FIQ mode41mov r0, r0 @ avoid hazard prior to ARMv442stmia r0!, {r8 - r12}43str sp, [r0], #444str lr, [r0]45msr cpsr_c, r1 @ return to SVC mode46mov r0, r0 @ avoid hazard prior to ARMv447ret lr48ENDPROC(__get_fiq_regs)495051