提交 39427d6e 编写于 作者: A Andi Kleen 提交者: 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: NAndi Kleen <ak@suse.de>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册