diff options
Diffstat (limited to 'arch/x86/kernel/cpu/microcode/amd.c')
| -rw-r--r-- | arch/x86/kernel/cpu/microcode/amd.c | 33 | 
1 files changed, 18 insertions, 15 deletions
diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c index 8581963894c7..27a0228c9cae 100644 --- a/arch/x86/kernel/cpu/microcode/amd.c +++ b/arch/x86/kernel/cpu/microcode/amd.c @@ -56,24 +56,24 @@ static u8 *container;  static size_t container_size;  static u32 ucode_new_rev; -u8 amd_ucode_patch[PATCH_MAX_SIZE]; +static u8 amd_ucode_patch[PATCH_MAX_SIZE];  static u16 this_equiv_id;  static struct cpio_data ucode_cpio; -/* - * Microcode patch container file is prepended to the initrd in cpio format. - * See Documentation/x86/early-microcode.txt - */ -static __initdata char ucode_path[] = "kernel/x86/microcode/AuthenticAMD.bin"; -  static struct cpio_data __init find_ucode_in_initrd(void)  { -	long offset = 0; +#ifdef CONFIG_BLK_DEV_INITRD  	char *path;  	void *start;  	size_t size; +	/* +	 * Microcode patch container file is prepended to the initrd in cpio +	 * format. See Documentation/x86/early-microcode.txt +	 */ +	static __initdata char ucode_path[] = "kernel/x86/microcode/AuthenticAMD.bin"; +  #ifdef CONFIG_X86_32  	struct boot_params *p; @@ -89,9 +89,12 @@ static struct cpio_data __init find_ucode_in_initrd(void)  	path    = ucode_path;  	start   = (void *)(boot_params.hdr.ramdisk_image + PAGE_OFFSET);  	size    = boot_params.hdr.ramdisk_size; -#endif +#endif /* !CONFIG_X86_32 */ -	return find_cpio_data(path, start, size, &offset); +	return find_cpio_data(path, start, size, NULL); +#else +	return (struct cpio_data){ NULL, 0, "" }; +#endif  }  static size_t compute_container_size(u8 *data, u32 total_size) @@ -289,11 +292,11 @@ void __init load_ucode_amd_bsp(unsigned int family)  	size = &ucode_cpio.size;  #endif -	cp = find_ucode_in_initrd(); -	if (!cp.data) { -		if (!load_builtin_amd_microcode(&cp, family)) -			return; -	} +	if (!load_builtin_amd_microcode(&cp, family)) +		cp = find_ucode_in_initrd(); + +	if (!(cp.data && cp.size)) +		return;  	*data = cp.data;  	*size = cp.size;  |