]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmLib/ArmV7: Add ISB to ArmEnableVFP
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Mar 2012 11:01:21 +0000 (11:01 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Mar 2012 11:01:21 +0000 (11:01 +0000)
ArmEnableVFP could crash on an out-of-order CPU. Adding an instruction barrier after writing to CPACR cures the problem.

Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13134 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
ArmPkg/Library/ArmLib/Common/ArmLibSupport.S
ArmPkg/Library/ArmLib/Common/ArmLibSupport.asm

index 3bb601541d2f6e6f79b06edfb5eb10ad9891eb3d..5ac35524036a6ba0ab36e24cc8b1ad9e98a2be7a 100644 (file)
@@ -347,6 +347,7 @@ ASM_PFX(ArmEnableVFP):
   orr     r0, r0, #0x00f00000\r
   # Write back CPACR (Coprocessor Access Control Register)\r
   mcr     p15, 0, r0, c1, c0, 2\r
+  isb\r
   # Set EN bit in FPEXC. The Advanced SIMD and VFP extensions are enabled and operate normally.\r
   mov     r0, #0x40000000\r
   mcr     p10,#0x7,r0,c8,c0,#0\r
index 28a4564acaf304a9158d1ef50ff82de80af85776..8fedcdba97180beb6d4167bf379942bda26a4ddb 100644 (file)
@@ -341,6 +341,7 @@ ArmEnableVFP
   orr     r0, r0, #0x00f00000\r
   // Write back CPACR (Coprocessor Access Control Register)\r
   mcr     p15, 0, r0, c1, c0, 2\r
+  isb\r
   // Set EN bit in FPEXC. The Advanced SIMD and VFP extensions are enabled and operate normally.\r
   mov     r0, #0x40000000\r
   mcr     p10,#0x7,r0,c8,c0,#0\r
index edd94d2995ac7c774e84833679ae1c825b1a3d28..d00a3623c5e10c275d9b1c481443432529c62a1e 100644 (file)
@@ -88,6 +88,7 @@ ASM_PFX(CPSRRead):
 \r
 ASM_PFX(ArmWriteCPACR):\r
   mcr     p15, 0, r0, c1, c0, 2\r
+  isb\r
   bx      lr\r
 \r
 ASM_PFX(ArmWriteAuxCr):\r
index 3f603873f30323f2ab2126da51216e9d5b48677c..b892603518be7456f734d450157e8b25727c0759 100644 (file)
@@ -88,6 +88,7 @@ CPSRRead
 \r
 ArmWriteCPACR\r
   mcr     p15, 0, r0, c1, c0, 2\r
+  isb\r
   bx      lr\r
 \r
 ArmWriteAuxCr\r