aboutsummaryrefslogtreecommitdiff
path: root/libflash
diff options
context:
space:
mode:
Diffstat (limited to 'libflash')
-rw-r--r--libflash/mbox-flash.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libflash/mbox-flash.c b/libflash/mbox-flash.c
index d33a52c..4a3c53f 100644
--- a/libflash/mbox-flash.c
+++ b/libflash/mbox-flash.c
@@ -1018,6 +1018,7 @@ static int protocol_init(struct mbox_flash_data *mbox_flash, uint8_t shift)
*/
mbox_flash->version = 3;
+negotiate_version:
msg_put_u8(&msg, 0, mbox_flash->version);
msg_put_u8(&msg, 1, shift);
rc = msg_send(mbox_flash, &msg, mbox_flash->timeout);
@@ -1029,6 +1030,12 @@ static int protocol_init(struct mbox_flash_data *mbox_flash, uint8_t shift)
rc = wait_for_bmc(mbox_flash, mbox_flash->timeout);
if (rc) {
prlog(PR_ERR, "Error waiting for BMC\n");
+ if (mbox_flash->version > 1) {
+ mbox_flash->version--;
+ prlog(PR_INFO, "Retrying MBOX negotiation with BMC"
+ " with MBOXv%d\n", mbox_flash->version);
+ goto negotiate_version;
+ }
return rc;
}