post_code: add post code for failure to load next stage

Add a new post code, POST_INVALID_ROM, used when coreboot fails to
locate or validate a resource that is stored in ROM.

BUG=b:124401932
BRANCH=sarien
TEST=build coreboot for sarien and arcada platforms

Change-Id: Ie6de6590595d8fcdc57ad156237fffa03d5ead38
Signed-off-by: Keith Short <keithshort@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32770
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
diff --git a/src/arch/x86/postcar_loader.c b/src/arch/x86/postcar_loader.c
index d62487e..e5d0cea 100644
--- a/src/arch/x86/postcar_loader.c
+++ b/src/arch/x86/postcar_loader.c
@@ -141,13 +141,16 @@
 	};
 
 	if (prog_locate(prog))
-		die("Failed to locate after CAR program.\n");
+		die_with_post_code(POST_INVALID_ROM,
+				   "Failed to locate after CAR program.\n");
 	if (rmodule_stage_load(&rsl))
-		die("Failed to load after CAR program.\n");
+		die_with_post_code(POST_INVALID_ROM,
+				   "Failed to load after CAR program.\n");
 
 	/* Set the stack pointer within parameters of the program loaded. */
 	if (rsl.params == NULL)
-		die("No parameters found in after CAR program.\n");
+		die_with_post_code(POST_INVALID_ROM,
+				   "No parameters found in after CAR program.\n");
 
 	finalize_load(rsl.params, pcf->stack);
 
diff --git a/src/include/console/post_codes.h b/src/include/console/post_codes.h
index f482ae9..775f78d 100644
--- a/src/include/console/post_codes.h
+++ b/src/include/console/post_codes.h
@@ -319,6 +319,13 @@
 #define POST_JUMPING_TO_PAYLOAD			0xf3
 
 /**
+ * \brief Invalid or corrupt ROM
+ *
+ * Set if firmware failed to find or validate a resource that is stored in ROM.
+ */
+#define POST_INVALID_ROM			0xe0
+
+/**
  * \brief TPM failure
  *
  * An error with the TPM, either unexepcted state or communications failure.
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c
index 3b77712..a21663f 100644
--- a/src/lib/prog_loaders.c
+++ b/src/lib/prog_loaders.c
@@ -69,7 +69,8 @@
 
 fail:
 	if (CONFIG(BOOTBLOCK_CONSOLE))
-		die("Couldn't load romstage.\n");
+		die_with_post_code(POST_INVALID_ROM,
+				   "Couldn't load romstage.\n");
 	halt();
 }
 
@@ -162,7 +163,7 @@
 	prog_run(&ramstage);
 
 fail:
-	die("Ramstage was not loaded!\n");
+	die_with_post_code(POST_INVALID_ROM, "Ramstage was not loaded!\n");
 }
 
 #ifdef __RAMSTAGE__ // gc-sections should take care of this
@@ -195,13 +196,14 @@
 			break;
 		} /* else fall-through */
 	default:
-		die("Unsupported payload type.\n");
+		die_with_post_code(POST_INVALID_ROM,
+				   "Unsupported payload type.\n");
 		break;
 	}
 
 out:
 	if (prog_entry(payload) == NULL)
-		die("Payload not loaded.\n");
+		die_with_post_code(POST_INVALID_ROM, "Payload not loaded.\n");
 }
 
 void payload_run(void)
diff --git a/src/security/vboot/vboot_logic.c b/src/security/vboot/vboot_logic.c
index d4ad327..6263100 100644
--- a/src/security/vboot/vboot_logic.c
+++ b/src/security/vboot/vboot_logic.c
@@ -320,7 +320,8 @@
 	if (CONFIG(VBOOT_MEASURED_BOOT) &&
 		!(ctx.flags & VB2_CONTEXT_S3_RESUME)) {
 		if (vboot_init_crtm() != VB2_SUCCESS)
-			die("Initializing measured boot mode failed!");
+			die_with_post_code(POST_INVALID_ROM,
+				"Initializing measured boot mode failed!");
 	}
 
 	if (get_recovery_mode_switch()) {
@@ -395,7 +396,8 @@
 	printk(BIOS_INFO, "Phase 4\n");
 	rv = locate_firmware(&ctx, &fw_main);
 	if (rv)
-		die("Failed to read FMAP to locate firmware");
+		die_with_post_code(POST_INVALID_ROM,
+			"Failed to read FMAP to locate firmware");
 
 	rv = hash_body(&ctx, &fw_main);
 	save_if_needed(&ctx);