Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Changelog

[xen-unstable] arm: Enable VFP at boot

 

 

Xen changelog RSS feed   Index | Next | Previous | View Threaded


patchbot at xen

Jun 1, 2012, 8:11 PM

Post #1 of 1 (64 views)
Permalink
[xen-unstable] arm: Enable VFP at boot

# HG changeset patch
# User Tim Deegan <tim [at] xen>
# Date 1338542440 -3600
# Node ID 137b02968b406c19124819d00cba46a990834b52
# Parent 8b7e5f6b1f7f84fd9aa170dc43ac88dad5e8e446
arm: Enable VFP at boot

Signed-off-by: Tim Deegan <tim [at] xen>
Acked-by: Ian Campbell <ian.campbell [at] citrix>
Committed-by: Ian Campbell <ian.campbell [at] citrix>
---


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 [at] lists
http://lists.xensource.com/xen-changelog

Xen changelog RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.