aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/microcode/intel.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index 6515c802346a..0f97ae93441b 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -793,10 +793,10 @@ void __init load_ucode_intel_bsp(void)
793void load_ucode_intel_ap(void) 793void load_ucode_intel_ap(void)
794{ 794{
795 struct ucode_blobs *blobs_p; 795 struct ucode_blobs *blobs_p;
796 unsigned long *ptrs, start = 0;
796 struct mc_saved_data *mcs; 797 struct mc_saved_data *mcs;
797 struct ucode_cpu_info uci; 798 struct ucode_cpu_info uci;
798 enum ucode_state ret; 799 enum ucode_state ret;
799 unsigned long *ptrs;
800 800
801#ifdef CONFIG_X86_32 801#ifdef CONFIG_X86_32
802 mcs = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data); 802 mcs = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data);
@@ -815,8 +815,20 @@ void load_ucode_intel_ap(void)
815 if (!mcs->num_saved) 815 if (!mcs->num_saved)
816 return; 816 return;
817 817
818 if (blobs_p->valid) {
819 start = blobs_p->start;
820
821#ifdef CONFIG_RANDOMIZE_MEMORY
822 /*
823 * Pay attention to CONFIG_RANDOMIZE_MEMORY=y as it shuffles
824 * physmem mapping too and there we have the initrd.
825 */
826 start += PAGE_OFFSET - __PAGE_OFFSET_BASE;
827#endif
828 }
829
818 collect_cpu_info_early(&uci); 830 collect_cpu_info_early(&uci);
819 ret = load_microcode(mcs, ptrs, blobs_p->start, &uci); 831 ret = load_microcode(mcs, ptrs, start, &uci);
820 if (ret != UCODE_OK) 832 if (ret != UCODE_OK)
821 return; 833 return;
822 834