diff --git a/include/android_bootloader_message.h b/include/android_bootloader_message.h
index b84789f..286d7ab 100644
--- a/include/android_bootloader_message.h
+++ b/include/android_bootloader_message.h
@@ -2,7 +2,7 @@
  * This is from the Android Project,
  * Repository: https://android.googlesource.com/platform/bootable/recovery
  * File: bootloader_message/include/bootloader_message/bootloader_message.h
- * Commit: c784ce50e8c10eaf70e1f97e24e8324aef45faf5
+ * Commit: See U-Boot commit description
  *
  * Copyright (C) 2008 The Android Open Source Project
  *
@@ -12,18 +12,24 @@
 #ifndef __ANDROID_BOOTLOADER_MESSAGE_H
 #define __ANDROID_BOOTLOADER_MESSAGE_H
 
+#ifndef __UBOOT__
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#else
 /* compiler.h defines the types that otherwise are included from stdint.h and
  * stddef.h
  */
 #include <compiler.h>
+#endif
 
-/* Spaces used by misc partition are as below:
- * 0   - 2K     For bootloader_message
- * 2K  - 16K    Used by Vendor's bootloader (the 2K - 4K range may be optionally used
- *              as bootloader_message_ab struct)
- * 16K - 64K    Used by uncrypt and recovery to store wipe_package for A/B devices
- * Note that these offsets are admitted by bootloader,recovery and uncrypt, so they
- * are not configurable without changing all of them. */
+// Spaces used by misc partition are as below:
+// 0   - 2K     For bootloader_message
+// 2K  - 16K    Used by Vendor's bootloader (the 2K - 4K range may be optionally used
+//              as bootloader_message_ab struct)
+// 16K - 64K    Used by uncrypt and recovery to store wipe_package for A/B devices
+// Note that these offsets are admitted by bootloader,recovery and uncrypt, so they
+// are not configurable without changing all of them.
 static const size_t BOOTLOADER_MESSAGE_OFFSET_IN_MISC = 0;
 static const size_t WIPE_PACKAGE_OFFSET_IN_MISC = 16 * 1024;
 
@@ -61,17 +67,17 @@
     char status[32];
     char recovery[768];
 
-    /* The 'recovery' field used to be 1024 bytes.  It has only ever
-     * been used to store the recovery command line, so 768 bytes
-     * should be plenty.  We carve off the last 256 bytes to store the
-     * stage string (for multistage packages) and possible future
-     * expansion. */
+    // The 'recovery' field used to be 1024 bytes.  It has only ever
+    // been used to store the recovery command line, so 768 bytes
+    // should be plenty.  We carve off the last 256 bytes to store the
+    // stage string (for multistage packages) and possible future
+    // expansion.
     char stage[32];
 
-    /* The 'reserved' field used to be 224 bytes when it was initially
-     * carved off from the 1024-byte recovery field. Bump it up to
-     * 1184-byte so that the entire bootloader_message struct rounds up
-     * to 2048-byte. */
+    // The 'reserved' field used to be 224 bytes when it was initially
+    // carved off from the 1024-byte recovery field. Bump it up to
+    // 1184-byte so that the entire bootloader_message struct rounds up
+    // to 2048-byte.
     char reserved[1184];
 };
 
@@ -79,10 +85,12 @@
  * We must be cautious when changing the bootloader_message struct size,
  * because A/B-specific fields may end up with different offsets.
  */
+#ifndef __UBOOT__
 #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus)
 static_assert(sizeof(struct bootloader_message) == 2048,
               "struct bootloader_message size changes, which may break A/B devices");
 #endif
+#endif /* __UBOOT__ */
 
 /**
  * The A/B-specific bootloader message structure (4-KiB).
@@ -108,7 +116,7 @@
     char slot_suffix[32];
     char update_channel[128];
 
-    /* Round up the entire struct to 4096-byte. */
+    // Round up the entire struct to 4096-byte.
     char reserved[1888];
 };
 
@@ -116,26 +124,28 @@
  * Be cautious about the struct size change, in case we put anything post
  * bootloader_message_ab struct (b/29159185).
  */
+#ifndef __UBOOT__
 #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus)
 static_assert(sizeof(struct bootloader_message_ab) == 4096,
               "struct bootloader_message_ab size changes");
 #endif
+#endif /* __UBOOT__ */
 
 #define BOOT_CTRL_MAGIC   0x42414342 /* Bootloader Control AB */
 #define BOOT_CTRL_VERSION 1
 
 struct slot_metadata {
-    /* Slot priority with 15 meaning highest priority, 1 lowest
-     * priority and 0 the slot is unbootable. */
+    // Slot priority with 15 meaning highest priority, 1 lowest
+    // priority and 0 the slot is unbootable.
     uint8_t priority : 4;
-    /* Number of times left attempting to boot this slot. */
+    // Number of times left attempting to boot this slot.
     uint8_t tries_remaining : 3;
-    /* 1 if this slot has booted successfully, 0 otherwise. */
+    // 1 if this slot has booted successfully, 0 otherwise.
     uint8_t successful_boot : 1;
-    /* 1 if this slot is corrupted from a dm-verity corruption, 0
-     * otherwise. */
+    // 1 if this slot is corrupted from a dm-verity corruption, 0
+    // otherwise.
     uint8_t verity_corrupted : 1;
-    /* Reserved for further use. */
+    // Reserved for further use.
     uint8_t reserved : 7;
 } __attribute__((packed));
 
