soc/intel/xeon_sp/cpx: Move MSR Locks to CPU init and fix them
Move locking CPU MSRs during CPU init instead of using CONFIG_PARALLEL_MP_AP_WORK functions. The AES Lock enable bit caused CPU exception errors as this should not run on HT siblings. The set_aesni_lock() function takes care of that. Change-Id: I21598c3e9a153dce25a09b187ddf9cf6363039d3 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/55098 Reviewed-by: Sumeet R Pawnikar <sumeet.r.pawnikar@intel.com> Reviewed-by: Christian Walter <christian.walter@9elements.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
8a18bd8500
commit
3838edeac6
|
@ -14,7 +14,6 @@
|
||||||
#include <soc/acpi.h>
|
#include <soc/acpi.h>
|
||||||
#include <soc/chip_common.h>
|
#include <soc/chip_common.h>
|
||||||
#include <soc/cpu.h>
|
#include <soc/cpu.h>
|
||||||
#include <soc/msr.h>
|
|
||||||
#include <soc/pch.h>
|
#include <soc/pch.h>
|
||||||
#include <soc/ramstage.h>
|
#include <soc/ramstage.h>
|
||||||
#include <soc/p2sb.h>
|
#include <soc/p2sb.h>
|
||||||
|
@ -144,22 +143,6 @@ static void set_pcu_locks(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_msr_locks(void *unused)
|
|
||||||
{
|
|
||||||
/* The MSRs and CSRS have the same register layout. Use the CSRS bit definitions */
|
|
||||||
msr_t msr;
|
|
||||||
|
|
||||||
/* Lock Turbo */
|
|
||||||
msr = rdmsr(MSR_TURBO_ACTIVATION_RATIO);
|
|
||||||
msr.lo |= (TURBO_ACTIVATION_RATIO_LOCK);
|
|
||||||
wrmsr(MSR_TURBO_ACTIVATION_RATIO, msr);
|
|
||||||
|
|
||||||
/* Lock AES enable */
|
|
||||||
msr = rdmsr(MSR_FEATURE_CONFIG);
|
|
||||||
msr.lo |= FEATURE_CONFIG_LOCK;
|
|
||||||
wrmsr(MSR_FEATURE_CONFIG, msr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_imc_locks(void)
|
static void set_imc_locks(void)
|
||||||
{
|
{
|
||||||
struct device *dev = 0;
|
struct device *dev = 0;
|
||||||
|
@ -182,7 +165,6 @@ static void chip_final(void *data)
|
||||||
/* LOCK PAM */
|
/* LOCK PAM */
|
||||||
pci_or_config32(pcidev_path_on_root(PCI_DEVFN(0, 0)), 0x80, 1 << 0);
|
pci_or_config32(pcidev_path_on_root(PCI_DEVFN(0, 0)), 0x80, 1 << 0);
|
||||||
|
|
||||||
mp_run_on_all_cpus(set_msr_locks, NULL);
|
|
||||||
set_pcu_locks();
|
set_pcu_locks();
|
||||||
set_imc_locks();
|
set_imc_locks();
|
||||||
set_upi_locks();
|
set_upi_locks();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
#include <acpi/acpigen.h>
|
|
||||||
#include <acpi/acpi.h>
|
#include <acpi/acpi.h>
|
||||||
|
#include <acpi/acpigen.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <console/debug.h>
|
#include <console/debug.h>
|
||||||
|
@ -19,9 +19,10 @@
|
||||||
#include <intelpch/lockdown.h>
|
#include <intelpch/lockdown.h>
|
||||||
#include <soc/cpu.h>
|
#include <soc/cpu.h>
|
||||||
#include <soc/msr.h>
|
#include <soc/msr.h>
|
||||||
|
#include <soc/pci_devs.h>
|
||||||
#include <soc/pm.h>
|
#include <soc/pm.h>
|
||||||
#include <soc/soc_util.h>
|
|
||||||
#include <soc/smmrelocate.h>
|
#include <soc/smmrelocate.h>
|
||||||
|
#include <soc/soc_util.h>
|
||||||
#include <soc/util.h>
|
#include <soc/util.h>
|
||||||
|
|
||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
|
@ -103,6 +104,13 @@ static void each_cpu_init(struct device *cpu)
|
||||||
|
|
||||||
/* Enable Vmx */
|
/* Enable Vmx */
|
||||||
set_vmx_and_lock();
|
set_vmx_and_lock();
|
||||||
|
set_aesni_lock();
|
||||||
|
|
||||||
|
/* The MSRs and CSRS have the same register layout. Use the CSRS bit definitions
|
||||||
|
Lock Turbo. Did FSP-S set this up??? */
|
||||||
|
msr = rdmsr(MSR_TURBO_ACTIVATION_RATIO);
|
||||||
|
msr.lo |= (TURBO_ACTIVATION_RATIO_LOCK);
|
||||||
|
wrmsr(MSR_TURBO_ACTIVATION_RATIO, msr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct device_operations cpu_dev_ops = {
|
static struct device_operations cpu_dev_ops = {
|
||||||
|
|
Loading…
Reference in New Issue