[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] arm: Enable VFP at boot
# HG changeset patch # User Tim Deegan <tim@xxxxxxx> # Date 1338542440 -3600 # Node ID 137b02968b406c19124819d00cba46a990834b52 # Parent 8b7e5f6b1f7f84fd9aa170dc43ac88dad5e8e446 arm: Enable VFP at boot Signed-off-by: Tim Deegan <tim@xxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- diff -r 8b7e5f6b1f7f -r 137b02968b40 xen/arch/arm/Rules.mk --- a/xen/arch/arm/Rules.mk Fri Jun 01 10:20:39 2012 +0100 +++ b/xen/arch/arm/Rules.mk Fri Jun 01 10:20:40 2012 +0100 @@ -24,7 +24,7 @@ ifneq ($(call cc-option,$(CC),-fvisibili CFLAGS += -DGCC_HAS_VISIBILITY_ATTRIBUTE endif -CFLAGS += -march=armv7-a -mcpu=cortex-a15 +CFLAGS += -march=armv7-a -mcpu=cortex-a15 -mfpu=vfpv3 -mfloat-abi=softfp # Require GCC v3.4+ (to avoid issues with alignment constraints in Xen headers) check-$(gcc) = $(call cc-ver-check,CC,0x030400,"Xen requires at least gcc-3.4") diff -r 8b7e5f6b1f7f -r 137b02968b40 xen/arch/arm/setup.c --- a/xen/arch/arm/setup.c Fri Jun 01 10:20:39 2012 +0100 +++ b/xen/arch/arm/setup.c Fri Jun 01 10:20:40 2012 +0100 @@ -36,6 +36,7 @@ #include <asm/page.h> #include <asm/current.h> #include <asm/setup.h> +#include <asm/vfp.h> #include "gic.h" static __attribute_used__ void init_done(void) @@ -192,6 +193,8 @@ void __init start_xen(unsigned long boot processor_id(); + enable_vfp(); + softirq_init(); tasklet_subsys_init(); diff -r 8b7e5f6b1f7f -r 137b02968b40 xen/arch/arm/smpboot.c --- a/xen/arch/arm/smpboot.c Fri Jun 01 10:20:39 2012 +0100 +++ b/xen/arch/arm/smpboot.c Fri Jun 01 10:20:40 2012 +0100 @@ -26,6 +26,7 @@ #include <xen/sched.h> #include <xen/smp.h> #include <xen/softirq.h> +#include <asm/vfp.h> #include "gic.h" cpumask_t cpu_online_map; @@ -106,6 +107,8 @@ void __cpuinit start_secondary(unsigned WRITE_CP32((uint32_t) hyp_traps_vector, HVBAR); mmu_init_secondary_cpu(); + enable_vfp(); + gic_init_secondary_cpu(); init_timer_interrupt(); gic_route_irqs(); diff -r 8b7e5f6b1f7f -r 137b02968b40 xen/include/asm-arm/vfp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/include/asm-arm/vfp.h Fri Jun 01 10:20:40 2012 +0100 @@ -0,0 +1,35 @@ +#ifndef __ARM_VFP_H_ +#define __ARM_VFP_H_ + +#include <xen/types.h> + +#define FPEXC_EN (1u << 30) + +/* Save and restore FP state. + * Ought to be using the new vmrs/vmsr names, but older binutils has a + * bug where it only allows them to target fpscr (and not, say, fpexc). */ +#define READ_FP(reg) ({ \ + uint32_t val; \ + asm volatile ("fmrx %0, fp" #reg : "=r" (val)); \ + val; }) + +#define WRITE_FP(reg, val) do { \ + asm volatile ("fmxr fp" #reg ", %0" : : "r" (val)); \ +} while (0) + + +/* Start-of-day: Turn on VFP */ +static inline void enable_vfp(void) +{ + WRITE_FP(exc, READ_FP(exc) | FPEXC_EN); +} + +#endif +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |