]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
binman: Respect pad-before property of section subentries
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>
Mon, 31 Aug 2020 09:58:19 +0000 (12:58 +0300)
committerSimon Glass <sjg@chromium.org>
Tue, 22 Sep 2020 18:50:43 +0000 (12:50 -0600)
Other relevant properties (pad-after, offset, size, align, align-size,
align-end) already work since Pack() sets correct ranges for subentries'
data (.offset, .size variables), but some padding here is necessary to
align the data within this range to match the pad-before property.

Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
tools/binman/etype/section.py
tools/binman/ftest.py
tools/binman/test/166_pad_in_sections.dts [new file with mode: 0644]

index c5166a5b579c8986739674576f0349beb4ab7261..72600b1ef3a4b7660c23986e83de7ccf0c164714 100644 (file)
@@ -152,7 +152,7 @@ class Entry_section(Entry):
         for entry in self._entries.values():
             data = entry.GetData()
             base = self.pad_before + (entry.offset or 0) - self._skip_at_start
-            pad = base - len(section_data)
+            pad = base - len(section_data) + (entry.pad_before or 0)
             if pad > 0:
                 section_data += tools.GetBytes(self._pad_byte, pad)
             section_data += data
index ab88ee96ab4217ff33af0f2f63143b1c372afcd8..53da709d513a91d9015a2a3a9abcd725a1245bb2 100644 (file)
@@ -3483,5 +3483,13 @@ class TestFunctional(unittest.TestCase):
         expected = (U_BOOT_DATA + U_BOOT_DATA)
         self.assertEqual(expected, data)
 
+    def testPadInSections(self):
+        """Test pad-before, pad-after for entries in sections"""
+        data = self._DoReadFile('166_pad_in_sections.dts')
+        expected = (U_BOOT_DATA + tools.GetBytes(ord('!'), 12) +
+                    U_BOOT_DATA + tools.GetBytes(ord('!'), 6) +
+                    U_BOOT_DATA)
+        self.assertEqual(expected, data)
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/166_pad_in_sections.dts b/tools/binman/test/166_pad_in_sections.dts
new file mode 100644 (file)
index 0000000..f2b327f
--- /dev/null
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       binman {
+               pad-byte = <0x26>;
+               section {
+                       pad-byte = <0x21>;
+
+                       before {
+                               type = "u-boot";
+                       };
+                       u-boot {
+                               pad-before = <12>;
+                               pad-after = <6>;
+                       };
+                       after {
+                               type = "u-boot";
+                       };
+               };
+       };
+};