binman: Don't assume there is an ME region
authorSimon Glass <sjg@chromium.org>
Mon, 8 Jul 2019 19:18:38 +0000 (13:18 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 24 Jul 2019 03:27:57 +0000 (20:27 -0700)
At present having a descriptor means that there is an ME (Intel
Management Engine) entry as well. The descriptor provides the ME location
and assumes that it is present.

For some SoCs this is not true. Before providing the location of a
potentially non-existent entry, check if it is present.

Update the comment in the ME entry also.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/README.entries
tools/binman/entry.py
tools/binman/etype/intel_descriptor.py
tools/binman/etype/intel_me.py

index 357946d630504135ff773da0fb0dc78ef00b1bec..702fc9fda08c457eaa08811a5d16ed350b2bd1dd 100644 (file)
@@ -206,6 +206,8 @@ does not directly execute code in the ME binary.
 
 A typical filename is 'me.bin'.
 
+The position of this entry is generally set by the intel-descriptor entry.
+
 See README.x86 for information about x86 binary blobs.
 
 
index e8d0adec1e97f762ca1c3559dc13c2e0b8153f61..7ead997e0fdbd2907ec3109723e8722d86e4345b 100644 (file)
@@ -544,3 +544,12 @@ features to produce new behaviours.
             # the data grows. This should not fail, but check it to be sure.
             if not self.ObtainContents():
                 self.Raise('Cannot obtain contents when expanding entry')
+
+    def HasSibling(self, name):
+        """Check if there is a sibling of a given name
+
+        Returns:
+            True if there is an entry with this name in the the same section,
+                else False
+        """
+        return name in self.section.GetEntries()
index 661063457eda6e6edfd218fd772810e1c105a3be..65ba2391e69821fc3d984f0abb621ea43fb49a6a 100644 (file)
@@ -60,6 +60,10 @@ class Entry_intel_descriptor(Entry_blob):
         for i in range(MAX_REGIONS):
             self._regions.append(Region(self.data, frba, i))
 
-        # Set the offset for ME only, for now, since the others are not used
-        return {'intel-me': [self._regions[REGION_ME].base,
-                             self._regions[REGION_ME].size]}
+        # Set the offset for ME (Management Engine) only, for now, since the
+        # others are not used
+        info = {}
+        if self.HasSibling('intel-me'):
+            info['intel-me'] = [self._regions[REGION_ME].base,
+                                self._regions[REGION_ME].size]
+        return info
index 247c5b33866df7c82248be22bdfb9768e074bdc3..c932ec5222563322e3ebc52bfadb189d01655830 100644 (file)
@@ -22,6 +22,8 @@ class Entry_intel_me(Entry_blob):
 
     A typical filename is 'me.bin'.
 
+    The position of this entry is generally set by the intel-descriptor entry.
+
     See README.x86 for information about x86 binary blobs.
     """
     def __init__(self, section, etype, node):