ARM: cpu topology: Add debugfs interface for cpu_power
[cmplus.git] / arch / arm / vfp / entry.S
blobc1a978402583ff7cbf1b54c743fccf7da6be1440
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  *  r2  = faulted PC+4
14  *  r9  = successful return
15  *  r10 = thread_info structure
16  *  lr  = failure return
17  */
18 #include <asm/thread_info.h>
19 #include <asm/vfpmacros.h>
20 #include "../kernel/entry-header.S"
22 ENTRY(do_vfp)
23 #ifdef CONFIG_PREEMPT
24         ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
25         add     r11, r4, #1             @ increment it
26         str     r11, [r10, #TI_PREEMPT]
27 #endif
28         enable_irq
29         str     r2, [sp, #S_PC]         @ update regs->ARM_pc for Thumb 2 case
30         ldr     r4, .LCvfp
31         ldr     r11, [r10, #TI_CPU]     @ CPU number
32         add     r10, r10, #TI_VFPSTATE  @ r10 = workspace
33         ldr     pc, [r4]                @ call VFP entry point
34 ENDPROC(do_vfp)
36 ENTRY(vfp_null_entry)
37 #ifdef CONFIG_PREEMPT
38         get_thread_info r10
39         ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
40         sub     r11, r4, #1             @ decrement it
41         str     r11, [r10, #TI_PREEMPT]
42 #endif
43         mov     pc, lr
44 ENDPROC(vfp_null_entry)
46         .align  2
47 .LCvfp:
48         .word   vfp_vector
50 @ This code is called if the VFP does not exist. It needs to flag the
51 @ failure to the VFP initialisation code.
53         __INIT
54 ENTRY(vfp_testing_entry)
55 #ifdef CONFIG_PREEMPT
56         get_thread_info r10
57         ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
58         sub     r11, r4, #1             @ decrement it
59         str     r11, [r10, #TI_PREEMPT]
60 #endif
61         ldr     r0, VFP_arch_address
62         str     r5, [r0]                @ known non-zero value
63         mov     pc, r9                  @ we have handled the fault
64 ENDPROC(vfp_testing_entry)
66         .align  2
67 VFP_arch_address:
68         .word   VFP_arch
70         __FINIT