Commit fe055896 authored by Borislav Petkov's avatar Borislav Petkov Committed by Ingo Molnar
Browse files

x86/microcode: Merge the early microcode loader



Merge the early loader functionality into the driver proper. The
diff is huge but logically, it is simply moving code from the
_early.c files into the main driver.

Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Jones <davej@codemonkey.org.uk>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Len Brown <len.brown@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Link: http://lkml.kernel.org/r/1445334889-300-3-git-send-email-bp@alien8.de


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 9a2bc335
Loading
Loading
Loading
Loading
+1 −18
Original line number Diff line number Diff line
@@ -1126,6 +1126,7 @@ config MICROCODE
	bool "CPU microcode loading support"
	default y
	depends on CPU_SUP_AMD || CPU_SUP_INTEL
	depends on BLK_DEV_INITRD
	select FW_LOADER
	---help---

@@ -1167,24 +1168,6 @@ config MICROCODE_OLD_INTERFACE
	def_bool y
	depends on MICROCODE

config MICROCODE_INTEL_EARLY
	bool

config MICROCODE_AMD_EARLY
	bool

config MICROCODE_EARLY
	bool "Early load microcode"
	depends on MICROCODE && BLK_DEV_INITRD
	select MICROCODE_INTEL_EARLY if MICROCODE_INTEL
	select MICROCODE_AMD_EARLY if MICROCODE_AMD
	default y
	help
	  This option provides functionality to read additional microcode data
	  at the beginning of initrd image. The data tells kernel to load
	  microcode to CPU's as early as possible. No functional change if no
	  microcode data is glued to the initrd, therefore it's safe to say Y.

config X86_MSR
	tristate "/dev/cpu/*/msr - Model-specific register support"
	---help---
+7 −12
Original line number Diff line number Diff line
@@ -81,7 +81,6 @@ static inline struct microcode_ops * __init init_amd_microcode(void)
static inline void __exit exit_amd_microcode(void) {}
#endif

#ifdef CONFIG_MICROCODE_EARLY
#define MAX_UCODE_COUNT 128

#define QCHAR(a, b, c, d) ((a) + ((b) << 8) + ((c) << 16) + ((d) << 24))
@@ -156,6 +155,7 @@ static inline unsigned int x86_model(unsigned int sig)
	return model;
}

#ifdef CONFIG_MICROCODE
extern void __init load_ucode_bsp(void);
extern void load_ucode_ap(void);
extern int __init save_microcode_in_initrd(void);
@@ -164,14 +164,9 @@ extern bool get_builtin_firmware(struct cpio_data *cd, const char *name);
#else
static inline void __init load_ucode_bsp(void)			{ }
static inline void load_ucode_ap(void)				{ }
static inline int __init save_microcode_in_initrd(void)
{
	return 0;
}
static inline int __init save_microcode_in_initrd(void)		{ return 0; }
static inline void reload_early_microcode(void)			{ }
static inline bool get_builtin_firmware(struct cpio_data *cd, const char *name)
{
	return false;
}
static inline bool
get_builtin_firmware(struct cpio_data *cd, const char *name)	{ return false; }
#endif
#endif /* _ASM_X86_MICROCODE_H */
+1 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ extern enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, s
#define PATCH_MAX_SIZE PAGE_SIZE
extern u8 amd_ucode_patch[PATCH_MAX_SIZE];

#ifdef CONFIG_MICROCODE_AMD_EARLY
#ifdef CONFIG_MICROCODE_AMD
extern void __init load_ucode_amd_bsp(unsigned int family);
extern void load_ucode_amd_ap(void);
extern int __init save_microcode_in_initrd_amd(void);
+3 −7
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ extern int has_newer_microcode(void *mc, unsigned int csig, int cpf, int rev);
extern int microcode_sanity_check(void *mc, int print_err);
extern int find_matching_signature(void *mc, unsigned int csig, int cpf);

#ifdef CONFIG_MICROCODE_INTEL_EARLY
#ifdef CONFIG_MICROCODE_INTEL
extern void __init load_ucode_intel_bsp(void);
extern void load_ucode_intel_ap(void);
extern void show_ucode_info_early(void);
@@ -71,13 +71,9 @@ static inline int __init save_microcode_in_initrd_intel(void) { return -EINVAL;
static inline void reload_ucode_intel(void) {}
#endif

#if defined(CONFIG_MICROCODE_INTEL_EARLY) && defined(CONFIG_HOTPLUG_CPU)
#ifdef CONFIG_HOTPLUG_CPU
extern int save_mc_for_early(u8 *mc);
#else
static inline int save_mc_for_early(u8 *mc)
{
	return 0;
}
static inline int save_mc_for_early(u8 *mc) { return 0; }
#endif

#endif /* _ASM_X86_MICROCODE_INTEL_H */
+0 −3
Original line number Diff line number Diff line
@@ -2,6 +2,3 @@ microcode-y := core.o
obj-$(CONFIG_MICROCODE)			+= microcode.o
microcode-$(CONFIG_MICROCODE_INTEL)	+= intel.o intel_lib.o
microcode-$(CONFIG_MICROCODE_AMD)	+= amd.o
obj-$(CONFIG_MICROCODE_EARLY)		+= core_early.o
obj-$(CONFIG_MICROCODE_INTEL_EARLY)	+= intel_early.o
obj-$(CONFIG_MICROCODE_AMD_EARLY)	+= amd_early.o
Loading