binman: Place Intel descriptor at image start
authorSimon Glass <sjg@chromium.org>
Sat, 20 Jul 2019 18:24:01 +0000 (12:24 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 29 Jul 2019 15:38:06 +0000 (09:38 -0600)
The Intel descriptor must always appear at the start of an (x86) image,
so it is supposed to position itself there always. However there is no
explicit test for this. Add one and fix a bug introduced by the recent
change to adjust Entry to read the node in a separate call.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/etype/intel_descriptor.py
tools/binman/ftest.py
tools/binman/test/141_descriptor_offset.dts [new file with mode: 0644]

index adea578080c4ee48dbdc83635e1087d9d6ac2b09..fb5e889ebff92552e0952e83392fde500cbd421f 100644 (file)
@@ -47,8 +47,12 @@ class Entry_intel_descriptor(Entry_blob):
     def __init__(self, section, etype, node):
         Entry_blob.__init__(self, section, etype, node)
         self._regions = []
+
+    def Pack(self, offset):
+        """Put this entry at the start of the image"""
         if self.offset is None:
-            self.offset = self.section.GetStartOffset()
+            offset = self.section.GetStartOffset()
+        return Entry_blob.Pack(self, offset)
 
     def GetOffsets(self):
         offset = self.data.find(FD_SIGNATURE)
index 11155ced70974319c9bcc2614a6e2ef6b9d0d927..d1ecd65c2c36ed4b49993701e46208ccff8557e5 100644 (file)
@@ -2975,6 +2975,15 @@ class TestFunctional(unittest.TestCase):
         self.assertEqual(U_BOOT_DATA, data[2:2 + len(U_BOOT_DATA)])
         self.assertEqual(b'a\0', data[-2:])
 
+    def testDescriptorOffset(self):
+        """Test that the Intel descriptor is always placed at at the start"""
+        data = self._DoReadFileDtb('141_descriptor_offset.dts')
+        image = control.images['image']
+        entries = image.GetEntries()
+        desc = entries['intel-descriptor']
+        self.assertEqual(0xff800000, desc.offset);
+        self.assertEqual(0xff800000, desc.image_pos);
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/141_descriptor_offset.dts b/tools/binman/test/141_descriptor_offset.dts
new file mode 100644 (file)
index 0000000..f9bff01
--- /dev/null
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       binman {
+               sort-by-offset;
+               end-at-4gb;
+               size = <0x800000>;
+               u-boot {
+                       offset = <0xffff0000>;
+               };
+               intel-descriptor {
+                       filename = "descriptor.bin";
+               };
+       };
+};