@@ -148,99 +158,99 @@
  * mandatory.
  */
 struct bootloader_control {
-    /* NUL terminated active slot suffix. */
+    // NUL terminated active slot suffix.
     char slot_suffix[4];
-    /* Bootloader Control AB magic number (see BOOT_CTRL_MAGIC). */
+    // Bootloader Control AB magic number (see BOOT_CTRL_MAGIC).
     uint32_t magic;
-    /* Version of struct being used (see BOOT_CTRL_VERSION). */
+    // Version of struct being used (see BOOT_CTRL_VERSION).
     uint8_t version;
-    /* Number of slots being managed. */
+    // Number of slots being managed.
     uint8_t nb_slot : 3;
-    /* Number of times left attempting to boot recovery. */
+    // Number of times left attempting to boot recovery.
     uint8_t recovery_tries_remaining : 3;
-    /* Ensure 4-bytes alignment for slot_info field. */
+    // Ensure 4-bytes alignment for slot_info field.
     uint8_t reserved0[2];
-    /* Per-slot information.  Up to 4 slots. */
+    // Per-slot information.  Up to 4 slots.
     struct slot_metadata slot_info[4];
-    /* Reserved for further use. */
+    // Reserved for further use.
     uint8_t reserved1[8];
-    /* CRC32 of all 28 bytes preceding this field (little endian
-     * format). */
+    // CRC32 of all 28 bytes preceding this field (little endian
+    // format).
     uint32_t crc32_le;
 } __attribute__((packed));
 
+#ifndef __UBOOT__
 #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus)
 static_assert(sizeof(struct bootloader_control) ==
               sizeof(((struct bootloader_message_ab *)0)->slot_suffix),
               "struct bootloader_control has wrong size");
 #endif
+#endif /* __UBOOT__ */
 
 #ifndef __UBOOT__
-
 #ifdef __cplusplus
 
 #include <string>
 #include <vector>
 
-/* Return the block device name for the bootloader message partition and waits
- * for the device for up to 10 seconds. In case of error returns the empty
- * string. */
+// Return the block device name for the bootloader message partition and waits
+// for the device for up to 10 seconds. In case of error returns the empty
+// string.
 std::string get_bootloader_message_blk_device(std::string* err);
 
-/* Read bootloader message into boot. Error message will be set in err. */
+// Read bootloader message into boot. Error message will be set in err.
 bool read_bootloader_message(bootloader_message* boot, std::string* err);
 
-/* Read bootloader message from the specified misc device into boot. */
+// Read bootloader message from the specified misc device into boot.
 bool read_bootloader_message_from(bootloader_message* boot, const std::string& misc_blk_device,
                                   std::string* err);
 
-/* Write bootloader message to BCB. */
+// Write bootloader message to BCB.
 bool write_bootloader_message(const bootloader_message& boot, std::string* err);
 
-/* Write bootloader message to the specified BCB device. */
+// Write bootloader message to the specified BCB device.
 bool write_bootloader_message_to(const bootloader_message& boot,
                                  const std::string& misc_blk_device, std::string* err);
 
-/* Write bootloader message (boots into recovery with the options) to BCB. Will
- * set the command and recovery fields, and reset the rest. */
+// Write bootloader message (boots into recovery with the options) to BCB. Will
+// set the command and recovery fields, and reset the rest.
 bool write_bootloader_message(const std::vector<std::string>& options, std::string* err);
 
-/* Write bootloader message (boots into recovery with the options) to the specific BCB device. Will
- * set the command and recovery fields, and reset the rest. */
+// Write bootloader message (boots into recovery with the options) to the specific BCB device. Will
+// set the command and recovery fields, and reset the rest.
 bool write_bootloader_message_to(const std::vector<std::string>& options,
                                  const std::string& misc_blk_device, std::string* err);
 
-/* Update bootloader message (boots into recovery with the options) to BCB. Will
- * only update the command and recovery fields. */
+// Update bootloader message (boots into recovery with the options) to BCB. Will
+// only update the command and recovery fields.
 bool update_bootloader_message(const std::vector<std::string>& options, std::string* err);
 
-/* Update bootloader message (boots into recovery with the |options|) in |boot|. Will only update
- * the command and recovery fields. */
+// Update bootloader message (boots into recovery with the |options|) in |boot|. Will only update
+// the command and recovery fields.
 bool update_bootloader_message_in_struct(bootloader_message* boot,
                                          const std::vector<std::string>& options);
 
-/* Clear BCB. */
+// Clear BCB.
 bool clear_bootloader_message(std::string* err);
 
-/* Writes the reboot-bootloader reboot reason to the bootloader_message. */
+// Writes the reboot-bootloader reboot reason to the bootloader_message.
 bool write_reboot_bootloader(std::string* err);
 
-/* Read the wipe package from BCB (from offset WIPE_PACKAGE_OFFSET_IN_MISC). */
+// Read the wipe package from BCB (from offset WIPE_PACKAGE_OFFSET_IN_MISC).
 bool read_wipe_package(std::string* package_data, size_t size, std::string* err);
 
-/* Write the wipe package into BCB (to offset WIPE_PACKAGE_OFFSET_IN_MISC). */
+// Write the wipe package into BCB (to offset WIPE_PACKAGE_OFFSET_IN_MISC).
 bool write_wipe_package(const std::string& package_data, std::string* err);
 
 #else
 
 #include <stdbool.h>
 
-/* C Interface. */
+// C Interface.
 bool write_bootloader_message(const char* options);
 bool write_reboot_bootloader(void);
 
-#endif  /* ifdef __cplusplus */
-
+#endif  // ifdef __cplusplus
 #endif  /* __UBOOT__ */
 
 #endif  /* __ANDROID_BOOTLOADER_MESSAGE_H */
