summaryrefslogtreecommitdiff
path: root/firmware/2lib/2misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/2lib/2misc.c')
-rw-r--r--firmware/2lib/2misc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c
index 43d39f8b..b289f315 100644
--- a/firmware/2lib/2misc.c
+++ b/firmware/2lib/2misc.c
@@ -416,6 +416,24 @@ int vb2_allow_recovery(struct vb2_context *ctx)
return !!(vb2_get_sd(ctx)->flags & VB2_SD_FLAG_MANUAL_RECOVERY);
}
+void vb2_clear_recovery(struct vb2_context *ctx)
+{
+ struct vb2_shared_data *sd = vb2_get_sd(ctx);
+
+ VB2_DEBUG("Clearing recovery request: %#x / %#x\n",
+ vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST),
+ vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE));
+
+ /* Clear recovery request for both cases. */
+ vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_NOT_REQUESTED);
+
+ if (!vb2_allow_recovery(ctx)) {
+ VB2_DEBUG("Stow recovery reason as subcode (%#x)\n",
+ sd->recovery_reason);
+ vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, sd->recovery_reason);
+ }
+}
+
int vb2api_need_reboot_for_display(struct vb2_context *ctx)
{
if (!(vb2_get_sd(ctx)->flags & VB2_SD_FLAG_DISPLAY_AVAILABLE)) {