cros_bundle_firmware: Add option to specify EC binary

The EC (Embedded Controller) is a separate microprocessor in the system which
also has firmware. Allow this as a new file which can be placed in a blob in
the flash map.

BUG=chromium-os:32034
TEST=manual
$ FEATURES=test emerge-daisy cros-devutils
Run cros_bundle_firmware with -e option and see that it completes
successfully.

Change-Id: I44abd16d8a3154f91a20e332f53eb5d0c4ee2c12
Reviewed-on: https://gerrit.chromium.org/gerrit/25861
Commit-Ready: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
diff --git a/host/lib/bundle_firmware.py b/host/lib/bundle_firmware.py
index 8b7b5f6..fa3a8be 100644
--- a/host/lib/bundle_firmware.py
+++ b/host/lib/bundle_firmware.py
@@ -104,6 +104,7 @@
     self.exynos_bl2 = None      # Filename of Exynos BL2 (SPL)
     self.spl_source = 'straps'  # SPL boot according to board settings
     self.skeleton_fname = None  # Filename of Coreboot skeleton file
+    self.ecbin_fname = None     # Filename of EC file
 
   def SetDirs(self, keydir):
     """Set up directories required for Bundle.
@@ -115,7 +116,7 @@
 
   def SetFiles(self, board, bct, uboot=None, bmpblk=None, coreboot=None,
                postload=None, seabios=None, exynos_bl1=None, exynos_bl2=None,
-               skeleton=None):
+               skeleton=None, ecbin=None):
     """Set up files required for Bundle.
 
     Args:
@@ -129,6 +130,7 @@
       exynos_bl1: The filename of the exynos BL1 file
       exynos_bl2: The filename of the exynos BL2 file (U-Boot spl)
       skeleton: The filename of the coreboot skeleton file.
+      ecbin: The filename of the EC (Embedded Controller) file.
     """
     self._board = board
     self.uboot_fname = uboot
@@ -140,6 +142,7 @@
     self.exynos_bl1 = exynos_bl1
     self.exynos_bl2 = exynos_bl2
     self.skeleton_fname = skeleton
+    self.ecbin_fname = ecbin
 
   def SetOptions(self, small):
     """Set up options supported by Bundle.
@@ -189,6 +192,8 @@
       self.coreboot_fname = os.path.join(build_root, 'coreboot.rom')
     if not self.skeleton_fname:
       self.skeleton_fname = os.path.join(build_root, 'skeleton.bin')
+    if not self.ecbin_fname:
+      self.ecbin_fname = os.path.join(build_root, 'ec.RW.bin')
 
   def GetFiles(self):
     """Get a list of files that we know about.
@@ -719,6 +724,8 @@
       pack.AddProperty('image', signed)
     elif blob_type == 'exynos-bl1':
       pack.AddProperty(blob_type, self.exynos_bl1)
+    elif blob_type == 'ecbin':
+      pack.AddProperty(blob_type, self.ecbin_fname)
     elif blob_type == 'exynos-bl2':
       spl_load_size = os.stat(pack.GetProperty('boot+dtb')).st_size
       bl2 = self.ConfigureExynosBl2(fdt, spl_load_size, self.exynos_bl2)