cros_bundle_firmware: Move FDT GBB flag decoding into a function
This is a bit unwieldy where it is. Move it out, and put the list of flags
at the top level so it can be accessed outside the class.
BUG=chromium-os:33312
TEST=manual
$ cros_bundle_firmware -b daisy -v3
See that it spots our flags from the FDT still:
FDT: Enabling gbb-flag-force-dev-boot-usb.
FDT: Enabling gbb-flag-dev-screen-short-delay.
FDT: Enabling gbb-flag-force-dev-switch-on.
FDT: Enabling gbb-flag-disable-fw-rollback-check.
GBB flags value 0x39
Change-Id: I2de80ec967aa09d57999e69cb145e238e07739f8
Reviewed-on: https://gerrit.chromium.org/gerrit/36391
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
Commit-Ready: Simon Glass <sjg@chromium.org>
diff --git a/host/lib/bundle_firmware.py b/host/lib/bundle_firmware.py
index af60d7f..75d5f77 100644
--- a/host/lib/bundle_firmware.py
+++ b/host/lib/bundle_firmware.py
@@ -56,6 +56,19 @@
- [ dev_en, rec_en, yuck_en, ins_en ]
'''
+# Build GBB flags.
+# (src/platform/vboot_reference/firmware/include/gbb_header.h)
+gbb_flag_properties = {
+ 'dev-screen-short-delay': 0x00000001,
+ 'load-option-roms': 0x00000002,
+ 'enable-alternate-os': 0x00000004,
+ 'force-dev-switch-on': 0x00000008,
+ 'force-dev-boot-usb': 0x00000010,
+ 'disable-fw-rollback-check': 0x00000020,
+ 'enter-triggers-tonorm': 0x00000040,
+ 'force-dev-boot-legacy': 0x00000080,
+}
+
class Bundle:
"""This class encapsulates the entire bundle firmware logic.
@@ -227,6 +240,33 @@
}
return file_list
+ def DecodeGBBFlagsFromFdt(self):
+ """Get Google Binary Block flags from the FDT.
+
+ These should be in the chromeos-config node, like this:
+
+ chromeos-config {
+ gbb-flag-dev-screen-short-delay;
+ gbb-flag-force-dev-switch-on;
+ gbb-flag-force-dev-boot-usb;
+ gbb-flag-disable-fw-rollback-check;
+ };
+
+ Returns:
+ GBB flags value from FDT.
+ """
+ chromeos_config = self.fdt.GetProps("/chromeos-config")
+ gbb_flags = 0
+ for name in chromeos_config:
+ if name.startswith('gbb-flag-'):
+ flag_value = gbb_flag_properties.get(name[9:])
+ if flag_value:
+ gbb_flags |= flag_value
+ self._out.Notice("FDT: Enabling %s." % name)
+ else:
+ raise ValueError("FDT contains invalid GBB flags '%s'" % name)
+ return gbb_flags
+
def _CreateGoogleBinaryBlock(self, hardware_id):
"""Create a GBB for the image.
@@ -245,27 +285,9 @@
gbb_size = self.fdt.GetFlashPartSize('ro', 'gbb')
odir = self._tools.outdir
- chromeos_config = self.fdt.GetProps("/chromeos-config")
- # Build GBB flags.
- # (src/platform/vboot_reference/firmware/include/gbb_header.h)
- flag_properties = {
- 'fast-developer-mode': 0x01,
- 'gbb-flag-dev-screen-short-delay': 0x00000001,
- 'gbb-flag-load-option-roms': 0x00000002,
- 'gbb-flag-enable-alternate-os': 0x00000004,
- 'gbb-flag-force-dev-switch-on': 0x00000008,
- 'gbb-flag-force-dev-boot-usb': 0x00000010,
- 'gbb-flag-disable-fw-rollback-check': 0x00000020,
- 'gbb-flag-enter-triggers-tonorm': 0x00000040,
- 'gbb-flag-force-dev-boot-legacy': 0x00000080,
- }
- gbb_flags = 0
- for flag_name, flag_value in flag_properties.items():
- if flag_name not in chromeos_config:
- continue
- gbb_flags |= flag_value
- self._out.Notice("Enabling %s." % flag_name)
+ gbb_flags = self.DecodeGBBFlagsFromFdt()
+ self._out.Notice("GBB flags value %#x" % gbb_flags)
self._out.Progress('Creating GBB')
sizes = [0x100, 0x1000, gbb_size - 0x2180, 0x1000]
sizes = ['%#x' % size for size in sizes]