diff options
| -rw-r--r-- | arch/arm/vfp/vfpmodule.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index e26cc1f59948..490d9d18a7d1 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c | |||
| @@ -264,6 +264,18 @@ void VFP9_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) | |||
| 264 | vfp_raise_exceptions(exceptions, trigger, orig_fpscr, regs); | 264 | vfp_raise_exceptions(exceptions, trigger, orig_fpscr, regs); |
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | static void vfp_enable(void *unused) | ||
| 268 | { | ||
| 269 | u32 access = get_copro_access(); | ||
| 270 | |||
| 271 | /* | ||
| 272 | * Enable full access to VFP (cp10 and cp11) | ||
| 273 | */ | ||
| 274 | set_copro_access(access | CPACC_FULL(10) | CPACC_FULL(11)); | ||
| 275 | } | ||
| 276 | |||
| 277 | #include <linux/smp.h> | ||
| 278 | |||
| 267 | /* | 279 | /* |
| 268 | * VFP support code initialisation. | 280 | * VFP support code initialisation. |
| 269 | */ | 281 | */ |
| @@ -288,6 +300,7 @@ static int __init vfp_init(void) | |||
| 288 | * we just need to read the VFPSID register. | 300 | * we just need to read the VFPSID register. |
| 289 | */ | 301 | */ |
| 290 | vfpsid = fmrx(FPSID); | 302 | vfpsid = fmrx(FPSID); |
| 303 | barrier(); | ||
| 291 | 304 | ||
| 292 | printk(KERN_INFO "VFP support v0.3: "); | 305 | printk(KERN_INFO "VFP support v0.3: "); |
| 293 | if (VFP_arch) { | 306 | if (VFP_arch) { |
| @@ -301,6 +314,8 @@ static int __init vfp_init(void) | |||
| 301 | } else if (vfpsid & FPSID_NODOUBLE) { | 314 | } else if (vfpsid & FPSID_NODOUBLE) { |
| 302 | printk("no double precision support\n"); | 315 | printk("no double precision support\n"); |
| 303 | } else { | 316 | } else { |
| 317 | smp_call_function(vfp_enable, NULL, 1, 1); | ||
| 318 | |||
| 304 | VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ | 319 | VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ |
| 305 | printk("implementor %02x architecture %d part %02x variant %x rev %x\n", | 320 | printk("implementor %02x architecture %d part %02x variant %x rev %x\n", |
| 306 | (vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT, | 321 | (vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT, |
