summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/POSTCODES1
-rw-r--r--src/arch/x86/postcar_loader.c9
-rw-r--r--src/include/console/post_codes.h7
-rw-r--r--src/lib/prog_loaders.c10
-rw-r--r--src/security/vboot/vboot_logic.c6
5 files changed, 24 insertions, 9 deletions
diff --git a/Documentation/POSTCODES b/Documentation/POSTCODES
index 5d337b629d..2340fac049 100644
--- a/Documentation/POSTCODES
+++ b/Documentation/POSTCODES
@@ -16,6 +16,7 @@ This is an (incomplete) list of POST codes emitted by coreboot v4.
0x66 Devices have been enumerated
0x88 Devices have been configured
0x89 Devices have been enabled
+0xe0 Boot media (e.g. SPI ROM) is corrupt
0xf8 Entry into elf boot
0xf3 Jumping to payload
diff --git a/src/arch/x86/postcar_loader.c b/src/arch/x86/postcar_loader.c
index d62487ef88..e5d0ceab4d 100644
--- a/src/arch/x86/postcar_loader.c
+++ b/src/arch/x86/postcar_loader.c
@@ -141,13 +141,16 @@ static void load_postcar_cbfs(struct prog *prog, struct postcar_frame *pcf)
};
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 f482ae9e47..775f78d603 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 3b77712550..a21663fc0f 100644
--- a/src/lib/prog_loaders.c
+++ b/src/lib/prog_loaders.c
@@ -69,7 +69,8 @@ void run_romstage(void)
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 @@ void run_ramstage(void)
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 @@ void payload_load(void)
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 d4ad32736b..626310010c 100644
--- a/src/security/vboot/vboot_logic.c
+++ b/src/security/vboot/vboot_logic.c
@@ -320,7 +320,8 @@ void verstage_main(void)
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 @@ void verstage_main(void)
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);