summaryrefslogtreecommitdiff
path: root/tools/binman
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-06-01 09:38:11 -0600
committerSimon Glass <sjg@chromium.org>2018-06-07 11:25:07 -0800
commitdd57c13bbc28df6f1bc849ec55d1703f4ca0398e (patch)
tree28401cbca4c07d4cde33fc1944a100c46378fd92 /tools/binman
parent48ae412424ddfda64f45a9d679a960357e57433e (diff)
binman: Allow unit addresses for binaries
Allow the same binary to appear multiple times in an image by using the device-tree unit-address feature (u-boot@0, u-boot@1). Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/binman')
-rw-r--r--tools/binman/README4
-rw-r--r--tools/binman/etype/entry.py5
-rw-r--r--tools/binman/ftest.py5
-rw-r--r--tools/binman/test/54_unit_address.dts15
4 files changed, 29 insertions, 0 deletions
diff --git a/tools/binman/README b/tools/binman/README
index b20098177e..196dda1fb4 100644
--- a/tools/binman/README
+++ b/tools/binman/README
@@ -387,6 +387,10 @@ end-at-4gb:
Examples of the above options can be found in the tests. See the
tools/binman/test directory.
+It is possible to have the same binary appear multiple times in the image,
+either by using a unit number suffix (u-boot@0, u-boot@1) or by using a
+different name for each and specifying the type with the 'type' attribute.
+
Special properties
------------------
diff --git a/tools/binman/etype/entry.py b/tools/binman/etype/entry.py
index c331312c49..23e436a2e9 100644
--- a/tools/binman/etype/entry.py
+++ b/tools/binman/etype/entry.py
@@ -72,7 +72,12 @@ class Entry(object):
"""
if not etype:
etype = fdt_util.GetString(node, 'type', node.name)
+
+ # Convert something like 'u-boot@0' to 'u_boot' since we are only
+ # interested in the type.
module_name = etype.replace('-', '_')
+ if '@' in module_name:
+ module_name = module_name.split('@')[0]
module = modules.get(module_name)
# Import the module if we have not already done so.
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index a3abbc4b84..b5e8736fbb 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -909,6 +909,11 @@ class TestFunctional(unittest.TestCase):
sym_values + U_BOOT_SPL_DATA[16:])
self.assertEqual(expected, data)
+ def testPackUnitAddress(self):
+ """Test that we support multiple binaries with the same name"""
+ data = self._DoReadFile('54_unit_address.dts')
+ self.assertEqual(U_BOOT_DATA + U_BOOT_DATA, data)
+
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/test/54_unit_address.dts b/tools/binman/test/54_unit_address.dts
new file mode 100644
index 0000000000..3216dbbcc1
--- /dev/null
+++ b/tools/binman/test/54_unit_address.dts
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ u-boot@0 {
+ };
+ u-boot@1 {
+ };
+ };
+};