diff options
-rw-r--r-- | arch/x86/kernel/cpu/microcode/intel_early.c | 26 |
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 | ||
37 | static struct microcode_intel bsp_patch; | ||
38 | |||
39 | static enum ucode_state | 37 | static enum ucode_state |
40 | generic_load_microcode_early(struct microcode_intel **mc_saved_p, | 38 | generic_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 | ||
738 | void __init | 733 | void __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) | |||
805 | void reload_ucode_intel(void) | 797 | void 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 | } |