vboot: Fix S3 resume with stage_cache

In VBOOT_STARTS_IN_ROMSTAGE=y case, vboot_run_logic() did not
get called when postcar was loaded from TSEG stage cache on
ACPI S3 resume path. Resume failed as MP init attempts to
access microcode update from unverified FW_MAIN_A/B section.

In a similar fashion, for POSTCAR=n, loading ramstage from
TSEG stage cache would bypass the call to vboot_run_logic().

TEST=samsung/lumpy with VBOOT_STARTS_IN_ROMSTAGE=y is able
to complete S3 resume.

Change-Id: I77fe86d5fd89d22b5ef6f43e65a85a4ccd3259d9
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/76209
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Julius Werner <jwerner@chromium.org>
diff --git a/src/arch/x86/postcar_loader.c b/src/arch/x86/postcar_loader.c
index f8442d5..5528e37 100644
--- a/src/arch/x86/postcar_loader.c
+++ b/src/arch/x86/postcar_loader.c
@@ -99,8 +99,6 @@
 		.prog = prog,
 	};
 
-	vboot_run_logic();
-
 	if (rmodule_stage_load(&rsl))
 		die_with_post_code(POSTCODE_INVALID_ROM,
 				   "Failed to load after CAR program.\n");
@@ -162,6 +160,8 @@
 	struct prog prog =
 		PROG_INIT(PROG_POSTCAR, CONFIG_CBFS_PREFIX "/postcar");
 
+	vboot_run_logic();
+
 	if (resume_from_stage_cache()) {
 		stage_cache_load_stage(STAGE_POSTCAR, &prog);
 		/* This is here to allow platforms to pass different stack
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c
index 17d946e..9e661c5 100644
--- a/src/lib/prog_loaders.c
+++ b/src/lib/prog_loaders.c
@@ -92,6 +92,8 @@
 	else
 		timestamp_add_now(TS_ROMSTAGE_END);
 
+	vboot_run_logic();
+
 	/*
 	 * Only x86 systems using ramstage stage cache currently take the same
 	 * firmware path on resume.
@@ -99,8 +101,6 @@
 	if (ENV_X86 && resume_from_stage_cache())
 		run_ramstage_from_resume(&ramstage);
 
-	vboot_run_logic();
-
 	timestamp_add_now(TS_COPYRAM_START);
 
 	if (ENV_X86) {