|
@@ -70,6 +70,9 @@
|
|
|
* Fix sigmatch() macro to handle old CPUs with pf == 0.
|
|
|
* Thanks to Stuart Swales for pointing out this bug.
|
|
|
*/
|
|
|
+
|
|
|
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
|
+
|
|
|
#include <linux/firmware.h>
|
|
|
#include <linux/uaccess.h>
|
|
|
#include <linux/kernel.h>
|
|
@@ -146,8 +149,7 @@ static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
|
|
|
|
|
|
if (c->x86_vendor != X86_VENDOR_INTEL || c->x86 < 6 ||
|
|
|
cpu_has(c, X86_FEATURE_IA64)) {
|
|
|
- printk(KERN_ERR "microcode: CPU%d not a capable Intel "
|
|
|
- "processor\n", cpu_num);
|
|
|
+ pr_err("CPU%d not a capable Intel processor\n", cpu_num);
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
@@ -165,8 +167,8 @@ static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
|
|
|
/* get the current revision from MSR 0x8B */
|
|
|
rdmsr(MSR_IA32_UCODE_REV, val[0], csig->rev);
|
|
|
|
|
|
- printk(KERN_INFO "microcode: CPU%d sig=0x%x, pf=0x%x, revision=0x%x\n",
|
|
|
- cpu_num, csig->sig, csig->pf, csig->rev);
|
|
|
+ pr_info("CPU%d sig=0x%x, pf=0x%x, revision=0x%x\n",
|
|
|
+ cpu_num, csig->sig, csig->pf, csig->rev);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -194,28 +196,24 @@ static int microcode_sanity_check(void *mc)
|
|
|
data_size = get_datasize(mc_header);
|
|
|
|
|
|
if (data_size + MC_HEADER_SIZE > total_size) {
|
|
|
- printk(KERN_ERR "microcode: error! "
|
|
|
- "Bad data size in microcode data file\n");
|
|
|
+ pr_err("error! Bad data size in microcode data file\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
if (mc_header->ldrver != 1 || mc_header->hdrver != 1) {
|
|
|
- printk(KERN_ERR "microcode: error! "
|
|
|
- "Unknown microcode update format\n");
|
|
|
+ pr_err("error! Unknown microcode update format\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
ext_table_size = total_size - (MC_HEADER_SIZE + data_size);
|
|
|
if (ext_table_size) {
|
|
|
if ((ext_table_size < EXT_HEADER_SIZE)
|
|
|
|| ((ext_table_size - EXT_HEADER_SIZE) % EXT_SIGNATURE_SIZE)) {
|
|
|
- printk(KERN_ERR "microcode: error! "
|
|
|
- "Small exttable size in microcode data file\n");
|
|
|
+ pr_err("error! Small exttable size in microcode data file\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
ext_header = mc + MC_HEADER_SIZE + data_size;
|
|
|
if (ext_table_size != exttable_size(ext_header)) {
|
|
|
- printk(KERN_ERR "microcode: error! "
|
|
|
- "Bad exttable size in microcode data file\n");
|
|
|
+ pr_err("error! Bad exttable size in microcode data file\n");
|
|
|
return -EFAULT;
|
|
|
}
|
|
|
ext_sigcount = ext_header->count;
|
|
@@ -230,8 +228,7 @@ static int microcode_sanity_check(void *mc)
|
|
|
while (i--)
|
|
|
ext_table_sum += ext_tablep[i];
|
|
|
if (ext_table_sum) {
|
|
|
- printk(KERN_WARNING "microcode: aborting, "
|
|
|
- "bad extended signature table checksum\n");
|
|
|
+ pr_warning("aborting, bad extended signature table checksum\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
}
|
|
@@ -242,7 +239,7 @@ static int microcode_sanity_check(void *mc)
|
|
|
while (i--)
|
|
|
orig_sum += ((int *)mc)[i];
|
|
|
if (orig_sum) {
|
|
|
- printk(KERN_ERR "microcode: aborting, bad checksum\n");
|
|
|
+ pr_err("aborting, bad checksum\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
if (!ext_table_size)
|
|
@@ -255,7 +252,7 @@ static int microcode_sanity_check(void *mc)
|
|
|
- (mc_header->sig + mc_header->pf + mc_header->cksum)
|
|
|
+ (ext_sig->sig + ext_sig->pf + ext_sig->cksum);
|
|
|
if (sum) {
|
|
|
- printk(KERN_ERR "microcode: aborting, bad checksum\n");
|
|
|
+ pr_err("aborting, bad checksum\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
}
|
|
@@ -327,13 +324,11 @@ static int apply_microcode(int cpu)
|
|
|
rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]);
|
|
|
|
|
|
if (val[1] != mc_intel->hdr.rev) {
|
|
|
- printk(KERN_ERR "microcode: CPU%d update "
|
|
|
- "to revision 0x%x failed\n",
|
|
|
- cpu_num, mc_intel->hdr.rev);
|
|
|
+ pr_err("CPU%d update to revision 0x%x failed\n",
|
|
|
+ cpu_num, mc_intel->hdr.rev);
|
|
|
return -1;
|
|
|
}
|
|
|
- printk(KERN_INFO "microcode: CPU%d updated to revision "
|
|
|
- "0x%x, date = %04x-%02x-%02x \n",
|
|
|
+ pr_info("CPU%d updated to revision 0x%x, date = %04x-%02x-%02x \n",
|
|
|
cpu_num, val[1],
|
|
|
mc_intel->hdr.date & 0xffff,
|
|
|
mc_intel->hdr.date >> 24,
|
|
@@ -362,8 +357,7 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,
|
|
|
|
|
|
mc_size = get_totalsize(&mc_header);
|
|
|
if (!mc_size || mc_size > leftover) {
|
|
|
- printk(KERN_ERR "microcode: error!"
|
|
|
- "Bad data in microcode data file\n");
|
|
|
+ pr_err("error! Bad data in microcode data file\n");
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -405,9 +399,8 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,
|
|
|
vfree(uci->mc);
|
|
|
uci->mc = (struct microcode_intel *)new_mc;
|
|
|
|
|
|
- pr_debug("microcode: CPU%d found a matching microcode update with"
|
|
|
- " version 0x%x (current=0x%x)\n",
|
|
|
- cpu, new_rev, uci->cpu_sig.rev);
|
|
|
+ pr_debug("CPU%d found a matching microcode update with version 0x%x (current=0x%x)\n",
|
|
|
+ cpu, new_rev, uci->cpu_sig.rev);
|
|
|
out:
|
|
|
return state;
|
|
|
}
|
|
@@ -429,7 +422,7 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device)
|
|
|
c->x86, c->x86_model, c->x86_mask);
|
|
|
|
|
|
if (request_firmware(&firmware, name, device)) {
|
|
|
- pr_debug("microcode: data file %s load failed\n", name);
|
|
|
+ pr_debug("data file %s load failed\n", name);
|
|
|
return UCODE_NFOUND;
|
|
|
}
|
|
|
|