cros_bundle_firmware: Support early-firmware-selection blob types
When early-firmware-selection is enabled, we use the 'type,efs' field instead
of 'type'. This allows us to specify different blobs in that case.
Enable 'early-firmware-selection' as a boolean property in /chromeos-config
and provide a --efs option to force it to be enabled for convenience during
development.
BUG=chrome-os-partner:21115
TEST=FEATURES=test sudo -E emerge cros-devutils
Not specifically tested yet. Tested by later commits.
Change-Id: I7d77508d7c8cdc7fcd243b4240476a9c34231532
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/62962
diff --git a/host/lib/bundle_firmware.py b/host/lib/bundle_firmware.py
index 13dacde..cf73204 100644
--- a/host/lib/bundle_firmware.py
+++ b/host/lib/bundle_firmware.py
@@ -223,6 +223,7 @@
self._board = None # Board name, e.g. tegra2_seaboard.
self._fdt_fname = None # Filename of our FDT.
self._force_rw = None
+ self._force_efs = None
self._gbb_flags = None
self._keydir = None
self._small = False
@@ -289,7 +290,7 @@
self.kernel_fname = kernel
self.blobs = dict(blobs or ())
- def SetOptions(self, small, gbb_flags, force_rw=False):
+ def SetOptions(self, small, gbb_flags, force_rw=False, force_efs=False):
"""Set up options supported by Bundle.
Args:
@@ -298,10 +299,13 @@
U-Boot part while keeping the keys, gbb, etc. the same.
gbb_flags: Specification for string containing adjustments to make.
force_rw: Force firmware into RW mode.
+ force_efs: Force firmware to use 'early firmware selection' feature,
+ where RW firmware is selected before SDRAM is initialized.
"""
self._small = small
self._gbb_flags = gbb_flags
self._force_rw = force_rw
+ self._force_efs = force_efs
def _GetBuildRoot(self):
"""Get the path to this board's 'firmware' directory.
@@ -905,6 +909,8 @@
if self._force_rw:
fdt.PutInteger('/flash/rw-a-vblock', 'preamble-flags', 0)
fdt.PutInteger('/flash/rw-b-vblock', 'preamble-flags', 0)
+ if self._force_efs:
+ fdt.PutInteger('/chromeos-config', 'early-firmware-selection', 1)
if not fdt.GetProp('/flash', 'reg', ''):
fdt.InsertNodes(default_flashmap)