diff options
Diffstat (limited to 'arch/i386/kernel/verify_cpu.S')
-rw-r--r-- | arch/i386/kernel/verify_cpu.S | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/arch/i386/kernel/verify_cpu.S b/arch/i386/kernel/verify_cpu.S deleted file mode 100644 index fff4aa61d7c3..000000000000 --- a/arch/i386/kernel/verify_cpu.S +++ /dev/null | |||
@@ -1,94 +0,0 @@ | |||
1 | /* Check if CPU has some minimum CPUID bits | ||
2 | This runs in 16bit mode so that the caller can still use the BIOS | ||
3 | to output errors on the screen */ | ||
4 | #include <asm/cpufeature.h> | ||
5 | #include <asm/msr.h> | ||
6 | |||
7 | verify_cpu: | ||
8 | pushfl # Save caller passed flags | ||
9 | pushl $0 # Kill any dangerous flags | ||
10 | popfl | ||
11 | |||
12 | #if CONFIG_X86_MINIMUM_CPU_FAMILY >= 4 | ||
13 | pushfl | ||
14 | pop %eax | ||
15 | orl $(1<<18),%eax # try setting AC | ||
16 | push %eax | ||
17 | popfl | ||
18 | pushfl | ||
19 | popl %eax | ||
20 | testl $(1<<18),%eax | ||
21 | jz bad | ||
22 | #endif | ||
23 | #if REQUIRED_MASK0 != 0 | ||
24 | pushfl # standard way to check for cpuid | ||
25 | popl %eax | ||
26 | movl %eax,%ebx | ||
27 | xorl $0x200000,%eax | ||
28 | pushl %eax | ||
29 | popfl | ||
30 | pushfl | ||
31 | popl %eax | ||
32 | cmpl %eax,%ebx | ||
33 | pushfl # standard way to check for cpuid | ||
34 | popl %eax | ||
35 | movl %eax,%ebx | ||
36 | xorl $0x200000,%eax | ||
37 | pushl %eax | ||
38 | popfl | ||
39 | pushfl | ||
40 | popl %eax | ||
41 | cmpl %eax,%ebx | ||
42 | jz bad # REQUIRED_MASK0 != 0 requires CPUID | ||
43 | |||
44 | movl $0x0,%eax # See if cpuid 1 is implemented | ||
45 | cpuid | ||
46 | cmpl $0x1,%eax | ||
47 | jb bad # no cpuid 1 | ||
48 | |||
49 | #if REQUIRED_MASK0 & NEED_CMPXCHG64 | ||
50 | /* Some VIA C3s need magic MSRs to enable CX64. Do this here */ | ||
51 | cmpl $0x746e6543,%ebx # Cent | ||
52 | jne 1f | ||
53 | cmpl $0x48727561,%edx # aurH | ||
54 | jne 1f | ||
55 | cmpl $0x736c7561,%ecx # auls | ||
56 | jne 1f | ||
57 | movl $1,%eax # check model | ||
58 | cpuid | ||
59 | movl %eax,%ebx | ||
60 | shr $8,%ebx | ||
61 | andl $0xf,%ebx | ||
62 | cmp $6,%ebx # check family == 6 | ||
63 | jne 1f | ||
64 | shr $4,%eax | ||
65 | andl $0xf,%eax | ||
66 | cmpl $6,%eax # check model >= 6 | ||
67 | jb 1f | ||
68 | # assume models >= 6 all support this MSR | ||
69 | movl $MSR_VIA_FCR,%ecx | ||
70 | rdmsr | ||
71 | orl $((1<<1)|(1<<7)),%eax # enable CMPXCHG64 and PGE | ||
72 | wrmsr | ||
73 | 1: | ||
74 | #endif | ||
75 | movl $0x1,%eax # Does the cpu have what it takes | ||
76 | cpuid | ||
77 | |||
78 | #if CONFIG_X86_MINIMUM_CPU_FAMILY > 4 | ||
79 | #error add proper model checking here | ||
80 | #endif | ||
81 | |||
82 | andl $REQUIRED_MASK0,%edx | ||
83 | xorl $REQUIRED_MASK0,%edx | ||
84 | jnz bad | ||
85 | #endif /* REQUIRED_MASK0 */ | ||
86 | |||
87 | popfl | ||
88 | xor %eax,%eax | ||
89 | ret | ||
90 | |||
91 | bad: | ||
92 | popfl | ||
93 | movl $1,%eax | ||
94 | ret | ||