aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/microcode/intel_early.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/arch/x86/kernel/cpu/microcode/intel_early.c b/arch/x86/kernel/cpu/microcode/intel_early.c
index f04d0d6638ca..ec9df6f9cd47 100644
--- a/arch/x86/kernel/cpu/microcode/intel_early.c
+++ b/arch/x86/kernel/cpu/microcode/intel_early.c
@@ -34,8 +34,6 @@ static struct mc_saved_data {
34 struct microcode_intel **mc_saved; 34 struct microcode_intel **mc_saved;
35} mc_saved_data; 35} mc_saved_data;
36 36
37static struct microcode_intel bsp_patch;
38
39static enum ucode_state 37static enum ucode_state
40generic_load_microcode_early(struct microcode_intel **mc_saved_p, 38generic_load_microcode_early(struct microcode_intel **mc_saved_p,
41 unsigned int mc_saved_count, 39 unsigned int mc_saved_count,
@@ -717,8 +715,7 @@ _load_ucode_intel_bsp(struct mc_saved_data *mc_saved_data,
717 unsigned long *mc_saved_in_initrd, 715 unsigned long *mc_saved_in_initrd,
718 unsigned long initrd_start_early, 716 unsigned long initrd_start_early,
719 unsigned long initrd_end_early, 717 unsigned long initrd_end_early,
720 struct ucode_cpu_info *uci, 718 struct ucode_cpu_info *uci)
721 struct microcode_intel *bsp)
722{ 719{
723 enum ucode_state ret; 720 enum ucode_state ret;
724 721
@@ -729,10 +726,8 @@ _load_ucode_intel_bsp(struct mc_saved_data *mc_saved_data,
729 ret = load_microcode(mc_saved_data, mc_saved_in_initrd, 726 ret = load_microcode(mc_saved_data, mc_saved_in_initrd,
730 initrd_start_early, uci); 727 initrd_start_early, uci);
731 728
732 if (ret == UCODE_OK) { 729 if (ret == UCODE_OK)
733 apply_microcode_early(uci, true); 730 apply_microcode_early(uci, true);
734 memcpy(bsp, uci->mc, sizeof(*bsp));
735 }
736} 731}
737 732
738void __init 733void __init
@@ -741,12 +736,10 @@ load_ucode_intel_bsp(void)
741 u64 ramdisk_image, ramdisk_size; 736 u64 ramdisk_image, ramdisk_size;
742 unsigned long initrd_start_early, initrd_end_early; 737 unsigned long initrd_start_early, initrd_end_early;
743 struct ucode_cpu_info uci; 738 struct ucode_cpu_info uci;
744 struct microcode_intel *bsp_p;
745#ifdef CONFIG_X86_32 739#ifdef CONFIG_X86_32
746 struct boot_params *boot_params_p; 740 struct boot_params *boot_params_p;
747 741
748 boot_params_p = (struct boot_params *)__pa_nodebug(&boot_params); 742 boot_params_p = (struct boot_params *)__pa_nodebug(&boot_params);
749 bsp_p = (struct microcode_intel *)__pa_nodebug(&bsp_patch);
750 ramdisk_image = boot_params_p->hdr.ramdisk_image; 743 ramdisk_image = boot_params_p->hdr.ramdisk_image;
751 ramdisk_size = boot_params_p->hdr.ramdisk_size; 744 ramdisk_size = boot_params_p->hdr.ramdisk_size;
752 initrd_start_early = ramdisk_image; 745 initrd_start_early = ramdisk_image;
@@ -755,9 +748,8 @@ load_ucode_intel_bsp(void)
755 _load_ucode_intel_bsp( 748 _load_ucode_intel_bsp(
756 (struct mc_saved_data *)__pa_nodebug(&mc_saved_data), 749 (struct mc_saved_data *)__pa_nodebug(&mc_saved_data),
757 (unsigned long *)__pa_nodebug(&mc_saved_in_initrd), 750 (unsigned long *)__pa_nodebug(&mc_saved_in_initrd),
758 initrd_start_early, initrd_end_early, &uci, bsp_p); 751 initrd_start_early, initrd_end_early, &uci);
759#else 752#else
760 bsp_p = &bsp_patch;
761 ramdisk_image = boot_params.hdr.ramdisk_image; 753 ramdisk_image = boot_params.hdr.ramdisk_image;
762 ramdisk_size = boot_params.hdr.ramdisk_size; 754 ramdisk_size = boot_params.hdr.ramdisk_size;
763 initrd_start_early = ramdisk_image + PAGE_OFFSET; 755 initrd_start_early = ramdisk_image + PAGE_OFFSET;
@@ -765,7 +757,7 @@ load_ucode_intel_bsp(void)
765 757
766 _load_ucode_intel_bsp(&mc_saved_data, mc_saved_in_initrd, 758 _load_ucode_intel_bsp(&mc_saved_data, mc_saved_in_initrd,
767 initrd_start_early, initrd_end_early, 759 initrd_start_early, initrd_end_early,
768 &uci, bsp_p); 760 &uci);
769#endif 761#endif
770} 762}
771 763
@@ -805,11 +797,17 @@ void load_ucode_intel_ap(void)
805void reload_ucode_intel(void) 797void reload_ucode_intel(void)
806{ 798{
807 struct ucode_cpu_info uci; 799 struct ucode_cpu_info uci;
800 enum ucode_state ret;
808 801
809 if (!bsp_patch.hdr.rev) 802 if (!mc_saved_data.mc_saved_count)
810 return; 803 return;
811 804
812 uci.mc = &bsp_patch; 805 collect_cpu_info_early(&uci);
806
807 ret = generic_load_microcode_early(mc_saved_data.mc_saved,
808 mc_saved_data.mc_saved_count, &uci);
809 if (ret != UCODE_OK)
810 return;
813 811
814 apply_microcode_early(&uci, false); 812 apply_microcode_early(&uci, false);
815} 813}