x86/boot: Don't overwrite cr4 when enabling PAE
authorMatt Fleming <matt.fleming@intel.com>
Mon, 24 Feb 2014 13:37:29 +0000 (13:37 +0000)
committerMatt Fleming <matt.fleming@intel.com>
Tue, 4 Mar 2014 21:43:59 +0000 (21:43 +0000)
Some EFI firmware makes use of the FPU during boottime services and
clearing X86_CR4_OSFXSR by overwriting %cr4 causes the firmware to
crash.

Add the PAE bit explicitly instead of trashing the existing contents,
leaving the rest of the bits as the firmware set them.

Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
arch/x86/boot/compressed/head_64.S

index 37c741b0d2acbc5d0f3f84aa3386c20d4bde9ddf..4f40cddd025d5be69b1e1f1ac12db1bfca3f1318 100644 (file)
@@ -113,7 +113,8 @@ ENTRY(startup_32)
        lgdt    gdt(%ebp)
 
        /* Enable PAE mode */
-       movl    $(X86_CR4_PAE), %eax
+       movl    %cr4, %eax
+       orl     $X86_CR4_PAE, %eax
        movl    %eax, %cr4
 
  /*