romstage_handoff: add helper to determine resume status

Instead of having callers query the romstage handoff resume
status by inspecting the object themselves add
romstage_handoff_is_resume() so that the same information
can be queried easily.

Change-Id: I40f3769b7646bf296ee4bc323a9ab1d5e5691e21
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/17647
Tested-by: build bot (Jenkins)
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-by: Furquan Shaikh <furquan@google.com>
diff --git a/src/arch/x86/acpi_s3.c b/src/arch/x86/acpi_s3.c
index ffec64d..f3cb0971 100644
--- a/src/arch/x86/acpi_s3.c
+++ b/src/arch/x86/acpi_s3.c
@@ -32,14 +32,7 @@
 #if IS_ENABLED(CONFIG_EARLY_CBMEM_INIT)
 int acpi_get_sleep_type(void)
 {
-	struct romstage_handoff *handoff;
-
-	handoff = cbmem_find(CBMEM_ID_ROMSTAGE_INFO);
-
-	if (handoff == NULL) {
-		printk(BIOS_DEBUG, "Unknown boot method, assuming normal.\n");
-		return ACPI_S0;
-	} else if (handoff->s3_resume) {
+	if (romstage_handoff_is_resume()) {
 		printk(BIOS_DEBUG, "S3 Resume.\n");
 		return ACPI_S3;
 	} else {
diff --git a/src/include/romstage_handoff.h b/src/include/romstage_handoff.h
index 3eba0fd..9e254cd 100644
--- a/src/include/romstage_handoff.h
+++ b/src/include/romstage_handoff.h
@@ -78,4 +78,17 @@
 	return 0;
 }
 
+/* Return 1 if resuming or 0 if not. */
+static inline int romstage_handoff_is_resume(void)
+{
+	struct romstage_handoff *handoff;
+
+	handoff = cbmem_find(CBMEM_ID_ROMSTAGE_INFO);
+
+	if (handoff == NULL)
+		return 0;
+
+	return handoff->s3_resume;
+}
+
 #endif /* ROMSTAGE_HANDOFF_H */
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c
index 3a6f2e2..58c1a8a 100644
--- a/src/lib/prog_loaders.c
+++ b/src/lib/prog_loaders.c
@@ -85,19 +85,19 @@
 	}
 }
 
-static void run_ramstage_from_resume(struct romstage_handoff *handoff,
-					struct prog *ramstage)
+static void run_ramstage_from_resume(struct prog *ramstage)
 {
-	if (handoff != NULL && handoff->s3_resume) {
-		/* Load the cached ramstage to runtime location. */
-		stage_cache_load_stage(STAGE_RAMSTAGE, ramstage);
+	if (!romstage_handoff_is_resume())
+		return;
 
-		if (prog_entry(ramstage) != NULL) {
-			printk(BIOS_DEBUG, "Jumping to image.\n");
-			prog_run(ramstage);
-		}
-		ramstage_cache_invalid();
+	/* Load the cached ramstage to runtime location. */
+	stage_cache_load_stage(STAGE_RAMSTAGE, ramstage);
+
+	if (prog_entry(ramstage) != NULL) {
+		printk(BIOS_DEBUG, "Jumping to image.\n");
+		prog_run(ramstage);
 	}
+	ramstage_cache_invalid();
 }
 
 static int load_relocatable_ramstage(struct prog *ramstage)
@@ -136,8 +136,7 @@
 	if (IS_ENABLED(CONFIG_ARCH_X86) &&
 	    !IS_ENABLED(CONFIG_NO_STAGE_CACHE) &&
 	    IS_ENABLED(CONFIG_EARLY_CBMEM_INIT))
-		run_ramstage_from_resume(romstage_handoff_find_or_add(),
-						&ramstage);
+		run_ramstage_from_resume(&ramstage);
 
 	if (prog_locate(&ramstage))
 		goto fail;
diff --git a/src/soc/intel/apollolake/chip.c b/src/soc/intel/apollolake/chip.c
index ef5908c..32d68cc 100644
--- a/src/soc/intel/apollolake/chip.c
+++ b/src/soc/intel/apollolake/chip.c
@@ -260,7 +260,6 @@
 static void soc_init(void *data)
 {
 	struct global_nvs_t *gnvs;
-	struct romstage_handoff *handoff;
 
 	/* Save VBT info and mapping */
 	vbt = vbt_get(&vbt_rdev);
@@ -269,8 +268,7 @@
 	 * default policy that doesn't honor boards' requirements. */
 	itss_snapshot_irq_polarities(GPIO_IRQ_START, GPIO_IRQ_END);
 
-	handoff = romstage_handoff_find_or_add();
-	fsp_silicon_init(handoff->s3_resume);
+	fsp_silicon_init(romstage_handoff_is_resume());
 
 	/* Restore GPIO IRQ polarities back to previous settings. */
 	itss_restore_irq_polarities(GPIO_IRQ_START, GPIO_IRQ_END);
diff --git a/src/soc/intel/quark/chip.c b/src/soc/intel/quark/chip.c
index 150df12..5e80463 100644
--- a/src/soc/intel/quark/chip.c
+++ b/src/soc/intel/quark/chip.c
@@ -102,8 +102,6 @@
 
 static void chip_init(void *chip_info)
 {
-	struct romstage_handoff *handoff;
-
 	/* Validate the temperature settings */
 	ASSERT(PLATFORM_CATASTROPHIC_TRIP_CELSIUS <= 255);
 	ASSERT(PLATFORM_CATASTROPHIC_TRIP_CELSIUS
@@ -120,8 +118,7 @@
 			| TS_LOCK_AUX_TRIP_PT_REGS_ENABLE));
 
 	/* Perform silicon specific init. */
-	handoff = romstage_handoff_find_or_add();
-	fsp_silicon_init(handoff->s3_resume);
+	fsp_silicon_init(romstage_handoff_is_resume());
 }
 
 static void pci_domain_set_resources(device_t dev)
diff --git a/src/soc/intel/skylake/chip_fsp20.c b/src/soc/intel/skylake/chip_fsp20.c
index f096cf9..a1e76a9 100644
--- a/src/soc/intel/skylake/chip_fsp20.c
+++ b/src/soc/intel/skylake/chip_fsp20.c
@@ -35,13 +35,8 @@
 
 void soc_init_pre_device(void *chip_info)
 {
-	struct romstage_handoff *handoff;
-
-	/* Get S3 status to pass to silicon init. */
-	handoff = romstage_handoff_find_or_add();
-
 	/* Perform silicon specific init. */
-	fsp_silicon_init(handoff->s3_resume);
+	fsp_silicon_init(romstage_handoff_is_resume());
 }
 
 static void pci_domain_set_resources(device_t dev)