soc/amd/common/pi: Ensure AGESA S3 resume called before SMM lock
AGESA S3 restore needs to occur before SMM finalization/locking, but it's a crapshoot as to which runs first since both use the same BS_OS_RESUME/BS_ON_ENTRY boot state callback, and there's no way to prioritize/force ordering. To work around this, move the AGESA S3 resume call to the preceding boot state (BS_OS_RESUME_CHECK) to ensure it runs first, and guard it to ensure it only runs on the S3 resume path. BUG=none TEST=build/boot google/liara, verify S3 resume successful. Change-Id: I765db140c6708a0b129f79fb7d3dc8a4ab3095bd Signed-off-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/76592 Reviewed-by: Fred Reitberger <reitbergerfred@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
This commit is contained in:
parent
cecb7a75b8
commit
0a96a1ca06
|
@ -1,12 +1,14 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
|
#include <acpi/acpi.h>
|
||||||
#include <bootstate.h>
|
#include <bootstate.h>
|
||||||
#include <amdblocks/agesawrapper_call.h>
|
#include <amdblocks/agesawrapper_call.h>
|
||||||
|
|
||||||
static void agesawrapper_s3finalrestore(void *unused)
|
static void agesawrapper_s3finalrestore(void *unused)
|
||||||
{
|
{
|
||||||
|
/* Needed since running on BS_OS_RESUME_CHECK to ensure execution before SMM lock */
|
||||||
|
if (acpi_is_wakeup_s3())
|
||||||
do_agesawrapper(AMD_S3FINAL_RESTORE, "amds3finalrestore");
|
do_agesawrapper(AMD_S3FINAL_RESTORE, "amds3finalrestore");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY,
|
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME_CHECK, BS_ON_EXIT, agesawrapper_s3finalrestore, NULL);
|
||||||
agesawrapper_s3finalrestore, NULL);
|
|
||||||
|
|
Loading…
Reference in New Issue