cpu/intel/model_1067x: Check for lock bit on IA32_FEATURE_CONTROL
df7aecd
"cpu/intel: Configure IA32_FEATURE_CONTROL for alternative
SMRR" introduced a regression because it unconditionally writes to
IA32_FEATURE_CONTROL, which if it is already locked results in an
unhandled exception. The lock bit is already set on a system reboot.
Change-Id: I7d2df9e1b9d767809da7a61ccd877c6c40f132eb
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/31255
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Bill XIE <persmule@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
committed by
Patrick Georgi
parent
a1024ac933
commit
667108199a
@@ -60,11 +60,19 @@ static void per_cpu_smm_trigger(void)
|
|||||||
/* We don't care if the lock is already setting
|
/* We don't care if the lock is already setting
|
||||||
as our smm relocation handler is able to handle
|
as our smm relocation handler is able to handle
|
||||||
setups where SMRR is not enabled here. */
|
setups where SMRR is not enabled here. */
|
||||||
if (!IS_ENABLED(CONFIG_SET_IA32_FC_LOCK_BIT))
|
if (ia32_ft_ctrl.lo & (1 << 0)) {
|
||||||
printk(BIOS_INFO,
|
/* IA32_FEATURE_CONTROL locked. If we set it again we
|
||||||
"Overriding CONFIG_SET_IA32_FC_LOCK_BIT to enable SMRR\n");
|
get an illegal instruction. */
|
||||||
ia32_ft_ctrl.lo |= (1 << 3) | (1 << 0);
|
printk(BIOS_DEBUG, "IA32_FEATURE_CONTROL already locked\n");
|
||||||
wrmsr(IA32_FEATURE_CONTROL, ia32_ft_ctrl);
|
printk(BIOS_DEBUG, "SMRR status: %senabled\n",
|
||||||
|
ia32_ft_ctrl.lo & (1 << 3) ? "" : "not ");
|
||||||
|
} else {
|
||||||
|
if (!IS_ENABLED(CONFIG_SET_IA32_FC_LOCK_BIT))
|
||||||
|
printk(BIOS_INFO,
|
||||||
|
"Overriding CONFIG_SET_IA32_FC_LOCK_BIT to enable SMRR\n");
|
||||||
|
ia32_ft_ctrl.lo |= (1 << 3) | (1 << 0);
|
||||||
|
wrmsr(IA32_FEATURE_CONTROL, ia32_ft_ctrl);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
set_vmx_and_lock();
|
set_vmx_and_lock();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user