recovery: Add recovery reasons for BCB

BCB is bootloader control block. Add reasons specific to BCB:
1. In case of any error reading/writing BCB (internal FW error)
2. User-mode requested recovery via BCB (user-mode requested)

BUG=chrome-os-partner:40960
BRANCH=None
TEST=Compiles successfully

Change-Id: I0ac362ba7267a08313cb3077be686aa73367e53b
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://chromium-review.googlesource.com/275222
Trybot-Ready: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Queue: Furquan Shaikh <furquan@chromium.org>
diff --git a/firmware/2lib/include/2recovery_reasons.h b/firmware/2lib/include/2recovery_reasons.h
index 1c76531..1ced50e 100644
--- a/firmware/2lib/include/2recovery_reasons.h
+++ b/firmware/2lib/include/2recovery_reasons.h
@@ -190,6 +190,9 @@
 	/* No bootable kernel found on disk */
 	VB2_RECOVERY_RW_NO_KERNEL    = 0x5b,
 
+	/* BCB related error in RW firmware */
+	VB2_RECOVERY_RW_BCB_ERROR    = 0x5c,
+
 	/* Unspecified/unknown error in rewritable firmware */
 	VB2_RECOVERY_RW_UNSPECIFIED  = 0x7f,
 
@@ -202,6 +205,9 @@
 	/* Recovery mode test from user-mode */
 	VB2_RECOVERY_US_TEST         = 0xc1,
 
+	/* Recovery requested by user-mode via BCB */
+	VB2_RECOVERY_BCB_USER_MODE   = 0xc2,
+
 	/* Unspecified/unknown error in user-mode */
 	VB2_RECOVERY_US_UNSPECIFIED  = 0xff,
 };
diff --git a/firmware/include/vboot_nvstorage.h b/firmware/include/vboot_nvstorage.h
index a443dd3..665a5e5 100644
--- a/firmware/include/vboot_nvstorage.h
+++ b/firmware/include/vboot_nvstorage.h
@@ -250,6 +250,8 @@
 #define VBNV_RECOVERY_RW_NO_DISK      0x5A
 /* No bootable kernel found on disk */
 #define VBNV_RECOVERY_RW_NO_KERNEL    0x5B
+/* BCB-related error in RW firmware */
+#define VBNV_RECOVERY_RW_BCB_ERROR    0x5C
 /* Unspecified/unknown error in rewritable firmware */
 #define VBNV_RECOVERY_RW_UNSPECIFIED  0x7F
 /* DM-verity error */
@@ -258,6 +260,8 @@
 #define VBNV_RECOVERY_KE_UNSPECIFIED  0xBF
 /* Recovery mode test from user-mode */
 #define VBNV_RECOVERY_US_TEST         0xC1
+/* Recovery requested by user-mode via BCB */
+#define VBNV_RECOVERY_BCB_USER_MODE   0xC2
 /* Unspecified/unknown error in user-mode */
 #define VBNV_RECOVERY_US_UNSPECIFIED  0xFF
 
diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c
index 311a1c9..838ffc4 100644
--- a/firmware/lib/vboot_display.c
+++ b/firmware/lib/vboot_display.c
@@ -484,6 +484,8 @@
 		return "No bootable storage device in system";
 	case VBNV_RECOVERY_RW_NO_KERNEL:
 		return "No bootable kernel found on disk";
+	case VBNV_RECOVERY_RW_BCB_ERROR:
+		return "BCB partition error on disk";
 	case VBNV_RECOVERY_RW_UNSPECIFIED:
 		return "Unspecified/unknown error in RW firmware";
 	case VBNV_RECOVERY_KE_DM_VERITY:
@@ -492,6 +494,8 @@
 		return "Unspecified/unknown error in kernel";
 	case VBNV_RECOVERY_US_TEST:
 		return "Recovery mode test from user-mode";
+	case VBNV_RECOVERY_BCB_USER_MODE:
+		return "User-mode requested recovery via BCB";
 	case VBNV_RECOVERY_US_UNSPECIFIED:
 		return "Unspecified/unknown error in user-mode";
 	}