diff options
author | Karthikeyan Ramasubramanian <kramasub@google.com> | 2022-12-05 14:49:38 -0700 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-12-21 13:36:25 +0000 |
commit | 7b49d1b19840773841311b15076cc4909bc2b845 (patch) | |
tree | 82793c48f198e51ac991e6a63133d1d9263453b6 /src/soc/amd/mendocino | |
parent | a0ff8744892e61b1e778f0bc0912bb1d6826c6d2 (diff) |
vc/amd,soc/amd/mendocino: Add SVC_CMD_GET_PREV_BOOT_STATUS
Add an SVC command to get the previous boot status. If there is any
pre-x86 boot failure in the previous boot cycle, PSP stores it in warm
reset persistent register and triggers a warm reset. PSP verstage on the
subsequent boot gets the previous boot status and reports any failure to
the vboot before a FW slot is selected.
BUG=b:242825052
TEST=Build Skyrim BIOS image and boot to OS in Skyrim. Trigger a failure
scenario by corrupting certain firmware blobs and observe that PSP
reports the failure boot status. On a normal boot, observed that PSP
reports successful boot.
Change-Id: I440deee560b72c80491bfdd7fda38a1c3a4299e5
Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70381
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/amd/mendocino')
-rw-r--r-- | src/soc/amd/mendocino/psp_verstage/svc.c | 10 | ||||
-rw-r--r-- | src/soc/amd/mendocino/psp_verstage/svc.h | 4 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/soc/amd/mendocino/psp_verstage/svc.c b/src/soc/amd/mendocino/psp_verstage/svc.c index 931e670399..e28aa3c57f 100644 --- a/src/soc/amd/mendocino/psp_verstage/svc.c +++ b/src/soc/amd/mendocino/psp_verstage/svc.c @@ -215,3 +215,13 @@ uint32_t svc_set_fw_hash_table(struct psp_fw_hash_table *hash_table) SVC_CALL2(SVC_VERSTAGE_CMD, CMD_SET_FW_HASH_TABLE, (void *)¶m, retval); return retval; } + +uint32_t svc_get_prev_boot_status(uint32_t *boot_status) +{ + uint32_t retval = 0; + struct cmd_param_get_prev_boot_status param = { + .ptr_boot_status = boot_status, + }; + SVC_CALL2(SVC_VERSTAGE_CMD, CMD_GET_PREV_BOOT_STATUS, (void *)¶m, retval); + return retval; +} diff --git a/src/soc/amd/mendocino/psp_verstage/svc.h b/src/soc/amd/mendocino/psp_verstage/svc.h index 3feec3ebef..0dc9fb699e 100644 --- a/src/soc/amd/mendocino/psp_verstage/svc.h +++ b/src/soc/amd/mendocino/psp_verstage/svc.h @@ -94,4 +94,8 @@ struct cmd_param_set_fw_hash_table { struct psp_fw_hash_table *ptr_psp_fw_hash_table; }; +struct cmd_param_get_prev_boot_status { + unsigned int *ptr_boot_status; +}; + #endif /* PSP_VERSTAGE_SVC_H */ |