soc/amd: move SMM finalization to common code

This adds the SMM finalization to Cezanne.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: I1a2b433d92df2a76979e2e6a3d1dde996303ba78
Reviewed-on: https://review.coreboot.org/c/coreboot/+/50801
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Felix Held 2021-02-16 17:42:56 +01:00
parent 7aacdd1d35
commit 746f438ada
6 changed files with 3 additions and 58 deletions

View File

@ -29,7 +29,8 @@ endif # SOC_AMD_COMMON_BLOCK_NONCAR
config SOC_AMD_COMMON_BLOCK_SMM config SOC_AMD_COMMON_BLOCK_SMM
bool bool
help help
Add common SMM relocation and handler functionality to the build. Add common SMM relocation, finalization and handler functionality to
the build.
config SOC_AMD_COMMON_BLOCK_TSC_FAM17H_19H config SOC_AMD_COMMON_BLOCK_TSC_FAM17H_19H
bool bool

View File

@ -4,6 +4,7 @@ subdirs-y += ../../../../../../cpu/x86/smm
romstage-y += smm_helper.c romstage-y += smm_helper.c
postcar-y += smm_helper.c postcar-y += smm_helper.c
ramstage-y += finalize.c
ramstage-y += smm_relocate.c ramstage-y += smm_relocate.c
ramstage-y += smm_helper.c ramstage-y += smm_helper.c
smm-y += smi_handler.c smm-y += smi_handler.c

View File

@ -45,7 +45,6 @@ ramstage-y += reset.c
ramstage-y += acp.c ramstage-y += acp.c
ramstage-y += sata.c ramstage-y += sata.c
ramstage-y += uart.c ramstage-y += uart.c
ramstage-y += finalize.c
ramstage-y += soc_util.c ramstage-y += soc_util.c
ramstage-y += fsp_params.c ramstage-y += fsp_params.c
ramstage-y += graphics.c ramstage-y += graphics.c

View File

@ -60,7 +60,6 @@ ramstage-y += memmap.c
ramstage-y += uart.c ramstage-y += uart.c
ramstage-y += usb.c ramstage-y += usb.c
ramstage-y += tsc_freq.c ramstage-y += tsc_freq.c
ramstage-y += finalize.c
ramstage-y += psp.c ramstage-y += psp.c
all-y += reset.c all-y += reset.c

View File

@ -1,55 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <acpi/acpi.h>
#include <cpu/x86/mp.h>
#include <cpu/x86/msr.h>
#include <cpu/amd/msr.h>
#include <bootstate.h>
#include <console/console.h>
#include <amdblocks/acpi.h>
static void per_core_finalize(void *unused)
{
msr_t hwcr, mask;
/* Finalize SMM settings */
hwcr = rdmsr(HWCR_MSR);
if (hwcr.lo & SMM_LOCK) /* Skip if already locked, avoid GPF */
return;
if (CONFIG(HAVE_SMI_HANDLER)) {
mask = rdmsr(SMM_MASK_MSR);
mask.lo |= SMM_TSEG_VALID;
wrmsr(SMM_MASK_MSR, mask);
}
hwcr.lo |= SMM_LOCK;
wrmsr(HWCR_MSR, hwcr);
}
static void finalize_cores(void)
{
int r;
printk(BIOS_SPEW, "Lock SMM configuration\n");
r = mp_run_on_all_cpus(per_core_finalize, NULL);
if (r)
printk(BIOS_WARNING, "Failed to finalize all cores\n");
}
static void soc_finalize(void *unused)
{
finalize_cores();
if (!acpi_is_wakeup_s3()) {
if (CONFIG(HAVE_SMI_HANDLER))
acpi_disable_sci();
else
acpi_enable_sci();
}
post_code(POST_OS_BOOT);
}
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, soc_finalize, NULL);
BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_LOAD, BS_ON_EXIT, soc_finalize, NULL);