[PATCH 2/2] tools: amlimage: Add support for GXBB eMMC header

Ferass El Hafidi funderscore at postmarketos.org
Sun Jan 5 11:24:53 CET 2025


Hi Jonas and Simon,

On Sat Jan 4, 2025 at 10:23 PM UTC, Jonas Karlman wrote:
> Hi Simon,
>
> On 2025-01-04 20:31, Simon Glass wrote:
> > Hi Jonas,
> > 
> > On Sat, 4 Jan 2025 at 10:59, Jonas Karlman <jonas at kwiboo.se> wrote:
> >>
> >> GXBB BL1 only tries to read boot image from sector 0 on eMMC and sector
> >> 1 on SD-card. GXL and newer read boot image from sector 1 on both eMMC
> >> and SD-card.
> >>
> >> Vendor BL2 have solved the issue with different offsets by considering
> >> where BL2 was loaded from to adjust the offset where BL3 is read from.
> >>
> >> This provide a different solution to create a boot image that can be
> >> booted from both eMMC and SD-card and where the offset for reading next
> >> stage loader can be shared for both boot options.
> >>
> >> Inject code, that relocate the payload located at 0x1200 offset in TZRAM
> >> to the expected offset of 0x1000, into the padding area at offset 0x200
> >> when a normal GXBB boot image is created. A special GXBB eMMC header can
> >> then be created that have the payload offset point to this relocate
> >> code, BL1 will jump to this relocate code when booted from eMMC instead
> >> of the normal payload start. One effect of this is that the payload size
> >> limit must be reduced by 512 bytes on GXBB.
> >>
> >> Example of how to use it:
> >>   # Create a normal boot image
> >>   tools/mkimage -T amlimage -n gxbb -d u-boot-spl.bin bl2.bin
> >>
> >>   # Create a boot image with a special eMMC header
> >>   tools/mkimage -T amlimage -n emmc -d bl2.bin bl2-emmc.bin
> >>
> >>   # Write normal boot image to sector 1 of eMMC/SD-card
> >>   dd if=bl2.bin of=/path/to/dev bs=512 seek=1
> >>
> >>   # Write eMMC header, 112 bytes, to start of eMMC
> >>   dd if=bl2-emmc.bin of=/path/to/dev bs=1 count=112
> >>
> >> Or with binman using something like:
> >>   binman {
> >>         multiple-images;
> >>
> >>         u-boot-gxbb-sd {
> >>                 filename = "u-boot-gxbb-sd.bin";
> >>                 pad-byte = <0xff>;
> >>
> >>                 mkimage {
> >>                         filename = "bl2.bin";
> >>                         args = "-n", "gxbb", "-T", "amlimage";
> >>
> >>                         u-boot-spl {
> >>                         };
> >>                 };
> >>         };
> >>
> >>         u-boot-gxbb-emmc {
> >>                 filename = "u-boot-gxbb-emmc.bin";
> >>                 pad-byte = <0xff>;
> >>
> >>                 mkimage {
> >>                         filename = "bl2-emmc.bin";
> >>                         args = "-n", "emmc", "-T", "amlimage";
> >>
> >>                         blob-ext {
> >>                                 filename = "bl2.bin";
> >>                         }
> >>                 };
> >>         };
> >>   };
> >>
> >> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
> >> ---
> >>  tools/amlimage-gxbb-relocate.c | 79 ++++++++++++++++++++++++++++++++++
> >>  tools/amlimage.c               | 37 ++++++++++++++++
> >>  2 files changed, 116 insertions(+)
> >>  create mode 100644 tools/amlimage-gxbb-relocate.c
> >>
> > 
> > I sent [1] some years ago and would quite like to enable the odroid-c2
> > in my lab. Is that an older version of what you are supporting here?
>
> The amlimage type in this series is only for creating an image format
> that the SoCs BootROM (BL1) can understand. This image type will most
> likely only be useful together with Ferass El Hafidi's U-Boot SPL work
> or for someone wanting to run bare metal code from SRAM on these SoCs.

I'm happy to announce that U-Boot SPL can now boot on gxbb and gxl SoCs,
and I'll be sending some patches to upstream that work later on.

>
> Vendor bl2.bin blobs is based on TF-A, is already in correct image
> format and expect next stage payload to be signed using a Amlogic FIP
> format. For this you will still need to use vendor tools or open source
> tools like meson-tools, gxlimg or meson64-tools.
>
> The amlogic-boot-fip repo [2] has blobs, vendor tools and Makefiles to
> combine the blobs with a U-Boot proper u-boot.bin to create a firmware
> image that should boot for a wide range of boards.
>
> [2] https://github.com/LibreELEC/amlogic-boot-fip
>
> > 
> > I heard that there are people working on open source tools, but it has
> > been a few years and I'd be quite OK to just use vendor tools.
>
> Open-source tools exist to replace the binary-only Amlogic tools:
> - https://github.com/afaerber/meson-tools (GXBB, GXL & GXM only)
> - https://github.com/repk/gxlimg (GXBB, GXL, GXM & AXG only)
> - https://github.com/angerman/meson64-tools (developed for G12B, should work on G12A & SM1)

gxlimg now also supports G12A/G12B, but it does not support GXBB at the
time of writing.

>
> Would be nice if someone would combine those into a mkimage amlfip type
> or similar (a different format than this amlimage format).
>
> > 
> > For your docs, could you put them in doc/ instead?
>
> Not fully sure what you want me to put in doc/, please be specific. The
> code comments and commit message should already document as much as
> possible until there is upstream use of the GXBB eMMC header workaround.
>
> At such time something like following could be documented:
>
>   Write image to SD-card or eMMC module:
>     dd if=u-boot-amlogic.bin of=/path/to/dev bs=512 seek=1 conv=fsync,notrunc
>
>   Write the eMMC header to eMMC module:
>     dd if=u-boot-gxbb-emmc.bin of=/path/to/dev bs=1 count=112 conv=fsync,notrunc
>
> Until Ferass El Hafidi's U-Boot SPL work has made its way upstream such
> commands and information would purely be speculative and will be easier
> to document in a future series.

Yes, my tree has documentation on how to make use of images generated by
amlimage.  I believe such documentation should be documented when there
actually is U-Boot SPL support as well.

Best regards.

>
> Regards,
> Jonas
>
> > 
> > [..]
> > 
> > Regards,
> > Simon
> > 
> > [1] https://patchwork.ozlabs.org/project/uboot/patch/20211124040954.699821-8-sjg@chromium.org/


More information about the U-Boot mailing list