soc/intel/skylake: lock AES-NI MSR

Lock AES-NI register to prevent unintended disabling, as suggested by the
MSR datasheet.

Successfully tested by reading the MSR on X11SSM-F

Change-Id: I97a0d3b1b9b0452e929ca07d29c03237b413e521
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/35188
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Michael Niewöhner 2019-09-01 16:49:09 +02:00 committed by Patrick Georgi
parent 88e9c5af57
commit 7bdedcdc33
2 changed files with 23 additions and 0 deletions

View File

@ -31,6 +31,7 @@ config CPU_SPECIFIC_OPTIONS
select COMMON_FADT
select CPU_INTEL_COMMON
select CPU_INTEL_FIRMWARE_INTERFACE_TABLE
select CPU_INTEL_COMMON_HYPERTHREADING
select C_ENVIRONMENT_BOOTBLOCK
select FSP_M_XIP if MAINBOARD_USES_FSP2_0
select FSP_T_XIP if FSP_CAR

View File

@ -420,6 +420,25 @@ static void enable_pm_timer_emulation(void)
wrmsr(MSR_EMULATE_PM_TIMER, msr);
}
/*
* Lock AES-NI (MSR_FEATURE_CONFIG) to prevent unintended disabling
* as suggested in Intel document 325384-070US.
*/
static void cpu_lock_aesni(void)
{
msr_t msr;
/* Only run once per core as specified in the MSR datasheet */
if (intel_ht_sibling())
return;
msr = rdmsr(MSR_FEATURE_CONFIG);
if ((msr.lo & 1) == 0) {
msr.lo |= 1;
wrmsr(MSR_FEATURE_CONFIG, msr);
}
}
/* All CPUs including BSP will run the following function. */
void soc_core_init(struct device *cpu)
{
@ -444,6 +463,9 @@ void soc_core_init(struct device *cpu)
/* Configure Intel Speed Shift */
configure_isst();
/* Lock AES-NI MSR */
cpu_lock_aesni();
/* Enable ACPI Timer Emulation via MSR 0x121 */
enable_pm_timer_emulation();