|
@@ -35,38 +35,35 @@ static struct mc_saved_data {
|
|
|
} mc_saved_data;
|
|
|
|
|
|
static enum ucode_state
|
|
|
-generic_load_microcode_early(struct microcode_intel **mc_saved_p,
|
|
|
- unsigned int mc_saved_count,
|
|
|
- struct ucode_cpu_info *uci)
|
|
|
+load_microcode_early(struct microcode_intel **saved,
|
|
|
+ unsigned int num_saved, struct ucode_cpu_info *uci)
|
|
|
{
|
|
|
struct microcode_intel *ucode_ptr, *new_mc = NULL;
|
|
|
- int new_rev = uci->cpu_sig.rev;
|
|
|
- enum ucode_state state = UCODE_OK;
|
|
|
- unsigned int mc_size;
|
|
|
- struct microcode_header_intel *mc_header;
|
|
|
- unsigned int csig = uci->cpu_sig.sig;
|
|
|
- unsigned int cpf = uci->cpu_sig.pf;
|
|
|
- int i;
|
|
|
+ struct microcode_header_intel *mc_hdr;
|
|
|
+ int new_rev, ret, i;
|
|
|
|
|
|
- for (i = 0; i < mc_saved_count; i++) {
|
|
|
- ucode_ptr = mc_saved_p[i];
|
|
|
+ new_rev = uci->cpu_sig.rev;
|
|
|
|
|
|
- mc_header = (struct microcode_header_intel *)ucode_ptr;
|
|
|
- mc_size = get_totalsize(mc_header);
|
|
|
- if (get_matching_microcode(csig, cpf, ucode_ptr, new_rev)) {
|
|
|
- new_rev = mc_header->rev;
|
|
|
- new_mc = ucode_ptr;
|
|
|
- }
|
|
|
- }
|
|
|
+ for (i = 0; i < num_saved; i++) {
|
|
|
+ ucode_ptr = saved[i];
|
|
|
+ mc_hdr = (struct microcode_header_intel *)ucode_ptr;
|
|
|
+
|
|
|
+ ret = get_matching_microcode(uci->cpu_sig.sig,
|
|
|
+ uci->cpu_sig.pf,
|
|
|
+ ucode_ptr,
|
|
|
+ new_rev);
|
|
|
+ if (!ret)
|
|
|
+ continue;
|
|
|
|
|
|
- if (!new_mc) {
|
|
|
- state = UCODE_NFOUND;
|
|
|
- goto out;
|
|
|
+ new_rev = mc_hdr->rev;
|
|
|
+ new_mc = ucode_ptr;
|
|
|
}
|
|
|
|
|
|
+ if (!new_mc)
|
|
|
+ return UCODE_NFOUND;
|
|
|
+
|
|
|
uci->mc = (struct microcode_intel *)new_mc;
|
|
|
-out:
|
|
|
- return state;
|
|
|
+ return UCODE_OK;
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -114,13 +111,13 @@ load_microcode(struct mc_saved_data *mc_saved_data,
|
|
|
microcode_pointer(mc_saved_tmp, mc_saved_in_initrd,
|
|
|
initrd_start, count);
|
|
|
|
|
|
- return generic_load_microcode_early(mc_saved_tmp, count, uci);
|
|
|
+ return load_microcode_early(mc_saved_tmp, count, uci);
|
|
|
} else {
|
|
|
#ifdef CONFIG_X86_32
|
|
|
microcode_phys(mc_saved_tmp, mc_saved_data);
|
|
|
- return generic_load_microcode_early(mc_saved_tmp, count, uci);
|
|
|
+ return load_microcode_early(mc_saved_tmp, count, uci);
|
|
|
#else
|
|
|
- return generic_load_microcode_early(mc_saved_data->mc_saved,
|
|
|
+ return load_microcode_early(mc_saved_data->mc_saved,
|
|
|
count, uci);
|
|
|
#endif
|
|
|
}
|
|
@@ -773,8 +770,8 @@ void reload_ucode_intel(void)
|
|
|
|
|
|
collect_cpu_info_early(&uci);
|
|
|
|
|
|
- ret = generic_load_microcode_early(mc_saved_data.mc_saved,
|
|
|
- mc_saved_data.mc_saved_count, &uci);
|
|
|
+ ret = load_microcode_early(mc_saved_data.mc_saved,
|
|
|
+ mc_saved_data.mc_saved_count, &uci);
|
|
|
if (ret != UCODE_OK)
|
|
|
return;
|
|
|
|