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:
parent
c10af299ae
commit
a06cd6c29e
|
@ -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())
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 ============================== */
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue