cpucontrol: improve Intel microcode revision check
According to the Intel SDM (Volme 3, 9.11.7) the BIOS signature MSR should be zeroed before executing cpuid (although in practice it does not seem to matter). PR: 192487 Submitted by: Dan Lukes Reported by: Henrique de Moraes Holschuh MFC after: 3 days
This commit is contained in:
parent
6c94117e62
commit
ea9e9d902b
@ -95,7 +95,8 @@ intel_update(const char *dev, const char *path)
|
||||
void *fw_data;
|
||||
size_t data_size, total_size;
|
||||
cpuctl_msr_args_t msrargs = {
|
||||
.msr = MSR_IA32_PLATFORM_ID,
|
||||
.msr = MSR_BIOS_SIGN,
|
||||
.data = 0,
|
||||
};
|
||||
cpuctl_cpuid_args_t idargs = {
|
||||
.level = 1, /* Signature. */
|
||||
@ -115,12 +116,18 @@ intel_update(const char *dev, const char *path)
|
||||
WARN(0, "could not open %s for writing", dev);
|
||||
return;
|
||||
}
|
||||
error = ioctl(devfd, CPUCTL_WRMSR, &msrargs);
|
||||
if (error < 0) {
|
||||
WARN(0, "ioctl(%s)", dev);
|
||||
goto fail;
|
||||
}
|
||||
error = ioctl(devfd, CPUCTL_CPUID, &idargs);
|
||||
if (error < 0) {
|
||||
WARN(0, "ioctl(%s)", dev);
|
||||
goto fail;
|
||||
}
|
||||
signature = idargs.data[0];
|
||||
msrargs.msr = MSR_IA32_PLATFORM_ID;
|
||||
error = ioctl(devfd, CPUCTL_RDMSR, &msrargs);
|
||||
if (error < 0) {
|
||||
WARN(0, "ioctl(%s)", dev);
|
||||
|
Loading…
x
Reference in New Issue
Block a user