Commit 39427d6e authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

i386: Enable CX8/PGE CPUID bits early on VIA C3

Fix boot failures with the early CPUID checking on VIA C3

Includes fixes from Christian Volkmann
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4c1f59d8
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
This runs in 16bit mode so that the caller can still use the BIOS This runs in 16bit mode so that the caller can still use the BIOS
to output errors on the screen */ to output errors on the screen */
#include <asm/cpufeature.h> #include <asm/cpufeature.h>
#include <asm/msr.h>
verify_cpu: verify_cpu:
pushfl # Save caller passed flags pushfl # Save caller passed flags
...@@ -45,6 +46,32 @@ verify_cpu: ...@@ -45,6 +46,32 @@ verify_cpu:
cmpl $0x1,%eax cmpl $0x1,%eax
jb bad # no cpuid 1 jb bad # no cpuid 1
#if REQUIRED_MASK1 & NEED_CMPXCHG64
/* Some VIA C3s need magic MSRs to enable CX64. Do this here */
cmpl $0x746e6543,%ebx # Cent
jne 1f
cmpl $0x48727561,%edx # aurH
jne 1f
cmpl $0x736c7561,%ecx # auls
jne 1f
movl $1,%eax # check model
cpuid
movl %eax,%ebx
shr $8,%ebx
andl $0xf,%ebx
cmp $6,%ebx # check family == 6
jne 1f
shr $4,%eax
andl $0xf,%eax
cmpl $6,%eax # check model >= 6
jb 1f
# assume models >= 6 all support this MSR
movl $MSR_VIA_FCR,%ecx
rdmsr
orl $((1<<1)|(1<<7)),%eax # enable CMPXCHG64 and PGE
wrmsr
1:
#endif
movl $0x1,%eax # Does the cpu have what it takes movl $0x1,%eax # Does the cpu have what it takes
cpuid cpuid
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment