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
|
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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