All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Abbott <andrew@mirx.dev>
To: u-boot@lists.denx.de
Cc: Andrew Abbott <andrew@mirx.dev>, Simon Glass <sjg@chromium.org>,
	Philipp Tomsich <philipp.tomsich@vrull.eu>,
	Kever Yang <kever.yang@rock-chips.com>,
	Peter Robinson <pbrobinson@gmail.com>,
	Akash Gajjar <akash@openedev.com>,
	Jagan Teki <jagan@amarulasolutions.com>,
	Samuel Dionne-Riel <samuel@dionne-riel.com>
Subject: [RFC PATCH 1/8] binman: mkimage: Support ':'-separated inputs
Date: Mon, 25 Apr 2022 10:03:22 +1000	[thread overview]
Message-ID: <20220425000329.28124-2-andrew@mirx.dev> (raw)
In-Reply-To: <20220425000329.28124-1-andrew@mirx.dev>

mkimage supports combining multiple input binaries separating them
with colons (':'). This is used at least for Rockchip platforms to
encode payload offsets and sizes in the image header. It is required for
Rockchip SPI boot since for the rkspi format, after the input binary
combining, the entire image is spread across only the first 2K bytes of
each 4K block.

Previous to this change, multiple inputs to a binman mkimage node would
just be concatenated and the combined input would be passed as the -d
argument to mkimage. Now, the inputs are instead passed colon-separated.

Signed-off-by: Andrew Abbott <andrew@mirx.dev>
---

This is a bit of a messy implementation for now and would probably break
existing uses of mkimage that rely on the concatenation behaviour.

Questions: 

- Should this be a separate entry type, or an option to the mkimage
entry type that enables this behaviour?

- What kind of test(s) should I add?

---
 tools/binman/etype/mkimage.py | 33 +++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/tools/binman/etype/mkimage.py b/tools/binman/etype/mkimage.py
index 5f6def2287..8cea618fbd 100644
--- a/tools/binman/etype/mkimage.py
+++ b/tools/binman/etype/mkimage.py
@@ -51,21 +51,30 @@ class Entry_mkimage(Entry):
         self.ReadEntries()
 
     def ObtainContents(self):
-        # Use a non-zero size for any fake files to keep mkimage happy
-        data, input_fname, uniq = self.collect_contents_to_file(
-            self._mkimage_entries.values(), 'mkimage', 1024)
-        if data is None:
-            return False
-        output_fname = tools.get_output_filename('mkimage-out.%s' % uniq)
-        if self.mkimage.run_cmd('-d', input_fname, *self._args,
-                                output_fname) is not None:
+        # For multiple inputs to mkimage, we want to separate them by colons.
+        # This is needed for eg. the rkspi format, which treats the first data
+        # file as the "init" and the second as "boot" and sets the image header
+        # accordingly, then makes the image so that only the first 2 KiB of each
+        # 4KiB block is used.
+
+        data_filenames = []
+        for entry in self._mkimage_entries.values():
+            # First get the input data and put it in a file. If any entry is not
+            # available, try later.
+            if not entry.ObtainContents():
+                return False
+
+            input_fname = tools.get_output_filename('mkimage-in.%s' % entry.GetUniqueName())
+            data_filenames.append(input_fname)
+            tools.write_file(input_fname, entry.GetData())
+
+        output_fname = tools.get_output_filename('mkimage-out.%s' % self.GetUniqueName())
+        if self.mkimage.run_cmd('-d', ":".join(data_filenames), *self._args, output_fname):
             self.SetContents(tools.read_file(output_fname))
+            return True
         else:
-            # Bintool is missing; just use the input data as the output
             self.record_missing_bintool(self.mkimage)
-            self.SetContents(data)
-
-        return True
+            return False
 
     def ReadEntries(self):
         """Read the subnodes to find out what should go in this image"""
-- 
2.35.3


  reply	other threads:[~2022-04-25  0:04 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-25  0:03 [RFC PATCH 0/8] Build Rockchip final images using binman Andrew Abbott
2022-04-25  0:03 ` Andrew Abbott [this message]
2022-04-25  0:03 ` [RFC PATCH 2/8] rockchip: Add binman definitions for final images Andrew Abbott
2022-04-27  9:22   ` Johan Jonker
2022-05-04  9:52     ` Andrew Abbott
2022-05-19 11:35     ` Alper Nebi Yasak
2022-04-25  0:03 ` [RFC PATCH 3/8] soc: rockchip: Include common U-Boot dtsi file Andrew Abbott
2022-04-25  0:03 ` [RFC PATCH 4/8] board: rockchip: Move SPI U-Boot offset to config Andrew Abbott
2022-04-25  0:03 ` [RFC PATCH 5/8] rockchip: Remove obsolete Makefile targets Andrew Abbott
2022-04-25  0:03 ` [RFC PATCH 6/8] rockchip: Enable binman for ARM64 Andrew Abbott
2022-04-25  0:03 ` [RFC PATCH 7/8] doc: rockchip: Update for new binman image generation Andrew Abbott
2022-04-25  0:03 ` [RFC PATCH 8/8] board: rockpro64: Enable building SPI image Andrew Abbott

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220425000329.28124-2-andrew@mirx.dev \
    --to=andrew@mirx.dev \
    --cc=akash@openedev.com \
    --cc=jagan@amarulasolutions.com \
    --cc=kever.yang@rock-chips.com \
    --cc=pbrobinson@gmail.com \
    --cc=philipp.tomsich@vrull.eu \
    --cc=samuel@dionne-riel.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.