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/assembler.h> 22#include <asm/vfpmacros.h> 23 24 .globl do_vfp 25do_vfp: 26 enable_irq 27 ldr r4, .LCvfp 28 ldr r11, [r10, #TI_CPU] @ CPU number 29 add r10, r10, #TI_VFPSTATE @ r10 = workspace 30 ldr pc, [r4] @ call VFP entry point 31 32ENTRY(vfp_null_entry) 33 mov pc, lr 34ENDPROC(vfp_null_entry) 35 36.LCvfp: 37 .word vfp_vector 38 39@ This code is called if the VFP does not exist. It needs to flag the 40@ failure to the VFP initialisation code. 41 42 __INIT 43 .globl vfp_testing_entry 44vfp_testing_entry: 45 ldr r0, VFP_arch_address 46 str r5, [r0] @ known non-zero value 47 mov pc, r9 @ we have handled the fault 48 49VFP_arch_address: 50 .word VFP_arch 51 52 __FINIT 53