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:
parent
7aacdd1d35
commit
746f438ada
|
@ -29,7 +29,8 @@ endif # SOC_AMD_COMMON_BLOCK_NONCAR
|
|||
config SOC_AMD_COMMON_BLOCK_SMM
|
||||
bool
|
||||
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
|
||||
bool
|
||||
|
|
|
@ -4,6 +4,7 @@ subdirs-y += ../../../../../../cpu/x86/smm
|
|||
|
||||
romstage-y += smm_helper.c
|
||||
postcar-y += smm_helper.c
|
||||
ramstage-y += finalize.c
|
||||
ramstage-y += smm_relocate.c
|
||||
ramstage-y += smm_helper.c
|
||||
smm-y += smi_handler.c
|
||||
|
|
|
@ -45,7 +45,6 @@ ramstage-y += reset.c
|
|||
ramstage-y += acp.c
|
||||
ramstage-y += sata.c
|
||||
ramstage-y += uart.c
|
||||
ramstage-y += finalize.c
|
||||
ramstage-y += soc_util.c
|
||||
ramstage-y += fsp_params.c
|
||||
ramstage-y += graphics.c
|
||||
|
|
|
@ -60,7 +60,6 @@ ramstage-y += memmap.c
|
|||
ramstage-y += uart.c
|
||||
ramstage-y += usb.c
|
||||
ramstage-y += tsc_freq.c
|
||||
ramstage-y += finalize.c
|
||||
ramstage-y += psp.c
|
||||
|
||||
all-y += reset.c
|
||||
|
|
|
@ -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);
|
Loading…
Reference in New Issue