vboot: remove vboot_handoff_get_recovery_reason

Two functions retrieve vboot recovery_reason:
* vboot_handoff_get_recovery_reason
* vboot_get_recovery_reason_shared_data

Previously, when CBMEM comes online, a vboot_handoff data
structure is created, and depending on the architecture,
coreboot may eventually lose access to vboot_working_data.

After implementing vboot_working_data CBMEM migration,
vboot_working_data is always guaranteed to be accessible.

vboot_get_recovery_reason_shared_data is corrected to also
allow accessing vboot_working_data in ramstage and postcar.

Now, vboot_handoff_get_recovery reason returning a valid recovery
reason implies that vboot_get_recovery_reason_shared_data should
*also* return a valid recovery reason.  Thus we may remove the
former.

BUG=b:124141368, b:124192753
TEST=make clean && make test-abuild
BRANCH=none

Change-Id: Iac216dc968dd155d9d4f8bd0f2dfd5034762f9a0
Signed-off-by: Joel Kitching <kitching@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/33532
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Joel Kitching 2019-06-16 16:44:26 +08:00 committed by Julius Werner
parent c10af299ae
commit a06cd6c29e
3 changed files with 7 additions and 38 deletions

View File

@ -26,10 +26,6 @@
static int vboot_get_recovery_reason_shared_data(void) static int vboot_get_recovery_reason_shared_data(void)
{ {
/* Shared data does not exist for Ramstage and Post-CAR stage. */
if (ENV_RAMSTAGE || ENV_POSTCAR)
return 0;
struct vb2_shared_data *sd = vboot_get_shared_data(); struct vb2_shared_data *sd = vboot_get_shared_data();
assert(sd); assert(sd);
return sd->recovery_reason; return sd->recovery_reason;
@ -96,11 +92,10 @@ static int vboot_possibly_executed(void)
* VB2_RECOVERY_RO_MANUAL. * VB2_RECOVERY_RO_MANUAL.
* 2. Checks if recovery request is present in VBNV and returns the code read * 2. Checks if recovery request is present in VBNV and returns the code read
* from it. * from it.
* 3. Checks recovery request in handoff for stages post-cbmem. * 3. Checks if vboot verification is done and looks up selected region
* 4. For non-CBMEM stages, check if vboot verification is done and look-up * to identify if vboot_reference library has requested recovery path.
* selected region to identify if vboot_reference library has requested recovery * If yes, return the reason code from shared data.
* path. If yes, return the reason code from shared data. * 4. If nothing applies, return 0 indicating no recovery request.
* 5. If nothing applies, return 0 indicating no recovery request.
*/ */
int vboot_check_recovery_request(void) int vboot_check_recovery_request(void)
{ {
@ -115,19 +110,8 @@ int vboot_check_recovery_request(void)
return reason; return reason;
/* /*
* Check recovery flag in vboot_handoff for stages post CBMEM coming * Identify if vboot verification is already complete and no slot
* online. Since for some stages there is no way to know if cbmem has * was selected i.e. recovery path was requested.
* already come online, try looking up handoff anyways. If it fails,
* flow will fallback to looking up shared data.
*/
if (cbmem_possibly_online() &&
((reason = vboot_handoff_get_recovery_reason()) != 0))
return reason;
/*
* For stages where CBMEM might not be online, identify if vboot
* verification is already complete and no slot was selected
* i.e. recovery path was requested.
*/ */
if (vboot_possibly_executed() && vboot_logic_executed() && if (vboot_possibly_executed() && vboot_logic_executed() &&
!vboot_is_slot_selected()) !vboot_is_slot_selected())

View File

@ -93,19 +93,6 @@ int vboot_handoff_check_recovery_flag(void)
return vboot_get_handoff_flag(VB_INIT_OUT_ENABLE_RECOVERY); return vboot_get_handoff_flag(VB_INIT_OUT_ENABLE_RECOVERY);
} }
int vboot_handoff_get_recovery_reason(void)
{
struct vboot_handoff *vbho;
VbSharedDataHeader *sd;
if (vboot_get_handoff_info((void **)&vbho, NULL))
return 0;
sd = (VbSharedDataHeader *)vbho->shared_data;
return sd->recovery_reason;
}
/* ============================ VBOOT REBOOT ============================== */ /* ============================ VBOOT REBOOT ============================== */
void __weak vboot_platform_prepare_reboot(void) void __weak vboot_platform_prepare_reboot(void)
{ {

View File

@ -54,15 +54,13 @@ struct vboot_handoff {
int vboot_get_handoff_info(void **addr, uint32_t *size); int vboot_get_handoff_info(void **addr, uint32_t *size);
/* /*
* The following functions read vboot_handoff structure to obtain requested * The following function reads vboot_handoff structure to obtain requested
* information. If vboot handoff is not available, 0 is returned by default. * information. If vboot handoff is not available, 0 is returned by default.
* If vboot handoff is available: * If vboot handoff is available:
* Returns 1 for flag if true * Returns 1 for flag if true
* Returns 0 for flag if false * Returns 0 for flag if false
* Returns value read for other fields
*/ */
int vboot_handoff_check_recovery_flag(void); int vboot_handoff_check_recovery_flag(void);
int vboot_handoff_get_recovery_reason(void);
/* ============================ VBOOT REBOOT ============================== */ /* ============================ VBOOT REBOOT ============================== */
/* /*