aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/intel.c2
-rw-r--r--arch/x86/kernel/cpu/microcode/intel.c26
2 files changed, 4 insertions, 24 deletions
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index fcd484d2bb03..2d49aa949fa1 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -83,7 +83,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)
83 83
84 wrmsr(MSR_IA32_UCODE_REV, 0, 0); 84 wrmsr(MSR_IA32_UCODE_REV, 0, 0);
85 /* Required by the SDM */ 85 /* Required by the SDM */
86 sync_core(); 86 native_cpuid_eax(1);
87 rdmsr(MSR_IA32_UCODE_REV, lower_word, c->microcode); 87 rdmsr(MSR_IA32_UCODE_REV, lower_word, c->microcode);
88 } 88 }
89 89
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index b624b54912e1..f79249fab389 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -368,26 +368,6 @@ next:
368 return patch; 368 return patch;
369} 369}
370 370
371static void cpuid_1(void)
372{
373 /*
374 * According to the Intel SDM, Volume 3, 9.11.7:
375 *
376 * CPUID returns a value in a model specific register in
377 * addition to its usual register return values. The
378 * semantics of CPUID cause it to deposit an update ID value
379 * in the 64-bit model-specific register at address 08BH
380 * (IA32_BIOS_SIGN_ID). If no update is present in the
381 * processor, the value in the MSR remains unmodified.
382 *
383 * Use native_cpuid -- this code runs very early and we don't
384 * want to mess with paravirt.
385 */
386 unsigned int eax = 1, ebx, ecx = 0, edx;
387
388 native_cpuid(&eax, &ebx, &ecx, &edx);
389}
390
391static int collect_cpu_info_early(struct ucode_cpu_info *uci) 371static int collect_cpu_info_early(struct ucode_cpu_info *uci)
392{ 372{
393 unsigned int val[2]; 373 unsigned int val[2];
@@ -413,7 +393,7 @@ static int collect_cpu_info_early(struct ucode_cpu_info *uci)
413 native_wrmsrl(MSR_IA32_UCODE_REV, 0); 393 native_wrmsrl(MSR_IA32_UCODE_REV, 0);
414 394
415 /* As documented in the SDM: Do a CPUID 1 here */ 395 /* As documented in the SDM: Do a CPUID 1 here */
416 cpuid_1(); 396 native_cpuid_eax(1);
417 397
418 /* get the current revision from MSR 0x8B */ 398 /* get the current revision from MSR 0x8B */
419 native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); 399 native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]);
@@ -613,7 +593,7 @@ static int apply_microcode_early(struct ucode_cpu_info *uci, bool early)
613 native_wrmsrl(MSR_IA32_UCODE_REV, 0); 593 native_wrmsrl(MSR_IA32_UCODE_REV, 0);
614 594
615 /* As documented in the SDM: Do a CPUID 1 here */ 595 /* As documented in the SDM: Do a CPUID 1 here */
616 cpuid_1(); 596 native_cpuid_eax(1);
617 597
618 /* get the current revision from MSR 0x8B */ 598 /* get the current revision from MSR 0x8B */
619 native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); 599 native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]);
@@ -825,7 +805,7 @@ static int apply_microcode_intel(int cpu)
825 wrmsrl(MSR_IA32_UCODE_REV, 0); 805 wrmsrl(MSR_IA32_UCODE_REV, 0);
826 806
827 /* As documented in the SDM: Do a CPUID 1 here */ 807 /* As documented in the SDM: Do a CPUID 1 here */
828 cpuid_1(); 808 native_cpuid_eax(1);
829 809
830 /* get the current revision from MSR 0x8B */ 810 /* get the current revision from MSR 0x8B */
831 rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); 811 rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]);