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
0fb349906e
commit
09e24fbe18
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=333569
@ -95,7 +95,8 @@ intel_update(const char *dev, const char *path)
|
|||||||
void *fw_data;
|
void *fw_data;
|
||||||
size_t data_size, total_size;
|
size_t data_size, total_size;
|
||||||
cpuctl_msr_args_t msrargs = {
|
cpuctl_msr_args_t msrargs = {
|
||||||
.msr = MSR_IA32_PLATFORM_ID,
|
.msr = MSR_BIOS_SIGN,
|
||||||
|
.data = 0,
|
||||||
};
|
};
|
||||||
cpuctl_cpuid_args_t idargs = {
|
cpuctl_cpuid_args_t idargs = {
|
||||||
.level = 1, /* Signature. */
|
.level = 1, /* Signature. */
|
||||||
@ -115,12 +116,18 @@ intel_update(const char *dev, const char *path)
|
|||||||
WARN(0, "could not open %s for writing", dev);
|
WARN(0, "could not open %s for writing", dev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
error = ioctl(devfd, CPUCTL_WRMSR, &msrargs);
|
||||||
|
if (error < 0) {
|
||||||
|
WARN(0, "ioctl(%s)", dev);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
error = ioctl(devfd, CPUCTL_CPUID, &idargs);
|
error = ioctl(devfd, CPUCTL_CPUID, &idargs);
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
WARN(0, "ioctl(%s)", dev);
|
WARN(0, "ioctl(%s)", dev);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
signature = idargs.data[0];
|
signature = idargs.data[0];
|
||||||
|
msrargs.msr = MSR_IA32_PLATFORM_ID;
|
||||||
error = ioctl(devfd, CPUCTL_RDMSR, &msrargs);
|
error = ioctl(devfd, CPUCTL_RDMSR, &msrargs);
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
WARN(0, "ioctl(%s)", dev);
|
WARN(0, "ioctl(%s)", dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user