aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>2020-08-31 12:58:19 +0300
committerSimon Glass <sjg@chromium.org>2020-09-22 12:50:43 -0600
commit3fdeb14d951b28fa18494b4c3f819ad33b5fcc09 (patch)
tree52363fd0590e1115ffbd41eee6d530f2e75c952b
parent8001d0b162183493ee31b9e578756e450f673745 (diff)
downloadu-boot-3fdeb14d951b28fa18494b4c3f819ad33b5fcc09.zip
u-boot-3fdeb14d951b28fa18494b4c3f819ad33b5fcc09.tar.gz
u-boot-3fdeb14d951b28fa18494b4c3f819ad33b5fcc09.tar.bz2
binman: Respect pad-before property of section subentries
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>
-rw-r--r--tools/binman/etype/section.py2
-rw-r--r--tools/binman/ftest.py8
-rw-r--r--tools/binman/test/166_pad_in_sections.dts26
3 files changed, 35 insertions, 1 deletions
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index c5166a5..72600b1 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -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
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index ab88ee9..53da709 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -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
index 0000000..f2b327f
--- /dev/null
+++ b/tools/binman/test/166_pad_in_sections.dts
@@ -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";
+ };
+ };
+ };
+};