Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / arch / arm / vfp / entry.S
1 /*
2  *  linux/arch/arm/vfp/entry.S
3  *
4  *  Copyright (C) 2004 ARM Limited.
5  *  Written by Deep Blue Solutions Limited.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * Basic entry code, called from the kernel's undefined instruction trap.
12  *  r0  = faulted instruction
13  *  r5  = faulted PC+4
14  *  r9  = successful return
15  *  r10 = thread_info structure
16  *  lr  = failure return
17  */
18 #include <linux/linkage.h>
19 #include <linux/init.h>
20 #include <asm/asm-offsets.h>
21 #include <asm/vfpmacros.h>
22
23         .globl  do_vfp
24 do_vfp:
25         enable_irq
26         ldr     r4, .LCvfp
27         add     r10, r10, #TI_VFPSTATE  @ r10 = workspace
28         ldr     pc, [r4]                @ call VFP entry point
29
30 .LCvfp:
31         .word   vfp_vector
32
33 @ This code is called if the VFP does not exist. It needs to flag the
34 @ failure to the VFP initialisation code.
35
36         __INIT
37         .globl  vfp_testing_entry
38 vfp_testing_entry:
39         ldr     r0, VFP_arch_address
40         str     r5, [r0]                @ known non-zero value
41         mov     pc, r9                  @ we have handled the fault
42
43 VFP_arch_address:
44         .word   VFP_arch
45
46         __FINIT